@fluidframework/tree 2.0.0-dev-rc.5.0.0.270401 → 2.0.0-dev-rc.5.0.0.271045

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 (421) hide show
  1. package/.eslintrc.cjs +4 -0
  2. package/README.md +13 -0
  3. package/api-report/tree.alpha.api.md +81 -20
  4. package/api-report/tree.beta.api.md +81 -20
  5. package/api-report/tree.public.api.md +81 -20
  6. package/biome.jsonc +4 -0
  7. package/dist/beta.d.ts +10 -4
  8. package/dist/codec/discriminatedUnions.d.ts +2 -2
  9. package/dist/codec/discriminatedUnions.d.ts.map +1 -1
  10. package/dist/codec/discriminatedUnions.js.map +1 -1
  11. package/dist/codec/index.d.ts +1 -1
  12. package/dist/codec/index.d.ts.map +1 -1
  13. package/dist/codec/index.js.map +1 -1
  14. package/dist/core/change-family/index.d.ts +1 -1
  15. package/dist/core/change-family/index.d.ts.map +1 -1
  16. package/dist/core/change-family/index.js.map +1 -1
  17. package/dist/core/forest/index.d.ts +2 -2
  18. package/dist/core/forest/index.d.ts.map +1 -1
  19. package/dist/core/forest/index.js.map +1 -1
  20. package/dist/core/index.d.ts +7 -7
  21. package/dist/core/index.d.ts.map +1 -1
  22. package/dist/core/index.js.map +1 -1
  23. package/dist/core/rebase/index.d.ts +3 -3
  24. package/dist/core/rebase/index.d.ts.map +1 -1
  25. package/dist/core/rebase/index.js.map +1 -1
  26. package/dist/core/revertible/index.d.ts +1 -1
  27. package/dist/core/revertible/index.d.ts.map +1 -1
  28. package/dist/core/revertible/index.js.map +1 -1
  29. package/dist/core/schema-stored/index.d.ts +3 -3
  30. package/dist/core/schema-stored/index.d.ts.map +1 -1
  31. package/dist/core/schema-stored/index.js.map +1 -1
  32. package/dist/core/schema-view/index.d.ts +1 -1
  33. package/dist/core/schema-view/index.d.ts.map +1 -1
  34. package/dist/core/schema-view/index.js.map +1 -1
  35. package/dist/core/tree/index.d.ts +11 -11
  36. package/dist/core/tree/index.d.ts.map +1 -1
  37. package/dist/core/tree/index.js.map +1 -1
  38. package/dist/core/tree/types.d.ts +2 -2
  39. package/dist/core/tree/types.d.ts.map +1 -1
  40. package/dist/core/tree/types.js.map +1 -1
  41. package/dist/events/index.d.ts +1 -1
  42. package/dist/events/index.d.ts.map +1 -1
  43. package/dist/events/index.js.map +1 -1
  44. package/dist/feature-libraries/chunked-forest/codec/index.d.ts +2 -2
  45. package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  46. package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  47. package/dist/feature-libraries/chunked-forest/index.d.ts +3 -3
  48. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  49. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  50. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  51. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +12 -0
  52. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  53. package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  54. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  55. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  56. package/dist/feature-libraries/default-schema/index.d.ts +2 -2
  57. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  58. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  59. package/dist/feature-libraries/flex-map-tree/index.d.ts +1 -1
  60. package/dist/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  61. package/dist/feature-libraries/flex-map-tree/index.js.map +1 -1
  62. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +5 -5
  63. package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  64. package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  65. package/dist/feature-libraries/flex-tree/index.d.ts +4 -4
  66. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  67. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  68. package/dist/feature-libraries/index.d.ts +15 -15
  69. package/dist/feature-libraries/index.d.ts.map +1 -1
  70. package/dist/feature-libraries/index.js +3 -2
  71. package/dist/feature-libraries/index.js.map +1 -1
  72. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +11 -0
  73. package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  74. package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  75. package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  76. package/dist/feature-libraries/modular-schema/genericFieldKind.js +4 -0
  77. package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  78. package/dist/feature-libraries/modular-schema/index.d.ts +7 -7
  79. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  80. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  81. package/dist/feature-libraries/node-key/index.d.ts +2 -2
  82. package/dist/feature-libraries/node-key/index.d.ts.map +1 -1
  83. package/dist/feature-libraries/node-key/index.js.map +1 -1
  84. package/dist/feature-libraries/optional-field/index.d.ts +2 -2
  85. package/dist/feature-libraries/optional-field/index.d.ts.map +1 -1
  86. package/dist/feature-libraries/optional-field/index.js.map +1 -1
  87. package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  88. package/dist/feature-libraries/optional-field/optionalField.js +7 -0
  89. package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
  90. package/dist/feature-libraries/schema-aware/index.d.ts +1 -1
  91. package/dist/feature-libraries/schema-aware/index.d.ts.map +1 -1
  92. package/dist/feature-libraries/schema-aware/index.js.map +1 -1
  93. package/dist/feature-libraries/schema-aware/schemaAware.d.ts +9 -9
  94. package/dist/feature-libraries/schema-aware/schemaAware.d.ts.map +1 -1
  95. package/dist/feature-libraries/schema-aware/schemaAware.js.map +1 -1
  96. package/dist/feature-libraries/schema-edits/index.d.ts +1 -1
  97. package/dist/feature-libraries/schema-edits/index.d.ts.map +1 -1
  98. package/dist/feature-libraries/schema-edits/index.js.map +1 -1
  99. package/dist/feature-libraries/sequence-field/index.d.ts +6 -6
  100. package/dist/feature-libraries/sequence-field/index.d.ts.map +1 -1
  101. package/dist/feature-libraries/sequence-field/index.js.map +1 -1
  102. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  103. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +1 -0
  104. package/dist/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  105. package/dist/feature-libraries/sequence-field/utils.d.ts +1 -0
  106. package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  107. package/dist/feature-libraries/sequence-field/utils.js +15 -1
  108. package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
  109. package/dist/feature-libraries/typed-schema/index.d.ts +5 -3
  110. package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
  111. package/dist/feature-libraries/typed-schema/index.js +26 -1
  112. package/dist/feature-libraries/typed-schema/index.js.map +1 -1
  113. package/dist/feature-libraries/typed-schema/internalTypes.d.ts +6 -0
  114. package/dist/feature-libraries/typed-schema/internalTypes.d.ts.map +1 -0
  115. package/dist/feature-libraries/typed-schema/internalTypes.js +7 -0
  116. package/dist/feature-libraries/typed-schema/internalTypes.js.map +1 -0
  117. package/dist/index.d.ts +8 -8
  118. package/dist/index.d.ts.map +1 -1
  119. package/dist/index.js +4 -1
  120. package/dist/index.js.map +1 -1
  121. package/dist/packageVersion.d.ts +1 -1
  122. package/dist/packageVersion.js +1 -1
  123. package/dist/packageVersion.js.map +1 -1
  124. package/dist/public.d.ts +10 -4
  125. package/dist/shared-tree/index.d.ts +6 -6
  126. package/dist/shared-tree/index.d.ts.map +1 -1
  127. package/dist/shared-tree/index.js.map +1 -1
  128. package/dist/shared-tree/schematizeTree.d.ts +9 -0
  129. package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
  130. package/dist/shared-tree/schematizeTree.js +40 -24
  131. package/dist/shared-tree/schematizeTree.js.map +1 -1
  132. package/dist/shared-tree/schematizingTreeView.d.ts +31 -23
  133. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  134. package/dist/shared-tree/schematizingTreeView.js +151 -105
  135. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  136. package/dist/shared-tree/sharedTree.d.ts +3 -2
  137. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  138. package/dist/shared-tree/sharedTree.js +8 -3
  139. package/dist/shared-tree/sharedTree.js.map +1 -1
  140. package/dist/shared-tree-core/index.d.ts +6 -6
  141. package/dist/shared-tree-core/index.d.ts.map +1 -1
  142. package/dist/shared-tree-core/index.js.map +1 -1
  143. package/dist/simple-tree/index.d.ts +13 -11
  144. package/dist/simple-tree/index.d.ts.map +1 -1
  145. package/dist/simple-tree/index.js +28 -1
  146. package/dist/simple-tree/index.js.map +1 -1
  147. package/dist/simple-tree/internalTypes.d.ts +6 -0
  148. package/dist/simple-tree/internalTypes.d.ts.map +1 -0
  149. package/dist/simple-tree/internalTypes.js +7 -0
  150. package/dist/simple-tree/internalTypes.js.map +1 -0
  151. package/dist/simple-tree/objectNode.d.ts +17 -5
  152. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  153. package/dist/simple-tree/objectNode.js.map +1 -1
  154. package/dist/simple-tree/schemaCreationUtilities.d.ts +4 -4
  155. package/dist/simple-tree/schemaCreationUtilities.d.ts.map +1 -1
  156. package/dist/simple-tree/schemaFactory.d.ts +2 -2
  157. package/dist/simple-tree/schemaFactory.d.ts.map +1 -1
  158. package/dist/simple-tree/schemaFactory.js.map +1 -1
  159. package/dist/simple-tree/schemaTypes.d.ts +3 -3
  160. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  161. package/dist/simple-tree/schemaTypes.js.map +1 -1
  162. package/dist/simple-tree/testRecursiveDomain.d.ts +25 -10
  163. package/dist/simple-tree/testRecursiveDomain.d.ts.map +1 -1
  164. package/dist/simple-tree/toFlexSchema.d.ts +13 -4
  165. package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
  166. package/dist/simple-tree/toFlexSchema.js +13 -3
  167. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  168. package/dist/simple-tree/tree.d.ts +173 -40
  169. package/dist/simple-tree/tree.d.ts.map +1 -1
  170. package/dist/simple-tree/tree.js +37 -4
  171. package/dist/simple-tree/tree.js.map +1 -1
  172. package/dist/simple-tree/typesUnsafe.d.ts +11 -4
  173. package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
  174. package/dist/simple-tree/typesUnsafe.js.map +1 -1
  175. package/dist/util/index.d.ts +19 -12
  176. package/dist/util/index.d.ts.map +1 -1
  177. package/dist/util/index.js +26 -1
  178. package/dist/util/index.js.map +1 -1
  179. package/dist/util/internalTypes.d.ts +6 -0
  180. package/dist/util/internalTypes.d.ts.map +1 -0
  181. package/dist/util/internalTypes.js +7 -0
  182. package/dist/util/internalTypes.js.map +1 -0
  183. package/dist/util/typeUtils.d.ts +2 -2
  184. package/dist/util/typeUtils.js.map +1 -1
  185. package/docs/user-facing/README.md +3 -0
  186. package/docs/user-facing/schema-evolution.md +309 -0
  187. package/lib/beta.d.ts +10 -4
  188. package/lib/codec/discriminatedUnions.d.ts +2 -2
  189. package/lib/codec/discriminatedUnions.d.ts.map +1 -1
  190. package/lib/codec/discriminatedUnions.js.map +1 -1
  191. package/lib/codec/index.d.ts +1 -1
  192. package/lib/codec/index.d.ts.map +1 -1
  193. package/lib/codec/index.js.map +1 -1
  194. package/lib/core/change-family/index.d.ts +1 -1
  195. package/lib/core/change-family/index.d.ts.map +1 -1
  196. package/lib/core/change-family/index.js.map +1 -1
  197. package/lib/core/forest/index.d.ts +2 -2
  198. package/lib/core/forest/index.d.ts.map +1 -1
  199. package/lib/core/forest/index.js.map +1 -1
  200. package/lib/core/index.d.ts +7 -7
  201. package/lib/core/index.d.ts.map +1 -1
  202. package/lib/core/index.js.map +1 -1
  203. package/lib/core/rebase/index.d.ts +3 -3
  204. package/lib/core/rebase/index.d.ts.map +1 -1
  205. package/lib/core/rebase/index.js.map +1 -1
  206. package/lib/core/revertible/index.d.ts +1 -1
  207. package/lib/core/revertible/index.d.ts.map +1 -1
  208. package/lib/core/revertible/index.js.map +1 -1
  209. package/lib/core/schema-stored/index.d.ts +3 -3
  210. package/lib/core/schema-stored/index.d.ts.map +1 -1
  211. package/lib/core/schema-stored/index.js.map +1 -1
  212. package/lib/core/schema-view/index.d.ts +1 -1
  213. package/lib/core/schema-view/index.d.ts.map +1 -1
  214. package/lib/core/schema-view/index.js.map +1 -1
  215. package/lib/core/tree/index.d.ts +11 -11
  216. package/lib/core/tree/index.d.ts.map +1 -1
  217. package/lib/core/tree/index.js.map +1 -1
  218. package/lib/core/tree/types.d.ts +2 -2
  219. package/lib/core/tree/types.d.ts.map +1 -1
  220. package/lib/core/tree/types.js.map +1 -1
  221. package/lib/events/index.d.ts +1 -1
  222. package/lib/events/index.d.ts.map +1 -1
  223. package/lib/events/index.js.map +1 -1
  224. package/lib/feature-libraries/chunked-forest/codec/index.d.ts +2 -2
  225. package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
  226. package/lib/feature-libraries/chunked-forest/codec/index.js +1 -1
  227. package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
  228. package/lib/feature-libraries/chunked-forest/index.d.ts +3 -3
  229. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  230. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  231. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  232. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +12 -0
  233. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  234. package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
  235. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
  236. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  237. package/lib/feature-libraries/default-schema/index.d.ts +2 -2
  238. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  239. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  240. package/lib/feature-libraries/flex-map-tree/index.d.ts +1 -1
  241. package/lib/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
  242. package/lib/feature-libraries/flex-map-tree/index.js.map +1 -1
  243. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +5 -5
  244. package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
  245. package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
  246. package/lib/feature-libraries/flex-tree/index.d.ts +4 -4
  247. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  248. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  249. package/lib/feature-libraries/index.d.ts +15 -15
  250. package/lib/feature-libraries/index.d.ts.map +1 -1
  251. package/lib/feature-libraries/index.js +2 -2
  252. package/lib/feature-libraries/index.js.map +1 -1
  253. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +11 -0
  254. package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
  255. package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
  256. package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
  257. package/lib/feature-libraries/modular-schema/genericFieldKind.js +4 -0
  258. package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
  259. package/lib/feature-libraries/modular-schema/index.d.ts +7 -7
  260. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  261. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  262. package/lib/feature-libraries/node-key/index.d.ts +2 -2
  263. package/lib/feature-libraries/node-key/index.d.ts.map +1 -1
  264. package/lib/feature-libraries/node-key/index.js.map +1 -1
  265. package/lib/feature-libraries/optional-field/index.d.ts +2 -2
  266. package/lib/feature-libraries/optional-field/index.d.ts.map +1 -1
  267. package/lib/feature-libraries/optional-field/index.js.map +1 -1
  268. package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
  269. package/lib/feature-libraries/optional-field/optionalField.js +7 -0
  270. package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
  271. package/lib/feature-libraries/schema-aware/index.d.ts +1 -1
  272. package/lib/feature-libraries/schema-aware/index.d.ts.map +1 -1
  273. package/lib/feature-libraries/schema-aware/index.js.map +1 -1
  274. package/lib/feature-libraries/schema-aware/schemaAware.d.ts +9 -9
  275. package/lib/feature-libraries/schema-aware/schemaAware.d.ts.map +1 -1
  276. package/lib/feature-libraries/schema-aware/schemaAware.js.map +1 -1
  277. package/lib/feature-libraries/schema-edits/index.d.ts +1 -1
  278. package/lib/feature-libraries/schema-edits/index.d.ts.map +1 -1
  279. package/lib/feature-libraries/schema-edits/index.js.map +1 -1
  280. package/lib/feature-libraries/sequence-field/index.d.ts +6 -6
  281. package/lib/feature-libraries/sequence-field/index.d.ts.map +1 -1
  282. package/lib/feature-libraries/sequence-field/index.js +2 -2
  283. package/lib/feature-libraries/sequence-field/index.js.map +1 -1
  284. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.d.ts.map +1 -1
  285. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js +2 -1
  286. package/lib/feature-libraries/sequence-field/sequenceFieldChangeHandler.js.map +1 -1
  287. package/lib/feature-libraries/sequence-field/utils.d.ts +1 -0
  288. package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
  289. package/lib/feature-libraries/sequence-field/utils.js +13 -0
  290. package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
  291. package/lib/feature-libraries/typed-schema/index.d.ts +5 -3
  292. package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
  293. package/lib/feature-libraries/typed-schema/index.js +2 -0
  294. package/lib/feature-libraries/typed-schema/index.js.map +1 -1
  295. package/lib/feature-libraries/typed-schema/internalTypes.d.ts +6 -0
  296. package/lib/feature-libraries/typed-schema/internalTypes.d.ts.map +1 -0
  297. package/lib/feature-libraries/typed-schema/internalTypes.js +6 -0
  298. package/lib/feature-libraries/typed-schema/internalTypes.js.map +1 -0
  299. package/lib/index.d.ts +8 -8
  300. package/lib/index.d.ts.map +1 -1
  301. package/lib/index.js +2 -2
  302. package/lib/index.js.map +1 -1
  303. package/lib/packageVersion.d.ts +1 -1
  304. package/lib/packageVersion.js +1 -1
  305. package/lib/packageVersion.js.map +1 -1
  306. package/lib/public.d.ts +10 -4
  307. package/lib/shared-tree/index.d.ts +6 -6
  308. package/lib/shared-tree/index.d.ts.map +1 -1
  309. package/lib/shared-tree/index.js.map +1 -1
  310. package/lib/shared-tree/schematizeTree.d.ts +9 -0
  311. package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
  312. package/lib/shared-tree/schematizeTree.js +38 -23
  313. package/lib/shared-tree/schematizeTree.js.map +1 -1
  314. package/lib/shared-tree/schematizingTreeView.d.ts +31 -23
  315. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  316. package/lib/shared-tree/schematizingTreeView.js +153 -106
  317. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  318. package/lib/shared-tree/sharedTree.d.ts +3 -2
  319. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  320. package/lib/shared-tree/sharedTree.js +8 -3
  321. package/lib/shared-tree/sharedTree.js.map +1 -1
  322. package/lib/shared-tree-core/index.d.ts +6 -6
  323. package/lib/shared-tree-core/index.d.ts.map +1 -1
  324. package/lib/shared-tree-core/index.js.map +1 -1
  325. package/lib/simple-tree/index.d.ts +13 -11
  326. package/lib/simple-tree/index.d.ts.map +1 -1
  327. package/lib/simple-tree/index.js +4 -2
  328. package/lib/simple-tree/index.js.map +1 -1
  329. package/lib/simple-tree/internalTypes.d.ts +6 -0
  330. package/lib/simple-tree/internalTypes.d.ts.map +1 -0
  331. package/lib/simple-tree/internalTypes.js +6 -0
  332. package/lib/simple-tree/internalTypes.js.map +1 -0
  333. package/lib/simple-tree/objectNode.d.ts +17 -5
  334. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  335. package/lib/simple-tree/objectNode.js.map +1 -1
  336. package/lib/simple-tree/schemaCreationUtilities.d.ts +4 -4
  337. package/lib/simple-tree/schemaCreationUtilities.d.ts.map +1 -1
  338. package/lib/simple-tree/schemaFactory.d.ts +2 -2
  339. package/lib/simple-tree/schemaFactory.d.ts.map +1 -1
  340. package/lib/simple-tree/schemaFactory.js.map +1 -1
  341. package/lib/simple-tree/schemaTypes.d.ts +3 -3
  342. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  343. package/lib/simple-tree/schemaTypes.js +1 -1
  344. package/lib/simple-tree/schemaTypes.js.map +1 -1
  345. package/lib/simple-tree/testRecursiveDomain.d.ts +25 -10
  346. package/lib/simple-tree/testRecursiveDomain.d.ts.map +1 -1
  347. package/lib/simple-tree/toFlexSchema.d.ts +13 -4
  348. package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
  349. package/lib/simple-tree/toFlexSchema.js +12 -3
  350. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  351. package/lib/simple-tree/tree.d.ts +173 -40
  352. package/lib/simple-tree/tree.d.ts.map +1 -1
  353. package/lib/simple-tree/tree.js +35 -3
  354. package/lib/simple-tree/tree.js.map +1 -1
  355. package/lib/simple-tree/typesUnsafe.d.ts +11 -4
  356. package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
  357. package/lib/simple-tree/typesUnsafe.js.map +1 -1
  358. package/lib/util/index.d.ts +19 -12
  359. package/lib/util/index.d.ts.map +1 -1
  360. package/lib/util/index.js +8 -1
  361. package/lib/util/index.js.map +1 -1
  362. package/lib/util/internalTypes.d.ts +6 -0
  363. package/lib/util/internalTypes.d.ts.map +1 -0
  364. package/lib/util/internalTypes.js +6 -0
  365. package/lib/util/internalTypes.js.map +1 -0
  366. package/lib/util/typeUtils.d.ts +2 -2
  367. package/lib/util/typeUtils.js.map +1 -1
  368. package/package.json +26 -23
  369. package/src/codec/discriminatedUnions.ts +2 -2
  370. package/src/codec/index.ts +10 -10
  371. package/src/core/change-family/index.ts +1 -1
  372. package/src/core/forest/index.ts +8 -8
  373. package/src/core/index.ts +89 -89
  374. package/src/core/rebase/index.ts +14 -14
  375. package/src/core/revertible/index.ts +1 -1
  376. package/src/core/schema-stored/index.ts +12 -12
  377. package/src/core/schema-view/index.ts +2 -2
  378. package/src/core/tree/index.ts +37 -37
  379. package/src/core/tree/types.ts +2 -2
  380. package/src/events/index.ts +9 -9
  381. package/src/feature-libraries/chunked-forest/codec/index.ts +6 -2
  382. package/src/feature-libraries/chunked-forest/index.ts +5 -5
  383. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +10 -0
  384. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
  385. package/src/feature-libraries/default-schema/index.ts +10 -10
  386. package/src/feature-libraries/flex-map-tree/index.ts +1 -1
  387. package/src/feature-libraries/flex-tree/flexTreeTypes.ts +32 -31
  388. package/src/feature-libraries/flex-tree/index.ts +27 -27
  389. package/src/feature-libraries/index.ts +140 -137
  390. package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +12 -0
  391. package/src/feature-libraries/modular-schema/genericFieldKind.ts +5 -0
  392. package/src/feature-libraries/modular-schema/index.ts +24 -21
  393. package/src/feature-libraries/node-key/index.ts +3 -3
  394. package/src/feature-libraries/optional-field/index.ts +2 -2
  395. package/src/feature-libraries/optional-field/optionalField.ts +9 -0
  396. package/src/feature-libraries/schema-aware/index.ts +1 -1
  397. package/src/feature-libraries/schema-aware/schemaAware.ts +9 -9
  398. package/src/feature-libraries/schema-edits/index.ts +1 -1
  399. package/src/feature-libraries/sequence-field/index.ts +14 -6
  400. package/src/feature-libraries/sequence-field/sequenceFieldChangeHandler.ts +2 -1
  401. package/src/feature-libraries/sequence-field/utils.ts +14 -0
  402. package/src/feature-libraries/typed-schema/index.ts +19 -18
  403. package/src/feature-libraries/typed-schema/internalTypes.ts +8 -0
  404. package/src/index.ts +251 -249
  405. package/src/packageVersion.ts +1 -1
  406. package/src/shared-tree/index.ts +19 -19
  407. package/src/shared-tree/schematizeTree.ts +45 -32
  408. package/src/shared-tree/schematizingTreeView.ts +186 -126
  409. package/src/shared-tree/sharedTree.ts +22 -4
  410. package/src/shared-tree-core/index.ts +11 -11
  411. package/src/simple-tree/index.ts +39 -34
  412. package/src/simple-tree/internalTypes.ts +8 -0
  413. package/src/simple-tree/objectNode.ts +27 -5
  414. package/src/simple-tree/schemaFactory.ts +9 -1
  415. package/src/simple-tree/schemaTypes.ts +8 -3
  416. package/src/simple-tree/toFlexSchema.ts +14 -4
  417. package/src/simple-tree/tree.ts +199 -41
  418. package/src/simple-tree/typesUnsafe.ts +25 -4
  419. package/src/util/index.ts +40 -27
  420. package/src/util/internalTypes.ts +8 -0
  421. package/src/util/typeUtils.ts +2 -2
