@fluidframework/tree 2.5.0-302463 → 2.5.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 (365) hide show
  1. package/.vscode/settings.json +1 -0
  2. package/CHANGELOG.md +371 -0
  3. package/api-report/tree.alpha.api.md +151 -57
  4. package/api-report/tree.beta.api.md +29 -25
  5. package/api-report/tree.legacy.alpha.api.md +28 -24
  6. package/api-report/tree.legacy.public.api.md +28 -24
  7. package/api-report/tree.public.api.md +28 -24
  8. package/dist/alpha.d.ts +15 -0
  9. package/dist/codec/codec.d.ts +24 -0
  10. package/dist/codec/codec.d.ts.map +1 -1
  11. package/dist/codec/codec.js +26 -1
  12. package/dist/codec/codec.js.map +1 -1
  13. package/dist/codec/index.d.ts +1 -1
  14. package/dist/codec/index.d.ts.map +1 -1
  15. package/dist/codec/index.js +2 -1
  16. package/dist/codec/index.js.map +1 -1
  17. package/dist/core/rebase/index.d.ts +2 -2
  18. package/dist/core/rebase/index.d.ts.map +1 -1
  19. package/dist/core/rebase/index.js +2 -2
  20. package/dist/core/rebase/index.js.map +1 -1
  21. package/dist/core/rebase/types.d.ts +0 -4
  22. package/dist/core/rebase/types.d.ts.map +1 -1
  23. package/dist/core/rebase/types.js +1 -7
  24. package/dist/core/rebase/types.js.map +1 -1
  25. package/dist/core/rebase/utils.d.ts +1 -0
  26. package/dist/core/rebase/utils.d.ts.map +1 -1
  27. package/dist/core/rebase/utils.js +29 -4
  28. package/dist/core/rebase/utils.js.map +1 -1
  29. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -1
  30. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  31. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  32. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +2 -1
  33. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  34. package/dist/feature-libraries/flex-tree/lazyNode.js +3 -0
  35. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  36. package/dist/index.d.ts +3 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +12 -6
  39. package/dist/index.js.map +1 -1
  40. package/dist/packageVersion.d.ts +1 -1
  41. package/dist/packageVersion.d.ts.map +1 -1
  42. package/dist/packageVersion.js +1 -1
  43. package/dist/packageVersion.js.map +1 -1
  44. package/dist/shared-tree/independentView.d.ts +57 -0
  45. package/dist/shared-tree/independentView.d.ts.map +1 -0
  46. package/dist/shared-tree/independentView.js +89 -0
  47. package/dist/shared-tree/independentView.js.map +1 -0
  48. package/dist/shared-tree/index.d.ts +3 -1
  49. package/dist/shared-tree/index.d.ts.map +1 -1
  50. package/dist/shared-tree/index.js +6 -1
  51. package/dist/shared-tree/index.js.map +1 -1
  52. package/dist/shared-tree/schematizingTreeView.d.ts +12 -8
  53. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  54. package/dist/shared-tree/schematizingTreeView.js +28 -0
  55. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  56. package/dist/shared-tree/sharedTree.d.ts +10 -7
  57. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  58. package/dist/shared-tree/sharedTree.js.map +1 -1
  59. package/dist/shared-tree/treeApiAlpha.d.ts +147 -0
  60. package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -0
  61. package/dist/shared-tree/treeApiAlpha.js +122 -0
  62. package/dist/shared-tree/treeApiAlpha.js.map +1 -0
  63. package/dist/shared-tree/treeCheckout.d.ts +12 -7
  64. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  65. package/dist/shared-tree/treeCheckout.js +9 -4
  66. package/dist/shared-tree/treeCheckout.js.map +1 -1
  67. package/dist/shared-tree-core/editManager.d.ts +13 -6
  68. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  69. package/dist/shared-tree-core/editManager.js +70 -28
  70. package/dist/shared-tree-core/editManager.js.map +1 -1
  71. package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
  72. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  73. package/dist/shared-tree-core/sharedTreeCore.js +28 -3
  74. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  75. package/dist/simple-tree/api/conciseTree.d.ts +2 -1
  76. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  77. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  78. package/dist/simple-tree/api/create.d.ts +5 -23
  79. package/dist/simple-tree/api/create.d.ts.map +1 -1
  80. package/dist/simple-tree/api/create.js +4 -19
  81. package/dist/simple-tree/api/create.js.map +1 -1
  82. package/dist/simple-tree/api/customTree.d.ts +1 -0
  83. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  84. package/dist/simple-tree/api/customTree.js.map +1 -1
  85. package/dist/simple-tree/api/index.d.ts +5 -5
  86. package/dist/simple-tree/api/index.d.ts.map +1 -1
  87. package/dist/simple-tree/api/index.js +10 -1
  88. package/dist/simple-tree/api/index.js.map +1 -1
  89. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +6 -16
  90. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  91. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  92. package/dist/simple-tree/api/schemaFactory.d.ts +11 -11
  93. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  94. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  95. package/dist/simple-tree/api/storedSchema.js +2 -2
  96. package/dist/simple-tree/api/storedSchema.js.map +1 -1
  97. package/dist/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  98. package/dist/simple-tree/api/tree.d.ts +115 -7
  99. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  100. package/dist/simple-tree/api/tree.js +12 -4
  101. package/dist/simple-tree/api/tree.js.map +1 -1
  102. package/dist/simple-tree/api/treeApiBeta.d.ts +8 -5
  103. package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -1
  104. package/dist/simple-tree/api/treeApiBeta.js +3 -15
  105. package/dist/simple-tree/api/treeApiBeta.js.map +1 -1
  106. package/dist/simple-tree/api/typesUnsafe.d.ts +1 -1
  107. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  108. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  109. package/dist/simple-tree/api/verboseTree.d.ts +3 -0
  110. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  111. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  112. package/dist/simple-tree/arrayNode.d.ts +1 -1
  113. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  114. package/dist/simple-tree/arrayNode.js +1 -1
  115. package/dist/simple-tree/arrayNode.js.map +1 -1
  116. package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
  117. package/dist/simple-tree/core/treeNodeSchema.d.ts +45 -9
  118. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  119. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  120. package/dist/simple-tree/core/unhydratedFlexTree.d.ts +2 -1
  121. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  122. package/dist/simple-tree/core/unhydratedFlexTree.js +3 -0
  123. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  124. package/dist/simple-tree/core/withType.d.ts +1 -2
  125. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  126. package/dist/simple-tree/core/withType.js.map +1 -1
  127. package/dist/simple-tree/createContext.js +2 -2
  128. package/dist/simple-tree/createContext.js.map +1 -1
  129. package/dist/simple-tree/index.d.ts +4 -4
  130. package/dist/simple-tree/index.d.ts.map +1 -1
  131. package/dist/simple-tree/index.js +15 -4
  132. package/dist/simple-tree/index.js.map +1 -1
  133. package/dist/simple-tree/leafNodeSchema.d.ts +6 -5
  134. package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
  135. package/dist/simple-tree/leafNodeSchema.js +3 -0
  136. package/dist/simple-tree/leafNodeSchema.js.map +1 -1
  137. package/dist/simple-tree/mapNode.d.ts +1 -1
  138. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  139. package/dist/simple-tree/mapNode.js +3 -0
  140. package/dist/simple-tree/mapNode.js.map +1 -1
  141. package/dist/simple-tree/schemaTypes.d.ts +45 -7
  142. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  143. package/dist/simple-tree/schemaTypes.js +61 -1
  144. package/dist/simple-tree/schemaTypes.js.map +1 -1
  145. package/dist/simple-tree/{toFlexSchema.d.ts → toStoredSchema.d.ts} +1 -1
  146. package/dist/simple-tree/toStoredSchema.d.ts.map +1 -0
  147. package/dist/simple-tree/{toFlexSchema.js → toStoredSchema.js} +1 -1
  148. package/dist/simple-tree/toStoredSchema.js.map +1 -0
  149. package/dist/simple-tree/treeNodeValid.d.ts +5 -1
  150. package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
  151. package/dist/simple-tree/treeNodeValid.js +7 -1
  152. package/dist/simple-tree/treeNodeValid.js.map +1 -1
  153. package/dist/util/index.d.ts +1 -1
  154. package/dist/util/index.d.ts.map +1 -1
  155. package/dist/util/index.js.map +1 -1
  156. package/dist/util/typeCheck.d.ts +9 -0
  157. package/dist/util/typeCheck.d.ts.map +1 -1
  158. package/dist/util/typeCheck.js.map +1 -1
  159. package/dist/util/utils.d.ts +7 -3
  160. package/dist/util/utils.d.ts.map +1 -1
  161. package/dist/util/utils.js +13 -3
  162. package/dist/util/utils.js.map +1 -1
  163. package/lib/alpha.d.ts +15 -0
  164. package/lib/codec/codec.d.ts +24 -0
  165. package/lib/codec/codec.d.ts.map +1 -1
  166. package/lib/codec/codec.js +25 -0
  167. package/lib/codec/codec.js.map +1 -1
  168. package/lib/codec/index.d.ts +1 -1
  169. package/lib/codec/index.d.ts.map +1 -1
  170. package/lib/codec/index.js +1 -1
  171. package/lib/codec/index.js.map +1 -1
  172. package/lib/core/rebase/index.d.ts +2 -2
  173. package/lib/core/rebase/index.d.ts.map +1 -1
  174. package/lib/core/rebase/index.js +2 -2
  175. package/lib/core/rebase/index.js.map +1 -1
  176. package/lib/core/rebase/types.d.ts +0 -4
  177. package/lib/core/rebase/types.d.ts.map +1 -1
  178. package/lib/core/rebase/types.js +0 -5
  179. package/lib/core/rebase/types.js.map +1 -1
  180. package/lib/core/rebase/utils.d.ts +1 -0
  181. package/lib/core/rebase/utils.d.ts.map +1 -1
  182. package/lib/core/rebase/utils.js +27 -3
  183. package/lib/core/rebase/utils.js.map +1 -1
  184. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -1
  185. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  186. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  187. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +2 -1
  188. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  189. package/lib/feature-libraries/flex-tree/lazyNode.js +3 -0
  190. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  191. package/lib/index.d.ts +3 -3
  192. package/lib/index.d.ts.map +1 -1
  193. package/lib/index.js +3 -2
  194. package/lib/index.js.map +1 -1
  195. package/lib/packageVersion.d.ts +1 -1
  196. package/lib/packageVersion.d.ts.map +1 -1
  197. package/lib/packageVersion.js +1 -1
  198. package/lib/packageVersion.js.map +1 -1
  199. package/lib/shared-tree/independentView.d.ts +57 -0
  200. package/lib/shared-tree/independentView.d.ts.map +1 -0
  201. package/lib/shared-tree/independentView.js +84 -0
  202. package/lib/shared-tree/independentView.js.map +1 -0
  203. package/lib/shared-tree/index.d.ts +3 -1
  204. package/lib/shared-tree/index.d.ts.map +1 -1
  205. package/lib/shared-tree/index.js +2 -0
  206. package/lib/shared-tree/index.js.map +1 -1
  207. package/lib/shared-tree/schematizingTreeView.d.ts +12 -8
  208. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  209. package/lib/shared-tree/schematizingTreeView.js +29 -1
  210. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  211. package/lib/shared-tree/sharedTree.d.ts +10 -7
  212. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  213. package/lib/shared-tree/sharedTree.js.map +1 -1
  214. package/lib/shared-tree/treeApiAlpha.d.ts +147 -0
  215. package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -0
  216. package/lib/shared-tree/treeApiAlpha.js +119 -0
  217. package/lib/shared-tree/treeApiAlpha.js.map +1 -0
  218. package/lib/shared-tree/treeCheckout.d.ts +12 -7
  219. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  220. package/lib/shared-tree/treeCheckout.js +9 -4
  221. package/lib/shared-tree/treeCheckout.js.map +1 -1
  222. package/lib/shared-tree-core/editManager.d.ts +13 -6
  223. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  224. package/lib/shared-tree-core/editManager.js +70 -28
  225. package/lib/shared-tree-core/editManager.js.map +1 -1
  226. package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
  227. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  228. package/lib/shared-tree-core/sharedTreeCore.js +29 -4
  229. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  230. package/lib/simple-tree/api/conciseTree.d.ts +2 -1
  231. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  232. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  233. package/lib/simple-tree/api/create.d.ts +5 -23
  234. package/lib/simple-tree/api/create.d.ts.map +1 -1
  235. package/lib/simple-tree/api/create.js +2 -16
  236. package/lib/simple-tree/api/create.js.map +1 -1
  237. package/lib/simple-tree/api/customTree.d.ts +1 -0
  238. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  239. package/lib/simple-tree/api/customTree.js.map +1 -1
  240. package/lib/simple-tree/api/index.d.ts +5 -5
  241. package/lib/simple-tree/api/index.d.ts.map +1 -1
  242. package/lib/simple-tree/api/index.js +5 -3
  243. package/lib/simple-tree/api/index.js.map +1 -1
  244. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +6 -16
  245. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  246. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  247. package/lib/simple-tree/api/schemaFactory.d.ts +11 -11
  248. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  249. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  250. package/lib/simple-tree/api/storedSchema.js +1 -1
  251. package/lib/simple-tree/api/storedSchema.js.map +1 -1
  252. package/lib/simple-tree/api/testRecursiveDomain.d.ts +5 -5
  253. package/lib/simple-tree/api/tree.d.ts +115 -7
  254. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  255. package/lib/simple-tree/api/tree.js +9 -2
  256. package/lib/simple-tree/api/tree.js.map +1 -1
  257. package/lib/simple-tree/api/treeApiBeta.d.ts +8 -5
  258. package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -1
  259. package/lib/simple-tree/api/treeApiBeta.js +4 -16
  260. package/lib/simple-tree/api/treeApiBeta.js.map +1 -1
  261. package/lib/simple-tree/api/typesUnsafe.d.ts +1 -1
  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/api/verboseTree.d.ts +3 -0
  265. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  266. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  267. package/lib/simple-tree/arrayNode.d.ts +1 -1
  268. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  269. package/lib/simple-tree/arrayNode.js +1 -1
  270. package/lib/simple-tree/arrayNode.js.map +1 -1
  271. package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
  272. package/lib/simple-tree/core/treeNodeSchema.d.ts +45 -9
  273. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  274. package/lib/simple-tree/core/treeNodeSchema.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 +4 -1
  278. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  279. package/lib/simple-tree/core/withType.d.ts +1 -2
  280. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  281. package/lib/simple-tree/core/withType.js.map +1 -1
  282. package/lib/simple-tree/createContext.js +1 -1
  283. package/lib/simple-tree/createContext.js.map +1 -1
  284. package/lib/simple-tree/index.d.ts +4 -4
  285. package/lib/simple-tree/index.d.ts.map +1 -1
  286. package/lib/simple-tree/index.js +4 -4
  287. package/lib/simple-tree/index.js.map +1 -1
  288. package/lib/simple-tree/leafNodeSchema.d.ts +6 -5
  289. package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
  290. package/lib/simple-tree/leafNodeSchema.js +3 -0
  291. package/lib/simple-tree/leafNodeSchema.js.map +1 -1
  292. package/lib/simple-tree/mapNode.d.ts +1 -1
  293. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  294. package/lib/simple-tree/mapNode.js +3 -0
  295. package/lib/simple-tree/mapNode.js.map +1 -1
  296. package/lib/simple-tree/schemaTypes.d.ts +45 -7
  297. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  298. package/lib/simple-tree/schemaTypes.js +59 -1
  299. package/lib/simple-tree/schemaTypes.js.map +1 -1
  300. package/lib/simple-tree/{toFlexSchema.d.ts → toStoredSchema.d.ts} +1 -1
  301. package/lib/simple-tree/toStoredSchema.d.ts.map +1 -0
  302. package/lib/simple-tree/{toFlexSchema.js → toStoredSchema.js} +1 -1
  303. package/lib/simple-tree/toStoredSchema.js.map +1 -0
  304. package/lib/simple-tree/treeNodeValid.d.ts +5 -1
  305. package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
  306. package/lib/simple-tree/treeNodeValid.js +7 -1
  307. package/lib/simple-tree/treeNodeValid.js.map +1 -1
  308. package/lib/util/index.d.ts +1 -1
  309. package/lib/util/index.d.ts.map +1 -1
  310. package/lib/util/index.js.map +1 -1
  311. package/lib/util/typeCheck.d.ts +9 -0
  312. package/lib/util/typeCheck.d.ts.map +1 -1
  313. package/lib/util/typeCheck.js.map +1 -1
  314. package/lib/util/utils.d.ts +7 -3
  315. package/lib/util/utils.d.ts.map +1 -1
  316. package/lib/util/utils.js +13 -3
  317. package/lib/util/utils.js.map +1 -1
  318. package/package.json +30 -21
  319. package/src/codec/codec.ts +25 -0
  320. package/src/codec/index.ts +1 -0
  321. package/src/core/rebase/index.ts +1 -1
  322. package/src/core/rebase/types.ts +0 -12
  323. package/src/core/rebase/utils.ts +35 -3
  324. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +9 -0
  325. package/src/feature-libraries/flex-tree/lazyNode.ts +5 -0
  326. package/src/index.ts +20 -5
  327. package/src/packageVersion.ts +1 -1
  328. package/src/shared-tree/independentView.ts +176 -0
  329. package/src/shared-tree/index.ts +9 -1
  330. package/src/shared-tree/schematizingTreeView.ts +58 -11
  331. package/src/shared-tree/sharedTree.ts +29 -11
  332. package/src/shared-tree/treeApiAlpha.ts +401 -0
  333. package/src/shared-tree/treeCheckout.ts +26 -5
  334. package/src/shared-tree-core/editManager.ts +112 -54
  335. package/src/shared-tree-core/sharedTreeCore.ts +37 -8
  336. package/src/simple-tree/api/conciseTree.ts +2 -1
  337. package/src/simple-tree/api/create.ts +21 -58
  338. package/src/simple-tree/api/customTree.ts +1 -0
  339. package/src/simple-tree/api/index.ts +13 -7
  340. package/src/simple-tree/api/schemaCreationUtilities.ts +4 -5
  341. package/src/simple-tree/api/schemaFactory.ts +24 -12
  342. package/src/simple-tree/api/storedSchema.ts +1 -1
  343. package/src/simple-tree/api/tree.ts +136 -14
  344. package/src/simple-tree/api/treeApiBeta.ts +35 -35
  345. package/src/simple-tree/api/typesUnsafe.ts +1 -2
  346. package/src/simple-tree/api/verboseTree.ts +3 -0
  347. package/src/simple-tree/arrayNode.ts +4 -3
  348. package/src/simple-tree/core/getOrCreateNode.ts +1 -1
  349. package/src/simple-tree/core/treeNodeSchema.ts +99 -31
  350. package/src/simple-tree/core/unhydratedFlexTree.ts +6 -0
  351. package/src/simple-tree/core/withType.ts +1 -9
  352. package/src/simple-tree/createContext.ts +1 -1
  353. package/src/simple-tree/index.ts +15 -1
  354. package/src/simple-tree/leafNodeSchema.ts +6 -1
  355. package/src/simple-tree/mapNode.ts +7 -1
  356. package/src/simple-tree/schemaTypes.ts +128 -14
  357. package/src/simple-tree/treeNodeValid.ts +11 -1
  358. package/src/util/index.ts +1 -0
  359. package/src/util/typeCheck.ts +13 -0
  360. package/src/util/utils.ts +20 -7
  361. package/dist/simple-tree/toFlexSchema.d.ts.map +0 -1
  362. package/dist/simple-tree/toFlexSchema.js.map +0 -1
  363. package/lib/simple-tree/toFlexSchema.d.ts.map +0 -1
  364. package/lib/simple-tree/toFlexSchema.js.map +0 -1
  365. /package/src/simple-tree/{toFlexSchema.ts → toStoredSchema.ts} +0 -0
