@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
@@ -24,16 +24,18 @@ type BuildData = CodecWriteOptions & {
24
24
 
25
25
  export const detachedFieldIndexCodecBuilder = ClientVersionDispatchingCodecBuilder.build(
26
26
  "DetachedFieldIndex",
27
- {
28
- [lowestMinVersionForCollab]: {
27
+ [
28
+ {
29
+ minVersionForCollab: lowestMinVersionForCollab,
29
30
  formatVersion: DetachedFieldIndexFormatVersion.v1,
30
31
  codec: (buildData: BuildData) =>
31
32
  makeDetachedNodeToFieldCodecV1(buildData.revisionTagCodec, buildData.idCompressor),
32
33
  },
33
- [FluidClientVersion.v2_52]: {
34
+ {
35
+ minVersionForCollab: FluidClientVersion.v2_52,
34
36
  formatVersion: DetachedFieldIndexFormatVersion.v2,
35
37
  codec: (buildData: BuildData) =>
36
38
  makeDetachedNodeToFieldCodecV2(buildData.revisionTagCodec, buildData.idCompressor),
37
39
  },
38
- },
40
+ ],
39
41
  );
@@ -402,7 +402,7 @@ function detachPass(
402
402
  config: PassConfig,
403
403
  ): void {
404
404
  let index = 0;
405
- for (const mark of fieldChanges) {
405
+ for (const mark of fieldChanges.marks) {
406
406
  if (mark.fields !== undefined) {
407
407
  assert(
408
408
  mark.attach === undefined || mark.detach !== undefined,
@@ -512,7 +512,7 @@ function attachPass(
512
512
  config: PassConfig,
513
513
  ): void {
514
514
  let index = 0;
515
- for (const mark of fieldChanges) {
515
+ for (const mark of fieldChanges.marks) {
516
516
  if (mark.attach !== undefined) {
517
517
  for (let i = 0; i < mark.count; i += 1) {
518
518
  const offsetAttachId = offsetDetachId(mark.attach, i);
@@ -0,0 +1,177 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { UsageError } from "@fluidframework/telemetry-utils/internal";
7
+
8
+ import { TreeAlpha, Tree } from "./shared-tree/index.js";
9
+ import type {
10
+ TreeNodeSchema,
11
+ TreeNodeFromImplicitAllowedTypes,
12
+ TreeFieldFromImplicitField,
13
+ ImplicitFieldSchema,
14
+ InsertableTreeFieldFromImplicitField,
15
+ SchemaFactoryBeta,
16
+ } from "./simple-tree/index.js";
17
+ import {
18
+ createCustomizedFluidFrameworkScopedFactory,
19
+ eraseSchemaDetailsSubclassable,
20
+ getInnerNode,
21
+ SchemaFactory,
22
+ TreeBeta,
23
+ } from "./simple-tree/index.js";
24
+ import type { UnionToIntersection } from "./util/index.js";
25
+
26
+ /**
27
+ * Utilities for creating extensible unions using a node.
28
+ * @remarks
29
+ * Use {@link ExtensibleUnionNode.createSchema} to create the union schema.
30
+ *
31
+ * Unlike a schema union created using {@link SchemaStaticsBeta.staged | staged} allowed types, this union allows for unknown future types to exist in addition to the known types.
32
+ * This allows for faster roll-outs of new types without waiting for old clients to be updated to be aware of them.
33
+ * This does mean however that old clients may see types they do not know about, which are simply exposed as `undefined` children.
34
+ *
35
+ * `staged` types are lower overhead, and might gain support for `unknown` types in the future, so prefer them when possible.
36
+ * This is simply an alternative for when future compatibility with unknown types is required.
37
+ * It is built on top of the existing {@link ObjectSchemaOptions.allowUnknownOptionalFields | allowUnknownOptionalFields} feature.
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const sf = new SchemaFactoryBeta("extensibleUnionNodeExample.items");
42
+ * class ItemA extends sf.object("A", { x: sf.string }) {}
43
+ * class ItemB extends sf.object("B", { x: sf.number }) {}
44
+ *
45
+ * class AnyItem extends ExtensibleUnionNode.createSchema(
46
+ * [ItemA, ItemB], // Future versions may add more members here
47
+ * sf,
48
+ * "ExtensibleUnion",
49
+ * ) {}
50
+ * // Instances of the union are created using `create`.
51
+ * const anyItem = AnyItem.create(new ItemA({ x: "hello" }));
52
+ * // Reading the content from the union is done via the `union` property,
53
+ * // which can be `undefined` to handle the case where a future version of this schema allows a type unknown to the current version.
54
+ * const childNode: ItemA | ItemB | undefined = anyItem.union;
55
+ * // To determine which member of the union was present, its schema can be inspected:
56
+ * const aSchema = Tree.schema(childNode ?? assert.fail("No child"));
57
+ * assert.equal(aSchema, ItemA);
58
+ * ```
59
+ * @beta
60
+ */
61
+ export namespace ExtensibleUnionNode {
62
+ /**
63
+ * Members for classes created by {@link ExtensibleUnionNode.createSchema}.
64
+ * @beta
65
+ */
66
+ export interface Members<T> {
67
+ /**
68
+ * The child wrapped by this node has one of the types allowed by the union,
69
+ * or `undefined` if the type is one which was added to the union by a future version of this schema.
70
+ *
71
+ * @throws if {@link ExtensibleUnionNode.Members.isValid} is false.
72
+ */
73
+ readonly union: T | undefined;
74
+
75
+ /**
76
+ * Returns true, unless this node is in an invalid state.
77
+ * @remarks
78
+ * A well behaved application should not need this API.
79
+ * If an application is hitting errors when accessing {@link ExtensibleUnionNode.Members.union},
80
+ * this API can be used to help detect and recover from the invalid state which causes those errors (for example by replacing the invalid nodes with new ones).
81
+ *
82
+ * In this context "invalid" means that the internal implementation details of this node have had their invariants violated.
83
+ * This can happen when:
84
+ * - Using weakly typed construction APIs like {@link (TreeBeta:interface).importConcise} or {@link (TreeAlpha:interface).importVerbose} to construct an invalid state directly.
85
+ * Using such APIs, even when not creating invalid nodes, is not supported for this schema,
86
+ * since doing so requires knowing the implementation details of this node which are subject to change.
87
+ * - By editing a document using a different client using a different schema for this node.
88
+ * - Violating the TypeScript types to directly manipulate the node internals.
89
+ * - A bug in this node's implementation (possibly in a different client) corrupted the node.
90
+ * - Corruption of the document this node is contained in.
91
+ *
92
+ * @privateRemarks
93
+ * We could support {@link (TreeBeta:interface).exportVerbose} using {@link KeyEncodingOptions.allStoredKeys}
94
+ * then {@link (TreeAlpha:interface).importVerbose} with {@link KeyEncodingOptions.knownStoredKeys}.
95
+ * However, even this will error (but will not produce an invalid node) if there is a node of an unknown type in the union.
96
+ */
97
+ isValid(): boolean;
98
+ }
99
+
100
+ /**
101
+ * Statics for classes created by {@link ExtensibleUnionNode.createSchema}.
102
+ * @beta
103
+ */
104
+ export interface Statics<T extends readonly TreeNodeSchema[]> {
105
+ /**
106
+ * Create a {@link TreeNode} with `this` schema which wraps the provided child to create the union.
107
+ */
108
+ create<TThis extends TreeNodeSchema>(
109
+ this: TThis,
110
+ child: TreeNodeFromImplicitAllowedTypes<T>,
111
+ ): TreeFieldFromImplicitField<TThis>;
112
+ }
113
+
114
+ /**
115
+ * Create an extensible schema union which currently supports the types in `types`,
116
+ * but tolerates collaboration with future versions that may include additional types.
117
+ * @remarks
118
+ * See {@link ExtensibleUnionNode} for an example use.
119
+ * @beta
120
+ */
121
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
122
+ export function createSchema<
123
+ const T extends readonly TreeNodeSchema[],
124
+ const TScope extends string,
125
+ const TName extends string,
126
+ >(types: T, inputSchemaFactory: SchemaFactoryBeta<TScope>, name: TName) {
127
+ const record: Record<string, ImplicitFieldSchema> = {};
128
+ for (const type of types) {
129
+ record[`_${type.identifier}`] = SchemaFactory.optional(type, { key: type.identifier });
130
+ }
131
+ const schemaFactory = createCustomizedFluidFrameworkScopedFactory(
132
+ inputSchemaFactory,
133
+ "extensibleUnionNode",
134
+ );
135
+
136
+ class Union
137
+ extends schemaFactory.object(name, record, { allowUnknownOptionalFields: true })
138
+ implements Members<TreeNodeFromImplicitAllowedTypes<T>>
139
+ {
140
+ public get union(): TreeNodeFromImplicitAllowedTypes<T> | undefined {
141
+ if (!this.isValid()) {
142
+ throw new UsageError(
143
+ `This ExtensibleUnionNode (${Union.identifier}) is in an invalid state. It must have been edited by another client using a different schema or been directly imported or constructed in an invalid state.`,
144
+ );
145
+ }
146
+ for (const [_key, child] of TreeAlpha.children(this)) {
147
+ return child as TreeNodeFromImplicitAllowedTypes<T>;
148
+ }
149
+ return undefined;
150
+ }
151
+
152
+ public isValid(): boolean {
153
+ // Use inner node, since it includes populated fields even when they are unknown.
154
+ const inner = getInnerNode(this);
155
+ // Fields only includes non-empty fields, so this is what we need to check the one child invariant.
156
+ return [...inner.fields].length === 1;
157
+ }
158
+
159
+ public static create<TThis extends TreeNodeSchema>(
160
+ this: TThis,
161
+ child: TreeNodeFromImplicitAllowedTypes<T>,
162
+ ): TreeFieldFromImplicitField<TThis> {
163
+ const schema = Tree.schema(child);
164
+ return TreeBeta.create(this, {
165
+ [`_${schema.identifier}`]: child,
166
+ } as unknown as InsertableTreeFieldFromImplicitField<
167
+ TThis,
168
+ UnionToIntersection<TThis>
169
+ >);
170
+ }
171
+ }
172
+ return eraseSchemaDetailsSubclassable<
173
+ Members<TreeNodeFromImplicitAllowedTypes<T>>,
174
+ Statics<T>
175
+ >()(Union);
176
+ }
177
+ }
@@ -3,8 +3,14 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { ChangeAtomId, ChangesetLocalId, RevisionTag } from "../core/index.js";
7
- import type { TupleBTree } from "../util/index.js";
6
+ import {
7
+ compareChangesetLocalIds,
8
+ comparePartialRevisions,
9
+ type ChangeAtomId,
10
+ type ChangesetLocalId,
11
+ type RevisionTag,
12
+ } from "../core/index.js";
13
+ import { createTupleComparator, newTupleBTree, type TupleBTree } from "../util/index.js";
8
14
 
9
15
  /**
10
16
  * A BTree which uses ChangeAtomId flattened into a tuple as the key.
@@ -16,6 +22,15 @@ export type ChangeAtomIdBTree<V> = TupleBTree<
16
22
  V
17
23
  >;
18
24
 
25
+ /** Creates a new {@link ChangeAtomIdBTree} */
26
+ export function newChangeAtomIdBTree<V>(
27
+ entries?: [readonly [RevisionTag | undefined, ChangesetLocalId], V][],
28
+ ): ChangeAtomIdBTree<V> {
29
+ return newTupleBTree(compareKeys, entries);
30
+ }
31
+
32
+ const compareKeys = createTupleComparator([comparePartialRevisions, compareChangesetLocalIds]);
33
+
19
34
  export function getFromChangeAtomIdMap<T>(
20
35
  map: ChangeAtomIdBTree<T>,
21
36
  id: ChangeAtomId,
@@ -35,13 +35,7 @@ import { TreeCompressionStrategy } from "../../treeCompressionUtils.js";
35
35
 
36
36
  import { decode } from "./chunkDecoding.js";
37
37
  import type { FieldBatch } from "./fieldBatch.js";
38
- import {
39
- type EncodedFieldBatch,
40
- validVersions,
41
- FieldBatchFormatVersion,
42
- EncodedFieldBatchV1,
43
- EncodedFieldBatchV2,
44
- } from "./format.js";
38
+ import { EncodedFieldBatch, validVersions, FieldBatchFormatVersion } from "./format.js";
45
39
  import type { IncrementalEncodingPolicy } from "./incrementalEncodingPolicy.js";
46
40
  import { schemaCompressedEncodeV1, schemaCompressedEncodeV2 } from "./schemaBasedEncode.js";
47
41
  import { uncompressedEncodeV1, uncompressedEncodeV2 } from "./uncompressedEncode.js";
@@ -157,18 +151,15 @@ export function makeFieldBatchCodec(options: CodecWriteOptions): FieldBatchCodec
157
151
  let schemaCompressedEncodeFn:
158
152
  | typeof schemaCompressedEncodeV1
159
153
  | typeof schemaCompressedEncodeV2;
160
- let encodedFieldBatchType: typeof EncodedFieldBatchV1 | typeof EncodedFieldBatchV2;
161
154
  switch (writeVersion) {
162
155
  case unbrand(FieldBatchFormatVersion.v1): {
163
156
  uncompressedEncodeFn = uncompressedEncodeV1;
164
157
  schemaCompressedEncodeFn = schemaCompressedEncodeV1;
165
- encodedFieldBatchType = EncodedFieldBatchV1;
166
158
  break;
167
159
  }
168
160
  case unbrand(FieldBatchFormatVersion.v2): {
169
161
  uncompressedEncodeFn = uncompressedEncodeV2;
170
162
  schemaCompressedEncodeFn = schemaCompressedEncodeV2;
171
- encodedFieldBatchType = EncodedFieldBatchV2;
172
163
  break;
173
164
  }
174
165
  default: {
@@ -176,7 +167,10 @@ export function makeFieldBatchCodec(options: CodecWriteOptions): FieldBatchCodec
176
167
  }
177
168
  }
178
169
 
179
- return makeVersionedValidatedCodec(options, validVersions, encodedFieldBatchType, {
170
+ // Both the encode and decode logic here support both v1 and v2, as does `validVersions` and `EncodedFieldBatch`.
171
+ // This makes this use of makeVersionedValidatedCodec atypical as it is a single call being used to make a codec that supports all versions,
172
+ // instead of one call per version, then using another utility to select between them based on version.
173
+ return makeVersionedValidatedCodec(options, validVersions, EncodedFieldBatch, {
180
174
  encode: (data: FieldBatch, context: FieldBatchEncodingContext): EncodedFieldBatch => {
181
175
  for (const cursor of data) {
182
176
  assert(
@@ -12,7 +12,6 @@ import {
12
12
  forbiddenFieldKindIdentifier,
13
13
  Multiplicity,
14
14
  } from "../../core/index.js";
15
- import { brand, type Brand } from "../../util/index.js";
16
15
  import { identifierFieldIdentifier } from "../fieldKindIdentifiers.js";
17
16
  import {
18
17
  type FieldChangeDelta,
@@ -22,6 +21,7 @@ import {
22
21
  type FieldKindConfigurationEntry,
23
22
  FlexFieldKind,
24
23
  type FullSchemaPolicy,
24
+ ModularChangeFormatVersion,
25
25
  type ToDelta,
26
26
  referenceFreeFieldChangeRebaser,
27
27
  } from "../modular-schema/index.js";
@@ -107,9 +107,9 @@ export const forbidden: Forbidden = new FlexFieldKind(
107
107
  export const fieldKindConfigurations: ReadonlyMap<
108
108
  ModularChangeFormatVersion,
109
109
  FieldKindConfiguration
110
- > = new Map([
110
+ > = new Map<ModularChangeFormatVersion, FieldKindConfiguration>([
111
111
  [
112
- brand(3),
112
+ ModularChangeFormatVersion.v3,
113
113
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
114
114
  [required.identifier, { kind: required, formatVersion: 2 }],
115
115
  [optional.identifier, { kind: optional, formatVersion: 2 }],
@@ -119,7 +119,7 @@ export const fieldKindConfigurations: ReadonlyMap<
119
119
  ]),
120
120
  ],
121
121
  [
122
- brand(4),
122
+ ModularChangeFormatVersion.v4,
123
123
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
124
124
  [required.identifier, { kind: required, formatVersion: 2 }],
125
125
  [optional.identifier, { kind: optional, formatVersion: 2 }],
@@ -129,7 +129,7 @@ export const fieldKindConfigurations: ReadonlyMap<
129
129
  ]),
130
130
  ],
131
131
  [
132
- brand(5),
132
+ ModularChangeFormatVersion.v5,
133
133
  new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
134
134
  [required.identifier, { kind: required, formatVersion: 2 }],
135
135
  [optional.identifier, { kind: optional, formatVersion: 2 }],
@@ -140,7 +140,6 @@ export const fieldKindConfigurations: ReadonlyMap<
140
140
  ],
141
141
  ]);
142
142
 
143
- export type ModularChangeFormatVersion = Brand<3 | 4 | 5, "ModularChangeFormatVersion">;
144
143
  export function getCodecTreeForModularChangeFormat(
145
144
  version: ModularChangeFormatVersion,
146
145
  ): CodecTree {
@@ -8,7 +8,6 @@ export {
8
8
  fieldKinds,
9
9
  fieldKindConfigurations,
10
10
  getCodecTreeForModularChangeFormat,
11
- type ModularChangeFormatVersion,
12
11
  defaultSchemaPolicy,
13
12
  } from "./defaultFieldKinds.js";
14
13
 
@@ -9,6 +9,7 @@ import {
9
9
  getConfigForMinVersionForCollab,
10
10
  lowestMinVersionForCollab,
11
11
  } from "@fluidframework/runtime-utils/internal";
12
+ import { Type } from "@sinclair/typebox";
12
13
 
13
14
  import {
14
15
  type CodecTree,
@@ -18,21 +19,23 @@ import {
18
19
  makeVersionedValidatedCodec,
19
20
  } from "../../codec/index.js";
20
21
  import type { FieldKey, ITreeCursorSynchronous } from "../../core/index.js";
21
- import { brand } from "../../util/index.js";
22
+ import { brand, type JsonCompatibleReadOnly } from "../../util/index.js";
22
23
  import type { FieldBatchCodec, FieldBatchEncodingContext } from "../chunked-forest/index.js";
23
24
 
24
- import {
25
- ForestFormatVersion,
26
- validVersions,
27
- type Format,
28
- FormatCommon,
29
- } from "./formatCommon.js";
25
+ import { ForestFormatVersion, validVersions, type Format } from "./formatCommon.js";
26
+ import { FormatV1 } from "./formatV1.js";
27
+ import { FormatV2 } from "./formatV2.js";
30
28
 
31
29
  /**
32
30
  * Uses field cursors
33
31
  */
34
32
  export type FieldSet = ReadonlyMap<FieldKey, ITreeCursorSynchronous>;
35
- export type ForestCodec = IJsonCodec<FieldSet, Format, Format, FieldBatchEncodingContext>;
33
+ export type ForestCodec = IJsonCodec<
34
+ FieldSet,
35
+ Format,
36
+ JsonCompatibleReadOnly,
37
+ FieldBatchEncodingContext
38
+ >;
36
39
 
37
40
  /**
38
41
  * Convert a MinimumVersionForCollab to a ForestFormatVersion.
@@ -56,7 +59,10 @@ export function makeForestSummarizerCodec(
56
59
  ): ForestCodec {
57
60
  const inner = fieldBatchCodec;
58
61
  const writeVersion = clientVersionToForestFormatVersion(options.minVersionForCollab);
59
- const formatSchema = FormatCommon(writeVersion);
62
+ const formatSchema = Type.Union([FormatV1, FormatV2]);
63
+ // Both the encode and decode logic here support both v1 and v2, as does `validVersions` and `formatSchema`.
64
+ // This makes this use of makeVersionedValidatedCodec atypical as it is a single call being used to make a codec that supports all versions,
65
+ // instead of one call per version, then using another utility to select between them based on version.
60
66
  return makeVersionedValidatedCodec(options, validVersions, formatSchema, {
61
67
  encode: (data: FieldSet, context: FieldBatchEncodingContext): Format => {
62
68
  const keys: FieldKey[] = [];
@@ -32,7 +32,11 @@ import {
32
32
  type SummaryElementParser,
33
33
  type SummaryElementStringifier,
34
34
  } from "../../shared-tree-core/index.js";
35
- import { idAllocatorFromMaxId, readAndParseSnapshotBlob } from "../../util/index.js";
35
+ import {
36
+ idAllocatorFromMaxId,
37
+ readAndParseSnapshotBlob,
38
+ type JsonCompatibleReadOnly,
39
+ } from "../../util/index.js";
36
40
  // eslint-disable-next-line import-x/no-internal-modules
37
41
  import { chunkFieldSingle, defaultChunkPolicy } from "../chunked-forest/chunkTree.js";
38
42
  import {
@@ -211,7 +215,12 @@ export class ForestSummarizer
211
215
  // TODO: this code is parsing data without an optional validator, this should be defined in a typebox schema as part of the
212
216
  // forest summary format.
213
217
  const fields = this.codec.decode(
214
- await readAndParseSnapshotBlob(forestSummaryRootContentKey, services, parse),
218
+ (await readAndParseSnapshotBlob(
219
+ forestSummaryRootContentKey,
220
+ services,
221
+ parse,
222
+ // TODO: this type cast assumes there are no handles, which should probably be enforced at runtime or the need for this cast should be removed altogether.
223
+ )) as JsonCompatibleReadOnly,
215
224
  {
216
225
  ...this.encoderContext,
217
226
  incrementalEncoderDecoder: this.incrementalSummaryBuilder,
@@ -230,7 +239,10 @@ export class ForestSummarizer
230
239
  id: buildId,
231
240
  trees: chunked,
232
241
  });
233
- fieldChanges.push([fieldKey, [{ count: chunked.topLevelLength, attach: buildId }]]);
242
+ fieldChanges.push([
243
+ fieldKey,
244
+ { marks: [{ count: chunked.topLevelLength, attach: buildId }] },
245
+ ]);
234
246
  }
235
247
 
236
248
  assert(this.forest.isEmpty, 0x797 /* forest must be empty */);
@@ -6,8 +6,7 @@
6
6
  import { type Static, Type } from "@sinclair/typebox";
7
7
 
8
8
  import { schemaFormatV1 } from "../../core/index.js";
9
- import { strictEnum, type Values } from "../../util/index.js";
10
- import { EncodedFieldBatch } from "../chunked-forest/index.js";
9
+ import { strictEnum, type Values, JsonCompatibleReadOnlySchema } from "../../util/index.js";
11
10
 
12
11
  /**
13
12
  * The format version for the forest.
@@ -21,8 +20,8 @@ export type ForestFormatVersion = Values<typeof ForestFormatVersion>;
21
20
 
22
21
  export const validVersions = new Set([...Object.values(ForestFormatVersion)]);
23
22
 
24
- export const FormatCommon = (
25
- version: ForestFormatVersion,
23
+ export const FormatCommon = <const TVersion extends ForestFormatVersion>(
24
+ version: TVersion,
26
25
  // Return type is intentionally derived.
27
26
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
28
27
  ) =>
@@ -30,8 +29,10 @@ export const FormatCommon = (
30
29
  {
31
30
  version: Type.Literal(version),
32
31
  keys: Type.Array(schemaFormatV1.FieldKeySchema),
33
- fields: EncodedFieldBatch,
32
+ fields: JsonCompatibleReadOnlySchema, // Uses field batch codec
34
33
  },
35
34
  { additionalProperties: false },
36
35
  );
37
- export type Format = Static<ReturnType<typeof FormatCommon>>;
36
+ export type Format<TVersion extends ForestFormatVersion = ForestFormatVersion> = Static<
37
+ ReturnType<typeof FormatCommon<TVersion>>
38
+ >;
@@ -5,9 +5,7 @@
5
5
 
6
6
  import type { Static } from "@sinclair/typebox";
7
7
 
8
- import { brand } from "../../util/index.js";
9
-
10
8
  import { FormatCommon, ForestFormatVersion } from "./formatCommon.js";
11
9
 
12
- export const FormatV1 = FormatCommon(brand<ForestFormatVersion>(ForestFormatVersion.v1));
10
+ export const FormatV1 = FormatCommon(ForestFormatVersion.v1);
13
11
  export type FormatV1 = Static<typeof FormatV1>;
@@ -5,9 +5,7 @@
5
5
 
6
6
  import type { Static } from "@sinclair/typebox";
7
7
 
8
- import { brand } from "../../util/index.js";
9
-
10
8
  import { FormatCommon, ForestFormatVersion } from "./formatCommon.js";
11
9
 
12
- export const FormatV2 = FormatCommon(brand<ForestFormatVersion>(ForestFormatVersion.v2));
10
+ export const FormatV2 = FormatCommon(ForestFormatVersion.v2);
13
11
  export type FormatV2 = Static<typeof FormatV2>;
@@ -276,9 +276,7 @@ export class ForestIncrementalSummaryBuilder implements IncrementalEncoderDecode
276
276
  */
277
277
  public async load(args: {
278
278
  services: IChannelStorageService;
279
- readAndParseChunk: <T extends JsonCompatible<IFluidHandle>>(
280
- chunkBlobPath: string,
281
- ) => Promise<T>;
279
+ readAndParseChunk: (chunkBlobPath: string) => Promise<JsonCompatible<IFluidHandle>>;
282
280
  }): Promise<void> {
283
281
  const forestTree = args.services.getSnapshotTree?.();
284
282
  // Snapshot tree should be available when loading forest's contents. However, it is an optional function
@@ -303,8 +301,9 @@ export class ForestIncrementalSummaryBuilder implements IncrementalEncoderDecode
303
301
  `SharedTree: Cannot find contents for incremental chunk ${chunkContentsPath}`,
304
302
  );
305
303
  }
306
- const chunkContents =
307
- await args.readAndParseChunk<EncodedFieldBatch>(chunkContentsPath);
304
+ const chunkContents = (await args.readAndParseChunk(
305
+ chunkContentsPath,
306
+ )) as EncodedFieldBatch; // TODO: this should use a codec to validate the data instead of just type casting.
308
307
  this.loadedChunksMap.set(chunkReferenceId, {
309
308
  encodedContents: chunkContents,
310
309
  summaryPath: chunkSubTreePath,
@@ -48,8 +48,8 @@ export {
48
48
  jsonableTreeFromForest,
49
49
  } from "./treeTextCursor.js";
50
50
 
51
- // Split this up into separate import and export for compatibility with API-Extractor.
52
51
  import * as SequenceField from "./sequence-field/index.js";
52
+ // eslint-disable-next-line unicorn/prefer-export-from -- fixing requires `export * as` (breaks API-Extractor) or named exports (changes public API)
53
53
  export { SequenceField };
54
54
 
55
55
  export {
@@ -89,6 +89,7 @@ export {
89
89
  type FieldKindConfigurationEntry,
90
90
  isNeverTree,
91
91
  DefaultRevisionReplacer,
92
+ ModularChangeFormatVersion,
92
93
  } from "./modular-schema/index.js";
93
94
 
94
95
  export { mapRootChanges } from "./deltaUtils.js";
@@ -139,7 +140,6 @@ export {
139
140
  intoDelta,
140
141
  relevantRemovedRoots,
141
142
  getCodecTreeForModularChangeFormat,
142
- type ModularChangeFormatVersion,
143
143
  } from "./default-schema/index.js";
144
144
 
145
145
  export {
@@ -210,6 +210,7 @@ export {
210
210
 
211
211
  export {
212
212
  type ChangeAtomIdBTree,
213
+ newChangeAtomIdBTree,
213
214
  getFromChangeAtomIdMap,
214
215
  setInChangeAtomIdMap,
215
216
  } from "./changeAtomIdBTree.js";