@fluidframework/tree 2.12.0 → 2.20.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 (496) hide show
  1. package/CHANGELOG.md +154 -0
  2. package/api-report/tree.alpha.api.md +108 -22
  3. package/api-report/tree.beta.api.md +31 -15
  4. package/api-report/tree.legacy.alpha.api.md +31 -15
  5. package/api-report/tree.legacy.public.api.md +31 -15
  6. package/api-report/tree.public.api.md +31 -15
  7. package/assertTagging.config.mjs +14 -0
  8. package/dist/alpha.d.ts +14 -0
  9. package/dist/beta.d.ts +2 -0
  10. package/dist/core/index.d.ts +2 -2
  11. package/dist/core/index.d.ts.map +1 -1
  12. package/dist/core/index.js +6 -4
  13. package/dist/core/index.js.map +1 -1
  14. package/dist/core/rebase/index.d.ts +2 -2
  15. package/dist/core/rebase/index.d.ts.map +1 -1
  16. package/dist/core/rebase/index.js +5 -1
  17. package/dist/core/rebase/index.js.map +1 -1
  18. package/dist/core/rebase/types.d.ts +5 -4
  19. package/dist/core/rebase/types.d.ts.map +1 -1
  20. package/dist/core/rebase/types.js +29 -1
  21. package/dist/core/rebase/types.js.map +1 -1
  22. package/dist/core/rebase/utils.d.ts +10 -0
  23. package/dist/core/rebase/utils.d.ts.map +1 -1
  24. package/dist/core/rebase/utils.js +22 -1
  25. package/dist/core/rebase/utils.js.map +1 -1
  26. package/dist/core/tree/delta.d.ts +21 -26
  27. package/dist/core/tree/delta.d.ts.map +1 -1
  28. package/dist/core/tree/delta.js.map +1 -1
  29. package/dist/core/tree/deltaUtil.d.ts +1 -3
  30. package/dist/core/tree/deltaUtil.d.ts.map +1 -1
  31. package/dist/core/tree/deltaUtil.js +2 -14
  32. package/dist/core/tree/deltaUtil.js.map +1 -1
  33. package/dist/core/tree/index.d.ts +1 -1
  34. package/dist/core/tree/index.d.ts.map +1 -1
  35. package/dist/core/tree/index.js +1 -3
  36. package/dist/core/tree/index.js.map +1 -1
  37. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  38. package/dist/core/tree/visitDelta.js +82 -80
  39. package/dist/core/tree/visitDelta.js.map +1 -1
  40. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
  41. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  42. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
  43. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  44. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  45. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  46. package/dist/feature-libraries/deltaUtils.d.ts.map +1 -1
  47. package/dist/feature-libraries/deltaUtils.js +13 -0
  48. package/dist/feature-libraries/deltaUtils.js.map +1 -1
  49. package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  50. package/dist/feature-libraries/forest-summary/forestSummarizer.js +1 -6
  51. package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  52. package/dist/feature-libraries/index.d.ts +0 -1
  53. package/dist/feature-libraries/index.d.ts.map +1 -1
  54. package/dist/feature-libraries/index.js +2 -4
  55. package/dist/feature-libraries/index.js.map +1 -1
  56. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts +5 -5
  57. package/dist/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  58. package/dist/feature-libraries/modular-schema/crossFieldQueries.js +2 -3
  59. package/dist/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  60. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +30 -6
  61. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  62. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  63. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  64. package/dist/feature-libraries/modular-schema/genericFieldKind.js +2 -1
  65. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  66. package/dist/feature-libraries/modular-schema/index.d.ts +2 -2
  67. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  68. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  69. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  70. package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  71. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +8 -8
  72. package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  73. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +5 -4
  74. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  75. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +186 -216
  76. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  77. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts +23 -20
  78. package/dist/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  79. package/dist/feature-libraries/modular-schema/modularChangeTypes.js +20 -0
  80. package/dist/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  81. package/dist/feature-libraries/optional-field/optionalField.d.ts +3 -3
  82. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  83. package/dist/feature-libraries/optional-field/optionalField.js +24 -4
  84. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  85. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
  86. package/dist/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  87. package/dist/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  88. package/dist/feature-libraries/sequence-field/rebase.js +4 -4
  89. package/dist/feature-libraries/sequence-field/rebase.js.map +1 -1
  90. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  91. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  92. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  93. package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  94. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  95. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  96. package/dist/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  97. package/dist/feature-libraries/sequence-field/utils.d.ts +2 -2
  98. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  99. package/dist/feature-libraries/sequence-field/utils.js +50 -9
  100. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  101. package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  102. package/dist/feature-libraries/treeCursorUtils.js +4 -1
  103. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  104. package/dist/index.d.ts +27 -3
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +5 -2
  107. package/dist/index.js.map +1 -1
  108. package/dist/legacy.d.ts +2 -0
  109. package/dist/package.json +2 -1
  110. package/dist/packageVersion.d.ts +1 -1
  111. package/dist/packageVersion.js +1 -1
  112. package/dist/packageVersion.js.map +1 -1
  113. package/dist/public.d.ts +2 -0
  114. package/dist/shared-tree/index.d.ts +3 -2
  115. package/dist/shared-tree/index.d.ts.map +1 -1
  116. package/dist/shared-tree/index.js +6 -3
  117. package/dist/shared-tree/index.js.map +1 -1
  118. package/dist/shared-tree/schematizingTreeView.d.ts +10 -1
  119. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  120. package/dist/shared-tree/schematizingTreeView.js +43 -0
  121. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  122. package/dist/shared-tree/sharedTree.d.ts +44 -21
  123. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  124. package/dist/shared-tree/sharedTree.js +41 -35
  125. package/dist/shared-tree/sharedTree.js.map +1 -1
  126. package/dist/shared-tree/transactionTypes.d.ts +105 -0
  127. package/dist/shared-tree/transactionTypes.d.ts.map +1 -0
  128. package/dist/shared-tree/transactionTypes.js +13 -0
  129. package/dist/shared-tree/transactionTypes.js.map +1 -0
  130. package/dist/shared-tree/treeApi.d.ts +1 -25
  131. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  132. package/dist/shared-tree/treeApi.js +4 -8
  133. package/dist/shared-tree/treeApi.js.map +1 -1
  134. package/dist/shared-tree/treeCheckout.d.ts +4 -1
  135. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  136. package/dist/shared-tree/treeCheckout.js +142 -23
  137. package/dist/shared-tree/treeCheckout.js.map +1 -1
  138. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  139. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  140. package/dist/simple-tree/api/index.d.ts +1 -0
  141. package/dist/simple-tree/api/index.d.ts.map +1 -1
  142. package/dist/simple-tree/api/index.js +3 -1
  143. package/dist/simple-tree/api/index.js.map +1 -1
  144. package/dist/simple-tree/api/jsonSchema.d.ts +6 -0
  145. package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
  146. package/dist/simple-tree/api/jsonSchema.js.map +1 -1
  147. package/dist/simple-tree/api/schemaFactory.d.ts +21 -12
  148. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  149. package/dist/simple-tree/api/schemaFactory.js +5 -2
  150. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  151. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
  152. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
  153. package/dist/simple-tree/api/schemaFactoryAlpha.js +90 -0
  154. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
  155. package/dist/simple-tree/api/simpleSchema.d.ts +5 -1
  156. package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
  157. package/dist/simple-tree/api/simpleSchema.js.map +1 -1
  158. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +13 -10
  159. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  160. package/dist/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  161. package/dist/simple-tree/api/tree.d.ts +60 -0
  162. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  163. package/dist/simple-tree/api/tree.js.map +1 -1
  164. package/dist/simple-tree/api/treeNodeApi.js +1 -1
  165. package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
  166. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  167. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -11
  168. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  169. package/dist/simple-tree/arrayNode.d.ts +2 -2
  170. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  171. package/dist/simple-tree/arrayNode.js +3 -2
  172. package/dist/simple-tree/arrayNode.js.map +1 -1
  173. package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
  174. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  175. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  176. package/dist/simple-tree/index.d.ts +2 -2
  177. package/dist/simple-tree/index.d.ts.map +1 -1
  178. package/dist/simple-tree/index.js +3 -2
  179. package/dist/simple-tree/index.js.map +1 -1
  180. package/dist/simple-tree/leafNodeSchema.d.ts +5 -5
  181. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  182. package/dist/simple-tree/mapNode.d.ts +2 -2
  183. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  184. package/dist/simple-tree/mapNode.js +2 -1
  185. package/dist/simple-tree/mapNode.js.map +1 -1
  186. package/dist/simple-tree/objectNode.d.ts +2 -2
  187. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  188. package/dist/simple-tree/objectNode.js +2 -1
  189. package/dist/simple-tree/objectNode.js.map +1 -1
  190. package/dist/simple-tree/objectNodeTypes.d.ts +2 -2
  191. package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
  192. package/dist/simple-tree/objectNodeTypes.js.map +1 -1
  193. package/dist/simple-tree/schemaTypes.d.ts +47 -1
  194. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  195. package/dist/simple-tree/schemaTypes.js.map +1 -1
  196. package/dist/simple-tree/toMapTree.js +1 -1
  197. package/dist/simple-tree/toMapTree.js.map +1 -1
  198. package/dist/util/bTreeUtils.d.ts +10 -0
  199. package/dist/util/bTreeUtils.d.ts.map +1 -0
  200. package/dist/util/bTreeUtils.js +52 -0
  201. package/dist/util/bTreeUtils.js.map +1 -0
  202. package/dist/util/idAllocator.d.ts +0 -2
  203. package/dist/util/idAllocator.d.ts.map +1 -1
  204. package/dist/util/idAllocator.js +0 -2
  205. package/dist/util/idAllocator.js.map +1 -1
  206. package/dist/util/index.d.ts +3 -2
  207. package/dist/util/index.d.ts.map +1 -1
  208. package/dist/util/index.js +7 -5
  209. package/dist/util/index.js.map +1 -1
  210. package/dist/util/rangeMap.d.ts +95 -43
  211. package/dist/util/rangeMap.d.ts.map +1 -1
  212. package/dist/util/rangeMap.js +202 -148
  213. package/dist/util/rangeMap.js.map +1 -1
  214. package/dist/util/utils.d.ts +26 -2
  215. package/dist/util/utils.d.ts.map +1 -1
  216. package/dist/util/utils.js +17 -2
  217. package/dist/util/utils.js.map +1 -1
  218. package/lib/alpha.d.ts +14 -0
  219. package/lib/beta.d.ts +2 -0
  220. package/lib/core/index.d.ts +2 -2
  221. package/lib/core/index.d.ts.map +1 -1
  222. package/lib/core/index.js +2 -2
  223. package/lib/core/index.js.map +1 -1
  224. package/lib/core/rebase/index.d.ts +2 -2
  225. package/lib/core/rebase/index.d.ts.map +1 -1
  226. package/lib/core/rebase/index.js +2 -2
  227. package/lib/core/rebase/index.js.map +1 -1
  228. package/lib/core/rebase/types.d.ts +5 -4
  229. package/lib/core/rebase/types.d.ts.map +1 -1
  230. package/lib/core/rebase/types.js +26 -1
  231. package/lib/core/rebase/types.js.map +1 -1
  232. package/lib/core/rebase/utils.d.ts +10 -0
  233. package/lib/core/rebase/utils.d.ts.map +1 -1
  234. package/lib/core/rebase/utils.js +20 -0
  235. package/lib/core/rebase/utils.js.map +1 -1
  236. package/lib/core/tree/delta.d.ts +21 -26
  237. package/lib/core/tree/delta.d.ts.map +1 -1
  238. package/lib/core/tree/delta.js.map +1 -1
  239. package/lib/core/tree/deltaUtil.d.ts +1 -3
  240. package/lib/core/tree/deltaUtil.d.ts.map +1 -1
  241. package/lib/core/tree/deltaUtil.js +1 -12
  242. package/lib/core/tree/deltaUtil.js.map +1 -1
  243. package/lib/core/tree/index.d.ts +1 -1
  244. package/lib/core/tree/index.d.ts.map +1 -1
  245. package/lib/core/tree/index.js +1 -1
  246. package/lib/core/tree/index.js.map +1 -1
  247. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  248. package/lib/core/tree/visitDelta.js +82 -80
  249. package/lib/core/tree/visitDelta.js.map +1 -1
  250. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +10 -0
  251. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  252. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
  253. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  254. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  255. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  256. package/lib/feature-libraries/deltaUtils.d.ts.map +1 -1
  257. package/lib/feature-libraries/deltaUtils.js +13 -0
  258. package/lib/feature-libraries/deltaUtils.js.map +1 -1
  259. package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
  260. package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -6
  261. package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
  262. package/lib/feature-libraries/index.d.ts +0 -1
  263. package/lib/feature-libraries/index.d.ts.map +1 -1
  264. package/lib/feature-libraries/index.js +0 -1
  265. package/lib/feature-libraries/index.js.map +1 -1
  266. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts +5 -5
  267. package/lib/feature-libraries/modular-schema/crossFieldQueries.d.ts.map +1 -1
  268. package/lib/feature-libraries/modular-schema/crossFieldQueries.js +2 -3
  269. package/lib/feature-libraries/modular-schema/crossFieldQueries.js.map +1 -1
  270. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +30 -6
  271. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  272. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  273. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  274. package/lib/feature-libraries/modular-schema/genericFieldKind.js +2 -1
  275. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  276. package/lib/feature-libraries/modular-schema/index.d.ts +2 -2
  277. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  278. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  279. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
  280. package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
  281. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
  282. package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
  283. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +5 -4
  284. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  285. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +158 -186
  286. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  287. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts +23 -20
  288. package/lib/feature-libraries/modular-schema/modularChangeTypes.d.ts.map +1 -1
  289. package/lib/feature-libraries/modular-schema/modularChangeTypes.js +18 -1
  290. package/lib/feature-libraries/modular-schema/modularChangeTypes.js.map +1 -1
  291. package/lib/feature-libraries/optional-field/optionalField.d.ts +3 -3
  292. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  293. package/lib/feature-libraries/optional-field/optionalField.js +24 -4
  294. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  295. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts +1 -1
  296. package/lib/feature-libraries/sequence-field/moveEffectTable.d.ts.map +1 -1
  297. package/lib/feature-libraries/sequence-field/moveEffectTable.js.map +1 -1
  298. package/lib/feature-libraries/sequence-field/rebase.js +4 -4
  299. package/lib/feature-libraries/sequence-field/rebase.js.map +1 -1
  300. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
  301. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
  302. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
  303. package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
  304. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts +2 -3
  305. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.d.ts.map +1 -1
  306. package/lib/feature-libraries/sequence-field/sequenceFieldToDelta.js.map +1 -1
  307. package/lib/feature-libraries/sequence-field/utils.d.ts +2 -2
  308. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  309. package/lib/feature-libraries/sequence-field/utils.js +50 -9
  310. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  311. package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
  312. package/lib/feature-libraries/treeCursorUtils.js +4 -1
  313. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  314. package/lib/index.d.ts +27 -3
  315. package/lib/index.d.ts.map +1 -1
  316. package/lib/index.js +2 -2
  317. package/lib/index.js.map +1 -1
  318. package/lib/legacy.d.ts +2 -0
  319. package/lib/packageVersion.d.ts +1 -1
  320. package/lib/packageVersion.js +1 -1
  321. package/lib/packageVersion.js.map +1 -1
  322. package/lib/public.d.ts +2 -0
  323. package/lib/shared-tree/index.d.ts +3 -2
  324. package/lib/shared-tree/index.d.ts.map +1 -1
  325. package/lib/shared-tree/index.js +3 -2
  326. package/lib/shared-tree/index.js.map +1 -1
  327. package/lib/shared-tree/schematizingTreeView.d.ts +10 -1
  328. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  329. package/lib/shared-tree/schematizingTreeView.js +46 -3
  330. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  331. package/lib/shared-tree/sharedTree.d.ts +44 -21
  332. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  333. package/lib/shared-tree/sharedTree.js +40 -34
  334. package/lib/shared-tree/sharedTree.js.map +1 -1
  335. package/lib/shared-tree/transactionTypes.d.ts +105 -0
  336. package/lib/shared-tree/transactionTypes.d.ts.map +1 -0
  337. package/lib/shared-tree/transactionTypes.js +10 -0
  338. package/lib/shared-tree/transactionTypes.js.map +1 -0
  339. package/lib/shared-tree/treeApi.d.ts +1 -25
  340. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  341. package/lib/shared-tree/treeApi.js +1 -5
  342. package/lib/shared-tree/treeApi.js.map +1 -1
  343. package/lib/shared-tree/treeCheckout.d.ts +4 -1
  344. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  345. package/lib/shared-tree/treeCheckout.js +143 -24
  346. package/lib/shared-tree/treeCheckout.js.map +1 -1
  347. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  348. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  349. package/lib/simple-tree/api/index.d.ts +1 -0
  350. package/lib/simple-tree/api/index.d.ts.map +1 -1
  351. package/lib/simple-tree/api/index.js +1 -0
  352. package/lib/simple-tree/api/index.js.map +1 -1
  353. package/lib/simple-tree/api/jsonSchema.d.ts +6 -0
  354. package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
  355. package/lib/simple-tree/api/jsonSchema.js.map +1 -1
  356. package/lib/simple-tree/api/schemaFactory.d.ts +21 -12
  357. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  358. package/lib/simple-tree/api/schemaFactory.js +5 -2
  359. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  360. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +83 -0
  361. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -0
  362. package/lib/simple-tree/api/schemaFactoryAlpha.js +86 -0
  363. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -0
  364. package/lib/simple-tree/api/simpleSchema.d.ts +5 -1
  365. package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
  366. package/lib/simple-tree/api/simpleSchema.js.map +1 -1
  367. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +14 -11
  368. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  369. package/lib/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  370. package/lib/simple-tree/api/tree.d.ts +60 -0
  371. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  372. package/lib/simple-tree/api/tree.js.map +1 -1
  373. package/lib/simple-tree/api/treeNodeApi.js +1 -1
  374. package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
  375. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  376. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +12 -12
  377. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  378. package/lib/simple-tree/arrayNode.d.ts +2 -2
  379. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  380. package/lib/simple-tree/arrayNode.js +3 -2
  381. package/lib/simple-tree/arrayNode.js.map +1 -1
  382. package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
  383. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  384. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  385. package/lib/simple-tree/index.d.ts +2 -2
  386. package/lib/simple-tree/index.d.ts.map +1 -1
  387. package/lib/simple-tree/index.js +1 -1
  388. package/lib/simple-tree/index.js.map +1 -1
  389. package/lib/simple-tree/leafNodeSchema.d.ts +5 -5
  390. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  391. package/lib/simple-tree/mapNode.d.ts +2 -2
  392. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  393. package/lib/simple-tree/mapNode.js +2 -1
  394. package/lib/simple-tree/mapNode.js.map +1 -1
  395. package/lib/simple-tree/objectNode.d.ts +2 -2
  396. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  397. package/lib/simple-tree/objectNode.js +2 -1
  398. package/lib/simple-tree/objectNode.js.map +1 -1
  399. package/lib/simple-tree/objectNodeTypes.d.ts +2 -2
  400. package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
  401. package/lib/simple-tree/objectNodeTypes.js.map +1 -1
  402. package/lib/simple-tree/schemaTypes.d.ts +47 -1
  403. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  404. package/lib/simple-tree/schemaTypes.js.map +1 -1
  405. package/lib/simple-tree/toMapTree.js +1 -1
  406. package/lib/simple-tree/toMapTree.js.map +1 -1
  407. package/lib/util/bTreeUtils.d.ts +10 -0
  408. package/lib/util/bTreeUtils.d.ts.map +1 -0
  409. package/lib/util/bTreeUtils.js +47 -0
  410. package/lib/util/bTreeUtils.js.map +1 -0
  411. package/lib/util/idAllocator.d.ts +0 -2
  412. package/lib/util/idAllocator.d.ts.map +1 -1
  413. package/lib/util/idAllocator.js +0 -2
  414. package/lib/util/idAllocator.js.map +1 -1
  415. package/lib/util/index.d.ts +3 -2
  416. package/lib/util/index.d.ts.map +1 -1
  417. package/lib/util/index.js +3 -2
  418. package/lib/util/index.js.map +1 -1
  419. package/lib/util/rangeMap.d.ts +95 -43
  420. package/lib/util/rangeMap.d.ts.map +1 -1
  421. package/lib/util/rangeMap.js +200 -144
  422. package/lib/util/rangeMap.js.map +1 -1
  423. package/lib/util/utils.d.ts +26 -2
  424. package/lib/util/utils.d.ts.map +1 -1
  425. package/lib/util/utils.js +15 -1
  426. package/lib/util/utils.js.map +1 -1
  427. package/package.json +24 -24
  428. package/src/core/index.ts +5 -2
  429. package/src/core/rebase/index.ts +5 -0
  430. package/src/core/rebase/types.ts +33 -5
  431. package/src/core/rebase/utils.ts +27 -0
  432. package/src/core/tree/delta.ts +21 -26
  433. package/src/core/tree/deltaUtil.ts +1 -16
  434. package/src/core/tree/index.ts +0 -2
  435. package/src/core/tree/visitDelta.ts +108 -97
  436. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +14 -1
  437. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +2 -2
  438. package/src/feature-libraries/deltaUtils.ts +13 -0
  439. package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -6
  440. package/src/feature-libraries/index.ts +0 -1
  441. package/src/feature-libraries/modular-schema/crossFieldQueries.ts +12 -13
  442. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +33 -9
  443. package/src/feature-libraries/modular-schema/genericFieldKind.ts +6 -4
  444. package/src/feature-libraries/modular-schema/index.ts +3 -0
  445. package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +12 -11
  446. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +254 -248
  447. package/src/feature-libraries/modular-schema/modularChangeTypes.ts +51 -26
  448. package/src/feature-libraries/optional-field/optionalField.ts +37 -8
  449. package/src/feature-libraries/sequence-field/moveEffectTable.ts +1 -1
  450. package/src/feature-libraries/sequence-field/rebase.ts +9 -3
  451. package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
  452. package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
  453. package/src/feature-libraries/sequence-field/sequenceFieldToDelta.ts +3 -4
  454. package/src/feature-libraries/sequence-field/utils.ts +54 -11
  455. package/src/feature-libraries/treeCursorUtils.ts +6 -1
  456. package/src/index.ts +45 -6
  457. package/src/packageVersion.ts +1 -1
  458. package/src/shared-tree/index.ts +16 -3
  459. package/src/shared-tree/schematizingTreeView.ts +91 -2
  460. package/src/shared-tree/sharedTree.ts +69 -44
  461. package/src/shared-tree/transactionTypes.ts +125 -0
  462. package/src/shared-tree/treeApi.ts +1 -28
  463. package/src/shared-tree/treeCheckout.ts +166 -25
  464. package/src/shared-tree-core/sharedTreeCore.ts +1 -1
  465. package/src/simple-tree/api/index.ts +1 -0
  466. package/src/simple-tree/api/jsonSchema.ts +7 -0
  467. package/src/simple-tree/api/schemaFactory.ts +33 -6
  468. package/src/simple-tree/api/schemaFactoryAlpha.ts +253 -0
  469. package/src/simple-tree/api/simpleSchema.ts +6 -1
  470. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +22 -12
  471. package/src/simple-tree/api/tree.ts +76 -4
  472. package/src/simple-tree/api/treeNodeApi.ts +1 -1
  473. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +19 -13
  474. package/src/simple-tree/arrayNode.ts +8 -2
  475. package/src/simple-tree/core/treeNodeSchema.ts +51 -7
  476. package/src/simple-tree/index.ts +3 -0
  477. package/src/simple-tree/mapNode.ts +7 -1
  478. package/src/simple-tree/objectNode.ts +7 -1
  479. package/src/simple-tree/objectNodeTypes.ts +4 -1
  480. package/src/simple-tree/schemaTypes.ts +50 -1
  481. package/src/simple-tree/toMapTree.ts +1 -1
  482. package/src/util/bTreeUtils.ts +60 -0
  483. package/src/util/idAllocator.ts +0 -2
  484. package/src/util/index.ts +5 -6
  485. package/src/util/rangeMap.ts +259 -184
  486. package/src/util/utils.ts +57 -4
  487. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
  488. package/dist/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
  489. package/dist/feature-libraries/memoizedIdRangeAllocator.js +0 -74
  490. package/dist/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
  491. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts +0 -38
  492. package/lib/feature-libraries/memoizedIdRangeAllocator.d.ts.map +0 -1
  493. package/lib/feature-libraries/memoizedIdRangeAllocator.js +0 -71
  494. package/lib/feature-libraries/memoizedIdRangeAllocator.js.map +0 -1
  495. package/lib/package.json +0 -3
  496. package/src/feature-libraries/memoizedIdRangeAllocator.ts +0 -112