@@ -9,14 +9,10 @@ export function adaptEnum<TScope extends string, const TEnum extends Record<stri
9
9
  readonly value: TValue;
10
10
  }) & { readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, TreeNode & {
11
11
  readonly value: TEnum[Property];
12
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
13
- readonly value: TEnum[Property];
14
- }); } & {
12
+ }, Record<string, never>, true, Record<string, never>, undefined>; } & {
15
13
  readonly schema: UnionToTuple<{ readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, TreeNode & {
16
14
  readonly value: TEnum[Property];
17
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
18
- readonly value: TEnum[Property];
19
- }); }[keyof TEnum]>;
15
+ }, Record<string, never>, true, Record<string, never>, undefined>; }[keyof TEnum]>;
20
16
  };
21
17
 
22
18
  // @public
@@ -37,6 +33,17 @@ type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boole
37
33
  Kind
38
34
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
39
35
 
36
+ // @alpha
37
+ export function asTreeViewAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
38
+
39
+ // @alpha @sealed
40
+ export interface BranchableTree extends ViewableTree {
41
+ branch(): TreeBranchFork;
42
+ merge(branch: TreeBranchFork): void;
43
+ merge(branch: TreeBranchFork, disposeMerged: boolean): void;
44
+ rebase(branch: TreeBranchFork): void;
45
+ }
46
+
40
47
  // @public