package/.eslintrc.cjs CHANGED
@@ -49,6 +49,10 @@ module.exports = {
49
49
 
50
50
  // TODO: Remove these overrides once this config has been updated to extend the "strict" base config.
51
51
  "@typescript-eslint/explicit-member-accessibility": "error",
52
+ "@typescript-eslint/consistent-type-exports": [
53
+ "error",
54
+ { fixMixedExportsWithInlineTypeSpecifier: true },
55
+ ],
52
56
  },
53
57
  overrides: [
54
58
  {
package/README.md CHANGED
@@ -284,6 +284,19 @@ graph LR;
284
284
  Indexes--"delta (for apps that want deltas)"-->app
285
285
  ```
286
286
 
287
+ ### Schema Evolvability
288
+
289
+ Over time, application authors may want to change the schema for their documents.
290
+ For example, they might want to add support for a new application feature or represent existing content in some new way.
291
+
292
+ Before doing so, application authors must consider compatibility constraints within their ecosystem.
293
+ Most ecosystems don't have a way to ensure all documents an application may open are using the new schema or even that all users within a collaborative session are using the same code version.
294
+ This can be problematic when two clients using code versions with different document schema attempt to collaborate.
295
+
296
+ As a result, applications must be forward-thinking about policies around when their code supports working with some particular document.
297
+
298
+ See [Schema Evolution](./docs/user-facing/schema-evolution.md) for a comprehensive treatment of this problem.
299
+
287
300
  ### Dependencies
288
301
 
289
302
  `@fluidframework/tree` depends on the Fluid runtime (various packages in `@fluidframework/*`)
@@ -20,7 +20,7 @@ import type { TSchema } from '@sinclair/typebox';
20
20
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
21
21
 
22
22
  // @public
23
- export type ApplyKind<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = {
23
+ type ApplyKind<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = {
24
24
  [FieldKind.Required]: T;
25
25
  [FieldKind.Optional]: T | undefined;
26
26
  [FieldKind.Identifier]: DefaultsAreOptional extends true ? T | undefined : T;
@@ -44,7 +44,13 @@ export interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldP
44
44
  }
45
45
 
46
46
  // @public
47
- export type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
47
+ type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
48
+
49
+ // @public
50
+ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSchema<FieldKind.Optional | FieldKind.Identifier> ? true : false;
51
+
52
+ // @public
53
+ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> = T extends FieldSchemaUnsafe<FieldKind.Optional | FieldKind.Identifier, Unenforced<ImplicitAllowedTypes>> ? true : false;
48
54
 
49
55
  // @public
50
56
  export enum FieldKind {
@@ -75,11 +81,16 @@ export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends
75
81
  readonly kind: Kind;
76
82
  }
77
83
 
84
+ // @public
85
+ type FlattenKeys<T> = [{
86
+ [Property in keyof T]: T[Property];
87
+ }][_InlineTrick];
88
+
78
89
  // @public
79
90
  export type FlexList<Item = unknown> = readonly LazyItem<Item>[];
80
91
 
81
92
  // @public
82
- export type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
93
+ type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
83
94
 
84
95
  // @public
85
96
  export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
@@ -88,13 +99,20 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
88
99
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
89
100
 
90
101
  // @public
91
- export type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = {
92
- readonly [Property in keyof T]: InsertableTreeFieldFromImplicitField<T[Property]>;
93
- };
102
+ type _InlineTrick = 0;
103
+
104
+ // @public
105
+ export type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = InternalUtilTypes.FlattenKeys<{
106
+ readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property]>;
107
+ } & {
108
+ readonly [Property in keyof T as FieldHasDefault<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property]>;
109
+ }>;
94
110
 
95
111
  // @public
96
112
  export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
97
- readonly [Property in keyof T]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
113
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
114
+ } & {
115
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends true ? Property : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
98
116
  };
99
117
 
100
118
  // @public
@@ -104,10 +122,10 @@ export type InsertableTreeFieldFromImplicitField<TSchema extends ImplicitFieldSc
104
122
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>;
105
123
 
106
124
  // @public
107
- export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? InsertableTypedNode<FlexListToUnion<TSchema>> : never;
125
+ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? InsertableTypedNode<InternalFlexListTypes.FlexListToUnion<TSchema>> : never;
108
126
 
109
127
  // @public
110
- export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends AllowedTypes ? InsertableTypedNodeUnsafe<FlexListToUnion<TSchema>> : InsertableTypedNodeUnsafe<TSchema>;
128
+ export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends AllowedTypes ? InsertableTypedNodeUnsafe<InternalFlexListTypes.FlexListToUnion<TSchema>> : InsertableTypedNodeUnsafe<TSchema>;
111
129
 
112
130
  // @public
113
131
  export type InsertableTypedNode<T extends TreeNodeSchema> = (T extends {
@@ -119,10 +137,33 @@ export type InsertableTypedNodeUnsafe<T extends Unenforced<TreeNodeSchema>> = Un
119
137
  implicitlyConstructable: true;
120
138
  } ? NodeBuilderDataUnsafe<T> : never);
121
139
 
140
+ declare namespace InternalFlexListTypes {
141
+ export {
142
+ FlexListToUnion,
143
+ ExtractItemType
144
+ }
145
+ }
146
+ export { InternalFlexListTypes }
147
+
148
+ declare namespace InternalSimpleTreeTypes {
149
+ export {
150
+ ApplyKind
151
+ }
152
+ }
153
+ export { InternalSimpleTreeTypes }
154
+
122
155
  // @public
123
156
  export interface InternalTreeNode extends ErasedType<"@fluidframework/tree.InternalTreeNode"> {
124
157
  }
125
158
 
159
+ declare namespace InternalUtilTypes {
160
+ export {
161
+ _InlineTrick,
162
+ FlattenKeys
163
+ }
164
+ }
165
+ export { InternalUtilTypes }
166
+
126
167
  // @public
127
168
  export type IsListener<TListener> = TListener extends (...args: any[]) => void ? true : false;
128
169
 
@@ -133,7 +174,9 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
133
174
 
134
175
  // @public
135
176
  export interface ITree extends IFluidLoadable {
177
+ // @deprecated
136
178
  schematize<TRoot extends ImplicitFieldSchema>(config: TreeConfiguration<TRoot>): TreeView<TRoot>;
179
+ viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
137
180
  }
138
181
 
139
182
  // @public
@@ -141,6 +184,12 @@ export interface ITreeConfigurationOptions {
141
184
  enableSchemaValidation?: boolean;
142
185
  }
143
186
 
187
+ // @public
188
+ export interface ITreeViewConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> {
189
+ readonly enableSchemaValidation?: boolean;
190
+ readonly schema: TSchema;
191
+ }
192
+
144
193
  // @public
145
194
  export type LazyItem<Item = unknown> = Item | (() => Item);
146
195
 
@@ -245,6 +294,14 @@ export interface RunTransaction {
245
294
  readonly rollback: typeof rollback;
246
295
  }
247
296
 
297
+ // @public
298
+ export interface SchemaCompatibilityStatus {
299
+ readonly canInitialize: boolean;
300
+ readonly canUpgrade: boolean;
301
+ readonly canView: boolean;
302
+ readonly isEquivalent: boolean;
303
+ }
304
+
248
305
  // @public @sealed
249
306
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
250
307
  constructor(scope: TScope);
@@ -267,7 +324,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
267
324
  readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
268
325
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
269
326
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
270
- objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
327
+ objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, 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]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
271
328
  optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
272
329
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
273
330
  required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
@@ -277,11 +334,6 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
277
334
  readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
278
335
  }
279
336
 
280
- // @public
281
- export interface SchemaIncompatible {
282
- readonly canUpgrade: boolean;
283
- }
284
-
285
337
  // @public
286
338
  export type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
287
339
 
@@ -340,12 +392,12 @@ export interface TreeChangeEvents {
340
392
  treeChanged(): void;
341
393
  }
342
394
 
343
- // @public
395
+ // @public @deprecated
344
396
  export class TreeConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> {
345
397
  constructor(schema: TSchema, initialTree: () => InsertableTreeFieldFromImplicitField<TSchema>, options?: ITreeConfigurationOptions);
398
+ readonly enableSchemaValidation: boolean;
346
399
  // (undocumented)
347
400
  readonly initialTree: () => InsertableTreeFieldFromImplicitField<TSchema>;
348
- readonly options: Required<ITreeConfigurationOptions>;
349
401
  // (undocumented)
350
402
  readonly schema: TSchema;
351
403
  }
@@ -393,10 +445,10 @@ export interface TreeNodeApi {
393
445
  }
394
446
 
395
447
  // @public
396
- export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
448
+ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<InternalFlexListTypes.FlexListToUnion<TSchema>> : unknown;
397
449
 
398
450
  // @public
399
- export type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
451
+ export type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<InternalFlexListTypes.FlexListToUnion<TSchema>> : unknown;
400
452
 
401
453
  // @public
402
454
  export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode = unknown, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
@@ -439,18 +491,27 @@ export enum TreeStatus {
439
491
 
440
492
  // @public
441
493
  export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposable_2 {
442
- readonly error?: SchemaIncompatible;
494
+ readonly compatibility: SchemaCompatibilityStatus;
443
495
  readonly events: Listenable<TreeViewEvents>;
496
+ initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
444
497
  get root(): TreeFieldFromImplicitField<TSchema>;
445
498
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
446
499
  upgradeSchema(): void;
447
500
  }
448
501
 
502
+ // @public
503
+ export class TreeViewConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
504
+ constructor(props: ITreeViewConfiguration<TSchema>);
505
+ readonly enableSchemaValidation: boolean;
506
+ readonly schema: TSchema;
507
+ }
508
+
449
509
  // @public
450
510
  export interface TreeViewEvents {
451
511
  afterBatch(): void;
452
512
  commitApplied(data: CommitMetadata, getRevertible?: RevertibleFactory): void;
453
513
  rootChanged(): void;
514
+ schemaChanged(): void;
454
515
  }
455
516
 
456
517
  // @public
@@ -20,7 +20,7 @@ import type { TSchema } from '@sinclair/typebox';
20
20
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
21
21
 
22
22
  // @public
23
- export type ApplyKind<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = {
23
+ type ApplyKind<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = {
24
24
  [FieldKind.Required]: T;
25
25
  [FieldKind.Optional]: T | undefined;
26
26
  [FieldKind.Identifier]: DefaultsAreOptional extends true ? T | undefined : T;
@@ -44,7 +44,13 @@ export interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldP
44
44
  }
45
45
 
46
46
  // @public
47
- export type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
47
+ type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
48
+
49
+ // @public
50
+ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSchema<FieldKind.Optional | FieldKind.Identifier> ? true : false;
51
+
52
+ // @public
53
+ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> = T extends FieldSchemaUnsafe<FieldKind.Optional | FieldKind.Identifier, Unenforced<ImplicitAllowedTypes>> ? true : false;
48
54
 
49
55
  // @public
50
56
  export enum FieldKind {
@@ -75,11 +81,16 @@ export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends
75
81
  readonly kind: Kind;
76
82
  }
77
83
 
84
+ // @public
85
+ type FlattenKeys<T> = [{
86
+ [Property in keyof T]: T[Property];
87
+ }][_InlineTrick];
88
+
78
89
  // @public
79
90
  export type FlexList<Item = unknown> = readonly LazyItem<Item>[];
80
91
 
81
92
  // @public
82
- export type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
93
+ type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
83
94
 
84
95
  // @public
85
96
  export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
@@ -88,13 +99,20 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
88
99
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
89
100
 
90
101
  // @public
91
- export type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = {
92
- readonly [Property in keyof T]: InsertableTreeFieldFromImplicitField<T[Property]>;
93
- };
102
+ type _InlineTrick = 0;
103
+
104
+ // @public
105
+ export type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = InternalUtilTypes.FlattenKeys<{
106
+ readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property]>;
107
+ } & {
108
+ readonly [Property in keyof T as FieldHasDefault<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property]>;
109
+ }>;
94
110
 
95
111
  // @public
96
112
  export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
97
- readonly [Property in keyof T]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
113
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
114
+ } & {
115
+ readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends true ? Property : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
98
116
  };
99
117
 
100
118
  // @public
@@ -104,10 +122,10 @@ export type InsertableTreeFieldFromImplicitField<TSchema extends ImplicitFieldSc
104
122
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKind<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>;
105
123
 
106
124
  // @public
107
- export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? InsertableTypedNode<FlexListToUnion<TSchema>> : never;
125
+ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? InsertableTypedNode<InternalFlexListTypes.FlexListToUnion<TSchema>> : never;
108
126
 
109
127
  // @public
110
- export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends AllowedTypes ? InsertableTypedNodeUnsafe<FlexListToUnion<TSchema>> : InsertableTypedNodeUnsafe<TSchema>;
128
+ export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends AllowedTypes ? InsertableTypedNodeUnsafe<InternalFlexListTypes.FlexListToUnion<TSchema>> : InsertableTypedNodeUnsafe<TSchema>;
111
129
 
112
130
  // @public
113
131
  export type InsertableTypedNode<T extends TreeNodeSchema> = (T extends {
@@ -119,10 +137,33 @@ export type InsertableTypedNodeUnsafe<T extends Unenforced<TreeNodeSchema>> = Un
119
137
  implicitlyConstructable: true;
120
138
  } ? NodeBuilderDataUnsafe<T> : never);
121
139
 
140
+ declare namespace InternalFlexListTypes {
141
+ export {
142
+ FlexListToUnion,
143
+ ExtractItemType
144
+ }
145
+ }
146
+ export { InternalFlexListTypes }
147
+
148
+ declare namespace InternalSimpleTreeTypes {
149
+ export {
150
+ ApplyKind
151
+ }
152
+ }
153
+ export { InternalSimpleTreeTypes }
154
+
122
155
  // @public
123
156
  export interface InternalTreeNode extends ErasedType<"@fluidframework/tree.InternalTreeNode"> {
124
157
  }
125
158
 
159
+ declare namespace InternalUtilTypes {
160
+ export {
161
+ _InlineTrick,
162
+ FlattenKeys
163
+ }
164
+ }
165
+ export { InternalUtilTypes }
166
+
126
167
  // @public
127
168
  export type IsListener<TListener> = TListener extends (...args: any[]) => void ? true : false;
128
169
 
@@ -133,7 +174,9 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
133
174
 
134
175
  // @public
135
176
  export interface ITree extends IFluidLoadable {
177
+ // @deprecated
136
178
  schematize<TRoot extends ImplicitFieldSchema>(config: TreeConfiguration<TRoot>): TreeView<TRoot>;
179
+ viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
137
180
  }
138
181
 
139
182
  // @public
@@ -141,6 +184,12 @@ export interface ITreeConfigurationOptions {
141
184
  enableSchemaValidation?: boolean;
142
185
  }
143
186
 
187
+ // @public
188
+ export interface ITreeViewConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> {
189
+ readonly enableSchemaValidation?: boolean;
190
+ readonly schema: TSchema;
191
+ }
192
+
144
193
  // @public
145
194
  export type LazyItem<Item = unknown> = Item | (() => Item);
146
195
 
@@ -245,6 +294,14 @@ export interface RunTransaction {
245
294
  readonly rollback: typeof rollback;
246
295
  }
247
296
 
297
+ // @public
298
+ export interface SchemaCompatibilityStatus {
299
+ readonly canInitialize: boolean;
300
+ readonly canUpgrade: boolean;
301
+ readonly canView: boolean;
302
+ readonly isEquivalent: boolean;
303
+ }
304
+
248
305
  // @public @sealed
249
306
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
250
307
  constructor(scope: TScope);
@@ -267,7 +324,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
267
324
  readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
268
325
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
269
326
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
270
- objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
327
+ objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, 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]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
271
328
  optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
272
329
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
273
330
  required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
@@ -277,11 +334,6 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
277
334
  readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
278
335
  }
279
336
 
280
- // @public
281
- export interface SchemaIncompatible {
282
- readonly canUpgrade: boolean;
283
- }
284
-
285
337
  // @public
286
338
  export type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
287
339
 
@@ -337,12 +389,12 @@ export interface TreeChangeEvents {
337
389
  treeChanged(): void;
338
390
  }
339
391
 
340
- // @public
392
+ // @public @deprecated
341
393
  export class TreeConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> {
342
394
  constructor(schema: TSchema, initialTree: () => InsertableTreeFieldFromImplicitField<TSchema>, options?: ITreeConfigurationOptions);
395
+ readonly enableSchemaValidation: boolean;
343
396
  // (undocumented)
344
397
  readonly initialTree: () => InsertableTreeFieldFromImplicitField<TSchema>;
345
- readonly options: Required<ITreeConfigurationOptions>;
346
398
  // (undocumented)
347
399
  readonly schema: TSchema;
348
400
  }
@@ -390,10 +442,10 @@ export interface TreeNodeApi {
390
442
  }
391
443
 
392
444
  // @public
393
- export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
445
+ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<InternalFlexListTypes.FlexListToUnion<TSchema>> : unknown;
394
446
 
395
447
  // @public
396
- export type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
448
+ export type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<InternalFlexListTypes.FlexListToUnion<TSchema>> : unknown;
397
449
 
398
450
  // @public
399
451
  export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode = unknown, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
@@ -436,18 +488,27 @@ export enum TreeStatus {
436
488
 
437
489
  // @public
438
490
  export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposable_2 {
439
- readonly error?: SchemaIncompatible;
491
+ readonly compatibility: SchemaCompatibilityStatus;
440
492
  readonly events: Listenable<TreeViewEvents>;
493
+ initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
441
494
  get root(): TreeFieldFromImplicitField<TSchema>;
442
495
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
443
496
  upgradeSchema(): void;
444
497
  }
445
498
 
499
+ // @public
500
+ export class TreeViewConfiguration<TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
501
+ constructor(props: ITreeViewConfiguration<TSchema>);
502
+ readonly enableSchemaValidation: boolean;
503
+ readonly schema: TSchema;
504
+ }
505
+
446
506
  // @public
447
507
  export interface TreeViewEvents {
448
508
  afterBatch(): void;
449
509
  commitApplied(data: CommitMetadata, getRevertible?: RevertibleFactory): void;
450
510
  rootChanged(): void;
511
+ schemaChanged(): void;
451
512
  }
452
513
 
453
514
  // @public