@fluidframework/tree 2.5.0-302463 → 2.10.0-304831

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