41
48
  export enum CommitKind {
42
49
  Default = 0,
@@ -53,23 +60,30 @@ export interface CommitMetadata {
53
60
  // @alpha
54
61
  export function comparePersistedSchema(persisted: JsonCompatible, view: JsonCompatible, options: ICodecOptions, canInitialize: boolean): SchemaCompatibilityStatus;
55
62
 
63
+ // @alpha
64
+ export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle | ConciseTree<THandle>[] | {
65
+ [key: string]: ConciseTree<THandle>;
66
+ };
67
+
56
68
  // @public @sealed
57
69
  interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {
58
70
  }
59
71
 
72
+ // @alpha
73
+ export interface EncodeOptions<TCustom> {
74
+ readonly useStoredKeys?: boolean;
75
+ valueConverter(data: IFluidHandle): TCustom;
76
+ }
77
+
60
78
  // @alpha
61
79
  export function enumFromStrings<TScope extends string, const Members extends readonly string[]>(factory: SchemaFactory<TScope>, members: Members): (<TValue extends Members[number]>(value: TValue) => TreeNode & {
62
80
  readonly value: TValue;
63
81
  }) & Record<Members[number], TreeNodeSchemaClass<ScopedSchemaName<TScope, Members[number]>, NodeKind.Object, TreeNode & {
64
82
  readonly value: Members[number];
65
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
66
- readonly value: Members[number];
67
- })> & {
83
+ }, Record<string, never>, true, Record<string, never>, undefined>> & {
68
84
  readonly schema: UnionToTuple<Record<Members[number], TreeNodeSchemaClass<ScopedSchemaName<TScope, Members[number]>, NodeKind.Object, TreeNode & {
69
85
  readonly value: Members[number];
70
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
71
- readonly value: Members[number];
72
- })>[Members[number]]>;
86
+ }, Record<string, never>, true, Record<string, never>, undefined>>[Members[number]]>;
73
87
  };
