fluid-framework 2.72.0 → 2.74.0-365691

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,104 @@
1
1
  # fluid-framework
2
2
 
3
+ ## 2.73.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Schema snapshot compatibility checker ([#25861](https://github.com/microsoft/FluidFramework/pull/25861)) [e5be416321](https://github.com/microsoft/FluidFramework/commit/e5be4163210ef68b7f8a7c10502f4871c30ec9f3)
8
+
9
+ This change adds alpha APIs for creating snapshots of view schema and testing their compatibility for the purposes
10
+ of schema migrations.
11
+
12
+ New APIs:
13
+ - `checkCompatibility` - Checks the compatibility of the view schema which created the document against the view schema
14
+ being used to open it.
15
+ - `importCompatibilitySchemaSnapshot` - Parse a JSON representation of a tree schema into a concrete schema.
16
+ - `exportCompatibilitySchemaSnapshot` - Returns a JSON representation of the tree schema for snapshot compatibility checking.
17
+
18
+ #### Example: Current view schema vs. historical view schema
19
+
20
+ An application author is developing an app that has a schema for storing 2D Points.
21
+ They wish to maintain backwards compatibility in future versions and avoid changing their view schema in a way that breaks
22
+ this behavior.
23
+ When introducing a new initial schema, they persists a snapshot using `exportCompatibilitySchemaSnapshot`:
24
+
25
+ ```ts
26
+ const factory = new SchemaFactory("test");
27
+
28
+ // The past view schema, for the purposes of illustration. This wouldn't normally appear as a concrete schema in the test
29
+ // checking compatibility, but rather would be loaded from a snapshot.
30
+ class Point2D extends factory.object("Point", {
31
+ x: factory.number,
32
+ y: factory.number,
33
+ }) {}
34
+ const viewSchema = new TreeViewConfiguration({ schema: Point2D });
35
+ const encodedSchema = JSON.stringify(
36
+ exportCompatibilitySchemaSnapshot(viewSchema),
37
+ );
38
+ fs.writeFileSync("PointSchema.json", encodedSchema);
39
+ ```
40
+
41
+ Next they create a regression test to ensure that the current view schema can read content written by the original view
42
+ schema (`SchemaCompatibilityStatus.canUpgrade`). Initially `currentViewSchema === Point2D`:
43
+
44
+ ```ts
45
+ const encodedSchema = JSON.parse(fs.readFileSync("PointSchema.json", "utf8"));
46
+ const oldViewSchema = importCompatibilitySchemaSnapshot(encodedSchema);
47
+
48
+ // Check to see if the document created by the historical view schema can be opened with the current view schema
49
+ const compatibilityStatus = checkCompatibility(
50
+ oldViewSchema,
51
+ currentViewSchema,
52
+ );
53
+
54
+ // Check to see if the document created by the historical view schema can be opened with the current view schema
55
+ const backwardsCompatibilityStatus = checkCompatibility(
56
+ oldViewSchema,
57
+ currentViewSchema,
58
+ );
59
+
60
+ // z is not present in Point2D, so the schema must be upgraded
61
+ assert.equal(backwardsCompatibilityStatus.canView, false);
62
+
63
+ // The schema can be upgraded to add the new optional field
64
+ assert.equal(backwardsCompatibilityStatus.canUpgrade, true);
65
+ ```
66
+
67
+ Additionally, they a regression test to ensure that older view schemas can read content written by the current view
68
+ schema (`SchemaCompatibilityStatus.canView`):
69
+
70
+ ```ts
71
+ // Test what the old version of the application would do with a tree using the new schema:
72
+ const forwardsCompatibilityStatus = checkCompatibility(
73
+ currentViewSchema,
74
+ oldViewSchema,
75
+ );
76
+
77
+ // If the old schema set allowUnknownOptionalFields, this would be true, but since it did not,
78
+ // this assert will fail, detecting the forwards compatibility break:
79
+ // this means these two versions of the application cannot collaborate on content using these schema.
80
+ assert.equal(forwardsCompatibilityStatus.canView, true);
81
+ ```
82
+
83
+ Later in the application development cycle, the application author decides they want to change their Point2D to
84
+ a Point3D, adding an extra field:
85
+
86
+ ```ts
87
+ // Build the current view schema
88
+ const schemaFactory = new SchemaFactory("test");
89
+ class Point3D extends schemaFactory.object("Point", {
90
+ x: factory.number,
91
+ y: factory.number,
92
+
93
+ // The current schema has a new optional field that was not present on Point2D
94
+ z: factory.optional(factory.number),
95
+ }) {}
96
+ ```
97
+
98
+ The test first compatibility test will pass as the Point2D schema is upgradeable to a Point3D schema.
99
+ However, the second compatibility test fill fail as an application using the Point2D view schema cannot collaborate on
100
+ content authored using the Point3D schema.
101
+
3
102
  ## 2.72.0
