fluid-framework 2.4.0-294316 → 2.4.0-297385

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.
@@ -108,8 +108,8 @@ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types exten
108
108
 
109
109
  // @public @sealed
110
110
  export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
111
- custom?: TCustomMetadata;
112
- description?: string | undefined;
111
+ readonly custom?: TCustomMetadata;
112
+ readonly description?: string | undefined;
113
113
  }
114
114
 
115
115
  // @public
@@ -142,7 +142,13 @@ export type FluidObject<T = unknown> = {
142
142
  export type FluidObjectProviderKeys<T, TProp extends keyof T = keyof T> = string extends TProp ? never : number extends TProp ? never : TProp extends keyof Required<T>[TProp] ? Required<T>[TProp] extends Required<Required<T>[TProp]>[TProp] ? TProp : never : never;
143
143
 
144
144
  // @alpha
145
- export function getJsonSchema(schema: ImplicitAllowedTypes): JsonTreeSchema;
145
+ export function getBranch(tree: ITree): TreeBranch;
146
+
147
+ // @alpha
148
+ export function getBranch(view: TreeView<ImplicitFieldSchema>): TreeBranch;
149
+
150
+ // @alpha
151
+ export function getJsonSchema(schema: ImplicitFieldSchema): JsonTreeSchema;
146
152
 
147
153
  // @public
148
154
  export interface IConnection {
@@ -412,14 +418,14 @@ export type InitialObjects<T extends ContainerSchema> = {
412
418
  type _InlineTrick = 0;
413
419
 
414
420
  // @public
415
- type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = FlattenKeys<{
416
- readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property]>;
421
+ type InsertableObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = FlattenKeys<{
422
+ readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property] & string>;
417
423
  } & {
418
- readonly [Property in keyof T as FieldHasDefault<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property]>;
424
+ readonly [Property in keyof T as FieldHasDefault<T[Property] & string> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property] & string>;
419
425
  }>;
420
426
 
421
427
  // @public
422
- export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
428
+ export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
423
429
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
424
430
  } & {
425
431
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends true ? Property : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
@@ -460,7 +466,6 @@ declare namespace InternalTypes {
460
466
  ApplyKind,
461
467
  NodeBuilderData,
462
468
  FieldHasDefault,
463
- TreeNodeSchemaNonClass,
464
469
  TreeArrayNodeBase,
465
470
  ScopedSchemaName,
466
471
  DefaultProvider,
@@ -528,8 +533,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
528
533
  }
529
534
 
530
535
  // @public @sealed
531
- export interface ITree extends IFluidLoadable {
532
- viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
536
+ export interface ITree extends ViewableTree, IFluidLoadable {
533
537
  }
534
538
 
535
539
  // @public
@@ -623,7 +627,7 @@ export interface MakeNominal {
623
627
  }
624
628
 
625
629
  // @public
626
- export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveReadonlyRecord<string, InsertableTreeNodeFromImplicitAllowedTypes<T>>;
630
+ export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
627
631
 
628
632
  // @public
629
633
  export type MemberChangedListener<M extends IMember> = (clientId: string, member: M) => void;
@@ -667,12 +671,12 @@ export enum NodeKind {
667
671
  }
668
672
 
669
673
  // @public
670
- type ObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = {
671
- -readonly [Property in keyof T]: TreeFieldFromImplicitField<T[Property]>;
674
+ type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = {
675
+ -readonly [Property in keyof T]: Property extends string ? TreeFieldFromImplicitField<T[Property]> : unknown;
672
676
  };
673
677
 
674
678
  // @public
675
- type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
679
+ type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
676
680
  -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
677
681
  };
678
682
 
@@ -700,11 +704,18 @@ export type ReplaceIEventThisPlaceHolder<L extends any[], TThis> = L extends any
700
704
  [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K];
701
705
  } : L;
702
706
 
703
- // @public
707
+ // @public @deprecated
704
708
  export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
705
709
  readonly [P in symbol | string]: P extends K ? T : never;
706
710
  };
707
711
 
712
+ // @public
713
+ export type RestrictiveStringRecord<T> = {
714
+ readonly [P in string]: T;
715
+ } & {
716
+ readonly [P in symbol]?: never;
717
+ };
718
+
708
719
  // @public @sealed
709
720
  export interface Revertible {
710
721
  dispose(): void;
@@ -753,7 +764,7 @@ export interface SchemaCompatibilityStatus {
753
764
  // @public @sealed
754
765
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
755
766
  constructor(scope: TScope);
756
- 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>;
767
+ 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>;
757
768
  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>;
758
769
  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>, {
759
770
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
@@ -761,7 +772,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
761
772
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
762
773
  readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
763
774
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
764
- 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>;
775
+ 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>;
765
776
  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>;
766
777
  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>, {
767
778
  [Symbol.iterator](): Iterator<[
@@ -771,8 +782,8 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
771
782
  }, false, T>;
772
783
  readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
773
784
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
774
- 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>;
775
- 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>;
785
+ 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>;
786
+ 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]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
776
787
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
777
788
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
778
789
  required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
@@ -835,14 +846,14 @@ interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom> extends ReadonlyArray<
835
846
  insertAtStart(...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
836
847
  moveRangeToEnd(sourceStart: number, sourceEnd: number): void;
837
848
  moveRangeToEnd(sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
838
- moveRangeToIndex(index: number, sourceStart: number, sourceEnd: number): void;
839
- moveRangeToIndex(index: number, sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
849
+ moveRangeToIndex(destinationGap: number, sourceStart: number, sourceEnd: number): void;
850
+ moveRangeToIndex(destinationGap: number, sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
840
851
  moveRangeToStart(sourceStart: number, sourceEnd: number): void;
841
852
  moveRangeToStart(sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
842
853
  moveToEnd(sourceIndex: number): void;
843
854
  moveToEnd(sourceIndex: number, source: TMoveFrom): void;
844
- moveToIndex(index: number, sourceIndex: number): void;
845
- moveToIndex(index: number, sourceIndex: number, source: TMoveFrom): void;
855
+ moveToIndex(destinationGap: number, sourceIndex: number): void;
856
+ moveToIndex(destinationGap: number, sourceIndex: number, source: TMoveFrom): void;
846
857
  moveToStart(sourceIndex: number): void;
847
858
  moveToStart(sourceIndex: number, source: TMoveFrom): void;
848
859
  removeAt(index: number): void;
@@ -859,6 +870,19 @@ export const TreeBeta: {
859
870
  readonly on: <K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(node: TNode, eventName: K, listener: NoInfer<TreeChangeEventsBeta<TNode>[K]>) => () => void;
860
871
  };
861
872
 
873
+ // @alpha @sealed
874
+ export interface TreeBranch extends ViewableTree {
875
+ branch(): TreeBranchFork;
876
+ merge(branch: TreeBranchFork): void;
877
+ merge(branch: TreeBranchFork, disposeMerged: boolean): void;
878
+ rebase(branch: TreeBranchFork): void;
879
+ }
880
+
881
+ // @alpha @sealed
882
+ export interface TreeBranchFork extends TreeBranch, IDisposable {
883
+ rebaseOnto(branch: TreeBranch): void;
884
+ }
885
+
862
886
  // @public @sealed
863
887
  export interface TreeChangeEvents {
864
888
  nodeChanged(unstable?: unknown): void;
@@ -933,6 +957,7 @@ export interface TreeNodeSchemaClass<out Name extends string = string, out Kind
933
957
 
934
958
  // @public @sealed
935
959
  export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
960
+ readonly childTypes: ReadonlySet<TreeNodeSchema>;
936
961
  readonly identifier: Name;
937
962
  readonly implicitlyConstructable: ImplicitlyConstructable;
938
963
  readonly info: Info;
@@ -941,16 +966,16 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
941
966
  }
942
967
 
943
968
  // @public @sealed
944
- interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode = unknown, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
969
+ export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode = unknown, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
945
970
  // (undocumented)
946
971
  create(data: TInsertable): TNode;
947
972
  }
948
973
 
949
974
  // @public
950
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
975
+ export type TreeObjectNode<T extends RestrictiveStringRecord<ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
951
976
 
952
977
  // @public
953
- export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
978
+ export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
954
979
 
955
980
  // @public
956
981
  export enum TreeStatus {
@@ -1002,15 +1027,20 @@ export type Unhydrated<T> = T;
1002
1027
 
1003
1028
  // @public
1004
1029
  export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
1005
- [NodeKind.Object]: T["info"] extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
1030
+ [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
1006
1031
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
1007
1032
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
1008
1033
  }[T["kind"]], false, {
1009
- [NodeKind.Object]: RestrictiveReadonlyRecord<string, ImplicitFieldSchema>;
1034
+ [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
1010
1035
  [NodeKind.Array]: ImplicitAllowedTypes;
1011
1036
  [NodeKind.Map]: ImplicitAllowedTypes;
1012
1037
  }[T["kind"]]>> = true;
1013
1038
 
1039
+ // @public @sealed
1040
+ export interface ViewableTree {
1041
+ viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
1042
+ }
1043
+
1014
1044
  // @public @sealed
1015
1045
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
1016
1046
  // @deprecated
@@ -108,8 +108,8 @@ export class FieldSchema<out Kind extends FieldKind = FieldKind, out Types exten
108
108
 
109
109
  // @public @sealed
110
110
  export interface FieldSchemaMetadata<TCustomMetadata = unknown> {
111
- custom?: TCustomMetadata;
112
- description?: string | undefined;
111
+ readonly custom?: TCustomMetadata;
112
+ readonly description?: string | undefined;
113
113
  }
114
114
 
115
115
  // @public
@@ -406,14 +406,14 @@ export type InitialObjects<T extends ContainerSchema> = {
406
406
  type _InlineTrick = 0;
407
407
 
408
408
  // @public
409
- type InsertableObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = FlattenKeys<{
410
- readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property]>;
409
+ type InsertableObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = FlattenKeys<{
410
+ readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<T[Property] & string>;
411
411
  } & {
412
- readonly [Property in keyof T as FieldHasDefault<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property]>;
412
+ readonly [Property in keyof T as FieldHasDefault<T[Property] & string> extends false ? Property : never]: InsertableTreeFieldFromImplicitField<T[Property] & string>;
413
413
  }>;
414
414
 
415
415
  // @public
416
- export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
416
+ export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
417
417
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends false ? Property : never]: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
418
418
  } & {
419
419
  readonly [Property in keyof T as FieldHasDefaultUnsafe<T[Property]> extends true ? Property : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
@@ -454,7 +454,6 @@ declare namespace InternalTypes {
454
454
  ApplyKind,
455
455
  NodeBuilderData,
456
456
  FieldHasDefault,
457
- TreeNodeSchemaNonClass,
458
457
  TreeArrayNodeBase,
459
458
  ScopedSchemaName,
460
459
  DefaultProvider,
@@ -522,8 +521,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
522
521
  }
523
522
 
524
523
  // @public @sealed
525
- export interface ITree extends IFluidLoadable {
526
- viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
524
+ export interface ITree extends ViewableTree, IFluidLoadable {
527
525
  }
528
526
 
529
527
  // @public
@@ -555,7 +553,7 @@ export interface MakeNominal {
555
553
  }
556
554
 
557
555
  // @public
558
- export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveReadonlyRecord<string, InsertableTreeNodeFromImplicitAllowedTypes<T>>;
556
+ export type MapNodeInsertableData<T extends ImplicitAllowedTypes> = Iterable<readonly [string, InsertableTreeNodeFromImplicitAllowedTypes<T>]> | RestrictiveStringRecord<InsertableTreeNodeFromImplicitAllowedTypes<T>>;
559
557
 
560
558
  // @public
561
559
  export type MemberChangedListener<M extends IMember> = (clientId: string, member: M) => void;
@@ -599,12 +597,12 @@ export enum NodeKind {
599
597
  }
600
598
 
601
599
  // @public
602
- type ObjectFromSchemaRecord<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>> = {
603
- -readonly [Property in keyof T]: TreeFieldFromImplicitField<T[Property]>;
600
+ type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = {
601
+ -readonly [Property in keyof T]: Property extends string ? TreeFieldFromImplicitField<T[Property]> : unknown;
604
602
  };
605
603
 
606
604
  // @public
607
- type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>> = {
605
+ type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
608
606
  -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
609
607
  };
610
608
 
@@ -632,11 +630,18 @@ export type ReplaceIEventThisPlaceHolder<L extends any[], TThis> = L extends any
632
630
  [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K];
633
631
  } : L;
634
632
 
635
- // @public
633
+ // @public @deprecated
636
634
  export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
637
635
  readonly [P in symbol | string]: P extends K ? T : never;
638
636
  };
639
637
 
638
+ // @public
639
+ export type RestrictiveStringRecord<T> = {
640
+ readonly [P in string]: T;
641
+ } & {
642
+ readonly [P in symbol]?: never;
643
+ };
644
+
640
645
  // @public @sealed
641
646
  export interface Revertible {
642
647
  dispose(): void;
@@ -685,7 +690,7 @@ export interface SchemaCompatibilityStatus {
685
690
  // @public @sealed
686
691
  export class SchemaFactory<out TScope extends string | undefined = string | undefined, TName extends number | string = string> {
687
692
  constructor(scope: TScope);
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>;
693
+ 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>;
689
694
  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>;
690
695
  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>, {
691
696
  [Symbol.iterator](): Iterator<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<T>>;
@@ -693,7 +698,7 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
693
698
  readonly boolean: TreeNodeSchema<"com.fluidframework.leaf.boolean", NodeKind.Leaf, boolean, boolean>;
694
699
  readonly handle: TreeNodeSchema<"com.fluidframework.leaf.handle", NodeKind.Leaf, IFluidHandle<unknown>, IFluidHandle<unknown>>;
695
700
  get identifier(): FieldSchema<FieldKind.Identifier, typeof SchemaFactory.string>;
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>;
701
+ 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>;
697
702
  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>;
698
703
  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>, {
699
704
  [Symbol.iterator](): Iterator<[
@@ -703,8 +708,8 @@ export class SchemaFactory<out TScope extends string | undefined = string | unde
703
708
  }, false, T>;
704
709
  readonly null: TreeNodeSchema<"com.fluidframework.leaf.null", NodeKind.Leaf, null, null>;
705
710
  readonly number: TreeNodeSchema<"com.fluidframework.leaf.number", NodeKind.Leaf, number, number>;
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>;
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>;
711
+ 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>;
712
+ 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]>; } & { readonly [Property_1 in keyof T as FieldHasDefaultUnsafe<T[Property_1]> extends true ? Property_1 : never]?: InsertableTreeFieldFromImplicitFieldUnsafe<T[Property_1]> | undefined; }, false, T>;
708
713
  optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
709
714
  optionalRecursive<const T extends Unenforced<ImplicitAllowedTypes>>(t: T, props?: Omit<FieldProps, "defaultProvider">): FieldSchemaUnsafe<FieldKind.Optional, T>;
710
715
  required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">): FieldSchema<FieldKind.Required, T, TCustomMetadata>;
@@ -767,14 +772,14 @@ interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom> extends ReadonlyArray<
767
772
  insertAtStart(...value: readonly (TNew | IterableTreeArrayContent<TNew>)[]): void;
768
773
  moveRangeToEnd(sourceStart: number, sourceEnd: number): void;
769
774
  moveRangeToEnd(sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
770
- moveRangeToIndex(index: number, sourceStart: number, sourceEnd: number): void;
771
- moveRangeToIndex(index: number, sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
775
+ moveRangeToIndex(destinationGap: number, sourceStart: number, sourceEnd: number): void;
776
+ moveRangeToIndex(destinationGap: number, sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
772
777
  moveRangeToStart(sourceStart: number, sourceEnd: number): void;
773
778
  moveRangeToStart(sourceStart: number, sourceEnd: number, source: TMoveFrom): void;
774
779
  moveToEnd(sourceIndex: number): void;
775
780
  moveToEnd(sourceIndex: number, source: TMoveFrom): void;
776
- moveToIndex(index: number, sourceIndex: number): void;
777
- moveToIndex(index: number, sourceIndex: number, source: TMoveFrom): void;
781
+ moveToIndex(destinationGap: number, sourceIndex: number): void;
782
+ moveToIndex(destinationGap: number, sourceIndex: number, source: TMoveFrom): void;
778
783
  moveToStart(sourceIndex: number): void;
779
784
  moveToStart(sourceIndex: number, source: TMoveFrom): void;
780
785
  removeAt(index: number): void;
@@ -865,6 +870,7 @@ export interface TreeNodeSchemaClass<out Name extends string = string, out Kind
865
870
 
866
871
  // @public @sealed
867
872
  export interface TreeNodeSchemaCore<out Name extends string, out Kind extends NodeKind, out ImplicitlyConstructable extends boolean, out Info = unknown> {
873
+ readonly childTypes: ReadonlySet<TreeNodeSchema>;
868
874
  readonly identifier: Name;
869
875
  readonly implicitlyConstructable: ImplicitlyConstructable;
870
876
  readonly info: Info;
@@ -873,16 +879,16 @@ export interface TreeNodeSchemaCore<out Name extends string, out Kind extends No
873
879
  }
874
880
 
875
881
  // @public @sealed
876
- interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode = unknown, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
882
+ export interface TreeNodeSchemaNonClass<out Name extends string = string, out Kind extends NodeKind = NodeKind, out TNode = unknown, in TInsertable = never, out ImplicitlyConstructable extends boolean = boolean, out Info = unknown> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
877
883
  // (undocumented)
878
884
  create(data: TInsertable): TNode;
879
885
  }
880
886
 
881
887
  // @public
882
- export type TreeObjectNode<T extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
888
+ export type TreeObjectNode<T extends RestrictiveStringRecord<ImplicitFieldSchema>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecord<T> & WithType<TypeName, NodeKind.Object, T>;
883
889
 
884
890
  // @public
885
- export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveReadonlyRecord<string, ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
891
+ export type TreeObjectNodeUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>, TypeName extends string = string> = TreeNode & ObjectFromSchemaRecordUnsafe<T> & WithType<TypeName, NodeKind.Object>;
886
892
 
887
893
  // @public
888
894
  export enum TreeStatus {
@@ -934,15 +940,20 @@ export type Unhydrated<T> = T;
934
940
 
935
941
  // @public
936
942
  export type ValidateRecursiveSchema<T extends TreeNodeSchemaClass<string, NodeKind.Array | NodeKind.Map | NodeKind.Object, TreeNode & WithType<T["identifier"], T["kind"]>, {
937
- [NodeKind.Object]: T["info"] extends RestrictiveReadonlyRecord<string, ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
943
+ [NodeKind.Object]: T["info"] extends RestrictiveStringRecord<ImplicitFieldSchema> ? InsertableObjectFromSchemaRecord<T["info"]> : unknown;
938
944
  [NodeKind.Array]: T["info"] extends ImplicitAllowedTypes ? Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>> : unknown;
939
945
  [NodeKind.Map]: T["info"] extends ImplicitAllowedTypes ? Iterable<[string, InsertableTreeNodeFromImplicitAllowedTypes<T["info"]>]> : unknown;
940
946
  }[T["kind"]], false, {
941
- [NodeKind.Object]: RestrictiveReadonlyRecord<string, ImplicitFieldSchema>;
947
+ [NodeKind.Object]: RestrictiveStringRecord<ImplicitFieldSchema>;
942
948
  [NodeKind.Array]: ImplicitAllowedTypes;
943
949
  [NodeKind.Map]: ImplicitAllowedTypes;
944
950
  }[T["kind"]]>> = true;
945
951
 
952
+ // @public @sealed
953
+ export interface ViewableTree {
954
+ viewWith<TRoot extends ImplicitFieldSchema>(config: TreeViewConfiguration<TRoot>): TreeView<TRoot>;
955
+ }
956
+
946
957
  // @public @sealed
947
958
  export interface WithType<out TName extends string = string, out TKind extends NodeKind = NodeKind, out TInfo = unknown> {
948
959
  // @deprecated