@fluidframework/tree 2.81.0 → 2.82.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 (579) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/api-report/tree.alpha.api.md +54 -22
  3. package/api-report/tree.beta.api.md +150 -1
  4. package/api-report/tree.legacy.beta.api.md +150 -1
  5. package/api-report/tree.legacy.public.api.md +1 -0
  6. package/api-report/tree.public.api.md +1 -0
  7. package/dist/alpha.d.ts +8 -2
  8. package/dist/beta.d.ts +3 -0
  9. package/dist/codec/codec.d.ts +17 -8
  10. package/dist/codec/codec.d.ts.map +1 -1
  11. package/dist/codec/codec.js +8 -1
  12. package/dist/codec/codec.js.map +1 -1
  13. package/dist/codec/index.d.ts +1 -1
  14. package/dist/codec/index.d.ts.map +1 -1
  15. package/dist/codec/index.js +2 -1
  16. package/dist/codec/index.js.map +1 -1
  17. package/dist/codec/versioned/codec.d.ts +1 -1
  18. package/dist/codec/versioned/codec.d.ts.map +1 -1
  19. package/dist/codec/versioned/codec.js.map +1 -1
  20. package/dist/core/index.d.ts +1 -1
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js +4 -2
  23. package/dist/core/index.js.map +1 -1
  24. package/dist/core/rebase/changeRebaser.d.ts +3 -2
  25. package/dist/core/rebase/changeRebaser.d.ts.map +1 -1
  26. package/dist/core/rebase/changeRebaser.js.map +1 -1
  27. package/dist/core/rebase/index.d.ts +1 -1
  28. package/dist/core/rebase/index.d.ts.map +1 -1
  29. package/dist/core/rebase/index.js +4 -2
  30. package/dist/core/rebase/index.js.map +1 -1
  31. package/dist/core/rebase/types.d.ts +23 -3
  32. package/dist/core/rebase/types.d.ts.map +1 -1
  33. package/dist/core/rebase/types.js +30 -16
  34. package/dist/core/rebase/types.js.map +1 -1
  35. package/dist/core/schema-stored/formatV1.d.ts +2 -2
  36. package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
  37. package/dist/core/schema-stored/formatV1.js +0 -5
  38. package/dist/core/schema-stored/formatV1.js.map +1 -1
  39. package/dist/core/schema-stored/formatV2.d.ts +11 -10
  40. package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
  41. package/dist/core/schema-stored/formatV2.js +1 -6
  42. package/dist/core/schema-stored/formatV2.js.map +1 -1
  43. package/dist/core/schema-stored/index.d.ts.map +1 -1
  44. package/dist/core/schema-stored/index.js.map +1 -1
  45. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  46. package/dist/core/schema-stored/schema.js.map +1 -1
  47. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  48. package/dist/core/tree/anchorSet.js.map +1 -1
  49. package/dist/core/tree/delta.d.ts +9 -7
  50. package/dist/core/tree/delta.d.ts.map +1 -1
  51. package/dist/core/tree/delta.js.map +1 -1
  52. package/dist/core/tree/deltaUtil.js +1 -1
  53. package/dist/core/tree/deltaUtil.js.map +1 -1
  54. package/dist/core/tree/visitDelta.js +2 -2
  55. package/dist/core/tree/visitDelta.js.map +1 -1
  56. package/dist/extensibleSchemaUnion.d.ts +72 -0
  57. package/dist/extensibleSchemaUnion.d.ts.map +1 -0
  58. package/dist/extensibleSchemaUnion.js +79 -0
  59. package/dist/extensibleSchemaUnion.js.map +1 -0
  60. package/dist/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  61. package/dist/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  62. package/dist/feature-libraries/changeAtomIdBTree.js +9 -1
  63. package/dist/feature-libraries/changeAtomIdBTree.js.map +1 -1
  64. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  65. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  66. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +20 -21
  67. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  68. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  69. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  70. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  71. package/dist/feature-libraries/forest-summary/codec.d.ts +2 -1
  72. package/dist/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  73. package/dist/feature-libraries/forest-summary/codec.js.map +1 -1
  74. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  75. package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -2
  76. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  77. package/dist/feature-libraries/forest-summary/formatCommon.d.ts +1 -39
  78. package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  79. package/dist/feature-libraries/forest-summary/formatCommon.js +1 -2
  80. package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  81. package/dist/feature-libraries/forest-summary/formatV1.d.ts +1 -39
  82. package/dist/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  83. package/dist/feature-libraries/forest-summary/formatV2.d.ts +1 -39
  84. package/dist/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  85. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  86. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  87. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  88. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  89. package/dist/feature-libraries/index.d.ts +3 -3
  90. package/dist/feature-libraries/index.d.ts.map +1 -1
  91. package/dist/feature-libraries/index.js +4 -3
  92. package/dist/feature-libraries/index.js.map +1 -1
  93. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  94. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  95. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js +42 -22
  96. package/dist/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  97. package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  98. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  99. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  100. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  101. package/dist/feature-libraries/modular-schema/index.js +2 -1
  102. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  103. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  105. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js +9 -5
  106. package/dist/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  107. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  108. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  109. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +30 -7
  110. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  111. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  112. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +38 -27
  113. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  114. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  115. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  116. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  117. package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  118. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  119. package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  120. package/dist/feature-libraries/optional-field/optionalField.js +1 -1
  121. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  122. package/dist/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  123. package/dist/feature-libraries/optional-field/requiredField.js.map +1 -1
  124. package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  125. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  126. package/dist/feature-libraries/schema-index/formatV2.d.ts +4 -4
  127. package/dist/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  128. package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  129. package/dist/feature-libraries/sequence-field/invert.js +2 -2
  130. package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
  131. package/dist/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  132. package/dist/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  133. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  134. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  135. package/dist/index.d.ts +5 -5
  136. package/dist/index.d.ts.map +1 -1
  137. package/dist/index.js +4 -1
  138. package/dist/index.js.map +1 -1
  139. package/dist/legacy.d.ts +3 -0
  140. package/dist/packageVersion.d.ts +1 -1
  141. package/dist/packageVersion.js +1 -1
  142. package/dist/packageVersion.js.map +1 -1
  143. package/dist/shared-tree/independentView.d.ts +36 -13
  144. package/dist/shared-tree/independentView.d.ts.map +1 -1
  145. package/dist/shared-tree/independentView.js +1 -0
  146. package/dist/shared-tree/independentView.js.map +1 -1
  147. package/dist/shared-tree/index.d.ts +1 -1
  148. package/dist/shared-tree/index.d.ts.map +1 -1
  149. package/dist/shared-tree/index.js.map +1 -1
  150. package/dist/shared-tree/schematizingTreeView.d.ts +10 -0
  151. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  152. package/dist/shared-tree/schematizingTreeView.js +25 -9
  153. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  154. package/dist/shared-tree/sharedTree.d.ts +3 -3
  155. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  156. package/dist/shared-tree/sharedTree.js +8 -32
  157. package/dist/shared-tree/sharedTree.js.map +1 -1
  158. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  159. package/dist/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  160. package/dist/shared-tree/sharedTreeChangeCodecs.js +38 -4
  161. package/dist/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  162. package/dist/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  163. package/dist/shared-tree/tree.js +1 -1
  164. package/dist/shared-tree/tree.js.map +1 -1
  165. package/dist/shared-tree/treeCheckout.d.ts +20 -0
  166. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  167. package/dist/shared-tree/treeCheckout.js +39 -3
  168. package/dist/shared-tree/treeCheckout.js.map +1 -1
  169. package/dist/shared-tree-core/editManagerSummarizer.js +1 -1
  170. package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
  171. package/dist/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  172. package/dist/shared-tree-core/messageCodecV1ToV4.js +2 -2
  173. package/dist/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  174. package/dist/shared-tree-core/transaction.d.ts +14 -3
  175. package/dist/shared-tree-core/transaction.d.ts.map +1 -1
  176. package/dist/shared-tree-core/transaction.js +59 -16
  177. package/dist/shared-tree-core/transaction.js.map +1 -1
  178. package/dist/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  179. package/dist/shared-tree-core/versionedSummarizer.js +1 -1
  180. package/dist/shared-tree-core/versionedSummarizer.js.map +1 -1
  181. package/dist/simple-tree/api/index.d.ts +1 -1
  182. package/dist/simple-tree/api/index.d.ts.map +1 -1
  183. package/dist/simple-tree/api/index.js +3 -2
  184. package/dist/simple-tree/api/index.js.map +1 -1
  185. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  186. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  187. package/dist/simple-tree/api/schemaCreationUtilities.js +16 -1
  188. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  189. package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
  190. package/dist/simple-tree/api/transactionTypes.d.ts +10 -0
  191. package/dist/simple-tree/api/transactionTypes.d.ts.map +1 -1
  192. package/dist/simple-tree/api/transactionTypes.js.map +1 -1
  193. package/dist/simple-tree/api/tree.d.ts +81 -6
  194. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  195. package/dist/simple-tree/api/tree.js.map +1 -1
  196. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  197. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  198. package/dist/simple-tree/index.d.ts +2 -2
  199. package/dist/simple-tree/index.d.ts.map +1 -1
  200. package/dist/simple-tree/index.js +4 -2
  201. package/dist/simple-tree/index.js.map +1 -1
  202. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  203. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  204. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  205. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  206. package/dist/simple-tree/node-kinds/array/arrayNode.js +43 -1
  207. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  208. package/dist/simple-tree/node-kinds/array/index.d.ts +1 -1
  209. package/dist/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  210. package/dist/simple-tree/node-kinds/array/index.js +2 -1
  211. package/dist/simple-tree/node-kinds/array/index.js.map +1 -1
  212. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  213. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  214. package/dist/simple-tree/node-kinds/index.js +2 -1
  215. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  216. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  217. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  218. package/dist/tableSchema.d.ts +71 -48
  219. package/dist/tableSchema.d.ts.map +1 -1
  220. package/dist/tableSchema.js +200 -98
  221. package/dist/tableSchema.js.map +1 -1
  222. package/dist/text/textDomainFormatted.js +1 -1
  223. package/dist/text/textDomainFormatted.js.map +1 -1
  224. package/dist/util/bTreeUtils.d.ts +30 -4
  225. package/dist/util/bTreeUtils.d.ts.map +1 -1
  226. package/dist/util/bTreeUtils.js +29 -17
  227. package/dist/util/bTreeUtils.js.map +1 -1
  228. package/dist/util/brand.d.ts.map +1 -1
  229. package/dist/util/brand.js.map +1 -1
  230. package/dist/util/brandedMap.d.ts.map +1 -1
  231. package/dist/util/brandedMap.js.map +1 -1
  232. package/dist/util/breakable.d.ts.map +1 -1
  233. package/dist/util/breakable.js +2 -1
  234. package/dist/util/breakable.js.map +1 -1
  235. package/dist/util/index.d.ts +2 -2
  236. package/dist/util/index.d.ts.map +1 -1
  237. package/dist/util/index.js +6 -3
  238. package/dist/util/index.js.map +1 -1
  239. package/dist/util/opaque.d.ts.map +1 -1
  240. package/dist/util/opaque.js.map +1 -1
  241. package/dist/util/rangeMap.d.ts +3 -2
  242. package/dist/util/rangeMap.d.ts.map +1 -1
  243. package/dist/util/rangeMap.js +7 -1
  244. package/dist/util/rangeMap.js.map +1 -1
  245. package/dist/util/readSnapshotBlob.d.ts +1 -1
  246. package/dist/util/readSnapshotBlob.d.ts.map +1 -1
  247. package/dist/util/readSnapshotBlob.js.map +1 -1
  248. package/dist/util/typeCheck.d.ts.map +1 -1
  249. package/dist/util/typeCheck.js.map +1 -1
  250. package/dist/util/utils.d.ts +20 -16
  251. package/dist/util/utils.d.ts.map +1 -1
  252. package/dist/util/utils.js +49 -17
  253. package/dist/util/utils.js.map +1 -1
  254. package/eslint.config.mts +0 -9
  255. package/lib/alpha.d.ts +8 -2
  256. package/lib/beta.d.ts +3 -0
  257. package/lib/codec/codec.d.ts +17 -8
  258. package/lib/codec/codec.d.ts.map +1 -1
  259. package/lib/codec/codec.js +6 -0
  260. package/lib/codec/codec.js.map +1 -1
  261. package/lib/codec/index.d.ts +1 -1
  262. package/lib/codec/index.d.ts.map +1 -1
  263. package/lib/codec/index.js +1 -1
  264. package/lib/codec/index.js.map +1 -1
  265. package/lib/codec/versioned/codec.d.ts +1 -1
  266. package/lib/codec/versioned/codec.d.ts.map +1 -1
  267. package/lib/codec/versioned/codec.js.map +1 -1
  268. package/lib/core/index.d.ts +1 -1
  269. package/lib/core/index.d.ts.map +1 -1
  270. package/lib/core/index.js +1 -1
  271. package/lib/core/index.js.map +1 -1
  272. package/lib/core/rebase/changeRebaser.d.ts +3 -2
  273. package/lib/core/rebase/changeRebaser.d.ts.map +1 -1
  274. package/lib/core/rebase/changeRebaser.js.map +1 -1
  275. package/lib/core/rebase/index.d.ts +1 -1
  276. package/lib/core/rebase/index.d.ts.map +1 -1
  277. package/lib/core/rebase/index.js +1 -1
  278. package/lib/core/rebase/index.js.map +1 -1
  279. package/lib/core/rebase/types.d.ts +23 -3
  280. package/lib/core/rebase/types.d.ts.map +1 -1
  281. package/lib/core/rebase/types.js +27 -15
  282. package/lib/core/rebase/types.js.map +1 -1
  283. package/lib/core/schema-stored/formatV1.d.ts +2 -2
  284. package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
  285. package/lib/core/schema-stored/formatV1.js +0 -5
  286. package/lib/core/schema-stored/formatV1.js.map +1 -1
  287. package/lib/core/schema-stored/formatV2.d.ts +11 -10
  288. package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
  289. package/lib/core/schema-stored/formatV2.js +1 -6
  290. package/lib/core/schema-stored/formatV2.js.map +1 -1
  291. package/lib/core/schema-stored/index.d.ts.map +1 -1
  292. package/lib/core/schema-stored/index.js +2 -0
  293. package/lib/core/schema-stored/index.js.map +1 -1
  294. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  295. package/lib/core/schema-stored/schema.js.map +1 -1
  296. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  297. package/lib/core/tree/anchorSet.js.map +1 -1
  298. package/lib/core/tree/delta.d.ts +9 -7
  299. package/lib/core/tree/delta.d.ts.map +1 -1
  300. package/lib/core/tree/delta.js.map +1 -1
  301. package/lib/core/tree/deltaUtil.js +1 -1
  302. package/lib/core/tree/deltaUtil.js.map +1 -1
  303. package/lib/core/tree/visitDelta.js +2 -2
  304. package/lib/core/tree/visitDelta.js.map +1 -1
  305. package/lib/extensibleSchemaUnion.d.ts +72 -0
  306. package/lib/extensibleSchemaUnion.d.ts.map +1 -0
  307. package/lib/extensibleSchemaUnion.js +76 -0
  308. package/lib/extensibleSchemaUnion.js.map +1 -0
  309. package/lib/feature-libraries/changeAtomIdBTree.d.ts +4 -2
  310. package/lib/feature-libraries/changeAtomIdBTree.d.ts.map +1 -1
  311. package/lib/feature-libraries/changeAtomIdBTree.js +7 -0
  312. package/lib/feature-libraries/changeAtomIdBTree.js.map +1 -1
  313. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +1 -3
  314. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  315. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +4 -5
  316. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  317. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  318. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  319. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  320. package/lib/feature-libraries/forest-summary/codec.d.ts +2 -1
  321. package/lib/feature-libraries/forest-summary/codec.d.ts.map +1 -1
  322. package/lib/feature-libraries/forest-summary/codec.js.map +1 -1
  323. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  324. package/lib/feature-libraries/forest-summary/forestSummarizer.js +6 -3
  325. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  326. package/lib/feature-libraries/forest-summary/formatCommon.d.ts +1 -39
  327. package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
  328. package/lib/feature-libraries/forest-summary/formatCommon.js +2 -3
  329. package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
  330. package/lib/feature-libraries/forest-summary/formatV1.d.ts +1 -39
  331. package/lib/feature-libraries/forest-summary/formatV1.d.ts.map +1 -1
  332. package/lib/feature-libraries/forest-summary/formatV2.d.ts +1 -39
  333. package/lib/feature-libraries/forest-summary/formatV2.d.ts.map +1 -1
  334. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  335. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  336. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +1 -1
  337. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  338. package/lib/feature-libraries/index.d.ts +3 -3
  339. package/lib/feature-libraries/index.d.ts.map +1 -1
  340. package/lib/feature-libraries/index.js +3 -3
  341. package/lib/feature-libraries/index.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts +2 -2
  343. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.d.ts.map +1 -1
  344. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js +41 -21
  345. package/lib/feature-libraries/modular-schema/defaultRevisionReplacer.js.map +1 -1
  346. package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -1
  347. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  348. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  349. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  350. package/lib/feature-libraries/modular-schema/index.js +1 -1
  351. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  352. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts +1 -1
  353. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.d.ts.map +1 -1
  354. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js +10 -6
  355. package/lib/feature-libraries/modular-schema/modularChangeCodecV1.js.map +1 -1
  356. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +11 -1
  357. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  358. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +29 -6
  359. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  360. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  361. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +41 -30
  362. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  363. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +10 -127
  364. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
  365. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +2 -4
  366. package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
  367. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +3 -79
  368. package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
  369. package/lib/feature-libraries/optional-field/optionalField.js +1 -1
  370. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  371. package/lib/feature-libraries/optional-field/requiredField.d.ts.map +1 -1
  372. package/lib/feature-libraries/optional-field/requiredField.js.map +1 -1
  373. package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -2
  374. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  375. package/lib/feature-libraries/schema-index/formatV2.d.ts +4 -4
  376. package/lib/feature-libraries/schema-index/schemaSummarizer.js +1 -1
  377. package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
  378. package/lib/feature-libraries/sequence-field/invert.js +2 -2
  379. package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
  380. package/lib/feature-libraries/sequence-field/replaceRevisions.js +16 -16
  381. package/lib/feature-libraries/sequence-field/replaceRevisions.js.map +1 -1
  382. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js +1 -1
  383. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  384. package/lib/index.d.ts +5 -5
  385. package/lib/index.d.ts.map +1 -1
  386. package/lib/index.js +4 -3
  387. package/lib/index.js.map +1 -1
  388. package/lib/legacy.d.ts +3 -0
  389. package/lib/packageVersion.d.ts +1 -1
  390. package/lib/packageVersion.js +1 -1
  391. package/lib/packageVersion.js.map +1 -1
  392. package/lib/shared-tree/independentView.d.ts +36 -13
  393. package/lib/shared-tree/independentView.d.ts.map +1 -1
  394. package/lib/shared-tree/independentView.js +1 -0
  395. package/lib/shared-tree/independentView.js.map +1 -1
  396. package/lib/shared-tree/index.d.ts +1 -1
  397. package/lib/shared-tree/index.d.ts.map +1 -1
  398. package/lib/shared-tree/index.js.map +1 -1
  399. package/lib/shared-tree/schematizingTreeView.d.ts +10 -0
  400. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  401. package/lib/shared-tree/schematizingTreeView.js +25 -9
  402. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  403. package/lib/shared-tree/sharedTree.d.ts +3 -3
  404. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  405. package/lib/shared-tree/sharedTree.js +10 -34
  406. package/lib/shared-tree/sharedTree.js.map +1 -1
  407. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts +11 -3
  408. package/lib/shared-tree/sharedTreeChangeCodecs.d.ts.map +1 -1
  409. package/lib/shared-tree/sharedTreeChangeCodecs.js +39 -5
  410. package/lib/shared-tree/sharedTreeChangeCodecs.js.map +1 -1
  411. package/lib/shared-tree/sharedTreeChangeFormat.d.ts +4 -4
  412. package/lib/shared-tree/tree.js +1 -1
  413. package/lib/shared-tree/tree.js.map +1 -1
  414. package/lib/shared-tree/treeCheckout.d.ts +20 -0
  415. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  416. package/lib/shared-tree/treeCheckout.js +39 -3
  417. package/lib/shared-tree/treeCheckout.js.map +1 -1
  418. package/lib/shared-tree-core/editManagerSummarizer.js +1 -1
  419. package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
  420. package/lib/shared-tree-core/messageCodecV1ToV4.d.ts.map +1 -1
  421. package/lib/shared-tree-core/messageCodecV1ToV4.js +2 -2
  422. package/lib/shared-tree-core/messageCodecV1ToV4.js.map +1 -1
  423. package/lib/shared-tree-core/transaction.d.ts +14 -3
  424. package/lib/shared-tree-core/transaction.d.ts.map +1 -1
  425. package/lib/shared-tree-core/transaction.js +61 -18
  426. package/lib/shared-tree-core/transaction.js.map +1 -1
  427. package/lib/shared-tree-core/versionedSummarizer.d.ts.map +1 -1
  428. package/lib/shared-tree-core/versionedSummarizer.js +1 -1
  429. package/lib/shared-tree-core/versionedSummarizer.js.map +1 -1
  430. package/lib/simple-tree/api/index.d.ts +1 -1
  431. package/lib/simple-tree/api/index.d.ts.map +1 -1
  432. package/lib/simple-tree/api/index.js +1 -1
  433. package/lib/simple-tree/api/index.js.map +1 -1
  434. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +9 -0
  435. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  436. package/lib/simple-tree/api/schemaCreationUtilities.js +14 -0
  437. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  438. package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
  439. package/lib/simple-tree/api/transactionTypes.d.ts +10 -0
  440. package/lib/simple-tree/api/transactionTypes.d.ts.map +1 -1
  441. package/lib/simple-tree/api/transactionTypes.js.map +1 -1
  442. package/lib/simple-tree/api/tree.d.ts +81 -6
  443. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  444. package/lib/simple-tree/api/tree.js.map +1 -1
  445. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  446. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  447. package/lib/simple-tree/index.d.ts +2 -2
  448. package/lib/simple-tree/index.d.ts.map +1 -1
  449. package/lib/simple-tree/index.js +2 -2
  450. package/lib/simple-tree/index.js.map +1 -1
  451. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  452. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  453. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +63 -0
  454. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  455. package/lib/simple-tree/node-kinds/array/arrayNode.js +41 -0
  456. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/array/index.d.ts +1 -1
  458. package/lib/simple-tree/node-kinds/array/index.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/array/index.js +1 -1
  460. package/lib/simple-tree/node-kinds/array/index.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  462. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/index.js +1 -1
  464. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  465. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  466. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  467. package/lib/tableSchema.d.ts +71 -48
  468. package/lib/tableSchema.d.ts.map +1 -1
  469. package/lib/tableSchema.js +201 -99
  470. package/lib/tableSchema.js.map +1 -1
  471. package/lib/text/textDomainFormatted.js +1 -1
  472. package/lib/text/textDomainFormatted.js.map +1 -1
  473. package/lib/util/bTreeUtils.d.ts +30 -4
  474. package/lib/util/bTreeUtils.d.ts.map +1 -1
  475. package/lib/util/bTreeUtils.js +27 -16
  476. package/lib/util/bTreeUtils.js.map +1 -1
  477. package/lib/util/brand.d.ts.map +1 -1
  478. package/lib/util/brand.js.map +1 -1
  479. package/lib/util/brandedMap.d.ts.map +1 -1
  480. package/lib/util/brandedMap.js.map +1 -1
  481. package/lib/util/breakable.d.ts.map +1 -1
  482. package/lib/util/breakable.js +2 -1
  483. package/lib/util/breakable.js.map +1 -1
  484. package/lib/util/index.d.ts +2 -2
  485. package/lib/util/index.d.ts.map +1 -1
  486. package/lib/util/index.js +2 -2
  487. package/lib/util/index.js.map +1 -1
  488. package/lib/util/opaque.d.ts.map +1 -1
  489. package/lib/util/opaque.js.map +1 -1
  490. package/lib/util/rangeMap.d.ts +3 -2
  491. package/lib/util/rangeMap.d.ts.map +1 -1
  492. package/lib/util/rangeMap.js +7 -1
  493. package/lib/util/rangeMap.js.map +1 -1
  494. package/lib/util/readSnapshotBlob.d.ts +1 -1
  495. package/lib/util/readSnapshotBlob.d.ts.map +1 -1
  496. package/lib/util/readSnapshotBlob.js.map +1 -1
  497. package/lib/util/typeCheck.d.ts.map +1 -1
  498. package/lib/util/typeCheck.js.map +1 -1
  499. package/lib/util/utils.d.ts +20 -16
  500. package/lib/util/utils.d.ts.map +1 -1
  501. package/lib/util/utils.js +44 -15
  502. package/lib/util/utils.js.map +1 -1
  503. package/package.json +23 -23
  504. package/src/codec/codec.ts +30 -11
  505. package/src/codec/index.ts +2 -0
  506. package/src/codec/versioned/codec.ts +9 -13
  507. package/src/core/index.ts +3 -1
  508. package/src/core/rebase/changeRebaser.ts +3 -2
  509. package/src/core/rebase/index.ts +3 -1
  510. package/src/core/rebase/types.ts +51 -13
  511. package/src/core/schema-stored/formatV1.ts +2 -4
  512. package/src/core/schema-stored/formatV2.ts +9 -7
  513. package/src/core/schema-stored/index.ts +2 -0
  514. package/src/core/schema-stored/schema.ts +4 -1
  515. package/src/core/tree/anchorSet.ts +1 -3
  516. package/src/core/tree/delta.ts +9 -7
  517. package/src/core/tree/deltaUtil.ts +1 -1
  518. package/src/core/tree/visitDelta.ts +2 -2
  519. package/src/extensibleSchemaUnion.ts +135 -0
  520. package/src/feature-libraries/changeAtomIdBTree.ts +17 -2
  521. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +5 -6
  522. package/src/feature-libraries/default-schema/index.ts +0 -1
  523. package/src/feature-libraries/forest-summary/codec.ts +7 -2
  524. package/src/feature-libraries/forest-summary/forestSummarizer.ts +15 -3
  525. package/src/feature-libraries/forest-summary/formatCommon.ts +2 -3
  526. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +4 -5
  527. package/src/feature-libraries/index.ts +3 -2
  528. package/src/feature-libraries/modular-schema/defaultRevisionReplacer.ts +57 -31
  529. package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -1
  530. package/src/feature-libraries/modular-schema/index.ts +4 -1
  531. package/src/feature-libraries/modular-schema/modularChangeCodecV1.ts +7 -6
  532. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +32 -7
  533. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +54 -33
  534. package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -4
  535. package/src/feature-libraries/optional-field/optionalField.ts +1 -1
  536. package/src/feature-libraries/optional-field/requiredField.ts +2 -4
  537. package/src/feature-libraries/schema-index/codec.ts +1 -1
  538. package/src/feature-libraries/schema-index/schemaSummarizer.ts +1 -1
  539. package/src/feature-libraries/sequence-field/invert.ts +2 -2
  540. package/src/feature-libraries/sequence-field/replaceRevisions.ts +17 -10
  541. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +1 -1
  542. package/src/index.ts +12 -7
  543. package/src/packageVersion.ts +1 -1
  544. package/src/shared-tree/independentView.ts +42 -6
  545. package/src/shared-tree/index.ts +2 -0
  546. package/src/shared-tree/schematizingTreeView.ts +63 -18
  547. package/src/shared-tree/sharedTree.ts +19 -37
  548. package/src/shared-tree/sharedTreeChangeCodecs.ts +43 -9
  549. package/src/shared-tree/tree.ts +1 -1
  550. package/src/shared-tree/treeCheckout.ts +50 -3
  551. package/src/shared-tree-core/editManagerSummarizer.ts +1 -1
  552. package/src/shared-tree-core/messageCodecV1ToV4.ts +4 -3
  553. package/src/shared-tree-core/transaction.ts +125 -23
  554. package/src/shared-tree-core/versionedSummarizer.ts +3 -2
  555. package/src/simple-tree/api/index.ts +1 -0
  556. package/src/simple-tree/api/schemaCreationUtilities.ts +35 -5
  557. package/src/simple-tree/api/simpleTreeIndex.ts +1 -1
  558. package/src/simple-tree/api/transactionTypes.ts +10 -0
  559. package/src/simple-tree/api/tree.ts +88 -6
  560. package/src/simple-tree/core/treeNodeSchema.ts +5 -8
  561. package/src/simple-tree/index.ts +3 -0
  562. package/src/simple-tree/leafNodeSchema.ts +3 -2
  563. package/src/simple-tree/node-kinds/array/arrayNode.ts +86 -0
  564. package/src/simple-tree/node-kinds/array/index.ts +2 -0
  565. package/src/simple-tree/node-kinds/index.ts +2 -0
  566. package/src/simple-tree/node-kinds/object/objectNode.ts +19 -18
  567. package/src/tableSchema.ts +280 -140
  568. package/src/text/textDomainFormatted.ts +1 -1
  569. package/src/util/bTreeUtils.ts +45 -26
  570. package/src/util/brand.ts +4 -12
  571. package/src/util/brandedMap.ts +2 -6
  572. package/src/util/breakable.ts +3 -2
  573. package/src/util/index.ts +9 -3
  574. package/src/util/opaque.ts +2 -6
  575. package/src/util/rangeMap.ts +11 -5
  576. package/src/util/readSnapshotBlob.ts +3 -3
  577. package/src/util/typeCheck.ts +11 -9
  578. package/src/util/utils.ts +57 -28
  579. package/biome.jsonc +0 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/tree",
