@fluidframework/tree 2.51.0 → 2.52.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/.vscode/settings.json +0 -1
  2. package/CHANGELOG.md +43 -0
  3. package/api-report/tree.alpha.api.md +3 -2
  4. package/dist/codec/codec.d.ts +2 -1
  5. package/dist/codec/codec.d.ts.map +1 -1
  6. package/dist/codec/codec.js +4 -3
  7. package/dist/codec/codec.js.map +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.d.ts.map +1 -1
  10. package/dist/core/index.js +3 -2
  11. package/dist/core/index.js.map +1 -1
  12. package/dist/core/rebase/index.d.ts +1 -1
  13. package/dist/core/rebase/index.d.ts.map +1 -1
  14. package/dist/core/rebase/index.js +2 -1
  15. package/dist/core/rebase/index.js.map +1 -1
  16. package/dist/core/rebase/types.d.ts +3 -1
  17. package/dist/core/rebase/types.d.ts.map +1 -1
  18. package/dist/core/rebase/types.js +2 -1
  19. package/dist/core/rebase/types.js.map +1 -1
  20. package/dist/core/schema-stored/schema.d.ts +1 -23
  21. package/dist/core/schema-stored/schema.d.ts.map +1 -1
  22. package/dist/core/schema-stored/schema.js +2 -2
  23. package/dist/core/schema-stored/schema.js.map +1 -1
  24. package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
  25. package/dist/core/tree/detachedFieldIndex.js +2 -3
  26. package/dist/core/tree/detachedFieldIndex.js.map +1 -1
  27. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  28. package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  29. package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
  30. package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  31. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  32. package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  33. package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
  34. package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  35. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  36. package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  37. package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
  38. package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  39. package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  40. package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  41. package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
  42. package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  43. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  44. package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  45. package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
  46. package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  47. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  48. package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  49. package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
  50. package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  51. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  52. package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  53. package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
  54. package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  55. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  56. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  57. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
  58. package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  59. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  60. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  61. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  62. package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  63. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  64. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  65. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
  66. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  67. package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  68. package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  69. package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
  70. package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  71. package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  72. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  73. package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
  74. package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  75. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  76. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  77. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
  78. package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  79. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  80. package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  81. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  82. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  83. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  84. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  85. package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  86. package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
  87. package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  88. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  89. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  90. package/dist/feature-libraries/default-schema/index.js +2 -2
  91. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  92. package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  93. package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  94. package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
  95. package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  96. package/dist/feature-libraries/index.d.ts +1 -2
  97. package/dist/feature-libraries/index.d.ts.map +1 -1
  98. package/dist/feature-libraries/index.js +2 -4
  99. package/dist/feature-libraries/index.js.map +1 -1
  100. package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
  101. package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  102. package/dist/feature-libraries/modular-schema/comparison.js +15 -16
  103. package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
  104. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  105. package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  106. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  107. package/dist/feature-libraries/object-forest/objectForest.js +2 -3
  108. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  109. package/dist/index.d.ts +1 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +6 -2
  112. package/dist/index.js.map +1 -1
  113. package/dist/packageVersion.d.ts +1 -1
  114. package/dist/packageVersion.js +1 -1
  115. package/dist/packageVersion.js.map +1 -1
  116. package/dist/shared-tree/independentView.d.ts +8 -0
  117. package/dist/shared-tree/independentView.d.ts.map +1 -1
  118. package/dist/shared-tree/independentView.js +23 -11
  119. package/dist/shared-tree/independentView.js.map +1 -1
  120. package/dist/shared-tree/schematizeTree.js +1 -1
  121. package/dist/shared-tree/schematizeTree.js.map +1 -1
  122. package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
  123. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  124. package/dist/shared-tree/schematizingTreeView.js +7 -10
  125. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  126. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  127. package/dist/shared-tree/sharedTree.js +1 -29
  128. package/dist/shared-tree/sharedTree.js.map +1 -1
  129. package/dist/shared-tree/treeAlpha.d.ts +20 -6
  130. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  131. package/dist/shared-tree/treeAlpha.js +9 -4
  132. package/dist/shared-tree/treeAlpha.js.map +1 -1
  133. package/dist/shared-tree/treeCheckout.d.ts +2 -1
  134. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  135. package/dist/shared-tree/treeCheckout.js +32 -0
  136. package/dist/shared-tree/treeCheckout.js.map +1 -1
  137. package/dist/shared-tree-core/branch.d.ts.map +1 -1
  138. package/dist/shared-tree-core/branch.js +1 -1
  139. package/dist/shared-tree-core/branch.js.map +1 -1
  140. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  141. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  142. package/dist/simple-tree/api/conciseTree.js +6 -6
  143. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  144. package/dist/simple-tree/api/configuration.d.ts +8 -2
  145. package/dist/simple-tree/api/configuration.d.ts.map +1 -1
  146. package/dist/simple-tree/api/configuration.js.map +1 -1
  147. package/dist/simple-tree/api/create.d.ts +8 -7
  148. package/dist/simple-tree/api/create.d.ts.map +1 -1
  149. package/dist/simple-tree/api/create.js +35 -22
  150. package/dist/simple-tree/api/create.js.map +1 -1
  151. package/dist/simple-tree/api/customTree.d.ts +25 -4
  152. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  153. package/dist/simple-tree/api/customTree.js +42 -16
  154. package/dist/simple-tree/api/customTree.js.map +1 -1
  155. package/dist/simple-tree/api/discrepancies.d.ts +98 -0
  156. package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
  157. package/dist/simple-tree/api/discrepancies.js +255 -0
  158. package/dist/simple-tree/api/discrepancies.js.map +1 -0
  159. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  160. package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  161. package/dist/simple-tree/api/schemaCompatibilityTester.js +18 -117
  162. package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  163. package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
  164. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  165. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  166. package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
  167. package/dist/simple-tree/api/storedSchema.js +5 -1
  168. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  169. package/dist/simple-tree/api/treeBeta.d.ts +2 -2
  170. package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
  171. package/dist/simple-tree/api/treeBeta.js +10 -4
  172. package/dist/simple-tree/api/treeBeta.js.map +1 -1
  173. package/dist/simple-tree/api/verboseTree.d.ts +2 -2
  174. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  175. package/dist/simple-tree/api/verboseTree.js +15 -15
  176. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  177. package/dist/simple-tree/core/allowedTypes.d.ts +20 -4
  178. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  179. package/dist/simple-tree/core/allowedTypes.js +45 -13
  180. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  181. package/dist/simple-tree/core/context.d.ts +13 -2
  182. package/dist/simple-tree/core/context.d.ts.map +1 -1
  183. package/dist/simple-tree/core/context.js +22 -9
  184. package/dist/simple-tree/core/context.js.map +1 -1
  185. package/dist/simple-tree/core/index.d.ts +2 -2
  186. package/dist/simple-tree/core/index.d.ts.map +1 -1
  187. package/dist/simple-tree/core/index.js +3 -1
  188. package/dist/simple-tree/core/index.js.map +1 -1
  189. package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
  190. package/dist/simple-tree/core/treeNodeKernel.js +1 -1
  191. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  192. package/dist/simple-tree/core/treeNodeValid.d.ts +1 -1
  193. package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  194. package/dist/simple-tree/core/treeNodeValid.js +8 -1
  195. package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
  196. package/dist/simple-tree/core/walkSchema.d.ts +3 -0
  197. package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
  198. package/dist/simple-tree/core/walkSchema.js +2 -0
  199. package/dist/simple-tree/core/walkSchema.js.map +1 -1
  200. package/dist/simple-tree/createContext.d.ts +2 -0
  201. package/dist/simple-tree/createContext.d.ts.map +1 -1
  202. package/dist/simple-tree/createContext.js +3 -1
  203. package/dist/simple-tree/createContext.js.map +1 -1
  204. package/dist/simple-tree/fieldSchema.d.ts +1 -0
  205. package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
  206. package/dist/simple-tree/fieldSchema.js +1 -0
  207. package/dist/simple-tree/fieldSchema.js.map +1 -1
  208. package/dist/simple-tree/index.d.ts +4 -4
  209. package/dist/simple-tree/index.d.ts.map +1 -1
  210. package/dist/simple-tree/index.js +7 -8
  211. package/dist/simple-tree/index.js.map +1 -1
  212. package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  213. package/dist/simple-tree/node-kinds/array/arrayNode.js +1 -1
  214. package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  215. package/dist/simple-tree/node-kinds/index.d.ts +1 -1
  216. package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
  217. package/dist/simple-tree/node-kinds/index.js +1 -2
  218. package/dist/simple-tree/node-kinds/index.js.map +1 -1
  219. package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
  220. package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  221. package/dist/simple-tree/node-kinds/object/index.js +1 -2
  222. package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
  223. package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  224. package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  225. package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
  226. package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  227. package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
  228. package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
  229. package/dist/simple-tree/prepareForInsertion.js +9 -3
  230. package/dist/simple-tree/prepareForInsertion.js.map +1 -1
  231. package/dist/simple-tree/toStoredSchema.d.ts +3 -0
  232. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
  233. package/dist/simple-tree/toStoredSchema.js +3 -0
  234. package/dist/simple-tree/toStoredSchema.js.map +1 -1
  235. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  236. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  237. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  238. package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
  239. package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
  240. package/dist/simple-tree/walkFieldSchema.js +1 -0
  241. package/dist/simple-tree/walkFieldSchema.js.map +1 -1
  242. package/lib/codec/codec.d.ts +2 -1
  243. package/lib/codec/codec.d.ts.map +1 -1
  244. package/lib/codec/codec.js +4 -3
  245. package/lib/codec/codec.js.map +1 -1
  246. package/lib/core/index.d.ts +1 -1
  247. package/lib/core/index.d.ts.map +1 -1
  248. package/lib/core/index.js +1 -1
  249. package/lib/core/index.js.map +1 -1
  250. package/lib/core/rebase/index.d.ts +1 -1
  251. package/lib/core/rebase/index.d.ts.map +1 -1
  252. package/lib/core/rebase/index.js +1 -1
  253. package/lib/core/rebase/index.js.map +1 -1
  254. package/lib/core/rebase/types.d.ts +3 -1
  255. package/lib/core/rebase/types.d.ts.map +1 -1
  256. package/lib/core/rebase/types.js +1 -0
  257. package/lib/core/rebase/types.js.map +1 -1
  258. package/lib/core/schema-stored/schema.d.ts +1 -23
  259. package/lib/core/schema-stored/schema.d.ts.map +1 -1
  260. package/lib/core/schema-stored/schema.js +2 -2
  261. package/lib/core/schema-stored/schema.js.map +1 -1
  262. package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
  263. package/lib/core/tree/detachedFieldIndex.js +2 -3
  264. package/lib/core/tree/detachedFieldIndex.js.map +1 -1
  265. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
  266. package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
  267. package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
  268. package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
  269. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
  270. package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
  271. package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
  272. package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
  273. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
  274. package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
  275. package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
  276. package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
  277. package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
  278. package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
  279. package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
  280. package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
  281. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
  282. package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
  283. package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
  284. package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
  285. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
  286. package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
  287. package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
  288. package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
  289. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
  290. package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
  291. package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
  292. package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
  293. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
  294. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
  295. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
  296. package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
  297. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
  298. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
  299. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
  300. package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
  301. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
  302. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  303. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
  304. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  305. package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
  306. package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
  307. package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
  308. package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
  309. package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
  310. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
  311. package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
  312. package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
  313. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
  314. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
  315. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
  316. package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
  317. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
  318. package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
  319. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
  320. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  321. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +14 -2
  322. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  323. package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
  324. package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
  325. package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
  326. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  327. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  328. package/lib/feature-libraries/default-schema/index.js +1 -1
  329. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  330. package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
  331. package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
  332. package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
  333. package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
  334. package/lib/feature-libraries/index.d.ts +1 -2
  335. package/lib/feature-libraries/index.d.ts.map +1 -1
  336. package/lib/feature-libraries/index.js +1 -2
  337. package/lib/feature-libraries/index.js.map +1 -1
  338. package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
  339. package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
  340. package/lib/feature-libraries/modular-schema/comparison.js +14 -14
  341. package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
  342. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
  343. package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
  344. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  345. package/lib/feature-libraries/object-forest/objectForest.js +3 -4
  346. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  347. package/lib/index.d.ts +1 -1
  348. package/lib/index.d.ts.map +1 -1
  349. package/lib/index.js +2 -2
  350. package/lib/index.js.map +1 -1
  351. package/lib/packageVersion.d.ts +1 -1
  352. package/lib/packageVersion.js +1 -1
  353. package/lib/packageVersion.js.map +1 -1
  354. package/lib/shared-tree/independentView.d.ts +8 -0
  355. package/lib/shared-tree/independentView.d.ts.map +1 -1
  356. package/lib/shared-tree/independentView.js +21 -10
  357. package/lib/shared-tree/independentView.js.map +1 -1
  358. package/lib/shared-tree/schematizeTree.js +1 -1
  359. package/lib/shared-tree/schematizeTree.js.map +1 -1
  360. package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
  361. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  362. package/lib/shared-tree/schematizingTreeView.js +8 -11
  363. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  364. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  365. package/lib/shared-tree/sharedTree.js +2 -30
  366. package/lib/shared-tree/sharedTree.js.map +1 -1
  367. package/lib/shared-tree/treeAlpha.d.ts +20 -6
  368. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  369. package/lib/shared-tree/treeAlpha.js +10 -5
  370. package/lib/shared-tree/treeAlpha.js.map +1 -1
  371. package/lib/shared-tree/treeCheckout.d.ts +2 -1
  372. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  373. package/lib/shared-tree/treeCheckout.js +33 -1
  374. package/lib/shared-tree/treeCheckout.js.map +1 -1
  375. package/lib/shared-tree-core/branch.d.ts.map +1 -1
  376. package/lib/shared-tree-core/branch.js +1 -1
  377. package/lib/shared-tree-core/branch.js.map +1 -1
  378. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  379. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  380. package/lib/simple-tree/api/conciseTree.js +6 -6
  381. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  382. package/lib/simple-tree/api/configuration.d.ts +8 -2
  383. package/lib/simple-tree/api/configuration.d.ts.map +1 -1
  384. package/lib/simple-tree/api/configuration.js.map +1 -1
  385. package/lib/simple-tree/api/create.d.ts +8 -7
  386. package/lib/simple-tree/api/create.d.ts.map +1 -1
  387. package/lib/simple-tree/api/create.js +38 -25
  388. package/lib/simple-tree/api/create.js.map +1 -1
  389. package/lib/simple-tree/api/customTree.d.ts +25 -4
  390. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  391. package/lib/simple-tree/api/customTree.js +43 -17
  392. package/lib/simple-tree/api/customTree.js.map +1 -1
  393. package/lib/simple-tree/api/discrepancies.d.ts +98 -0
  394. package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
  395. package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
  396. package/lib/simple-tree/api/discrepancies.js.map +1 -0
  397. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
  398. package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
  399. package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -118
  400. package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
  401. package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
  402. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  403. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  404. package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
  405. package/lib/simple-tree/api/storedSchema.js +6 -2
  406. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  407. package/lib/simple-tree/api/treeBeta.d.ts +2 -2
  408. package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
  409. package/lib/simple-tree/api/treeBeta.js +8 -2
  410. package/lib/simple-tree/api/treeBeta.js.map +1 -1
  411. package/lib/simple-tree/api/verboseTree.d.ts +2 -2
  412. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  413. package/lib/simple-tree/api/verboseTree.js +9 -9
  414. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  415. package/lib/simple-tree/core/allowedTypes.d.ts +20 -4
  416. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  417. package/lib/simple-tree/core/allowedTypes.js +42 -12
  418. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  419. package/lib/simple-tree/core/context.d.ts +13 -2
  420. package/lib/simple-tree/core/context.d.ts.map +1 -1
  421. package/lib/simple-tree/core/context.js +22 -9
  422. package/lib/simple-tree/core/context.js.map +1 -1
  423. package/lib/simple-tree/core/index.d.ts +2 -2
  424. package/lib/simple-tree/core/index.d.ts.map +1 -1
  425. package/lib/simple-tree/core/index.js +2 -2
  426. package/lib/simple-tree/core/index.js.map +1 -1
  427. package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
  428. package/lib/simple-tree/core/treeNodeKernel.js +1 -1
  429. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  430. package/lib/simple-tree/core/treeNodeValid.d.ts +1 -1
  431. package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
  432. package/lib/simple-tree/core/treeNodeValid.js +8 -1
  433. package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
  434. package/lib/simple-tree/core/walkSchema.d.ts +3 -0
  435. package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
  436. package/lib/simple-tree/core/walkSchema.js +2 -0
  437. package/lib/simple-tree/core/walkSchema.js.map +1 -1
  438. package/lib/simple-tree/createContext.d.ts +2 -0
  439. package/lib/simple-tree/createContext.d.ts.map +1 -1
  440. package/lib/simple-tree/createContext.js +3 -1
  441. package/lib/simple-tree/createContext.js.map +1 -1
  442. package/lib/simple-tree/fieldSchema.d.ts +1 -0
  443. package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
  444. package/lib/simple-tree/fieldSchema.js +1 -0
  445. package/lib/simple-tree/fieldSchema.js.map +1 -1
  446. package/lib/simple-tree/index.d.ts +4 -4
  447. package/lib/simple-tree/index.d.ts.map +1 -1
  448. package/lib/simple-tree/index.js +4 -4
  449. package/lib/simple-tree/index.js.map +1 -1
  450. package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
  451. package/lib/simple-tree/node-kinds/array/arrayNode.js +1 -1
  452. package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
  453. package/lib/simple-tree/node-kinds/index.d.ts +1 -1
  454. package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
  455. package/lib/simple-tree/node-kinds/index.js +1 -1
  456. package/lib/simple-tree/node-kinds/index.js.map +1 -1
  457. package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
  458. package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
  459. package/lib/simple-tree/node-kinds/object/index.js +1 -1
  460. package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
  461. package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -7
  462. package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
  463. package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
  464. package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
  465. package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
  466. package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
  467. package/lib/simple-tree/prepareForInsertion.js +11 -5
  468. package/lib/simple-tree/prepareForInsertion.js.map +1 -1
  469. package/lib/simple-tree/toStoredSchema.d.ts +3 -0
  470. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
  471. package/lib/simple-tree/toStoredSchema.js +3 -0
  472. package/lib/simple-tree/toStoredSchema.js.map +1 -1
  473. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
  474. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  475. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
  476. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  477. package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
  478. package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
  479. package/lib/simple-tree/walkFieldSchema.js +1 -0
  480. package/lib/simple-tree/walkFieldSchema.js.map +1 -1
  481. package/package.json +23 -23
  482. package/src/codec/codec.ts +4 -3
  483. package/src/core/index.ts +2 -0
  484. package/src/core/rebase/index.ts +2 -0
  485. package/src/core/rebase/types.ts +4 -0
  486. package/src/core/schema-stored/schema.ts +2 -26
  487. package/src/core/tree/detachedFieldIndex.ts +4 -6
  488. package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
  489. package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
  490. package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
  491. package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
  492. package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
  493. package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
  494. package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
  495. package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
  496. package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
  497. package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
  498. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
  499. package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
  500. package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
  501. package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
  502. package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
  503. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +10 -0
  504. package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
  505. package/src/feature-libraries/default-schema/index.ts +1 -1
  506. package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
  507. package/src/feature-libraries/index.ts +1 -3
  508. package/src/feature-libraries/modular-schema/comparison.ts +14 -29
  509. package/src/feature-libraries/object-forest/objectForest.ts +10 -6
  510. package/src/index.ts +5 -0
  511. package/src/packageVersion.ts +1 -1
  512. package/src/shared-tree/independentView.ts +45 -19
  513. package/src/shared-tree/schematizeTree.ts +1 -1
  514. package/src/shared-tree/schematizingTreeView.ts +16 -13
  515. package/src/shared-tree/sharedTree.ts +2 -42
  516. package/src/shared-tree/treeAlpha.ts +30 -18
  517. package/src/shared-tree/treeCheckout.ts +54 -10
  518. package/src/shared-tree-core/branch.ts +1 -6
  519. package/src/simple-tree/api/conciseTree.ts +9 -7
  520. package/src/simple-tree/api/configuration.ts +8 -2
  521. package/src/simple-tree/api/create.ts +49 -36
  522. package/src/simple-tree/api/customTree.ts +59 -20
  523. package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
  524. package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
  525. package/src/simple-tree/api/schemaFactory.ts +7 -4
  526. package/src/simple-tree/api/storedSchema.ts +6 -9
  527. package/src/simple-tree/api/treeBeta.ts +17 -4
  528. package/src/simple-tree/api/verboseTree.ts +17 -8
  529. package/src/simple-tree/core/allowedTypes.ts +54 -21
  530. package/src/simple-tree/core/context.ts +24 -22
  531. package/src/simple-tree/core/index.ts +2 -1
  532. package/src/simple-tree/core/treeNodeKernel.ts +1 -1
  533. package/src/simple-tree/core/treeNodeValid.ts +9 -2
  534. package/src/simple-tree/core/walkSchema.ts +3 -0
  535. package/src/simple-tree/createContext.ts +6 -1
  536. package/src/simple-tree/fieldSchema.ts +1 -0
  537. package/src/simple-tree/index.ts +5 -10
  538. package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
  539. package/src/simple-tree/node-kinds/index.ts +0 -1
  540. package/src/simple-tree/node-kinds/object/index.ts +0 -1
  541. package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
  542. package/src/simple-tree/prepareForInsertion.ts +17 -9
  543. package/src/simple-tree/toStoredSchema.ts +3 -0
  544. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
  545. package/src/simple-tree/walkFieldSchema.ts +1 -0
  546. package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  547. package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  548. package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
  549. package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
  550. package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  551. package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  552. package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
  553. package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  554. package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  555. package/dist/feature-libraries/initializeForest.d.ts +0 -18
  556. package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
  557. package/dist/feature-libraries/initializeForest.js +0 -35
  558. package/dist/feature-libraries/initializeForest.js.map +0 -1
  559. package/dist/simple-tree/discrepancies.d.ts +0 -167
  560. package/dist/simple-tree/discrepancies.d.ts.map +0 -1
  561. package/dist/simple-tree/discrepancies.js +0 -382
  562. package/dist/simple-tree/discrepancies.js.map +0 -1
  563. package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
  564. package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
  565. package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
  566. package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
  567. package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
  568. package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
  569. package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
  570. package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
  571. package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
  572. package/lib/feature-libraries/initializeForest.d.ts +0 -18
  573. package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
  574. package/lib/feature-libraries/initializeForest.js +0 -31
  575. package/lib/feature-libraries/initializeForest.js.map +0 -1
  576. package/lib/simple-tree/discrepancies.d.ts +0 -167
  577. package/lib/simple-tree/discrepancies.d.ts.map +0 -1
  578. package/lib/simple-tree/discrepancies.js.map +0 -1
  579. package/src/feature-libraries/initializeForest.ts +0 -55
