@fluidframework/tree 2.31.1 → 2.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/CHANGELOG.md +44 -0
  3. package/api-extractor/api-extractor.current.json +5 -1
  4. package/api-report/tree.alpha.api.md +44 -20
  5. package/dist/alpha.d.ts +6 -2
  6. package/dist/feature-libraries/flex-tree/context.d.ts +1 -1
  7. package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
  8. package/dist/feature-libraries/flex-tree/context.js +1 -2
  9. package/dist/feature-libraries/flex-tree/context.js.map +1 -1
  10. package/dist/feature-libraries/flex-tree/index.d.ts +1 -1
  11. package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
  12. package/dist/feature-libraries/flex-tree/index.js +1 -2
  13. package/dist/feature-libraries/flex-tree/index.js.map +1 -1
  14. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +6 -15
  15. package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  16. package/dist/feature-libraries/flex-tree/lazyEntity.js +9 -18
  17. package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  18. package/dist/feature-libraries/flex-tree/lazyField.d.ts +3 -3
  19. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  20. package/dist/feature-libraries/flex-tree/lazyField.js +14 -14
  21. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  22. package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -4
  23. package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  24. package/dist/feature-libraries/flex-tree/lazyNode.js +12 -12
  25. package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  26. package/dist/feature-libraries/index.d.ts +1 -1
  27. package/dist/feature-libraries/index.d.ts.map +1 -1
  28. package/dist/feature-libraries/index.js +1 -2
  29. package/dist/feature-libraries/index.js.map +1 -1
  30. package/dist/index.d.ts +2 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +5 -2
  33. package/dist/index.js.map +1 -1
  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/shared-tree/sharedTree.js +2 -2
  38. package/dist/shared-tree/sharedTree.js.map +1 -1
  39. package/dist/shared-tree/treeApiAlpha.d.ts +6 -6
  40. package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -1
  41. package/dist/shared-tree/treeApiAlpha.js.map +1 -1
  42. package/dist/shared-tree-core/sharedTreeCore.d.ts +0 -6
  43. package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  44. package/dist/shared-tree-core/sharedTreeCore.js +0 -17
  45. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  46. package/dist/simple-tree/api/conciseTree.d.ts +2 -2
  47. package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
  48. package/dist/simple-tree/api/conciseTree.js.map +1 -1
  49. package/dist/simple-tree/api/customTree.d.ts +14 -12
  50. package/dist/simple-tree/api/customTree.d.ts.map +1 -1
  51. package/dist/simple-tree/api/customTree.js.map +1 -1
  52. package/dist/simple-tree/api/getJsonSchema.d.ts +21 -7
  53. package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  54. package/dist/simple-tree/api/getJsonSchema.js +8 -16
  55. package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
  56. package/dist/simple-tree/api/getSimpleSchema.d.ts +3 -10
  57. package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  58. package/dist/simple-tree/api/getSimpleSchema.js +4 -16
  59. package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
  60. package/dist/simple-tree/api/index.d.ts +4 -3
  61. package/dist/simple-tree/api/index.d.ts.map +1 -1
  62. package/dist/simple-tree/api/index.js +2 -1
  63. package/dist/simple-tree/api/index.js.map +1 -1
  64. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +17 -1
  65. package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  66. package/dist/simple-tree/api/schemaFactoryAlpha.js +4 -0
  67. package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  68. package/dist/simple-tree/api/schemaFromSimple.d.ts +5 -2
  69. package/dist/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  70. package/dist/simple-tree/api/schemaFromSimple.js +24 -8
  71. package/dist/simple-tree/api/schemaFromSimple.js.map +1 -1
  72. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts +11 -3
  73. package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  74. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +40 -28
  75. package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  76. package/dist/simple-tree/api/tree.d.ts +32 -5
  77. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  78. package/dist/simple-tree/api/tree.js +17 -1
  79. package/dist/simple-tree/api/tree.js.map +1 -1
  80. package/dist/simple-tree/api/verboseTree.d.ts +4 -28
  81. package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
  82. package/dist/simple-tree/api/verboseTree.js.map +1 -1
  83. package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  84. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +7 -3
  85. package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  86. package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  87. package/dist/simple-tree/core/treeNodeKernel.js +7 -6
  88. package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
  89. package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  90. package/dist/simple-tree/core/unhydratedFlexTree.js +12 -1
  91. package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  92. package/dist/simple-tree/index.d.ts +1 -1
  93. package/dist/simple-tree/index.d.ts.map +1 -1
  94. package/dist/simple-tree/index.js +3 -2
  95. package/dist/simple-tree/index.js.map +1 -1
  96. package/dist/simple-tree/simpleSchema.d.ts +4 -11
  97. package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
  98. package/dist/simple-tree/simpleSchema.js.map +1 -1
  99. package/dist/tableSchema.d.ts +227 -0
  100. package/dist/tableSchema.d.ts.map +1 -0
  101. package/dist/tableSchema.js +234 -0
  102. package/dist/tableSchema.js.map +1 -0
  103. package/dist/treeFactory.d.ts +4 -4
  104. package/dist/treeFactory.d.ts.map +1 -1
  105. package/dist/treeFactory.js.map +1 -1
  106. package/dist/util/breakable.d.ts.map +1 -1
  107. package/dist/util/breakable.js +9 -7
  108. package/dist/util/breakable.js.map +1 -1
  109. package/lib/alpha.d.ts +6 -2
  110. package/lib/feature-libraries/flex-tree/context.d.ts +1 -1
  111. package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
  112. package/lib/feature-libraries/flex-tree/context.js +1 -2
  113. package/lib/feature-libraries/flex-tree/context.js.map +1 -1
  114. package/lib/feature-libraries/flex-tree/index.d.ts +1 -1
  115. package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
  116. package/lib/feature-libraries/flex-tree/index.js +1 -1
  117. package/lib/feature-libraries/flex-tree/index.js.map +1 -1
  118. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +6 -15
  119. package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
  120. package/lib/feature-libraries/flex-tree/lazyEntity.js +8 -17
  121. package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
  122. package/lib/feature-libraries/flex-tree/lazyField.d.ts +3 -3
  123. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  124. package/lib/feature-libraries/flex-tree/lazyField.js +15 -15
  125. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  126. package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -4
  127. package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
  128. package/lib/feature-libraries/flex-tree/lazyNode.js +13 -13
  129. package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
  130. package/lib/feature-libraries/index.d.ts +1 -1
  131. package/lib/feature-libraries/index.d.ts.map +1 -1
  132. package/lib/feature-libraries/index.js +1 -1
  133. package/lib/feature-libraries/index.js.map +1 -1
  134. package/lib/index.d.ts +2 -1
  135. package/lib/index.d.ts.map +1 -1
  136. package/lib/index.js +2 -1
  137. package/lib/index.js.map +1 -1
  138. package/lib/packageVersion.d.ts +1 -1
  139. package/lib/packageVersion.js +1 -1
  140. package/lib/packageVersion.js.map +1 -1
  141. package/lib/shared-tree/sharedTree.js +2 -2
  142. package/lib/shared-tree/sharedTree.js.map +1 -1
  143. package/lib/shared-tree/treeApiAlpha.d.ts +6 -6
  144. package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -1
  145. package/lib/shared-tree/treeApiAlpha.js.map +1 -1
  146. package/lib/shared-tree-core/sharedTreeCore.d.ts +0 -6
  147. package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
  148. package/lib/shared-tree-core/sharedTreeCore.js +0 -17
  149. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  150. package/lib/simple-tree/api/conciseTree.d.ts +2 -2
  151. package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
  152. package/lib/simple-tree/api/conciseTree.js.map +1 -1
  153. package/lib/simple-tree/api/customTree.d.ts +14 -12
  154. package/lib/simple-tree/api/customTree.d.ts.map +1 -1
  155. package/lib/simple-tree/api/customTree.js.map +1 -1
  156. package/lib/simple-tree/api/getJsonSchema.d.ts +21 -7
  157. package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
  158. package/lib/simple-tree/api/getJsonSchema.js +8 -16
  159. package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
  160. package/lib/simple-tree/api/getSimpleSchema.d.ts +3 -10
  161. package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
  162. package/lib/simple-tree/api/getSimpleSchema.js +4 -16
  163. package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
  164. package/lib/simple-tree/api/index.d.ts +4 -3
  165. package/lib/simple-tree/api/index.d.ts.map +1 -1
  166. package/lib/simple-tree/api/index.js +1 -1
  167. package/lib/simple-tree/api/index.js.map +1 -1
  168. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +17 -1
  169. package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
  170. package/lib/simple-tree/api/schemaFactoryAlpha.js +4 -0
  171. package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
  172. package/lib/simple-tree/api/schemaFromSimple.d.ts +5 -2
  173. package/lib/simple-tree/api/schemaFromSimple.d.ts.map +1 -1
  174. package/lib/simple-tree/api/schemaFromSimple.js +24 -8
  175. package/lib/simple-tree/api/schemaFromSimple.js.map +1 -1
  176. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts +11 -3
  177. package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
  178. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +41 -29
  179. package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
  180. package/lib/simple-tree/api/tree.d.ts +32 -5
  181. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  182. package/lib/simple-tree/api/tree.js +16 -1
  183. package/lib/simple-tree/api/tree.js.map +1 -1
  184. package/lib/simple-tree/api/verboseTree.d.ts +4 -28
  185. package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
  186. package/lib/simple-tree/api/verboseTree.js.map +1 -1
  187. package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
  188. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +7 -3
  189. package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
  190. package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
  191. package/lib/simple-tree/core/treeNodeKernel.js +8 -7
  192. package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
  193. package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
  194. package/lib/simple-tree/core/unhydratedFlexTree.js +12 -1
  195. package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
  196. package/lib/simple-tree/index.d.ts +1 -1
  197. package/lib/simple-tree/index.d.ts.map +1 -1
  198. package/lib/simple-tree/index.js +1 -1
  199. package/lib/simple-tree/index.js.map +1 -1
  200. package/lib/simple-tree/simpleSchema.d.ts +4 -11
  201. package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
  202. package/lib/simple-tree/simpleSchema.js.map +1 -1
  203. package/lib/tableSchema.d.ts +227 -0
  204. package/lib/tableSchema.d.ts.map +1 -0
  205. package/lib/tableSchema.js +231 -0
  206. package/lib/tableSchema.js.map +1 -0
  207. package/lib/treeFactory.d.ts +4 -4
  208. package/lib/treeFactory.d.ts.map +1 -1
  209. package/lib/treeFactory.js.map +1 -1
  210. package/lib/util/breakable.d.ts.map +1 -1
  211. package/lib/util/breakable.js +9 -7
  212. package/lib/util/breakable.js.map +1 -1
  213. package/package.json +23 -22
  214. package/src/feature-libraries/flex-tree/context.ts +2 -2
  215. package/src/feature-libraries/flex-tree/index.ts +0 -1
  216. package/src/feature-libraries/flex-tree/lazyEntity.ts +11 -21
  217. package/src/feature-libraries/flex-tree/lazyField.ts +17 -26
  218. package/src/feature-libraries/flex-tree/lazyNode.ts +13 -19
  219. package/src/feature-libraries/index.ts +0 -1
  220. package/src/index.ts +6 -2
  221. package/src/packageVersion.ts +1 -1
  222. package/src/shared-tree/sharedTree.ts +2 -2
  223. package/src/shared-tree/treeApiAlpha.ts +17 -15
  224. package/src/shared-tree-core/sharedTreeCore.ts +0 -23
  225. package/src/simple-tree/api/conciseTree.ts +4 -4
  226. package/src/simple-tree/api/customTree.ts +16 -14
  227. package/src/simple-tree/api/getJsonSchema.ts +25 -16
  228. package/src/simple-tree/api/getSimpleSchema.ts +4 -18
  229. package/src/simple-tree/api/index.ts +4 -2
  230. package/src/simple-tree/api/schemaFactoryAlpha.ts +18 -1
  231. package/src/simple-tree/api/schemaFromSimple.ts +45 -16
  232. package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +53 -34
  233. package/src/simple-tree/api/tree.ts +51 -4
  234. package/src/simple-tree/api/verboseTree.ts +7 -32
  235. package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +8 -3
  236. package/src/simple-tree/core/treeNodeKernel.ts +11 -7
  237. package/src/simple-tree/core/unhydratedFlexTree.ts +17 -4
  238. package/src/simple-tree/index.ts +4 -2
  239. package/src/simple-tree/simpleSchema.ts +4 -12
  240. package/src/tableSchema.ts +609 -0
  241. package/src/treeFactory.ts +4 -3
  242. package/src/util/breakable.ts +9 -6