74
88
 
75
89
  // @public
@@ -144,6 +158,14 @@ type FlexList<Item = unknown> = readonly LazyItem<Item>[];
144
158
  // @public
145
159
  type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
146
160
 
161
+ // @alpha
162
+ export enum FluidClientVersion {
163
+ v2_0 = "v2_0",
164
+ v2_1 = "v2_1",
165
+ v2_2 = "v2_2",
166
+ v2_3 = "v2_3"
167
+ }
168
+
147
169
  // @alpha
148
170
  export interface ForestOptions {
149
171
  readonly forest?: ForestType;
@@ -156,11 +178,11 @@ export enum ForestType {
156
178
  Reference = 0
157
179
  }
158
180
 
159
- // @alpha
160
- export function getBranch(tree: ITree): TreeBranch;
181
+ // @alpha @deprecated
182
+ export function getBranch(tree: ITree): BranchableTree;
161
183
 
162
- // @alpha
163
- export function getBranch<T extends ImplicitFieldSchema>(view: TreeView<T>): TreeBranch;
184
+ // @alpha @deprecated
185
+ export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(view: TreeViewAlpha<T>): BranchableTree;
164
186
 
165
187
  // @alpha
166
188
  export function getJsonSchema(schema: ImplicitFieldSchema): JsonTreeSchema;
@@ -176,6 +198,14 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
176
198
  // @public
177
199
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
178
200
 
201
+ // @alpha
202
+ export function independentInitializedView<const TSchema extends ImplicitFieldSchema>(config: TreeViewConfiguration<TSchema>, options: ForestOptions & ICodecOptions, content: ViewContent): TreeViewAlpha<TSchema>;
203
+
204
+ // @alpha
205
+ export function independentView<const TSchema extends ImplicitFieldSchema>(config: TreeViewConfiguration<TSchema>, options: ForestOptions & {
206
+ idCompressor?: IIdCompressor_2 | undefined;
207
+ }): TreeViewAlpha<TSchema>;
208
+
179
209
  // @public
180
210
  type _InlineTrick = 0;
181
211
 
@@ -314,11 +344,11 @@ export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array,
314
344
  }