4
103
 
5
104
  ### Minor Changes
@@ -117,6 +117,9 @@ export const ArrayNodeSchema: {
117
117
  // @alpha
118
118
  export function asAlpha<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewAlpha<TSchema>;
119
119
 
120
+ // @alpha
121
+ export function asAlpha<TSchema extends ImplicitFieldSchema>(view: TreeViewConfiguration<TSchema>): TreeViewConfigurationAlpha<TSchema>;
122
+
120
123
  // @beta
121
124
  export function asBeta<TSchema extends ImplicitFieldSchema>(view: TreeView<TSchema>): TreeViewBeta<TSchema>;
122
125
 
@@ -138,6 +141,9 @@ export interface BranchableTree extends ViewableTree {
138
141
  rebase(branch: TreeBranchFork): void;
139
142
  }
140
143
 
144
+ // @alpha
145
+ export function checkCompatibility(viewWhichCreatedStoredSchema: TreeViewConfiguration, view: TreeViewConfiguration): Omit<SchemaCompatibilityStatus, "canInitialize">;
146
+
141
147
  // @alpha
142
148
  export function cloneWithReplacements(root: unknown, rootKey: string, replacer: (key: string, value: unknown) => {
143
149
  clone: boolean;
@@ -173,6 +179,9 @@ export type ConciseTree<THandle = IFluidHandle> = Exclude<TreeLeafValue, IFluidH
173
179
  // @alpha
174
180
  export function configuredSharedTree(options: SharedTreeOptions): SharedObjectKind<ITree>;
175
181
 
182
+ // @alpha
183
+ export function configuredSharedTreeAlpha(options: SharedTreeOptions): SharedObjectKind<ITree>;
184
+
176
185
  // @beta
177
186
  export function configuredSharedTreeBeta(options: SharedTreeOptionsBeta): SharedObjectKind<ITree>;
178
187
 
@@ -287,6 +296,9 @@ export abstract class ErasedType<out Name = unknown> {
287
296
  // @alpha
288
297
  export function evaluateLazySchema<T extends TreeNodeSchema>(value: LazyItem<T>): T;
289
298
 
299
+ // @alpha
300
+ export function exportCompatibilitySchemaSnapshot(config: Pick<TreeViewConfiguration, "schema">): JsonCompatibleReadOnly;
301
+
290
302
  // @public @system
291
303
  type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
292
304
 
@@ -382,6 +394,7 @@ export const FluidClientVersion: {
382
394
  readonly v2_0: "2.0.0";
383
395
  readonly v2_43: "2.43.0";
384
396
  readonly v2_52: "2.52.0";
397
+ readonly v2_73: "2.73.0";
385
398
  };
386
399
 
387
400
  // @public
@@ -728,6 +741,18 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
728
741
  // @public
729
742
  export type ImplicitFieldSchema = FieldSchema | ImplicitAllowedTypes;
730
743
 
744
+ // @alpha
745
+ export function importCompatibilitySchemaSnapshot(config: JsonCompatibleReadOnly): TreeViewConfiguration;
746
+
747
+ // @alpha
748
+ export type IncrementalEncodingPolicy = (nodeIdentifier: string | undefined, fieldKey: string) => boolean;
749
+
750
+ // @alpha
751
+ export function incrementalEncodingPolicyForAllowedTypes(rootSchema: TreeSchema): IncrementalEncodingPolicy;
752
+
753
+ // @alpha
754
+ export const incrementalSummaryHint: unique symbol;
755
+
731
756
  // @alpha
732
757
  export function independentInitializedView<const TSchema extends ImplicitFieldSchema>(config: TreeViewConfiguration<TSchema>, options: ForestOptions & ICodecOptions, content: ViewContent): TreeViewAlpha<TSchema>;
733
758
 
@@ -1387,21 +1412,10 @@ export interface SharedTreeFormatOptions {
1387
1412
  treeEncodeType: TreeCompressionStrategy;
1388
1413
  }
1389
1414
 
1390
- // @alpha
1391
- export const SharedTreeFormatVersion: {
1392
- readonly v1: 1;
1393
- readonly v2: 2;
1394
- readonly v3: 3;
1395
- readonly v5: 5;
1396
- readonly vSharedBranches: 100;
1397
- };
1398
-
1399
- // @alpha
1400
- export type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;
1401
-
1402
1415
  // @alpha @input
1403
- export interface SharedTreeOptions extends Partial<CodecWriteOptions>, Partial<SharedTreeFormatOptions>, SharedTreeOptionsBeta {
1416
+ export interface SharedTreeOptions extends SharedTreeOptionsBeta, Partial<CodecWriteOptions>, Partial<SharedTreeFormatOptions> {
1404
1417
  readonly enableSharedBranches?: boolean;
1418
+ shouldEncodeIncrementally?: IncrementalEncodingPolicy;
1405
1419
  }
1406
1420
 
1407
1421
  // @beta @input
@@ -1409,7 +1423,7 @@ export type SharedTreeOptionsBeta = ForestOptions;
1409
1423
 
1410
1424
  // @alpha @sealed
1411
1425
  export interface SimpleAllowedTypeAttributes {
1412
- readonly isStaged: boolean | undefined;
1426
+ readonly isStaged: false | SchemaUpgrade | undefined;
1413
1427
  }
1414
1428
 
1415
1429
  // @alpha @sealed
@@ -1486,7 +1500,7 @@ export namespace System_TableSchema {
1486
1500
  // @system
1487
1501
  export type CreateColumnOptionsBase<TSchemaFactory extends SchemaFactoryBeta = SchemaFactoryBeta, TCell extends ImplicitAllowedTypes = ImplicitAllowedTypes> = OptionsWithSchemaFactory<TSchemaFactory> & OptionsWithCellSchema<TCell>;
1488
1502
  // @system
1489
- export function createColumnSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TPropsSchema extends ImplicitFieldSchema>(inputSchemaFactory: SchemaFactoryBeta<TInputScope>, cellSchema: TCellSchema, propsSchema: TPropsSchema): TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Column">, NodeKind.Object, TreeNode & TableSchema.Column<TCellSchema, TPropsSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Column">, NodeKind, unknown>, object & {
1503
+ export function createColumnSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TPropsSchema extends ImplicitFieldSchema>(inputSchemaFactory: SchemaFactoryBeta<TInputScope>, propsSchema: TPropsSchema): TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Column">, NodeKind.Object, TreeNode & TableSchema.Column<TCellSchema, TPropsSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Column">, NodeKind, unknown>, object & {
1490
1504
  readonly id?: string | undefined;
1491
1505
  } & (FieldHasDefault<TPropsSchema> extends true ? {
1492
1506
  props?: InsertableTreeFieldFromImplicitField<TPropsSchema> | undefined;
@@ -1501,7 +1515,7 @@ export namespace System_TableSchema {
1501
1515
  // @sealed
1502
1516
  export function createRowSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TPropsSchema extends ImplicitFieldSchema>(inputSchemaFactory: SchemaFactoryBeta<TInputScope>, cellSchema: TCellSchema, propsSchema: TPropsSchema): TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row">, NodeKind.Object, TreeNode & TableSchema.Row<TCellSchema, TPropsSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row">, NodeKind, unknown>, object & {
1503
1517
  readonly id?: string | undefined;
1504
- readonly cells: (InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>> | undefined) & InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>>;
1518
+ readonly cells: (InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>> | undefined) & InsertableTypedNode_2<TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>>;
1505
1519
  } & (FieldHasDefault<TPropsSchema> extends true ? {
1506
1520
  props?: InsertableTreeFieldFromImplicitField<TPropsSchema> | undefined;
1507
1521
  } : {
@@ -1509,7 +1523,7 @@ export namespace System_TableSchema {
1509
1523
  }), true, {
1510
1524
  readonly props: TPropsSchema;
1511
1525
  readonly id: FieldSchema_2<FieldKind_2.Identifier, LeafSchema_2<"string", string>, unknown>;
1512
- readonly cells: FieldSchema_2<FieldKind_2.Required, TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode_2<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>, unknown>;
1526
+ readonly cells: FieldSchema_2<FieldKind_2.Required, TreeNodeSchemaClass<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, TreeRecordNode<TCellSchema> & WithType<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Row.cells">, NodeKind.Record, unknown>, RecordNodeInsertableData_2<TCellSchema>, true, TCellSchema, undefined, unknown>, unknown>;
1513
1527
  }>;
1514
1528
  // @system
1515
1529
  export function createTableSchema<const TInputScope extends string | undefined, const TCellSchema extends ImplicitAllowedTypes, const TColumnSchema extends ColumnSchemaBase<TInputScope, TCellSchema>, const TRowSchema extends RowSchemaBase<TInputScope, TCellSchema>>(inputSchemaFactory: SchemaFactoryBeta<TInputScope>, _cellSchema: TCellSchema, columnSchema: TColumnSchema, rowSchema: TRowSchema): TreeNodeSchemaCore_2<ScopedSchemaName<ScopedSchemaName<TInputScope, "table">, "Table">, NodeKind.Object, true, {
@@ -1636,10 +1650,6 @@ export namespace TableSchema {
1636
1650
  }
1637
1651
  // @sealed
1638
1652
  export interface Column<TCell extends ImplicitAllowedTypes, TProps extends ImplicitFieldSchema = ImplicitFieldSchema> {
1639
- getCells(): readonly {
1640
- rowId: string;
1641
- cell: TreeNodeFromImplicitAllowedTypes<TCell>;
1642
- }[];
1643
1653
  readonly id: string;
1644
1654
  get props(): TreeFieldFromImplicitField<TProps>;
1645
1655
  set props(value: InsertableTreeFieldFromImplicitField<TProps>);
@@ -1658,19 +1668,9 @@ export namespace TableSchema {
1658
1668
  }
1659
1669
  // @sealed
1660
1670
  export interface Row<TCell extends ImplicitAllowedTypes, TProps extends ImplicitFieldSchema = ImplicitFieldSchema> {
1661
- getCell(column: Column<TCell>): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;
1662
- getCell(columnId: string): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;
1663
- getCells(): readonly {
1664
- columnId: string;
1665
- cell: TreeNodeFromImplicitAllowedTypes<TCell>;
1666
- }[];
1667
1671
  readonly id: string;
1668
1672
  get props(): TreeFieldFromImplicitField<TProps>;
1669
1673
  set props(value: InsertableTreeFieldFromImplicitField<TProps>);
1670
- removeCell(column: Column<TCell>): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;
1671
- removeCell(columnId: string): TreeNodeFromImplicitAllowedTypes<TCell> | undefined;
1672
- setCell(column: Column<TCell>, value: InsertableTreeNodeFromImplicitAllowedTypes<TCell>): void;
1673
- setCell(columnId: string, value: InsertableTreeNodeFromImplicitAllowedTypes<TCell>): void;
1674
1674
  }
1675
1675
  export function row<const TScope extends string | undefined, const TCell extends ImplicitAllowedTypes>(params: System_TableSchema.CreateRowOptionsBase<SchemaFactoryBeta<TScope>, TCell>): System_TableSchema.RowSchemaBase<TScope, TCell, System_TableSchema.DefaultPropsType>;
1676
1676
  export function row<const TScope extends string | undefined, const TCell extends ImplicitAllowedTypes, const TProps extends ImplicitFieldSchema>(params: System_TableSchema.CreateRowOptionsBase<SchemaFactoryBeta<TScope>, TCell> & {
@@ -1881,6 +1881,7 @@ export interface TreeChangeEventsBeta<TNode extends TreeNode = TreeNode> extends
1881
1881
  // @alpha
1882
1882
  export enum TreeCompressionStrategy {
1883
1883
  Compressed = 0,
1884
+ CompressedIncremental = 2,
1884
1885
  Uncompressed = 1
1885
1886
  }
1886
1887
 
package/dist/alpha.d.ts CHANGED
@@ -211,6 +211,7 @@ export {
211
211
  ICodecOptions,
212
212
  ITreeAlpha,
213
213
  IdentifierIndex,
214
+ IncrementalEncodingPolicy,
214
215
  Insertable,
215
216
  InsertableContent,
216
217
  InsertableField,
@@ -250,7 +251,6 @@ export {
250
251
  RunTransactionParams,
251
252
  SchemaFactoryAlpha,
252
253
  SharedTreeFormatOptions,
253
- SharedTreeFormatVersion,
254
254
  SharedTreeOptions,
255
255
  SimpleAllowedTypeAttributes,
256
256
  SimpleArrayNodeSchema,
@@ -294,9 +294,11 @@ export {
294
294
  allowUnused,
295
295
  asAlpha,
296
296
  asTreeViewAlpha,
297
+ checkCompatibility,
297
298
  cloneWithReplacements,
298
299
  comparePersistedSchema,
299
300
  configuredSharedTree,
301
+ configuredSharedTreeAlpha,
300
302
  contentSchemaSymbol,
301
303
  createIdentifierIndex,
302
304
  createIndependentTreeAlpha,
@@ -304,11 +306,15 @@ export {
304
306
  decodeSimpleSchema,
305
307
  encodeSimpleSchema,
306
308
  evaluateLazySchema,
309
+ exportCompatibilitySchemaSnapshot,
307
310
  extractPersistedSchema,
308
311
  generateSchemaFromSimpleSchema,
309
312
  getBranch,
310
313
  getJsonSchema,
311
314
  getSimpleSchema,
315
+ importCompatibilitySchemaSnapshot,
316
+ incrementalEncodingPolicyForAllowedTypes,
317
+ incrementalSummaryHint,
312
318
  independentInitializedView,
313
319
  independentView,
314
320
  normalizeAllowedTypes,
package/lib/alpha.d.ts CHANGED
@@ -211,6 +211,7 @@ export {
211
211
  ICodecOptions,
212
212
  ITreeAlpha,
213
213
  IdentifierIndex,
214
+ IncrementalEncodingPolicy,
214
215
  Insertable,
215
216
  InsertableContent,
216
217
  InsertableField,
@@ -250,7 +251,6 @@ export {
250
251
  RunTransactionParams,
251
252
  SchemaFactoryAlpha,
252
253
  SharedTreeFormatOptions,
253
- SharedTreeFormatVersion,
254
254
  SharedTreeOptions,
255
255
  SimpleAllowedTypeAttributes,
256
256
  SimpleArrayNodeSchema,
@@ -294,9 +294,11 @@ export {
294
294
  allowUnused,
295
295
  asAlpha,
296
296
  asTreeViewAlpha,
297
+ checkCompatibility,
297
298
  cloneWithReplacements,
298
299
  comparePersistedSchema,
299
300
  configuredSharedTree,
301
+ configuredSharedTreeAlpha,
300
302
  contentSchemaSymbol,
301
303
  createIdentifierIndex,
302
304
  createIndependentTreeAlpha,
@@ -304,11 +306,15 @@ export {
304
306
  decodeSimpleSchema,
305
307
  encodeSimpleSchema,
306
308
  evaluateLazySchema,
309
+ exportCompatibilitySchemaSnapshot,
307
310
  extractPersistedSchema,
308
311
  generateSchemaFromSimpleSchema,
309
312
  getBranch,
310
313
  getJsonSchema,
311
314
  getSimpleSchema,
315
+ importCompatibilitySchemaSnapshot,
316
+ incrementalEncodingPolicyForAllowedTypes,
317
+ incrementalSummaryHint,
312
318
  independentInitializedView,
313
319
  independentView,
314
320
  normalizeAllowedTypes,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluid-framework",
3
- "version": "2.72.0",
3
+ "version": "2.74.0-365691",
4
4
  "description": "The main entry point into Fluid Framework public packages",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -57,17 +57,17 @@
57
57
  "main": "lib/index.js",
58
58
  "types": "lib/public.d.ts",
59
59
  "dependencies": {
60
- "@fluidframework/container-definitions": "~2.72.0",
61
- "@fluidframework/container-loader": "~2.72.0",
62
- "@fluidframework/core-interfaces": "~2.72.0",
63
- "@fluidframework/core-utils": "~2.72.0",
64
- "@fluidframework/driver-definitions": "~2.72.0",
65
- "@fluidframework/fluid-static": "~2.72.0",
66
- "@fluidframework/map": "~2.72.0",
67
- "@fluidframework/runtime-utils": "~2.72.0",
68
- "@fluidframework/sequence": "~2.72.0",
69
- "@fluidframework/shared-object-base": "~2.72.0",
70
- "@fluidframework/tree": "~2.72.0"
60
+ "@fluidframework/container-definitions": "2.74.0-365691",
61
+ "@fluidframework/container-loader": "2.74.0-365691",
62
+ "@fluidframework/core-interfaces": "2.74.0-365691",
63
+ "@fluidframework/core-utils": "2.74.0-365691",
64
+ "@fluidframework/driver-definitions": "2.74.0-365691",
65
+ "@fluidframework/fluid-static": "2.74.0-365691",
66
+ "@fluidframework/map": "2.74.0-365691",
67
+ "@fluidframework/runtime-utils": "2.74.0-365691",
68
+ "@fluidframework/sequence": "2.74.0-365691",
69
+ "@fluidframework/shared-object-base": "2.74.0-365691",
70
+ "@fluidframework/tree": "2.74.0-365691"
71
71
  },
72
72
  "devDependencies": {
73
73
  "@arethetypeswrong/cli": "^0.17.1",
@@ -75,7 +75,7 @@
75
75
  "@fluid-tools/build-cli": "^0.60.0",
76
76
  "@fluidframework/build-common": "^2.0.3",
77
77
  "@fluidframework/build-tools": "^0.60.0",
78
- "@fluidframework/eslint-config-fluid": "~2.72.0",
78
+ "@fluidframework/eslint-config-fluid": "2.74.0-365691",
79
79
  "@microsoft/api-extractor": "7.52.11",
80
80
  "@types/node": "^18.19.0",
81
81
  "concurrently": "^8.2.1",