fluid-framework 2.113.1 → 2.115.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -155,6 +155,7 @@ export interface ArrayNodeTreeChangedRetainOp extends ArrayNodeRetainOp {
155
155
 
156
156
  // @alpha @sealed
157
157
  export interface ArrayPlaceAnchor {
158
+ dispose(): void;
158
159
  get index(): number;
159
160
  }
160
161
 
@@ -222,6 +223,13 @@ export interface CommitMetadata {
222
223
  readonly kind: CommitKind;
223
224
  }
224
225
 
226
+ // @alpha
227
+ export enum CommitOutcome {
228
+ FullyApplied = 0,
229
+ FullyDropped = 1,
230
+ NewContentOnly = 2
231
+ }
232
+
225
233
  // @alpha
226
234
  export function comparePersistedSchema(persisted: JsonCompatible, view: ImplicitFieldSchema, options: ICodecOptions): Omit<SchemaCompatibilityStatus, "canInitialize">;
227
235
 
@@ -302,6 +310,9 @@ export const contentSchemaSymbol: unique symbol;
302
310
  // @alpha
303
311
  export function createArrayInsertionAnchor(node: TreeArrayNode, currentIndex: number): ArrayPlaceAnchor;
304
312
 
313
+ // @alpha
314
+ export function createBasicRegistryKey<T>(type: string): RegistryKey<T, T>;
315
+
305
316
  // @beta
306
317
  export function createIdentifierIndex<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): IdentifierIndex;
307
318
 
@@ -331,6 +342,33 @@ export function createTreeIndex<TFieldSchema extends ImplicitFieldSchema, TKey e
331
342
  // @beta
332
343
  export function createTreeIndex<TFieldSchema extends ImplicitFieldSchema, TKey extends TreeIndexKey, TValue, TSchema extends TreeNodeSchema>(view: TreeView<TFieldSchema>, indexer: Map<TreeNodeSchema, string>, getValue: (nodes: TreeIndexNodes<NodeFromSchema<TSchema>>) => TValue, isKeyValid: (key: TreeIndexKey) => key is TKey, indexableSchema: readonly TSchema[]): TreeIndex<TKey, TValue>;
333
344
 
345
+ // @alpha @sealed
346
+ export interface DataStoreContext extends SharedObjectCreator {
347
+ }
348
+
349
+ // @alpha @sealed
350
+ export interface DataStoreCreator {
351
+ createDataStore<T>(kind: DataStoreKey<T>): Promise<T>;
352
+ }
353
+
354
+ // @alpha @input
355
+ export type DataStoreKey<T, TAll = unknown> = RegistryKey<Promise<DataStoreKind<T>>, Promise<DataStoreKind<TAll>>>;
356
+
357
+ // @alpha @sealed
358
+ export interface DataStoreKind<out T = unknown> extends DataStoreKey<T>, ErasedBaseType<readonly ["DataStoreKind", T]> {
359
+ }
360
+
361
+ // @alpha @input
362
+ export interface DataStoreOptions<in out TRoot extends IFluidLoadable, out TOutput> {
363
+ instantiateFirstTime(rootCreator: SharedObjectCreator<TRoot>, context: DataStoreContext): Promise<TRoot>;
364
+ readonly registry: SharedObjectRegistry;
365
+ readonly type: string;
366
+ view(root: TRoot, context: DataStoreContext): Promise<TOutput>;
367
+ }
368
+
369
+ // @alpha @input
370
+ export type DataStoreRegistry<out T = unknown> = Registry<Promise<DataStoreKind<T>>>;
371
+
334
372
  // @alpha
335
373
  export function decodeSchemaCompatibilitySnapshot(encodedSchema: JsonCompatibleReadOnly, validator?: FormatValidator): SimpleTreeSchema;
336
374
 
