fluid-framework 2.5.0-302463 → 2.5.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.
@@ -9,14 +9,10 @@ export function adaptEnum<TScope extends string, const TEnum extends Record<stri
9
9
  readonly value: TValue;
10
10
  }) & { readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, TreeNode & {
11
11
  readonly value: TEnum[Property];
12
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
13
- readonly value: TEnum[Property];
14
- }); } & {
12
+ }, Record<string, never>, true, Record<string, never>, undefined>; } & {
15
13
  readonly schema: UnionToTuple<{ readonly [Property in keyof TEnum]: TreeNodeSchemaClass<ScopedSchemaName<TScope, TEnum[Property]>, NodeKind.Object, TreeNode & {
16
14
  readonly value: TEnum[Property];
17
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
18
- readonly value: TEnum[Property];
19
- }); }[keyof TEnum]>;
15
+ }, Record<string, never>, true, Record<string, never>, undefined>; }[keyof TEnum]>;
20
16
  };
21
17
 
22
18
  // @public
@@ -37,6 +33,9 @@ type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boole
37
33
  Kind
38
34
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
39
35
 
36
+ // @alpha
37
+ export function asTreeViewAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
38
+
40
39
  // @public
41
40
  export enum AttachState {
42
41
  Attached = "Attached",
@@ -44,6 +43,14 @@ export enum AttachState {
44
43
  Detached = "Detached"
45
44
  }
46
45
 
46
+ // @alpha @sealed
47
+ export interface BranchableTree extends ViewableTree {
48
+ branch(): TreeBranchFork;
49
+ merge(branch: TreeBranchFork): void;
50
+ merge(branch: TreeBranchFork, disposeMerged: boolean): void;
51
+ rebase(branch: TreeBranchFork): void;
52
+ }
53
+
47
54
  // @public
48
55
  export enum CommitKind {
49
56
  Default = 0,
@@ -60,6 +67,11 @@ export interface CommitMetadata {
60
67
  // @alpha
61
68
  export function comparePersistedSchema(persisted: JsonCompatible, view: JsonCompatible, options: ICodecOptions, canInitialize: boolean): SchemaCompatibilityStatus;
62
69
 
70
+ // @alpha
71
+ export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle | ConciseTree<THandle>[] | {
72
+ [key: string]: ConciseTree<THandle>;
73
+ };
74
+
63
75
  // @alpha
64
76
  export function configuredSharedTree(options: SharedTreeOptions): SharedObjectKind<ITree>;
65
77
 
@@ -95,19 +107,21 @@ export interface ContainerSchema {
95
107
  interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {
96
108
  }
97
109
 
110
+ // @alpha
111
+ export interface EncodeOptions<TCustom> {
112
+ readonly useStoredKeys?: boolean;
113
+ valueConverter(data: IFluidHandle): TCustom;
114
+ }
115
+
98
116
  // @alpha
99
117
  export function enumFromStrings<TScope extends string, const Members extends readonly string[]>(factory: SchemaFactory<TScope>, members: Members): (<TValue extends Members[number]>(value: TValue) => TreeNode & {
100
118
  readonly value: TValue;
101
119
  }) & Record<Members[number], TreeNodeSchemaClass<ScopedSchemaName<TScope, Members[number]>, NodeKind.Object, TreeNode & {
102
120
  readonly value: Members[number];
103
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
104
- readonly value: Members[number];
105
- })> & {
121
+ }, Record<string, never>, true, Record<string, never>, undefined>> & {
106
122
  readonly schema: UnionToTuple<Record<Members[number], TreeNodeSchemaClass<ScopedSchemaName<TScope, Members[number]>, NodeKind.Object, TreeNode & {
107
123
  readonly value: Members[number];
108
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never> | undefined) => TreeNode & {
109
- readonly value: Members[number];
110
- })>[Members[number]]>;
124
+ }, Record<string, never>, true, Record<string, never>, undefined>>[Members[number]]>;
111
125
  };
112
126
 
113
127
  // @public @sealed
@@ -188,6 +202,14 @@ type FlexList<Item = unknown> = readonly LazyItem<Item>[];
188
202
  // @public
189
203
  type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
190
204
 
205
+ // @alpha
206
+ export enum FluidClientVersion {
207
+ v2_0 = "v2_0",
208
+ v2_1 = "v2_1",
209
+ v2_2 = "v2_2",
210
+ v2_3 = "v2_3"
211
+ }
212
+
191
213
  // @public
192
214
  export type FluidObject<T = unknown> = {
193
215
  [P in FluidObjectProviderKeys<T>]?: T[P];
@@ -208,11 +230,11 @@ export enum ForestType {
208
230
  Reference = 0
209
231
  }
210
232
 
211
- // @alpha
212
- export function getBranch(tree: ITree): TreeBranch;
233
+ // @alpha @deprecated
234
+ export function getBranch(tree: ITree): BranchableTree;
213
235
 
214
- // @alpha
215
- export function getBranch<T extends ImplicitFieldSchema>(view: TreeView<T>): TreeBranch;
236
+ // @alpha @deprecated
237
+ export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(view: TreeViewAlpha<T>): BranchableTree;
216
238
 
217
239
  // @alpha
218
240
  export function getJsonSchema(schema: ImplicitFieldSchema): JsonTreeSchema;
@@ -481,6 +503,14 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
481
503
  // @public
482
504
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
483
505
 
506
+ // @alpha
507
+ export function independentInitializedView<const TSchema extends ImplicitFieldSchema>(config: TreeViewConfiguration<TSchema>, options: ForestOptions & ICodecOptions, content: ViewContent): TreeViewAlpha<TSchema>;
508
+
509
+ // @alpha
510
+ export function independentView<const TSchema extends ImplicitFieldSchema>(config: TreeViewConfiguration<TSchema>, options: ForestOptions & {
511
+ idCompressor?: IIdCompressor_2 | undefined;
512
+ }): TreeViewAlpha<TSchema>;
513
+
484
514
  // @public
485
515
  export type InitialObjects<T extends ContainerSchema> = {
486
516
  [K in keyof T["initialObjects"]]: T["initialObjects"][K] extends SharedObjectKind<infer TChannel> ? TChannel : never;
@@ -654,11 +684,11 @@ export interface JsonArrayNodeSchema extends JsonNodeSchemaBase<NodeKind.Array,
654
684
  }
655
685
 
656
686
  // @alpha
657
- export type JsonCompatible = string | number | boolean | null | JsonCompatible[] | JsonCompatibleObject;
687
+ export type JsonCompatible<TExtra = never> = string | number | boolean | null | JsonCompatible<TExtra>[] | JsonCompatibleObject<TExtra> | TExtra;
658
688
 
659
689
  // @alpha
660
- export type JsonCompatibleObject = {
661
- [P in string]?: JsonCompatible;
690
+ export type JsonCompatibleObject<TExtra = never> = {
691
+ [P in string]?: JsonCompatible<TExtra>;
662
692
  };
663
693
 
664
694
  // @alpha @sealed
@@ -752,7 +782,7 @@ export type Myself<M extends IMember = IMember> = M & {
752
782
  };
753
783
 
754
784
  // @public
755
- type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, infer TBuild> ? TBuild : never;
785
+ type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boolean>> = T extends TreeNodeSchemaCore<string, NodeKind, boolean, unknown, infer TBuild> ? TBuild : never;
756
786
 
757
787
  // @public
758
788
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
@@ -800,9 +830,18 @@ type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<I
800
830
  // @public
801
831
  export type Off = () => void;
802
832
 
833
+ // @alpha
834
+ export interface ParseOptions<TCustom> {
835
+ readonly useStoredKeys?: boolean;
836
+ valueConverter(data: VerboseTree<TCustom>): TreeLeafValue | VerboseTreeNode<TCustom>;
837
+ }
838
+
803
839
  // @alpha
804
840
  export type PopUnion<Union, AsOverloadedFunction = UnionToIntersection<Union extends unknown ? (f: Union) => void : never>> = AsOverloadedFunction extends (a: infer First) => void ? First : never;
805
841
 
842
+ // @alpha
843
+ export type ReadableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = TreeFieldFromImplicitField<ReadSchema<TSchema>>;
844
+
806
845
  // @public @sealed
807
846
  export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue> extends ReadonlyArray<T>, Awaited<TreeNode & WithType<string, NodeKind.Array>> {
808
847
  }
@@ -823,6 +862,11 @@ interface ReadonlyMapInlined<K, T extends Unenforced<ImplicitAllowedTypes>> {
823
862
  values(): IterableIterator<TreeNodeFromImplicitAllowedTypesUnsafe<T>>;
824
863
  }
825
864
 
865
+ // @alpha
866
+ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> = [
867
+ TSchema
868
+ ] extends [ImplicitFieldSchema] ? TSchema : ImplicitFieldSchema;
869
+
826
870
  // @public
827
871
  export type ReplaceIEventThisPlaceHolder<L extends any[], TThis> = L extends any[] ? {
828
872
  [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K];
@@ -888,24 +932,24 @@ export interface SchemaCompatibilityStatus {
888
932
  // @public @sealed
889
933
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
890
934
  constructor(scope: TScope);
891
- array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
892
- array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
935
+ array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
936
+ array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
893
937
  arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array, unknown>, {
894
938
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
895
- }, false, T>;
896
- readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
897
- readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
939
+ }, false, T, undefined>;
940
+ readonly boolean: TreeNodeSchemaNonClass<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean, true, unknown, never>;
941
+ readonly handle: TreeNodeSchemaNonClass<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>, true, unknown, never>;
898
942
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
899
- map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
900
- map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
943
+ map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
944
+ map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
901
945
  mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map, unknown>, {
902
946
  [Symbol.iterator](): Iterator<[
903
947
  string,
904
948
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
905
949
  ]>;
906
- }, false, T>;
907
- readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
908
- readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
950
+ }, false, T, undefined>;
951
+ readonly null: TreeNodeSchemaNonClass<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null, true, unknown, never>;
952
+ readonly number: TreeNodeSchemaNonClass<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number, true, unknown, never>;
909
953
  object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
910
954
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property], UnionToIntersection_2<T[Property]>>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1], UnionToIntersection_2<T[Property_1]>> | undefined; }, false, T>;
911
955
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
@@ -914,7 +958,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
914
958
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
915
959
  // (undocumented)
