@fluidframework/tree 2.32.0 → 2.33.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 (339) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/api-report/tree.alpha.api.md +169 -192
  3. package/api-report/tree.beta.api.md +135 -164
  4. package/api-report/tree.legacy.alpha.api.md +138 -167
  5. package/api-report/tree.legacy.public.api.md +135 -164
  6. package/api-report/tree.public.api.md +135 -164
  7. package/dist/alpha.d.ts +3 -11
  8. package/dist/beta.d.ts +2 -11
  9. package/dist/core/index.d.ts +1 -1
  10. package/dist/core/index.d.ts.map +1 -1
  11. package/dist/core/index.js +1 -2
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/schema-stored/index.d.ts +1 -1
  14. package/dist/core/schema-stored/index.d.ts.map +1 -1
  15. package/dist/core/schema-stored/index.js +1 -2
  16. package/dist/core/schema-stored/index.js.map +1 -1
  17. package/dist/core/schema-stored/schema.d.ts +4 -11
  18. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  19. package/dist/core/schema-stored/schema.js +7 -14
  20. package/dist/core/schema-stored/schema.js.map +1 -1
  21. package/dist/core/tree/anchorSet.d.ts.map +1 -1
  22. package/dist/core/tree/anchorSet.js +31 -24
  23. package/dist/core/tree/anchorSet.js.map +1 -1
  24. package/dist/core/tree/deltaUtil.d.ts +1 -4
  25. package/dist/core/tree/deltaUtil.d.ts.map +1 -1
  26. package/dist/core/tree/deltaUtil.js +1 -13
  27. package/dist/core/tree/deltaUtil.js.map +1 -1
  28. package/dist/core/tree/visitDelta.d.ts +6 -29
  29. package/dist/core/tree/visitDelta.d.ts.map +1 -1
  30. package/dist/core/tree/visitDelta.js +11 -50
  31. package/dist/core/tree/visitDelta.js.map +1 -1
  32. package/dist/core/tree/visitorUtils.d.ts +12 -9
  33. package/dist/core/tree/visitorUtils.d.ts.map +1 -1
  34. package/dist/core/tree/visitorUtils.js +19 -32
  35. package/dist/core/tree/visitorUtils.js.map +1 -1
  36. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  37. package/dist/feature-libraries/chunked-forest/chunkedForest.js +6 -11
  38. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  39. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  40. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  41. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  42. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
  43. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
  45. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
  47. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  48. package/dist/feature-libraries/flex-tree/context.d.ts +5 -0
  49. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  50. package/dist/feature-libraries/flex-tree/context.js +4 -0
  51. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  52. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
  53. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  54. package/dist/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
  55. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  56. package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  57. package/dist/feature-libraries/indexing/anchorTreeIndex.js +15 -22
  58. package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  59. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
  60. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js +29 -25
  61. package/dist/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
  62. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  63. package/dist/feature-libraries/object-forest/objectForest.js +1 -7
  64. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  65. package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
  66. package/dist/feature-libraries/schema-index/codec.js +1 -1
  67. package/dist/feature-libraries/schema-index/codec.js.map +1 -1
  68. package/dist/index.d.ts +1 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +3 -2
  71. package/dist/index.js.map +1 -1
  72. package/dist/internalTypes.d.ts +1 -1
  73. package/dist/internalTypes.d.ts.map +1 -1
  74. package/dist/internalTypes.js.map +1 -1
  75. package/dist/jsonDomainSchema.d.ts +6 -6
  76. package/dist/jsonDomainSchema.d.ts.map +1 -1
  77. package/dist/jsonDomainSchema.js.map +1 -1
  78. package/dist/legacy.d.ts +2 -11
  79. package/dist/packageVersion.d.ts +1 -1
  80. package/dist/packageVersion.js +1 -1
  81. package/dist/packageVersion.js.map +1 -1
  82. package/dist/public.d.ts +2 -11
  83. package/dist/serializableDomainSchema.d.ts +5 -5
  84. package/dist/shared-tree/checkoutFlexTreeView.d.ts +1 -0
  85. package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  86. package/dist/shared-tree/checkoutFlexTreeView.js +4 -0
  87. package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
  88. package/dist/shared-tree/index.d.ts +3 -2
  89. package/dist/shared-tree/index.d.ts.map +1 -1
  90. package/dist/shared-tree/index.js +2 -2
  91. package/dist/shared-tree/index.js.map +1 -1
  92. package/dist/shared-tree/sharedTree.d.ts +4 -35
  93. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  94. package/dist/shared-tree/sharedTree.js +4 -54
  95. package/dist/shared-tree/sharedTree.js.map +1 -1
  96. package/dist/simple-tree/api/index.d.ts +2 -1
  97. package/dist/simple-tree/api/index.d.ts.map +1 -1
  98. package/dist/simple-tree/api/index.js +3 -1
  99. package/dist/simple-tree/api/index.js.map +1 -1
  100. package/dist/simple-tree/api/schemaFactory.d.ts +28 -28
  101. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  102. package/dist/simple-tree/api/schemaFactory.js +11 -11
  103. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  104. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
  105. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  106. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  107. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
  108. package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  109. package/dist/simple-tree/api/schemaFactoryRecursive.js +14 -1
  110. package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  111. package/dist/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  112. package/dist/simple-tree/api/tree.d.ts +1 -14
  113. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  114. package/dist/simple-tree/api/tree.js.map +1 -1
  115. package/dist/simple-tree/api/typesUnsafe.d.ts +237 -220
  116. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  117. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  118. package/dist/simple-tree/arrayNode.d.ts +2 -2
  119. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  120. package/dist/simple-tree/arrayNode.js.map +1 -1
  121. package/dist/simple-tree/core/treeNodeKernel.d.ts +9 -2
  122. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  123. package/dist/simple-tree/core/treeNodeKernel.js +39 -24
  124. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  125. package/dist/simple-tree/core/types.d.ts +14 -4
  126. package/dist/simple-tree/core/types.d.ts.map +1 -1
  127. package/dist/simple-tree/core/types.js +14 -4
  128. package/dist/simple-tree/core/types.js.map +1 -1
  129. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
  130. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  131. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -0
  132. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  133. package/dist/simple-tree/index.d.ts +1 -1
  134. package/dist/simple-tree/index.d.ts.map +1 -1
  135. package/dist/simple-tree/index.js +3 -2
  136. package/dist/simple-tree/index.js.map +1 -1
  137. package/dist/simple-tree/objectNode.d.ts +9 -2
  138. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  139. package/dist/simple-tree/objectNode.js +3 -0
  140. package/dist/simple-tree/objectNode.js.map +1 -1
  141. package/dist/simple-tree/schemaTypes.d.ts +10 -5
  142. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  143. package/dist/simple-tree/schemaTypes.js +5 -2
  144. package/dist/simple-tree/schemaTypes.js.map +1 -1
  145. package/dist/tableSchema.d.ts +78 -26
  146. package/dist/tableSchema.d.ts.map +1 -1
  147. package/dist/tableSchema.js +53 -24
  148. package/dist/tableSchema.js.map +1 -1
  149. package/dist/treeFactory.d.ts +6 -12
  150. package/dist/treeFactory.d.ts.map +1 -1
  151. package/dist/treeFactory.js +56 -5
  152. package/dist/treeFactory.js.map +1 -1
  153. package/lib/alpha.d.ts +3 -11
  154. package/lib/beta.d.ts +2 -11
  155. package/lib/core/index.d.ts +1 -1
  156. package/lib/core/index.d.ts.map +1 -1
  157. package/lib/core/index.js +1 -1
  158. package/lib/core/index.js.map +1 -1
  159. package/lib/core/schema-stored/index.d.ts +1 -1
  160. package/lib/core/schema-stored/index.d.ts.map +1 -1
  161. package/lib/core/schema-stored/index.js +1 -1
  162. package/lib/core/schema-stored/index.js.map +1 -1
  163. package/lib/core/schema-stored/schema.d.ts +4 -11
  164. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  165. package/lib/core/schema-stored/schema.js +6 -12
  166. package/lib/core/schema-stored/schema.js.map +1 -1
  167. package/lib/core/tree/anchorSet.d.ts.map +1 -1
  168. package/lib/core/tree/anchorSet.js +31 -24
  169. package/lib/core/tree/anchorSet.js.map +1 -1
  170. package/lib/core/tree/deltaUtil.d.ts +1 -4
  171. package/lib/core/tree/deltaUtil.d.ts.map +1 -1
  172. package/lib/core/tree/deltaUtil.js +0 -9
  173. package/lib/core/tree/deltaUtil.js.map +1 -1
  174. package/lib/core/tree/visitDelta.d.ts +6 -29
  175. package/lib/core/tree/visitDelta.d.ts.map +1 -1
  176. package/lib/core/tree/visitDelta.js +12 -51
  177. package/lib/core/tree/visitDelta.js.map +1 -1
  178. package/lib/core/tree/visitorUtils.d.ts +12 -9
  179. package/lib/core/tree/visitorUtils.d.ts.map +1 -1
  180. package/lib/core/tree/visitorUtils.js +19 -32
  181. package/lib/core/tree/visitorUtils.js.map +1 -1
  182. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  183. package/lib/feature-libraries/chunked-forest/chunkedForest.js +6 -11
  184. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  185. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +1 -1
  186. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  187. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  188. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +41 -5
  189. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
  190. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +43 -26
  191. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
  192. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +1 -1
  193. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  194. package/lib/feature-libraries/flex-tree/context.d.ts +5 -0
  195. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  196. package/lib/feature-libraries/flex-tree/context.js +5 -1
  197. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  198. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -0
  199. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  200. package/lib/feature-libraries/flex-tree/flexTreeTypes.js +8 -0
  201. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  202. package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
  203. package/lib/feature-libraries/indexing/anchorTreeIndex.js +15 -22
  204. package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
  205. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.d.ts.map +1 -1
  206. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js +28 -24
  207. package/lib/feature-libraries/node-identifier/nodeIdentifierManager.js.map +1 -1
  208. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  209. package/lib/feature-libraries/object-forest/objectForest.js +1 -7
  210. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  211. package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
  212. package/lib/feature-libraries/schema-index/codec.js +2 -2
  213. package/lib/feature-libraries/schema-index/codec.js.map +1 -1
  214. package/lib/index.d.ts +1 -1
  215. package/lib/index.d.ts.map +1 -1
  216. package/lib/index.js +1 -1
  217. package/lib/index.js.map +1 -1
  218. package/lib/internalTypes.d.ts +1 -1
  219. package/lib/internalTypes.d.ts.map +1 -1
  220. package/lib/internalTypes.js.map +1 -1
  221. package/lib/jsonDomainSchema.d.ts +6 -6
  222. package/lib/jsonDomainSchema.d.ts.map +1 -1
  223. package/lib/jsonDomainSchema.js.map +1 -1
  224. package/lib/legacy.d.ts +2 -11
  225. package/lib/packageVersion.d.ts +1 -1
  226. package/lib/packageVersion.js +1 -1
  227. package/lib/packageVersion.js.map +1 -1
  228. package/lib/public.d.ts +2 -11
  229. package/lib/serializableDomainSchema.d.ts +5 -5
  230. package/lib/shared-tree/checkoutFlexTreeView.d.ts +1 -0
  231. package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
  232. package/lib/shared-tree/checkoutFlexTreeView.js +4 -0
  233. package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
  234. package/lib/shared-tree/index.d.ts +3 -2
  235. package/lib/shared-tree/index.d.ts.map +1 -1
  236. package/lib/shared-tree/index.js +1 -1
  237. package/lib/shared-tree/index.js.map +1 -1
  238. package/lib/shared-tree/sharedTree.d.ts +4 -35
  239. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  240. package/lib/shared-tree/sharedTree.js +2 -51
  241. package/lib/shared-tree/sharedTree.js.map +1 -1
  242. package/lib/simple-tree/api/index.d.ts +2 -1
  243. package/lib/simple-tree/api/index.d.ts.map +1 -1
  244. package/lib/simple-tree/api/index.js +1 -0
  245. package/lib/simple-tree/api/index.js.map +1 -1
  246. package/lib/simple-tree/api/schemaFactory.d.ts +28 -28
  247. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  248. package/lib/simple-tree/api/schemaFactory.js +11 -11
  249. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  250. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +6 -7
  251. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  252. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  253. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +24 -5
  254. package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
  255. package/lib/simple-tree/api/schemaFactoryRecursive.js +12 -0
  256. package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
  257. package/lib/simple-tree/api/testRecursiveDomain.d.ts +10 -10
  258. package/lib/simple-tree/api/tree.d.ts +1 -14
  259. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  260. package/lib/simple-tree/api/tree.js.map +1 -1
  261. package/lib/simple-tree/api/typesUnsafe.d.ts +237 -220
  262. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  263. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  264. package/lib/simple-tree/arrayNode.d.ts +2 -2
  265. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  266. package/lib/simple-tree/arrayNode.js.map +1 -1
  267. package/lib/simple-tree/core/treeNodeKernel.d.ts +9 -2
  268. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  269. package/lib/simple-tree/core/treeNodeKernel.js +40 -25
  270. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  271. package/lib/simple-tree/core/types.d.ts +14 -4
  272. package/lib/simple-tree/core/types.d.ts.map +1 -1
  273. package/lib/simple-tree/core/types.js +14 -4
  274. package/lib/simple-tree/core/types.js.map +1 -1
  275. package/lib/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
  276. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  277. package/lib/simple-tree/core/unhydratedFlexTree.js +3 -0
  278. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  279. package/lib/simple-tree/index.d.ts +1 -1
  280. package/lib/simple-tree/index.d.ts.map +1 -1
  281. package/lib/simple-tree/index.js +1 -1
  282. package/lib/simple-tree/index.js.map +1 -1
  283. package/lib/simple-tree/objectNode.d.ts +9 -2
  284. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  285. package/lib/simple-tree/objectNode.js +4 -1
  286. package/lib/simple-tree/objectNode.js.map +1 -1
  287. package/lib/simple-tree/schemaTypes.d.ts +10 -5
  288. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  289. package/lib/simple-tree/schemaTypes.js +5 -2
  290. package/lib/simple-tree/schemaTypes.js.map +1 -1
  291. package/lib/tableSchema.d.ts +78 -26
  292. package/lib/tableSchema.d.ts.map +1 -1
  293. package/lib/tableSchema.js +53 -24
  294. package/lib/tableSchema.js.map +1 -1
  295. package/lib/treeFactory.d.ts +6 -12
  296. package/lib/treeFactory.d.ts.map +1 -1
  297. package/lib/treeFactory.js +55 -3
  298. package/lib/treeFactory.js.map +1 -1
  299. package/lib/tsdoc-metadata.json +1 -1
  300. package/package.json +22 -23
  301. package/src/core/index.ts +0 -2
  302. package/src/core/schema-stored/index.ts +0 -2
  303. package/src/core/schema-stored/schema.ts +10 -29
  304. package/src/core/tree/anchorSet.ts +32 -24
  305. package/src/core/tree/deltaUtil.ts +1 -13
  306. package/src/core/tree/visitDelta.ts +24 -81
  307. package/src/core/tree/visitorUtils.ts +43 -53
  308. package/src/feature-libraries/chunked-forest/chunkedForest.ts +7 -22
  309. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +1 -1
  310. package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +45 -27
  311. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +1 -1
  312. package/src/feature-libraries/flex-tree/context.ts +11 -1
  313. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +8 -0
  314. package/src/feature-libraries/indexing/anchorTreeIndex.ts +17 -28
  315. package/src/feature-libraries/node-identifier/nodeIdentifierManager.ts +39 -38
  316. package/src/feature-libraries/object-forest/objectForest.ts +1 -18
  317. package/src/feature-libraries/schema-index/codec.ts +1 -2
  318. package/src/index.ts +3 -11
  319. package/src/internalTypes.ts +0 -19
  320. package/src/jsonDomainSchema.ts +1 -3
  321. package/src/packageVersion.ts +1 -1
  322. package/src/shared-tree/checkoutFlexTreeView.ts +6 -0
  323. package/src/shared-tree/index.ts +8 -3
  324. package/src/shared-tree/sharedTree.ts +5 -133
  325. package/src/simple-tree/api/index.ts +2 -22
  326. package/src/simple-tree/api/schemaFactory.ts +40 -54
  327. package/src/simple-tree/api/schemaFactoryAlpha.ts +9 -14
  328. package/src/simple-tree/api/schemaFactoryRecursive.ts +25 -5
  329. package/src/simple-tree/api/tree.ts +1 -14
  330. package/src/simple-tree/api/typesUnsafe.ts +359 -341
  331. package/src/simple-tree/arrayNode.ts +2 -2
  332. package/src/simple-tree/core/treeNodeKernel.ts +46 -28
  333. package/src/simple-tree/core/types.ts +14 -4
  334. package/src/simple-tree/core/unhydratedFlexTree.ts +5 -1
  335. package/src/simple-tree/index.ts +2 -22
  336. package/src/simple-tree/objectNode.ts +13 -4
  337. package/src/simple-tree/schemaTypes.ts +11 -7
  338. package/src/tableSchema.ts +190 -63
  339. package/src/treeFactory.ts +151 -8