@@ -338,6 +376,12 @@ export function decodeSchemaCompatibilitySnapshot(encodedSchema: JsonCompatibleR
338
376
  interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {
339
377
  }
340
378
 
379
+ // @alpha
380
+ export function defineDataStore<T, TRoot extends IFluidLoadable>(options: DataStoreOptions<TRoot, T>): DataStoreKind<T>;
381
+
382
+ // @alpha
383
+ export function defineTreeDataStore<const TSchema extends ImplicitFieldSchema>(options: TreeDataStoreOptions<TSchema>): DataStoreKind<TreeView<TSchema>>;
384
+
341
385
  // @alpha
342
386
  export interface DirtyTreeMap {
343
387
  // (undocumented)
@@ -523,12 +567,29 @@ export const FluidClientVersion: {
523
567
  readonly v2_80: "2.80.0";
524
568
  };
525
569
 
526
- // @beta @sealed
570
+ // @alpha @sealed
571
+ export interface FluidContainer<TData = unknown> extends DataStoreCreator, ErasedBaseType<readonly ["FluidContainer", TData]> {
572
+ close(): void;
573
+ readonly data: TData;
574
+ readonly id?: string | undefined;
575
+ }
576
+
577
+ // @alpha @sealed
578
+ export interface FluidContainerAttached<TData = unknown> extends FluidContainer<TData> {
579
+ readonly id: string;
580
+ }
581
+
582
+ // @alpha @sealed
583
+ export interface FluidContainerWithService<TData = unknown> extends FluidContainer<TData> {
584
+ attach(): Promise<FluidContainerAttached<TData>>;
585
+ }
586
+
587
+ // @public @sealed
527
588
  export interface FluidIterable<T> {
528
589
  [Symbol.iterator](): FluidIterableIterator<T>;
529
590
  }
530
591
 
531
- // @beta @sealed
592
+ // @public @sealed
532
593
  export interface FluidIterableIterator<T> extends FluidIterable<T> {
533
594
  next(): {
534
595
  value: T;
@@ -539,7 +600,7 @@ export interface FluidIterableIterator<T> extends FluidIterable<T> {
539
600
  };
540
601
  }
541
602
 
542
- // @beta @sealed
603
+ // @public @sealed
543
604
  export interface FluidMap<K, V> extends FluidReadonlyMap<K, V> {
544
605
  delete(key: K): void;
545
606
  forEach(callbackfn: (value: V, key: K, map: FluidMap<K, V>) => void, thisArg?: any): void;
@@ -554,7 +615,50 @@ export type FluidObject<T = unknown> = {
554
615
  // @public
555
616
  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;
556
617
 
557
- // @beta @sealed
618
+ // @public @sealed
619
+ export interface FluidReadonlyArray<T> {
620
+ [Symbol.iterator](): FluidIterableIterator<T>;
621
+ readonly [Symbol.unscopables]: {
622
+ [K in keyof (readonly any[])]?: boolean;
623
+ };
624
+ readonly [n: number]: T;
625
+ at(index: number): T | undefined;
626
+ concat(...items: ConcatArray<T>[]): T[];
627
+ concat(...items: (T | ConcatArray<T>)[]): T[];
628
+ entries(): FluidIterableIterator<[number, T]>;
629
+ every<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): this is FluidReadonlyArray<S>;
630
+ every(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
631
+ filter<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): S[];
632
+ filter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];
633
+ find<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
634
+ find(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
635
+ findIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
636
+ findLast<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
637
+ findLast(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
638
+ findLastIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
639
+ flat<A, D extends number = 1>(this: A, depth?: D): FlatArray<A, D>[];
640
+ flatMap<U, This = undefined>(callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[], thisArg?: This): U[];
641
+ forEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;
642
+ includes(searchElement: T, fromIndex?: number): boolean;
643
+ indexOf(searchElement: T, fromIndex?: number): number;
644
+ join(separator?: string): string;
645
+ keys(): FluidIterableIterator<number>;
646
+ lastIndexOf(searchElement: T, fromIndex?: number): number;
647
+ readonly length: number;
648
+ map<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];
649
+ reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
650
+ reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
651
+ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
652
+ reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
653
+ slice(start?: number, end?: number): T[];
654
+ some(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
655
+ // (undocumented)
656
+ toLocaleString(): string;
657
+ toString(): string;
658
+ values(): FluidIterableIterator<T>;
659
+ }
660
+
661
+ // @public @sealed
558
662
  export interface FluidReadonlyMap<K, V> {
559
663
  [Symbol.iterator](): FluidIterableIterator<[K, V]>;
560
664
  readonly [Symbol.toStringTag]: string;
@@ -609,6 +713,56 @@ export const ForestTypeOptimized: ForestType;
609
713
  // @beta
610
714
  export const ForestTypeReference: ForestType;
611
715
 
716
+ // @alpha
717
+ export namespace FormattedText {
718
+ export function createSchema<const TUserScope extends string, const FormatSchema extends ImplicitAllowedTypes, const ExtraAtomsSchema extends readonly LazyItem<TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>>[]>(inputSchemaFactory: SchemaFactoryBeta<TUserScope>, formatSchema: FormatSchema, extraAtoms: ExtraAtomsSchema, defaultFormatInsertable: InsertableTreeFieldFromImplicitField<FormatSchema>): FormattedTextSchema<TUserScope, FormatSchema, ExtraAtomsSchema>;
719
+ // @sealed
720
+ export interface FormattedAtom<TFormat, TText> {
721
+ readonly content: TText;
722
+ format: TFormat;
723
+ }
724
+ // @input
725
+ export interface FormattedAtomInsertable<TFormat, TContent> {
726
+ // (undocumented)
727
+ readonly content: TContent;
728
+ // (undocumented)
729
+ readonly format: TFormat;
730
+ }
731
+ // @sealed
732
+ export type FormattedTextSchema<TUserScope extends string, FormatSchema extends ImplicitAllowedTypes, ExtraAtomsSchema extends readonly LazyItem<TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>>[]> = Statics<ErasedNode<Members<FormatSchema, ExtraAtomsSchema>, FormattedTextSchemaIdentifier<TUserScope>>, FormatSchema> & ErasedSchemaSubclassable<Members<FormatSchema, ExtraAtomsSchema>, FormattedTextSchemaIdentifier<TUserScope>>;
733
+ const // @sealed
734
+ StringTextAtom: StringTextAtomStatics & TreeNodeSchema<"com.fluidframework.text.formatted.StringTextAtom", NodeKind, TextAtom & TreeNode & WithType<"com.fluidframework.text.formatted.StringTextAtom", NodeKind, unknown>, never, false>;
735
+ export type FormattedTextSchemaIdentifier<TUserScope extends string> = ScopedSchemaName<`com.fluidframework.text.formatted<${TUserScope}>`, "Text">;
736
+ // @sealed
737
+ export interface Members<FormatSchema extends ImplicitAllowedTypes, ExtraAtomsSchema extends readonly LazyItem<TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>>[]> extends PlainText.Members {
738
+ charactersWithFormatting(): readonly FormattedAtom<TreeNodeFromImplicitAllowedTypes<FormatSchema>, TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>[];
739
+ formatRange(startIndex: number | undefined, endIndex: number | undefined, format: Partial<TreeNodeFromImplicitAllowedTypes<FormatSchema>>): void;
740
+ getString(startIndex: number, endIndex?: number): string;
741
+ getUniformRun(startIndex: number, endIndex?: number): number;
742
+ // @override
743
+ insertAt(index: number, additionalCharacters: string | Iterable<TreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>, format?: InsertableTreeFieldFromImplicitField<FormatSchema>): void;
744
+ insertWithFormattingAt(index: number, additionalCharacters: Iterable<FormattedAtomInsertable<InsertableTreeNodeFromImplicitAllowedTypes<FormatSchema>, InsertableTreeNodeFromImplicitAllowedTypes<TextAtomSchemas<ExtraAtomsSchema>>>>): void;
745
+ onContentChanged(callback: (ops: readonly PlainText.TextOp[] | undefined) => void): () => void;
746
+ reformat(startIndex?: number | undefined, endIndex?: number | undefined, format?: InsertableTreeFieldFromImplicitField<FormatSchema>): void;
747
+ }
748
+ // @sealed
749
+ export interface Statics<TTree, FormatSchema extends ImplicitAllowedTypes> {
750
+ fromString(value: string, format?: InsertableTreeFieldFromImplicitField<FormatSchema>): TTree;
751
+ }
752
+ // @sealed
753
+ export type StringTextAtom = ErasedNode<TextAtom, "com.fluidframework.text.formatted.StringTextAtom">;
754
+ // @sealed
755
+ export interface StringTextAtomStatics {
756
+ fromCharacter(value: string): StringTextAtom;
757
+ fromString(value: string): StringTextAtom[];
758
+ }
759
+ export interface TextAtom {
760
+ readonly content: string;
761
+ }
762
+ // @sealed
763
+ export type TextAtomSchemas<ExtraAtomsSchema extends readonly LazyItem<TreeNodeSchema<string, NodeKind, TextAtom & TreeNode>>[]> = readonly [typeof StringTextAtom, ...ExtraAtomsSchema];
764
+ }
765
+
612
766
  // @alpha @sealed
613
767
  export interface FormatValidator extends ErasedType<"FormatValidator"> {
614
768
  }
@@ -999,6 +1153,9 @@ TSchema
999
1153
  // @public
1000
1154
  export type InsertableTypedNode<TSchema extends TreeNodeSchema, T = UnionToIntersection<TSchema>> = (T extends TreeNodeSchema<string, NodeKind, TreeNode | TreeLeafValue, never, true> ? NodeBuilderData<T> : never) | (T extends TreeNodeSchema ? Unhydrated<TreeNode extends NodeFromSchema<T> ? never : NodeFromSchema<T>> : never);
1001
1155
 
1156
+ // @alpha
1157
+ export function instantiateTreeFirstTime<TSchema extends ImplicitFieldSchema>(rootCreator: SharedObjectCreator, creator: SharedObjectCreator, treeKind: SharedObjectKey<ITree>, options: Pick<TreeDataStoreOptions<TSchema>, "config" | "initializer">): Promise<ITree>;
1158
+
1002
1159
  // @public @sealed
1003
1160
  export interface InternalTreeNode extends ErasedType<"@fluidframework/tree.InternalTreeNode"> {
1004
1161
  }
@@ -1249,6 +1406,7 @@ export type Listeners<T extends object> = {
1249
1406
 
1250
1407
  // @alpha @sealed
1251
1408
  export interface LocalChangeMetadata extends CommitMetadata {
1409
+ readonly events: Listenable<LocalCommitEvents>;
1252
1410
  getChange(): JsonCompatibleReadOnly;
1253
1411
  getRevertible(onDisposed?: (revertible: RevertibleAlpha) => void): RevertibleAlpha | undefined;
1254
1412
  readonly isLocal: true;
@@ -1256,6 +1414,11 @@ export interface LocalChangeMetadata extends CommitMetadata {
1256
1414
  readonly labels: TransactionLabels;
1257
1415
  }
1258
1416
 
1417
+ // @alpha @sealed
1418
+ export interface LocalCommitEvents {
1419
+ settled(outcome: CommitOutcome): void;
1420
+ }
1421
+
1259
1422
  // @public
1260
1423
  export const LogLevel: LogLevelConst;
1261
1424
 
@@ -1273,6 +1436,9 @@ export interface LogLevelConst {
1273
1436
  readonly verbose: 10;
1274
1437
  }
1275
1438
 
1439
+ // @alpha
1440
+ export function lookupInRegistry<TOut, TIn>(registry: Registry<TIn>, key: RegistryKey<TOut, TIn>): TOut;
1441
+
1276
1442
  // @public @sealed
1277
1443
  export interface MakeNominal {
1278
1444
  }
@@ -1313,6 +1479,9 @@ export type MemberChangedListener<M extends IMember> = (clientId: string, member
1313
1479
  // @alpha @deprecated
1314
1480
  export const minimize: TransactionPostProcessor;
1315
1481
 
1482
+ // @alpha @input
1483
+ export type MinimumVersionForCollaboration = `2.${bigint}.0`;
1484
+
1316
1485
  // @public
1317
1486
  export type Myself<M extends IMember = IMember> = M & {
1318
1487
  readonly currentConnection: string;
@@ -1441,6 +1610,42 @@ export function onAssertionFailure(handler: (error: Error) => void): () => void;
1441
1610
  // @alpha
1442
1611
  export function persistedToSimpleSchema(persisted: JsonCompatible, options: ICodecOptions): SimpleTreeSchema;
1443
1612
 
1613
+ // @alpha
1614
+ export namespace PlainText {
1615
+ // @sealed
1616
+ export interface Members {
1617
+ characterCount(): number;
1618
+ characters(): Iterable<string>;
1619
+ charactersCopy(): string[];
1620
+ fullString(): string;
1621
+ insertAt(index: number, additionalCharacters: string): void;
1622
+ onCharactersChanged(callback: (ops: readonly TextOp[] | undefined) => void): () => void;
1623
+ removeRange(startIndex: number | undefined, endIndex: number | undefined): void;
1624
+ }
1625
+ export interface Statics {
1626
+ fromString(value: string): Tree;
1627
+ }
1628
+ // @sealed
1629
+ export interface TextInsertOp {
1630
+ readonly text: string;
1631
+ readonly type: "insert";
1632
+ }
1633
+ export type TextOp = TextRetainOp | TextInsertOp | TextRemoveOp;
1634
+ // @sealed
1635
+ export interface TextRemoveOp {
1636
+ readonly count: number;
1637
+ readonly type: "remove";
1638
+ }
1639
+ // @sealed
1640
+ export interface TextRetainOp {
1641
+ readonly count: number;
1642
+ readonly formattingChanged?: boolean;
1643
+ readonly type: "retain";
1644
+ }
1645
+ const Tree: Statics & TreeNodeSchema<"com.fluidframework.text.Text", NodeKind, Members & TreeNode & WithType<"com.fluidframework.text.Text", NodeKind, unknown>, never, false>;
1646
+ export type Tree = Members & TreeNode & WithType<"com.fluidframework.text.Text">;
1647
+ }
1648
+
1444
1649
  // @beta @system
1445
1650
  export type PopUnion<Union, AsOverloadedFunction = UnionToIntersection<Union extends unknown ? (f: Union) => void : never>> = AsOverloadedFunction extends (a: infer First) => void ? First : never;
1446
1651
 
@@ -1475,6 +1680,15 @@ export const RecordNodeSchema: {
1475
1680
  readonly [Symbol.hasInstance]: (value: TreeNodeSchema) => value is RecordNodeSchema<string, ImplicitAllowedTypes, true, unknown>;
1476
1681
  };
1477
1682
 
1683
+ // @alpha @input
1684
+ export type Registry<T> = (type: string) => T;
1685
+
1686
+ // @alpha @sealed @input
1687
+ export interface RegistryKey<TOut, TIn = unknown> {
1688
+ adapt(value: TIn): TOut;
1689
+ readonly type: string;
1690
+ }
1691
+
1478
1692
  // @alpha @sealed
1479
1693
  export interface RemoteChangeMetadata extends CommitMetadata {
1480
1694
  readonly getChange?: undefined;
@@ -1607,9 +1821,9 @@ export const SchemaFactory_base: SchemaStatics & (new () => SchemaStatics);
1607
1821
  export class SchemaFactoryAlpha<out TScope extends string | undefined = string | undefined, TName extends number | string = string> extends SchemaFactoryBeta<TScope, TName> {
1608
1822
  arrayAlpha<const Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptionsAlpha<TCustomMetadata>): ArrayNodeCustomizableSchemaAlpha<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1609
1823
  arrayRecursive<const Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptionsAlpha<TCustomMetadata>): ArrayNodeCustomizableSchemaUnsafe<ScopedSchemaName<TScope, Name>, T, TCustomMetadata>;
1610
- static readonly identifier: <const TCustomMetadata = unknown>(props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlpha<FieldKind.Identifier, LeafSchema<"string", string> & SimpleLeafNodeSchema<SchemaType>, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
1611
- static readonly leaves: readonly [LeafSchema<"string", string> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"number", number> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"boolean", boolean> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"null", null> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"handle", IFluidHandle<unknown>> & SimpleLeafNodeSchema<SchemaType>];
1612
- readonly leaves: readonly [LeafSchema<"string", string> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"number", number> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"boolean", boolean> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"null", null> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"handle", IFluidHandle<unknown>> & SimpleLeafNodeSchema<SchemaType>];
1824
+ static readonly identifier: <const TCustomMetadata = unknown>(props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider"> | undefined) => FieldSchemaAlpha<FieldKind.Identifier, StringSchema, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
1825
+ static readonly leaves: readonly [StringSchema, LeafSchema<"number", number> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"boolean", boolean> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"null", null> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"handle", IFluidHandle<unknown>> & SimpleLeafNodeSchema<SchemaType>];
1826
+ readonly leaves: readonly [StringSchema, LeafSchema<"number", number> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"boolean", boolean> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"null", null> & SimpleLeafNodeSchema<SchemaType>, LeafSchema<"handle", IFluidHandle<unknown>> & SimpleLeafNodeSchema<SchemaType>];
1613
1827
  mapAlpha<Name extends TName, const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptionsAlpha<TCustomMetadata>): MapNodeCustomizableSchema<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
1614
1828
  mapRecursive<Name extends TName, const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(name: Name, allowedTypes: T, options?: NodeSchemaOptionsAlpha<TCustomMetadata>): MapNodeCustomizableSchemaUnsafe<ScopedSchemaName<TScope, Name>, T, TCustomMetadata>;
1615
1829
  objectAlpha<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: ObjectSchemaOptionsAlpha<TCustomMetadata>): ObjectNodeSchemaWorkaround<ScopedSchemaName<TScope, Name>, T, true, TCustomMetadata>;
@@ -1722,14 +1936,53 @@ export class SchemaUpgrade {
1722
1936
  // @public @system
1723
1937
  type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
1724
1938
 
1939
+ // @alpha @sealed
1940
+ export interface ServiceClient {
1941
+ createAttachedContainer<T>(root: DataStoreKind<T>): Promise<FluidContainerAttached<T>>;
1942
+ createAttachedContainer<T>(root: DataStoreKey<T>, registry: DataStoreRegistry): Promise<FluidContainerAttached<T>>;
1943
+ createContainer<T>(root: DataStoreKind<T>): Promise<FluidContainerWithService<T>>;
1944
+ createContainer<T>(root: DataStoreKey<T>, registry: DataStoreRegistry): Promise<FluidContainerWithService<T>>;
1945
+ loadContainer<T>(id: string, root: DataStoreKind<T> | DataStoreRegistry<T>): Promise<FluidContainerAttached<T>>;
1946
+ }
1947
+
1948
+ // @alpha @input
1949
+ export interface ServiceOptions {
1950
+ // (undocumented)
1951
+ readonly minVersionForCollaboration: MinimumVersionForCollaboration;
1952
+ }
1953
+
1954
+ // @alpha @sealed
1955
+ export interface SharedObjectCreator<TConstraint = IFluidLoadable> {
1956
+ createSharedObject<T extends TConstraint>(kind: SharedObjectKey<T>): Promise<T>;
1957
+ }
1958
+
1959
+ // @alpha @input
1960
+ export type SharedObjectKey<T> = RegistryKey<SharedObjectKindAlpha<T>, SharedObjectKindAlpha>;
1961
+
1725
1962
  // @public @sealed
1726
1963
  export interface SharedObjectKind<out TSharedObject = unknown> extends ErasedType<readonly ["SharedObjectKind", TSharedObject]> {
1727
1964
  is(value: IFluidLoadable): value is IFluidLoadable & TSharedObject;
1728
1965
  }
1729
1966
 
1967
+ // @alpha @sealed
1968
+ export interface SharedObjectKindAlpha<out TSharedObject = unknown> extends SharedObjectKind<TSharedObject>, SharedObjectKey<TSharedObject> {
1969
+ }
1970
+
1971
+ // @alpha @input
1972
+ export type SharedObjectRegistry = () => Promise<Registry<SharedObjectKindAlpha<IFluidLoadable>>>;
1973
+
1974
+ // @alpha
1975
+ export function sharedObjectRegistryFromIterable(entries: Iterable<SharedObjectKindAlpha<IFluidLoadable> | {
1976
+ type: string;
1977
+ kind: () => Promise<SharedObjectKindAlpha<IFluidLoadable>>;
1978
+ }>): SharedObjectRegistry;
1979
+
1730
1980
  // @public
1731
1981
  export const SharedTree: SharedObjectKind<ITree>;
1732
1982
 
1983
+ // @alpha
1984
+ export const SharedTreeAlpha: SharedObjectKindAlpha<ITree>;
1985
+
1733
1986
  // @alpha @input
1734
1987
  export interface SharedTreeFormatOptions {
1735
1988
  treeEncodeType: TreeCompressionStrategy;
@@ -1871,6 +2124,9 @@ export interface StagedSchemaUpgradePolicyFactory {
1871
2124
  readonly restrictive: StagedSchemaUpgradePolicy;
1872
2125
  }
1873
2126
 
2127
+ // @alpha @sealed @system
2128
+ export type StringSchema = LeafSchema<"string", string> & SimpleLeafNodeSchema;
2129
+
1874
2130
  // @beta @system
1875
2131
  export namespace System_TableSchema {
1876
2132
  // @sealed @system
@@ -2116,42 +2372,6 @@ export interface Tagged<V, T extends string = string> {
2116
2372
  // @public
2117
2373
  export type TelemetryBaseEventPropertyType = string | number | boolean | undefined;
2118
2374
 
2119
- // @alpha
2120
- export namespace TextAsTree {
2121
- // @sealed
2122
- export interface Members {
2123
- characterCount(): number;
2124
- characters(): Iterable<string>;
2125
- charactersCopy(): string[];
2126
- fullString(): string;
2127
- insertAt(index: number, additionalCharacters: string): void;
2128
- onCharactersChanged(callback: (ops: readonly TextOp[] | undefined) => void): () => void;
2129
- removeRange(startIndex: number | undefined, endIndex: number | undefined): void;
2130
- }
2131
- export interface Statics {
2132
- fromString(value: string): Tree;
2133
- }
2134
- // @sealed
2135
- export interface TextInsertOp {
2136
- readonly text: string;
2137
- readonly type: "insert";
2138
- }
2139
- export type TextOp = TextRetainOp | TextInsertOp | TextRemoveOp;
2140
- // @sealed
2141
- export interface TextRemoveOp {
2142
- readonly count: number;
2143
- readonly type: "remove";
2144
- }
2145
- // @sealed
2146
- export interface TextRetainOp {
2147
- readonly count: number;
2148
- readonly formattingChanged?: boolean;
2149
- readonly type: "retain";
2150
- }
2151
- const Tree: Statics & TreeNodeSchema<"com.fluidframework.text.Text", NodeKind, Members & TreeNode & WithType<"com.fluidframework.text.Text", NodeKind, unknown>, never, false>;
2152
- export type Tree = Members & TreeNode & WithType<"com.fluidframework.text.Text">;
2153
- }
2154
-
2155
2375
  // @alpha
2156
2376
  export function trackDirtyNodes(view: TreeViewAlpha<ImplicitFieldSchema>, dirty: DirtyTreeMap): () => void;
2157
2377
 
@@ -2354,6 +2574,15 @@ export interface TreeContextAlpha {
2354
2574
  runTransactionAsync(transaction: () => Promise<void>, params?: RunTransactionParamsAlpha): Promise<TransactionVoidResult>;
2355
2575
  }
2356
2576
 
2577
+ // @alpha @input
2578
+ export interface TreeDataStoreOptions<TSchema extends ImplicitFieldSchema> extends Pick<DataStoreOptions<never, never>, "type"> {
2579
+ readonly config: TreeViewConfiguration<TSchema>;
2580
+ readonly initializer?: (creator: SharedObjectCreator) => InsertableTreeFieldFromImplicitField<TSchema>;
2581
+ // (undocumented)
2582
+ readonly key?: SharedObjectKey<ITree>;
2583
+ readonly registry?: Iterable<SharedObjectKindAlpha<IFluidLoadable>> | SharedObjectRegistry;
2584
+ }
2585
+
2357
2586
  // @beta @input
2358
2587
  export interface TreeEncodingOptions<TKeyOptions = KeyEncodingOptions> {
2359
2588
  readonly keys?: TKeyOptions;
@@ -2397,6 +2626,9 @@ export interface TreeMapNode<T extends ImplicitAllowedTypes = ImplicitAllowedTyp
2397
2626
 
2398
2627
  // @alpha @sealed
2399
2628
  export interface TreeMapNodeAlpha<T extends ImplicitAllowedTypes = ImplicitAllowedTypes> extends FluidReadonlyMap<string, TreeNodeFromImplicitAllowedTypes<T>>, TreeNode, Pick<TreeMapNode<T>, "set" | "delete"> {
2629
+ clear(): void;
2630
+ getOrInsert(key: string, fallbackValue: InsertableTreeNodeFromImplicitAllowedTypes<T>): TreeNodeFromImplicitAllowedTypes<T>;
2631
+ getOrInsertComputed(key: string, callback: (key: string) => InsertableTreeNodeFromImplicitAllowedTypes<T>): TreeNodeFromImplicitAllowedTypes<T>;
2400
2632
  }
2401
2633
 
2402
2634
  // @public @sealed
@@ -268,12 +268,12 @@ type FlexList<Item = unknown> = readonly LazyItem<Item>[];
268
268
  // @public @system
269
269
  type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
270
270
 
271
- // @beta @sealed
271
+ // @public @sealed
272
272
  export interface FluidIterable<T> {
273
273
  [Symbol.iterator](): FluidIterableIterator<T>;
274
274
  }
275
275
 
276
- // @beta @sealed
276
+ // @public @sealed
277
277
  export interface FluidIterableIterator<T> extends FluidIterable<T> {
278
278
  next(): {
279
279
  value: T;
@@ -284,7 +284,7 @@ export interface FluidIterableIterator<T> extends FluidIterable<T> {
284
284
  };
285
285
  }
286
286
 
287
- // @beta @sealed
287
+ // @public @sealed
288
288
  export interface FluidMap<K, V> extends FluidReadonlyMap<K, V> {
289
289
  delete(key: K): void;
290
290
  forEach(callbackfn: (value: V, key: K, map: FluidMap<K, V>) => void, thisArg?: any): void;
@@ -299,7 +299,50 @@ export type FluidObject<T = unknown> = {
299
299
  // @public
300
300
  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;
301
301
 
302
- // @beta @sealed
302
+ // @public @sealed
303
+ export interface FluidReadonlyArray<T> {
304
+ [Symbol.iterator](): FluidIterableIterator<T>;
305
+ readonly [Symbol.unscopables]: {
306
+ [K in keyof (readonly any[])]?: boolean;
307
+ };
308
+ readonly [n: number]: T;
309
+ at(index: number): T | undefined;
310
+ concat(...items: ConcatArray<T>[]): T[];
311
+ concat(...items: (T | ConcatArray<T>)[]): T[];
312
+ entries(): FluidIterableIterator<[number, T]>;
313
+ every<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): this is FluidReadonlyArray<S>;
314
+ every(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
315
+ filter<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): S[];
316
+ filter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];
317
+ find<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
318
+ find(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
319
+ findIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
320
+ findLast<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
321
+ findLast(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
322
+ findLastIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
323
+ flat<A, D extends number = 1>(this: A, depth?: D): FlatArray<A, D>[];
324
+ flatMap<U, This = undefined>(callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[], thisArg?: This): U[];
325
+ forEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;
326
+ includes(searchElement: T, fromIndex?: number): boolean;
327
+ indexOf(searchElement: T, fromIndex?: number): number;
328
+ join(separator?: string): string;
329
+ keys(): FluidIterableIterator<number>;
330
+ lastIndexOf(searchElement: T, fromIndex?: number): number;
331
+ readonly length: number;
332
+ map<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];
333
+ reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
334
+ reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
335
+ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
336
+ reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
337
+ slice(start?: number, end?: number): T[];
338
+ some(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
339
+ // (undocumented)
340
+ toLocaleString(): string;
341
+ toString(): string;
342
+ values(): FluidIterableIterator<T>;
343
+ }
344
+
345
+ // @public @sealed
303
346
  export interface FluidReadonlyMap<K, V> {
304
347
  [Symbol.iterator](): FluidIterableIterator<[K, V]>;
305
348
  readonly [Symbol.toStringTag]: string;
@@ -271,12 +271,12 @@ type FlexList<Item = unknown> = readonly LazyItem<Item>[];
271
271
  // @public @system
272
272
  type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
273
273
 
274
- // @beta @sealed
274
+ // @public @sealed
275
275
  export interface FluidIterable<T> {
276
276
  [Symbol.iterator](): FluidIterableIterator<T>;
277
277
  }
278
278
 
279
- // @beta @sealed
279
+ // @public @sealed
280
280
  export interface FluidIterableIterator<T> extends FluidIterable<T> {
281
281
  next(): {
282
282
  value: T;
@@ -287,7 +287,7 @@ export interface FluidIterableIterator<T> extends FluidIterable<T> {
287
287
  };
288
288
  }
289
289
 
290
- // @beta @sealed
290
+ // @public @sealed
291
291
  export interface FluidMap<K, V> extends FluidReadonlyMap<K, V> {
292
292
  delete(key: K): void;
293
293
  forEach(callbackfn: (value: V, key: K, map: FluidMap<K, V>) => void, thisArg?: any): void;
@@ -302,7 +302,50 @@ export type FluidObject<T = unknown> = {
302
302
  // @public
303
303
  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;
304
304
 
305
- // @beta @sealed
305
+ // @public @sealed
306
+ export interface FluidReadonlyArray<T> {
307
+ [Symbol.iterator](): FluidIterableIterator<T>;
308
+ readonly [Symbol.unscopables]: {
309
+ [K in keyof (readonly any[])]?: boolean;
310
+ };
311
+ readonly [n: number]: T;
312
+ at(index: number): T | undefined;
313
+ concat(...items: ConcatArray<T>[]): T[];
314
+ concat(...items: (T | ConcatArray<T>)[]): T[];
315
+ entries(): FluidIterableIterator<[number, T]>;
316
+ every<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): this is FluidReadonlyArray<S>;
317
+ every(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
318
+ filter<S extends T>(predicate: (value: T, index: number, array: readonly T[]) => value is S, thisArg?: any): S[];
319
+ filter(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): T[];
320
+ find<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
321
+ find(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
322
+ findIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
323
+ findLast<S extends T>(predicate: (value: T, index: number, obj: readonly T[]) => value is S, thisArg?: any): S | undefined;
324
+ findLast(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): T | undefined;
325
+ findLastIndex(predicate: (value: T, index: number, obj: readonly T[]) => unknown, thisArg?: any): number;
326
+ flat<A, D extends number = 1>(this: A, depth?: D): FlatArray<A, D>[];
327
+ flatMap<U, This = undefined>(callback: (this: This, value: T, index: number, array: T[]) => U | readonly U[], thisArg?: This): U[];
328
+ forEach(callbackfn: (value: T, index: number, array: readonly T[]) => void, thisArg?: any): void;
329
+ includes(searchElement: T, fromIndex?: number): boolean;
330
+ indexOf(searchElement: T, fromIndex?: number): number;
331
+ join(separator?: string): string;
332
+ keys(): FluidIterableIterator<number>;
333
+ lastIndexOf(searchElement: T, fromIndex?: number): number;
334
+ readonly length: number;
335
+ map<U>(callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any): U[];
336
+ reduce(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
337
+ reduce<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
338
+ reduceRight(callbackfn: (previousValue: T, currentValue: T, currentIndex: number, array: readonly T[]) => T): T;
339
+ reduceRight<U>(callbackfn: (previousValue: U, currentValue: T, currentIndex: number, array: readonly T[]) => U, initialValue: U): U;
340
+ slice(start?: number, end?: number): T[];
341
+ some(predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any): boolean;
342
+ // (undocumented)
343
+ toLocaleString(): string;
344
+ toString(): string;
345
+ values(): FluidIterableIterator<T>;
346
+ }
347
+
348
+ // @public @sealed
306
349
  export interface FluidReadonlyMap<K, V> {
307
350
  [Symbol.iterator](): FluidIterableIterator<[K, V]>;
308
351
  readonly [Symbol.toStringTag]: string;