@@ -41,8 +41,9 @@ import {
41
41
  customFromCursor,
42
42
  replaceHandles,
43
43
  type CustomTreeNode,
44
- type EncodeOptions,
45
44
  type HandleConverter,
45
+ type SchemalessParseOptions,
46
+ type TreeEncodingOptions,
46
47
  } from "./customTree.js";
47
48
  import { getUnhydratedContext } from "../createContext.js";
48
49
 
@@ -110,40 +111,14 @@ export interface VerboseTreeNode<THandle = IFluidHandle> {
110
111
  };
111
112
  }
112
113
 
113
- /**
114
- * Options for how to interpret a `VerboseTree` when schema information is available.
115
- * @alpha
116
- */
117
- export interface ParseOptions {
118
- /**
119
- * If true, interpret the input keys of object nodes as stored keys.
120
- * If false, interpret them as property keys.
121
- * @defaultValue false.
122
- */
123
- readonly useStoredKeys?: boolean;
124
- }
125
-
126
- /**
127
- * Options for how to interpret a `VerboseTree` without relying on schema.
128
- */
129
- export interface SchemalessParseOptions {
130
- /**
131
- * Converts stored keys into whatever key the tree is using in its encoding.
132
- */
133
- keyConverter?: {
134
- parse(type: string, inputKey: string): FieldKey;
135
- encode(type: string, key: FieldKey): string;
136
- };
137
- }
138
-
139
114
  /**
140
115
  * Use info from `schema` to convert `options` to {@link SchemalessParseOptions}.
141
116
  */