@@ -27,17 +27,35 @@ import type { EncodedChunkShape, EncodedFieldShape, EncodedValueShape } from "./
27
27
  import { isStableId } from "@fluidframework/id-compressor/internal";
28
28
 
29
29
  export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
30
- // TODO: Ensure uniform chunks, encoding and identifier generation sort fields the same.
31
- private readonly explicitKeys: Set<FieldKey>;
30
+ /**
31
+ * Set of keys for fields that are encoded using {@link NodeShape.specializedFieldEncoders}.
32
+ * TODO: Ensure uniform chunks, encoding and identifier generation sort fields the same.
33
+ */
34
+ private readonly specializedFieldKeys: Set<FieldKey>;
32
35
 
33
36
  public constructor(
34
37
  public readonly type: undefined | TreeNodeSchemaIdentifier,
35
38
  public readonly value: EncodedValueShape,
36
- public readonly fields: readonly KeyedFieldEncoder[],
37
- public readonly extraLocal: undefined | FieldEncoder,
39
+ /**
40
+ * Encoders for a specific set of fields, by key, in the order they will be encoded.
41
+ * These are fields for which specialized encoding is provided as an optimization.
42
+ * Using these for a given field instead of falling back to {@link NodeShape.specializedFieldEncoders} is often more efficient:
43
+ * this avoids the need to explicitly include the key and shape in the encoded data for each node instance.
44
+ * Instead, this information is here, and thus is encoded only once as part of the node shape.
45
+ * These encoders will be used, even if the field they apply to is empty (which can add overhead for fields which are usually empty).
46
+ *
47
+ * Any fields not included here will be encoded using {@link NodeShape.otherFieldsEncoder}.
48
+ * If {@link NodeShape.otherFieldsEncoder} is undefined, then this must handle all non-empty fields.
49
+ */
50
+ public readonly specializedFieldEncoders: readonly KeyedFieldEncoder[],
51
+ /**
52
+ * Encoder for all other fields that are not in {@link NodeShape.specializedFieldEncoders}. These fields must
53
+ * be encoded after the specialized fields.
54
+ */
55
+ public readonly otherFieldsEncoder: undefined | FieldEncoder,
38
56
  ) {
39
57
  super();
40
- this.explicitKeys = new Set(this.fields.map((f) => f.key));
58
+ this.specializedFieldKeys = new Set(this.specializedFieldEncoders.map((f) => f.key));
41
59
  }