@@ -18,6 +18,7 @@ import {
18
18
  normalizeAllowedTypes,
19
19
  type ImplicitAllowedTypes,
20
20
  type InsertableTreeNodeFromImplicitAllowedTypes,
21
+ type NodeSchemaMetadata,
21
22
  type TreeLeafValue,
22
23
  type TreeNodeFromImplicitAllowedTypes,
23
24
  } from "./schemaTypes.js";
@@ -992,7 +993,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
992
993
  if (!destinationField.context.isHydrated()) {
993
994
  if (!(sourceField instanceof UnhydratedTreeSequenceField)) {
994
995
  throw new UsageError(
995
- "Cannot move elements from an unhydrated array to a hydrated array.",
996
+ "Cannot move elements from a hydrated array to an unhydrated array.",
996
997
  );
997
998
  }
998
999
 
@@ -1062,11 +1063,13 @@ export function arraySchema<
1062
1063
  TName extends string,
1063
1064
  const T extends ImplicitAllowedTypes,
1064
1065
  const ImplicitlyConstructable extends boolean,
1066
+ const TCustomMetadata = unknown,
1065
1067
  >(
1066
1068
  identifier: TName,
1067
1069
  info: T,
1068
1070
  implicitlyConstructable: ImplicitlyConstructable,
1069
1071
  customizable: boolean,
1072
+ metadata?: NodeSchemaMetadata<TCustomMetadata>,
1070
1073
  ) {
1071
1074
  type Output = TreeNodeSchemaBoth<
1072
1075
  TName,
@@ -1075,7 +1078,8 @@ export function arraySchema<
1075
1078
  Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>,
1076
1079
  ImplicitlyConstructable,
1077
1080
  T,
1078
- undefined
1081
+ undefined,
1082
+ TCustomMetadata
1079
1083
  >;
1080
1084
 
1081
1085
  const lazyChildTypes = new Lazy(() => normalizeAllowedTypes(info));
@@ -1157,6 +1161,8 @@ export function arraySchema<
1157
1161
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
1158
1162
  return lazyChildTypes.value;
1159
1163
  }
1164
+ public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> | undefined =
1165
+ metadata;
1160
1166
 
1161
1167
  // eslint-disable-next-line import/no-deprecated
1162
1168
  public get [typeNameSymbol](): TName {
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { TreeLeafValue } from "../schemaTypes.js";
6
+ import type { NodeSchemaMetadata, TreeLeafValue } from "../schemaTypes.js";
7
7
  import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
8
8
 
9
9
  /**
@@ -27,11 +27,30 @@ export type TreeNodeSchema<
27
27
  TBuild = never,
28
28
  ImplicitlyConstructable extends boolean = boolean,
29
29
  Info = unknown,
30
+ TCustomMetadata = unknown,
30
31
  > =
31
32
  | (TNode extends TreeNode
32
- ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
33
+ ? TreeNodeSchemaClass<
34
+ Name,
35
+ Kind,
36
+ TNode,
37
+ TBuild,
38
+ ImplicitlyConstructable,
39
+ Info,
40
+ never,
41
+ TCustomMetadata
42
+ >
33
43
  : never)
34
- | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
44
+ | TreeNodeSchemaNonClass<
45
+ Name,
46
+ Kind,
47
+ TNode,
48
+ TBuild,
49
+ ImplicitlyConstructable,
50
+ Info,
51
+ never,
52
+ TCustomMetadata
53
+ >;
35
54
 
36
55
  /**
37
56
  * Schema which is not a class.
@@ -49,7 +68,15 @@ export type TreeNodeSchemaNonClass<
49
68
  ImplicitlyConstructable extends boolean = boolean,
50
69
  Info = unknown,
51
70
  TConstructorExtra = never,
52
- > = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> &
71
+ TCustomMetadata = unknown,
72
+ > = TreeNodeSchemaCore<
73
+ Name,
74
+ Kind,
75
+ ImplicitlyConstructable,
76
+ Info,
77
+ TInsertable,
78
+ TCustomMetadata
79
+ > &
53
80
  (undefined extends TConstructorExtra
54
81
  ? {
55
82
  /**
@@ -119,7 +146,15 @@ export type TreeNodeSchemaClass<
119
146
  ImplicitlyConstructable extends boolean = boolean,
120
147
  Info = unknown,
121
148
  TConstructorExtra = never,
122
- > = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> &
149
+ TCustomMetadata = unknown,
150
+ > = TreeNodeSchemaCore<
151
+ Name,
152
+ Kind,
153
+ ImplicitlyConstructable,
154
+ Info,
155
+ TInsertable,
156
+ TCustomMetadata
157
+ > &
123
158
  (undefined extends TConstructorExtra
124
159
  ? {
125
160
  /**
@@ -157,6 +192,7 @@ export type TreeNodeSchemaBoth<
157
192
  ImplicitlyConstructable extends boolean = boolean,
158
193
  Info = unknown,
159
194
  TConstructorExtra = never,
195
+ TCustomMetadata = unknown,
160
196
  > = TreeNodeSchemaClass<
161
197
  Name,
162
198
  Kind,
@@ -164,7 +200,8 @@ export type TreeNodeSchemaBoth<
164
200
  TInsertable,
165
201
  ImplicitlyConstructable,
166
202
  Info,
167
- TConstructorExtra
203
+ TConstructorExtra,
204
+ TCustomMetadata
168
205
  > &
169
206
  TreeNodeSchemaNonClass<
170
207
  Name,
@@ -173,7 +210,8 @@ export type TreeNodeSchemaBoth<
173
210
  TInsertable,
174
211
  ImplicitlyConstructable,
175
212
  Info,
176
- TConstructorExtra
213
+ TConstructorExtra,
214
+ TCustomMetadata
177
215
  >;
178
216
 
179
217
  /**
@@ -188,6 +226,7 @@ export interface TreeNodeSchemaCore<
188
226
  out ImplicitlyConstructable extends boolean,
189
227
  out Info = unknown,
190
228
  out TInsertable = never,
229
+ out TCustomMetadata = unknown,
191
230
  > {
192
231
  /**
193
232
  * Unique (within a document's schema) identifier used to associate nodes with their schema.
@@ -244,6 +283,11 @@ export interface TreeNodeSchemaCore<
244
283
  */
245
284
  readonly childTypes: ReadonlySet<TreeNodeSchema>;
246
285
 
286
+ /**
287
+ * User-provided {@link NodeSchemaMetadata} for this schema.
288
+ */
289
+ readonly metadata?: NodeSchemaMetadata<TCustomMetadata> | undefined;
290
+
247
291
  /**
248
292
  * Constructs an instance of this node type.
249
293
  * @remarks
@@ -35,6 +35,7 @@ export {
35
35
  type SchemaCompatibilityStatus,
36
36
  type ITreeConfigurationOptions,
37
37
  SchemaFactory,
38
+ SchemaFactoryAlpha,
38
39
  type SchemaFactoryObjectOptions,
39
40
  type ScopedSchemaName,
40
41
  type ValidateRecursiveSchema,
@@ -155,6 +156,8 @@ export {
155
156
  type Input,
156
157
  type ReadableField,
157
158
  type ReadSchema,
159
+ type NodeSchemaOptions,
160
+ type NodeSchemaMetadata,
158
161
  } from "./schemaTypes.js";
159
162
  export {
160
163
  getTreeNodeForField,
@@ -17,6 +17,7 @@ import {
17
17
  normalizeAllowedTypes,
18
18
  type ImplicitAllowedTypes,
19
19
  type InsertableTreeNodeFromImplicitAllowedTypes,
20
+ type NodeSchemaMetadata,
20
21
  type TreeNodeFromImplicitAllowedTypes,
21
22
  } from "./schemaTypes.js";
22
23
  import {
@@ -235,11 +236,13 @@ export function mapSchema<
235
236
  TName extends string,
236
237
  const T extends ImplicitAllowedTypes,
237
238
  const ImplicitlyConstructable extends boolean,
239
+ const TCustomMetadata = unknown,
238
240
  >(
239
241
  identifier: TName,
240
242
  info: T,
241
243
  implicitlyConstructable: ImplicitlyConstructable,
242
244
  useMapPrototype: boolean,
245
+ metadata?: NodeSchemaMetadata<TCustomMetadata>,
243
246
  ) {
244
247
  const lazyChildTypes = new Lazy(() => normalizeAllowedTypes(info));
245
248
 
@@ -283,6 +286,8 @@ export function mapSchema<
283
286
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
284
287
  return lazyChildTypes.value;
285
288
  }
289
+ public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> | undefined =
290
+ metadata;
286
291
 
287
292
  // eslint-disable-next-line import/no-deprecated
288
293
  public get [typeNameSymbol](): TName {
@@ -299,7 +304,8 @@ export function mapSchema<
299
304
  MapNodeInsertableData<T>,
300
305
  ImplicitlyConstructable,
301
306
  T,
302
- undefined
307
+ undefined,
308
+ TCustomMetadata
303
309
  > = Schema;
304
310
  return schemaErased;
305
311
  }
@@ -26,6 +26,7 @@ import {
26
26
  normalizeFieldSchema,
27
27
  type ImplicitAllowedTypes,
28
28
  FieldKind,
29
+ type NodeSchemaMetadata,
29
30
  } from "./schemaTypes.js";
30
31
  import {
31
32
  type TreeNodeSchema,
@@ -330,12 +331,15 @@ export function objectSchema<
330
331
  TName extends string,
331
332
  const T extends RestrictiveStringRecord<ImplicitFieldSchema>,
332
333
  const ImplicitlyConstructable extends boolean,
334
+ const TCustomMetadata = unknown,
333
335
  >(
334
336
  identifier: TName,
335
337
  info: T,
336
338
  implicitlyConstructable: ImplicitlyConstructable,
337
339
  allowUnknownOptionalFields: boolean,
338
- ): ObjectNodeSchema<TName, T, ImplicitlyConstructable> & ObjectNodeSchemaInternalData {
340
+ metadata?: NodeSchemaMetadata<TCustomMetadata>,
341
+ ): ObjectNodeSchema<TName, T, ImplicitlyConstructable, TCustomMetadata> &
342
+ ObjectNodeSchemaInternalData {
339
343
  // Ensure no collisions between final set of property keys, and final set of stored keys (including those
340
344
  // implicitly derived from property keys)
341
345
  assertUniqueKeys(identifier, info);
@@ -460,6 +464,8 @@ export function objectSchema<
460
464
  public static get childTypes(): ReadonlySet<TreeNodeSchema> {
461
465
  return lazyChildTypes.value;
462
466
  }
467
+ public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> | undefined =
468
+ metadata;
463
469
 
464
470
  // eslint-disable-next-line import/no-deprecated
465
471
  public get [typeNameSymbol](): TName {
@@ -23,13 +23,16 @@ export interface ObjectNodeSchema<
23
23
  T extends
24
24
  RestrictiveStringRecord<ImplicitFieldSchema> = RestrictiveStringRecord<ImplicitFieldSchema>,
25
25
  ImplicitlyConstructable extends boolean = boolean,
26
+ TCustomMetadata = unknown,
26
27
  > extends TreeNodeSchemaClass<
27
28
  TName,
28
29
  NodeKind.Object,
29
30
  TreeObjectNode<T, TName>,
30
31
  object & InsertableObjectFromSchemaRecord<T>,
31
32
  ImplicitlyConstructable,
32
- T
33
+ T,
34
+ never,
35
+ TCustomMetadata
33
36
  > {
34
37
  /**
35
38
  * From property keys to the associated schema.
@@ -190,7 +190,10 @@ export interface FieldProps<TCustomMetadata = unknown> {
190
190
 
191
191
  /**
192
192
  * Optional metadata to associate with the field.
193
- * @remarks Note: this metadata is not persisted in the document.
193
+ *
194
+ * @remarks
195
+ * Note: this metadata is not persisted nor made part of the collaborative state; it is strictly client-local.
196
+ * Different clients in the same collaborative session may see different metadata for the same field.
194
197
  */
195
198
  readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
196
199
  }
@@ -824,3 +827,49 @@ export type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boole
824
827
  */
825
828
  // eslint-disable-next-line @rushstack/no-new-null
826
829
  export type TreeLeafValue = number | string | boolean | IFluidHandle | null;
830
+
831
+ /**
832
+ * Additional information to provide to Node Schema creation.
833
+ *
834
+ * @typeParam TCustomMetadata - Custom metadata properties to associate with the Node Schema.
835
+ * See {@link NodeSchemaMetadata.custom}.
836
+ *
837
+ * @sealed
838
+ * @public
839
+ */
840
+ export interface NodeSchemaOptions<out TCustomMetadata = unknown> {
841
+ /**
842
+ * Optional metadata to associate with the Node Schema.
843
+ *
844
+ * @remarks
845
+ * Note: this metadata is not persisted nor made part of the collaborative state; it is strictly client-local.
846
+ * Different clients in the same collaborative session may see different metadata for the same field.
847
+ */
848
+ readonly metadata?: NodeSchemaMetadata<TCustomMetadata> | undefined;
849
+ }
850
+
851
+ /**
852
+ * Metadata associated with a Node Schema.
853
+ *
854
+ * @remarks Specified via {@link NodeSchemaOptions.metadata}.
855
+ *
856
+ * @sealed
857
+ * @public
858
+ */
859
+ export interface NodeSchemaMetadata<out TCustomMetadata = unknown> {
860
+ /**
861
+ * User-defined metadata.
862
+ */
863
+ readonly custom?: TCustomMetadata | undefined;
864
+
865
+ /**
866
+ * The description of the Node Schema.
867
+ *
868
+ * @remarks
869
+ *
870
+ * If provided, will be used by the system in scenarios where a description of the kind of node is useful.
871
+ * E.g., when converting a Node Schema to {@link https://json-schema.org/ | JSON Schema}, this description will be
872
+ * used as the `description` property.
873
+ */
874
+ readonly description?: string | undefined;
875
+ }
@@ -196,7 +196,7 @@ function nodeDataToMapTree(
196
196
  result = objectToMapTree(data, schema);
197
197
  break;
198
198
  default:
199
- fail(`Unrecognized schema kind: ${schema.kind}.`);
199
+ fail("Unrecognized schema kind");
200
200
  }
201
201
 
202
202
  return result;
@@ -0,0 +1,60 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { BTree } from "@tylerbu/sorted-btree-es6";
7
+ import { brand, type Brand } from "./brand.js";
8
+
9
+ export type TupleBTree<K, V> = Brand<BTree<K, V>, "TupleBTree">;
10
+
11
+ export function newTupleBTree<K extends readonly unknown[], V>(
12
+ entries?: [K, V][],
13
+ ): TupleBTree<K, V> {
14
+ return brand(new BTree<K, V>(entries, compareTuples));
15
+ }
16
+
17
+ // This assumes that the arrays are the same length.
18
+ function compareTuples(arrayA: readonly unknown[], arrayB: readonly unknown[]): number {
19
+ for (let i = 0; i < arrayA.length; i++) {
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ const a = arrayA[i] as any;
22
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
+ const b = arrayB[i] as any;
24
+
25
+ // Less-than and greater-than always return false if either value is undefined,
26
+ // so we handle undefined separately, treating it as less than all other values.
27
+ if (a === undefined && b !== undefined) {
28
+ return -1;
29
+ } else if (b === undefined && a !== undefined) {
30
+ return 1;
31
+ } else if (a < b) {
32
+ return -1;
33
+ } else if (a > b) {
34
+ return 1;
35
+ }
36
+ }
37
+
38
+ return 0;
39
+ }
40
+
41
+ export function mergeTupleBTrees<K extends readonly unknown[], V>(
42
+ tree1: TupleBTree<K, V> | undefined,
43
+ tree2: TupleBTree<K, V> | undefined,
44
+ preferLeft = true,
45
+ ): TupleBTree<K, V> {
46
+ if (tree1 === undefined) {
47
+ return tree2 !== undefined ? brand(tree2.clone()) : newTupleBTree<K, V>();
48
+ }
49
+
50
+ const result: TupleBTree<K, V> = brand(tree1.clone());
51
+ if (tree2 === undefined) {
52
+ return result;
53
+ }
54
+
55
+ for (const [key, value] of tree2.entries()) {
56
+ result.set(key, value, !preferLeft);
57
+ }
58
+
59
+ return result;
60
+ }
@@ -26,8 +26,6 @@ export interface IdAllocationState {
26
26
  maxId: number;
27
27
  }
28
28
 
29
- /**
30
- */
31
29
  export function idAllocatorFromMaxId(maxId: number | undefined = undefined): IdAllocator {
32
30
  return idAllocatorFromState({ maxId: maxId ?? -1 });
33
31
  }
package/src/util/index.ts CHANGED
@@ -94,6 +94,7 @@ export {
94
94
  hasSome,
95
95
  hasSingle,
96
96
  defineLazyCachedProperty,
97
+ copyPropertyIfDefined as copyProperty,
97
98
  } from "./utils.js";
98
99
  export { ReferenceCountedBase, type ReferenceCounted } from "./referenceCounting.js";
99
100
 
@@ -120,13 +121,9 @@ export {
120
121
  } from "./brandedMap.js";
121
122
 
122
123
  export {
123
- getFirstEntryFromRangeMap,
124
- getFromRangeMap,
125
- type RangeEntry,
126
- type RangeMap,
124
+ RangeMap,
127
125
  type RangeQueryResult,
128
- setInRangeMap,
129
- deleteFromRangeMap,
126
+ newIntegerRangeMap,
130
127
  } from "./rangeMap.js";
131
128
 
132
129
  export {
@@ -144,3 +141,5 @@ export {
144
141
  throwIfBroken,
145
142
  breakingClass,
146
143
  } from "./breakable.js";
144
+
145
+ export { type TupleBTree, newTupleBTree, mergeTupleBTrees } from "./bTreeUtils.js";