fluid-framework 2.33.1 → 2.40.0-336023

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.
@@ -15,12 +15,34 @@ 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
19
+ export interface AllowedTypeMetadata {
20
+ readonly custom?: unknown;
21
+ }
22
+
18
23
  // @public @system
19
24
  export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
20
25
 
26
+ // @alpha
27
+ export interface AllowedTypesMetadata {
28
+ readonly custom?: unknown;
29
+ }
30
+
21
31
  // @alpha
22
32
  export function allowUnused<T>(t?: T): void;
23
33
 
34
+ // @alpha
35
+ export interface AnnotatedAllowedType<T extends TreeNodeSchema = TreeNodeSchema> {
36
+ readonly metadata: AllowedTypeMetadata;
37
+ readonly type: LazyItem<T>;
38
+ }
39
+
40
+ // @alpha
41
+ export interface AnnotatedAllowedTypes {
42
+ readonly metadata: AllowedTypesMetadata;
43
+ readonly types: readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[];
44
+ }
45
+
24
46
  // @public @system
25
47
  type ApplyKind<T, Kind extends FieldKind> = {
26
48
  [FieldKind.Required]: T;
@@ -34,7 +56,7 @@ Kind
34
56
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
35
57
 
36
58
  // @alpha @sealed @system
37
- export interface ArrayNodeCustomizableSchema<out TName extends string = string, in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Array, TreeArrayNode<T> & WithType<TName, NodeKind.Array, T>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleArrayNodeSchema<TCustomMetadata> {
59
+ export interface ArrayNodeCustomizableSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Array, TreeArrayNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Array, T>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleArrayNodeSchema<TCustomMetadata> {
38
60
  }
39
61
 
40
62
  // @alpha @sealed @system
@@ -44,7 +66,7 @@ export interface ArrayNodeCustomizableSchemaUnsafe<out TName extends string, in
44
66
  }
45
67
 
46
68
  // @alpha @sealed @system
47
- export interface ArrayNodePojoEmulationSchema<out TName extends string = string, in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaNonClass<TName, NodeKind.Array, TreeArrayNode<T> & WithType<TName, NodeKind.Array, T>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleArrayNodeSchema<TCustomMetadata> {
69
+ export interface ArrayNodePojoEmulationSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaNonClass<TName, NodeKind.Array, TreeArrayNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Array, T>, Iterable<InsertableTreeNodeFromImplicitAllowedTypes<UnannotateImplicitAllowedTypes<T>>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleArrayNodeSchema<TCustomMetadata> {
48
70
  }
49
71
 
50
72
  // @alpha
@@ -185,7 +207,9 @@ export type FactoryContentObject = {
185
207
  };
186
208
 
187
209
  // @public @system
188
- type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSchema<FieldKind.Optional | FieldKind.Identifier> ? true : false;
210
+ type FieldHasDefault<T extends ImplicitFieldSchema> = [T] extends [
211
+ FieldSchema<FieldKind.Optional | FieldKind.Identifier>
212
+ ] ? true : false;
189
213
 
190
214
  // @public
191
215
  export enum FieldKind {
@@ -218,9 +242,13 @@ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types exten
218
242
 
219
243
  // @alpha @sealed
220
244
  export class FieldSchemaAlpha<Kind extends FieldKind = FieldKind, Types extends ImplicitAllowedTypes = ImplicitAllowedTypes, TCustomMetadata = unknown> extends FieldSchema<Kind, Types, TCustomMetadata> implements SimpleFieldSchema {
221
- protected constructor(kind: Kind, allowedTypes: Types, props?: FieldProps<TCustomMetadata>);
245
+ protected constructor(kind: Kind, types: Types, annotatedAllowedTypes: ImplicitAnnotatedAllowedTypes, props?: FieldProps<TCustomMetadata>);
222
246
  // (undocumented)
223
247
  get allowedTypesIdentifiers(): ReadonlySet<string>;
248
+ readonly allowedTypesMetadata: AllowedTypesMetadata;
249
+ // (undocumented)
250
+ readonly annotatedAllowedTypes: ImplicitAnnotatedAllowedTypes;
251
+ get annotatedAllowedTypeSet(): ReadonlyMap<TreeNodeSchema, AllowedTypeMetadata>;
224
252
  }
225
253
 
226
254
  // @alpha @sealed @system
@@ -551,7 +579,6 @@ export const IFluidLoadable: keyof IProvideFluidLoadable;
551
579
 
552
580
  // @public @sealed
553
581
  export interface IFluidLoadable extends IProvideFluidLoadable {
554
- // (undocumented)
555
582
  readonly handle: IFluidHandle;
556
583
  }
557
584
 
@@ -564,6 +591,12 @@ export interface IMember {
564
591
  // @public
565
592
  export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
566
593
 
594
+ // @alpha
595
+ export type ImplicitAnnotatedAllowedTypes = TreeNodeSchema | AnnotatedAllowedType | AnnotatedAllowedTypes | readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[];
596
+
597
+ // @alpha
598
+ export type ImplicitAnnotatedFieldSchema = FieldSchema | ImplicitAnnotatedAllowedTypes;
599
+
567
600
  // @public
568
601
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
569
602
 
@@ -597,6 +630,9 @@ export type InsertableField<TSchema extends ImplicitFieldSchema | UnsafeUnknownS
597
630
  TSchema
598
631
  ] extends [ImplicitFieldSchema] ? InsertableTreeFieldFromImplicitField<TSchema> : [TSchema] extends [UnsafeUnknownSchema] ? InsertableContent | undefined : never;
599
632
 
633
+ // @alpha @system
634
+ export type InsertableObjectFromAnnotatedSchemaRecord<T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>> = InsertableObjectFromSchemaRecord<UnannotateSchemaRecord<T>>;
635
+
600
636
  // @public @system
601
637
  type InsertableObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = RestrictiveStringRecord<ImplicitFieldSchema> extends T ? {
602
638
  arbitraryKey: "arbitraryValue";
@@ -610,12 +646,9 @@ type InsertableObjectFromSchemaRecord<T extends RestrictiveStringRecord<Implicit
610
646
  export type InsertableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : never;
611
647
 
612
648
  // @public @system
613
- export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> = [TList] extends [
614
- readonly [
615
- LazyItem<infer TSchema extends TreeNodeSchema>,
616
- ...infer Rest extends AllowedTypes
617
- ]
618
- ] ? InsertableTypedNode<TSchema> | InsertableTreeNodeFromAllowedTypes<Rest> : never;
649
+ export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> = IsUnion<TList> extends true ? never : {
650
+ readonly [Property in keyof TList]: TList[Property] extends LazyItem<infer TSchema extends TreeNodeSchema> ? InsertableTypedNode<TSchema> : never;
651
+ }[number];
619
652
 
620
653
  // @public
621
654
  export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [
@@ -643,8 +676,7 @@ declare namespace InternalTypes {
643
676
  InsertableObjectFromSchemaRecord,
644
677
  FlexList,
645
678
  FlexListToUnion,
646
- ExtractItemType,
647
- TreeApi
679
+ ExtractItemType
648
680
  }
649
681
  }
650
682
  export { InternalTypes }
@@ -677,7 +709,7 @@ export function isFluidHandle(value: unknown): value is IFluidHandle;
677
709
  // @public
678
710
  export type IsListener<TListener> = TListener extends (...args: any[]) => void ? true : false;
679
711
 
680
- // @alpha @system
712
+ // @public @system
681
713
  export type IsUnion<T, T2 = T> = T extends unknown ? [T2] extends [T] ? false : true : "error";
682
714
 
683
715
  // @public
@@ -838,7 +870,7 @@ export interface MakeNominal {
838
870
  }
839
871
 
840
872
  // @alpha @sealed @system
841
- export interface MapNodeCustomizableSchema<out TName extends string = string, in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Map, TreeMapNode<T> & WithType<TName, NodeKind.Map, T>, MapNodeInsertableData<T>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleMapNodeSchema<TCustomMetadata> {
873
+ export interface MapNodeCustomizableSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Map, TreeMapNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Map, T>, MapNodeInsertableData<UnannotateImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleMapNodeSchema<TCustomMetadata> {
842
874
  }
843
875
 
844
876
  // @alpha @sealed @system
@@ -856,7 +888,7 @@ export interface MapNodeCustomizableSchemaUnsafe<out TName extends string, in ou
856
888
  export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
857
889
 
858
890
  // @alpha @sealed @system
859
- export interface MapNodePojoEmulationSchema<out TName extends string = string, in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaNonClass<TName, NodeKind.Map, TreeMapNode<T> & WithType<TName, NodeKind.Map, T>, MapNodeInsertableData<T>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleMapNodeSchema<TCustomMetadata> {
891
+ export interface MapNodePojoEmulationSchema<out TName extends string = string, in out T extends ImplicitAnnotatedAllowedTypes = ImplicitAnnotatedAllowedTypes, out ImplicitlyConstructable extends boolean = true, out TCustomMetadata = unknown> extends TreeNodeSchemaNonClass<TName, NodeKind.Map, TreeMapNode<UnannotateImplicitAllowedTypes<T>> & WithType<TName, NodeKind.Map, T>, MapNodeInsertableData<UnannotateImplicitAllowedTypes<T>>, ImplicitlyConstructable, T, undefined, TCustomMetadata>, SimpleMapNodeSchema<TCustomMetadata> {
860
892
  }
861
893
 
862
894
  // @alpha
@@ -922,13 +954,13 @@ export type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFie
922
954
  };
923
955
 
924
956
  // @alpha @sealed
925
- export interface ObjectNodeSchema<out TName extends string = string, in out T extends RestrictiveStringRecord<ImplicitFieldSchema> = RestrictiveStringRecord<ImplicitFieldSchema>, ImplicitlyConstructable extends boolean = boolean, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Object, TreeObjectNode<T, TName>, InsertableObjectFromSchemaRecord<T>, ImplicitlyConstructable, T, never, TCustomMetadata>, SimpleObjectNodeSchema<TCustomMetadata> {
957
+ export interface ObjectNodeSchema<out TName extends string = string, in out T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema> = RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>, ImplicitlyConstructable extends boolean = boolean, out TCustomMetadata = unknown> extends TreeNodeSchemaClass<TName, NodeKind.Object, TreeObjectNode<UnannotateSchemaRecord<T>, TName>, InsertableObjectFromAnnotatedSchemaRecord<T>, ImplicitlyConstructable, T, never, TCustomMetadata>, SimpleObjectNodeSchema<TCustomMetadata> {
926
958
  readonly fields: ReadonlyMap<string, FieldSchemaAlpha & SimpleObjectFieldSchema>;
927
959
  }
928
960
 
929
961
  // @alpha (undocumented)
930
962
  export const ObjectNodeSchema: {
931
- readonly [Symbol.hasInstance]: (value: TreeNodeSchema) => value is ObjectNodeSchema<string, RestrictiveStringRecord<ImplicitFieldSchema>, boolean, unknown>;
963
+ readonly [Symbol.hasInstance]: (value: TreeNodeSchema) => value is ObjectNodeSchema<string, RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>, boolean, unknown>;
932
964
  };
933
965
 
934
966
  // @public
@@ -1083,19 +1115,25 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
1083
1115
 
1084
1116
  // @alpha
1085
1117
  export class SchemaFactoryAlpha<out TScope extends string | undefined = string | undefined, TName extends number | string = string> extends SchemaFactory<TScope, TName> {
1086
- arrayAlpha<const Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): ArrayNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1118
+ arrayAlpha<const Name extends TName, const T extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): ArrayNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1087
1119
  arrayRecursive<const Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): ArrayNodeCustomizableSchemaUnsafe<ScopedSchemaName<TScope, Name>, T, TCustomMetadata>;
1088
1120
  static readonly identifier: <const TCustomMetadata = unknown>(props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlpha_2<FieldKind_2.Identifier, LeafSchema_2<"string", string> & SimpleLeafNodeSchema_2, TCustomMetadata>;
1089
1121
  static readonly leaves: readonly [LeafSchema_2<"string", string> & SimpleLeafNodeSchema_2, LeafSchema_2<"number", number> & SimpleLeafNodeSchema_2, LeafSchema_2<"boolean", boolean> & SimpleLeafNodeSchema_2, LeafSchema_2<"null", null> & SimpleLeafNodeSchema_2, LeafSchema_2<"handle", IFluidHandle_2<unknown>> & SimpleLeafNodeSchema_2];
1090
- mapAlpha<Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): MapNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1122
+ mapAlpha<Name extends TName, const T extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): MapNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1091
1123
  mapRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptions<TCustomMetadata>): MapNodeCustomizableSchemaUnsafe<ScopedSchemaName<TScope, Name>, T, TCustomMetadata>;
1092
- object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: SchemaFactoryObjectOptions<TCustomMetadata>): ObjectNodeSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata> & {
1124
+ objectAlpha<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: SchemaFactoryObjectOptions<TCustomMetadata>): ObjectNodeSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata> & {
1093
1125
  readonly createFromInsertable: unknown;
1094
1126
  };
1095
1127
  objectRecursive<const Name extends TName, const T extends RestrictiveStringRecord<System_Unsafe.ImplicitFieldSchemaUnsafe>, const TCustomMetadata = unknown>(name: Name, t: T, options?: SchemaFactoryObjectOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, System_Unsafe.TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & System_Unsafe.InsertableObjectFromSchemaRecordUnsafe<T>, false, T, never, TCustomMetadata> & SimpleObjectNodeSchema<TCustomMetadata> & Pick<ObjectNodeSchema, "fields">;
1096
- static readonly optional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlpha_2<FieldKind_2.Optional, T, TCustomMetadata>;
1128
+ static readonly optional: {
1129
+ <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Optional, T, TCustomMetadata>;
1130
+ <const T_1 extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata_1 = unknown>(t: T_1, props?: Omit<FieldProps_2<TCustomMetadata_1>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Optional, UnannotateImplicitAllowedTypes_2<T_1>, TCustomMetadata_1>;
1131
+ };
1097
1132
  static readonly optionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlphaUnsafe_2<FieldKind_2.Optional, T, TCustomMetadata>;
1098
- static readonly required: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlpha_2<FieldKind_2.Required, T, TCustomMetadata>;
1133
+ static readonly required: {
1134
+ <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps_2<TCustomMetadata>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Required, T, TCustomMetadata>;
1135
+ <const T_1 extends ImplicitAnnotatedAllowedTypes, const TCustomMetadata_1 = unknown>(t: T_1, props?: Omit<FieldProps_2<TCustomMetadata_1>, "defaultProvider"> | undefined): FieldSchemaAlpha_2<FieldKind_2.Required, UnannotateImplicitAllowedTypes_2<T_1>, TCustomMetadata_1>;
1136
+ };
1099
1137
  scopedFactory<const T extends TName, TNameInner extends number | string = string>(name: T): SchemaFactoryAlpha<ScopedSchemaName<TScope, T>, TNameInner>;
1100
1138
  }
1101
1139
 
@@ -1239,14 +1277,9 @@ export namespace System_Unsafe {
1239
1277
  // @system
1240
1278
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchemaInput extends ImplicitFieldSchemaUnsafe, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema> : never;
1241
1279
  // @system
1242
- export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> = [
1243
- TList
1244
- ] extends [
1245
- readonly [
1246
- LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
1247
- ...infer Rest extends AllowedTypesUnsafe
1248
- ]
1249
- ] ? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest> : never;
1280
+ export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> = IsUnion<TList> extends true ? never : {
1281
+ readonly [Property in keyof TList]: TList[Property] extends LazyItem<infer TSchema extends TreeNodeSchemaUnsafe> ? InsertableTypedNodeUnsafe<TSchema> : never;
1282
+ }[number];
1250
1283
  // @system
1251
1284
  export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends ImplicitAllowedTypesUnsafe> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
1252
1285
  // @system
@@ -1348,33 +1381,36 @@ export interface TransactionResultSuccess<TSuccessValue> {
1348
1381
  // @public
1349
1382
  export type TransformedEvent<TThis, E, A extends any[]> = (event: E, listener: (...args: ReplaceIEventThisPlaceHolder<A, TThis>) => void) => TThis;
1350
1383
 
1384
+ // @public @sealed @system
1385
+ export interface Tree extends TreeNodeApi {
1386
+ contains(node: TreeNode, other: TreeNode): boolean;
1387
+ readonly runTransaction: RunTransaction;
1388
+ }
1389
+
1351
1390
  // @public
1352
- export const Tree: TreeApi;
1391
+ export const Tree: Tree;
1353
1392
 
1354
- // @alpha @sealed
1355
- export const TreeAlpha: {
1393
+ // @alpha @sealed @system
1394
+ export interface TreeAlpha {
1356
1395
  branch(node: TreeNode): TreeBranch | undefined;
1357
1396
  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>;
1358
- 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>;
1359
- importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<TreeEncodingOptions>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1360
- exportConcise(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): ConciseTree;
1361
- exportConcise(node: TreeNode | TreeLeafValue | undefined, options?: TreeEncodingOptions): ConciseTree | undefined;
1362
- exportVerbose(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): VerboseTree;
1363
1397
  exportCompressed(tree: TreeNode | TreeLeafValue, options: {
1364
1398
  oldestCompatibleClient: FluidClientVersion;
1365
1399
  idCompressor?: IIdCompressor;
1366
1400
  }): JsonCompatible<IFluidHandle>;
1401
+ exportConcise(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): ConciseTree;
1402
+ exportConcise(node: TreeNode | TreeLeafValue | undefined, options?: TreeEncodingOptions): ConciseTree | undefined;
1403
+ exportVerbose(node: TreeNode | TreeLeafValue, options?: TreeEncodingOptions): VerboseTree;
1367
1404
  importCompressed<const TSchema extends ImplicitFieldSchema>(schema: TSchema, compressedData: JsonCompatible<IFluidHandle>, options: {
1368
1405
  idCompressor?: IIdCompressor;
1369
1406
  } & ICodecOptions): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1370
- };
1371
-
1372
- // @public @sealed @system
1373
- interface TreeApi extends TreeNodeApi {
1374
- contains(node: TreeNode, other: TreeNode): boolean;
1375
- readonly runTransaction: RunTransaction;
1407
+ 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>;
1408
+ importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<TreeEncodingOptions>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1376
1409
  }
1377
1410
 
1411
+ // @alpha
1412
+ export const TreeAlpha: TreeAlpha;
1413
+
1378
1414
  // @public @sealed
1379
1415
  export interface TreeArrayNode<TAllowedTypes extends System_Unsafe.ImplicitAllowedTypesUnsafe = ImplicitAllowedTypes, out T = [TAllowedTypes] extends [ImplicitAllowedTypes] ? TreeNodeFromImplicitAllowedTypes<TAllowedTypes> : TreeNodeFromImplicitAllowedTypes<ImplicitAllowedTypes>, in TNew = [TAllowedTypes] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes> : InsertableTreeNodeFromImplicitAllowedTypes<ImplicitAllowedTypes>, in TMoveFrom = ReadonlyArrayNode> extends ReadonlyArrayNode<T> {
1380
1416
  insertAt(index: number, ...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
@@ -1402,11 +1438,14 @@ export const TreeArrayNode: {
1402
1438
  readonly spread: <T>(content: Iterable<T>) => IterableTreeArrayContent<T>;
1403
1439
  };
1404
1440
 
1405
- // @beta @sealed
1406
- export const TreeBeta: {
1407
- on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
1441
+ // @beta @sealed @system
1442
+ export interface TreeBeta {
1408
1443
  clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
1409
- };
1444
+ on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
1445
+ }
1446
+
1447
+ // @beta
1448
+ export const TreeBeta: TreeBeta;
1410
1449
 
1411
1450
  // @alpha @sealed
1412
1451
  export interface TreeBranch extends IDisposable {
@@ -1611,6 +1650,31 @@ const typeNameSymbol: unique symbol;
1611
1650
  // @public @system
1612
1651
  export const typeSchemaSymbol: unique symbol;
1613
1652
 
1653
+ // @alpha @system
1654
+ export type UnannotateAllowedType<T extends AnnotatedAllowedType> = T extends AnnotatedAllowedType<infer X> ? [X] : T;
1655
+
1656
+ // @alpha @system
1657
+ export type UnannotateAllowedTypeOrLazyItem<T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>> = T extends AnnotatedAllowedType<infer X> ? X : T;
1658
+
1659
+ // @alpha @system
1660
+ export type UnannotateAllowedTypes<T extends AnnotatedAllowedTypes> = UnannotateAllowedTypesList<T["types"]>;
1661
+
1662
+ // @alpha @system
1663
+ export type UnannotateAllowedTypesList<T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]> = {
1664
+ [I in keyof T]: UnannotateAllowedTypeOrLazyItem<T[I]>;
1665
+ };
1666
+
1667
+ // @alpha @system
1668
+ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTypes> = T extends AnnotatedAllowedTypes ? UnannotateAllowedTypes<T> : T extends AnnotatedAllowedType ? UnannotateAllowedType<T> : T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[] ? UnannotateAllowedTypesList<T> : T extends TreeNodeSchema ? T : never;
1669
+
1670
+ // @alpha @system
1671
+ export type UnannotateImplicitFieldSchema<T extends ImplicitAnnotatedFieldSchema> = T extends ImplicitAnnotatedAllowedTypes ? UnannotateImplicitAllowedTypes<T> : T;
1672
+
1673
+ // @alpha @system
1674
+ export type UnannotateSchemaRecord<T extends RestrictiveStringRecord<ImplicitAnnotatedFieldSchema>> = {
1675
+ readonly [P in Extract<keyof T, string>]: UnannotateImplicitFieldSchema<T[P]>;
1676
+ };
1677
+
1614
1678
  // @public
1615
1679
  export type Unenforced<_DesiredExtendsConstraint> = unknown;
1616
1680
 
@@ -1630,15 +1694,20 @@ export const UnsafeUnknownSchema: unique symbol;
1630
1694
  export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
1631
1695
 
1632
1696
  // @public
1633
- export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1697
+ export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
1698
+
1699
+ // @public @system
1700
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1634
1701
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
1635
1702
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
1636
1703
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
1704
+ [NodeKind.Leaf]: unknown;
1637
1705
  }[T["kind"]], false, {
1638
1706
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
1639
1707
  [NodeKind.Array]: ImplicitAllowedTypes;
1640
1708
  [NodeKind.Map]: ImplicitAllowedTypes;
1641
- }[T["kind"]]>> = true;
1709
+ [NodeKind.Leaf]: unknown;
1710
+ }[T["kind"]]>;
1642
1711
 
1643
1712
  // @alpha
1644
1713
  export enum ValueSchema {
@@ -81,7 +81,9 @@ export abstract class ErasedType<out Name = unknown> {
81
81
  type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
82
82
 
83
83
  // @public @system
84
- type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSchema<FieldKind.Optional | FieldKind.Identifier> ? true : false;
84
+ type FieldHasDefault<T extends ImplicitFieldSchema> = [T] extends [
85
+ FieldSchema<FieldKind.Optional | FieldKind.Identifier>
86
+ ] ? true : false;
85
87
 
86
88
  // @public
87
89
  export enum FieldKind {
@@ -380,7 +382,6 @@ export const IFluidLoadable: keyof IProvideFluidLoadable;
380
382
 
381
383
  // @public @sealed
382
384
  export interface IFluidLoadable extends IProvideFluidLoadable {
383
- // (undocumented)
384
385
  readonly handle: IFluidHandle;
385
386
  }
386
387
 
@@ -420,12 +421,9 @@ type InsertableObjectFromSchemaRecord<T extends RestrictiveStringRecord<Implicit
420
421
  export type InsertableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : never;
421
422
 
422
423
  // @public @system
423
- export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> = [TList] extends [
424
- readonly [
425
- LazyItem<infer TSchema extends TreeNodeSchema>,
426
- ...infer Rest extends AllowedTypes
427
- ]
428
- ] ? InsertableTypedNode<TSchema> | InsertableTreeNodeFromAllowedTypes<Rest> : never;
424
+ export type InsertableTreeNodeFromAllowedTypes<TList extends AllowedTypes> = IsUnion<TList> extends true ? never : {
425
+ readonly [Property in keyof TList]: TList[Property] extends LazyItem<infer TSchema extends TreeNodeSchema> ? InsertableTypedNode<TSchema> : never;
426
+ }[number];
429
427
 
430
428
  // @public
431
429
  export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [
@@ -453,8 +451,7 @@ declare namespace InternalTypes {
453
451
  InsertableObjectFromSchemaRecord,
454
452
  FlexList,
455
453
  FlexListToUnion,
456
- ExtractItemType,
457
- TreeApi
454
+ ExtractItemType
458
455
  }
459
456
  }
460
457
  export { InternalTypes }
@@ -487,6 +484,9 @@ export function isFluidHandle(value: unknown): value is IFluidHandle;
487
484
  // @public
488
485
  export type IsListener<TListener> = TListener extends (...args: any[]) => void ? true : false;
489
486
 
487
+ // @public @system
488
+ export type IsUnion<T, T2 = T> = T extends unknown ? [T2] extends [T] ? false : true : "error";
489
+
490
490
  // @public
491
491
  export interface ITelemetryBaseProperties {
492
492
  [index: string]: TelemetryBaseEventPropertyType | Tagged<TelemetryBaseEventPropertyType>;
@@ -764,14 +764,9 @@ export namespace System_Unsafe {
764
764
  // @system
765
765
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchemaInput extends ImplicitFieldSchemaUnsafe, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema> : never;
766
766
  // @system
767
- export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> = [
768
- TList
769
- ] extends [
770
- readonly [
771
- LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
772
- ...infer Rest extends AllowedTypesUnsafe
773
- ]
774
- ] ? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest> : never;
767
+ export type InsertableTreeNodeFromAllowedTypesUnsafe<TList extends AllowedTypesUnsafe> = IsUnion<TList> extends true ? never : {
768
+ readonly [Property in keyof TList]: TList[Property] extends LazyItem<infer TSchema extends TreeNodeSchemaUnsafe> ? InsertableTypedNodeUnsafe<TSchema> : never;
769
+ }[number];
775
770
  // @system
776
771
  export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends ImplicitAllowedTypesUnsafe> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
777
772
  // @system
@@ -844,15 +839,15 @@ export type TransactionConstraint = NodeInDocumentConstraint;
844
839
  // @public
845
840
  export type TransformedEvent<TThis, E, A extends any[]> = (event: E, listener: (...args: ReplaceIEventThisPlaceHolder<A, TThis>) => void) => TThis;
846
841
 
847
- // @public
848
- export const Tree: TreeApi;
849
-
850
842
  // @public @sealed @system
851
- interface TreeApi extends TreeNodeApi {
843
+ export interface Tree extends TreeNodeApi {
852
844
  contains(node: TreeNode, other: TreeNode): boolean;
853
845
  readonly runTransaction: RunTransaction;
854
846
  }
855
847
 
848
+ // @public
849
+ export const Tree: Tree;
850
+
856
851
  // @public @sealed
857
852
  export interface TreeArrayNode<TAllowedTypes extends System_Unsafe.ImplicitAllowedTypesUnsafe = ImplicitAllowedTypes, out T = [TAllowedTypes] extends [ImplicitAllowedTypes] ? TreeNodeFromImplicitAllowedTypes<TAllowedTypes> : TreeNodeFromImplicitAllowedTypes<ImplicitAllowedTypes>, in TNew = [TAllowedTypes] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes> : InsertableTreeNodeFromImplicitAllowedTypes<ImplicitAllowedTypes>, in TMoveFrom = ReadonlyArrayNode> extends ReadonlyArrayNode<T> {
858
853
  insertAt(index: number, ...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
@@ -880,11 +875,14 @@ export const TreeArrayNode: {
880
875
  readonly spread: <T>(content: Iterable<T>) => IterableTreeArrayContent<T>;
881
876
  };
882
877
 
883
- // @beta @sealed
884
- export const TreeBeta: {
885
- on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
878
+ // @beta @sealed @system
879
+ export interface TreeBeta {
886
880
  clone<const TSchema extends ImplicitFieldSchema>(node: TreeFieldFromImplicitField<TSchema>): TreeFieldFromImplicitField<TSchema>;
887
- };
881
+ on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>): () => void;
882
+ }
883
+
884
+ // @beta
885
+ export const TreeBeta: TreeBeta;
888
886
 
889
887
  // @public @sealed
890
888
  export interface TreeChangeEvents {
@@ -1020,15 +1018,20 @@ export type Unhydrated<T> = T;
1020
1018
  export type UnionToIntersection<T> = (T extends T ? (k: T) => unknown : never) extends (k: infer U) => unknown ? U : never;
1021
1019
 
1022
1020
  // @public
1023
- export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1021
+ export type ValidateRecursiveSchema<T extends ValidateRecursiveSchemaTemplate<T>> = true;
1022
+
1023
+ // @public @system
1024
+ export type ValidateRecursiveSchemaTemplate<T extends TreeNodeSchema> = TreeNodeSchema<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1024
1025
  [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
1025
1026
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
1026
1027
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
1028
+ [NodeKind.Leaf]: unknown;
1027
1029
  }[T["kind"]], false, {
1028
1030
  [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
1029
1031
  [NodeKind.Array]: ImplicitAllowedTypes;
1030
1032
  [NodeKind.Map]: ImplicitAllowedTypes;
1031
- }[T["kind"]]>> = true;
1033
+ [NodeKind.Leaf]: unknown;
1034
+ }[T["kind"]]>;
1032
1035
 
1033
1036
  // @public @sealed @system
1034
1037
  export interface ViewableTree {