916
960
  readonly scope: TScope;
917
- readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
961
+ readonly string: TreeNodeSchemaNonClass<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string, true, unknown, never>;
918
962
  }
919
963
 
920
964
  // @alpha
@@ -955,9 +999,7 @@ export type SharedTreeOptions = Partial<ICodecOptions> & Partial<SharedTreeForma
955
999
  // @alpha
956
1000
  export function singletonSchema<TScope extends string, TName extends string | number>(factory: SchemaFactory<TScope, TName>, name: TName): TreeNodeSchemaClass<ScopedSchemaName<TScope, TName>, NodeKind.Object, TreeNode & {
957
1001
  readonly value: TName;
958
- }, Record<string, never>, true, unknown> & (new (data?: InternalTreeNode | Record<string, never>) => TreeNode & {
959
- readonly value: TName;
960
- });
1002
+ }, Record<string, never>, true, Record<string, never>, undefined>;
961
1003
 
962
1004
  // @public
963
1005
  export interface Tagged<V, T extends string = string> {
@@ -979,6 +1021,26 @@ export type TransformedEvent<TThis, E, A extends any[]> = (event: E, listener: (
979
1021
  // @public
980
1022
  export const Tree: TreeApi;
981
1023
 
1024
+ // @alpha @sealed
1025
+ export const TreeAlpha: {
1026
+ branch(node: TreeNode): TreeBranch | undefined;
1027
+ 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>;
1028
+ 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>;
1029
+ importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<ParseOptions<IFluidHandle>>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1030
+ importVerbose<const TSchema extends ImplicitFieldSchema, THandle>(schema: TSchema, data: VerboseTree<THandle> | undefined, options: ParseOptions<THandle>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1031
+ exportConcise(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): ConciseTree;
1032
+ exportConcise<THandle>(node: TreeNode | TreeLeafValue, options: EncodeOptions<THandle>): ConciseTree<THandle>;
1033
+ exportVerbose(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): VerboseTree;
1034
+ exportVerbose<T>(node: TreeNode | TreeLeafValue, options: EncodeOptions<T>): VerboseTree<T>;
1035
+ exportCompressed(tree: TreeNode | TreeLeafValue, options: {
1036
+ oldestCompatibleClient: FluidClientVersion;
1037
+ idCompressor?: IIdCompressor;
1038
+ }): JsonCompatible<IFluidHandle>;
1039
+ importCompressed<const TSchema extends ImplicitFieldSchema>(schema: TSchema, compressedData: JsonCompatible<IFluidHandle>, options: {
1040
+ idCompressor?: IIdCompressor;
1041
+ } & ICodecOptions): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1042
+ };
1043
+
982
1044
  // @public @sealed
983
1045
  interface TreeApi extends TreeNodeApi {
984
1046
  contains(node: TreeNode, other: TreeNode): boolean;
@@ -1023,20 +1085,28 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
1023
1085
  // @beta @sealed
1024
1086
  export const TreeBeta: {
1025
1087
  on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
1026
- clone<TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
1088
+ clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
1027
1089
  };
1028
1090
 
1029
1091
  // @alpha @sealed
1030
- export interface TreeBranch extends ViewableTree {
1031
- branch(): TreeBranchFork;
1032
- merge(branch: TreeBranchFork): void;
1033
- merge(branch: TreeBranchFork, disposeMerged: boolean): void;
1034
- rebase(branch: TreeBranchFork): void;
1092
+ export interface TreeBranch extends IDisposable {
1093
+ dispose(error?: Error): void;
1094
+ readonly events: Listenable<TreeBranchEvents>;
1095
+ fork(): TreeBranch;
1096
+ hasRootSchema<TSchema extends ImplicitFieldSchema>(schema: TSchema): this is TreeViewAlpha<TSchema>;
1097
+ merge(branch: TreeBranch, disposeMerged?: boolean): void;
1098
+ rebaseOnto(branch: TreeBranch): void;
1035
1099
  }
1036
1100
 
1037
1101
  // @alpha @sealed
1038
- export interface TreeBranchFork extends TreeBranch, IDisposable {
1039
- rebaseOnto(branch: TreeBranch): void;
1102
+ export interface TreeBranchEvents {
1103
+ commitApplied(data: CommitMetadata, getRevertible?: RevertibleFactory): void;
1104
+ schemaChanged(): void;
1105
+ }
1106
+
1107
+ // @alpha @sealed
1108
+ export interface TreeBranchFork extends BranchableTree, IDisposable {
1109
+ rebaseOnto(branch: BranchableTree): void;
1040
1110
  }
1041
1111
 
1042
1112
  // @public @sealed
@@ -1109,23 +1179,26 @@ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedType
1109
1179
  type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
1110
1180
 
1111
1181
  // @public @sealed
1112
- export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
1182
+ export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
1113
1183
 
1114
1184
  // @public @sealed
1115
- export interface TreeNodeSchemaClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
1116
- // @sealed
1117
- new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
1118
- }
1185
+ export type TreeNodeSchemaClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode = TreeNode, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
1186
+ new (data?: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
1187
+ } : {
1188
+ new (data: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
1189
+ });
1119
1190
 
1120
1191
  // @public
1121
- export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
1192
+ export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
1122
1193
  // @sealed
1123
1194
  new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
1124
1195
  }
1125
1196
 
1126
1197
  // @public @sealed
1127
- export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
1198
+ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown, out TInsertable = never> {
1128
1199
  readonly childTypes: ReadonlySet<TreeNodeSchema>;
1200
+ // @sealed
1201
+ createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
1129
1202
  readonly identifier: Name;
1130
1203
  readonly implicitlyConstructable: ImplicitlyConstructable;
1131
1204
  readonly info: Info;
@@ -1134,10 +1207,11 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
1134
1207
  }
1135
1208
 
1136
1209
  // @public @sealed
1137
- export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
1138
- // (undocumented)
1139
- create(data: TInsertable): TNode;
1140
- }
1210
+ export type TreeNodeSchemaNonClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
1211
+ create(data?: TInsertable | TConstructorExtra): TNode;
1212
+ } : {
1213
+ create(data: TInsertable | TConstructorExtra): TNode;
1214
+ });
1141
1215
 
1142
1216
  // @public
1143
1217
  interface TreeNodeSchemaNonClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
@@ -1173,12 +1247,14 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
1173
1247
  upgradeSchema(): void;
1174
1248
  }
1175
1249
 
1176
- // @alpha
1177
- export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeView<TSchema extends ImplicitFieldSchema ? TSchema : ImplicitFieldSchema>, "root" | "initialize"> {
1250
+ // @alpha @sealed
1251
+ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema> extends Omit<TreeView<ReadSchema<TSchema>>, "root" | "initialize">, Omit<TreeBranch, "events"> {
1252
+ // (undocumented)
1253
+ fork(): ReturnType<TreeBranch["fork"]> & TreeViewAlpha<TSchema>;
1178
1254
  // (undocumented)
1179
1255
  initialize(content: InsertableField<TSchema>): void;
1180
1256
  // (undocumented)
1181
- get root(): TSchema extends ImplicitFieldSchema ? TreeFieldFromImplicitField<TSchema> : TreeLeafValue | TreeNode;
1257
+ get root(): ReadableField<TSchema>;
1182
1258
  set root(newRoot: InsertableField<TSchema>);
1183
1259
  }
1184
1260
 
@@ -1237,16 +1313,34 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
1237
1313
  [NodeKind.Map]: ImplicitAllowedTypes;
1238
1314
  }[T["kind"]]>> = true;
1239
1315
 
1316
+ // @alpha
1317
+ export type VerboseTree<THandle = IFluidHandle> = VerboseTreeNode<THandle> | Exclude<TreeLeafValue, IFluidHandle> | THandle;
1318
+
1319
+ // @alpha
1320
+ export interface VerboseTreeNode<THandle = IFluidHandle> {
1321
+ fields: VerboseTree<THandle>[] | {
1322
+ [key: string]: VerboseTree<THandle>;
1323
+ };
1324
+ type: string;
1325
+ }
1326
+
1240
1327
  // @public @sealed
1241
1328
  export interface ViewableTree {
1242
1329
  viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
1243
1330
  }
1244
1331
 
1332
+ // @alpha
1333
+ export interface ViewContent {
1334
+ readonly idCompressor: IIdCompressor_2;
1335
+ readonly schema: JsonCompatible;
1336
+ readonly tree: JsonCompatible<IFluidHandle>;
1337
+ }
1338
+
1245
1339
  // @public @sealed
1246
1340
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
1247
1341
  // @deprecated
1248
1342
  get [typeNameSymbol](): TName;
1249
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode | TreeLeafValue, never, boolean, TInfo>;
1343
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;
1250
1344
  }