315
345
 
316
346
  // @alpha
317
- export type JsonCompatible = string | number | boolean | null | JsonCompatible[] | JsonCompatibleObject;
347
+ export type JsonCompatible<TExtra = never> = string | number | boolean | null | JsonCompatible<TExtra>[] | JsonCompatibleObject<TExtra> | TExtra;
318
348
 
319
349
  // @alpha
320
- export type JsonCompatibleObject = {
321
- [P in string]?: JsonCompatible;
350
+ export type JsonCompatibleObject<TExtra = never> = {
351
+ [P in string]?: JsonCompatible<TExtra>;
322
352
  };
323
353
 
324
354
  // @alpha @sealed
@@ -404,7 +434,7 @@ export interface MakeNominal {
404
434
  export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
405
435
 
406
436
  // @public
407
- type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, infer TBuild> ? TBuild : never;
437
+ type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boolean>> = T extends TreeNodeSchemaCore<string, NodeKind, boolean, unknown, infer TBuild> ? TBuild : never;
408
438
 
409
439
  // @public
410
440
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
@@ -452,9 +482,18 @@ type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<I
452
482
  // @public
453
483
  export type Off = () => void;
454
484
 
485
+ // @alpha
486
+ export interface ParseOptions<TCustom> {
487
+ readonly useStoredKeys?: boolean;
488
+ valueConverter(data: VerboseTree<TCustom>): TreeLeafValue | VerboseTreeNode<TCustom>;
489
+ }
490
+
455
491
  // @alpha
456
492
  export type PopUnion<Union, AsOverloadedFunction = UnionToIntersection<Union extends unknown ? (f: Union) => void : never>> = AsOverloadedFunction extends (a: infer First) => void ? First : never;
457
493
 
494
+ // @alpha
495
+ export type ReadableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = TreeFieldFromImplicitField<ReadSchema<TSchema>>;
496
+
458
497
  // @public @sealed
459
498
  export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue> extends ReadonlyArray<T>, Awaited<TreeNode & WithType<string, NodeKind.Array>> {
460
499
  }
@@ -475,6 +514,11 @@ interface ReadonlyMapInlined<K, T extends Unenforced<ImplicitAllowedTypes>> {
475
514
  values(): IterableIterator<TreeNodeFromImplicitAllowedTypesUnsafe<T>>;
476
515
  }
477
516
 
517
+ // @alpha
518
+ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = [
519
+ TSchema
520
+ ] extends [ImplicitFieldSchema] ? TSchema : ImplicitFieldSchema;
521
+
478
522
  // @public @deprecated
479
523
  export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
480
524
  readonly [P in symbol | string]: P extends K ? T : never;
@@ -535,24 +579,24 @@ export interface SchemaCompatibilityStatus {
535
579
  // @public @sealed
536
580
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
537
581
  constructor(scope: TScope);
538
- array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
539
- array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
582
+ array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
583
+ array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
540
584
  arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array, unknown>, {
541
585
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
542
- }, false, T>;
543
- readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
544
- readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
586
+ }, false, T, undefined>;
587
+ readonly boolean: TreeNodeSchemaNonClass<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean, true, unknown, never>;
588
+ readonly handle: TreeNodeSchemaNonClass<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>, true, unknown, never>;
545
589
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
546
- map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
547
- map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
590
+ map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
591
+ map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
548
592
  mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map, unknown>, {
549
593
  [Symbol.iterator](): Iterator<[
550
594
  string,
551
595
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
552
596
  ]>;
553
- }, false, T>;
554
- readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
555
- readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
597
+ }, false, T, undefined>;
598
+ readonly null: TreeNodeSchemaNonClass<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null, true, unknown, never>;
599
+ readonly number: TreeNodeSchemaNonClass<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number, true, unknown, never>;
556
600
  object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
557
601
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property], UnionToIntersection_2<T[Property]>>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1], UnionToIntersection_2<T[Property_1]>> | undefined; }, false, T>;
558
602
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
@@ -561,7 +605,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
561
605
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
562
606
  // (undocumented)