package/src/index.ts CHANGED
@@ -114,6 +114,7 @@ export {
114
114
  type SchemaCompatibilityStatus,
115
115
  type FieldProps,
116
116
  type FieldPropsAlpha,
117
+ normalizeFieldSchema,
117
118
  type InternalTreeNode,
118
119
  type WithType,
119
120
  type NodeChangedData,
@@ -214,6 +215,10 @@ export {
214
215
  type SimpleObjectFieldSchema,
215
216
  type SimpleRecordNodeSchema,
216
217
  normalizeAllowedTypes,
218
+ walkFieldSchema,
219
+ walkNodeSchema,
220
+ walkAllowedTypes,
221
+ type SchemaVisitor,
217
222
  getSimpleSchema,
218
223
  type ReadonlyArrayNode,
219
224
  type InsertableTreeNodeFromAllowedTypes,
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.51.0";
9
+ export const pkgVersion = "2.52.0";
@@ -12,9 +12,11 @@ import {
12
12
 
13
13
  import type { ICodecOptions } from "../codec/index.js";
14
14
  import {
15
+ type ITreeCursorSynchronous,
15
16
  type RevisionTag,
16
17
  RevisionTagCodec,
17
18
  SchemaVersion,
19
+ type TreeStoredSchema,
18
20
  TreeStoredSchemaRepository,
19
21
  } from "../core/index.js";
20
22
  import {
@@ -24,7 +26,6 @@ import {
24
26
  type FieldBatchEncodingContext,
25
27
  defaultSchemaPolicy,
26
28
  TreeCompressionStrategy,
27
- initializeForest,
28
29
  } from "../feature-libraries/index.js";
29
30
  // eslint-disable-next-line import/no-internal-modules
30
31
  import type { Format } from "../feature-libraries/schema-index/formatV1.js";
@@ -41,6 +42,7 @@ import {
41
42
  } from "./sharedTree.js";
42
43
  import { createTreeCheckout } from "./treeCheckout.js";
43
44
  import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
45
+ import { initialize } from "./schematizeTree.js";
44
46
 
45
47
  /**
46
48
  * Create an uninitialized {@link TreeView} that is not tied to any {@link ITree} instance.
@@ -85,6 +87,8 @@ export function independentView<const TSchema extends ImplicitFieldSchema>(
85
87
  * Such a view can never experience collaboration or be persisted to to a Fluid Container.
86
88
  *
87
89
  * This can be useful for testing, as well as use-cases like working on local files instead of documents stored in some Fluid service.
90
+ * @privateRemarks
91
+ * TODO: Providing an API which generates a {@link ViewableTree} extended with export options from {@link ITreeAlpha} and maybe even branching APIs would likely be better that just exposing a {@link TreeViewAlpha}.
88
92
  * @alpha
89
93
  */
90
94
  export function independentInitializedView<const TSchema extends ImplicitFieldSchema>(
@@ -92,22 +96,11 @@ export function independentInitializedView<const TSchema extends ImplicitFieldSc
92
96
  options: ForestOptions & ICodecOptions,
93
97
  content: ViewContent,
94
98
  ): TreeViewAlpha<TSchema> {
95
- const breaker = new Breakable("independentInitializedView");
96
99
  const idCompressor: IIdCompressor = content.idCompressor;
97
- const mintRevisionTag = (): RevisionTag => idCompressor.generateCompressedId();
98
- const revisionTagCodec = new RevisionTagCodec(idCompressor);
99
-
100
100
  const fieldBatchCodec = makeFieldBatchCodec(options, 1);
101
101
  const schemaCodec = makeSchemaCodec(options, SchemaVersion.v1);
102
102
 
103
- const schema = new TreeStoredSchemaRepository(schemaCodec.decode(content.schema as Format));
104
- const forest = buildConfiguredForest(
105
- breaker,
106
- options.forest ?? defaultSharedTreeOptions.forest,
107
- schema,
108
- idCompressor,
109
- );
110
-
103
+ const schema = schemaCodec.decode(content.schema as Format);
111
104
  const context: FieldBatchEncodingContext = {
112
105
  encodeType: TreeCompressionStrategy.Compressed,
113
106
  idCompressor,
@@ -117,21 +110,54 @@ export function independentInitializedView<const TSchema extends ImplicitFieldSc
117
110
 
118
111
  const fieldCursors = fieldBatchCodec.decode(content.tree as JsonCompatibleReadOnly, context);
119
112
  assert(fieldCursors.length === 1, 0xa5b /* must have exactly 1 field in batch */);
120
- // Checked above.
121
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
122
- initializeForest(forest, fieldCursors[0]!, revisionTagCodec, idCompressor, false);
113
+
114
+ return independentInitializedViewInternal(
115
+ config,
116
+ options,
117
+ schema,
118
+ // Checked above.
119
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
120
+ fieldCursors[0]!,
121
+ idCompressor,
122
+ );
123
+ }
124
+
125
+ /**
126
+ * {@link independentInitializedView} but using internal types instead of persisted data formats.
127
+ */
128
+ export function independentInitializedViewInternal<const TSchema extends ImplicitFieldSchema>(
129
+ config: TreeViewConfiguration<TSchema>,
130
+ options: ForestOptions & ICodecOptions,
131
+ schema: TreeStoredSchema,
132
+ rootFieldCursor: ITreeCursorSynchronous,
133
+ idCompressor: IIdCompressor,
134
+ ): SchematizingSimpleTreeView<TSchema> {
135
+ const breaker = new Breakable("independentInitializedView");
136
+ const revisionTagCodec = new RevisionTagCodec(idCompressor);
137
+ const mintRevisionTag = (): RevisionTag => idCompressor.generateCompressedId();
138
+
139
+ // To ensure the forest is in schema when constructed, start it with an empty schema and set the schema repository content later.
140
+ const schemaRepository = new TreeStoredSchemaRepository();
141
+
142
+ const forest = buildConfiguredForest(
143
+ breaker,
144
+ options.forest ?? defaultSharedTreeOptions.forest,
145
+ schemaRepository,
146
+ idCompressor,
147
+ );
123
148
 
124
149
  const checkout = createTreeCheckout(idCompressor, mintRevisionTag, revisionTagCodec, {
125
150
  forest,
126
- schema,
151
+ schema: schemaRepository,
127
152
  breaker,
128
153
  });
129
- const out: TreeViewAlpha<TSchema> = new SchematizingSimpleTreeView<TSchema>(
154
+
155
+ initialize(checkout, { schema, initialTree: rootFieldCursor });
156
+ return new SchematizingSimpleTreeView<TSchema>(
130
157
  checkout,
131
158
  config,
132
159
  createNodeIdentifierManager(idCompressor),
133
160
  );
134
- return out;
135
161
  }
136
162
 
137
163
  /**
@@ -219,7 +219,7 @@ export function ensureSchema(
219
219
  return false;
220
220
  }
221
221
  case UpdateType.SchemaCompatible: {
222
- checkout.updateSchema(toStoredSchema(viewSchema.viewSchemaRoot));
222
+ checkout.updateSchema(toStoredSchema(viewSchema.viewSchema.root));
223
223
  return true;
224
224
  }
225
225
  default: {
@@ -12,7 +12,7 @@ import type {
12
12
  import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
13
13
  import { UsageError } from "@fluidframework/telemetry-utils/internal";
14
14
 
15
- import { anchorSlot, type SchemaPolicy } from "../core/index.js";
15
+ import { anchorSlot } from "../core/index.js";
16
16
  import {
17
17
  type NodeIdentifierManager,
18
18
  defaultSchemaPolicy,
@@ -49,11 +49,12 @@ import {
49
49
  HydratedContext,
50
50
  SimpleContextSlot,
51
51
  areImplicitFieldSchemaEqual,
52
- createUnknownOptionalFieldPolicy,
53
52
  prepareForInsertionContextless,
54
53
  type FieldSchema,
55
54
  toStoredSchema,
56
55
  tryDisposeTreeNode,
56
+ FieldSchemaAlpha,
57
+ TreeViewConfigurationAlpha,
57
58
  } from "../simple-tree/index.js";
58
59
  import {
59
60
  type Breakable,
@@ -90,7 +91,6 @@ export class SchematizingSimpleTreeView<
90
91
  * Undefined iff uninitialized or disposed.
91
92
  */
92
93
  private currentCompatibility: SchemaCompatibilityStatus | undefined;
93
- private readonly schemaPolicy: SchemaPolicy;
94
94
  public readonly events: Listenable<TreeViewEvents & TreeBranchEvents> &
95
95
  IEmitter<TreeViewEvents & TreeBranchEvents> &
96
96
  HasListeners<TreeViewEvents & TreeBranchEvents> = createEmitter();
@@ -132,13 +132,10 @@ export class SchematizingSimpleTreeView<
132
132
  checkout.forest.anchors.slots.set(ViewSlot, this);
133
133
 
134
134
  this.rootFieldSchema = normalizeFieldSchema(config.schema);
135
- this.schemaPolicy = {
136
- ...defaultSchemaPolicy,
137
- validateSchema: config.enableSchemaValidation,
138
- allowUnknownOptionalFields: createUnknownOptionalFieldPolicy(this.rootFieldSchema),
139
- };
140
135
 
141
- this.viewSchema = new SchemaCompatibilityTester(this.schemaPolicy, this.rootFieldSchema);
136
+ const configAlpha = new TreeViewConfigurationAlpha({ schema: config.schema });
137
+
138
+ this.viewSchema = new SchemaCompatibilityTester(configAlpha);
142
139
  // This must be initialized before `update` can be called.
143
140
  this.currentCompatibility = {
144
141
  canView: false,
@@ -175,13 +172,13 @@ export class SchematizingSimpleTreeView<
175
172
  }
176
173
 
177
174
  this.runSchemaEdit(() => {
178
- const schema = toStoredSchema(this.viewSchema.viewSchemaRoot);
175
+ const schema = toStoredSchema(this.config.schema);
179
176
  const mapTree = prepareForInsertionContextless(
180
177
  content as InsertableContent | undefined,
181
178
  this.rootFieldSchema,
182
179
  {
183
180
  schema,
184
- policy: this.schemaPolicy,
181
+ policy: defaultSchemaPolicy,
185
182
  },
186
183
  this,
187
184
  );
@@ -316,16 +313,22 @@ export class SchematizingSimpleTreeView<
316
313
 
317
314
  if (compatibility.canView) {
318
315
  this.flexTreeContext = new Context(
319
- this.schemaPolicy,
316
+ defaultSchemaPolicy,
320
317
  this.checkout,
321
318
  this.nodeKeyManager,
322
319
  );
323
320
  assert(!slots.has(SimpleContextSlot), 0xa47 /* extra simple tree context */);
321
+ assert(
322
+ this.rootFieldSchema instanceof FieldSchemaAlpha,
323
+ 0xbfa /* all field schema should be FieldSchemaAlpha */,
324
+ );
324
325
  slots.set(
325
326
  SimpleContextSlot,
326
327
  new HydratedContext(
327
- normalizeFieldSchema(this.rootFieldSchema).annotatedAllowedTypesNormalized,
328
328
  this.flexTreeContext,
329
+ HydratedContext.schemaMapFromRootSchema(
330
+ this.rootFieldSchema.annotatedAllowedTypesNormalized,
331
+ ),
329
332
  ),
330
333
  );
331
334
 
@@ -3,11 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type {
7
- ErasedType,
8
- IFluidHandle,
9
- IFluidLoadable,
10
- } from "@fluidframework/core-interfaces/internal";
6
+ import type { ErasedType, IFluidLoadable } from "@fluidframework/core-interfaces/internal";
11
7
  import { assert, fail } from "@fluidframework/core-utils/internal";
12
8
  import type { IChannelStorageService } from "@fluidframework/datastore-definitions/internal";
13
9
  import type { IIdCompressor } from "@fluidframework/id-compressor";
@@ -31,7 +27,6 @@ import {
31
27
  type FieldKey,
32
28
  type GraphCommit,
33
29
  type IEditableForest,
34
- type ITreeCursor,
35
30
  type JsonableTree,
36
31
  LeafNodeStoredSchema,
37
32
  MapNodeStoredSchema,
@@ -40,7 +35,6 @@ import {
40
35
  SchemaVersion,
41
36
  type TaggedChange,
42
37
  type TreeFieldStoredSchema,
43
- type TreeNodeSchemaIdentifier,
44
38
  type TreeNodeStoredSchema,
45
39
  type TreeStoredSchema,
46
40
  TreeStoredSchemaRepository,
@@ -85,10 +79,7 @@ import {
85
79
  type VerboseTree,
86
80
  tryStoredSchemaAsArray,
87
81
  type SimpleNodeSchema,
88
- customFromCursorStored,
89
82
  FieldKind,
90
- type CustomTreeNode,
91
- type CustomTreeValue,
92
83
  type ITreeAlpha,
93
84
  type SimpleObjectFieldSchema,
94
85
  } from "../simple-tree/index.js";
@@ -382,21 +373,7 @@ export class SharedTreeKernel
382
373
  }
383
374
 
384
375
  public exportVerbose(): VerboseTree | undefined {
385
- const cursor = this.checkout.forest.allocateCursor("contentSnapshot");
386
- try {
387
- moveToDetachedField(this.checkout.forest, cursor);
388
- const length = cursor.getFieldLength();
389
- if (length === 0) {
390
- return undefined;
391
- } else if (length === 1) {
392
- cursor.enterNode(0);
393
- return verboseFromCursor(cursor, this.storedSchema.nodeSchema);
394
- } else {
395
- fail(0xac8 /* Invalid document root length */);
396
- }
397
- } finally {
398
- cursor.free();
399
- }
376
+ return this.checkout.exportVerbose();
400
377
  }
401
378
 
402
379
  public exportSimpleSchema(): SimpleTreeSchema {
@@ -723,23 +700,6 @@ export const defaultSharedTreeOptions: Required<SharedTreeOptionsInternal> = {
723
700
  disposeForksAfterTransaction: true,
724
701
  };
725
702
 
726
- function verboseFromCursor(
727
- reader: ITreeCursor,
728
- schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
729
- ): VerboseTree {
730
- const fields = customFromCursorStored(reader, schema, verboseFromCursor);
731
- const nodeSchema =
732
- schema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);
733
- if (nodeSchema instanceof LeafNodeStoredSchema) {
734
- return fields as CustomTreeValue;
735
- }
736
-
737
- return {
738
- type: reader.type,
739
- fields: fields as CustomTreeNode<IFluidHandle>,
740
- };
741
- }
742
-
743
703
  function exportSimpleFieldSchemaStored(schema: TreeFieldStoredSchema): SimpleFieldSchema {
744
704
  let kind: FieldKind;
745
705
  switch (schema.kind) {
@@ -51,6 +51,7 @@ import {
51
51
  NodeKind,
52
52
  tryGetTreeNodeForField,
53
53
  isObjectNodeSchema,
54
+ isTreeNode,
54
55
  } from "../simple-tree/index.js";
55
56
  import { brand, extractFromOpaque, type JsonCompatible } from "../util/index.js";
56
57
  import {
@@ -191,11 +192,19 @@ export interface TreeIdentifierUtils {
191
192
  * Extensions to {@link (Tree:interface)} and {@link (TreeBeta:interface)} which are not yet stable.
192
193
  * @remarks
193
194
  * Use via the {@link (TreeAlpha:variable)} singleton.
195
+ *
196
+ * The unhydrated node creation APIs in this interface do not support {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields | unknown optional fields}.
197
+ * This is because unknown optional fields still must have a schema: its just that the schema may come from the document's stored schema.
198
+ * Unhydrated nodes created via this interface are not associated with any document, so there is nowhere for them to get schema for unknown optional fields.
199
+ * Note that {@link (TreeBeta:interface).clone} can create an unhydrated node with unknown optional fields, as it uses the source node's stored schema (if any).
200
+ *
201
+ * Export APIs in this interface include {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields | unknown optional fields}
202
+ * if they are using {@link TreeEncodingOptions.useStoredKeys | stored keys}.
203
+ *
194
204
  * @privateRemarks
195
- * TODO: AB#43548:
196
- * How all the create and all the import and export APIs handle unknown optional fields needs to be figured out, tested and documented.
197
- * This will need to be extended/generalized to cover other future schema evolution options as well once they exist.
198
- * See also TreeBeta.clone with a similar issue.
205
+ * TODO:
206
+ * There should be a way to provide a source for defaulted identifiers for unhydrated node creation, either via these APIs or some way to add them to its output later.
207
+ * If an option were added to these APIs, it could also be used to enable unknown optional fields.
199
208
  *
200
209
  * @system @sealed @alpha
201
210
  */
@@ -219,8 +228,6 @@ export interface TreeAlpha {
219
228
  * When providing a {@link TreeNodeSchemaClass}, this is the same as invoking its constructor except that an unhydrated node can also be provided.
220
229
  * This function exists as a generalization that can be used in other cases as well,
221
230
  * such as when `undefined` might be allowed (for an optional field), or when the type should be inferred from the data when more than one type is possible.
222
- * @privateRemarks
223
- * TODO: AB#43548: There should be a way to provide a source for defaulted identifiers, either via this API or some way to add them to its output later.
224
231
  */
225
232
  create<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(
226
233
  schema: UnsafeUnknownSchema extends TSchema
@@ -263,6 +270,14 @@ export interface TreeAlpha {
263
270
  * Construct tree content compatible with a field defined by the provided `schema`.
264
271
  * @param schema - The schema for what to construct. As this is an {@link ImplicitFieldSchema}, a {@link FieldSchema}, {@link TreeNodeSchema} or {@link AllowedTypes} array can be provided.
265
272
  * @param data - The data used to construct the field content. See {@link (TreeAlpha:interface).(exportVerbose:1)}.
273
+ * @remarks
274
+ * This currently does not support input containing {@link SchemaFactoryObjectOptions.allowUnknownOptionalFields| unknown optional fields}.
275
+ * @privateRemarks
276
+ * See TODOs in {@link TreeEncodingOptions}.
277
+ *
278
+ * TODO: clarify how this handles out of schema data.
279
+ * Does it robustly validate? How do you use it with schema evolution features like staged allowed types and allowUnknownOptionalFields? Which errors are deferred until insertion/hydration?
280
+ * Ensure whatever policy is chosen is documented, enforces, tested and applied consistently to all import code paths.
266
281
  */
267
282
  importVerbose<const TSchema extends ImplicitFieldSchema>(
268
283
  schema: TSchema,
@@ -484,14 +499,14 @@ export const TreeAlpha: TreeAlpha = {
484
499
  exportConcise,
485
500
 
486
501
  exportVerbose(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): VerboseTree {
502
+ if (isTreeValue(node)) {
503
+ return node;
504
+ }
487
505
  const config: TreeEncodingOptions = { ...options };
488
506
 
489
507
  const cursor = borrowCursorFromTreeNodeOrValue(node);
490
- return verboseFromCursor(
491
- cursor,
492
- tryGetSchema(node) ?? fail(0xace /* invalid input */),
493
- config,
494
- );
508
+ const kernel = getKernel(node);
509
+ return verboseFromCursor(cursor, kernel.context, config);
495
510
  },
496
511
 
497
512
  exportCompressed(
@@ -701,17 +716,14 @@ function exportConcise(
701
716
  node: TreeNode | TreeLeafValue | undefined,
702
717
  options?: TreeEncodingOptions,
703
718
  ): ConciseTree | undefined {
704
- if (node === undefined) {
705
- return undefined;
719
+ if (!isTreeNode(node)) {
720
+ return node;
706
721
  }
707
722
  const config: TreeEncodingOptions = { ...options };
708
723
 
724
+ const kernel = getKernel(node);
709
725
  const cursor = borrowCursorFromTreeNodeOrValue(node);
710
- return conciseFromCursor(
711
- cursor,
712
- tryGetSchema(node) ?? fail(0xacd /* invalid input */),
713
- config,
714
- );
726
+ return conciseFromCursor(cursor, kernel.context, config);
715
727
  }
716
728
 
717
729
  /**
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
7
- import type { Listenable } from "@fluidframework/core-interfaces/internal";
7
+ import type { IFluidHandle, Listenable } from "@fluidframework/core-interfaces/internal";
8
8
  import { createEmitter } from "@fluid-internal/client-utils";
9
9
  import type { IIdCompressor } from "@fluidframework/id-compressor";
10
10
  import {
@@ -42,6 +42,11 @@ import {
42
42
  type RevertibleAlpha,
43
43
  type GraphCommit,
44
44
  isAncestor,
45
+ moveToDetachedField,
46
+ type ITreeCursor,
47
+ type TreeNodeSchemaIdentifier,
48
+ type TreeNodeStoredSchema,
49
+ LeafNodeStoredSchema,
45
50
  } from "../core/index.js";
46
51
  import {
47
52
  type FieldBatchCodec,
@@ -68,15 +73,19 @@ import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamil
68
73
  import type { SharedTreeChange } from "./sharedTreeChangeTypes.js";
69
74
  import type { ISharedTreeEditor, SharedTreeEditBuilder } from "./sharedTreeEditBuilder.js";
70
75
  import type { IDisposable } from "@fluidframework/core-interfaces";
71
- import type {
72
- ImplicitFieldSchema,
73
- ReadSchema,
74
- TreeView,
75
- TreeViewConfiguration,
76
- UnsafeUnknownSchema,
77
- ViewableTree,
78
- TreeBranch,
79
- TreeChangeEvents,
76
+ import {
77
+ type ImplicitFieldSchema,
78
+ type ReadSchema,
79
+ type TreeView,
80
+ type TreeViewConfiguration,
81
+ type UnsafeUnknownSchema,
82
+ type ViewableTree,
83
+ type TreeBranch,
84
+ type TreeChangeEvents,
85
+ type VerboseTree,
86
+ customFromCursorStored,
87
+ type CustomTreeValue,
88
+ type CustomTreeNode,
80
89
  } from "../simple-tree/index.js";
81
90
  import { getCheckout, SchematizingSimpleTreeView } from "./schematizingTreeView.js";
82
91
 
@@ -495,6 +504,24 @@ export class TreeCheckout implements ITreeCheckoutFork {
495
504
  this.#transaction.activeBranchEvents.on("ancestryTrimmed", this.onAncestryTrimmed);
496
505
  }
497
506
 
507
+ public exportVerbose(): VerboseTree | undefined {
508
+ const cursor = this.forest.allocateCursor("contentSnapshot");
509
+ try {
510
+ moveToDetachedField(this.forest, cursor);
511
+ const length = cursor.getFieldLength();
512
+ if (length === 0) {
513
+ return undefined;
514
+ } else if (length === 1) {
515
+ cursor.enterNode(0);
516
+ return verboseFromCursor(cursor, this.storedSchema.nodeSchema);
517
+ } else {
518
+ fail(0xac8 /* Invalid document root length */);
519
+ }
520
+ } finally {
521
+ cursor.free();
522
+ }
523
+ }
524
+
498
525
  private readonly onAfterChange = (event: SharedTreeBranchChange<SharedTreeChange>): void => {
499
526
  this.editLock.lock();
500
527
  this.#events.emit("beforeBatch", event);
@@ -1110,3 +1137,20 @@ function trackForksForDisposal(checkout: TreeCheckout): () => void {
1110
1137
  disposed = true;
1111
1138
  };
1112
1139
  }
1140
+
1141
+ function verboseFromCursor(
1142
+ reader: ITreeCursor,
1143
+ schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeStoredSchema>,
1144
+ ): VerboseTree {
1145
+ const fields = customFromCursorStored(reader, schema, verboseFromCursor);
1146
+ const nodeSchema =
1147
+ schema.get(reader.type) ?? fail(0xac9 /* missing schema for type in cursor */);
1148
+ if (nodeSchema instanceof LeafNodeStoredSchema) {
1149
+ return fields as CustomTreeValue;
1150
+ }
1151
+
1152
+ return {
1153
+ type: reader.type,
1154
+ fields: fields as CustomTreeNode<IFluidHandle>,
1155
+ };
1156
+ }
@@ -251,12 +251,7 @@ export class SharedTreeBranch<TEditor extends ChangeFamilyEditor, TChange> {
251
251
  // TODO: Pull this side effect out if/when more diverse ancestry walking helpers are available
252
252
  if (c !== commit) {
253
253
  const revision = this.mintRevisionTag();
254
- const inverse = this.changeFamily.rebaser.changeRevision(
255
- this.changeFamily.rebaser.invert(c, true, revision),
256
- revision,
257
- c.revision,
258
- );
259
-
254
+ const inverse = this.changeFamily.rebaser.invert(c, true, revision);
260
255
  inverses.push(tagRollbackInverse(inverse, revision, c.revision));
261
256
  return false;
262
257
  }
@@ -5,9 +5,8 @@
5
5
 
6
6
  import type { IFluidHandle } from "@fluidframework/core-interfaces";
7
7
 
8
- import type { ITreeCursor } from "../../core/index.js";
9
- import type { TreeNodeSchema, TreeLeafValue, ImplicitAllowedTypes } from "../core/index.js";
10
- import { getUnhydratedContext } from "../createContext.js";
8
+ import type { ITreeCursor, TreeNodeStoredSchema } from "../../core/index.js";
9
+ import type { TreeNodeSchema, TreeLeafValue, Context } from "../core/index.js";
11
10
 
12
11
  import {
13
12
  customFromCursor,
@@ -43,7 +42,7 @@ export type ConciseTree<THandle = IFluidHandle> =
43
42
  */
44
43
  export function conciseFromCursor(
45
44
  reader: ITreeCursor,
46
- rootSchema: ImplicitAllowedTypes,
45
+ context: Context,
47
46
  options: TreeEncodingOptions,
48
47
  ): ConciseTree {
49
48
  const config: Required<TreeEncodingOptions> = {
@@ -51,16 +50,19 @@ export function conciseFromCursor(
51
50
  ...options,
52
51
  };
53
52
 
54
- const schemaMap = getUnhydratedContext(rootSchema).schema;
55
- return conciseFromCursorInner(reader, config, schemaMap);
53
+ const storedSchemaMap = context.flexContext.schema.nodeSchema;
54
+ const schemaMap = context.schema;
55
+
56
+ return conciseFromCursorInner(reader, config, storedSchemaMap, schemaMap);
56
57
  }
57
58
 
58
59
  function conciseFromCursorInner(
59
60
  reader: ITreeCursor,
60
61
  options: Required<TreeEncodingOptions>,
62
+ storedSchema: ReadonlyMap<string, TreeNodeStoredSchema>,
61
63
  schema: ReadonlyMap<string, TreeNodeSchema>,
62
64
  ): ConciseTree {
63
- return customFromCursor(reader, options, schema, conciseFromCursorInner);
65
+ return customFromCursor(reader, options, storedSchema, schema, conciseFromCursorInner);
64
66
  }
65
67
 
66
68
  /**
@@ -47,14 +47,20 @@ import type { SimpleNodeSchema, SimpleTreeSchema } from "../simpleSchema.js";
47
47
  */
48
48
  export interface ITreeConfigurationOptions {
49
49
  /**
50
- * If `true`, the tree will validate new content against its stored schema at insertion time
50
+ * If `true`, the tree will perform additional validation of content against its stored schema
51
51
  * and throw an error if the new content doesn't match the expected schema.
52
52
  *
53
53
  * @defaultValue `false`.
54
54
  *
55
- * @remarks Enabling schema validation has a performance penalty when inserting new content into the tree because
55
+ * @remarks
56
+ * Currently most cases already have some schema validation, so this is mainly for additional validation which may be useful when debugging issues,
57
+ * working with untyped APIs, or when the small performance overhead is a non-issue.
58
+ *
59
+ * Enabling schema validation has a performance penalty when inserting new content into the tree because
56
60
  * additional checks are done. Enable this option only in scenarios where you are ok with that operation being a
57
61
  * bit slower.
62
+ *
63
+ * For additional validation in more cases, see {@link ForestTypeExpensiveDebug}.
58
64
  */
59
65
  enableSchemaValidation?: boolean;
60
66