1251
1345
 
1252
1346
  ```
@@ -587,7 +587,7 @@ export type Myself<M extends IMember = IMember> = M & {
587
587
  };
588
588
 
589
589
  // @public
590
- type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, infer TBuild> ? TBuild : never;
590
+ type NodeBuilderData<T extends TreeNodeSchemaCore<string, NodeKind, boolean>> = T extends TreeNodeSchemaCore<string, NodeKind, boolean, unknown, infer TBuild> ? TBuild : never;
591
591
 
592
592
  // @public
593
593
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
@@ -717,24 +717,24 @@ export interface SchemaCompatibilityStatus {
717
717
  // @public @sealed
718
718
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
719
719
  constructor(scope: TScope);
720
- array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
721
- array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
720
+ array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
721
+ array<const Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T, undefined>;
722
722
  arrayRecursive<const Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Array, TreeArrayNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Array, unknown>, {
723
723
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
724
- }, false, T>;
725
- readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
726
- readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
724
+ }, false, T, undefined>;
725
+ readonly boolean: TreeNodeSchemaNonClass<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean, true, unknown, never>;
726
+ readonly handle: TreeNodeSchemaNonClass<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>, true, unknown, never>;
727
727
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
728
- map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
729
- map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
728
+ map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchemaNonClass<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
729
+ map<Name extends TName, const T extends ImplicitAllowedTypes>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map>, MapNodeInsertableData<T>, true, T, undefined>;
730
730
  mapRecursive<Name extends TName, const T extends Unenforced<ImplicitAllowedTypes>>(name: Name, allowedTypes: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Map, TreeMapNodeUnsafe<T> & WithType<ScopedSchemaName<TScope, Name>, NodeKind.Map, unknown>, {
731
731
  [Symbol.iterator](): Iterator<[
732
732
  string,
733
733
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
734
734
  ]>;
735
- }, false, T>;
736
- readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
737
- readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
735
+ }, false, T, undefined>;
736
+ readonly null: TreeNodeSchemaNonClass<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null, true, unknown, never>;
737
+ readonly number: TreeNodeSchemaNonClass<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number, true, unknown, never>;
738
738
  object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
739
739
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property], UnionToIntersection_2<T[Property]>>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1], UnionToIntersection_2<T[Property_1]>> | undefined; }, false, T>;
740
740
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
@@ -743,7 +743,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
743
743
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
744
744
  // (undocumented)
745
745
  readonly scope: TScope;
746
- readonly string: TreeNodeSchema<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string>;
746
+ readonly string: TreeNodeSchemaNonClass<"com.fluidframework.leaf.string", NodeKind.Leaf, string, string, true, unknown, never>;
747
747
  }
748
748
 
749
749
  // @public
@@ -821,7 +821,7 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
821
821
  // @beta @sealed
822
822
  export const TreeBeta: {
823
823
  on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
824
- clone<TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
824
+ clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
825
825
  };
826
826
 
827
827
  // @public @sealed
@@ -888,23 +888,26 @@ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedType
888
888
  type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
889
889
 
890
890
  // @public @sealed
891
- export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
891
+ export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
892
892
 
893
893
  // @public @sealed
894
- export interface TreeNodeSchemaClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
895
- // @sealed
896
- new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
897
- }
894
+ export type TreeNodeSchemaClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode = TreeNode, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
895
+ new (data?: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
896
+ } : {
897
+ new (data: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
898
+ });
898
899
 
899
900
  // @public
900
- export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
901
+ export interface TreeNodeSchemaClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
901
902
  // @sealed
902
903
  new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
903
904
  }
904
905
 
905
906
  // @public @sealed
906
- export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
907
+ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown, out TInsertable = never> {
907
908
  readonly childTypes: ReadonlySet<TreeNodeSchema>;
909
+ // @sealed
910
+ createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
908
911
  readonly identifier: Name;
909
912
  readonly implicitlyConstructable: ImplicitlyConstructable;
910
913
  readonly info: Info;
@@ -913,10 +916,11 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
913
916
  }
914
917
 
915
918
  // @public @sealed
916
- export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
917
- // (undocumented)
918
- create(data: TInsertable): TNode;
919
- }
919
+ export type TreeNodeSchemaNonClass<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TInsertable = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TConstructorExtra = never> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> & (undefined extends TConstructorExtra ? {
920
+ create(data?: TInsertable | TConstructorExtra): TNode;
921
+ } : {
922
+ create(data: TInsertable | TConstructorExtra): TNode;
923
+ });
920
924
 
921
925
  // @public
922
926
  interface TreeNodeSchemaNonClassUnsafe<out Name extends string, out Kind extends NodeKind, out TNode extends Unenforced<TreeNode | TreeLeafValue>, in TInsertable, out ImplicitlyConstructable extends boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
@@ -1004,7 +1008,7 @@ export interface ViewableTree {
1004
1008
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
1005
1009
  // @deprecated
1006
1010
  get [typeNameSymbol](): TName;
1007
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode | TreeLeafValue, never, boolean, TInfo>;
1011
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;
1008
1012
  }
1009
1013
 
1010
1014
  ```