@fluidframework/tree 2.117.0 → 2.118.1
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 +86 -0
- package/api-report/tree.alpha.api.md +44 -1
- package/api-report/tree.beta.api.md +38 -0
- package/api-report/tree.legacy.beta.api.md +38 -0
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/entrypoints/beta.d.ts +1 -1
- package/dist/entrypoints/beta.d.ts.map +1 -1
- package/dist/entrypoints/beta.js.map +1 -1
- package/dist/entrypoints/legacy.d.ts +1 -1
- package/dist/entrypoints/legacy.d.ts.map +1 -1
- package/dist/entrypoints/legacy.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/schemaChecker.d.ts +9 -19
- package/dist/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/schemaChecker.js +130 -46
- package/dist/feature-libraries/schemaChecker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +13 -3
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +48 -11
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +4 -4
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts +36 -3
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/dist/simple-tree/api/discrepancies.js +40 -14
- package/dist/simple-tree/api/discrepancies.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +22 -3
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +140 -10
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +172 -7
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/core/toStored.d.ts +7 -0
- package/dist/simple-tree/core/toStored.d.ts.map +1 -1
- package/dist/simple-tree/core/toStored.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +2 -2
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/index.d.ts +1 -1
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +4 -3
- package/dist/simple-tree/index.js.map +1 -1
- package/docs/main/glossary.md +163 -0
- package/lib/entrypoints/alpha.d.ts +1 -1
- package/lib/entrypoints/alpha.d.ts.map +1 -1
- package/lib/entrypoints/alpha.js.map +1 -1
- package/lib/entrypoints/beta.d.ts +1 -1
- package/lib/entrypoints/beta.d.ts.map +1 -1
- package/lib/entrypoints/beta.js.map +1 -1
- package/lib/entrypoints/legacy.d.ts +1 -1
- package/lib/entrypoints/legacy.d.ts.map +1 -1
- package/lib/entrypoints/legacy.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/schemaChecker.d.ts +9 -19
- package/lib/feature-libraries/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/schemaChecker.js +133 -49
- package/lib/feature-libraries/schemaChecker.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +13 -3
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +49 -12
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +4 -4
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts +36 -3
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/lib/simple-tree/api/discrepancies.js +40 -14
- package/lib/simple-tree/api/discrepancies.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +22 -3
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +136 -7
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +172 -7
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/core/toStored.d.ts +7 -0
- package/lib/simple-tree/core/toStored.d.ts.map +1 -1
- package/lib/simple-tree/core/toStored.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +3 -3
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/index.d.ts +1 -1
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/package.json +22 -22
- package/src/entrypoints/alpha.ts +3 -0
- package/src/entrypoints/beta.ts +2 -0
- package/src/entrypoints/legacy.ts +2 -0
- package/src/feature-libraries/index.ts +1 -1
- package/src/feature-libraries/schemaChecker.ts +198 -82
- package/src/index.ts +3 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +75 -21
- package/src/simple-tree/api/configuration.ts +4 -4
- package/src/simple-tree/api/discrepancies.ts +100 -5
- package/src/simple-tree/api/index.ts +7 -1
- package/src/simple-tree/api/schemaCompatibilityTester.ts +186 -11
- package/src/simple-tree/api/tree.ts +184 -8
- package/src/simple-tree/core/toStored.ts +8 -0
- package/src/simple-tree/core/treeNodeValid.ts +3 -1
- package/src/simple-tree/index.ts +4 -0
- package/docs/main/runtime-schema-upgrade.md +0 -208
|
@@ -2,10 +2,26 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import type
|
|
5
|
+
import { type TreeStoredSchema } from "../../core/index.js";
|
|
6
6
|
import type { SchemaUpgrade, StagedSchemaUpgradePolicy } from "../core/index.js";
|
|
7
7
|
import type { TreeSchema } from "../treeSchema.js";
|
|
8
|
-
import type {
|
|
8
|
+
import type { SchemaCompatibilityStatusBeta, SchemaDiscrepancy } from "./tree.js";
|
|
9
|
+
/**
|
|
10
|
+
* Describes the discrepancies that prevent a view schema from viewing a stored schema as a
|
|
11
|
+
* readonly array.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getSchemaIncompatibilityDetails(viewSchema: TreeSchema, stored: TreeStoredSchema): readonly SchemaDiscrepancy[] | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* The enablement status of a staged schema upgrade in a document's stored schema.
|
|
16
|
+
*
|
|
17
|
+
* @remarks
|
|
18
|
+
* - `"disabled"` — no locations guarded by the upgrade are enabled in stored schema.
|
|
19
|
+
* - `"partial"` — at least one location is enabled but not all of them.
|
|
20
|
+
* - `"enabled"` — all locations guarded by the upgrade are enabled in stored schema.
|
|
21
|
+
*
|
|
22
|
+
* @alpha
|
|
23
|
+
*/
|
|
24
|
+
export type StagedUpgradeStatus = "disabled" | "partial" | "enabled";
|
|
9
25
|
/**
|
|
10
26
|
* Determines the compatibility of a stored document (based on its stored schema) with a viewer (based on its view schema).
|
|
11
27
|
*
|
|
@@ -18,6 +34,9 @@ import type { SchemaCompatibilityStatus } from "./tree.js";
|
|
|
18
34
|
* @param viewSchema - Schema for the view
|
|
19
35
|
* @param stored - The stored schema to check compatibility against
|
|
20
36
|
* @param stagedSchemaUpgrades - Staged schema upgrades enabled for this view, or explicit stored-schema generation options
|
|
37
|
+
*
|
|
21
38
|
*/
|
|
22
|
-
export declare function checkSchemaCompatibility(viewSchema: TreeSchema, stored: TreeStoredSchema, stagedSchemaUpgrades?: Iterable<SchemaUpgrade> | StagedSchemaUpgradePolicy): Omit<
|
|
39
|
+
export declare function checkSchemaCompatibility(viewSchema: TreeSchema, stored: TreeStoredSchema, stagedSchemaUpgrades?: Iterable<SchemaUpgrade> | StagedSchemaUpgradePolicy): Omit<SchemaCompatibilityStatusBeta, "canInitialize"> & {
|
|
40
|
+
enabledUpgrades: ReadonlyMap<SchemaUpgrade, StagedUpgradeStatus>;
|
|
41
|
+
};
|
|
23
42
|
//# sourceMappingURL=schemaCompatibilityTester.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaCompatibilityTester.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCompatibilityTester.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"schemaCompatibilityTester.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCompatibilityTester.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAGN,KAAK,gBAAgB,EAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAIjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAOnD,OAAO,KAAK,EAAE,6BAA6B,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAElF;;;GAGG;AACH,wBAAgB,+BAA+B,CAC9C,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,GACtB,SAAS,iBAAiB,EAAE,GAAG,SAAS,CAO1C;AAmED;;;;;;;;;GASG;AACH,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACvC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,gBAAgB,EACxB,oBAAoB,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,yBAAyB,GACxE,IAAI,CAAC,6BAA6B,EAAE,eAAe,CAAC,GAAG;IACzD,eAAe,EAAE,WAAW,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;CACjE,CA6DA"}
|
|
@@ -2,9 +2,84 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
+
import { unreachableCase } from "@fluidframework/core-utils/internal";
|
|
6
|
+
import { MapNodeStoredSchema, ObjectNodeStoredSchema, ValueSchema, } from "../../core/index.js";
|
|
7
|
+
import { NodeKind } from "../core/index.js";
|
|
5
8
|
import { allowsRepoSuperset, defaultSchemaPolicy } from "../../feature-libraries/index.js";
|
|
6
|
-
import { toUpgradeSchema } from "../toStoredSchema.js";
|
|
7
|
-
import { getDiscrepanciesInAllowedContent } from "./discrepancies.js";
|
|
9
|
+
import { resolveStoredSchemaGenerationOptions, toUpgradeSchema } from "../toStoredSchema.js";
|
|
10
|
+
import { getDiscrepanciesInAllowedContent, } from "./discrepancies.js";
|
|
11
|
+
/**
|
|
12
|
+
* Describes the discrepancies that prevent a view schema from viewing a stored schema as a
|
|
13
|
+
* readonly array.
|
|
14
|
+
*/
|
|
15
|
+
export function getSchemaIncompatibilityDetails(viewSchema, stored) {
|
|
16
|
+
const discrepancies = [...getDiscrepanciesInAllowedContent(viewSchema, stored)];
|
|
17
|
+
if (discrepancies.length === 0) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return discrepancies.map(formatSchemaDiscrepancy);
|
|
21
|
+
}
|
|
22
|
+
function formatSchemaDiscrepancy(value) {
|
|
23
|
+
switch (value.mismatch) {
|
|
24
|
+
case "allowedTypes": {
|
|
25
|
+
return {
|
|
26
|
+
mismatch: value.mismatch,
|
|
27
|
+
location: value.identifier === undefined
|
|
28
|
+
? "root"
|
|
29
|
+
: {
|
|
30
|
+
nodeType: value.identifier,
|
|
31
|
+
fieldKey: value.fieldKey,
|
|
32
|
+
},
|
|
33
|
+
view: value.view.map(({ type }) => type.identifier).sort(),
|
|
34
|
+
...(value.stagedView === undefined
|
|
35
|
+
? {}
|
|
36
|
+
: {
|
|
37
|
+
stagedView: value.stagedView.map(({ type }) => type.identifier).sort(),
|
|
38
|
+
}),
|
|
39
|
+
stored: [...value.stored].sort(),
|
|
40
|
+
...(value.viewIsStagedOptional === true ? { viewIsStagedOptional: true } : {}),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
case "fieldKind": {
|
|
44
|
+
return {
|
|
45
|
+
mismatch: value.mismatch,
|
|
46
|
+
location: value.identifier === undefined
|
|
47
|
+
? "root"
|
|
48
|
+
: {
|
|
49
|
+
nodeType: value.identifier,
|
|
50
|
+
fieldKey: value.fieldKey,
|
|
51
|
+
},
|
|
52
|
+
view: value.view,
|
|
53
|
+
stored: value.stored,
|
|
54
|
+
...(value.viewIsStagedOptional === true ? { viewIsStagedOptional: true } : {}),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
case "valueSchema": {
|
|
58
|
+
return {
|
|
59
|
+
mismatch: value.mismatch,
|
|
60
|
+
nodeType: value.identifier,
|
|
61
|
+
view: value.view === undefined ? undefined : ValueSchema[value.view],
|
|
62
|
+
stored: value.stored === undefined ? undefined : ValueSchema[value.stored],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
case "nodeKind": {
|
|
66
|
+
const storedNodeKind = value.stored === ObjectNodeStoredSchema
|
|
67
|
+
? "Object"
|
|
68
|
+
: value.stored === MapNodeStoredSchema
|
|
69
|
+
? "Map"
|
|
70
|
+
: "Leaf";
|
|
71
|
+
return {
|
|
72
|
+
mismatch: value.mismatch,
|
|
73
|
+
nodeType: value.identifier,
|
|
74
|
+
view: NodeKind[value.view],
|
|
75
|
+
stored: storedNodeKind,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
default: {
|
|
79
|
+
return unreachableCase(value);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
8
83
|
/**
|
|
9
84
|
* Determines the compatibility of a stored document (based on its stored schema) with a viewer (based on its view schema).
|
|
10
85
|
*
|
|
@@ -17,20 +92,46 @@ import { getDiscrepanciesInAllowedContent } from "./discrepancies.js";
|
|
|
17
92
|
* @param viewSchema - Schema for the view
|
|
18
93
|
* @param stored - The stored schema to check compatibility against
|
|
19
94
|
* @param stagedSchemaUpgrades - Staged schema upgrades enabled for this view, or explicit stored-schema generation options
|
|
95
|
+
*
|
|
20
96
|
*/
|
|
21
97
|
export function checkSchemaCompatibility(viewSchema, stored, stagedSchemaUpgrades) {
|
|
22
98
|
// The public API surface assumes defaultSchemaPolicy
|
|
23
99
|
const policy = defaultSchemaPolicy;
|
|
100
|
+
const configuredPolicy = resolveStoredSchemaGenerationOptions(stagedSchemaUpgrades);
|
|
101
|
+
const includeAlreadyEnabledUpgrades = configuredPolicy.includeAlreadyEnabledUpgrades ?? false;
|
|
102
|
+
// Collect upgrade locations during the discrepancy walk (single pass).
|
|
103
|
+
const totalLocations = new Map();
|
|
104
|
+
const enabledLocations = new Map();
|
|
105
|
+
const upgradeCollector = {
|
|
106
|
+
allowedType(upgrade, isEnabled) {
|
|
107
|
+
totalLocations.set(upgrade, (totalLocations.get(upgrade) ?? 0) + 1);
|
|
108
|
+
if (isEnabled) {
|
|
109
|
+
enabledLocations.set(upgrade, (enabledLocations.get(upgrade) ?? 0) + 1);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
optionalField(upgrade, isEnabled) {
|
|
113
|
+
totalLocations.set(upgrade, (totalLocations.get(upgrade) ?? 0) + 1);
|
|
114
|
+
if (isEnabled) {
|
|
115
|
+
enabledLocations.set(upgrade, (enabledLocations.get(upgrade) ?? 0) + 1);
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
};
|
|
24
119
|
// View schema allows a subset of documents that stored schema does, and the discrepancies are allowed by policy
|
|
25
120
|
// determined by the view schema (i.e. objects with extra optional fields in the stored schema have opted into allowing this.
|
|
26
121
|
// In the future, this would also include things like:
|
|
27
122
|
// - fields with more allowed types in the stored schema than in the view schema have out-of-schema "unknown content" adapters
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
123
|
+
// Complete the full walk even after finding an incompatibility so discrepancy details and
|
|
124
|
+
// staged-upgrade status contain all available information for debugging.
|
|
125
|
+
const discrepancies = [];
|
|
126
|
+
for (const discrepancy of getDiscrepanciesInAllowedContent(viewSchema, stored, upgradeCollector)) {
|
|
127
|
+
discrepancies.push(formatSchemaDiscrepancy(discrepancy));
|
|
32
128
|
}
|
|
33
|
-
const
|
|
129
|
+
const canView = discrepancies.length === 0;
|
|
130
|
+
const enabledUpgrades = computeUpgradeStatuses(totalLocations, enabledLocations);
|
|
131
|
+
const upgradePolicy = includeAlreadyEnabledUpgrades
|
|
132
|
+
? includeEnabledUpgrades(configuredPolicy, enabledUpgrades)
|
|
133
|
+
: configuredPolicy;
|
|
134
|
+
const wouldUpgradeTo = toUpgradeSchema(viewSchema.root, upgradePolicy);
|
|
34
135
|
const canUpgrade = allowsRepoSuperset(policy, stored, wouldUpgradeTo);
|
|
35
136
|
// If true, then upgrading has no effect on what can be stored in the document.
|
|
36
137
|
// TODO: This should likely be changed to indicate up a schema upgrade would be a no-op, including stored schema metadata.
|
|
@@ -39,6 +140,34 @@ export function checkSchemaCompatibility(viewSchema, stored, stagedSchemaUpgrade
|
|
|
39
140
|
canView,
|
|
40
141
|
canUpgrade,
|
|
41
142
|
isEquivalent,
|
|
143
|
+
discrepancies: canView ? undefined : discrepancies,
|
|
144
|
+
enabledUpgrades,
|
|
42
145
|
};
|
|
43
146
|
}
|
|
147
|
+
function includeEnabledUpgrades(configuredPolicy, enabledUpgrades) {
|
|
148
|
+
if (enabledUpgrades.size === 0) {
|
|
149
|
+
return configuredPolicy;
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
includeStaged: (upgrade) => configuredPolicy.includeStaged(upgrade) || enabledUpgrades.has(upgrade),
|
|
153
|
+
includeStagedOptional: (upgrade) => configuredPolicy.includeStagedOptional(upgrade) || enabledUpgrades.has(upgrade),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Computes the {@link StagedUpgradeStatus} for each upgrade token from total and enabled location counts.
|
|
158
|
+
* Only tokens with at least one enabled location are included in the returned map.
|
|
159
|
+
*/
|
|
160
|
+
function computeUpgradeStatuses(totalLocations, enabledLocations) {
|
|
161
|
+
const result = new Map();
|
|
162
|
+
for (const [upgrade, total] of totalLocations) {
|
|
163
|
+
const enabled = enabledLocations.get(upgrade) ?? 0;
|
|
164
|
+
if (enabled > 0 && enabled < total) {
|
|
165
|
+
result.set(upgrade, "partial");
|
|
166
|
+
}
|
|
167
|
+
else if (enabled >= total && enabled > 0) {
|
|
168
|
+
result.set(upgrade, "enabled");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
44
173
|
//# sourceMappingURL=schemaCompatibilityTester.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaCompatibilityTester.js","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCompatibilityTester.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,gCAAgC,EAAE,MAAM,oBAAoB,CAAC;AAGtE;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,wBAAwB,CACvC,UAAsB,EACtB,MAAwB,EACxB,oBAA0E;IAE1E,qDAAqD;IACrD,MAAM,MAAM,GAAG,mBAAmB,CAAC;IAEnC,gHAAgH;IAChH,6HAA6H;IAC7H,sDAAsD;IACtD,8HAA8H;IAC9H,IAAI,OAAO,GAAG,IAAI,CAAC;IAEnB,KAAK,MAAM,YAAY,IAAI,gCAAgC,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,CAAC;QACjF,OAAO,GAAG,KAAK,CAAC;QAChB,MAAM;IACP,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC;IAE9E,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAEtE,+EAA+E;IAC/E,0HAA0H;IAC1H,MAAM,YAAY,GACjB,OAAO,IAAI,UAAU,IAAI,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAE7E,OAAO;QACN,OAAO;QACP,UAAU;QACV,YAAY;KACZ,CAAC;AACH,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { TreeStoredSchema } from \"../../core/index.js\";\nimport type { SchemaUpgrade, StagedSchemaUpgradePolicy } from \"../core/index.js\";\nimport { allowsRepoSuperset, defaultSchemaPolicy } from \"../../feature-libraries/index.js\";\nimport { toUpgradeSchema } from \"../toStoredSchema.js\";\nimport type { TreeSchema } from \"../treeSchema.js\";\n\nimport { getDiscrepanciesInAllowedContent } from \"./discrepancies.js\";\nimport type { SchemaCompatibilityStatus } from \"./tree.js\";\n\n/**\n * Determines the compatibility of a stored document (based on its stored schema) with a viewer (based on its view schema).\n *\n * Adapters can be provided to handle differences between the two schema.\n * Adapters should only use to types in the `view` SchemaRepository.\n *\n * TODO: this API violates the parse don't validate design philosophy.\n * It should be wrapped with (or replaced by) a parse style API.\n *\n * @param viewSchema - Schema for the view\n * @param stored - The stored schema to check compatibility against\n * @param stagedSchemaUpgrades - Staged schema upgrades enabled for this view, or explicit stored-schema generation options\n */\nexport function checkSchemaCompatibility(\n\tviewSchema: TreeSchema,\n\tstored: TreeStoredSchema,\n\tstagedSchemaUpgrades?: Iterable<SchemaUpgrade> | StagedSchemaUpgradePolicy,\n): Omit<SchemaCompatibilityStatus, \"canInitialize\"> {\n\t// The public API surface assumes defaultSchemaPolicy\n\tconst policy = defaultSchemaPolicy;\n\n\t// View schema allows a subset of documents that stored schema does, and the discrepancies are allowed by policy\n\t// determined by the view schema (i.e. objects with extra optional fields in the stored schema have opted into allowing this.\n\t// In the future, this would also include things like:\n\t// - fields with more allowed types in the stored schema than in the view schema have out-of-schema \"unknown content\" adapters\n\tlet canView = true;\n\n\tfor (const _discrepancy of getDiscrepanciesInAllowedContent(viewSchema, stored)) {\n\t\tcanView = false;\n\t\tbreak;\n\t}\n\n\tconst wouldUpgradeTo = toUpgradeSchema(viewSchema.root, stagedSchemaUpgrades);\n\n\tconst canUpgrade = allowsRepoSuperset(policy, stored, wouldUpgradeTo);\n\n\t// If true, then upgrading has no effect on what can be stored in the document.\n\t// TODO: This should likely be changed to indicate up a schema upgrade would be a no-op, including stored schema metadata.\n\tconst isEquivalent =\n\t\tcanView && canUpgrade && allowsRepoSuperset(policy, wouldUpgradeTo, stored);\n\n\treturn {\n\t\tcanView,\n\t\tcanUpgrade,\n\t\tisEquivalent,\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"schemaCompatibilityTester.js","sourceRoot":"","sources":["../../../src/simple-tree/api/schemaCompatibilityTester.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\ttype TreeStoredSchema,\n\tValueSchema,\n} from \"../../core/index.js\";\nimport type { SchemaUpgrade, StagedSchemaUpgradePolicy } from \"../core/index.js\";\nimport { NodeKind } from \"../core/index.js\";\nimport { allowsRepoSuperset, defaultSchemaPolicy } from \"../../feature-libraries/index.js\";\nimport { resolveStoredSchemaGenerationOptions, toUpgradeSchema } from \"../toStoredSchema.js\";\nimport type { TreeSchema } from \"../treeSchema.js\";\n\nimport {\n\tgetDiscrepanciesInAllowedContent,\n\ttype Discrepancy,\n\ttype UpgradeLocationCollector,\n} from \"./discrepancies.js\";\nimport type { SchemaCompatibilityStatusBeta, SchemaDiscrepancy } from \"./tree.js\";\n\n/**\n * Describes the discrepancies that prevent a view schema from viewing a stored schema as a\n * readonly array.\n */\nexport function getSchemaIncompatibilityDetails(\n\tviewSchema: TreeSchema,\n\tstored: TreeStoredSchema,\n): readonly SchemaDiscrepancy[] | undefined {\n\tconst discrepancies = [...getDiscrepanciesInAllowedContent(viewSchema, stored)];\n\tif (discrepancies.length === 0) {\n\t\treturn undefined;\n\t}\n\n\treturn discrepancies.map(formatSchemaDiscrepancy);\n}\n\nfunction formatSchemaDiscrepancy(value: Discrepancy): SchemaDiscrepancy {\n\tswitch (value.mismatch) {\n\t\tcase \"allowedTypes\": {\n\t\t\treturn {\n\t\t\t\tmismatch: value.mismatch,\n\t\t\t\tlocation:\n\t\t\t\t\tvalue.identifier === undefined\n\t\t\t\t\t\t? \"root\"\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tnodeType: value.identifier,\n\t\t\t\t\t\t\t\tfieldKey: value.fieldKey,\n\t\t\t\t\t\t\t},\n\t\t\t\tview: value.view.map(({ type }) => type.identifier).sort(),\n\t\t\t\t...(value.stagedView === undefined\n\t\t\t\t\t? {}\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstagedView: value.stagedView.map(({ type }) => type.identifier).sort(),\n\t\t\t\t\t\t}),\n\t\t\t\tstored: [...value.stored].sort(),\n\t\t\t\t...(value.viewIsStagedOptional === true ? { viewIsStagedOptional: true } : {}),\n\t\t\t};\n\t\t}\n\t\tcase \"fieldKind\": {\n\t\t\treturn {\n\t\t\t\tmismatch: value.mismatch,\n\t\t\t\tlocation:\n\t\t\t\t\tvalue.identifier === undefined\n\t\t\t\t\t\t? \"root\"\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tnodeType: value.identifier,\n\t\t\t\t\t\t\t\tfieldKey: value.fieldKey,\n\t\t\t\t\t\t\t},\n\t\t\t\tview: value.view,\n\t\t\t\tstored: value.stored,\n\t\t\t\t...(value.viewIsStagedOptional === true ? { viewIsStagedOptional: true } : {}),\n\t\t\t};\n\t\t}\n\t\tcase \"valueSchema\": {\n\t\t\treturn {\n\t\t\t\tmismatch: value.mismatch,\n\t\t\t\tnodeType: value.identifier,\n\t\t\t\tview: value.view === undefined ? undefined : ValueSchema[value.view],\n\t\t\t\tstored: value.stored === undefined ? undefined : ValueSchema[value.stored],\n\t\t\t};\n\t\t}\n\t\tcase \"nodeKind\": {\n\t\t\tconst storedNodeKind =\n\t\t\t\tvalue.stored === ObjectNodeStoredSchema\n\t\t\t\t\t? \"Object\"\n\t\t\t\t\t: value.stored === MapNodeStoredSchema\n\t\t\t\t\t\t? \"Map\"\n\t\t\t\t\t\t: \"Leaf\";\n\t\t\treturn {\n\t\t\t\tmismatch: value.mismatch,\n\t\t\t\tnodeType: value.identifier,\n\t\t\t\tview: NodeKind[value.view],\n\t\t\t\tstored: storedNodeKind,\n\t\t\t};\n\t\t}\n\t\tdefault: {\n\t\t\treturn unreachableCase(value);\n\t\t}\n\t}\n}\n\n/**\n * The enablement status of a staged schema upgrade in a document's stored schema.\n *\n * @remarks\n * - `\"disabled\"` — no locations guarded by the upgrade are enabled in stored schema.\n * - `\"partial\"` — at least one location is enabled but not all of them.\n * - `\"enabled\"` — all locations guarded by the upgrade are enabled in stored schema.\n *\n * @alpha\n */\nexport type StagedUpgradeStatus = \"disabled\" | \"partial\" | \"enabled\";\n\n/**\n * Determines the compatibility of a stored document (based on its stored schema) with a viewer (based on its view schema).\n *\n * Adapters can be provided to handle differences between the two schema.\n * Adapters should only use to types in the `view` SchemaRepository.\n *\n * TODO: this API violates the parse don't validate design philosophy.\n * It should be wrapped with (or replaced by) a parse style API.\n *\n * @param viewSchema - Schema for the view\n * @param stored - The stored schema to check compatibility against\n * @param stagedSchemaUpgrades - Staged schema upgrades enabled for this view, or explicit stored-schema generation options\n *\n */\nexport function checkSchemaCompatibility(\n\tviewSchema: TreeSchema,\n\tstored: TreeStoredSchema,\n\tstagedSchemaUpgrades?: Iterable<SchemaUpgrade> | StagedSchemaUpgradePolicy,\n): Omit<SchemaCompatibilityStatusBeta, \"canInitialize\"> & {\n\tenabledUpgrades: ReadonlyMap<SchemaUpgrade, StagedUpgradeStatus>;\n} {\n\t// The public API surface assumes defaultSchemaPolicy\n\tconst policy = defaultSchemaPolicy;\n\tconst configuredPolicy = resolveStoredSchemaGenerationOptions(stagedSchemaUpgrades);\n\tconst includeAlreadyEnabledUpgrades =\n\t\tconfiguredPolicy.includeAlreadyEnabledUpgrades ?? false;\n\n\t// Collect upgrade locations during the discrepancy walk (single pass).\n\tconst totalLocations = new Map<SchemaUpgrade, number>();\n\tconst enabledLocations = new Map<SchemaUpgrade, number>();\n\tconst upgradeCollector: UpgradeLocationCollector = {\n\t\tallowedType(upgrade, isEnabled) {\n\t\t\ttotalLocations.set(upgrade, (totalLocations.get(upgrade) ?? 0) + 1);\n\t\t\tif (isEnabled) {\n\t\t\t\tenabledLocations.set(upgrade, (enabledLocations.get(upgrade) ?? 0) + 1);\n\t\t\t}\n\t\t},\n\t\toptionalField(upgrade, isEnabled) {\n\t\t\ttotalLocations.set(upgrade, (totalLocations.get(upgrade) ?? 0) + 1);\n\t\t\tif (isEnabled) {\n\t\t\t\tenabledLocations.set(upgrade, (enabledLocations.get(upgrade) ?? 0) + 1);\n\t\t\t}\n\t\t},\n\t};\n\n\t// View schema allows a subset of documents that stored schema does, and the discrepancies are allowed by policy\n\t// determined by the view schema (i.e. objects with extra optional fields in the stored schema have opted into allowing this.\n\t// In the future, this would also include things like:\n\t// - fields with more allowed types in the stored schema than in the view schema have out-of-schema \"unknown content\" adapters\n\t// Complete the full walk even after finding an incompatibility so discrepancy details and\n\t// staged-upgrade status contain all available information for debugging.\n\tconst discrepancies: SchemaDiscrepancy[] = [];\n\tfor (const discrepancy of getDiscrepanciesInAllowedContent(\n\t\tviewSchema,\n\t\tstored,\n\t\tupgradeCollector,\n\t)) {\n\t\tdiscrepancies.push(formatSchemaDiscrepancy(discrepancy));\n\t}\n\tconst canView = discrepancies.length === 0;\n\n\tconst enabledUpgrades = computeUpgradeStatuses(totalLocations, enabledLocations);\n\tconst upgradePolicy = includeAlreadyEnabledUpgrades\n\t\t? includeEnabledUpgrades(configuredPolicy, enabledUpgrades)\n\t\t: configuredPolicy;\n\tconst wouldUpgradeTo = toUpgradeSchema(viewSchema.root, upgradePolicy);\n\n\tconst canUpgrade = allowsRepoSuperset(policy, stored, wouldUpgradeTo);\n\n\t// If true, then upgrading has no effect on what can be stored in the document.\n\t// TODO: This should likely be changed to indicate up a schema upgrade would be a no-op, including stored schema metadata.\n\tconst isEquivalent =\n\t\tcanView && canUpgrade && allowsRepoSuperset(policy, wouldUpgradeTo, stored);\n\n\treturn {\n\t\tcanView,\n\t\tcanUpgrade,\n\t\tisEquivalent,\n\t\tdiscrepancies: canView ? undefined : discrepancies,\n\t\tenabledUpgrades,\n\t};\n}\n\nfunction includeEnabledUpgrades(\n\tconfiguredPolicy: StagedSchemaUpgradePolicy,\n\tenabledUpgrades: ReadonlyMap<SchemaUpgrade, StagedUpgradeStatus>,\n): StagedSchemaUpgradePolicy {\n\tif (enabledUpgrades.size === 0) {\n\t\treturn configuredPolicy;\n\t}\n\treturn {\n\t\tincludeStaged: (upgrade) =>\n\t\t\tconfiguredPolicy.includeStaged(upgrade) || enabledUpgrades.has(upgrade),\n\t\tincludeStagedOptional: (upgrade) =>\n\t\t\tconfiguredPolicy.includeStagedOptional(upgrade) || enabledUpgrades.has(upgrade),\n\t};\n}\n\n/**\n * Computes the {@link StagedUpgradeStatus} for each upgrade token from total and enabled location counts.\n * Only tokens with at least one enabled location are included in the returned map.\n */\nfunction computeUpgradeStatuses(\n\ttotalLocations: ReadonlyMap<SchemaUpgrade, number>,\n\tenabledLocations: ReadonlyMap<SchemaUpgrade, number>,\n): ReadonlyMap<SchemaUpgrade, StagedUpgradeStatus> {\n\tconst result = new Map<SchemaUpgrade, StagedUpgradeStatus>();\n\tfor (const [upgrade, total] of totalLocations) {\n\t\tconst enabled = enabledLocations.get(upgrade) ?? 0;\n\t\tif (enabled > 0 && enabled < total) {\n\t\t\tresult.set(upgrade, \"partial\");\n\t\t} else if (enabled >= total && enabled > 0) {\n\t\t\tresult.set(upgrade, \"enabled\");\n\t\t}\n\t}\n\treturn result;\n}\n"]}
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
import type { IFluidLoadable, IDisposable, Listenable } from "@fluidframework/core-interfaces";
|
|
6
6
|
import type { ChangeMetadata, CommitMetadata, CustomMetadataTree, RevertibleAlphaFactory, RevertibleFactory, RevertToOptionsAlpha } from "../../core/index.js";
|
|
7
7
|
import type { JsonCompatibleReadOnly, JsonCompatibleReadOnlyObject } from "../../util/index.js";
|
|
8
|
+
import type { SchemaUpgrade } from "../core/index.js";
|
|
8
9
|
import type { ImplicitFieldSchema, InsertableField, InsertableTreeFieldFromImplicitField, ReadableField, ReadSchema, TreeFieldFromImplicitField } from "../fieldSchema.js";
|
|
9
10
|
import type { SimpleTreeSchema } from "../simpleSchema.js";
|
|
10
11
|
import type { UnsafeUnknownSchema } from "../unsafeUnknownSchema.js";
|
|
11
12
|
import type { TreeViewConfiguration } from "./configuration.js";
|
|
13
|
+
import type { StagedUpgradeStatus } from "./schemaCompatibilityTester.js";
|
|
12
14
|
import type { RunTransactionParamsAlpha, RunTransactionParamsBeta, TransactionCallbackStatusAlpha, TransactionCallbackStatusBeta, TransactionVoidResult, TransactionValueResult, VoidTransactionCallbackStatusAlpha, VoidTransactionCallbackStatusBeta, WithValue } from "./transactionTypes.js";
|
|
13
15
|
import type { VerboseTree } from "./verboseTree.js";
|
|
14
16
|
/**
|
|
@@ -485,9 +487,8 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
|
|
|
485
487
|
*
|
|
486
488
|
* When using {@link TreeViewConfigurationAlpha} with a {@link ITreeViewConfigurationAlpha.stagedUpgradePolicy},
|
|
487
489
|
* staged schema upgrades matching the configured policy are included in the target stored schema.
|
|
488
|
-
*
|
|
489
|
-
*
|
|
490
|
-
* `upgradeSchema` to throw a `UsageError` because the requested target would narrow the stored schema.
|
|
490
|
+
* Set {@link (StagedSchemaUpgradePolicy:interface).includeAlreadyEnabledUpgrades} to `true` to
|
|
491
|
+
* also include staged upgrades that are already enabled in the document.
|
|
491
492
|
*
|
|
492
493
|
* @example Enabling a staged allowed type for documents, selected by a feature flag
|
|
493
494
|
*
|
|
@@ -555,11 +556,163 @@ export interface TreeView<in out TSchema extends ImplicitFieldSchema> extends ID
|
|
|
555
556
|
*/
|
|
556
557
|
readonly schema: TSchema;
|
|
557
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* A discrepancy between a view schema and a document's stored schema.
|
|
561
|
+
*
|
|
562
|
+
* @remarks
|
|
563
|
+
* The `mismatch` property discriminates the different discrepancy shapes.
|
|
564
|
+
*
|
|
565
|
+
* @sealed @beta
|
|
566
|
+
*/
|
|
567
|
+
export type SchemaDiscrepancy = {
|
|
568
|
+
/**
|
|
569
|
+
* Indicates that a field allows different node types in the view and stored schemas.
|
|
570
|
+
*/
|
|
571
|
+
readonly mismatch: "allowedTypes";
|
|
572
|
+
/**
|
|
573
|
+
* The field with the discrepancy.
|
|
574
|
+
*
|
|
575
|
+
* `"root"` identifies the root field. Otherwise, `nodeType` identifies the containing
|
|
576
|
+
* node schema and `fieldKey` identifies its field. `fieldKey` is undefined for a map
|
|
577
|
+
* node's implicit field.
|
|
578
|
+
*/
|
|
579
|
+
readonly location: "root" | {
|
|
580
|
+
readonly nodeType: string;
|
|
581
|
+
readonly fieldKey: string | undefined;
|
|
582
|
+
};
|
|
583
|
+
/**
|
|
584
|
+
* Non-staged node type identifiers allowed by the view schema but not the stored schema.
|
|
585
|
+
*/
|
|
586
|
+
readonly view: readonly string[];
|
|
587
|
+
/**
|
|
588
|
+
* Staged node type identifiers allowed by the view schema but not the stored schema.
|
|
589
|
+
*
|
|
590
|
+
* @remarks These types provide rollout context but do not cause the discrepancy.
|
|
591
|
+
*/
|
|
592
|
+
readonly stagedView?: readonly string[];
|
|
593
|
+
/**
|
|
594
|
+
* Node type identifiers allowed by the stored schema but not the view schema.
|
|
595
|
+
*/
|
|
596
|
+
readonly stored: readonly string[];
|
|
597
|
+
/**
|
|
598
|
+
* Whether the view field is a staged optional field.
|
|
599
|
+
*
|
|
600
|
+
* @remarks Omitted when false.
|
|
601
|
+
*/
|
|
602
|
+
readonly viewIsStagedOptional?: true;
|
|
603
|
+
} | {
|
|
604
|
+
/**
|
|
605
|
+
* Indicates that a field has different field kinds in the view and stored schemas.
|
|
606
|
+
*/
|
|
607
|
+
readonly mismatch: "fieldKind";
|
|
608
|
+
/**
|
|
609
|
+
* The field with the discrepancy.
|
|
610
|
+
*
|
|
611
|
+
* `"root"` identifies the root field. Otherwise, `nodeType` identifies the containing
|
|
612
|
+
* node schema and `fieldKey` identifies its field. `fieldKey` is undefined for a map
|
|
613
|
+
* node's implicit field.
|
|
614
|
+
*/
|
|
615
|
+
readonly location: "root" | {
|
|
616
|
+
readonly nodeType: string;
|
|
617
|
+
readonly fieldKey: string | undefined;
|
|
618
|
+
};
|
|
619
|
+
/**
|
|
620
|
+
* The field kind required by the view schema.
|
|
621
|
+
*/
|
|
622
|
+
readonly view: string;
|
|
623
|
+
/**
|
|
624
|
+
* The field kind recorded in the stored schema.
|
|
625
|
+
*/
|
|
626
|
+
readonly stored: string;
|
|
627
|
+
/**
|
|
628
|
+
* Whether the view field is a staged optional field.
|
|
629
|
+
*
|
|
630
|
+
* @remarks Omitted when false.
|
|
631
|
+
*/
|
|
632
|
+
readonly viewIsStagedOptional?: true;
|
|
633
|
+
} | {
|
|
634
|
+
/**
|
|
635
|
+
* Indicates that a leaf node accepts different value types in the view and stored schemas.
|
|
636
|
+
*/
|
|
637
|
+
readonly mismatch: "valueSchema";
|
|
638
|
+
/**
|
|
639
|
+
* The identifier of the leaf node schema with the discrepancy.
|
|
640
|
+
*/
|
|
641
|
+
readonly nodeType: string;
|
|
642
|
+
/**
|
|
643
|
+
* The value schema required by the view, or undefined when it does not constrain values.
|
|
644
|
+
*/
|
|
645
|
+
readonly view: string | undefined;
|
|
646
|
+
/**
|
|
647
|
+
* The value schema recorded in the stored schema, or undefined when it does not constrain values.
|
|
648
|
+
*/
|
|
649
|
+
readonly stored: string | undefined;
|
|
650
|
+
} | {
|
|
651
|
+
/**
|
|
652
|
+
* Indicates that a node is represented by different node kinds in the view and stored schemas.
|
|
653
|
+
*/
|
|
654
|
+
readonly mismatch: "nodeKind";
|
|
655
|
+
/**
|
|
656
|
+
* The identifier of the node schema with the discrepancy.
|
|
657
|
+
*/
|
|
658
|
+
readonly nodeType: string;
|
|
659
|
+
/**
|
|
660
|
+
* The node kind required by the view schema.
|
|
661
|
+
*/
|
|
662
|
+
readonly view: string;
|
|
663
|
+
/**
|
|
664
|
+
* The node kind recorded in the stored schema.
|
|
665
|
+
*/
|
|
666
|
+
readonly stored: string;
|
|
667
|
+
};
|
|
668
|
+
/**
|
|
669
|
+
* {@link SchemaCompatibilityStatus} with additional beta APIs.
|
|
670
|
+
*
|
|
671
|
+
* @sealed @beta
|
|
672
|
+
*/
|
|
673
|
+
export interface SchemaCompatibilityStatusBeta extends SchemaCompatibilityStatus {
|
|
674
|
+
/**
|
|
675
|
+
* Details about the schema discrepancies that prevent this view from accessing the tree.
|
|
676
|
+
*
|
|
677
|
+
* @remarks
|
|
678
|
+
* This property is undefined when {@link SchemaCompatibilityStatus.canView} is true and present
|
|
679
|
+
* when `canView` is false.
|
|
680
|
+
* It can include application-defined schema identifiers and field keys.
|
|
681
|
+
*
|
|
682
|
+
* @example Interpreting an allowed-types discrepancy
|
|
683
|
+
*
|
|
684
|
+
* If a document's stored schema allows `string` for `Todo.title`, but the view schema expects
|
|
685
|
+
* `number`, the discrepancy identifies the field and the type permitted by each schema:
|
|
686
|
+
*
|
|
687
|
+
* ```typescript
|
|
688
|
+
* const sf = new SchemaFactory("com.example");
|
|
689
|
+
* class Todo extends sf.object("Todo", {
|
|
690
|
+
* title: sf.number,
|
|
691
|
+
* }) {}
|
|
692
|
+
*
|
|
693
|
+
* const view = asBeta(tree.viewWith(new TreeViewConfiguration({ schema: Todo })));
|
|
694
|
+
* if (!view.compatibility.canView) {
|
|
695
|
+
* // [{
|
|
696
|
+
* // mismatch: "allowedTypes",
|
|
697
|
+
* // location: { nodeType: "com.example.Todo", fieldKey: "title" },
|
|
698
|
+
* // view: ["com.fluidframework.leaf.number"],
|
|
699
|
+
* // stored: ["com.fluidframework.leaf.string"],
|
|
700
|
+
* // }]
|
|
701
|
+
* console.error(view.compatibility.discrepancies);
|
|
702
|
+
* }
|
|
703
|
+
* ```
|
|
704
|
+
*/
|
|
705
|
+
readonly discrepancies: readonly SchemaDiscrepancy[] | undefined;
|
|
706
|
+
}
|
|
558
707
|
/**
|
|
559
708
|
* {@link TreeView} with additional beta APIs.
|
|
560
709
|
* @sealed @beta
|
|
561
710
|
*/
|
|
562
711
|
export interface TreeViewBeta<in out TSchema extends ImplicitFieldSchema> extends TreeView<TSchema>, UntypedTreeView {
|
|
712
|
+
/**
|
|
713
|
+
* {@inheritDoc TreeView.compatibility}
|
|
714
|
+
*/
|
|
715
|
+
readonly compatibility: SchemaCompatibilityStatusBeta;
|
|
563
716
|
fork(): ReturnType<UntypedTreeView["fork"]> & TreeViewBeta<TSchema>;
|
|
564
717
|
/**
|
|
565
718
|
* Run a synchronous transaction which groups sequential edits to the tree into a single atomic edit if possible.
|
|
@@ -617,15 +770,27 @@ export interface TreeViewAlpha<in out TSchema extends ImplicitFieldSchema | Unsa
|
|
|
617
770
|
* Only valid to call when this view's {@link SchemaCompatibilityStatus.canInitialize} is true.
|
|
618
771
|
*
|
|
619
772
|
* Enables staged schema upgrades declared by {@link ITreeViewConfigurationAlpha.stagedUpgradePolicy} when generating the initial stored schema.
|
|
620
|
-
* Once a staged schema upgrade has been enabled in a document's stored schema, loading that document
|
|
621
|
-
* with a view that does not include equivalent staged members in its construction-time policy will cause
|
|
622
|
-
* a subsequent `upgradeSchema` call to throw a `UsageError` because the stored schema already contains
|
|
623
|
-
* the upgraded members and the new target would narrow it.
|
|
624
773
|
*
|
|
625
774
|
* Applications should typically call this function before attaching a `SharedTree`.
|
|
626
775
|
* @param content - The content to initialize the tree with.
|
|
627
776
|
*/
|
|
628
777
|
initialize(content: InsertableField<TSchema>): void;
|
|
778
|
+
/**
|
|
779
|
+
* Checks whether a staged schema upgrade has been applied to the document's stored schema.
|
|
780
|
+
*
|
|
781
|
+
* @param upgrade - The upgrade token to check.
|
|
782
|
+
*
|
|
783
|
+
* @returns The {@link StagedUpgradeStatus} of the upgrade.
|
|
784
|
+
*
|
|
785
|
+
* @remarks
|
|
786
|
+
* Use this to determine whether a document has already been upgraded, for example when deciding
|
|
787
|
+
* whether to include an upgrade token in the view configuration after a feature flag rollback.
|
|
788
|
+
*
|
|
789
|
+
* Results are derived from this view's schema and the current stored schema.
|
|
790
|
+
* The full schema is checked even when the view is incompatible with the stored schema, so the
|
|
791
|
+
* result includes all locations declared by the view schema.
|
|
792
|
+
*/
|
|
793
|
+
isStagedUpgradeEnabled(upgrade: SchemaUpgrade): StagedUpgradeStatus;
|
|
629
794
|
readonly events: Listenable<TreeViewEvents & TreeBranchEvents>;
|
|
630
795
|
fork(): ReturnType<UntypedTreeView["fork"]> & TreeViewAlpha<TSchema>;
|
|
631
796
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/tree.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE/F,OAAO,KAAK,EACX,cAAc,EACd,cAAc,EACd,kBAAkB,EAGlB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,MAAM,qBAAqB,CAAC;AAO7B,OAAO,KAAK,EACX,sBAAsB,EACtB,4BAA4B,EAC5B,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/simple-tree/api/tree.ts"],"names":[],"mappings":"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"}
|