@fluidframework/tree 2.4.0-299707 → 2.5.0-302463

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 (289) hide show
  1. package/.vscode/settings.json +11 -1
  2. package/CHANGELOG.md +192 -0
  3. package/api-report/tree.alpha.api.md +150 -52
  4. package/api-report/tree.beta.api.md +85 -39
  5. package/api-report/tree.legacy.alpha.api.md +83 -38
  6. package/api-report/tree.legacy.public.api.md +83 -38
  7. package/api-report/tree.public.api.md +83 -38
  8. package/dist/alpha.d.ts +17 -2
  9. package/dist/beta.d.ts +6 -0
  10. package/dist/events/interop.d.ts +1 -7
  11. package/dist/events/interop.d.ts.map +1 -1
  12. package/dist/events/interop.js.map +1 -1
  13. package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -1
  14. package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  15. package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
  16. package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  17. package/dist/feature-libraries/flex-tree/lazyField.js +1 -1
  18. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  19. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  20. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +3 -3
  21. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  22. package/dist/feature-libraries/object-forest/objectForest.js +1 -1
  23. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  24. package/dist/feature-libraries/treeCursorUtils.js +2 -2
  25. package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
  26. package/dist/index.d.ts +2 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -2
  29. package/dist/index.js.map +1 -1
  30. package/dist/internalTypes.d.ts +1 -1
  31. package/dist/internalTypes.d.ts.map +1 -1
  32. package/dist/internalTypes.js.map +1 -1
  33. package/dist/legacy.d.ts +6 -0
  34. package/dist/packageVersion.d.ts +1 -1
  35. package/dist/packageVersion.js +1 -1
  36. package/dist/packageVersion.js.map +1 -1
  37. package/dist/public.d.ts +6 -0
  38. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  39. package/dist/shared-tree/schematizingTreeView.js +1 -1
  40. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  41. package/dist/shared-tree/sharedTree.d.ts +1 -1
  42. package/dist/shared-tree/sharedTree.d.ts.map +1 -1
  43. package/dist/shared-tree/sharedTree.js +1 -1
  44. package/dist/shared-tree/sharedTree.js.map +1 -1
  45. package/dist/shared-tree/treeApi.d.ts +6 -6
  46. package/dist/shared-tree/treeApi.d.ts.map +1 -1
  47. package/dist/shared-tree/treeApi.js.map +1 -1
  48. package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
  49. package/dist/shared-tree/treeCheckout.js +2 -0
  50. package/dist/shared-tree/treeCheckout.js.map +1 -1
  51. package/dist/shared-tree-core/branch.js +1 -1
  52. package/dist/shared-tree-core/branch.js.map +1 -1
  53. package/dist/shared-tree-core/editManager.d.ts.map +1 -1
  54. package/dist/shared-tree-core/editManager.js +12 -7
  55. package/dist/shared-tree-core/editManager.js.map +1 -1
  56. package/dist/simple-tree/api/create.d.ts +3 -3
  57. package/dist/simple-tree/api/create.d.ts.map +1 -1
  58. package/dist/simple-tree/api/create.js.map +1 -1
  59. package/dist/simple-tree/api/customTree.js +7 -7
  60. package/dist/simple-tree/api/customTree.js.map +1 -1
  61. package/dist/simple-tree/api/index.d.ts +3 -3
  62. package/dist/simple-tree/api/index.d.ts.map +1 -1
  63. package/dist/simple-tree/api/index.js +1 -2
  64. package/dist/simple-tree/api/index.js.map +1 -1
  65. package/dist/simple-tree/api/schemaCreationUtilities.d.ts +33 -25
  66. package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  67. package/dist/simple-tree/api/schemaCreationUtilities.js +31 -21
  68. package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  69. package/dist/simple-tree/api/schemaFactory.d.ts +5 -1
  70. package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
  71. package/dist/simple-tree/api/schemaFactory.js +4 -0
  72. package/dist/simple-tree/api/schemaFactory.js.map +1 -1
  73. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
  74. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  75. package/dist/simple-tree/api/tree.d.ts +13 -4
  76. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  77. package/dist/simple-tree/api/tree.js.map +1 -1
  78. package/dist/simple-tree/api/treeApiBeta.d.ts +14 -2
  79. package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -1
  80. package/dist/simple-tree/api/treeApiBeta.js +23 -8
  81. package/dist/simple-tree/api/treeApiBeta.js.map +1 -1
  82. package/dist/simple-tree/api/typesUnsafe.d.ts +69 -17
  83. package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  84. package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
  85. package/dist/simple-tree/arrayNode.d.ts +14 -3
  86. package/dist/simple-tree/arrayNode.d.ts.map +1 -1
  87. package/dist/simple-tree/arrayNode.js.map +1 -1
  88. package/dist/simple-tree/core/schemaCaching.js +1 -1
  89. package/dist/simple-tree/core/schemaCaching.js.map +1 -1
  90. package/dist/simple-tree/core/treeNodeKernel.d.ts +6 -1
  91. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  92. package/dist/simple-tree/core/treeNodeKernel.js +7 -1
  93. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  94. package/dist/simple-tree/core/treeNodeSchema.d.ts +10 -6
  95. package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  96. package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
  97. package/dist/simple-tree/core/unhydratedFlexTree.js +1 -1
  98. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  99. package/dist/simple-tree/core/withType.d.ts +3 -1
  100. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  101. package/dist/simple-tree/core/withType.js.map +1 -1
  102. package/dist/simple-tree/index.d.ts +4 -4
  103. package/dist/simple-tree/index.d.ts.map +1 -1
  104. package/dist/simple-tree/index.js +1 -2
  105. package/dist/simple-tree/index.js.map +1 -1
  106. package/dist/simple-tree/mapNode.d.ts.map +1 -1
  107. package/dist/simple-tree/mapNode.js +3 -0
  108. package/dist/simple-tree/mapNode.js.map +1 -1
  109. package/dist/simple-tree/objectNode.d.ts +4 -2
  110. package/dist/simple-tree/objectNode.d.ts.map +1 -1
  111. package/dist/simple-tree/objectNode.js.map +1 -1
  112. package/dist/simple-tree/schemaTypes.d.ts +168 -14
  113. package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
  114. package/dist/simple-tree/schemaTypes.js +6 -1
  115. package/dist/simple-tree/schemaTypes.js.map +1 -1
  116. package/dist/simple-tree/toFlexSchema.js +2 -2
  117. package/dist/simple-tree/toFlexSchema.js.map +1 -1
  118. package/dist/simple-tree/toMapTree.d.ts +4 -2
  119. package/dist/simple-tree/toMapTree.d.ts.map +1 -1
  120. package/dist/simple-tree/toMapTree.js.map +1 -1
  121. package/dist/util/index.d.ts +2 -1
  122. package/dist/util/index.d.ts.map +1 -1
  123. package/dist/util/index.js +3 -1
  124. package/dist/util/index.js.map +1 -1
  125. package/dist/util/typeUtils.d.ts +61 -0
  126. package/dist/util/typeUtils.d.ts.map +1 -1
  127. package/dist/util/typeUtils.js +27 -0
  128. package/dist/util/typeUtils.js.map +1 -1
  129. package/lib/alpha.d.ts +17 -2
  130. package/lib/beta.d.ts +6 -0
  131. package/lib/events/interop.d.ts +1 -7
  132. package/lib/events/interop.d.ts.map +1 -1
  133. package/lib/events/interop.js.map +1 -1
  134. package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
  135. package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
  136. package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
  137. package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
  138. package/lib/feature-libraries/flex-tree/lazyField.js +1 -1
  139. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  140. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  141. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +3 -3
  142. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  143. package/lib/feature-libraries/object-forest/objectForest.js +1 -1
  144. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  145. package/lib/feature-libraries/treeCursorUtils.js +2 -2
  146. package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
  147. package/lib/index.d.ts +2 -2
  148. package/lib/index.d.ts.map +1 -1
  149. package/lib/index.js +1 -1
  150. package/lib/index.js.map +1 -1
  151. package/lib/internalTypes.d.ts +1 -1
  152. package/lib/internalTypes.d.ts.map +1 -1
  153. package/lib/internalTypes.js.map +1 -1
  154. package/lib/legacy.d.ts +6 -0
  155. package/lib/packageVersion.d.ts +1 -1
  156. package/lib/packageVersion.js +1 -1
  157. package/lib/packageVersion.js.map +1 -1
  158. package/lib/public.d.ts +6 -0
  159. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  160. package/lib/shared-tree/schematizingTreeView.js +1 -1
  161. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  162. package/lib/shared-tree/sharedTree.d.ts +1 -1
  163. package/lib/shared-tree/sharedTree.d.ts.map +1 -1
  164. package/lib/shared-tree/sharedTree.js +1 -1
  165. package/lib/shared-tree/sharedTree.js.map +1 -1
  166. package/lib/shared-tree/treeApi.d.ts +6 -6
  167. package/lib/shared-tree/treeApi.d.ts.map +1 -1
  168. package/lib/shared-tree/treeApi.js.map +1 -1
  169. package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
  170. package/lib/shared-tree/treeCheckout.js +2 -0
  171. package/lib/shared-tree/treeCheckout.js.map +1 -1
  172. package/lib/shared-tree-core/branch.js +1 -1
  173. package/lib/shared-tree-core/branch.js.map +1 -1
  174. package/lib/shared-tree-core/editManager.d.ts.map +1 -1
  175. package/lib/shared-tree-core/editManager.js +12 -7
  176. package/lib/shared-tree-core/editManager.js.map +1 -1
  177. package/lib/simple-tree/api/create.d.ts +3 -3
  178. package/lib/simple-tree/api/create.d.ts.map +1 -1
  179. package/lib/simple-tree/api/create.js.map +1 -1
  180. package/lib/simple-tree/api/customTree.js +7 -7
  181. package/lib/simple-tree/api/customTree.js.map +1 -1
  182. package/lib/simple-tree/api/index.d.ts +3 -3
  183. package/lib/simple-tree/api/index.d.ts.map +1 -1
  184. package/lib/simple-tree/api/index.js +1 -1
  185. package/lib/simple-tree/api/index.js.map +1 -1
  186. package/lib/simple-tree/api/schemaCreationUtilities.d.ts +33 -25
  187. package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
  188. package/lib/simple-tree/api/schemaCreationUtilities.js +30 -19
  189. package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
  190. package/lib/simple-tree/api/schemaFactory.d.ts +5 -1
  191. package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
  192. package/lib/simple-tree/api/schemaFactory.js +4 -0
  193. package/lib/simple-tree/api/schemaFactory.js.map +1 -1
  194. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
  195. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  196. package/lib/simple-tree/api/tree.d.ts +13 -4
  197. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  198. package/lib/simple-tree/api/tree.js.map +1 -1
  199. package/lib/simple-tree/api/treeApiBeta.d.ts +14 -2
  200. package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -1
  201. package/lib/simple-tree/api/treeApiBeta.js +23 -8
  202. package/lib/simple-tree/api/treeApiBeta.js.map +1 -1
  203. package/lib/simple-tree/api/typesUnsafe.d.ts +69 -17
  204. package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
  205. package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
  206. package/lib/simple-tree/arrayNode.d.ts +14 -3
  207. package/lib/simple-tree/arrayNode.d.ts.map +1 -1
  208. package/lib/simple-tree/arrayNode.js.map +1 -1
  209. package/lib/simple-tree/core/schemaCaching.js +1 -1
  210. package/lib/simple-tree/core/schemaCaching.js.map +1 -1
  211. package/lib/simple-tree/core/treeNodeKernel.d.ts +6 -1
  212. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  213. package/lib/simple-tree/core/treeNodeKernel.js +7 -1
  214. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  215. package/lib/simple-tree/core/treeNodeSchema.d.ts +10 -6
  216. package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
  217. package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
  218. package/lib/simple-tree/core/unhydratedFlexTree.js +1 -1
  219. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  220. package/lib/simple-tree/core/withType.d.ts +3 -1
  221. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  222. package/lib/simple-tree/core/withType.js.map +1 -1
  223. package/lib/simple-tree/index.d.ts +4 -4
  224. package/lib/simple-tree/index.d.ts.map +1 -1
  225. package/lib/simple-tree/index.js +2 -2
  226. package/lib/simple-tree/index.js.map +1 -1
  227. package/lib/simple-tree/mapNode.d.ts.map +1 -1
  228. package/lib/simple-tree/mapNode.js +3 -0
  229. package/lib/simple-tree/mapNode.js.map +1 -1
  230. package/lib/simple-tree/objectNode.d.ts +4 -2
  231. package/lib/simple-tree/objectNode.d.ts.map +1 -1
  232. package/lib/simple-tree/objectNode.js.map +1 -1
  233. package/lib/simple-tree/schemaTypes.d.ts +168 -14
  234. package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
  235. package/lib/simple-tree/schemaTypes.js +6 -1
  236. package/lib/simple-tree/schemaTypes.js.map +1 -1
  237. package/lib/simple-tree/toFlexSchema.js +2 -2
  238. package/lib/simple-tree/toFlexSchema.js.map +1 -1
  239. package/lib/simple-tree/toMapTree.d.ts +4 -2
  240. package/lib/simple-tree/toMapTree.d.ts.map +1 -1
  241. package/lib/simple-tree/toMapTree.js.map +1 -1
  242. package/lib/util/index.d.ts +2 -1
  243. package/lib/util/index.d.ts.map +1 -1
  244. package/lib/util/index.js +1 -0
  245. package/lib/util/index.js.map +1 -1
  246. package/lib/util/typeUtils.d.ts +61 -0
  247. package/lib/util/typeUtils.d.ts.map +1 -1
  248. package/lib/util/typeUtils.js +25 -1
  249. package/lib/util/typeUtils.js.map +1 -1
  250. package/package.json +48 -32
  251. package/src/events/interop.ts +1 -12
  252. package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -1
  253. package/src/feature-libraries/chunked-forest/uniformChunk.ts +1 -1
  254. package/src/feature-libraries/flex-tree/lazyField.ts +1 -1
  255. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +9 -3
  256. package/src/feature-libraries/object-forest/objectForest.ts +1 -1
  257. package/src/feature-libraries/treeCursorUtils.ts +2 -2
  258. package/src/index.ts +16 -1
  259. package/src/internalTypes.ts +4 -0
  260. package/src/packageVersion.ts +1 -1
  261. package/src/shared-tree/schematizingTreeView.ts +7 -3
  262. package/src/shared-tree/sharedTree.ts +5 -3
  263. package/src/shared-tree/treeApi.ts +19 -9
  264. package/src/shared-tree/treeCheckout.ts +2 -0
  265. package/src/shared-tree-core/branch.ts +1 -1
  266. package/src/shared-tree-core/editManager.ts +16 -7
  267. package/src/simple-tree/api/create.ts +12 -7
  268. package/src/simple-tree/api/customTree.ts +7 -7
  269. package/src/simple-tree/api/index.ts +6 -1
  270. package/src/simple-tree/api/schemaCreationUtilities.ts +58 -35
  271. package/src/simple-tree/api/schemaFactory.ts +4 -0
  272. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +3 -3
  273. package/src/simple-tree/api/tree.ts +27 -4
  274. package/src/simple-tree/api/treeApiBeta.ts +69 -3
  275. package/src/simple-tree/api/typesUnsafe.ts +126 -30
  276. package/src/simple-tree/arrayNode.ts +34 -14
  277. package/src/simple-tree/core/schemaCaching.ts +1 -1
  278. package/src/simple-tree/core/treeNodeKernel.ts +10 -2
  279. package/src/simple-tree/core/treeNodeSchema.ts +11 -6
  280. package/src/simple-tree/core/unhydratedFlexTree.ts +1 -1
  281. package/src/simple-tree/core/withType.ts +10 -1
  282. package/src/simple-tree/index.ts +19 -2
  283. package/src/simple-tree/mapNode.ts +6 -3
  284. package/src/simple-tree/objectNode.ts +5 -3
  285. package/src/simple-tree/schemaTypes.ts +215 -23
  286. package/src/simple-tree/toFlexSchema.ts +2 -2
  287. package/src/simple-tree/toMapTree.ts +4 -1
  288. package/src/util/index.ts +6 -0
  289. package/src/util/typeUtils.ts +87 -0