563
607
  readonly scope: TScope;
564
- readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
608
+ readonly string: TreeNodeSchemaNonClass<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string, true, unknown, never>;
565
609
  }
566
610
 
567
611
  // @alpha
@@ -594,9 +638,7 @@ export type SharedTreeOptions = Partial<ICodecOptions> & Partial<SharedTreeForma
594
638
  // @alpha
595
639
  export function singletonSchema<TScope extends string, TName extends string | number>(factory: SchemaFactory<TScope, TName>, name: TName): TreeNodeSchemaClass<ScopedSchemaName<TScope, TName>, NodeKind.Object, TreeNode & {
596
640
  readonly value: TName;
597
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never>) => TreeNode & {
598
- readonly value: TName;
599
- });
641
+ }, Record<string, never>, true, Record<string, never>, undefined>;
600
642
 
601
643
  // @public
602
644
  export type TransactionConstraint = NodeInDocumentConstraint;
@@ -604,6 +646,26 @@ export type TransactionConstraint = NodeInDocumentConstraint;
604
646
  // @public
605
647
  export const Tree: TreeApi;
606
648
 
649
+ // @alpha @sealed
650
+ export const TreeAlpha: {
651
+ branch(node: TreeNode): TreeBranch | undefined;
652
+ create<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(schema: UnsafeUnknownSchema extends TSchema ? ImplicitFieldSchema : TSchema & ImplicitFieldSchema, data: InsertableField<TSchema>): Unhydrated<TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeNode | TreeLeafValue | undefined>;
653
+ importConcise<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(schema: UnsafeUnknownSchema extends TSchema ? ImplicitFieldSchema : TSchema & ImplicitFieldSchema, data: ConciseTree | undefined): Unhydrated<TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeNode | TreeLeafValue | undefined>;
654
+ importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<ParseOptions<IFluidHandle>>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
655
+ importVerbose<const TSchema extends ImplicitFieldSchema, THandle>(schema: TSchema, data: VerboseTree<THandle> | undefined, options: ParseOptions<THandle>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
656
+ exportConcise(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): ConciseTree;
657
+ exportConcise<THandle>(node: TreeNode | TreeLeafValue, options: EncodeOptions<THandle>): ConciseTree<THandle>;
658
+ exportVerbose(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): VerboseTree;
659
+ exportVerbose<T>(node: TreeNode | TreeLeafValue, options: EncodeOptions<T>): VerboseTree<T>;
660
+ exportCompressed(tree: TreeNode | TreeLeafValue, options: {
661
+ oldestCompatibleClient: FluidClientVersion;
662
+ idCompressor?: IIdCompressor;
663
+ }): JsonCompatible<IFluidHandle>;
664
+ importCompressed<const TSchema extends ImplicitFieldSchema>(schema: TSchema, compressedData: JsonCompatible<IFluidHandle>, options: {
665
+ idCompressor?: IIdCompressor;
666
+ } & ICodecOptions): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
667
+ };
668
+
607
669
  // @public @sealed
608
670
  interface TreeApi extends TreeNodeApi {
609
671
  contains(node: TreeNode, other: TreeNode): boolean;
@@ -648,20 +710,28 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
648
710
  // @beta @sealed
649
711
  export const TreeBeta: {
650
712
  on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
651
- clone<TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
713
+ clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
652
714
  };
653
715
 
654
716
  // @alpha @sealed
655
- export interface TreeBranch extends ViewableTree {
656
- branch(): TreeBranchFork;
657
- merge(branch: TreeBranchFork): void;
658
- merge(branch: TreeBranchFork, disposeMerged: boolean): void;
659
- rebase(branch: TreeBranchFork): void;
717
+ export interface TreeBranch extends IDisposable {
718
+ dispose(error?: Error): void;
719
+ readonly events: Listenable<TreeBranchEvents>;
720
+ fork(): TreeBranch;
721
+ hasRootSchema<TSchema extends ImplicitFieldSchema>(schema: TSchema): this is TreeViewAlpha<TSchema>;
722
+ merge(branch: TreeBranch, disposeMerged?: boolean): void;
723
+ rebaseOnto(branch: TreeBranch): void;
660
724
  }
661
725
 
662
726
  // @alpha @sealed
663
- export interface TreeBranchFork extends TreeBranch, IDisposable {
664
- rebaseOnto(branch: TreeBranch): void;
727
+ export interface TreeBranchEvents {
728
+ commitApplied(data: CommitMetadata, getRevertible?: RevertibleFactory): void;
729
+ schemaChanged(): void;
730
+ }
731
+
732
+ // @alpha @sealed
733
+ export interface TreeBranchFork extends BranchableTree, IDisposable {
734
+ rebaseOnto(branch: BranchableTree): void;
665
735
  }
666
736
 
667
737
  // @public @sealed
@@ -734,23 +804,26 @@ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedType
734
804
  type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
735
805
 
736
806
  // @public @sealed
737
- export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
807
+ export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
738
808
 
739
809
  // @public @sealed
740
- export interface TreeNodeSchemaClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
741
- // @sealed
742
- new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
743
- }
810
+ export type TreeNodeSchemaClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode = TreeNode, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
811
+ new (data?: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
812
+ } : {
813
+ new (data: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
814
+ });
744
815
 
745
816
  // @public
746
- export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
817
+ export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
747
818
  // @sealed
748
819
  new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
749
820
  }
750
821
 
751
822
  // @public @sealed
752
- export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
823
+ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown, out TInsertable = never> {
753
824
  readonly childTypes: ReadonlySet<TreeNodeSchema>;
825
+ // @sealed
826
+ createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
754
827
  readonly identifier: Name;
755
828
  readonly implicitlyConstructable: ImplicitlyConstructable;
756
829
  readonly info: Info;
@@ -759,10 +832,11 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
759
832
  }
760
833
 
761
834
  // @public @sealed
762
- export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
763
- // (undocumented)
764
- create(data: TInsertable): TNode;
765
- }
835
+ export type TreeNodeSchemaNonClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
836
+ create(data?: TInsertable | TConstructorExtra): TNode;
837
+ } : {
838
+ create(data: TInsertable | TConstructorExtra): TNode;
839
+ });
766
840
 
