@fluidframework/tree 2.70.0-361248 → 2.70.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 (222) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/api-report/tree.alpha.api.md +36 -17
  3. package/api-report/tree.beta.api.md +70 -2
  4. package/api-report/tree.legacy.beta.api.md +70 -2
  5. package/dist/alpha.d.ts +15 -11
  6. package/dist/api.d.ts +6 -1
  7. package/dist/api.d.ts.map +1 -1
  8. package/dist/api.js +9 -1
  9. package/dist/api.js.map +1 -1
  10. package/dist/beta.d.ts +13 -0
  11. package/dist/core/forest/forest.d.ts +3 -4
  12. package/dist/core/forest/forest.d.ts.map +1 -1
  13. package/dist/core/forest/forest.js.map +1 -1
  14. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +6 -0
  15. package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  16. package/dist/feature-libraries/chunked-forest/chunkTree.js +11 -2
  17. package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  18. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -1
  19. package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  20. package/dist/feature-libraries/chunked-forest/chunkedForest.js +1 -1
  21. package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  22. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +21 -20
  23. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  24. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +17 -43
  25. package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  26. package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
  27. package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  28. package/dist/feature-libraries/chunked-forest/index.js +2 -1
  29. package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
  30. package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  31. package/dist/feature-libraries/flex-tree/lazyField.js +2 -1
  32. package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
  33. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  34. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  35. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +43 -48
  36. package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  37. package/dist/feature-libraries/index.d.ts +1 -1
  38. package/dist/feature-libraries/index.d.ts.map +1 -1
  39. package/dist/feature-libraries/index.js +2 -1
  40. package/dist/feature-libraries/index.js.map +1 -1
  41. package/dist/feature-libraries/object-forest/objectForest.d.ts +1 -1
  42. package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  43. package/dist/feature-libraries/object-forest/objectForest.js +1 -1
  44. package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
  45. package/dist/index.d.ts +2 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/legacy.d.ts +13 -0
  50. package/dist/packageVersion.d.ts +1 -1
  51. package/dist/packageVersion.d.ts.map +1 -1
  52. package/dist/packageVersion.js +1 -1
  53. package/dist/packageVersion.js.map +1 -1
  54. package/dist/shared-tree/independentView.d.ts.map +1 -1
  55. package/dist/shared-tree/independentView.js +2 -1
  56. package/dist/shared-tree/independentView.js.map +1 -1
  57. package/dist/shared-tree/schematizingTreeView.d.ts +4 -3
  58. package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
  59. package/dist/shared-tree/schematizingTreeView.js +1 -1
  60. package/dist/shared-tree/schematizingTreeView.js.map +1 -1
  61. package/dist/shared-tree/treeAlpha.d.ts +28 -2
  62. package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
  63. package/dist/shared-tree/treeAlpha.js +12 -0
  64. package/dist/shared-tree/treeAlpha.js.map +1 -1
  65. package/dist/shared-tree-core/sharedTreeCore.js +1 -1
  66. package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
  67. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts +47 -0
  68. package/dist/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -0
  69. package/dist/simple-tree/api/incrementalAllowedTypes.js +90 -0
  70. package/dist/simple-tree/api/incrementalAllowedTypes.js.map +1 -0
  71. package/dist/simple-tree/api/index.d.ts +2 -1
  72. package/dist/simple-tree/api/index.d.ts.map +1 -1
  73. package/dist/simple-tree/api/index.js +4 -1
  74. package/dist/simple-tree/api/index.js.map +1 -1
  75. package/dist/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  76. package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  77. package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  78. package/dist/simple-tree/api/tree.d.ts +51 -37
  79. package/dist/simple-tree/api/tree.d.ts.map +1 -1
  80. package/dist/simple-tree/api/tree.js.map +1 -1
  81. package/dist/simple-tree/core/allowedTypes.d.ts +10 -11
  82. package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
  83. package/dist/simple-tree/core/allowedTypes.js +1 -1
  84. package/dist/simple-tree/core/allowedTypes.js.map +1 -1
  85. package/dist/simple-tree/core/index.d.ts +1 -1
  86. package/dist/simple-tree/core/index.d.ts.map +1 -1
  87. package/dist/simple-tree/core/index.js +2 -1
  88. package/dist/simple-tree/core/index.js.map +1 -1
  89. package/dist/simple-tree/core/withType.d.ts +20 -0
  90. package/dist/simple-tree/core/withType.d.ts.map +1 -1
  91. package/dist/simple-tree/core/withType.js +21 -1
  92. package/dist/simple-tree/core/withType.js.map +1 -1
  93. package/dist/simple-tree/index.d.ts +2 -2
  94. package/dist/simple-tree/index.d.ts.map +1 -1
  95. package/dist/simple-tree/index.js +5 -2
  96. package/dist/simple-tree/index.js.map +1 -1
  97. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -0
  98. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  99. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js +12 -0
  100. package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  101. package/lib/alpha.d.ts +15 -11
  102. package/lib/api.d.ts +6 -1
  103. package/lib/api.d.ts.map +1 -1
  104. package/lib/api.js +7 -0
  105. package/lib/api.js.map +1 -1
  106. package/lib/beta.d.ts +13 -0
  107. package/lib/core/forest/forest.d.ts +3 -4
  108. package/lib/core/forest/forest.d.ts.map +1 -1
  109. package/lib/core/forest/forest.js.map +1 -1
  110. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +6 -0
  111. package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
  112. package/lib/feature-libraries/chunked-forest/chunkTree.js +8 -0
  113. package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
  114. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +1 -1
  115. package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
  116. package/lib/feature-libraries/chunked-forest/chunkedForest.js +2 -2
  117. package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
  118. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +21 -20
  119. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
  120. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +17 -43
  121. package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
  122. package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
  123. package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
  124. package/lib/feature-libraries/chunked-forest/index.js +1 -1
  125. package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
  126. package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
  127. package/lib/feature-libraries/flex-tree/lazyField.js +2 -1
  128. package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
  129. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +1 -1
  130. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
  131. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +43 -48
  132. package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
  133. package/lib/feature-libraries/index.d.ts +1 -1
  134. package/lib/feature-libraries/index.d.ts.map +1 -1
  135. package/lib/feature-libraries/index.js +1 -1
  136. package/lib/feature-libraries/index.js.map +1 -1
  137. package/lib/feature-libraries/object-forest/objectForest.d.ts +1 -1
  138. package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
  139. package/lib/feature-libraries/object-forest/objectForest.js +2 -2
  140. package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
  141. package/lib/index.d.ts +2 -2
  142. package/lib/index.d.ts.map +1 -1
  143. package/lib/index.js +2 -2
  144. package/lib/index.js.map +1 -1
  145. package/lib/legacy.d.ts +13 -0
  146. package/lib/packageVersion.d.ts +1 -1
  147. package/lib/packageVersion.d.ts.map +1 -1
  148. package/lib/packageVersion.js +1 -1
  149. package/lib/packageVersion.js.map +1 -1
  150. package/lib/shared-tree/independentView.d.ts.map +1 -1
  151. package/lib/shared-tree/independentView.js +2 -1
  152. package/lib/shared-tree/independentView.js.map +1 -1
  153. package/lib/shared-tree/schematizingTreeView.d.ts +4 -3
  154. package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
  155. package/lib/shared-tree/schematizingTreeView.js +2 -2
  156. package/lib/shared-tree/schematizingTreeView.js.map +1 -1
  157. package/lib/shared-tree/treeAlpha.d.ts +28 -2
  158. package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
  159. package/lib/shared-tree/treeAlpha.js +13 -1
  160. package/lib/shared-tree/treeAlpha.js.map +1 -1
  161. package/lib/shared-tree-core/sharedTreeCore.js +1 -1
  162. package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
  163. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts +47 -0
  164. package/lib/simple-tree/api/incrementalAllowedTypes.d.ts.map +1 -0
  165. package/lib/simple-tree/api/incrementalAllowedTypes.js +86 -0
  166. package/lib/simple-tree/api/incrementalAllowedTypes.js.map +1 -0
  167. package/lib/simple-tree/api/index.d.ts +2 -1
  168. package/lib/simple-tree/api/index.d.ts.map +1 -1
  169. package/lib/simple-tree/api/index.js +1 -0
  170. package/lib/simple-tree/api/index.js.map +1 -1
  171. package/lib/simple-tree/api/schemaFactoryBeta.d.ts +2 -2
  172. package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
  173. package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
  174. package/lib/simple-tree/api/tree.d.ts +51 -37
  175. package/lib/simple-tree/api/tree.d.ts.map +1 -1
  176. package/lib/simple-tree/api/tree.js.map +1 -1
  177. package/lib/simple-tree/core/allowedTypes.d.ts +10 -11
  178. package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
  179. package/lib/simple-tree/core/allowedTypes.js +1 -1
  180. package/lib/simple-tree/core/allowedTypes.js.map +1 -1
  181. package/lib/simple-tree/core/index.d.ts +1 -1
  182. package/lib/simple-tree/core/index.d.ts.map +1 -1
  183. package/lib/simple-tree/core/index.js +1 -1
  184. package/lib/simple-tree/core/index.js.map +1 -1
  185. package/lib/simple-tree/core/withType.d.ts +20 -0
  186. package/lib/simple-tree/core/withType.d.ts.map +1 -1
  187. package/lib/simple-tree/core/withType.js +20 -0
  188. package/lib/simple-tree/core/withType.js.map +1 -1
  189. package/lib/simple-tree/index.d.ts +2 -2
  190. package/lib/simple-tree/index.d.ts.map +1 -1
  191. package/lib/simple-tree/index.js +2 -2
  192. package/lib/simple-tree/index.js.map +1 -1
  193. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +1 -0
  194. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
  195. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +13 -1
  196. package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
  197. package/package.json +21 -21
  198. package/src/api.ts +11 -0
  199. package/src/core/forest/forest.ts +3 -4
  200. package/src/feature-libraries/chunked-forest/chunkTree.ts +9 -0
  201. package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -3
  202. package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +20 -58
  203. package/src/feature-libraries/chunked-forest/index.ts +1 -0
  204. package/src/feature-libraries/flex-tree/lazyField.ts +3 -1
  205. package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +65 -71
  206. package/src/feature-libraries/index.ts +1 -0
  207. package/src/feature-libraries/object-forest/objectForest.ts +3 -3
  208. package/src/index.ts +4 -1
  209. package/src/packageVersion.ts +1 -1
  210. package/src/shared-tree/independentView.ts +4 -1
  211. package/src/shared-tree/schematizingTreeView.ts +10 -5
  212. package/src/shared-tree/treeAlpha.ts +50 -2
  213. package/src/shared-tree-core/sharedTreeCore.ts +1 -1
  214. package/src/simple-tree/api/incrementalAllowedTypes.ts +107 -0
  215. package/src/simple-tree/api/index.ts +6 -0
  216. package/src/simple-tree/api/schemaFactoryBeta.ts +6 -2
  217. package/src/simple-tree/api/tree.ts +64 -44
  218. package/src/simple-tree/core/allowedTypes.ts +10 -11
  219. package/src/simple-tree/core/index.ts +6 -1
  220. package/src/simple-tree/core/withType.ts +24 -0
  221. package/src/simple-tree/index.ts +5 -0
  222. package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +13 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,57 @@