@@ -18,6 +18,7 @@ import {
18
18
  normalizeAllowedTypes,
19
19
  type ImplicitAllowedTypes,
20
20
  type InsertableTreeNodeFromImplicitAllowedTypes,
21
+ type TreeLeafValue,
21
22
  type TreeNodeFromImplicitAllowedTypes,
22
23
  } from "./schemaTypes.js";
23
24
  import {
@@ -34,6 +35,7 @@ import {
34
35
  type TreeNodeSchemaBoth,
35
36
  getSimpleNodeSchemaFromInnerNode,
36
37
  getOrCreateInnerNode,
38
+ type TreeNodeSchemaClass,
37
39
  } from "./core/index.js";
38
40
  import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
39
41
  import { fail } from "../util/index.js";
@@ -45,6 +47,19 @@ import {
45
47
  import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
46
48
  import { getUnhydratedContext } from "./createContext.js";
47
49
 
50
+ /**
51
+ * A covariant base type for {@link (TreeArrayNode:interface)}.
52
+ *
53
+ * This provides the readonly subset of TreeArrayNode functionality, and is used as the source interface for moves since that needs to be covariant.
54
+ * @privateRemarks
55
+ * Ideally this would just include `TreeNode, WithType<string, NodeKind.Array>` in the extends list but https://github.com/microsoft/TypeScript/issues/16936 prevents that from compiling.
56
+ * As a workaround around for this TypeScript limitation, the conflicting type intersection is wrapped in `Awaited` (which has no effect on the type in this case) which allows it to compile.
57
+ * @system @sealed @public
58
+ */
59
+ export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
60
+ extends ReadonlyArray<T>,
61
+ Awaited<TreeNode & WithType<string, NodeKind.Array>> {}
62
+
48
63
  /**
49
64
  * A generic array type, used to defined types like {@link (TreeArrayNode:interface)}.
50
65
  *
@@ -53,9 +68,8 @@ import { getUnhydratedContext } from "./createContext.js";
53
68
  *
54
69
  * @system @sealed @public
55
70
  */
56
- export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom>
57
- extends ReadonlyArray<T>,
58
- TreeNode {
71
+ export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom = ReadonlyArrayNode>
72
+ extends ReadonlyArrayNode<T> {
59
73
  /**
60
74
  * Inserts new item(s) at a specified location.
61
75
  * @param index - The index at which to insert `value`.
@@ -366,8 +380,7 @@ export interface TreeArrayNode<
366
380
  TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes,
367
381
  > extends TreeArrayNodeBase<
368
382
  TreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
369
- InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
370
- TreeArrayNode
383
+ InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>
371
384
  > {}
372
385
 
373
386
  /**
@@ -417,9 +430,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
417
430
  /**
418
431
  * Given a array node proxy, returns its underlying LazySequence field.
419
432
  */
420
- function getSequenceField<TSimpleType extends ImplicitAllowedTypes>(
421
- arrayNode: TreeArrayNode<TSimpleType>,
422
- ): FlexTreeSequenceField {
433
+ function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
423
434
  return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
424
435
  }
425
436
 
@@ -799,6 +810,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
799
810
  protected abstract get simpleSchema(): T;
800
811
  protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
801
812
 
813
+ public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
814
+ string,
815
+ NodeKind.Array
816
+ >;
817
+
802
818
  public constructor(
803
819
  input: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
804
820
  ) {
@@ -901,13 +917,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
901
917
  }
902
918
  field.editor.remove(removeStart, removeEnd - removeStart);
903
919
  }
904
- public moveToStart(sourceIndex: number, source?: TreeArrayNode): void {
920
+ public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
905
921
  const sourceArray = source ?? this;
906
922
  const sourceField = getSequenceField(sourceArray);
907
923
  validateIndex(sourceIndex, sourceField, "moveToStart");
908
924
  this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
909
925
  }
910
- public moveToEnd(sourceIndex: number, source?: TreeArrayNode): void {
926
+ public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
911
927
  const sourceArray = source ?? this;
912
928
  const sourceField = getSequenceField(sourceArray);
913
929
  validateIndex(sourceIndex, sourceField, "moveToEnd");
@@ -916,7 +932,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
916
932
  public moveToIndex(
917
933
  destinationGap: number,
918
934
  sourceIndex: number,
919
- source?: TreeArrayNode,
935
+ source?: ReadonlyArrayNode,
920
936
  ): void {
921
937
  const sourceArray = source ?? this;
922
938
  const sourceField = getSequenceField(sourceArray);
@@ -928,7 +944,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
928
944
  public moveRangeToStart(
929
945
  sourceStart: number,
930
946
  sourceEnd: number,
931
- source?: TreeArrayNode,
947
+ source?: ReadonlyArrayNode,
932
948
  ): void {
933
949
  validateIndexRange(
934
950
  sourceStart,
@@ -938,7 +954,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
938
954
  );
939
955
  this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
940
956
  }
941
- public moveRangeToEnd(sourceStart: number, sourceEnd: number, source?: TreeArrayNode): void {
957
+ public moveRangeToEnd(
958
+ sourceStart: number,
959
+ sourceEnd: number,
960
+ source?: ReadonlyArrayNode,
961
+ ): void {
942
962
  validateIndexRange(
943
963
  sourceStart,
944
964
  sourceEnd,
@@ -951,7 +971,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
951
971
  destinationGap: number,
952
972
  sourceStart: number,
953
973
  sourceEnd: number,
954
- source?: TreeArrayNode,
974
+ source?: ReadonlyArrayNode,
955
975
  ): void {
956
976
  const destinationField = getSequenceField(this);
957
977
  const destinationSchema = this.allowedTypes;
@@ -29,7 +29,7 @@ export function getSimpleContextFromInnerNode(innerNode: InnerNode): Context {
29
29
  }
30
30
 
31
31
  const context = innerNode.anchorNode.anchorSet.slots.get(SimpleContextSlot);
32
- assert(context !== undefined, "missing simple tree context");
32
+ assert(context !== undefined, 0xa55 /* missing simple tree context */);
33
33
 
34
34
  return context;
35
35
  }
@@ -29,7 +29,7 @@ import { fail } from "../../util/index.js";
29
29
  // TODO: decide how to deal with dependencies on flex-tree implementation.
30
30
  // eslint-disable-next-line import/no-internal-modules
31
31
  import { makeTree } from "../../feature-libraries/flex-tree/lazyNode.js";
32
- import { SimpleContextSlot, type Context } from "./context.js";
32
+ import { SimpleContextSlot, type Context, type HydratedContext } from "./context.js";
33
33
  import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
34
34
 
35
35
  const treeNodeToKernel = new WeakMap<TreeNode, TreeNodeKernel>();
@@ -267,6 +267,14 @@ export class TreeNodeKernel implements Listenable<KernelEvents> {
267
267
  // TODO: go to the context and remove myself from withAnchors
268
268
  }
269
269
 
270
+ public isHydrated(): this is { anchorNode: AnchorNode; context: HydratedContext } {
271
+ return isHydrated(this.#hydrationState);
272
+ }
273
+
274
+ public get anchorNode(): AnchorNode | undefined {
275
+ return isHydrated(this.#hydrationState) ? this.#hydrationState.anchorNode : undefined;
276
+ }
277
+
270
278
  /**
271
279
  * Retrieves the flex node associated with the given target via {@link setInnerNode}.
272
280
  * @remarks
@@ -421,7 +429,7 @@ export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
421
429
  export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): TreeNodeSchema {
422
430
  assert(
423
431
  flexNode.context.isHydrated(),
424
- "getTreeNodeSchemaFromHydratedFlexNode only allows hydrated flex tree nodes",
432
+ 0xa56 /* getTreeNodeSchemaFromHydratedFlexNode only allows hydrated flex tree nodes */,
425
433
  );
426
434
 
427
435
  const context =
@@ -3,10 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
- import type { InternalTreeNode, Unhydrated } from "./types.js";
6
+ import type { TreeLeafValue } from "../schemaTypes.js";
7
+ import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
7
8
 
8
9
  /**
9
- * Schema for a tree node.
10
+ * Schema for a {@link TreeNode} or {@link TreeLeafValue}.
11
+ *
10
12
  * @typeParam Name - The full (including scope) name/identifier for the schema.
11
13
  * @typeParam Kind - Which kind of node this schema is for.
12
14
  * @typeParam TNode - API for nodes that use this schema.
@@ -14,12 +16,14 @@ import type { InternalTreeNode, Unhydrated } from "./types.js";
14
16
  * @typeParam Info - Data used when defining this schema.
15
17
  * @remarks
16
18
  * Captures the schema both as runtime data and compile time type information.
19
+ * Use {@link SchemaFactory} to define schema.
20
+ * Use `Tree.schema(value)` to lookup the schema for a {@link TreeNode} or {@link TreeLeafValue}.
17
21
  * @sealed @public
18
22
  */
19
23
  export type TreeNodeSchema<
20
24
  Name extends string = string,
21
25
  Kind extends NodeKind = NodeKind,
22
- TNode = unknown,
26
+ TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
23
27
  TBuild = never,
24
28
  ImplicitlyConstructable extends boolean = boolean,
25
29
  Info = unknown,
@@ -38,7 +42,7 @@ export type TreeNodeSchema<
38
42
  export interface TreeNodeSchemaNonClass<
39
43
  out Name extends string = string,
40
44
  out Kind extends NodeKind = NodeKind,
41
- out TNode = unknown,
45
+ out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
42
46
  in TInsertable = never,
43
47
  out ImplicitlyConstructable extends boolean = boolean,
44
48
  out Info = unknown,
@@ -94,7 +98,8 @@ export interface TreeNodeSchemaNonClass<
94
98
  export interface TreeNodeSchemaClass<
95
99
  out Name extends string = string,
96
100
  out Kind extends NodeKind = NodeKind,
97
- out TNode = unknown,
101
+ // TODO: maybe this can be more specific (exclude leaves)
102
+ out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
98
103
  in TInsertable = never,
99
104
  out ImplicitlyConstructable extends boolean = boolean,
100
105
  out Info = unknown,
@@ -115,7 +120,7 @@ export interface TreeNodeSchemaClass<
115
120
  export type TreeNodeSchemaBoth<
116
121
  Name extends string = string,
117
122
  Kind extends NodeKind = NodeKind,
118
- TNode = unknown,
123
+ TNode extends TreeNode = TreeNode,
119
124
  TInsertable = never,
120
125
  ImplicitlyConstructable extends boolean = boolean,
121
126
  Info = unknown,
@@ -445,7 +445,7 @@ class EagerMapTreeRequiredField
445
445
  // This cannot use ?? since null is a legal value here.
446
446
  assert(
447
447
  super.content !== undefined,
448
- "Expected EagerMapTree required field to have a value",
448
+ 0xa57 /* Expected EagerMapTree required field to have a value */,
449
449
  );
450
450
  return super.content;
451
451
  }
@@ -3,7 +3,9 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
 
6
+ import type { TreeLeafValue } from "../schemaTypes.js";
6
7
  import type { NodeKind, TreeNodeSchemaClass } from "./treeNodeSchema.js";
8
+ import type { TreeNode } from "./types.js";
7
9
 
8
10
  /**
9
11
  * The type of a {@link TreeNode}.
@@ -87,5 +89,12 @@ export interface WithType<
87
89
  /**
88
90
  * Type symbol, marking a type in a way to increase type safety via strong type checking.
89
91
  */
90
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
92
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<
93
+ TName,
94
+ TKind,
95
+ TreeNode | TreeLeafValue,
96
+ never,
97
+ boolean,
98
+ TInfo
99
+ >;
91
100
  }
@@ -40,7 +40,6 @@ export {
40
40
  adaptEnum,
41
41
  enumFromStrings,
42
42
  singletonSchema,
43
- typedObjectValues,
44
43
  test_RecursiveObject,
45
44
  test_RecursiveObject_base,
46
45
  test_RecursiveObjectPojoMode,
@@ -92,6 +91,12 @@ export {
92
91
  type NodeBuilderDataUnsafe,
93
92
  type NodeFromSchemaUnsafe,
94
93
  type ReadonlyMapInlined,
94
+ type TreeNodeSchemaClassUnsafe,
95
+ type TreeNodeSchemaUnsafe,
96
+ type AllowedTypesUnsafe,
97
+ type TreeNodeSchemaNonClassUnsafe,
98
+ type InsertableTreeNodeFromAllowedTypesUnsafe,
99
+ type TreeViewAlpha,
95
100
  } from "./api/index.js";
96
101
  export {
97
102
  type NodeFromSchema,
@@ -113,6 +118,12 @@ export {
113
118
  normalizeFieldSchema,
114
119
  type ApplyKind,
115
120
  type FieldSchemaMetadata,
121
+ type InsertableField,
122
+ type Insertable,
123
+ type UnsafeUnknownSchema,
124
+ type ApplyKindInput,
125
+ type InsertableTreeNodeFromAllowedTypes,
126
+ type Input,
116
127
  } from "./schemaTypes.js";
117
128
  export {
118
129
  getTreeNodeForField,
@@ -122,6 +133,7 @@ export {
122
133
  TreeArrayNode,
123
134
  IterableTreeArrayContent,
124
135
  type TreeArrayNodeBase,
136
+ type ReadonlyArrayNode,
125
137
  } from "./arrayNode.js";
126
138
  export {
127
139
  type FieldHasDefault,
@@ -131,7 +143,12 @@ export {
131
143
  setField,
132
144
  } from "./objectNode.js";
133
145
  export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
134
- export { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
146
+ export {
147
+ mapTreeFromNodeData,
148
+ type InsertableContent,
149
+ type FactoryContent,
150
+ type FactoryContentObject,
151
+ } from "./toMapTree.js";
135
152
  export { toStoredSchema, getStoredSchema } from "./toFlexSchema.js";
136
153
  export {
137
154
  numberSchema,
@@ -128,7 +128,10 @@ export interface TreeMapNode<T extends ImplicitAllowedTypes = ImplicitAllowedTyp
128
128
  ): void;
129
129
  }
130
130
 
131
- const handler: ProxyHandler<TreeMapNode> = {
131
+ // TreeMapNode is invariant over schema type, so for this handler to work with all schema, the only possible type for the schema is `any`.
132
+ // This is not ideal, but no alternatives are possible.
133
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
134
+ const handler: ProxyHandler<TreeMapNode<any>> = {
132
135
  getPrototypeOf: () => {
133
136
  return Map.prototype;
134
137
  },
@@ -177,7 +180,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
177
180
  const node = this.innerNode;
178
181
  return node.keys();
179
182
  }
180
- public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>): TreeMapNode {
183
+ public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>): this {
181
184
  const kernel = getKernel(this);
182
185
  const node = this.innerNode;
183
186
  const mapTree = mapTreeFromNodeData(
@@ -244,7 +247,7 @@ export function mapSchema<
244
247
  flexNode: FlexTreeNode,
245
248
  ): TreeNodeValid<T2> {
246
249
  if (useMapPrototype) {
247
- return new Proxy<Schema>(instance as Schema, handler);
250
+ return new Proxy<Schema>(instance as Schema, handler as ProxyHandler<Schema>);
248
251
  }
249
252
  return instance;
250
253
  }
@@ -98,6 +98,8 @@ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSche
98
98
  *
99
99
  * 3. Union of 1 and 2.
100
100
  *
101
+ * @see {@link Input}
102
+ *
101
103
  * @privateRemarks TODO: consider separating these cases into different types.
102
104
  *
103
105
  * @system @public
@@ -107,13 +109,13 @@ export type InsertableObjectFromSchemaRecord<
107
109
  > = FlattenKeys<
108
110
  {
109
111
  readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<
110
- T[Property] & string
112
+ T[Property & string]
111
113
  >;
112
114
  } & {
113
115
  // Field does not have a known default, make it required:
114
- readonly [Property in keyof T as FieldHasDefault<T[Property] & string> extends false
116
+ readonly [Property in keyof T as FieldHasDefault<T[Property & string]> extends false
115
117
  ? Property
116
- : never]: InsertableTreeFieldFromImplicitField<T[Property] & string>;
118
+ : never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
117
119
  }
118
120
  >;
119
121