fluid-framework 2.23.0-325054 → 2.30.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # fluid-framework
2
2
 
3
+ ## 2.30.0
4
+
5
+ ### Minor Changes
6
+
7
+ - New SchemaFactoryAlpha.scopedFactory method ([#23987](https://github.com/microsoft/FluidFramework/pull/23987)) [cddd5139c3](https://github.com/microsoft/FluidFramework/commit/cddd5139c3e070ef26db55331528435a99c0a1b1)
8
+
9
+ The [`SchemaFactoryAlpha.scopedFactory`](https://fluidframework.com/docs/api/fluid-framework/schemafactoryalpha-class)
10
+ method has been added, providing an easy way to create a new `SchemaFactory` with a nested scope string.
11
+
12
+ - TreeBranchEvents now exposes the rootChanged event ([#24014](https://github.com/microsoft/FluidFramework/pull/24014)) [702a08af83](https://github.com/microsoft/FluidFramework/commit/702a08af83206c21e1016ca47051052fa8554aa5)
13
+
14
+ `TreeBranchEvents` now includes the `rootChanged` event from `TreeViewEvents`.
15
+
16
+ - Alpha APIs for replacing handles in export formats have been redesigned ([#24061](https://github.com/microsoft/FluidFramework/pull/24061)) [34b319cae7](https://github.com/microsoft/FluidFramework/commit/34b319cae7a78db5530dc898689e2eb846f1419f)
17
+
18
+ The various import and export [`VerboseTree`](https://fluidframework.com/docs/api/fluid-framework/verbosetree-typealias) and [`ConciseTree`](https://fluidframework.com/docs/api/fluid-framework/concisetree-typealias) APIs no longer include `valueConverter` options.
19
+ Instead the resulting tree can be further processed to do any desired replacements.
20
+ The following `@alpha` APIs have been added to assist with this:
21
+
22
+ 1. `cloneWithReplacements`
23
+ 2. `replaceHandles`
24
+ 3. `replaceConciseTreeHandles`
25
+ 4. `replaceVerboseTreeHandles`
26
+
27
+ - Rules regarding how and when lazy schema references are resolved have been clarified ([#24030](https://github.com/microsoft/FluidFramework/pull/24030)) [23f32794db](https://github.com/microsoft/FluidFramework/commit/23f32794dbd3672dcc18e2a9ba2f16f4bf1241f0)
28
+
29
+ A lazy schema reference is a [LazyItem](https://fluidframework.com/docs/api/fluid-framework/lazyitem-typealias) referencing a [TreeNodeSchema](https://fluidframework.com/docs/api/fluid-framework/treenodeschema-typealias).
30
+ They typically look like `() => MySchema` and are used when a [forward reference](https://en.wikipedia.org/wiki/Forward_declaration#Forward_reference) from one schema to another is required (including but not limited to recursive and co-recursive schema).
31
+
32
+ [TreeViewConfiguration](https://fluidframework.com/docs/api/fluid-framework/treeviewconfiguration-class#_constructor_-constructor) now documents its significance with respect to lazy schema references.
33
+ Additionally some implicit assumptions like no modifications of [AllowedTypes](https://fluidframework.com/docs/api/fluid-framework/allowedtypes-typealias)
34
+ after resolving of lazy schema references have been enforced (such modifications would previously cause undefined behavior in the future, and now an error is thrown when trying to modify them).
35
+
36
+ `evaluateLazySchema` has been added as an `@alpha` API that is now consistently used by all internal code when evaluating lazy schema references.
37
+ This ensures consistent behavior and error reporting, but also adds caching.
38
+ Therefore it is now supported for applications to have lazy schema references which compute the schema when invoked,
39
+ without having to implement their own caching as long as those applications use `evaluateLazySchema` anytime they need to evaluate a lazy schema reference.
40
+
3
41
  ## 2.23.0
4
42
 
5
43
  ### Minor Changes
@@ -28,22 +28,11 @@ type ApplyKind<T, Kind extends FieldKind> = {
28
28
  [FieldKind.Identifier]: T;
29
29
  }[Kind];
30
30
 
31
- // @public
32
- export type ApplyKindAssignment<T, Kind extends FieldKind> = [Kind] extends [
33
- FieldKind.Required
34
- ] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : never;
35
-
36
31
  // @public
37
32
  type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = [
38
33
  Kind
39
34
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
40
35
 
41
- // @public
42
- export type AssignableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = SchemaUnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindAssignment<GetTypes<Types>["readWrite"], Kind> : [TSchema] extends [ImplicitAllowedTypes] ? GetTypes<TSchema>["readWrite"] : never;
43
-
44
- // @public
45
- export type AssignableTreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKindAssignment<GetTypesUnsafe<Types>["readWrite"], Kind> : GetTypesUnsafe<TSchema>["readWrite"];
46
-
47
36
  // @alpha
48
37
  export function asTreeViewAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
49
38
 
@@ -62,6 +51,12 @@ export interface BranchableTree extends ViewableTree {
62
51
  rebase(branch: TreeBranchFork): void;
63
52
  }
64
53
 
54
+ // @alpha
55
+ export function cloneWithReplacements(root: unknown, rootKey: string, replacer: (key: string, value: unknown) => {
56
+ clone: boolean;
57
+ value: unknown;
58
+ }): unknown;
59
+
65
60
  // @public
66
61
  export enum CommitKind {
67
62
  Default = 0,
@@ -78,13 +73,6 @@ export interface CommitMetadata {
78
73
  // @alpha
79
74
  export function comparePersistedSchema(persisted: JsonCompatible, view: ImplicitFieldSchema, options: ICodecOptions, canInitialize: boolean): SchemaCompatibilityStatus;
80
75
 
81
- // @alpha
82
- export namespace Component {
83
- export type ComponentSchemaCollection<TConfig, TSchema> = (lazyConfiguration: () => TConfig) => LazyArray<TSchema>;
84
- export function composeComponentSchema<TConfig, TItem>(allComponents: readonly ComponentSchemaCollection<TConfig, TItem>[], lazyConfiguration: () => TConfig): (() => TItem)[];
85
- export type LazyArray<T> = readonly (() => T)[];
86
- }
87
-
88
76
  // @alpha
89
77
  export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidHandle> | THandle | ConciseTree<THandle>[] | {
90
78
  [key: string]: ConciseTree<THandle>;
@@ -136,70 +124,13 @@ export function createSimpleTreeIndex<TFieldSchema extends ImplicitFieldSchema,
136
124
  // @alpha
137
125
  export function createSimpleTreeIndex<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[]): SimpleTreeIndex<TKey, TValue>;
138
126
 
139
- // @public
140
- export type CustomizedSchemaTyping<TSchema, TCustom extends CustomTypes> = TSchema & {
141
- [CustomizedTyping]: TCustom;
142
- };
143
-
144
- // @public
145
- export const CustomizedTyping: unique symbol;
146
-
147
- // @public
148
- export type CustomizedTyping = typeof CustomizedTyping;
149
-
150
- // @alpha @sealed
151
- export interface Customizer<TSchema extends ImplicitAllowedTypes> {
152
- custom<T extends Partial<CustomTypes>>(): CustomizedSchemaTyping<TSchema, {
153
- [Property in keyof CustomTypes]: Property extends keyof T ? T[Property] extends CustomTypes[Property] ? T[Property] : GetTypes<TSchema>[Property] : GetTypes<TSchema>[Property];
154
- }>;
155
- relaxed(): CustomizedSchemaTyping<TSchema, {
156
- input: TreeNodeSchema extends TSchema ? InsertableContent : TSchema extends TreeNodeSchema ? InsertableTypedNode<TSchema> : TSchema extends AllowedTypes ? TSchema[number] extends LazyItem<infer TSchemaInner extends TreeNodeSchema> ? InsertableTypedNode<TSchemaInner, TSchemaInner> : never : never;
157
- readWrite: TreeNodeFromImplicitAllowedTypes<TSchema>;
158
- output: TreeNodeFromImplicitAllowedTypes<TSchema>;
159
- }>;
160
- simplified<T extends TreeNodeFromImplicitAllowedTypes<TSchema>>(): CustomizedSchemaTyping<TSchema, {
161
- input: T;
162
- readWrite: T;
163
- output: T;
164
- }>;
165
- simplifiedUnrestricted<T extends TreeNode | TreeLeafValue>(): CustomizedSchemaTyping<TSchema, {
166
- input: T;
167
- readWrite: T;
168
- output: T;
169
- }>;
170
- strict(): CustomizedSchemaTyping<TSchema, StrictTypes<TSchema>>;
171
- }
172
-
173
- // @alpha
174
- export function customizeSchemaTyping<const TSchema extends ImplicitAllowedTypes>(schema: TSchema): Customizer<TSchema>;
175
-
176
- // @public @sealed
177
- export interface CustomTypes {
178
- readonly input: unknown;
179
- readonly output: TreeLeafValue | TreeNode;
180
- readonly readWrite: TreeLeafValue | TreeNode;
181
- }
182
-
183
- // @public
184
- export type DefaultInsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [TSchema] extends [TreeNodeSchema] ? InsertableTypedNode<TSchema> : [TSchema] extends [AllowedTypes] ? InsertableTreeNodeFromAllowedTypes<TSchema> : never;
185
-
186
- // @public
187
- export type DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
188
-
189
127
  // @public @sealed
190
128
  interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {
191
129
  }
192
130
 
193
- // @public
194
- export type DefaultTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
195
-
196
- // @public
197
- export type DefaultTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
198
-
199
131
  // @alpha
200
- export interface EncodeOptions<TCustom> {
132
+ export interface EncodeOptions {
201
133
  readonly useStoredKeys?: boolean;
202
- valueConverter(data: IFluidHandle): TCustom;
203
134
  }
204
135
 
205
136
  // @alpha
@@ -337,15 +268,8 @@ export function getBranch<T extends ImplicitFieldSchema | UnsafeUnknownSchema>(v
337
268
  // @alpha
338
269
  export function getJsonSchema(schema: ImplicitFieldSchema): JsonTreeSchema;
339
270
 
340
- // @public
341
- export type GetTypes<TSchema extends ImplicitAllowedTypes> = [TSchema] extends [
342
- CustomizedSchemaTyping<unknown, infer TCustom>
343
- ] ? TCustom : StrictTypes<TSchema>;
344
-
345
- // @public
346
- export type GetTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [
347
- TSchema
348
- ] extends [CustomizedSchemaTyping<unknown, infer TCustom>] ? TCustom : StrictTypesUnsafe<TSchema>;
271
+ // @alpha
272
+ export type HandleConverter<TCustom> = (data: IFluidHandle) => TCustom;
349
273
 
350
274
  // @alpha
351
275
  export interface ICodecOptions {
@@ -634,7 +558,7 @@ type _InlineTrick = 0;
634
558
  export type Input<T extends never> = T;
635
559
 
636
560
  // @alpha
637
- export type Insertable<TSchema extends ImplicitAllowedTypes> = InsertableTreeNodeFromImplicitAllowedTypes<TSchema>;
561
+ export type Insertable<TSchema extends ImplicitAllowedTypes | UnsafeUnknownSchema> = TSchema extends ImplicitAllowedTypes ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : InsertableContent;
638
562
 
639
563
  // @alpha
640
564
  export type InsertableContent = Unhydrated<TreeNode> | FactoryContent;
@@ -659,7 +583,7 @@ export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<Restrict
659
583
  };
660
584
 
661
585
  // @public
662
- export type InsertableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = [TSchemaInput] extends [CustomizedSchemaTyping<unknown, CustomTypes>] ? TSchemaInput : SchemaUnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : never;
586
+ 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;
663
587
 
664
588
  // @public
665
589
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchemaInput extends Unenforced<ImplicitFieldSchema>, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema> : never;
@@ -677,10 +601,12 @@ LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
677
601
  ] ? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest> : never;
678
602
 
679
603
  // @public
680
- export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = GetTypes<TSchema>["input"];
604
+ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [
605
+ TSchema
606
+ ] extends [TreeNodeSchema] ? InsertableTypedNode<TSchema> : [TSchema] extends [AllowedTypes] ? InsertableTreeNodeFromAllowedTypes<TSchema> : never;
681
607
 
682
608
  // @public
683
- export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = GetTypesUnsafe<TSchema>["input"];
609
+ export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
684
610
 
685
611
  // @public
686
612
  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);
@@ -971,39 +897,20 @@ export const noopValidator: JsonValidator;
971
897
 
972
898
  // @public
973
899
  type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = {
974
- -readonly [Property in keyof T as [
975
- AssignableTreeFieldFromImplicitField<T[Property & string]>
976
- ] extends [never | undefined] ? never : Property]: AssignableTreeFieldFromImplicitField<T[Property & string]>;
977
- } & {
978
- readonly [Property in keyof T]: TreeFieldFromImplicitField<T[Property & string]>;
900
+ -readonly [Property in keyof T]: Property extends string ? TreeFieldFromImplicitField<T[Property]> : unknown;
979
901
  };
980
902
 
981
903
  // @public
982
904
  type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
983
- -readonly [Property in keyof T as [T[Property]] extends [
984
- CustomizedSchemaTyping<unknown, {
985
- readonly readWrite: never;
986
- readonly input: unknown;
987
- readonly output: TreeNode | TreeLeafValue;
988
- }>
989
- ] ? never : Property]: AssignableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
990
- } & {
991
- readonly [Property in keyof T as [T[Property]] extends [
992
- CustomizedSchemaTyping<unknown, {
993
- readonly readWrite: never;
994
- readonly input: unknown;
995
- readonly output: TreeNode | TreeLeafValue;
996
- }>
997
- ] ? Property : never]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
905
+ -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
998
906
  };
999
907
 
1000
908
  // @public
1001
909
  export type Off = () => void;
1002
910
 
1003
911
  // @alpha
1004
- export interface ParseOptions<TCustom> {
912
+ export interface ParseOptions {
1005
913
  readonly useStoredKeys?: boolean;
1006
- valueConverter(data: VerboseTree<TCustom>): TreeLeafValue | VerboseTreeNode<TCustom>;
1007
914
  }
1008
915
 
1009
916
  // @alpha
@@ -1037,11 +944,20 @@ export type ReadSchema<TSchema extends ImplicitFieldSchema | UnsafeUnknownSchema
1037
944
  TSchema
1038
945
  ] extends [ImplicitFieldSchema] ? TSchema : ImplicitFieldSchema;
1039
946
 
947
+ // @alpha
948
+ export function replaceConciseTreeHandles<T>(tree: ConciseTree, replacer: HandleConverter<T>): ConciseTree<T>;
949
+
950
+ // @alpha
951
+ export function replaceHandles<T>(tree: unknown, replacer: HandleConverter<T>): unknown;
952
+
1040
953
  // @public
1041
954
  export type ReplaceIEventThisPlaceHolder<L extends any[], TThis> = L extends any[] ? {
1042
955
  [K in keyof L]: L[K] extends IEventThisPlaceHolder ? TThis : L[K];
1043
956
  } : L;
1044
957
 
958
+ // @alpha
959
+ export function replaceVerboseTreeHandles<T>(tree: VerboseTree, replacer: HandleConverter<T>): VerboseTree<T>;
960
+
1045
961
  // @public @deprecated
1046
962
  export type RestrictiveReadonlyRecord<K extends symbol | string, T> = {
1047
963
  readonly [P in symbol | string]: P extends K ? T : never;
@@ -1174,6 +1090,7 @@ export class SchemaFactoryAlpha<out TScope extends string | undefined = string |
1174
1090
  }, false, T, undefined, TCustomMetadata>;
1175
1091
  object<const Name extends TName, const T extends RestrictiveStringRecord<ImplicitFieldSchema>, const TCustomMetadata = unknown>(name: Name, fields: T, options?: SchemaFactoryObjectOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNode<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecord<T>, true, T, never, TCustomMetadata>;
1176
1092
  objectRecursive<const Name extends TName, const T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>, const TCustomMetadata = unknown>(name: Name, t: T, options?: SchemaFactoryObjectOptions<TCustomMetadata>): TreeNodeSchemaClass<ScopedSchemaName<TScope, Name>, NodeKind.Object, TreeObjectNodeUnsafe<T, ScopedSchemaName<TScope, Name>>, object & InsertableObjectFromSchemaRecordUnsafe<T>, false, T, never, TCustomMetadata>;
1093
+ scopedFactory<const T extends TName, TNameInner extends number | string = string>(name: T): SchemaFactoryAlpha<ScopedSchemaName<TScope, T>, TNameInner>;
1177
1094
  }
1178
1095
 
1179
1096
  // @alpha
@@ -1195,11 +1112,6 @@ export const schemaStatics: {
1195
1112
  readonly requiredRecursive: <const T_3 extends unknown>(t: T_3, props?: Omit<FieldProps, "defaultProvider">) => FieldSchemaUnsafe<FieldKind.Required, T_3>;
1196
1113
  };
1197
1114
 
1198
- // @public
1199
- export type SchemaUnionToIntersection<T> = [T] extends [
1200
- CustomizedSchemaTyping<unknown, CustomTypes>
1201
- ] ? T : UnionToIntersection<T>;
1202
-
1203
1115
  // @alpha
1204
1116
  export interface SchemaValidationFunction<Schema extends TSchema> {
1205
1117
  check(data: unknown): data is Static<Schema>;
@@ -1243,26 +1155,6 @@ export function singletonSchema<TScope extends string, TName extends string | nu
1243
1155
  readonly value: TName;
1244
1156
  }, Record<string, never>, true, Record<string, never>, undefined>;
1245
1157
 
1246
- // @public @sealed
1247
- export interface StrictTypes<TSchema extends ImplicitAllowedTypes, TInput = DefaultInsertableTreeNodeFromImplicitAllowedTypes<TSchema>, TOutput extends TreeNode | TreeLeafValue = DefaultTreeNodeFromImplicitAllowedTypes<TSchema>> {
1248
- // (undocumented)
1249
- input: TInput;
1250
- // (undocumented)
1251
- output: TOutput;
1252
- // (undocumented)
1253
- readWrite: TInput extends never ? never : TOutput;
1254
- }
1255
-
1256
- // @public
1257
- export interface StrictTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>, TInput = DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>, TOutput = DefaultTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>> {
1258
- // (undocumented)
1259
- input: TInput;
1260
- // (undocumented)
1261
- output: TOutput;
1262
- // (undocumented)
1263
- readWrite: TOutput;
1264
- }
1265
-
1266
1158
  // @public
1267
1159
  export interface Tagged<V, T extends string = string> {
1268
1160
  // (undocumented)
@@ -1317,12 +1209,9 @@ export const TreeAlpha: {
1317
1209
  branch(node: TreeNode): TreeBranch | undefined;
1318
1210
  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>;
1319
1211
  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>;
1320
- importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<ParseOptions<IFluidHandle>>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1321
- importVerbose<const TSchema extends ImplicitFieldSchema, THandle>(schema: TSchema, data: VerboseTree<THandle> | undefined, options: ParseOptions<THandle>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1322
- exportConcise(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): ConciseTree;
1323
- exportConcise<THandle>(node: TreeNode | TreeLeafValue, options: EncodeOptions<THandle>): ConciseTree<THandle>;
1324
- exportVerbose(node: TreeNode | TreeLeafValue, options?: Partial<EncodeOptions<IFluidHandle>>): VerboseTree;
1325
- exportVerbose<T>(node: TreeNode | TreeLeafValue, options: EncodeOptions<T>): VerboseTree<T>;
1212
+ importVerbose<const TSchema extends ImplicitFieldSchema>(schema: TSchema, data: VerboseTree | undefined, options?: Partial<ParseOptions>): Unhydrated<TreeFieldFromImplicitField<TSchema>>;
1213
+ exportConcise(node: TreeNode | TreeLeafValue, options?: EncodeOptions): ConciseTree;
1214
+ exportVerbose(node: TreeNode | TreeLeafValue, options?: EncodeOptions): VerboseTree;
1326
1215
  exportCompressed(tree: TreeNode | TreeLeafValue, options: {
1327
1216
  oldestCompatibleClient: FluidClientVersion;
1328
1217
  idCompressor?: IIdCompressor;
@@ -1386,10 +1275,9 @@ export interface TreeBranch extends IDisposable {
1386
1275
  }
1387
1276
 
1388
1277
  // @alpha @sealed
1389
- export interface TreeBranchEvents {
1278
+ export interface TreeBranchEvents extends Omit<TreeViewEvents, "commitApplied"> {
1390
1279
  changed(data: CommitMetadata, getRevertible?: RevertibleAlphaFactory): void;
1391
1280
  commitApplied(data: CommitMetadata, getRevertible?: RevertibleAlphaFactory): void;
1392
- schemaChanged(): void;
1393
1281
  }
1394
1282
 
1395
1283
  // @alpha @sealed
@@ -1472,10 +1360,10 @@ export interface TreeNodeApi {
1472
1360
  }
1473
1361
 
1474
1362
  // @public
1475
- export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = GetTypes<TSchema>["output"];
1363
+ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
1476
1364
 
1477
1365
  // @public
1478
- type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = GetTypesUnsafe<TSchema>["output"];
1366
+ type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
1479
1367
 
1480
1368
  // @public @sealed
1481
1369
  export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TCustomMetadata = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info, never, TCustomMetadata> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info, never, TCustomMetadata>;
@@ -17,22 +17,11 @@ type ApplyKind<T, Kind extends FieldKind> = {
17
17
  [FieldKind.Identifier]: T;
18
18
  }[Kind];
19
19
 
20
- // @public
21
- export type ApplyKindAssignment<T, Kind extends FieldKind> = [Kind] extends [
22
- FieldKind.Required
23
- ] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : never;
24
-
25
20
  // @public
26
21
  type ApplyKindInput<T, Kind extends FieldKind, DefaultsAreOptional extends boolean> = [
27
22
  Kind
28
23
  ] extends [FieldKind.Required] ? T : [Kind] extends [FieldKind.Optional] ? T | undefined : [Kind] extends [FieldKind.Identifier] ? DefaultsAreOptional extends true ? T | undefined : T : never;
29
24
 
30
- // @public
31
- export type AssignableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = SchemaUnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindAssignment<GetTypes<Types>["readWrite"], Kind> : [TSchema] extends [ImplicitAllowedTypes] ? GetTypes<TSchema>["readWrite"] : never;
32
-
33
- // @public
34
- export type AssignableTreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> = TSchema extends FieldSchemaUnsafe<infer Kind, infer Types> ? ApplyKindAssignment<GetTypesUnsafe<Types>["readWrite"], Kind> : GetTypesUnsafe<TSchema>["readWrite"];
35
-
36
25
  // @public
37
26
  export enum AttachState {
38
27
  Attached = "Attached",
@@ -81,40 +70,10 @@ export interface ContainerSchema {
81
70
  readonly initialObjects: Record<string, SharedObjectKind>;
82
71
  }
83
72
 
84
- // @public
85
- export type CustomizedSchemaTyping<TSchema, TCustom extends CustomTypes> = TSchema & {
86
- [CustomizedTyping]: TCustom;
87
- };
88
-
89
- // @public
90
- export const CustomizedTyping: unique symbol;
91
-
92
- // @public
93
- export type CustomizedTyping = typeof CustomizedTyping;
94
-
95
- // @public @sealed
96
- export interface CustomTypes {
97
- readonly input: unknown;
98
- readonly output: TreeLeafValue | TreeNode;
99
- readonly readWrite: TreeLeafValue | TreeNode;
100
- }
101
-
102
- // @public
103
- export type DefaultInsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [TSchema] extends [TreeNodeSchema] ? InsertableTypedNode<TSchema> : [TSchema] extends [AllowedTypes] ? InsertableTreeNodeFromAllowedTypes<TSchema> : never;
104
-
105
- // @public
106
- export type DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
107
-
108
73
  // @public @sealed
109
74
  interface DefaultProvider extends ErasedType<"@fluidframework/tree.FieldProvider"> {
110
75
  }
111
76
 
112
- // @public
113
- export type DefaultTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
114
-
115
- // @public
116
- export type DefaultTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
117
-
118
77
  // @public @sealed
119
78
  export abstract class ErasedType<out Name = unknown> {
120
79
  static [Symbol.hasInstance](value: never): value is never;
@@ -187,16 +146,6 @@ export type FluidObject<T = unknown> = {
187
146
  // @public
188
147
  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;
189
148
 
190
- // @public
191
- export type GetTypes<TSchema extends ImplicitAllowedTypes> = [TSchema] extends [
192
- CustomizedSchemaTyping<unknown, infer TCustom>
193
- ] ? TCustom : StrictTypes<TSchema>;
194
-
195
- // @public
196
- export type GetTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [
197
- TSchema
198
- ] extends [CustomizedSchemaTyping<unknown, infer TCustom>] ? TCustom : StrictTypesUnsafe<TSchema>;
199
-
200
149
  // @public
201
150
  export interface IConnection {
202
151
  readonly id: string;
@@ -482,7 +431,7 @@ export type InsertableObjectFromSchemaRecordUnsafe<T extends Unenforced<Restrict
482
431
  };
483
432
 
484
433
  // @public
485
- export type InsertableTreeFieldFromImplicitField<TSchemaInput extends ImplicitFieldSchema, TSchema = [TSchemaInput] extends [CustomizedSchemaTyping<unknown, CustomTypes>] ? TSchemaInput : SchemaUnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchema<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypes<TSchema> : never;
434
+ 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;
486
435
 
487
436
  // @public
488
437
  export type InsertableTreeFieldFromImplicitFieldUnsafe<TSchemaInput extends Unenforced<ImplicitFieldSchema>, TSchema = UnionToIntersection<TSchemaInput>> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>] ? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true> : [TSchema] extends [ImplicitAllowedTypes] ? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema> : never;
@@ -500,10 +449,12 @@ LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
500
449
  ] ? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest> : never;
501
450
 
502
451
  // @public
503
- export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = GetTypes<TSchema>["input"];
452
+ export type InsertableTreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes> = [
453
+ TSchema
454
+ ] extends [TreeNodeSchema] ? InsertableTypedNode<TSchema> : [TSchema] extends [AllowedTypes] ? InsertableTreeNodeFromAllowedTypes<TSchema> : never;
504
455
 
505
456
  // @public
506
- export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = GetTypesUnsafe<TSchema>["input"];
457
+ export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = [TSchema] extends [TreeNodeSchemaUnsafe] ? InsertableTypedNodeUnsafe<TSchema> : [TSchema] extends [AllowedTypesUnsafe] ? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema> : never;
507
458
 
508
459
  // @public
509
460
  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);
@@ -681,30 +632,12 @@ export interface NodeSchemaOptions<out TCustomMetadata = unknown> {
681
632
 
682
633
  // @public
683
634
  type ObjectFromSchemaRecord<T extends RestrictiveStringRecord<ImplicitFieldSchema>> = {
684
- -readonly [Property in keyof T as [
685
- AssignableTreeFieldFromImplicitField<T[Property & string]>
686
- ] extends [never | undefined] ? never : Property]: AssignableTreeFieldFromImplicitField<T[Property & string]>;
687
- } & {
688
- readonly [Property in keyof T]: TreeFieldFromImplicitField<T[Property & string]>;
635
+ -readonly [Property in keyof T]: Property extends string ? TreeFieldFromImplicitField<T[Property]> : unknown;
689
636
  };
690
637
 
691
638
  // @public
692
639
  type ObjectFromSchemaRecordUnsafe<T extends Unenforced<RestrictiveStringRecord<ImplicitFieldSchema>>> = {
693
- -readonly [Property in keyof T as [T[Property]] extends [
694
- CustomizedSchemaTyping<unknown, {
695
- readonly readWrite: never;
696
- readonly input: unknown;
697
- readonly output: TreeNode | TreeLeafValue;
698
- }>
699
- ] ? never : Property]: AssignableTreeFieldFromImplicitFieldUnsafe<T[Property]>;
700
- } & {
701
- readonly [Property in keyof T as [T[Property]] extends [
702
- CustomizedSchemaTyping<unknown, {
703
- readonly readWrite: never;
704
- readonly input: unknown;
705
- readonly output: TreeNode | TreeLeafValue;
706
- }>
707
- ] ? Property : never]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
640
+ -readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
708
641
  };
709
642
 
710
643
  // @public
@@ -851,11 +784,6 @@ export const schemaStatics: {
851
784
  readonly requiredRecursive: <const T_3 extends unknown>(t: T_3, props?: Omit<FieldProps, "defaultProvider">) => FieldSchemaUnsafe<FieldKind.Required, T_3>;
852
785
  };
853
786
 
854
- // @public
855
- export type SchemaUnionToIntersection<T> = [T] extends [
856
- CustomizedSchemaTyping<unknown, CustomTypes>
857
- ] ? T : UnionToIntersection<T>;
858
-
859
787
  // @public
860
788
  type ScopedSchemaName<TScope extends string | undefined, TName extends number | string> = TScope extends undefined ? `${TName}` : `${TScope}.${TName}`;
861
789
 
@@ -867,26 +795,6 @@ export interface SharedObjectKind<out TSharedObject = unknown> extends ErasedTyp
867
795
  // @public
868
796
  export const SharedTree: SharedObjectKind<ITree>;
869
797
 
870
- // @public @sealed
871
- export interface StrictTypes<TSchema extends ImplicitAllowedTypes, TInput = DefaultInsertableTreeNodeFromImplicitAllowedTypes<TSchema>, TOutput extends TreeNode | TreeLeafValue = DefaultTreeNodeFromImplicitAllowedTypes<TSchema>> {
872
- // (undocumented)
873
- input: TInput;
874
- // (undocumented)
875
- output: TOutput;
876
- // (undocumented)
877
- readWrite: TInput extends never ? never : TOutput;
878
- }
879
-
880
- // @public
881
- export interface StrictTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>, TInput = DefaultInsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>, TOutput = DefaultTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>> {
882
- // (undocumented)
883
- input: TInput;
884
- // (undocumented)
885
- output: TOutput;
886
- // (undocumented)
887
- readWrite: TOutput;
888
- }
889
-
890
798
  // @public
891
799
  export interface Tagged<V, T extends string = string> {
892
800
  // (undocumented)
@@ -1008,10 +916,10 @@ export interface TreeNodeApi {
1008
916
  }
1009
917
 
1010
918
  // @public
1011
- export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = GetTypes<TSchema>["output"];
919
+ export type TreeNodeFromImplicitAllowedTypes<TSchema extends ImplicitAllowedTypes = TreeNodeSchema> = TSchema extends TreeNodeSchema ? NodeFromSchema<TSchema> : TSchema extends AllowedTypes ? NodeFromSchema<FlexListToUnion<TSchema>> : unknown;
1012
920
 
1013
921
  // @public
1014
- type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = GetTypesUnsafe<TSchema>["output"];
922
+ type TreeNodeFromImplicitAllowedTypesUnsafe<TSchema extends Unenforced<ImplicitAllowedTypes>> = TSchema extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<TSchema> : TSchema extends AllowedTypesUnsafe ? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>> : unknown;
1015
923
 
1016
924
  // @public @sealed
1017
925
  export type TreeNodeSchema<Name extends string = string, Kind extends NodeKind = NodeKind, TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue, TBuild = never, ImplicitlyConstructable extends boolean = boolean, Info = unknown, TCustomMetadata = unknown> = (TNode extends TreeNode ? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info, never, TCustomMetadata> : never) | TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info, never, TCustomMetadata>;