fluid-framework 2.93.0 → 2.101.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,40 @@
|
|
|
1
1
|
# fluid-framework
|
|
2
2
|
|
|
3
|
+
## 2.101.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add SharedTreeOptionsBeta.healUnresolvableIdentifiersOnDecode to recover documents with corrupted identifiers ([#27281](https://github.com/microsoft/FluidFramework/pull/27281)) [d9205ddcd6a](https://github.com/microsoft/FluidFramework/commit/d9205ddcd6a9f0ec11d5422b38e30a6a91a9258c)
|
|
8
|
+
|
|
9
|
+
A SharedTree bug can result in corrupted documents due to their attach summary compressing identifier-field values in a way that cannot be uncompressed.
|
|
10
|
+
This bug manifested as remote clients processing the op throwing an error with the message "Unknown op space ID.".
|
|
11
|
+
|
|
12
|
+
This change adds an option (`healUnresolvableIdentifiersOnDecode`) to `configuredSharedTreeBetaLegacy` which will allow documents affected by this bug to load again when enabled.
|
|
13
|
+
Enabling this option carries some risk, see documentation on the interface itself for more details.
|
|
14
|
+
|
|
15
|
+
#### Who is affected
|
|
16
|
+
|
|
17
|
+
Only SharedTrees attached to a container that was already attached can be impacted.
|
|
18
|
+
Furthermore, this bug only occurs when the attached tree contains [`identifier`](https://fluidframework.com/docs/api/tree/schemafactory-class#identifier-property) fields which contain implicitly generated default values.
|
|
19
|
+
|
|
20
|
+
- Fix a SharedTree document corruption bug ([#27292](https://github.com/microsoft/FluidFramework/pull/27292)) [6f4cdcb7a0a](https://github.com/microsoft/FluidFramework/commit/6f4cdcb7a0a76ba215a361c7b3a12943750fe286)
|
|
21
|
+
|
|
22
|
+
A SharedTree bug which could corrupt documents when attaching them to containers has been fixed.
|
|
23
|
+
See `healUnresolvableIdentifiersOnDecode` on `configuredSharedTreeBetaLegacy` for a potential mitigation path for documents that were already corrupted by this bug.
|
|
24
|
+
|
|
25
|
+
#### Who is affected
|
|
26
|
+
|
|
27
|
+
Only SharedTrees attached to a container that was already attached can be impacted.
|
|
28
|
+
Furthermore, this bug only occurs when the attached tree contains [`identifier`](https://fluidframework.com/docs/api/tree/schemafactory-class#identifier-property) fields which contain implicitly generated default values.
|
|
29
|
+
|
|
30
|
+
## 2.100.0
|
|
31
|
+
|
|
32
|
+
### Minor Changes
|
|
33
|
+
|
|
34
|
+
- Node 22 is now the minimum supported Node.js version ([#27116](https://github.com/microsoft/FluidFramework/pull/27116)) [e8214d29663](https://github.com/microsoft/FluidFramework/commit/e8214d29663f5ee98d737daed82506a25d8de8d0)
|
|
35
|
+
|
|
36
|
+
All Fluid Framework client packages now require Node.js 22 or later. This aligns with the standing Node upgrade policy as Node 20 reaches end-of-life on April 30, 2026.
|
|
37
|
+
|
|
3
38
|
## 2.93.0
|
|
4
39
|
|
|
5
40
|
### Minor Changes
|
|
@@ -1555,6 +1555,8 @@ export class SchemaFactoryAlpha<out TScope extends string | undefined = string |
|
|
|
1555
1555
|
scopedFactoryAlpha<const T extends TName, TNameInner extends number | string = string>(name: T): SchemaFactoryAlpha<ScopedSchemaName<TScope, T>, TNameInner>;
|
|
1556
1556
|
readonly stagedOptional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "stagedOptionalUpgrade" | "defaultProvider"> | undefined) => FieldSchemaAlpha<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1557
1557
|
static readonly stagedOptional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "stagedOptionalUpgrade" | "defaultProvider"> | undefined) => FieldSchemaAlpha<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1558
|
+
readonly stagedOptionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "stagedOptionalUpgrade" | "defaultProvider"> | undefined) => FieldSchemaAlphaUnsafe<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1559
|
+
static readonly stagedOptionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "stagedOptionalUpgrade" | "defaultProvider"> | undefined) => FieldSchemaAlphaUnsafe<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1558
1560
|
readonly withDefault: <Kind extends FieldKind, Types extends ImplicitAllowedTypes, TCustomMetadata = unknown>(fieldSchema: FieldSchema<Kind, Types, TCustomMetadata>, defaultValue: NodeProvider<ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypes<Types>, Kind, true>>) => FieldSchemaAlpha<Kind, Types, TCustomMetadata, FieldPropsAlpha<TCustomMetadata> & {
|
|
1559
1561
|
defaultProvider: DefaultProvider;
|
|
1560
1562
|
}>;
|
|
@@ -1613,6 +1615,7 @@ export interface SchemaStatics {
|
|
|
1613
1615
|
// @alpha @sealed @system
|
|
1614
1616
|
export interface SchemaStaticsAlpha {
|
|
1615
1617
|
readonly stagedOptional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider" | "stagedOptionalUpgrade">) => FieldSchemaAlpha<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1618
|
+
readonly stagedOptionalRecursive: <const T extends System_Unsafe.ImplicitAllowedTypesUnsafe, const TCustomMetadata = unknown>(t: T, props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider" | "stagedOptionalUpgrade">) => FieldSchemaAlphaUnsafe<FieldKind.Optional, T, TCustomMetadata, FieldPropsAlpha<TCustomMetadata>>;
|
|
1616
1619
|
readonly withDefault: <Kind extends FieldKind, Types extends ImplicitAllowedTypes, TCustomMetadata = unknown>(fieldSchema: FieldSchema<Kind, Types, TCustomMetadata>, defaultValue: NodeProvider<InsertableTreeFieldFromImplicitField<FieldSchema<Kind, Types>>>) => FieldSchemaAlpha<Kind, Types, TCustomMetadata, FieldPropsAlpha<TCustomMetadata> & {
|
|
1617
1620
|
defaultProvider: DefaultProvider;
|
|
1618
1621
|
}>;
|
|
@@ -1664,7 +1667,9 @@ export interface SharedTreeOptions extends SharedTreeOptionsBeta, Partial<CodecW
|
|
|
1664
1667
|
}
|
|
1665
1668
|
|
|
1666
1669
|
// @beta @input
|
|
1667
|
-
export
|
|
1670
|
+
export interface SharedTreeOptionsBeta extends ForestOptions, Partial<CodecWriteOptionsBeta> {
|
|
1671
|
+
readonly healUnresolvableIdentifiersOnDecode?: boolean;
|
|
1672
|
+
}
|
|
1668
1673
|
|
|
1669
1674
|
// @alpha @sealed
|
|
1670
1675
|
export interface SimpleAllowedTypeAttributes<out Type extends SchemaType = SchemaType> {
|
|
@@ -1008,7 +1008,9 @@ export interface SharedObjectKind<out TSharedObject = unknown> extends ErasedTyp
|
|
|
1008
1008
|
export const SharedTree: SharedObjectKind<ITree>;
|
|
1009
1009
|
|
|
1010
1010
|
// @beta @input
|
|
1011
|
-
export
|
|
1011
|
+
export interface SharedTreeOptionsBeta extends ForestOptions, Partial<CodecWriteOptionsBeta> {
|
|
1012
|
+
readonly healUnresolvableIdentifiersOnDecode?: boolean;
|
|
1013
|
+
}
|
|
1012
1014
|
|
|
1013
1015
|
// @public @sealed @system
|
|
1014
1016
|
export interface SimpleNodeSchemaBase<out TNodeKind extends NodeKind, out TCustomMetadata = unknown> {
|
|
@@ -1372,7 +1372,9 @@ export type SharedStringSegment = TextSegment | Marker;
|
|
|
1372
1372
|
export const SharedTree: SharedObjectKind<ITree>;
|
|
1373
1373
|
|
|
1374
1374
|
// @beta @input
|
|
1375
|
-
export
|
|
1375
|
+
export interface SharedTreeOptionsBeta extends ForestOptions, Partial<CodecWriteOptionsBeta> {
|
|
1376
|
+
readonly healUnresolvableIdentifiersOnDecode?: boolean;
|
|
1377
|
+
}
|
|
1376
1378
|
|
|
1377
1379
|
export { Side }
|
|
1378
1380
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fluid-framework",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.101.0",
|
|
4
4
|
"description": "The main entry point into Fluid Framework public packages",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -57,24 +57,24 @@
|
|
|
57
57
|
"main": "lib/index.js",
|
|
58
58
|
"types": "lib/public.d.ts",
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@fluidframework/container-definitions": "~2.
|
|
61
|
-
"@fluidframework/container-loader": "~2.
|
|
62
|
-
"@fluidframework/core-interfaces": "~2.
|
|
63
|
-
"@fluidframework/core-utils": "~2.
|
|
64
|
-
"@fluidframework/driver-definitions": "~2.
|
|
65
|
-
"@fluidframework/fluid-static": "~2.
|
|
66
|
-
"@fluidframework/map": "~2.
|
|
67
|
-
"@fluidframework/runtime-utils": "~2.
|
|
68
|
-
"@fluidframework/sequence": "~2.
|
|
69
|
-
"@fluidframework/shared-object-base": "~2.
|
|
70
|
-
"@fluidframework/tree": "~2.
|
|
60
|
+
"@fluidframework/container-definitions": "~2.101.0",
|
|
61
|
+
"@fluidframework/container-loader": "~2.101.0",
|
|
62
|
+
"@fluidframework/core-interfaces": "~2.101.0",
|
|
63
|
+
"@fluidframework/core-utils": "~2.101.0",
|
|
64
|
+
"@fluidframework/driver-definitions": "~2.101.0",
|
|
65
|
+
"@fluidframework/fluid-static": "~2.101.0",
|
|
66
|
+
"@fluidframework/map": "~2.101.0",
|
|
67
|
+
"@fluidframework/runtime-utils": "~2.101.0",
|
|
68
|
+
"@fluidframework/sequence": "~2.101.0",
|
|
69
|
+
"@fluidframework/shared-object-base": "~2.101.0",
|
|
70
|
+
"@fluidframework/tree": "~2.101.0"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
74
74
|
"@biomejs/biome": "~2.4.5",
|
|
75
|
-
"@fluid-tools/build-cli": "^0.
|
|
75
|
+
"@fluid-tools/build-cli": "^0.65.0",
|
|
76
76
|
"@fluidframework/build-common": "^2.0.3",
|
|
77
|
-
"@fluidframework/build-tools": "^0.
|
|
77
|
+
"@fluidframework/build-tools": "^0.65.0",
|
|
78
78
|
"@fluidframework/eslint-config-fluid": "^9.0.0",
|
|
79
79
|
"@microsoft/api-extractor": "7.58.1",
|
|
80
80
|
"@types/node": "~22.19.17",
|