767
841
  // @public
768
842
  interface TreeNodeSchemaNonClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
@@ -798,12 +872,14 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
798
872
  upgradeSchema(): void;
799
873
  }
800
874
 
801
- // @alpha
802
- export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeView<TSchema extends ImplicitFieldSchema ? TSchema : ImplicitFieldSchema>, "root" | "initialize"> {
875
+ // @alpha @sealed
876
+ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeView<ReadSchema<TSchema>>, "root" | "initialize">, Omit<TreeBranch, "events"> {
877
+ // (undocumented)
878
+ fork(): ReturnType<TreeBranch["fork"]> & TreeViewAlpha<TSchema>;
803
879
  // (undocumented)
804
880
  initialize(content: InsertableField<TSchema>): void;
805
881
  // (undocumented)
806
- get root(): TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeLeafValue | TreeNode;
882
+ get root(): ReadableField<TSchema>;
807
883
  set root(newRoot: InsertableField<TSchema>);
808
884
  }
809
885
 
@@ -862,16 +938,34 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
862
938
  [NodeKind.Map]: ImplicitAllowedTypes;
863
939
  }[T["kind"]]>> = true;
864
940
 
941
+ // @alpha
942
+ export type VerboseTree<THandle = IFluidHandle> = VerboseTreeNode<THandle> | Exclude<TreeLeafValue, IFluidHandle> | THandle;
943
+
944
+ // @alpha
945
+ export interface VerboseTreeNode<THandle = IFluidHandle> {
946
+ fields: VerboseTree<THandle>[] | {
947
+ [key: string]: VerboseTree<THandle>;
948
+ };
949
+ type: string;
950
+ }
951
+
865
952
  // @public @sealed
