fluid-framework 2.3.0-288113 → 2.4.0-294316

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.
@@ -89,21 +89,29 @@ export enum FieldKind {
89
89
  }
90
90
 
91
91
  // @public
92
- export interface FieldProps {
92
+ export interface FieldProps<TCustomMetadata = unknown> {
93
93
  readonly defaultProvider?: DefaultProvider;
94
94
  readonly key?: string;
95
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
95
96
  }
96
97
 
97
98
  // @public @sealed
98
- export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes> {
99
+ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes, out TCustomMetadata = unknown> {
99
100
  readonly allowedTypes: Types;
100
101
  get allowedTypeSet(): ReadonlySet<TreeNodeSchema>;
101
102
  readonly kind: Kind;
102
- readonly props?: FieldProps | undefined;
103
+ get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined;
104
+ readonly props?: FieldProps<TCustomMetadata> | undefined;
103
105
  readonly requiresValue: boolean;
104
106
  protected _typeCheck: MakeNominal;
105
107
  }
106
108
 
109
+ // @public @sealed
110
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
111
+ custom?: TCustomMetadata;
112
+ description?: string | undefined;
113
+ }
114
+
107
115
  // @public
108
116
  export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends Unenforced<ImplicitAllowedTypes>> extends FieldSchema<Kind, any> {
109
117
  readonly allowedTypes: Types;
@@ -563,9 +571,9 @@ type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string
563
571
  // @public
564
572
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
565
573
 
566
- // @public
567
- export interface NodeChangedData {
568
- readonly changedProperties?: ReadonlySet<string>;
574
+ // @beta @sealed
575
+ export interface NodeChangedData<TNode extends TreeNode = TreeNode> {
576
+ readonly changedProperties?: ReadonlySet<TNode extends WithType<string, NodeKind.Object, infer TInfo> ? string & keyof TInfo : string>;
569
577
  }
570
578
 
571
579
  // @public
@@ -679,7 +687,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
679
687
  constructor(scope: TScope);
680
688
  array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
681
689
  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>;
682
- 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>, {
690
+ 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>, {
683
691
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
684
692
  }, false, T>;
685
693
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
@@ -687,7 +695,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
687
695
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
688
696
  map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
689
697
  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>;
690
- 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>, {
698
+ 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>, {
691
699
  [Symbol.iterator](): Iterator<[
692
700
  string,
693
701
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
@@ -697,9 +705,9 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
697
705
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
698
706
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
699
707
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
700
- optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
708
+ optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
701
709
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
702
- required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
710
+ required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
703
711
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
704
712
  // (undocumented)
705
713
  readonly scope: TScope;
@@ -778,12 +786,22 @@ interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom> extends ReadonlyArray<
778
786
  export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAllowedTypes>> extends TreeArrayNodeBase<TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>, InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>, TreeArrayNode> {
779
787
  }
780
788
 
789
+ // @beta @sealed
790
+ export const TreeBeta: {
791
+ readonly on: <K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>) => () => void;
792
+ };
793
+
781
794
  // @public @sealed
782
- export interface TreeChangeEvents<TNode = TreeNode> {
783
- nodeChanged(data: NodeChangedData & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData, "changedProperties">> : unknown)): void;
795
+ export interface TreeChangeEvents {
796
+ nodeChanged(unstable?: unknown): void;
784
797
  treeChanged(): void;
785
798
  }
786
799
 
800
+ // @beta @sealed
801
+ export interface TreeChangeEventsBeta<TNode extends TreeNode = TreeNode> extends TreeChangeEvents {
802
+ nodeChanged: (data: NodeChangedData<TNode> & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData<TNode>, "changedProperties">> : unknown)) => void;
803
+ }
804
+
787
805
  // @public
788
806
  export type TreeFieldFromImplicitField<TSchema extends ImplicitFieldSchema = FieldSchema> = TSchema extends FieldSchema<infer Kind, infer Types> ? ApplyKind<TreeNodeFromImplicitAllowedTypes<Types>, Kind, false> : TSchema extends ImplicitAllowedTypes ? TreeNodeFromImplicitAllowedTypes<TSchema> : unknown;
789
807
 
@@ -823,7 +841,7 @@ export abstract class TreeNode implements WithType {
823
841
  export interface TreeNodeApi {
824
842
  is<TSchema extends ImplicitAllowedTypes>(value: unknown, schema: TSchema): value is TreeNodeFromImplicitAllowedTypes<TSchema>;
825
843
  key(node: TreeNode): string | number;
826
- on<K extends keyof TreeChangeEvents<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: TreeChangeEvents<TNode>[K]): () => void;
844
+ on<K extends keyof TreeChangeEvents>(node: TreeNode, eventName: K, listener: TreeChangeEvents[K]): () => void;
827
845
  parent(node: TreeNode): TreeNode | undefined;
828
846
  schema(node: TreeNode | TreeLeafValue): TreeNodeSchema;
829
847
  shortId(node: TreeNode): number | string | undefined;
@@ -861,7 +879,7 @@ interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind exte
861
879
  }
862
880
 
863
881
  // @public
864
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object>;
882
+ export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
865
883
 
866
884
  // @public
867
885
  export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
@@ -881,6 +899,7 @@ export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposab
881
899
  initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
882
900
  get root(): TreeFieldFromImplicitField<TSchema>;
883
901
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
902
+ readonly schema: TSchema;
884
903
  upgradeSchema(): void;
885
904
  }
886
905
 
@@ -925,10 +944,10 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
925
944
  }[T["kind"]]>> = true;
926
945
 
927
946
  // @public @sealed
928
- export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind> {
947
+ export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
929
948
  // @deprecated
930
949
  get [typeNameSymbol](): TName;
931
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind>;
950
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
932
951
  }
933
952
 
934
953
  ```
@@ -92,21 +92,29 @@ export enum FieldKind {
92
92
  }
93
93
 
94
94
  // @public
95
- export interface FieldProps {
95
+ export interface FieldProps<TCustomMetadata = unknown> {
96
96
  readonly defaultProvider?: DefaultProvider;
97
97
  readonly key?: string;
98
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
98
99
  }
99
100
 
100
101
  // @public @sealed
101
- export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes> {
102
+ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes, out TCustomMetadata = unknown> {
102
103
  readonly allowedTypes: Types;
103
104
  get allowedTypeSet(): ReadonlySet<TreeNodeSchema>;
104
105
  readonly kind: Kind;
105
- readonly props?: FieldProps | undefined;
106
+ get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined;
107
+ readonly props?: FieldProps<TCustomMetadata> | undefined;
106
108
  readonly requiresValue: boolean;
107
109
  protected _typeCheck: MakeNominal;
108
110
  }
109
111
 
112
+ // @public @sealed
113
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
114
+ custom?: TCustomMetadata;
115
+ description?: string | undefined;
116
+ }
117
+
110
118
  // @public
111
119
  export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends Unenforced<ImplicitAllowedTypes>> extends FieldSchema<Kind, any> {
112
120
  readonly allowedTypes: Types;
@@ -869,11 +877,6 @@ type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string
869
877
  // @public
870
878
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
871
879
 
872
- // @public
873
- export interface NodeChangedData {
874
- readonly changedProperties?: ReadonlySet<string>;
875
- }
876
-
877
880
  // @public
878
881
  export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, infer TNode> ? TNode : never;
879
882
 
@@ -985,7 +988,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
985
988
  constructor(scope: TScope);
986
989
  array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
987
990
  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>;
988
- 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>, {
991
+ 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>, {
989
992
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
990
993
  }, false, T>;
991
994
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
@@ -993,7 +996,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
993
996
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
994
997
  map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
995
998
  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>;
996
- 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>, {
999
+ 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>, {
997
1000
  [Symbol.iterator](): Iterator<[
998
1001
  string,
999
1002
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
@@ -1003,9 +1006,9 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
1003
1006
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
1004
1007
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
1005
1008
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
1006
- optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
1009
+ optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
1007
1010
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
1008
- required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
1011
+ required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
1009
1012
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
1010
1013
  // (undocumented)
1011
1014
  readonly scope: TScope;
@@ -1176,8 +1179,8 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
1176
1179
  }
1177
1180
 
1178
1181
  // @public @sealed
1179
- export interface TreeChangeEvents<TNode = TreeNode> {
1180
- nodeChanged(data: NodeChangedData & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData, "changedProperties">> : unknown)): void;
1182
+ export interface TreeChangeEvents {
1183
+ nodeChanged(unstable?: unknown): void;
1181
1184
  treeChanged(): void;
1182
1185
  }
1183
1186
 
@@ -1220,7 +1223,7 @@ export abstract class TreeNode implements WithType {
1220
1223
  export interface TreeNodeApi {
1221
1224
  is<TSchema extends ImplicitAllowedTypes>(value: unknown, schema: TSchema): value is TreeNodeFromImplicitAllowedTypes<TSchema>;
1222
1225
  key(node: TreeNode): string | number;
1223
- on<K extends keyof TreeChangeEvents<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: TreeChangeEvents<TNode>[K]): () => void;
1226
+ on<K extends keyof TreeChangeEvents>(node: TreeNode, eventName: K, listener: TreeChangeEvents[K]): () => void;
1224
1227
  parent(node: TreeNode): TreeNode | undefined;
1225
1228
  schema(node: TreeNode | TreeLeafValue): TreeNodeSchema;
1226
1229
  shortId(node: TreeNode): number | string | undefined;
@@ -1258,7 +1261,7 @@ interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind exte
1258
1261
  }
1259
1262
 
1260
1263
  // @public
1261
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object>;
1264
+ export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
1262
1265
 
1263
1266
  // @public
1264
1267
  export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
@@ -1278,6 +1281,7 @@ export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposab
1278
1281
  initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
1279
1282
  get root(): TreeFieldFromImplicitField<TSchema>;
1280
1283
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
1284
+ readonly schema: TSchema;
1281
1285
  upgradeSchema(): void;
1282
1286
  }
1283
1287
 
@@ -1322,10 +1326,10 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
1322
1326
  }[T["kind"]]>> = true;
1323
1327
 
1324
1328
  // @public @sealed
1325
- export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind> {
1329
+ export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
1326
1330
  // @deprecated
1327
1331
  get [typeNameSymbol](): TName;
1328
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind>;
1332
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
1329
1333
  }
1330
1334
 
1331
1335
  ```
@@ -89,21 +89,29 @@ export enum FieldKind {
89
89
  }
90
90
 
91
91
  // @public
92
- export interface FieldProps {
92
+ export interface FieldProps<TCustomMetadata = unknown> {
93
93
  readonly defaultProvider?: DefaultProvider;
94
94
  readonly key?: string;
95
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
95
96
  }
96
97
 
97
98
  // @public @sealed
98
- export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes> {
99
+ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes, out TCustomMetadata = unknown> {
99
100
  readonly allowedTypes: Types;
100
101
  get allowedTypeSet(): ReadonlySet<TreeNodeSchema>;
101
102
  readonly kind: Kind;
102
- readonly props?: FieldProps | undefined;
103
+ get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined;
104
+ readonly props?: FieldProps<TCustomMetadata> | undefined;
103
105
  readonly requiresValue: boolean;
104
106
  protected _typeCheck: MakeNominal;
105
107
  }
106
108
 
109
+ // @public @sealed
110
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
111
+ custom?: TCustomMetadata;
112
+ description?: string | undefined;
113
+ }
114
+
107
115
  // @public
108
116
  export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends Unenforced<ImplicitAllowedTypes>> extends FieldSchema<Kind, any> {
109
117
  readonly allowedTypes: Types;
@@ -599,11 +607,6 @@ type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string
599
607
  // @public
600
608
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
601
609
 
602
- // @public
603
- export interface NodeChangedData {
604
- readonly changedProperties?: ReadonlySet<string>;
605
- }
606
-
607
610
  // @public
608
611
  export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, infer TNode> ? TNode : never;
609
612
 
@@ -715,7 +718,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
715
718
  constructor(scope: TScope);
716
719
  array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
717
720
  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>;
718
- 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>, {
721
+ 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>, {
719
722
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
720
723
  }, false, T>;
721
724
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
@@ -723,7 +726,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
723
726
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
724
727
  map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
725
728
  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>;
726
- 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>, {
729
+ 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>, {
727
730
  [Symbol.iterator](): Iterator<[
728
731
  string,
729
732
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
@@ -733,9 +736,9 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
733
736
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
734
737
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
735
738
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
736
- optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
739
+ optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
737
740
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
738
- required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
741
+ required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
739
742
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
740
743
  // (undocumented)
741
744
  readonly scope: TScope;
@@ -819,8 +822,8 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
819
822
  }
820
823
 
821
824
  // @public @sealed
822
- export interface TreeChangeEvents<TNode = TreeNode> {
823
- nodeChanged(data: NodeChangedData & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData, "changedProperties">> : unknown)): void;
825
+ export interface TreeChangeEvents {
826
+ nodeChanged(unstable?: unknown): void;
824
827
  treeChanged(): void;
825
828
  }
826
829
 
@@ -863,7 +866,7 @@ export abstract class TreeNode implements WithType {
863
866
  export interface TreeNodeApi {
864
867
  is<TSchema extends ImplicitAllowedTypes>(value: unknown, schema: TSchema): value is TreeNodeFromImplicitAllowedTypes<TSchema>;
865
868
  key(node: TreeNode): string | number;
866
- on<K extends keyof TreeChangeEvents<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: TreeChangeEvents<TNode>[K]): () => void;
869
+ on<K extends keyof TreeChangeEvents>(node: TreeNode, eventName: K, listener: TreeChangeEvents[K]): () => void;
867
870
  parent(node: TreeNode): TreeNode | undefined;
868
871
  schema(node: TreeNode | TreeLeafValue): TreeNodeSchema;
869
872
  shortId(node: TreeNode): number | string | undefined;
@@ -901,7 +904,7 @@ interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind exte
901
904
  }
902
905
 
903
906
  // @public
904
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object>;
907
+ export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
905
908
 
906
909
  // @public
907
910
  export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
@@ -921,6 +924,7 @@ export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposab
921
924
  initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
922
925
  get root(): TreeFieldFromImplicitField<TSchema>;
923
926
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
927
+ readonly schema: TSchema;
924
928
  upgradeSchema(): void;
925
929
  }
926
930
 
@@ -965,10 +969,10 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
965
969
  }[T["kind"]]>> = true;
966
970
 
967
971
  // @public @sealed
968
- export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind> {
972
+ export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
969
973
  // @deprecated
970
974
  get [typeNameSymbol](): TName;
971
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind>;
975
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
972
976
  }
973
977
 
974
978
  ```
@@ -89,21 +89,29 @@ export enum FieldKind {
89
89
  }
90
90
 
91
91
  // @public
92
- export interface FieldProps {
92
+ export interface FieldProps<TCustomMetadata = unknown> {
93
93
  readonly defaultProvider?: DefaultProvider;
94
94
  readonly key?: string;
95
+ readonly metadata?: FieldSchemaMetadata<TCustomMetadata>;
95
96
  }
96
97
 
97
98
  // @public @sealed
98
- export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes> {
99
+ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types extends ImplicitAllowedTypes = ImplicitAllowedTypes, out TCustomMetadata = unknown> {
99
100
  readonly allowedTypes: Types;
100
101
  get allowedTypeSet(): ReadonlySet<TreeNodeSchema>;
101
102
  readonly kind: Kind;
102
- readonly props?: FieldProps | undefined;
103
+ get metadata(): FieldSchemaMetadata<TCustomMetadata> | undefined;
104
+ readonly props?: FieldProps<TCustomMetadata> | undefined;
103
105
  readonly requiresValue: boolean;
104
106
  protected _typeCheck: MakeNominal;
105
107
  }
106
108
 
109
+ // @public @sealed
110
+ export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
111
+ custom?: TCustomMetadata;
112
+ description?: string | undefined;
113
+ }
114
+
107
115
  // @public
108
116
  export interface FieldSchemaUnsafe<out Kind extends FieldKind, out Types extends Unenforced<ImplicitAllowedTypes>> extends FieldSchema<Kind, any> {
109
117
  readonly allowedTypes: Types;
@@ -563,11 +571,6 @@ type NodeBuilderData<T extends TreeNodeSchema> = T extends TreeNodeSchema<string
563
571
  // @public
564
572
  type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> = T extends TreeNodeSchema<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
565
573
 
566
- // @public
567
- export interface NodeChangedData {
568
- readonly changedProperties?: ReadonlySet<string>;
569
- }
570
-
571
574
  // @public
572
575
  export type NodeFromSchema<T extends TreeNodeSchema> = T extends TreeNodeSchema<string, NodeKind, infer TNode> ? TNode : never;
573
576
 
@@ -679,7 +682,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
679
682
  constructor(scope: TScope);
680
683
  array<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array, TreeArrayNode<T> & WithType<ScopedSchemaName<TScope, `Array<${string}>`>, NodeKind.Array>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, true, T>;
681
684
  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>;
682
- 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>, {
685
+ 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>, {
683
686
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
684
687
  }, false, T>;
685
688
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
@@ -687,7 +690,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
687
690
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
688
691
  map<const T extends TreeNodeSchema | readonly TreeNodeSchema[]>(allowedTypes: T): TreeNodeSchema<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map, TreeMapNode<T> & WithType<ScopedSchemaName<TScope, `Map<${string}>`>, NodeKind.Map>, MapNodeInsertableData<T>, true, T>;
689
692
  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>;
690
- 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>, {
693
+ 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>, {
691
694
  [Symbol.iterator](): Iterator<[
692
695
  string,
693
696
  InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>
@@ -697,9 +700,9 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
697
700
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
698
701
  object<const Name extends TName, const T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>(name: Name, fields: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T>;
699
702
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>>(name: Name, t: T): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & { readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
700
- optional<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Optional, T>;
703
+ optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
701
704
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
702
- required<const T extends ImplicitAllowedTypes>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchema<FieldKind.Required, T>;
705
+ required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
703
706
  requiredRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Required, T>;
704
707
  // (undocumented)
705
708
  readonly scope: TScope;
@@ -779,8 +782,8 @@ export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAl
779
782
  }
780
783
 
781
784
  // @public @sealed
782
- export interface TreeChangeEvents<TNode = TreeNode> {
783
- nodeChanged(data: NodeChangedData & (TNode extends WithType<string, NodeKind.Map | NodeKind.Object> ? Required<Pick<NodeChangedData, "changedProperties">> : unknown)): void;
785
+ export interface TreeChangeEvents {
786
+ nodeChanged(unstable?: unknown): void;
784
787
  treeChanged(): void;
785
788
  }
786
789
 
@@ -823,7 +826,7 @@ export abstract class TreeNode implements WithType {
823
826
  export interface TreeNodeApi {
824
827
  is<TSchema extends ImplicitAllowedTypes>(value: unknown, schema: TSchema): value is TreeNodeFromImplicitAllowedTypes<TSchema>;
825
828
  key(node: TreeNode): string | number;
826
- on<K extends keyof TreeChangeEvents<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: TreeChangeEvents<TNode>[K]): () => void;
829
+ on<K extends keyof TreeChangeEvents>(node: TreeNode, eventName: K, listener: TreeChangeEvents[K]): () => void;
827
830
  parent(node: TreeNode): TreeNode | undefined;
828
831
  schema(node: TreeNode | TreeLeafValue): TreeNodeSchema;
829
832
  shortId(node: TreeNode): number | string | undefined;
@@ -861,7 +864,7 @@ interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind exte
861
864
  }
862
865
 
863
866
  // @public
864
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object>;
867
+ export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
865
868
 
866
869
  // @public
867
870
  export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
@@ -881,6 +884,7 @@ export interface TreeView<TSchema extends ImplicitFieldSchema> extends IDisposab
881
884
  initialize(content: InsertableTreeFieldFromImplicitField<TSchema>): void;
882
885
  get root(): TreeFieldFromImplicitField<TSchema>;
883
886
  set root(newRoot: InsertableTreeFieldFromImplicitField<TSchema>);
887
+ readonly schema: TSchema;
884
888
  upgradeSchema(): void;
885
889
  }
886
890
 
@@ -925,10 +929,10 @@ export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKi
925
929
  }[T["kind"]]>> = true;
926
930
 
927
931
  // @public @sealed
928
- export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind> {
932
+ export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
929
933
  // @deprecated
930
934
  get [typeNameSymbol](): TName;
931
- get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind>;
935
+ get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
932
936
  }
933
937
 
934
938
  ```
package/beta.d.ts ADDED
@@ -0,0 +1,11 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /*
7
+ * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
8
+ * Generated by "flub generate entrypoints" in @fluid-tools/build-cli.
9
+ */
10
+
11
+ export * from "./lib/beta.js";