42
60
 
43
61
  private getValueToEncode(cursor: ITreeCursorSynchronous, cache: EncoderCache): Value {
@@ -64,28 +82,28 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
64
82
  assert(cursor.type === this.type, 0x741 /* type must match shape */);
65
83
  }
66
84
  encodeValue(this.getValueToEncode(cursor, cache), this.value, outputBuffer);
67
- for (const field of this.fields) {
68
- cursor.enterField(brand(field.key));
69
- field.shape.encodeField(cursor, cache, outputBuffer);
85
+ for (const fieldEncoder of this.specializedFieldEncoders) {
86
+ cursor.enterField(brand(fieldEncoder.key));
87
+ fieldEncoder.encoder.encodeField(cursor, cache, outputBuffer);
70
88
  cursor.exitField();
71
89
  }
72
90
 
73
- const localBuffer: BufferFormat<EncodedChunkShape> = [];
91
+ const otherFieldsBuffer: BufferFormat<EncodedChunkShape> = [];
74
92
 
75
93
  forEachField(cursor, () => {
76
94
  const key = cursor.getFieldKey();
77
- if (!this.explicitKeys.has(key)) {
95
+ if (!this.specializedFieldKeys.has(key)) {
78
96
  assert(
79
- this.extraLocal !== undefined,
97
+ this.otherFieldsEncoder !== undefined,
80
98
  0x742 /* had extra local fields when shape does not support them */,
81
99
  );
82
- localBuffer.push(new IdentifierToken(key));
83
- this.extraLocal.encodeField(cursor, cache, localBuffer);
100
+ otherFieldsBuffer.push(new IdentifierToken(key));
101
+ this.otherFieldsEncoder.encodeField(cursor, cache, otherFieldsBuffer);
84
102
  }
85
103
  });
86
104
 
87
- if (this.extraLocal !== undefined) {
88
- outputBuffer.push(localBuffer);
105
+ if (this.otherFieldsEncoder !== undefined) {
106
+ outputBuffer.push(otherFieldsBuffer);
89
107
  }
90
108
  }
91
109
 
@@ -97,8 +115,8 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
97
115
  c: {
98
116
  type: encodeOptionalIdentifier(this.type, identifiers),
99
117
  value: this.value,
100
- fields: encodeFieldShapes(this.fields, identifiers, shapes),
101
- extraFields: encodeOptionalFieldShape(this.extraLocal, shapes),
118
+ fields: encodeFieldShapes(this.specializedFieldEncoders, identifiers, shapes),
119
+ extraFields: encodeOptionalFieldShape(this.otherFieldsEncoder, shapes),
102
120
  },
103
121
  };
104
122
  }