866
953
  export interface ViewableTree {
867
954
  viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
868
955
  }
869
956
 
957
+ // @alpha
958
+ export interface ViewContent {
959
+ readonly idCompressor: IIdCompressor_2;
960
+ readonly schema: JsonCompatible;
961
+ readonly tree: JsonCompatible<IFluidHandle>;
962
+ }
963
+
870
964
  // @public @sealed
871
965
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
872
966
  // @deprecated
873
967
  get [typeNameSymbol](): TName;
874
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode | TreeLeafValue, never, boolean, TInfo>;
968
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;
875
969
  }
876
970
 
877
971
  // (No @packageDocumentation comment for this package)
@@ -242,7 +242,7 @@ export interface MakeNominal {
242
242
  export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
243
243
 
244
244
  // @public
245
- type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, infer TBuild> ? TBuild : never;
245
+ type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boolean>> = T extends TreeNodeSchemaCore<string, NodeKind, boolean, unknown, infer TBuild> ? TBuild : never;
246
246
 
247
247
  // @public
248
248
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
@@ -367,24 +367,24 @@ export interface SchemaCompatibilityStatus {
367
367
  // @public @sealed
368
368
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
369
369
  constructor(scope: TScope);
370
- array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
371
- array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
370
+ array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
371
+ array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
372
372
  arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array, unknown>, {
373
373
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
374
- }, false, T>;
375
- readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
376
- readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
374
+ }, false, T, undefined>;
375
+ readonly boolean: TreeNodeSchemaNonClass<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean, true, unknown, never>;
376
+ readonly handle: TreeNodeSchemaNonClass<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>, true, unknown, never>;
377
377
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
378
- map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
379
- map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
378
+ map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
379
+ map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
380
380
  mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map, unknown>, {
381
381
  [Symbol.iterator](): Iterator<[
382
382
  string,
383
383
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
384
384
  ]>;
385
- }, false, T>;
386
- readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
387
- readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
385
+ }, false, T, undefined>;
386
+ readonly null: TreeNodeSchemaNonClass<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null, true, unknown, never>;
387
+ readonly number: TreeNodeSchemaNonClass<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number, true, unknown, never>;
388
388
  object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
389
389
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property], UnionToIntersection_2<T[Property]>>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1], UnionToIntersection_2<T[Property_1]>> | undefined; }, false, T>;
390
390
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
@@ -393,7 +393,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
393
393
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
394
394
  // (undocumented)
395
395
  readonly scope: TScope;
396
- readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
396
+ readonly string: TreeNodeSchemaNonClass<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string, true, unknown, never>;
397
397
  }
398
398
 
399
399
  // @public
@@ -449,7 +449,7 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
449
449
  // @beta @sealed
450
450
  export const TreeBeta: {
451
451
  on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
452
- clone<TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
452
+ clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
453
453
  };
454
454
 
455
455
  // @public @sealed
@@ -516,23 +516,26 @@ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedType
516
516
  type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
517
517
 
518
518
  // @public @sealed
519
- export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
519
+ export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
520
520
 
521
521
  // @public @sealed
522
- export interface TreeNodeSchemaClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
523
- // @sealed
524
- new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
525
- }
522
+ export type TreeNodeSchemaClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode = TreeNode, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
523
+ new (data?: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
524
+ } : {
525
+ new (data: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
526
+ });
526
527
 
527
528
  // @public
528
- export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
529
+ export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
529
530
  // @sealed
530
531
  new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
531
532
  }
532
533
 
533
534
  // @public @sealed
534
- export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
535
+ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown, out TInsertable = never> {
535
536
  readonly childTypes: ReadonlySet<TreeNodeSchema>;
537
+ // @sealed
538
+ createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
536
539
  readonly identifier: Name;
537
540
  readonly implicitlyConstructable: ImplicitlyConstructable;
538
541
  readonly info: Info;
@@ -541,10 +544,11 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
541
544
  }
542
545
 
543
546
  // @public @sealed
544
- export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
545
- // (undocumented)
546
- create(data: TInsertable): TNode;
547
- }
547
+ export type TreeNodeSchemaNonClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
548
+ create(data?: TInsertable | TConstructorExtra): TNode;
549
+ } : {
550
+ create(data: TInsertable | TConstructorExtra): TNode;
551
+ });
548
552
 
549
553
  // @public
550
554
  interface TreeNodeSchemaNonClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
@@ -632,7 +636,7 @@ export interface ViewableTree {
632
636
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
633
637
  // @deprecated
634
638
  get [typeNameSymbol](): TName;
635
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode | TreeLeafValue, never, boolean, TInfo>;
639
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;
636
640
  }
637
641
 
638
642
  // (No @packageDocumentation comment for this package)