1
1
  # @fluidframework/tree
2
2
 
3
+ ## 2.70.0
4
+
5
+ ### Minor Changes
6
+
7
+ - All non-structurally named beta schema factory APIs now support node schema metadata ([#25685](https://github.com/microsoft/FluidFramework/pull/25685)) [6d8c0ca181](https://github.com/microsoft/FluidFramework/commit/6d8c0ca181c7ed7c600e56197ed4bc75cfbba3db)
8
+
9
+ The "options" parameter which allows providing metadata for `TreeNodeSchema` is now available consistently on `SchemaFactoryBeta`,
10
+ not just `SchemaFactoryAlpha` and a subset of `SchemaFactoryBeta`.
11
+
12
+ - A minimal set of branching APIs has been promoted to beta. ([#25744](https://github.com/microsoft/FluidFramework/pull/25744)) [32cc2c75d8](https://github.com/microsoft/FluidFramework/commit/32cc2c75d82c35403caa91e67e81f71baee5d092)
13
+
14
+ The following APIs have been promoted to beta in `@fluidframework/tree`:
15
+
16
+ - `TreeBranch.fork()`
17
+ - `TreeBranch.merge()`
18
+ - `TreeBranch.rebaseOnto()`
19
+ - `TreeBranch.dispose()`
20
+ - `TreeView.fork()`
21
+
22
+ These APIs enable applications to implement basic local branching flows.
23
+
24
+ - Promote FluidSerializableAsTree APIs from alpha to beta ([#25693](https://github.com/microsoft/FluidFramework/pull/25693)) [43fbc54d05](https://github.com/microsoft/FluidFramework/commit/43fbc54d05351d06c4bc20d1e6f5ca732775f605)
25
+
26
+ `FluidSerializableAsTree` may now be imported from `/beta`.
27
+
28
+ - Update TableSchema APIs (alpha) to accept SchemaFactoryBeta in addition to SchemaFactoryAlpha ([#25613](https://github.com/microsoft/FluidFramework/pull/25613)) [1bdf44ac5a](https://github.com/microsoft/FluidFramework/commit/1bdf44ac5a93bcd1956e15e54c46a16ad2d1c005)
29
+
30
+ Makes the [TableSchema](https://fluidframework.com/docs/api/fluid-framework/tableschema-namespace) APIs more flexible, and prepares them for future promotion to beta themselves.
31
+
32
+ - Added `Tree.ensureSchema` ([#25740](https://github.com/microsoft/FluidFramework/pull/25740)) [8213407b3f](https://github.com/microsoft/FluidFramework/commit/8213407b3fe93f0e35925b1dcd7e799501cb0e92)
33
+
34
+ This helper function allows content to be tagged with a schema type before being inserted into the tree.
35
+ This allows content that would otherwise be ambiguous to be well-defined, without having to wrap it in a node constructor.
36
+
37
+ Example:
38
+
39
+ ```typescript
40
+ const sf = new SchemaFactory("example");
41
+ class Dog extends sf.object("Dog", { name: sf.string() }) {}
42
+ class Cat extends sf.object("Cat", { name: sf.string() }) {}
43
+ class Root extends sf.object("Root", { pet: [Dog, Cat] }) {}
44
+ // ...
45
+ const pet = { name: "Max" };
46
+ view.root.pet = pet; // Error: `pet` is ambiguous - is it a Dog or a Cat?
47
+ view.root.pet = new Dog(pet); // This works, but has the overhead of creating a Dog node before the insertion actually happens.
48
+ TreeAlpha.ensureSchema(Dog, pet); // Instead, this tags the `pet` object as a Dog...
49
+ view.root.pet = pet; // So now there is no error for a normal insertion - it's a Dog.
50
+ ```
51
+
52
+ This function works by leveraging the new `schemaSymbol`, which is also available for use.
53
+ See its documentation for more information.
54
+
3
55
  ## 2.63.0
4
56
 
5
57
  ### Minor Changes
@@ -15,7 +15,7 @@ export function adaptEnum<TScope extends string, const TEnum extends Record<stri
15
15
  }, Record<string, never>, true, Record<string, never>, undefined>; }[keyof TEnum]>;
16
16
  };
17
17
 
18
- // @alpha @input
18
+ // @beta @input
19
19
  export interface AllowedTypeMetadata {
20
20
  readonly custom?: unknown;
21
21
  readonly stagedSchemaUpgrade?: SchemaUpgrade;
@@ -24,13 +24,13 @@ export interface AllowedTypeMetadata {
24
24
  // @public @system
25
25
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
26
26
 
27
- // @alpha @sealed
27
+ // @beta @sealed
28
28
  export type AllowedTypesFull<T extends readonly AnnotatedAllowedType[] = readonly AnnotatedAllowedType[]> = AnnotatedAllowedTypes<T> & UnannotateAllowedTypesList<T>;
29
29
 
30
- // @alpha @sealed
30
+ // @beta @sealed
31
31
  export type AllowedTypesFullEvaluated = AllowedTypesFull<readonly AnnotatedAllowedType<TreeNodeSchema>[]>;
32
32
 
33
- // @alpha @sealed
33
+ // @beta @sealed @system
34
34
  export type AllowedTypesFullFromMixed<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = UnannotateAllowedTypesList<T> & AnnotatedAllowedTypes<AnnotateAllowedTypesList<T>>;
35
35
 
36
36
  // @alpha @sealed @system
@@ -39,7 +39,7 @@ export type AllowedTypesFullFromMixedUnsafe<T extends readonly Unenforced<Annota
39
39
  // @alpha @sealed @system
40
40
  export type AllowedTypesFullUnsafe<T extends readonly AnnotatedAllowedTypeUnsafe[] = readonly AnnotatedAllowedTypeUnsafe[]> = AnnotatedAllowedTypes<T> & UnannotateAllowedTypesListUnsafe<T>;
41
41
 
42
- // @alpha @input
42
+ // @beta @input
43
43
  export interface AllowedTypesMetadata {
44
44
  readonly custom?: unknown;
45
45
  }
@@ -47,7 +47,7 @@ export interface AllowedTypesMetadata {
47
47
  // @alpha
48
48
  export function allowUnused<T>(t?: T): void;
49
49
 
50
- // @alpha @system
50
+ // @beta @system
51
51
  export type AnnotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
52
52
  [I in keyof T]: T[I] extends AnnotatedAllowedType<unknown> ? T[I] : AnnotatedAllowedType<T[I]>;
53
53
  };
@@ -57,13 +57,13 @@ export type AnnotateAllowedTypesListUnsafe<T extends readonly Unenforced<Annotat
57
57
  [I in keyof T]: T[I] extends AnnotatedAllowedTypeUnsafe ? T[I] : AnnotatedAllowedTypeUnsafe<T[I]>;
58
58
  };
59
59
 
60
- // @alpha @sealed
60
+ // @beta @sealed
61
61
  export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
62
62
  readonly metadata: AllowedTypeMetadata;
63
63
  readonly type: T;
64
64
  }
65
65
 
66
- // @alpha @sealed
66
+ // @beta @sealed
67
67
  export interface AnnotatedAllowedTypes<T = readonly AnnotatedAllowedType[]> extends ErasedBaseType<"tree.AnnotatedAllowedTypes"> {
68
68
  evaluate(): AllowedTypesFullEvaluated;
69
69
  evaluateIdentifiers(): ReadonlySet<string>;
@@ -117,6 +117,9 @@ export const ArrayNodeSchema: {
117
117
  // @alpha
118
118
  export function asAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
119
119
 
120
+ // @beta
121
+ export function asBeta<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewBeta<TSchema>;
122
+
120
123
  // @alpha @deprecated
121
124
  export function asTreeViewAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
122
125
 
@@ -163,6 +166,9 @@ export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidH
163
166
  // @beta
164
167
  export function configuredSharedTreeBeta(options: SharedTreeOptionsBeta): SharedObjectKind<ITree>;
165
168
 
169
+ // @alpha
170
+ export const contentSchemaSymbol: unique symbol;
171
+
166
172
  // @alpha
167
173
  export function createIdentifierIndex<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): IdentifierIndex;
168
174
 
@@ -926,9 +932,9 @@ export class SchemaFactoryAlpha<out TScope extends string | undefined = string |
926
932
 
927
933
  // @beta
928
934
  export class SchemaFactoryBeta<out TScope extends string | undefined = string | undefined, TName extends number | string = string> extends SchemaFactory<TScope, TName> {
929
- object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
935
+ object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T, never, TCustomMetadata>;
930
936
  // (undocumented)
931
- objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
937
+ objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T, never, TCustomMetadata>;
932
938
  record<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined>;
933
939
  record<const Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined, TCustomMetadata>;
934
940
  recordRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record, unknown>, {
@@ -965,7 +971,7 @@ export interface SchemaStaticsAlpha {
965
971
  readonly typesRecursive: <const T extends readonly Unenforced<AnnotatedAllowedType | LazyItem<TreeNodeSchema>>[]>(t: T, metadata?: AllowedTypesMetadata) => AllowedTypesFullFromMixedUnsafe<T>;
966
972
  }
967
973
 
968
- // @alpha @sealed
974
+ // @beta @sealed
969
975
  export class SchemaUpgrade {
970
976
  // (undocumented)
971
977
  protected _typeCheck: MakeNominal;
@@ -1344,7 +1350,7 @@ export const Tree: Tree;
1344
1350
 
1345
1351
  // @alpha @sealed @system
1346
1352
  export interface TreeAlpha {
1347
- branch(node: TreeNode): TreeBranch | undefined;
1353
+ branch(node: TreeNode): TreeBranchAlpha | undefined;
1348
1354
  child(node: TreeNode, key: string | number): TreeNode | TreeLeafValue | undefined;
1349
1355
  children(node: TreeNode): Iterable<[propertyKey: string | number, child: TreeNode | TreeLeafValue]>;
1350
1356
  create<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(schema: UnsafeUnknownSchema extends TSchema ? ImplicitFieldSchema : TSchema & ImplicitFieldSchema, data: InsertableField<TSchema>): Unhydrated<TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeNode | TreeLeafValue | undefined>;
@@ -1361,6 +1367,7 @@ export interface TreeAlpha {
1361
1367
  importConcise<const TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema>(schema: UnsafeUnknownSchema extends TSchema ? ImplicitFieldSchema : TSchema & ImplicitFieldSchema, data: ConciseTree | undefined): Unhydrated<TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeNode | TreeLeafValue | undefined>;
1362
1368
  importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: TreeParsingOptions): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1363
1369
  key2(node: TreeNode): string | number | undefined;
1370
+ tagContentSchema<TSchema extends TreeNodeSchema, TContent extends InsertableField<TSchema>>(schema: TSchema, content: TContent): TContent;
1364
1371
  trackObservations<TResult>(onInvalidation: () => void, trackDuring: () => TResult): ObservationResults<TResult>;
1365
1372
  trackObservationsOnce<TResult>(onInvalidation: () => void, trackDuring: () => TResult): ObservationResults<TResult>;
1366
1373
  }
@@ -1408,14 +1415,20 @@ export interface TreeBeta {
1408
1415
  // @beta
1409
1416
  export const TreeBeta: TreeBeta;
1410
1417
 
1411
- // @alpha @sealed
1418
+ // @beta @sealed
1412
1419
  export interface TreeBranch extends IDisposable {
1413
1420
  dispose(error?: Error): void;
1414
- readonly events: Listenable_2<TreeBranchEvents>;
1415
1421
  fork(): TreeBranch;
1416
- hasRootSchema<TSchema extends ImplicitFieldSchema>(schema: TSchema): this is TreeViewAlpha<TSchema>;
1417
1422
  merge(branch: TreeBranch, disposeMerged?: boolean): void;
1418
1423
  rebaseOnto(branch: TreeBranch): void;
1424
+ }
1425
+
1426
+ // @alpha @sealed
1427
+ export interface TreeBranchAlpha extends TreeBranch {
1428
+ readonly events: Listenable_2<TreeBranchEvents>;
1429
+ // (undocumented)
1430
+ fork(): TreeBranchAlpha;
1431
+ hasRootSchema<TSchema extends ImplicitFieldSchema>(schema: TSchema): this is TreeViewAlpha<TSchema>;
1419
1432
  runTransaction<TSuccessValue, TFailureValue>(transaction: () => TransactionCallbackStatus<TSuccessValue, TFailureValue>, params?: RunTransactionParams): TransactionResultExt<TSuccessValue, TFailureValue>;
1420
1433
  runTransaction(transaction: () => VoidTransactionCallbackStatus | void, params?: RunTransactionParams): TransactionResult;
1421
1434
  }
@@ -1595,7 +1608,7 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
1595
1608
  }
1596
1609
 
1597
1610
  // @alpha @sealed
1598
- export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeView<ReadSchema<TSchema>>, "root" | "initialize">, TreeBranch {
1611
+ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeViewBeta<ReadSchema<TSchema>>, "root" | "initialize" | "fork">, TreeBranchAlpha {
1599
1612
  // (undocumented)
1600
1613
  readonly events: Listenable_2<TreeViewEvents & TreeBranchEvents>;
1601
1614
  // (undocumented)
@@ -1607,6 +1620,12 @@ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | Unsa
1607
1620
  set root(newRoot: InsertableField<TSchema>);
1608
1621
  }
1609
1622
 
1623
+ // @beta @sealed
1624
+ export interface TreeViewBeta<in out TSchema extends ImplicitFieldSchema> extends TreeView<TSchema>, TreeBranch {
1625
+ // (undocumented)
1626
+ fork(): ReturnType<TreeBranch["fork"]> & TreeViewBeta<TSchema>;
1627
+ }
1628
+
1610
1629
  // @public @sealed
1611
1630
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
1612
1631
  constructor(props: ITreeViewConfiguration<TSchema>);
@@ -1638,7 +1657,7 @@ const typeNameSymbol: unique symbol;
1638
1657
  // @public @system
1639
1658
  export const typeSchemaSymbol: unique symbol;
1640
1659
 
1641
- // @alpha @system
1660
+ // @beta @system
1642
1661
  export type UnannotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
1643
1662
  [I in keyof T]: T[I] extends AnnotatedAllowedType<infer X> ? X : T[I];
1644
1663
  };
@@ -15,9 +15,49 @@ export function adaptEnum<TScope extends string, const TEnum extends Record<stri
15
15
  }, Record<string, never>, true, Record<string, never>, undefined>; }[keyof TEnum]>;
16
16
  };
17
17
 
18
+ // @beta @input
19
+ export interface AllowedTypeMetadata {
20
+ readonly custom?: unknown;
21
+ readonly stagedSchemaUpgrade?: SchemaUpgrade;
22
+ }
23
+
18
24
  // @public @system
19
25
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
20
26
 
27
+ // @beta @sealed
28
+ export type AllowedTypesFull<T extends readonly AnnotatedAllowedType[] = readonly AnnotatedAllowedType[]> = AnnotatedAllowedTypes<T> & UnannotateAllowedTypesList<T>;
29
+
30
+ // @beta @sealed
31
+ export type AllowedTypesFullEvaluated = AllowedTypesFull<readonly AnnotatedAllowedType<TreeNodeSchema>[]>;
32
+
33
+ // @beta @sealed @system
34
+ export type AllowedTypesFullFromMixed<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = UnannotateAllowedTypesList<T> & AnnotatedAllowedTypes<AnnotateAllowedTypesList<T>>;
35
+
36
+ // @beta @input
37
+ export interface AllowedTypesMetadata {
38
+ readonly custom?: unknown;
39
+ }
40
+
41
+ // @beta @system
42
+ export type AnnotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
43
+ [I in keyof T]: T[I] extends AnnotatedAllowedType<unknown> ? T[I] : AnnotatedAllowedType<T[I]>;
44
+ };
45
+
46
+ // @beta @sealed
47
+ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
48
+ readonly metadata: AllowedTypeMetadata;
49
+ readonly type: T;
50
+ }
51
+
52
+ // @beta @sealed
53
+ export interface AnnotatedAllowedTypes<T = readonly AnnotatedAllowedType[]> extends ErasedBaseType<"tree.AnnotatedAllowedTypes"> {
54
+ evaluate(): AllowedTypesFullEvaluated;
55
+ evaluateIdentifiers(): ReadonlySet<string>;
56
+ evaluateSet(): ReadonlySet<TreeNodeSchema>;
57
+ readonly metadata: AllowedTypesMetadata;
58
+ readonly types: T;
59
+ }
60
+
21
61
  // @public @system
22
62
  type ApplyKind<T, Kind extends FieldKind> = {
23
63
  [FieldKind.Required]: T;
@@ -30,6 +70,9 @@ type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boole
30
70
  Kind
31
71
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
32
72
 
73
+ // @beta
74
+ export function asBeta<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewBeta<TSchema>;
75
+
33
76
  // @public
34
77
  export enum CommitKind {
35
78
  Default = 0,
@@ -443,9 +486,9 @@ export const SchemaFactory_base: SchemaStatics & (new () => SchemaStatics);
443
486
 
444
487
  // @beta
445
488
  export class SchemaFactoryBeta<out TScope extends string | undefined = string | undefined, TName extends number | string = string> extends SchemaFactory<TScope, TName> {
446
- object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
489
+ object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T, never, TCustomMetadata>;
447
490
  // (undocumented)
448
- objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
491
+ objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T, never, TCustomMetadata>;
449
492
  record<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined>;
450
493
  record<const Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined, TCustomMetadata>;
451
494
  recordRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record, unknown>, {
@@ -474,6 +517,12 @@ export interface SchemaStatics {
474
517
  readonly string: LeafSchema<"string", string>;
475
518
  }
476
519
 
520
+ // @beta @sealed
521
+ export class SchemaUpgrade {
522
+ // (undocumented)
523
+ protected _typeCheck: MakeNominal;
524
+ }
525
+
477
526
  // @public @system
478
527
  type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
479
528
 
@@ -626,6 +675,14 @@ export interface TreeBeta {
626
675
  // @beta
627
676
  export const TreeBeta: TreeBeta;
628
677
 
678
+ // @beta @sealed
679
+ export interface TreeBranch extends IDisposable {
680
+ dispose(error?: Error): void;
681
+ fork(): TreeBranch;
682
+ merge(branch: TreeBranch, disposeMerged?: boolean): void;
683
+ rebaseOnto(branch: TreeBranch): void;
684
+ }
685
+
629
686
  // @public @sealed
630
687
  export interface TreeChangeEvents {
631
688
  nodeChanged(unstable?: unknown): void;
@@ -749,6 +806,12 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
749
806
  upgradeSchema(): void;
750
807
  }
751
808
 
809
+ // @beta @sealed
810
+ export interface TreeViewBeta<in out TSchema extends ImplicitFieldSchema> extends TreeView<TSchema>, TreeBranch {
811
+ // (undocumented)
812
+ fork(): ReturnType<TreeBranch["fork"]> & TreeViewBeta<TSchema>;
813
+ }
814
+
752
815
  // @public @sealed
753
816
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
754
817
  constructor(props: ITreeViewConfiguration<TSchema>);
@@ -773,6 +836,11 @@ const typeNameSymbol: unique symbol;
773
836
  // @public @system
774
837
  export const typeSchemaSymbol: unique symbol;
775
838
 
839
+ // @beta @system
840
+ export type UnannotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
841
+ [I in keyof T]: T[I] extends AnnotatedAllowedType<infer X> ? X : T[I];
842
+ };
843
+
776
844
  // @public
777
845
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
778
846
 
@@ -15,9 +15,49 @@ export function adaptEnum<TScope extends string, const TEnum extends Record<stri
15
15
  }, Record<string, never>, true, Record<string, never>, undefined>; }[keyof TEnum]>;
16
16
  };
17
17
 
18
+ // @beta @input
19
+ export interface AllowedTypeMetadata {
20
+ readonly custom?: unknown;
21
+ readonly stagedSchemaUpgrade?: SchemaUpgrade;
22
+ }
23
+
18
24
  // @public @system
19
25
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
20
26
 
27
+ // @beta @sealed
28
+ export type AllowedTypesFull<T extends readonly AnnotatedAllowedType[] = readonly AnnotatedAllowedType[]> = AnnotatedAllowedTypes<T> & UnannotateAllowedTypesList<T>;
29
+
30
+ // @beta @sealed
31
+ export type AllowedTypesFullEvaluated = AllowedTypesFull<readonly AnnotatedAllowedType<TreeNodeSchema>[]>;
32
+
33
+ // @beta @sealed @system
34
+ export type AllowedTypesFullFromMixed<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = UnannotateAllowedTypesList<T> & AnnotatedAllowedTypes<AnnotateAllowedTypesList<T>>;
35
+
36
+ // @beta @input
37
+ export interface AllowedTypesMetadata {
38
+ readonly custom?: unknown;
39
+ }
40
+
41
+ // @beta @system
42
+ export type AnnotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
43
+ [I in keyof T]: T[I] extends AnnotatedAllowedType<unknown> ? T[I] : AnnotatedAllowedType<T[I]>;
44
+ };
45
+
46
+ // @beta @sealed
47
+ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
48
+ readonly metadata: AllowedTypeMetadata;
49
+ readonly type: T;
50
+ }
51
+
52
+ // @beta @sealed
53
+ export interface AnnotatedAllowedTypes<T = readonly AnnotatedAllowedType[]> extends ErasedBaseType<"tree.AnnotatedAllowedTypes"> {
54
+ evaluate(): AllowedTypesFullEvaluated;
55
+ evaluateIdentifiers(): ReadonlySet<string>;
56
+ evaluateSet(): ReadonlySet<TreeNodeSchema>;
57
+ readonly metadata: AllowedTypesMetadata;
58
+ readonly types: T;
59
+ }
60
+
21
61
  // @public @system
22
62
  type ApplyKind<T, Kind extends FieldKind> = {
23
63
  [FieldKind.Required]: T;
@@ -30,6 +70,9 @@ type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boole
30
70
  Kind
31
71
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
32
72
 
73
+ // @beta
74
+ export function asBeta<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewBeta<TSchema>;
75
+
33
76
  // @public
34
77
  export enum CommitKind {
35
78
  Default = 0,
@@ -446,9 +489,9 @@ export const SchemaFactory_base: SchemaStatics & (new () => SchemaStatics);
446
489
 
447
490
  // @beta
448
491
  export class SchemaFactoryBeta<out TScope extends string | undefined = string | undefined, TName extends number | string = string> extends SchemaFactory<TScope, TName> {
449
- object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
492
+ object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T, never, TCustomMetadata>;
450
493
  // (undocumented)
451
- objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T>;
494
+ objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: ObjectSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T, never, TCustomMetadata>;
452
495
  record<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, `Record<${string}>`>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined>;
453
496
  record<const Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record>, RecordNodeInsertableData<T>, true, T, undefined, TCustomMetadata>;
454
497
  recordRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Record, TreeRecordNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Record, unknown>, {
@@ -477,6 +520,12 @@ export interface SchemaStatics {
477
520
  readonly string: LeafSchema<"string", string>;
478
521
  }
479
522
 
523
+ // @beta @sealed
524
+ export class SchemaUpgrade {
525
+ // (undocumented)
526
+ protected _typeCheck: MakeNominal;
527
+ }
528
+
480
529
  // @public @system
481
530
  type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
482
531
 
@@ -638,6 +687,14 @@ export interface TreeBeta {
638
687
  // @beta
639
688
  export const TreeBeta: TreeBeta;
640
689
 
690
+ // @beta @sealed
691
+ export interface TreeBranch extends IDisposable {
692
+ dispose(error?: Error): void;
693
+ fork(): TreeBranch;
694
+ merge(branch: TreeBranch, disposeMerged?: boolean): void;
695
+ rebaseOnto(branch: TreeBranch): void;
696
+ }
697
+
641
698
  // @public @sealed
642
699
  export interface TreeChangeEvents {
643
700
  nodeChanged(unstable?: unknown): void;
@@ -761,6 +818,12 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
761
818
  upgradeSchema(): void;
762
819
  }
763
820
 
821
+ // @beta @sealed
822
+ export interface TreeViewBeta<in out TSchema extends ImplicitFieldSchema> extends TreeView<TSchema>, TreeBranch {
823
+ // (undocumented)
824
+ fork(): ReturnType<TreeBranch["fork"]> & TreeViewBeta<TSchema>;
825
+ }
826
+
764
827
  // @public @sealed
765
828
  export class TreeViewConfiguration<const TSchema extends ImplicitFieldSchema = ImplicitFieldSchema> implements Required<ITreeViewConfiguration<TSchema>> {
766
829
  constructor(props: ITreeViewConfiguration<TSchema>);
@@ -785,6 +848,11 @@ const typeNameSymbol: unique symbol;
785
848
  // @public @system
786
849
  export const typeSchemaSymbol: unique symbol;
787
850
 
851
+ // @beta @system
852
+ export type UnannotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
853
+ [I in keyof T]: T[I] extends AnnotatedAllowedType<infer X> ? X : T[I];
854
+ };
855
+
788
856
  // @public
789
857
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
790
858
 
package/dist/alpha.d.ts CHANGED
@@ -93,6 +93,14 @@ export {
93
93
  // #endregion
94
94
 
95
95
  // #region @beta APIs
96
+ AllowedTypeMetadata,
97
+ AllowedTypesFull,
98
+ AllowedTypesFullEvaluated,
99
+ AllowedTypesFullFromMixed,
100
+ AllowedTypesMetadata,
101
+ AnnotateAllowedTypesList,
102
+ AnnotatedAllowedType,
103
+ AnnotatedAllowedTypes,
96
104
  ConciseTree,
97
105
  FixRecursiveArraySchema,
98
106
  FluidSerializableAsTree,
@@ -109,32 +117,29 @@ export {
109
117
  PopUnion,
110
118
  RecordNodeInsertableData,
111
119
  SchemaFactoryBeta,
120
+ SchemaUpgrade,
112
121
  SharedTreeOptionsBeta,
113
122
  TreeBeta,
123
+ TreeBranch,
114
124
  TreeChangeEventsBeta,
115
125
  TreeEncodingOptions,
116
126
  TreeRecordNode,
117
127
  TreeRecordNodeUnsafe,
128
+ TreeViewBeta,
129
+ UnannotateAllowedTypesList,
118
130
  UnionToTuple,
119
131
  adaptEnum,
132
+ asBeta,
120
133
  configuredSharedTreeBeta,
121
134
  enumFromStrings,
122
135
  singletonSchema,
123
136
  // #endregion
124
137
 
125
138
  // #region @alpha APIs
126
- AllowedTypeMetadata,
127
- AllowedTypesFull,
128
- AllowedTypesFullEvaluated,
129
- AllowedTypesFullFromMixed,
130
139
  AllowedTypesFullFromMixedUnsafe,
131
140
  AllowedTypesFullUnsafe,
132
- AllowedTypesMetadata,
133
- AnnotateAllowedTypesList,
134
141
  AnnotateAllowedTypesListUnsafe,
135
- AnnotatedAllowedType,
136
142
  AnnotatedAllowedTypeUnsafe,
137
- AnnotatedAllowedTypes,
138
143
  AnnotatedAllowedTypesUnsafe,
139
144
  ArrayNodeCustomizableSchema,
140
145
  ArrayNodeCustomizableSchemaUnsafe,
@@ -196,7 +201,6 @@ export {
196
201
  RunTransactionParams,
197
202
  SchemaFactoryAlpha,
198
203
  SchemaStaticsAlpha,
199
- SchemaUpgrade,
200
204
  SharedTreeFormatOptions,
201
205
  SharedTreeFormatVersion,
202
206
  SharedTreeOptions,
@@ -219,7 +223,7 @@ export {
219
223
  TransactionResultFailed,
220
224
  TransactionResultSuccess,
221
225
  TreeAlpha,
222
- TreeBranch,
226
+ TreeBranchAlpha,
223
227
  TreeBranchEvents,
224
228
  TreeBranchFork,
225
229
  TreeCompressionStrategy,
@@ -233,7 +237,6 @@ export {
233
237
  TreeViewAlpha,
234
238
  TreeViewConfigurationAlpha,
235
239
  UnannotateAllowedTypeUnsafe,
236
- UnannotateAllowedTypesList,
237
240
  UnannotateAllowedTypesListUnsafe,
238
241
  UnsafeUnknownSchema,
239
242
  ValueSchema,
@@ -246,6 +249,7 @@ export {
246
249
  asTreeViewAlpha,
247
250
  cloneWithReplacements,
248
251
  comparePersistedSchema,
252
+ contentSchemaSymbol,
249
253
  createIdentifierIndex,
250
254
  createSimpleTreeIndex,
251
255
  evaluateLazySchema,
package/dist/api.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { type TreeView, type TreeViewAlpha, type ImplicitFieldSchema } from "./simple-tree/index.js";
5
+ import { type TreeView, type TreeViewAlpha, type TreeViewBeta, type ImplicitFieldSchema } from "./simple-tree/index.js";
6
6
  /**
7
7
  * Module entry points for retrieving alternate (alpha/beta) versions of tree APIs.
8
8
  * For each API (usually a class) that has an alpha/beta version, add overloads to the function(s) below.
@@ -14,4 +14,9 @@ import { type TreeView, type TreeViewAlpha, type ImplicitFieldSchema } from "./s
14
14
  * @alpha
15
15
  */
16
16
  export declare function asAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
17
+ /**
18
+ * Retrieve the {@link TreeViewBeta | beta API} for a {@link TreeView}.
19
+ * @beta
20
+ */
21
+ export declare function asBeta<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewBeta<TSchema>;
17
22
  //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAGxB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,mBAAmB,EAC1D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GACrB,aAAa,CAAC,OAAO,CAAC,CAGxB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGxB,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,SAAS,mBAAmB,EAC1D,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GACrB,aAAa,CAAC,OAAO,CAAC,CAGxB;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,OAAO,SAAS,mBAAmB,EACzD,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GACrB,YAAY,CAAC,OAAO,CAAC,CAEvB"}
package/dist/api.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Licensed under the MIT License.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.asAlpha = void 0;
7
+ exports.asBeta = exports.asAlpha = void 0;
8
8
  const index_js_1 = require("./simple-tree/index.js");
9
9
  /**
10
10
  * Module entry points for retrieving alternate (alpha/beta) versions of tree APIs.
@@ -21,4 +21,12 @@ function asAlpha(view) {
21
21
  return (0, index_js_1.asTreeViewAlpha)(view);
22
22
  }
23
23
  exports.asAlpha = asAlpha;
24
+ /**
25
+ * Retrieve the {@link TreeViewBeta | beta API} for a {@link TreeView}.
26
+ * @beta
27
+ */
28
+ function asBeta(view) {
29
+ return view;
30
+ }
31
+ exports.asBeta = asBeta;
24
32
  //# sourceMappingURL=api.js.map
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qDAMgC;AAEhC;;;;;GAKG;AAEH;;;GAGG;AACH,SAAgB,OAAO,CACtB,IAAuB;IAEvB,gDAAgD;IAChD,OAAO,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AALD,0BAKC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype ImplicitFieldSchema,\n\t// eslint-disable-next-line import/no-deprecated\n\tasTreeViewAlpha,\n} from \"./simple-tree/index.js\";\n\n/**\n * Module entry points for retrieving alternate (alpha/beta) versions of tree APIs.\n * For each API (usually a class) that has an alpha/beta version, add overloads to the function(s) below.\n * In the future, `asBeta` may be added here too.\n * These functions should only be used by external consumers, not referenced internally within the tree package, to avoid circular import dependencies.\n */\n\n/**\n * Retrieve the {@link TreeViewAlpha | alpha API} for a {@link TreeView}.\n * @alpha\n */\nexport function asAlpha<TSchema extends ImplicitFieldSchema>(\n\tview: TreeView<TSchema>,\n): TreeViewAlpha<TSchema> {\n\t// eslint-disable-next-line import/no-deprecated\n\treturn asTreeViewAlpha(view);\n}\n"]}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,qDAOgC;AAEhC;;;;;GAKG;AAEH;;;GAGG;AACH,SAAgB,OAAO,CACtB,IAAuB;IAEvB,gDAAgD;IAChD,OAAO,IAAA,0BAAe,EAAC,IAAI,CAAC,CAAC;AAC9B,CAAC;AALD,0BAKC;AAED;;;GAGG;AACH,SAAgB,MAAM,CACrB,IAAuB;IAEvB,OAAO,IAA6B,CAAC;AACtC,CAAC;AAJD,wBAIC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n\ttype TreeView,\n\ttype TreeViewAlpha,\n\ttype TreeViewBeta,\n\ttype ImplicitFieldSchema,\n\t// eslint-disable-next-line import/no-deprecated\n\tasTreeViewAlpha,\n} from \"./simple-tree/index.js\";\n\n/**\n * Module entry points for retrieving alternate (alpha/beta) versions of tree APIs.\n * For each API (usually a class) that has an alpha/beta version, add overloads to the function(s) below.\n * In the future, `asBeta` may be added here too.\n * These functions should only be used by external consumers, not referenced internally within the tree package, to avoid circular import dependencies.\n */\n\n/**\n * Retrieve the {@link TreeViewAlpha | alpha API} for a {@link TreeView}.\n * @alpha\n */\nexport function asAlpha<TSchema extends ImplicitFieldSchema>(\n\tview: TreeView<TSchema>,\n): TreeViewAlpha<TSchema> {\n\t// eslint-disable-next-line import/no-deprecated\n\treturn asTreeViewAlpha(view);\n}\n\n/**\n * Retrieve the {@link TreeViewBeta | beta API} for a {@link TreeView}.\n * @beta\n */\nexport function asBeta<TSchema extends ImplicitFieldSchema>(\n\tview: TreeView<TSchema>,\n): TreeViewBeta<TSchema> {\n\treturn view as TreeViewBeta<TSchema>;\n}\n"]}
package/dist/beta.d.ts CHANGED
@@ -93,6 +93,14 @@ export {
93
93
  // #endregion
94
94
 
95
95
  // #region @beta APIs
96
+ AllowedTypeMetadata,
97
+ AllowedTypesFull,
98
+ AllowedTypesFullEvaluated,
99
+ AllowedTypesFullFromMixed,
100
+ AllowedTypesMetadata,
101
+ AnnotateAllowedTypesList,
102
+ AnnotatedAllowedType,
103
+ AnnotatedAllowedTypes,
96
104
  ConciseTree,
97
105
  FixRecursiveArraySchema,
98
106
  FluidSerializableAsTree,
@@ -109,14 +117,19 @@ export {
109
117
  PopUnion,
110
118
  RecordNodeInsertableData,
111
119
  SchemaFactoryBeta,
120
+ SchemaUpgrade,
112
121
  SharedTreeOptionsBeta,
113
122
  TreeBeta,
123
+ TreeBranch,
114
124
  TreeChangeEventsBeta,
115
125
  TreeEncodingOptions,
116
126
  TreeRecordNode,
117
127
  TreeRecordNodeUnsafe,
128
+ TreeViewBeta,
129
+ UnannotateAllowedTypesList,
118
130
  UnionToTuple,
119
131
  adaptEnum,
132
+ asBeta,
120
133
  configuredSharedTreeBeta,
121
134
  enumFromStrings,
122
135
  singletonSchema