@@ -111,13 +129,13 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
111
129
  identifiers.add(this.type);
112
130
  }
113
131
 
114
- for (const field of this.fields) {
115
- identifiers.add(field.key);
116
- shapes(field.shape.shape);
132
+ for (const fieldEncoder of this.specializedFieldEncoders) {
133
+ identifiers.add(fieldEncoder.key);
134
+ shapes(fieldEncoder.encoder.shape);
117
135
  }
118
136
 
119
- if (this.extraLocal !== undefined) {
120
- shapes(this.extraLocal.shape);
137
+ if (this.otherFieldsEncoder !== undefined) {
138
+ shapes(this.otherFieldsEncoder.shape);
121
139
  }
122
140
  }
123
141
 
@@ -127,18 +145,18 @@ export class NodeShape extends Shape<EncodedChunkShape> implements NodeEncoder {
127
145
  }
128
146
 
129
147
  export function encodeFieldShapes(
130
- fields: readonly KeyedFieldEncoder[],
148
+ fieldEncoders: readonly KeyedFieldEncoder[],
131
149
  identifiers: DeduplicationTable<string>,
132
150
  shapes: DeduplicationTable<Shape<EncodedChunkShape>>,
133
151
  ): EncodedFieldShape[] | undefined {
134
- if (fields.length === 0) {
152
+ if (fieldEncoders.length === 0) {
135
153
  return undefined;
136
154
  }
137
- return fields.map((field) => [
155
+ return fieldEncoders.map((fieldEncoder) => [
138
156
  // key
139
- encodeIdentifier(field.key, identifiers),
157
+ encodeIdentifier(fieldEncoder.key, identifiers),
140
158
  // shape
141
- shapes.valueToIndex.get(field.shape.shape) ?? fail(0xb50 /* missing shape */),
159
+ shapes.valueToIndex.get(fieldEncoder.encoder.shape) ?? fail(0xb50 /* missing shape */),
142
160
  ]);
143
161
  }
144
162
 
@@ -122,7 +122,7 @@ export function treeShaper(
122
122
 
123
123
  const objectNodeFields: KeyedFieldEncoder[] = [];
124
124
  for (const [key, field] of schema.objectNodeFields ?? []) {
125
- objectNodeFields.push({ key, shape: fieldHandler.shapeFromField(field) });
125
+ objectNodeFields.push({ key, encoder: fieldHandler.shapeFromField(field) });
126
126
  }
127
127
 
128
128
  const shape = new NodeShape(schemaName, false, objectNodeFields, undefined);
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import { assert } from "@fluidframework/core-utils/internal";
6
+ import { assert, debugAssert } from "@fluidframework/core-utils/internal";
7
7
 
8
8
  import {
9
9
  type ForestEvents,
@@ -43,6 +43,11 @@ export interface FlexTreeContext {
43
43
  * If false, this context was created for use in a unhydrated tree, and the full document schema is unknown.
44
44
  */
45
45
  isHydrated(): this is FlexTreeHydratedContext;
46
+
47
+ /**
48
+ * If true, none of the nodes in this context can be used.
49
+ */
50
+ isDisposed(): boolean;
46
51
  }
47
52
 
48
53
  /**
@@ -106,9 +111,14 @@ export class Context implements FlexTreeHydratedContext, IDisposable {
106
111
  }
107
112
 
108
113
  public isHydrated(): this is FlexTreeHydratedContext {
114
+ debugAssert(() => !this.disposed || "Disposed");
109
115
  return true;
110
116
  }
111
117
 
118
+ public isDisposed(): boolean {
119
+ return this.disposed;
120
+ }
121
+
112
122
  public get schema(): TreeStoredSchema {
113
123
  return this.checkout.storedSchema;
114
124
  }
@@ -94,6 +94,14 @@ export enum TreeStatus {
94
94
 
95
95
  /**
96
96
  * Is removed and cannot be added back to the original document tree.
97
+ * @remarks
98
+ * Nodes can enter this state for multiple reasons:
99
+ * - The node was removed and nothing (e.g. undo/redo history) kept it from being cleaned up.
100
+ * - The {@link TreeView} was disposed or had a schema change which made the tree incompatible.
101
+ * @privateRemarks
102
+ * There was planned work (AB#17948) to make the first reason a node could become "Deleted" impossible,
103
+ * at least as an opt in feature,
104
+ * by lifetime extending all nodes which are still possible to reach automatically.
97
105
  */
98
106
  Deleted = 2,
99
107
 
@@ -139,27 +139,14 @@ export class AnchorTreeIndex<TKey extends TreeIndexKey, TValue>
139
139
  assert(parent !== undefined, 0xa99 /* must have a parent */);
140
140
  this.reIndexSpine(parent);
141
141
  },
142
- afterDetach: () => {
143
- assert(parent !== undefined, 0xa9a /* must have a parent */);
144
- this.reIndexSpine(parent);
145
- },
146
- // when a replace happens, the keys of previously indexed nodes could be changed so we must re-index them
147
- afterReplace: () => {
148
- assert(parent !== undefined, 0xa8b /* must have a parent */);
149
- const cursor = this.forest.allocateCursor();
150
- this.forest.moveCursorToPath(parent, cursor);
151
- assert(
152
- cursor.mode === CursorLocationType.Nodes,
153
- 0xa8c /* replace should happen in a node */,
154
- );
155
- cursor.exitNode();
156
- this.indexField(cursor);
157
- if (!this.isShallowIndex) {
158
- // we must also re-index the spine if the key finders allow for any value under a subtree to be the key
159
- // this means that a replace can cause the key for any node up its spine to be changed
160
- this.indexSpine(cursor);
142
+ afterDetach: (_source, _count_, _destination, isReplaced) => {
143
+ if (isReplaced) {
144
+ // If the node will be replaced, we defer re-indexing until the corresponding attach event.
145
+ // This has performance benefits but is also required to avoid experiencing the error case where the field that is used as the indexing key is empty.
146
+ } else {
147
+ assert(parent !== undefined, 0xa9a /* must have a parent */);
148
+ this.reIndexSpine(parent);
161
149
  }
162
- cursor.clear();
163
150
  },
164
151
  // the methods below are used to keep track of the path that has been traversed by the visitor
165
152
  // this is required so that cursors can be moved to the correct location when index updates are required
@@ -315,17 +302,19 @@ export class AnchorTreeIndex<TKey extends TreeIndexKey, TValue>
315
302
  * Checks if the spine needs to be re-indexed and if so, re-indexes it starting from the given path.
316
303
  */
317
304
  private reIndexSpine(path: UpPath): void {
305
+ const cursor = this.forest.allocateCursor();
306
+ this.forest.moveCursorToPath(path, cursor);
307
+ assert(
308
+ cursor.mode === CursorLocationType.Nodes,
309
+ 0xa9b /* attach should happen in a node */,
310
+ );
311
+ cursor.exitNode();
312
+ // TODO ADO:36390 avoid re-indexing the whole field when not necessary
313
+ this.indexField(cursor);
318
314
  if (!this.isShallowIndex) {
319
- const cursor = this.forest.allocateCursor();
320
- this.forest.moveCursorToPath(path, cursor);
321
- assert(
322
- cursor.mode === CursorLocationType.Nodes,
323
- 0xa9b /* attach should happen in a node */,
324
- );
325
- cursor.exitNode();
326
315
  this.indexSpine(cursor);
327
- cursor.clear();
328
316
  }
317
+ cursor.clear();
329
318
  }
330
319
 
331
320
  private checkNotDisposed(errorMessage?: string): void {
@@ -46,46 +46,47 @@ export interface NodeIdentifierManager {
46
46
  export function createNodeIdentifierManager(
47
47
  idCompressor?: IIdCompressor | undefined,
48
48
  ): NodeIdentifierManager {
49
- return {
50
- generateLocalNodeIdentifier: () => {
51
- assert(
52
- idCompressor !== undefined,
53
- 0x6e4 /* Runtime IdCompressor must be available to generate local node identifiers */,
54
- );
55
- return brand(idCompressor.generateCompressedId());
56
- },
57
-
58
- localizeNodeIdentifier: (identifier: StableNodeIdentifier) => {
59
- assert(
60
- idCompressor !== undefined,
61
- 0x6e5 /* Runtime IdCompressor must be available to convert node identifiers */,
62
- );
63
- return brand(idCompressor.recompress(identifier));
64
- },
49
+ return new DefaultNodeIdentifierManager(idCompressor);
50
+ }
65
51
 
66
- stabilizeNodeIdentifier: (identifier: LocalNodeIdentifier) => {
67
- assert(
68
- idCompressor !== undefined,
69
- 0x6e6 /* Runtime IdCompressor must be available to convert node identifiers */,
70
- );
71
- return brand(
72
- // TODO: The assert below is required for type safety but is maybe slow
73
- assertIsStableId(idCompressor.decompress(extractFromOpaque(identifier))),
74
- );
75
- },
76
- tryLocalizeNodeIdentifier: (identifier: string) => {
77
- assert(
78
- idCompressor !== undefined,
79
- 0x6e9 /* Runtime IdCompressor must be available to convert node identifiers */,
80
- );
81
- if (isStableNodeIdentifier(identifier)) {
82
- const compressedIdentifier = idCompressor.tryRecompress(identifier);
83
- if (compressedIdentifier !== undefined) {
84
- return brand(compressedIdentifier);
85
- }
52
+ class DefaultNodeIdentifierManager implements NodeIdentifierManager {
53
+ public constructor(private readonly idCompressor: IIdCompressor | undefined) {}
54
+ public generateLocalNodeIdentifier(): LocalNodeIdentifier {
55
+ assert(
56
+ this.idCompressor !== undefined,
57
+ 0x6e4 /* Runtime IdCompressor must be available to generate local node identifiers */,
58
+ );
59
+ return brand(this.idCompressor.generateCompressedId());
60
+ }
61
+ public localizeNodeIdentifier(identifier: StableNodeIdentifier): LocalNodeIdentifier {
62
+ assert(
63
+ this.idCompressor !== undefined,
64
+ 0x6e5 /* Runtime IdCompressor must be available to convert node identifiers */,
65
+ );
66
+ return brand(this.idCompressor.recompress(identifier));
67
+ }
68
+ public stabilizeNodeIdentifier(identifier: LocalNodeIdentifier): StableNodeIdentifier {
69
+ assert(
70
+ this.idCompressor !== undefined,
71
+ 0x6e6 /* Runtime IdCompressor must be available to convert node identifiers */,
72
+ );
73
+ return brand(
74
+ // TODO: The assert below is required for type safety but is maybe slow
75
+ assertIsStableId(this.idCompressor.decompress(extractFromOpaque(identifier))),
76
+ );
77
+ }
78
+ public tryLocalizeNodeIdentifier(identifier: string): LocalNodeIdentifier | undefined {
79
+ assert(
80
+ this.idCompressor !== undefined,
81
+ 0x6e9 /* Runtime IdCompressor must be available to convert node identifiers */,
82
+ );
83
+ if (isStableNodeIdentifier(identifier)) {
84
+ const compressedIdentifier = this.idCompressor.tryRecompress(identifier);
85
+ if (compressedIdentifier !== undefined) {
86
+ return brand(compressedIdentifier);
86
87
  }
87
- },
88
- };
88
+ }
89
+ }
89
90
  }
90
91
 
91
92
  export function isStableNodeIdentifier(
@@ -236,20 +236,6 @@ export class ObjectForest implements IEditableForest {
236
236
  parent.fields.delete(key);
237
237
  }
238
238
  }
239
- public replace(
240
- newContentSource: FieldKey,
241
- range: Range,
242
- oldContentDestination: FieldKey,
243
- oldContentId: DeltaDetachedNodeId,
244
- ): void {
245
- preEdit();
246
- assert(
247
- newContentSource !== oldContentDestination,
248
- 0x7ba /* Replace detached source field and detached destination field must be different */,
249
- );
250
- this.detachEdit(range, oldContentDestination);
251
- this.attachEdit(newContentSource, range.end - range.start, range.start);
252
- }
253
239
  public enterNode(index: number): void {
254
240
  cursor.enterNode(index);
255
241
  }
@@ -267,10 +253,7 @@ export class ObjectForest implements IEditableForest {
267
253
  const forestVisitor = new Visitor(this);
268
254
  const announcedVisitors: AnnouncedVisitor[] = [];
269
255
  this.deltaVisitors.forEach((getVisitor) => announcedVisitors.push(getVisitor()));
270
- const combinedVisitor = combineVisitors(
271
- [forestVisitor, ...announcedVisitors],
272
- announcedVisitors,
273
- );
256
+ const combinedVisitor = combineVisitors([forestVisitor, ...announcedVisitors]);
274
257
  this.activeVisitor = combinedVisitor;
275
258
  return combinedVisitor;
276
259
  }
@@ -17,7 +17,6 @@ import {
17
17
  encodeFieldSchema,
18
18
  schemaFormat,
19
19
  storedSchemaDecodeDispatcher,
20
- toTreeNodeSchemaDataFormat,
21
20
  } from "../../core/index.js";
22
21
  import { brand } from "../../util/index.js";
23
22
 
@@ -33,7 +32,7 @@ export function encodeRepo(repo: TreeStoredSchema): Format {
33
32
  enumerable: true,
34
33
  configurable: true,
35
34
  writable: true,
36
- value: toTreeNodeSchemaDataFormat(schema.encode()),
35
+ value: schema.encode(),
37
36
  });
38
37
  }
39
38
  return {
package/src/index.ts CHANGED
@@ -124,17 +124,7 @@ export {
124
124
  // Can not be moved to internalTypes since doing so causes app code to throw errors like:
125
125
  // error TS2742: The inferred type of 'Inventory' cannot be named without a reference to '../node_modules/@fluidframework/tree/lib/internalTypes.js'. This is likely not portable. A type annotation is necessary.
126
126
  type AllowedTypes,
127
- type ImplicitAllowedTypesUnsafe,
128
- type ImplicitFieldSchemaUnsafe,
129
- type TreeObjectNodeUnsafe,
130
- type InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
131
- type TreeArrayNodeUnsafe,
132
- type TreeMapNodeUnsafe,
133
- type InsertableObjectFromSchemaRecordUnsafe,
134
- type InsertableTreeFieldFromImplicitFieldUnsafe,
135
- type FieldSchemaUnsafe,
136
- type TreeNodeSchemaClassUnsafe,
137
- type InsertableTreeNodeFromAllowedTypesUnsafe,
127
+ type System_Unsafe,
138
128
  type FieldSchemaAlphaUnsafe,
139
129
  type ArrayNodeCustomizableSchemaUnsafe,
140
130
  type MapNodeCustomizableSchemaUnsafe,
@@ -233,6 +223,7 @@ export {
233
223
  replaceHandles,
234
224
  replaceVerboseTreeHandles,
235
225
  type HandleConverter,
226
+ allowUnused,
236
227
  type LeafSchema,
237
228
  type ArrayNodeCustomizableSchema,
238
229
  type ArrayNodePojoEmulationSchema,
@@ -240,6 +231,7 @@ export {
240
231
  type MapNodeCustomizableSchema,
241
232
  type MapNodePojoEmulationSchema,
242
233
  MapNodeSchema,
234
+ type ObjectFromSchemaRecord,
243
235
  } from "./simple-tree/index.js";
244
236
  export {
245
237
  SharedTree,
@@ -17,25 +17,6 @@ export type {
17
17
  DefaultProvider,
18
18
  typeNameSymbol,
19
19
  InsertableObjectFromSchemaRecord,
20
- ObjectFromSchemaRecord,
21
- // Recursive Schema APIs
22
- FieldHasDefaultUnsafe,
23
- ObjectFromSchemaRecordUnsafe,
24
- TreeObjectNodeUnsafe,
25
- TreeFieldFromImplicitFieldUnsafe,
26
- TreeNodeFromImplicitAllowedTypesUnsafe,
27
- InsertableTreeNodeFromImplicitAllowedTypesUnsafe,
28
- TreeArrayNodeUnsafe,
29
- TreeMapNodeUnsafe,
30
- InsertableObjectFromSchemaRecordUnsafe,
31
- InsertableTreeFieldFromImplicitFieldUnsafe,
32
- InsertableTypedNodeUnsafe,
33
- NodeBuilderDataUnsafe,
34
- NodeFromSchemaUnsafe,
35
- ReadonlyMapInlined,
36
- TreeNodeSchemaUnsafe,
37
- AllowedTypesUnsafe,
38
- TreeNodeSchemaNonClassUnsafe,
39
20
  } from "./simple-tree/index.js";
40
21
  export type { FlexList, FlexListToUnion, ExtractItemType } from "./simple-tree/index.js";
41
22
 
@@ -12,14 +12,12 @@ import type {
12
12
  ValidateRecursiveSchema,
13
13
  // #region Unused imports to make d.ts cleaner
14
14
  /* eslint-disable unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars */
15
- InsertableTypedNodeUnsafe,
15
+ System_Unsafe,
16
16
  TreeNodeSchemaNonClass,
17
17
  TreeNodeSchemaClass,
18
- TreeMapNodeUnsafe,
19
18
  NodeKind,
20
19
  TreeNodeSchemaCore,
21
20
  WithType,
22
- TreeArrayNodeUnsafe,
23
21
  LeafSchema,
24
22
  /* eslint-enable unused-imports/no-unused-imports, @typescript-eslint/no-unused-vars */
25
23
  // #endregion
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.32.0";
9
+ export const pkgVersion = "2.33.0";
@@ -34,6 +34,8 @@ export class CheckoutFlexTreeView<out TCheckout extends ITreeCheckout = ITreeChe
34
34
  */
35
35
  public readonly flexTree: FlexTreeField;
36
36
 
37
+ private disposed = false;
38
+
37
39
  public constructor(
38
40
  /**
39
41
  * Access non-view schema specific aspects of this branch.
@@ -52,6 +54,9 @@ export class CheckoutFlexTreeView<out TCheckout extends ITreeCheckout = ITreeChe
52
54
  }
53
55
 
54
56
  public [disposeSymbol](): void {
57
+ assert(!this.disposed, 0xb80 /* Double disposed */);
58
+ this.disposed = true;
59
+
55
60
  for (const anchorNode of this.checkout.forest.anchors) {
56
61
  tryDisposeTreeNode(anchorNode);
57
62
  }
@@ -65,6 +70,7 @@ export class CheckoutFlexTreeView<out TCheckout extends ITreeCheckout = ITreeChe
65
70
  * Any mutations of the new view will not apply to this view until the new view is merged back into this view via `merge()`.
66
71
  */
67
72
  public fork(): CheckoutFlexTreeView<ITreeCheckout & ITreeCheckoutFork> {
73
+ assert(!this.disposed, 0xb81 /* disposed */);
68
74
  const branch = this.checkout.branch();
69
75
  return new CheckoutFlexTreeView(branch, this.schema, this.nodeKeyManager);
70
76
  }
@@ -4,11 +4,10 @@
4
4
  */
5
5
 
6
6
  export {
7
- type ISharedTree,
8
7
  type ITreePrivate,
9
8
  type SharedTreeOptionsInternal,
10
9
  type SharedTreeOptions,
11
- SharedTree,
10
+ SharedTreeKernel,
12
11
  getBranch,
13
12
  type ForestType,
14
13
  type SharedTreeContentSnapshot,
@@ -40,7 +39,11 @@ export { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
40
39
 
41
40
  export { CheckoutFlexTreeView } from "./checkoutFlexTreeView.js";
42
41
 
43
- export type { ISharedTreeEditor, ISchemaEditor } from "./sharedTreeEditBuilder.js";
42
+ export type {
43
+ ISharedTreeEditor,
44
+ ISchemaEditor,
45
+ SharedTreeEditBuilder,
46
+ } from "./sharedTreeEditBuilder.js";
44
47
 
45
48
  export {
46
49
  treeApi as Tree,
@@ -55,3 +58,5 @@ export {
55
58
  type ViewContent,
56
59
  independentView,
57
60
  } from "./independentView.js";
61
+
62
+ export type { SharedTreeChange } from "./sharedTreeChangeTypes.js";