142
117
  export function applySchemaToParserOptions(
143
118
  schema: ImplicitFieldSchema,
144
- options: ParseOptions,
119
+ options: TreeEncodingOptions,
145
120
  ): SchemalessParseOptions {
146
- const config: Required<ParseOptions> = {
121
+ const config: Required<TreeEncodingOptions> = {
147
122
  useStoredKeys: false,
148
123
  ...options,
149
124
  };
@@ -305,9 +280,9 @@ function verboseTreeAdapter(options: SchemalessParseOptions): CursorAdapter<Verb
305
280
  export function verboseFromCursor(
306
281
  reader: ITreeCursor,
307
282
  rootSchema: ImplicitAllowedTypes,
308
- options: EncodeOptions,
283
+ options: TreeEncodingOptions,
309
284
  ): VerboseTree {
310
- const config: Required<EncodeOptions> = {
285
+ const config: Required<TreeEncodingOptions> = {
311
286
  useStoredKeys: false,
312
287
  ...options,
313
288
  };
@@ -319,7 +294,7 @@ export function verboseFromCursor(
319
294
 
320
295
  function verboseFromCursorInner(
321
296
  reader: ITreeCursor,
322
- options: Required<EncodeOptions>,
297
+ options: Required<TreeEncodingOptions>,
323
298
  schema: ReadonlyMap<string, TreeNodeSchema>,
324
299
  ): VerboseTree {
325
300
  const fields = customFromCursor(reader, options, schema, verboseFromCursorInner);
@@ -7,6 +7,7 @@ import { assert, unreachableCase } from "@fluidframework/core-utils/internal";
7
7
  import { normalizeFieldSchema, type ImplicitFieldSchema } from "../schemaTypes.js";
8
8
  import type {
9
9
  SimpleArrayNodeSchema,
10
+ SimpleFieldSchema,
10
11
  SimpleLeafNodeSchema,
11
12
  SimpleMapNodeSchema,
12
13
  SimpleNodeSchema,
@@ -59,10 +60,14 @@ export function toSimpleTreeSchema(
59
60
  });
60
61
 
61
62
  return {
62
- kind: normalizedSchema.kind,
63
- allowedTypesIdentifiers: normalizedSchema.allowedTypesIdentifiers,
63
+ root: copySchemaObjects
64
+ ? ({
65
+ allowedTypesIdentifiers: normalizedSchema.allowedTypesIdentifiers,
66
+ kind: normalizedSchema.kind,
67
+ metadata: normalizedSchema.metadata,
68
+ } satisfies SimpleFieldSchema)
69
+ : normalizedSchema,
64
70
  definitions,
65
- metadata: normalizedSchema.metadata,
66
71
  };
67
72
  }
68
73
 
@@ -19,7 +19,6 @@ import {
19
19
  assertFlexTreeEntityNotFreed,
20
20
  ContextSlot,
21
21
  flexTreeSlot,
22
- isFreedSymbol,
23
22
  LazyEntity,
24
23
  TreeStatus,
25
24
  treeStatusFromAnchorCache,
@@ -155,15 +154,20 @@ export class TreeNodeKernel {
155
154
  changedFields,
156
155
  });
157
156
 
158
- let n: UnhydratedFlexTreeNode | undefined = innerNode;
159
- while (n !== undefined) {
160
- const treeNode = unhydratedFlexTreeNodeToTreeNodeInternal.get(n);
157
+ let unhydratedNode: UnhydratedFlexTreeNode | undefined = innerNode;
158
+ while (unhydratedNode !== undefined) {
159
+ const treeNode = unhydratedFlexTreeNodeToTreeNodeInternal.get(unhydratedNode);
161
160
  if (treeNode !== undefined) {
162
161
  const kernel = getKernel(treeNode);
163
162
  kernel.#unhydratedEvents.value.emit("subtreeChangedAfterBatch");
164
163
  }
165
- // This cast is safe because the parent (if it exists) of an unhydrated flex node is always another unhydrated flex node.
166
- n = n.parentField.parent.parent as UnhydratedFlexTreeNode | undefined;
164
+ const parentNode: FlexTreeNode | undefined =
165
+ unhydratedNode.parentField.parent.parent;
166
+ assert(
167
+ parentNode === undefined || parentNode instanceof UnhydratedFlexTreeNode,
168
+ 0xb76 /* Unhydrated node's parent should be an unhydrated node */,
169
+ );
170
+ unhydratedNode = parentNode;
167
171
  }
168
172
  }),
169
173
  };
@@ -243,7 +247,7 @@ export class TreeNodeKernel {
243
247
  const flex = this.#hydrationState.anchorNode.slots.get(flexTreeSlot);
244
248
  if (flex !== undefined) {
245
249
  assert(flex instanceof LazyEntity, 0x9b4 /* Unexpected flex node implementation */);
246
- if (flex[isFreedSymbol]()) {
250
+ if (flex.isFreed()) {
247
251
  return TreeStatus.Deleted;
248
252
  }
249
253
  }
@@ -150,11 +150,24 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
150
150
  public adoptBy(parent: UnhydratedFlexTreeField, index: number): void;
151
151
  public adoptBy(parent: UnhydratedFlexTreeField | undefined, index?: number): void {
152
152
  if (parent !== undefined) {
153
- assert(
154
- this.location === unparentedLocation,
155
- 0x98c /* Node may not be adopted if it already has a parent */,
156
- );
157
153
  assert(index !== undefined, 0xa08 /* Expected index */);
154
+ if (this.location !== unparentedLocation) {
155
+ throw new UsageError("A node may not be inserted if it's already in a tree");
156
+ }
157
+ let unhydratedNode: UnhydratedFlexTreeNode | undefined = parent.parent;
158
+ while (unhydratedNode !== undefined) {
159
+ if (unhydratedNode === this) {
160
+ throw new UsageError(
161
+ "A node may not be inserted into a location that is under itself",
162
+ );
163
+ }
164
+ const parentNode: FlexTreeNode | undefined = unhydratedNode.parentField.parent.parent;
165
+ assert(
166
+ parentNode === undefined || parentNode instanceof UnhydratedFlexTreeNode,
167
+ 0xb77 /* Unhydrated node's parent should be an unhydrated node */,
168
+ );
169
+ unhydratedNode = parentNode;
170
+ }
158
171
  this.location = { parent, index };
159
172
  } else {
160
173
  assert(
@@ -31,6 +31,7 @@ export {
31
31
  type ViewableTree,
32
32
  type TreeViewEvents,
33
33
  TreeViewConfiguration,
34
+ TreeViewConfigurationAlpha,
34
35
  type ITreeViewConfiguration,
35
36
  type SchemaCompatibilityStatus,
36
37
  type ITreeConfigurationOptions,
@@ -70,11 +71,11 @@ export {
70
71
  type JsonTreeSchema,
71
72
  type JsonFieldSchema,
72
73
  type JsonLeafSchemaType,
74
+ type TreeSchemaEncodingOptions,
73
75
  getJsonSchema,
74
76
  getSimpleSchema,
75
77
  type VerboseTreeNode,
76
- type EncodeOptions,
77
- type ParseOptions,
78
+ type TreeEncodingOptions,
78
79
  type VerboseTree,
79
80
  extractPersistedSchema,
80
81
  comparePersistedSchema,
@@ -138,6 +139,7 @@ export {
138
139
  replaceVerboseTreeHandles,
139
140
  type HandleConverter,
140
141
  type FieldSchemaAlphaUnsafe,
142
+ type TreeSchema,
141
143
  } from "./api/index.js";
142
144
  export type {
143
145
  SimpleTreeSchema,
@@ -180,22 +180,14 @@ export interface SimpleFieldSchema {
180
180
  * @alpha
181
181
  * @sealed
182
182
  */
183
- export interface SimpleTreeSchema extends SimpleFieldSchema {
183
+ export interface SimpleTreeSchema {
184
184
  /**
185
- * The kind of tree field representing the root of the tree.
185
+ * The tree field representing the root of the tree.
186
186
  */
187
- readonly kind: FieldKind;
188
-
189
- /**
190
- * The types allowed under the tree root.
191
- *
192
- * @remarks Refers to the types by identifier.
193
- * Can be resolved via {@link SimpleTreeSchema.definitions}.
194
- */
195
- readonly allowedTypesIdentifiers: ReadonlySet<string>;
187
+ readonly root: SimpleFieldSchema;
196
188
 
197
189
  /**
198
- * The complete set of node schema definitions recursively referenced by the tree's {@link SimpleTreeSchema.allowedTypesIdentifiers}.
190
+ * The complete set of node schema definitions recursively referenced by the tree's {@link SimpleTreeSchema.root}.
199
191
  *
200
192
  * @remarks the keys are the schemas' {@link TreeNodeSchemaCore.identifier | identifiers}.
201
193
  */