3
- "version": "2.81.0",
3
+ "version": "2.82.0",
4
4
  "description": "Distributed tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -101,17 +101,17 @@
101
101
  "temp-directory": "nyc/.nyc_output"
102
102
  },
103
103
  "dependencies": {
104
- "@fluid-internal/client-utils": "~2.81.0",
105
- "@fluidframework/container-runtime": "~2.81.0",
106
- "@fluidframework/core-interfaces": "~2.81.0",
107
- "@fluidframework/core-utils": "~2.81.0",
108
- "@fluidframework/datastore-definitions": "~2.81.0",
109
- "@fluidframework/driver-definitions": "~2.81.0",
110
- "@fluidframework/id-compressor": "~2.81.0",
111
- "@fluidframework/runtime-definitions": "~2.81.0",
112
- "@fluidframework/runtime-utils": "~2.81.0",
113
- "@fluidframework/shared-object-base": "~2.81.0",
114
- "@fluidframework/telemetry-utils": "~2.81.0",
104
+ "@fluid-internal/client-utils": "~2.82.0",
105
+ "@fluidframework/container-runtime": "~2.82.0",
106
+ "@fluidframework/core-interfaces": "~2.82.0",
107
+ "@fluidframework/core-utils": "~2.82.0",
108
+ "@fluidframework/datastore-definitions": "~2.82.0",
109
+ "@fluidframework/driver-definitions": "~2.82.0",
110
+ "@fluidframework/id-compressor": "~2.82.0",
111
+ "@fluidframework/runtime-definitions": "~2.82.0",
112
+ "@fluidframework/runtime-utils": "~2.82.0",
113
+ "@fluidframework/shared-object-base": "~2.82.0",
114
+ "@fluidframework/telemetry-utils": "~2.82.0",
115
115
  "@sinclair/typebox": "^0.34.13",
116
116
  "@tylerbu/sorted-btree-es6": "^1.8.0",
117
117
  "@types/ungap__structured-clone": "^1.2.0",
@@ -122,25 +122,25 @@
122
122
  "devDependencies": {
123
123
  "@arethetypeswrong/cli": "^0.18.2",
124
124
  "@biomejs/biome": "~1.9.3",
125
- "@fluid-internal/mocha-test-setup": "~2.81.0",
126
- "@fluid-private/stochastic-test-utils": "~2.81.0",
127
- "@fluid-private/test-dds-utils": "~2.81.0",
128
- "@fluid-private/test-drivers": "~2.81.0",
125
+ "@fluid-internal/mocha-test-setup": "~2.82.0",
126
+ "@fluid-private/stochastic-test-utils": "~2.82.0",
127
+ "@fluid-private/test-dds-utils": "~2.82.0",
128
+ "@fluid-private/test-drivers": "~2.82.0",
129
129
  "@fluid-tools/benchmark": "^0.52.0",
130
130
  "@fluid-tools/build-cli": "^0.63.0",
131
131
  "@fluidframework/build-common": "^2.0.3",
132
132
  "@fluidframework/build-tools": "^0.63.0",
133
- "@fluidframework/container-definitions": "~2.81.0",
134
- "@fluidframework/container-loader": "~2.81.0",
135
- "@fluidframework/eslint-config-fluid": "~2.81.0",
136
- "@fluidframework/test-runtime-utils": "~2.81.0",
137
- "@fluidframework/test-utils": "~2.81.0",
138
- "@fluidframework/tree-previous": "npm:@fluidframework/tree@2.80.0",
133
+ "@fluidframework/container-definitions": "~2.82.0",
134
+ "@fluidframework/container-loader": "~2.82.0",
135
+ "@fluidframework/eslint-config-fluid": "~2.82.0",
136
+ "@fluidframework/test-runtime-utils": "~2.82.0",
137
+ "@fluidframework/test-utils": "~2.82.0",
138
+ "@fluidframework/tree-previous": "npm:@fluidframework/tree@2.81.0",
139
139
  "@microsoft/api-extractor": "7.52.11",
140
140
  "@types/diff": "^3.5.1",
141
141
  "@types/easy-table": "^0.0.32",
142
142
  "@types/mocha": "^10.0.10",
143
- "@types/node": "^18.19.0",
143
+ "@types/node": "~20.19.30",
144
144
  "ajv": "^8.17.1",
145
145
  "ajv-formats": "^3.0.1",
146
146
  "c8": "^10.1.3",
@@ -10,7 +10,6 @@ import type { MinimumVersionForCollab } from "@fluidframework/runtime-definition
10
10
  import { cleanedPackageVersion as runtimeUtilsCleanedPackageVersion } from "@fluidframework/runtime-utils/internal";
11
11
  import type { Static, TAnySchema, TSchema } from "@sinclair/typebox";
12
12
 
13
- import type { ChangeEncodingContext } from "../core/index.js";
14
13
  import type { JsonCompatibleReadOnly } from "../util/index.js";
15
14
 
16
15
  /**
@@ -139,11 +138,9 @@ export interface ICodecOptions {
139
138
 
140
139
  /**
141
140
  * Options relating to encoding of persisted data.
142
- * @remarks
143
- * Extends {@link ICodecOptions} with options that are specific to encoding data.
144
- * @alpha @input
141
+ * @input @beta
145
142
  */
146
- export interface CodecWriteOptions extends ICodecOptions {
143
+ export interface CodecWriteOptionsBeta {
147
144
  /**
148
145
  * The minimum version of the Fluid Framework client output must be encoded to be compatible with.
149
146
  * @remarks
@@ -154,16 +151,24 @@ export interface CodecWriteOptions extends ICodecOptions {
154
151
  * the data's format should be versioned and if they can't handle the format they should error.
155
152
  */
156
153
  readonly minVersionForCollab: MinimumVersionForCollab;
154
+ }
157
155
 
156
+ /**
157
+ * Options relating to encoding of persisted data.
158
+ * @remarks
159
+ * Extends {@link ICodecOptions} with options that are specific to encoding data.
160
+ * @alpha @input
161
+ */
162
+ export interface CodecWriteOptions extends ICodecOptions, CodecWriteOptionsBeta {
158
163
  /**
159
164
  * Overrides the version of the codec to use for encoding.
160
165
  * @remarks
161
- * Without an override, the selected version will be based on {@link CodecWriteOptions.minVersionForCollab}.
166
+ * Without an override, the selected version will be based on {@link CodecWriteOptionsBeta.minVersionForCollab}.
162
167
  */
163
168
  readonly writeVersionOverrides?: ReadonlyMap<CodecName, FormatVersion>;
164
169
 
165
170
  /**
166
- * If true, suppress errors when `writeVersionOverrides` selects a version which may not be compatible with the {@link CodecWriteOptions.minVersionForCollab}.
171
+ * If true, suppress errors when `writeVersionOverrides` selects a version which may not be compatible with the {@link CodecWriteOptionsBeta.minVersionForCollab}.
167
172
  */
168
173
  readonly allowPossiblyIncompatibleWriteVersionOverrides?: boolean;
169
174
  }
@@ -198,6 +203,20 @@ export interface IJsonCodec<
198
203
  encodedSchema?: TAnySchema;
199
204
  }
200
205
 
206
+ /**
207
+ * Type erase the more detailed encoded type from a codec.
208
+ */
209
+ export function eraseEncodedType<
210
+ TDecoded,
211
+ TEncoded = JsonCompatibleReadOnly,
212
+ TValidate = TEncoded,
213
+ TContext = void,
214
+ >(
215
+ codec: IJsonCodec<TDecoded, TEncoded, TValidate, TContext>,
216
+ ): IJsonCodec<TDecoded, TValidate, TValidate, TContext> {
217
+ return codec as unknown as IJsonCodec<TDecoded, TValidate, TValidate, TContext>;
218
+ }
219
+
201
220
  /**
202
221
  * @remarks TODO: We might consider using DataView or some kind of writer instead of IsoBuffer.
203
222
  */
@@ -381,7 +400,7 @@ class DefaultBinaryCodec<TDecoded, TContext> implements IBinaryCodec<TDecoded, T
381
400
 
382
401
  public decode(change: IsoBuffer, context: TContext): TDecoded {
383
402
  const json = bufferToString(change, "utf8");
384
- const jsonable = JSON.parse(json);
403
+ const jsonable = JSON.parse(json) as JsonCompatibleReadOnly;
385
404
  return this.jsonCodec.decode(jsonable, context);
386
405
  }
387
406
  }
@@ -453,9 +472,9 @@ export const unitCodec: IMultiFormatCodec<
453
472
  export function withSchemaValidation<
454
473
  TInMemoryFormat,
455
474
  EncodedSchema extends TSchema,
456
- TEncodedFormat = JsonCompatibleReadOnly,
457
- TValidate = TEncodedFormat,
458
- TContext = ChangeEncodingContext,
475
+ TEncodedFormat,
476
+ TValidate,
477
+ TContext,
459
478
  >(
460
479
  schema: EncodedSchema,
461
480
  codec: IJsonCodec<TInMemoryFormat, TEncodedFormat, TValidate, TContext>,
@@ -10,6 +10,7 @@ export {
10
10
  type ICodecFamily,
11
11
  type ICodecOptions,
12
12
  type CodecWriteOptions,
13
+ type CodecWriteOptionsBeta,
13
14
  type IDecoder,
14
15
  type IEncoder,
15
16
  type IJsonCodec,
@@ -29,6 +30,7 @@ export {
29
30
  jsonableCodecTree,
30
31
  extractJsonValidator,
31
32
  type CodecName,
33
+ eraseEncodedType,
32
34
  } from "./codec.js";
33
35
  export {
34
36
  DiscriminatedUnionDispatcher,
@@ -401,25 +401,21 @@ The client which encoded this data likely specified an "minVersionForCollab" val
401
401
  Name extends CodecName,
402
402
  Entry extends CodecVersion<unknown, unknown, FormatVersion, never>,
403
403
  >(name: Name, inputRegistry: ConfigMapEntry<Entry>) {
404
- type TDecoded2 = Entry extends CodecVersion<infer D, unknown, FormatVersion, never>
405
- ? D
406
- : never;
407
- type TContext2 = Entry extends CodecVersion<unknown, infer C, FormatVersion, never>
408
- ? C
409
- : never;
410
- type TFormatVersion2 = Entry extends CodecVersion<unknown, unknown, infer F, never>
411
- ? F
412
- : never;
413
- type TBuildOptions2 = Entry extends CodecVersion<unknown, unknown, FormatVersion, infer B>
414
- ? B
415
- : never;
404
+ type TDecoded2 =
405
+ Entry extends CodecVersion<infer D, unknown, FormatVersion, never> ? D : never;
406
+ type TContext2 =
407
+ Entry extends CodecVersion<unknown, infer C, FormatVersion, never> ? C : never;
408
+ type TFormatVersion2 =
409
+ Entry extends CodecVersion<unknown, unknown, infer F, never> ? F : never;
410
+ type TBuildOptions2 =
411
+ Entry extends CodecVersion<unknown, unknown, FormatVersion, infer B> ? B : never;
416
412
  const builder = new ClientVersionDispatchingCodecBuilder(
417
413
  name,
418
414
  inputRegistry as ConfigMapEntry<unknown> as ConfigMapEntry<
419
415
  CodecVersion<
420
416
  TDecoded2,
421
417
  // If it does not matter what context is provided, undefined is fine, so allow it to be omitted.
422
- TContext2 extends unknown ? void : TContext2,
418
+ unknown extends TContext2 ? void : TContext2,
423
419
  TFormatVersion2,
424
420
  TBuildOptions2
425
421
  >
package/src/core/index.ts CHANGED
@@ -212,7 +212,9 @@ export {
212
212
  isAncestor,
213
213
  type ChangeAtomIdRangeMap,
214
214
  newChangeAtomIdRangeMap,
215
- compareRevisions,
215
+ comparePartialRevisions,
216
+ compareChangesetLocalIds,
217
+ comparePartialChangesetLocalIds,
216
218
  diffHistories,
217
219
  type RevisionReplacer,
218
220
  } from "./rebase/index.js";
@@ -121,13 +121,14 @@ export interface RevisionReplacer {
121
121
 
122
122
  /**
123
123
  * Returns the updated ID for the given ID.
124
- * @param id - The ID to update.
124
+ * @param id - The ID of the first change atom to update.
125
+ * @param count - The number of contiguous change atoms to update. Defaults to 1.
125
126
  * @returns an updated ID iff the given `id` needs updating, otherwise returns the given `id`.
126
127
  * @remarks
127
128
  * This function always maps the same input {@link ChangeAtomId.revision | revision} and {@link ChangeAtomId.localId | local ID} to the same output revision local ID.
128
129
  * This means multiple references to the same atom of change will remain consistent after revision replacement.
129
130
  */
130
- getUpdatedAtomId<T extends ChangeAtomId>(id: T): T;
131
+ getUpdatedAtomId<T extends ChangeAtomId>(id: T, count?: number): T;
131
132
  }
132
133
 
133
134
  export interface TaggedChange<TChangeset, TTag = RevisionTag | undefined> {
@@ -31,7 +31,9 @@ export {
31
31
  subtractChangeAtomIds,
32
32
  type ChangeAtomIdRangeMap,
33
33
  newChangeAtomIdRangeMap,
34
- compareRevisions,
34
+ comparePartialRevisions,
35
+ compareChangesetLocalIds,
36
+ comparePartialChangesetLocalIds,
35
37
  } from "./types.js";
36
38
  export { RevisionTagCodec } from "./revisionTagCodec.js";
37
39
  export {
@@ -19,6 +19,7 @@ import {
19
19
  brand,
20
20
  brandedNumberType,
21
21
  brandedStringType,
22
+ comparePartialStrings,
22
23
  } from "../../util/index.js";
23
24
  import type { RevertibleAlpha } from "../revertible.js";
24
25
 
@@ -46,6 +47,9 @@ export const StableIdSchema = Type.String();
46
47
 
47
48
  /**
48
49
  * An ID which is unique within a revision of a `ModularChangeset`.
50
+ * @remarks
51
+ * Always a real number (never `NaN` or +/- `Infinity`).
52
+ *
49
53
  * A `ModularChangeset` which is a composition of multiple revisions may contain duplicate `ChangesetLocalId`s,
50
54
  * but they are unique when qualified by the revision of the change they are used in.
51
55
  */
@@ -122,10 +126,30 @@ export function taggedOptAtomId(
122
126
  return taggedAtomId(id, revision);
123
127
  }
124
128
 
125
- export function offsetChangeAtomId(id: ChangeAtomId, offset: number): ChangeAtomId {
129
+ export function offsetChangeAtomId<T extends ChangeAtomId>(id: T, offset: number): T {
126
130
  return { ...id, localId: brand(id.localId + offset) };
127
131
  }
128
132
 
133
+ // #region These comparison functions are used instead of e.g. `compareNumbers` as a performance optimization
134
+
135
+ export function compareChangesetLocalIds(a: ChangesetLocalId, b: ChangesetLocalId): number {
136
+ return a - b; // No need to consider `NaN` or `Infinity` since ChangesetLocalId is always a real number
137
+ }
138
+
139
+ export function comparePartialChangesetLocalIds(
140
+ a: ChangesetLocalId | undefined,
141
+ b: ChangesetLocalId | undefined,
142
+ ): number {
143
+ if (a === undefined) {
144
+ return b === undefined ? 0 : -1;
145
+ } else if (b === undefined) {
146
+ return 1;
147
+ }
148
+ return compareChangesetLocalIds(a, b);
149
+ }
150
+
151
+ // #endregion
152
+
129
153
  /**
130
154
  * A node in a graph of commits. A commit's parent is the commit on which it was based.
131
155
  */
@@ -204,6 +228,12 @@ export interface LocalChangeMetadata extends CommitMetadata {
204
228
  getRevertible(
205
229
  onDisposed?: (revertible: RevertibleAlpha) => void,
206
230
  ): RevertibleAlpha | undefined;
231
+
232
+ /**
233
+ * Optional label provided by the user when commit was created.
234
+ * This can be used by undo/redo to group or classify edits.
235
+ */
236
+ readonly label?: unknown;
207
237
  }
208
238
 
209
239
  /**
@@ -225,6 +255,11 @@ export interface RemoteChangeMetadata extends CommitMetadata {
225
255
  * @remarks This is only available for {@link LocalChangeMetadata | local changes}.
226
256
  */
227
257
  readonly getRevertible?: undefined;
258
+ /**
259
+ * Label provided by the user when commit was created.
260
+ * @remarks This is only available for {@link LocalChangeMetadata | local changes}.
261
+ */
262
+ readonly label?: undefined;
228
263
  }
229
264
 
230
265
  /**
@@ -255,12 +290,14 @@ export function mintCommit<TChange>(
255
290
 
256
291
  export type ChangeAtomIdRangeMap<V> = RangeMap<ChangeAtomId, V>;
257
292
 
258
- export function newChangeAtomIdRangeMap<V>(): ChangeAtomIdRangeMap<V> {
259
- return new RangeMap(offsetChangeAtomId, subtractChangeAtomIds);
293
+ export function newChangeAtomIdRangeMap<V>(
294
+ offsetValue?: (value: V, offset: number) => V,
295
+ ): ChangeAtomIdRangeMap<V> {
296
+ return new RangeMap(offsetChangeAtomId, subtractChangeAtomIds, offsetValue);
260
297
  }
261
298
 
262
299
  export function subtractChangeAtomIds(a: ChangeAtomId, b: ChangeAtomId): number {
263
- const cmp = compareRevisions(a.revision, b.revision);
300
+ const cmp = comparePartialRevisions(a.revision, b.revision);
264
301
  if (cmp !== 0) {
265
302
  return cmp * Number.POSITIVE_INFINITY;
266
303
  }
@@ -268,19 +305,20 @@ export function subtractChangeAtomIds(a: ChangeAtomId, b: ChangeAtomId): number
268
305
  return a.localId - b.localId;
269
306
  }
270
307
 
271
- export function compareRevisions(
308
+ /**
309
+ * Compares two {@link RevisionTag}s to form a strict total ordering.
310
+ * @remarks This function tolerates arbitrary strings, not just the string "root".
311
+ * It sorts as follows: `undefined` \< `string` \< `number`
312
+ */
313
+ export function comparePartialRevisions(
272
314
  a: RevisionTag | undefined,
273
315
  b: RevisionTag | undefined,
274
316
  ): number {
275
- if (a === undefined) {
276
- return b === undefined ? 0 : -1;
277
- } else if (b === undefined) {
278
- return 1;
279
- } else if (a < b) {
317
+ if (typeof a === "number") {
318
+ return typeof b === "number" ? a - b : 1;
319
+ } else if (typeof b === "number") {
280
320
  return -1;
281
- } else if (a > b) {
282
- return 1;
283
321
  }
284
322
 
285
- return 0;
323
+ return comparePartialStrings(a, b);
286
324
  }
@@ -52,6 +52,7 @@ const FieldSchemaFormatBase = Type.Object({
52
52
 
53
53
  const noAdditionalProps: ObjectOptions = { additionalProperties: false };
54
54
 
55
+ export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
55
56
  export const FieldSchemaFormat = Type.Composite([FieldSchemaFormatBase], noAdditionalProps);
56
57
 
57
58
  /**
@@ -70,6 +71,7 @@ export enum PersistedValueSchema {
70
71
  *
71
72
  * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
72
73
  */
74
+ export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
73
75
  export const TreeNodeSchemaDataFormat = Type.Object(
74
76
  {
75
77
  /**
@@ -87,7 +89,3 @@ export const TreeNodeSchemaDataFormat = Type.Object(
87
89
  },
88
90
  unionOptions,
89
91
  );
90
-
91
- export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
92
-
93
- export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
@@ -6,6 +6,7 @@
6
6
  import { type ObjectOptions, type Static, Type } from "@sinclair/typebox";
7
7
 
8
8
  import { unionOptions } from "../../codec/index.js";
9
+ import type { JsonCompatibleReadOnlyObject } from "../../util/index.js";
9
10
  import { JsonCompatibleReadOnlySchema } from "../../util/index.js";
10
11
 
11
12
  import {
@@ -14,7 +15,12 @@ import {
14
15
  TreeNodeSchemaIdentifierSchema,
15
16
  } from "./formatV1.js";
16
17
 
17
- export const PersistedMetadataFormat = Type.Optional(JsonCompatibleReadOnlySchema);
18
+ export type PersistedMetadataFormat = Static<typeof PersistedMetadataFormat>;
19
+ export const PersistedMetadataFormat = Type.Optional(
20
+ Type.Unsafe<JsonCompatibleReadOnlyObject>(
21
+ Type.Record(Type.String(), JsonCompatibleReadOnlySchema),
22
+ ),
23
+ );
18
24
 
19
25
  const FieldSchemaFormatBase = Type.Object({
20
26
  kind: FieldKindIdentifierSchema,
@@ -24,6 +30,7 @@ const FieldSchemaFormatBase = Type.Object({
24
30
 
25
31
  const noAdditionalProps: ObjectOptions = { additionalProperties: false };
26
32
 
33
+ export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
27
34
  export const FieldSchemaFormat = Type.Composite([FieldSchemaFormatBase], noAdditionalProps);
28
35
 
29
36
  /**
@@ -56,6 +63,7 @@ export type TreeNodeSchemaUnionFormat = Static<typeof TreeNodeSchemaUnionFormat>
56
63
  *
57
64
  * See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
58
65
  */
66
+ export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
59
67
  export const TreeNodeSchemaDataFormat = Type.Object(
60
68
  {
61
69
  /**
@@ -71,9 +79,3 @@ export const TreeNodeSchemaDataFormat = Type.Object(
71
79
  },
72
80
  noAdditionalProps,
73
81
  );
74
-
75
- export type TreeNodeSchemaDataFormat = Static<typeof TreeNodeSchemaDataFormat>;
76
-
77
- export type FieldSchemaFormat = Static<typeof FieldSchemaFormat>;
78
-
79
- export type PersistedMetadataFormat = Static<typeof PersistedMetadataFormat>;
@@ -37,6 +37,8 @@ export { Multiplicity } from "./multiplicity.js";
37
37
  export type { TreeNodeSchemaIdentifier, FieldKey, FieldKindIdentifier } from "./formatV1.js";
38
38
 
39
39
  import * as schemaFormatV1 from "./formatV1.js";
40
+ // eslint-disable-next-line unicorn/prefer-export-from -- fixing requires `export * as` (breaks API-Extractor) or named exports (changes public API)
40
41
  export { schemaFormatV1 };
41
42
  import * as schemaFormatV2 from "./formatV2.js";
43
+ // eslint-disable-next-line unicorn/prefer-export-from -- fixing requires `export * as` (breaks API-Extractor) or named exports (changes public API)
42
44
  export { schemaFormatV2 };
@@ -253,7 +253,10 @@ export class ObjectNodeStoredSchema extends TreeNodeStoredSchema {
253
253
  private encodeFieldsObject(
254
254
  encodeFieldSchema: (storedFieldSchema: TreeFieldStoredSchema) => FieldSchemaFormat,
255
255
  ): Record<string, FieldSchemaFormat> {
256
- const fieldsObject: Record<string, FieldSchemaFormat> = Object.create(null);
256
+ const fieldsObject: Record<string, FieldSchemaFormat> = Object.create(null) as Record<
257
+ string,
258
+ FieldSchemaFormat
259
+ >;
257
260
  // Sort fields to ensure output is identical for for equivalent schema (since field order is not considered significant).
258
261
  // This makes comparing schema easier, and ensures chunk reuse for schema summaries isn't needlessly broken.
259
262
  for (const key of [...this.objectNodeFields.keys()].sort()) {
@@ -128,9 +128,7 @@ export interface AnchorEvents {
128
128
  *
129
129
  * Compare to {@link AnchorEvents.childrenChanged} which is emitted in the middle of the batch/delta-visit.
130
130
  */
131
- childrenChangedAfterBatch(arg: {
132
- changedFields: ReadonlySet<FieldKey>;
133
- }): void;
131
+ childrenChangedAfterBatch(arg: { changedFields: ReadonlySet<FieldKey> }): void;
134
132
 
135
133
  /**
136
134
  * Emitted in the middle of applying a batch of changes (i.e. during a delta a visit), if something in the subtree
@@ -196,10 +196,12 @@ export interface DetachedNodeRename {
196
196
  readonly newId: DetachedNodeId;
197
197
  }
198
198
 
199
- /**
200
- * Represents a list of changes to the nodes in the field.
201
- * The index of each mark within the range of nodes, before
202
- * applying any of the changes, is not represented explicitly.
203
- * It corresponds to the sum of `mark.count` values for all previous marks for which `isAttachMark(mark)` is false.
204
- */
205
- export type FieldChanges = readonly Mark[];
199
+ export interface FieldChanges {
200
+ /**
201
+ * Represents a list of changes to the nodes in the field.
202
+ * The index of each mark within the range of nodes, before
203
+ * applying any of the changes, is not represented explicitly.
204
+ * It corresponds to the sum of `mark.count` values for all previous marks for which `isAttachMark(mark)` is false.
205
+ */
206
+ readonly marks: readonly Mark[];
207
+ }
@@ -20,7 +20,7 @@ export function deltaForRootInitialization(content: TreeChunk): Root {
20
20
  const delta: Root = {
21
21
  build: [{ id: buildId, trees: content }],
22
22
  fields: new Map<FieldKey, FieldChanges>([
23
- [rootFieldKey, [{ count: content.topLevelLength, attach: buildId }]],
23
+ [rootFieldKey, { marks: [{ count: content.topLevelLength, attach: buildId }] }],
24
24
  ]),
25
25
  };
26
26
  return delta;
@@ -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);