@itwin/ecschema-editing 4.6.0-dev.7 → 4.6.0-dev.9
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/lib/cjs/Differencing/SchemaConflicts.d.ts +2 -2
- package/lib/cjs/Differencing/SchemaConflicts.js +1 -1
- package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts +9 -6
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +213 -161
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.d.ts +354 -78
- package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.js +184 -11
- package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableConstant.d.ts +1 -0
- package/lib/cjs/Editing/Mutable/MutableConstant.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableEnumeration.d.ts +1 -0
- package/lib/cjs/Editing/Mutable/MutableEnumeration.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.d.ts +2 -0
- package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePhenomenon.d.ts +1 -0
- package/lib/cjs/Editing/Mutable/MutablePhenomenon.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePropertyCategory.d.ts +1 -0
- package/lib/cjs/Editing/Mutable/MutablePropertyCategory.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableSchema.d.ts +2 -0
- package/lib/cjs/Editing/Mutable/MutableSchema.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableUnitSystem.d.ts +1 -0
- package/lib/cjs/Editing/Mutable/MutableUnitSystem.d.ts.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
- package/lib/cjs/Merging/CAClassMerger.d.ts +4 -7
- package/lib/cjs/Merging/CAClassMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/CAClassMerger.js +26 -23
- package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ClassMerger.d.ts +10 -18
- package/lib/cjs/Merging/ClassMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/ClassMerger.js +148 -155
- package/lib/cjs/Merging/ClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ConstantMerger.d.ts +4 -8
- package/lib/cjs/Merging/ConstantMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/ConstantMerger.js +59 -40
- package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.d.ts +16 -13
- package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.js +66 -34
- package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
- package/lib/cjs/Merging/EntityClassMerger.d.ts +10 -7
- package/lib/cjs/Merging/EntityClassMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/EntityClassMerger.js +41 -29
- package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
- package/lib/cjs/Merging/EnumerationMerger.d.ts +9 -9
- package/lib/cjs/Merging/EnumerationMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/EnumerationMerger.js +77 -48
- package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
- package/lib/cjs/Merging/KindOfQuantityMerger.d.ts +4 -11
- package/lib/cjs/Merging/KindOfQuantityMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/KindOfQuantityMerger.js +57 -53
- package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
- package/lib/cjs/Merging/MixinMerger.d.ts +4 -7
- package/lib/cjs/Merging/MixinMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/MixinMerger.js +24 -25
- package/lib/cjs/Merging/MixinMerger.js.map +1 -1
- package/lib/cjs/Merging/PhenomenonMerger.d.ts +8 -0
- package/lib/cjs/Merging/PhenomenonMerger.d.ts.map +1 -0
- package/lib/cjs/Merging/PhenomenonMerger.js +37 -0
- package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -0
- package/lib/cjs/Merging/PropertyCategoryMerger.d.ts +8 -0
- package/lib/cjs/Merging/PropertyCategoryMerger.d.ts.map +1 -0
- package/lib/cjs/Merging/PropertyCategoryMerger.js +34 -0
- package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -0
- package/lib/cjs/Merging/PropertyMerger.d.ts +6 -14
- package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/PropertyMerger.js +212 -287
- package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
- package/lib/cjs/Merging/RelationshipClassMerger.d.ts +16 -10
- package/lib/cjs/Merging/RelationshipClassMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/RelationshipClassMerger.js +121 -112
- package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaItemMerger.d.ts +26 -51
- package/lib/cjs/Merging/SchemaItemMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaItemMerger.js +106 -88
- package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.d.ts +21 -9
- package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.js +74 -88
- package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaReferenceMerger.d.ts +5 -5
- package/lib/cjs/Merging/SchemaReferenceMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaReferenceMerger.js +33 -15
- package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
- package/lib/cjs/Merging/UnitSystemMerger.d.ts +8 -0
- package/lib/cjs/Merging/UnitSystemMerger.d.ts.map +1 -0
- package/lib/cjs/Merging/UnitSystemMerger.js +26 -0
- package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -0
- package/lib/cjs/Validation/ECRules.js +1 -1
- package/lib/cjs/Validation/ECRules.js.map +1 -1
- package/lib/cjs/Validation/SchemaChanges.js +1 -1
- package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.d.ts.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.js +3 -3
- package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
- package/package.json +9 -9
- package/lib/cjs/Merging/SchemaItemFactory.d.ts +0 -15
- package/lib/cjs/Merging/SchemaItemFactory.d.ts.map +0 -1
- package/lib/cjs/Merging/SchemaItemFactory.js +0 -82
- package/lib/cjs/Merging/SchemaItemFactory.js.map +0 -1
- package/lib/cjs/Merging/StructClassMerger.d.ts +0 -10
- package/lib/cjs/Merging/StructClassMerger.d.ts.map +0 -1
- package/lib/cjs/Merging/StructClassMerger.js +0 -13
- package/lib/cjs/Merging/StructClassMerger.js.map +0 -1
|
@@ -10,9 +10,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
10
10
|
exports.SchemaDiagnosticVisitor = void 0;
|
|
11
11
|
const SchemaCompareDiagnostics_1 = require("../Validation/SchemaCompareDiagnostics");
|
|
12
12
|
const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
|
|
13
|
+
const SchemaDifference_1 = require("./SchemaDifference");
|
|
13
14
|
const SchemaConflicts_1 = require("./SchemaConflicts");
|
|
14
15
|
/**
|
|
15
|
-
* Recursive
|
|
16
|
+
* Recursive synchronous function to figure whether a given class derived from
|
|
16
17
|
* a class with the given baseClassName.
|
|
17
18
|
*/
|
|
18
19
|
function derivedFrom(ecClass, baseClassName) {
|
|
@@ -31,23 +32,15 @@ function derivedFrom(ecClass, baseClassName) {
|
|
|
31
32
|
* @internal
|
|
32
33
|
*/
|
|
33
34
|
class SchemaDiagnosticVisitor {
|
|
34
|
-
constructor(
|
|
35
|
-
this.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
lookupEntry(changeType, args) {
|
|
42
|
-
return this._differenceReport.changes && this._differenceReport.changes.find((change) => {
|
|
43
|
-
return (change.changeType === changeType)
|
|
44
|
-
&& (!args.schemaType || change.schemaType === args.schemaType)
|
|
45
|
-
&& (!args.itemName || change.itemName === args.itemName)
|
|
46
|
-
&& change.path === args.path;
|
|
47
|
-
});
|
|
35
|
+
constructor() {
|
|
36
|
+
this.schemaChanges = [];
|
|
37
|
+
this.schemaItemChanges = [];
|
|
38
|
+
this.schemaItemPathChanges = [];
|
|
39
|
+
this.customAttributeChanges = [];
|
|
40
|
+
this.conflicts = [];
|
|
48
41
|
}
|
|
49
42
|
addConflict(conflict) {
|
|
50
|
-
this.
|
|
43
|
+
this.conflicts.push(conflict);
|
|
51
44
|
}
|
|
52
45
|
/**
|
|
53
46
|
* Visitor function to process the schema change diagnostic object.
|
|
@@ -105,52 +98,54 @@ class SchemaDiagnosticVisitor {
|
|
|
105
98
|
return;
|
|
106
99
|
}
|
|
107
100
|
visitChangedSchemaProperties(diagnostic) {
|
|
108
|
-
let modifyEntry = this.
|
|
101
|
+
let modifyEntry = this.schemaChanges.find((entry) => {
|
|
102
|
+
return entry.changeType === "modify" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.Schema;
|
|
103
|
+
});
|
|
109
104
|
let hasChanges = false;
|
|
110
|
-
|
|
111
|
-
if (
|
|
105
|
+
let addEntry = false;
|
|
106
|
+
if (modifyEntry === undefined) {
|
|
107
|
+
addEntry = true;
|
|
112
108
|
modifyEntry = {
|
|
113
109
|
changeType: "modify",
|
|
114
|
-
schemaType:
|
|
115
|
-
|
|
110
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.Schema,
|
|
111
|
+
difference: {},
|
|
116
112
|
};
|
|
117
113
|
}
|
|
118
114
|
// Only label and description are taken from the source schema. If the schema name or alias
|
|
119
115
|
// differs, those are ignored for now.
|
|
120
116
|
const [propertyName, propertyValue] = diagnostic.messageArgs;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
hasChanges = true;
|
|
129
|
-
break;
|
|
117
|
+
if (propertyName === "label") {
|
|
118
|
+
modifyEntry.difference.label = propertyValue;
|
|
119
|
+
hasChanges = true;
|
|
120
|
+
}
|
|
121
|
+
if (propertyName === "description") {
|
|
122
|
+
modifyEntry.difference.description = propertyValue;
|
|
123
|
+
hasChanges = true;
|
|
130
124
|
}
|
|
131
|
-
if (
|
|
132
|
-
this.
|
|
125
|
+
if (addEntry && hasChanges) {
|
|
126
|
+
this.schemaChanges.push(modifyEntry);
|
|
133
127
|
}
|
|
134
128
|
}
|
|
135
129
|
visitMissingSchemaItem(diagnostic) {
|
|
136
130
|
const schemaItem = diagnostic.ecDefinition;
|
|
137
|
-
this.
|
|
131
|
+
this.schemaItemChanges.push({
|
|
138
132
|
changeType: "add",
|
|
139
|
-
schemaType:
|
|
133
|
+
schemaType: schemaItem.schemaItemType,
|
|
140
134
|
itemName: schemaItem.name,
|
|
141
|
-
|
|
135
|
+
difference: schemaItem.toJSON(),
|
|
142
136
|
});
|
|
143
137
|
}
|
|
144
138
|
visitChangedSchemaItem(diagnostic) {
|
|
145
139
|
const schemaItem = diagnostic.ecDefinition;
|
|
146
|
-
|
|
140
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
141
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === schemaItem.name)) {
|
|
147
142
|
return;
|
|
148
143
|
}
|
|
149
144
|
const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs;
|
|
150
145
|
if (propertyName === "schemaItemType") {
|
|
151
146
|
return this.addConflict({
|
|
152
147
|
code: SchemaConflicts_1.ConflictCode.ConflictingItemName,
|
|
153
|
-
schemaType:
|
|
148
|
+
schemaType: schemaItem.schemaItemType,
|
|
154
149
|
itemName: schemaItem.name,
|
|
155
150
|
source: sourceValue,
|
|
156
151
|
target: targetValue,
|
|
@@ -160,27 +155,33 @@ class SchemaDiagnosticVisitor {
|
|
|
160
155
|
if (sourceValue === undefined) {
|
|
161
156
|
return;
|
|
162
157
|
}
|
|
163
|
-
let modifyEntry = this.
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
let modifyEntry = this.schemaItemChanges.find((entry) => {
|
|
159
|
+
return entry.changeType === "modify" && entry.itemName === schemaItem.name;
|
|
160
|
+
});
|
|
161
|
+
if (modifyEntry === undefined) {
|
|
162
|
+
modifyEntry = {
|
|
166
163
|
changeType: "modify",
|
|
167
|
-
schemaType:
|
|
164
|
+
schemaType: schemaItem.schemaItemType,
|
|
168
165
|
itemName: schemaItem.name,
|
|
169
|
-
|
|
170
|
-
}
|
|
166
|
+
difference: {},
|
|
167
|
+
};
|
|
168
|
+
this.schemaItemChanges.push(modifyEntry);
|
|
171
169
|
}
|
|
172
|
-
|
|
170
|
+
// TODO: Since propertyName is type of string, the compiler complains about accepting
|
|
171
|
+
// an unspecific string as property indexer. Casted to any as short term fix but that
|
|
172
|
+
// needs to be handled better in future.
|
|
173
|
+
modifyEntry.difference[propertyName] = sourceValue;
|
|
173
174
|
}
|
|
174
175
|
visitChangedEnumeration(diagnostic) {
|
|
175
176
|
const enumeration = diagnostic.ecDefinition;
|
|
176
|
-
if (this.
|
|
177
|
+
if (this.schemaItemPathChanges.find((entry) => entry.changeType === "add" && entry.itemName === enumeration.name)) {
|
|
177
178
|
return;
|
|
178
179
|
}
|
|
179
180
|
const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs;
|
|
180
181
|
if (propertyName === "type") {
|
|
181
182
|
return this.addConflict({
|
|
182
183
|
code: SchemaConflicts_1.ConflictCode.ConflictingEnumerationType,
|
|
183
|
-
schemaType:
|
|
184
|
+
schemaType: ecschema_metadata_1.SchemaItemType.Enumeration,
|
|
184
185
|
itemName: enumeration.name,
|
|
185
186
|
source: sourceValue,
|
|
186
187
|
target: targetValue,
|
|
@@ -191,30 +192,32 @@ class SchemaDiagnosticVisitor {
|
|
|
191
192
|
}
|
|
192
193
|
visitMissingEnumerator(diagnostic) {
|
|
193
194
|
const enumeration = diagnostic.ecDefinition;
|
|
194
|
-
|
|
195
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
196
|
+
if (this.schemaItemPathChanges.find((entry) => entry.changeType === "add" && entry.itemName === enumeration.name)) {
|
|
195
197
|
return;
|
|
196
198
|
}
|
|
197
199
|
const [enumerator] = diagnostic.messageArgs;
|
|
198
|
-
this.
|
|
200
|
+
this.schemaItemPathChanges.push({
|
|
199
201
|
changeType: "add",
|
|
200
|
-
schemaType:
|
|
202
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.Enumerator,
|
|
201
203
|
itemName: enumeration.name,
|
|
202
204
|
path: "$enumerators",
|
|
203
|
-
|
|
205
|
+
difference: enumerator,
|
|
204
206
|
});
|
|
205
207
|
}
|
|
206
208
|
lookupEnumeratorEntry(changeType, item, enumeratorName) {
|
|
207
|
-
return this.
|
|
209
|
+
return this.schemaItemPathChanges.find((change) => {
|
|
208
210
|
return change.changeType === changeType
|
|
209
|
-
&& change.schemaType ===
|
|
211
|
+
&& change.schemaType === SchemaDifference_1.SchemaOtherTypes.Enumerator
|
|
210
212
|
&& change.itemName === item
|
|
211
213
|
&& change.path === "$enumerators"
|
|
212
|
-
&& change.
|
|
214
|
+
&& change.difference.name === enumeratorName;
|
|
213
215
|
});
|
|
214
216
|
}
|
|
215
217
|
visitChangedEnumerator(diagnostic) {
|
|
216
218
|
const enumeration = diagnostic.ecDefinition;
|
|
217
|
-
|
|
219
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
220
|
+
if (this.schemaItemPathChanges.find((entry) => entry.changeType === "add" && entry.itemName === enumeration.name)) {
|
|
218
221
|
return;
|
|
219
222
|
}
|
|
220
223
|
const [enumerator, propertyName, sourceValue, targetValue] = diagnostic.messageArgs;
|
|
@@ -224,26 +227,28 @@ class SchemaDiagnosticVisitor {
|
|
|
224
227
|
if (!this.validateEnumerator(enumeration, enumerator, propertyName, sourceValue, targetValue)) {
|
|
225
228
|
return;
|
|
226
229
|
}
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
230
|
+
let modifyEntry = this.schemaItemPathChanges.find((entry) => {
|
|
231
|
+
return entry.changeType === "modify" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.Enumerator && entry.itemName === enumeration.name && entry.path === enumerator.name;
|
|
232
|
+
});
|
|
233
|
+
if (modifyEntry === undefined) {
|
|
234
|
+
modifyEntry = {
|
|
231
235
|
changeType: "modify",
|
|
232
|
-
schemaType:
|
|
236
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.Enumerator,
|
|
233
237
|
itemName: enumeration.name,
|
|
234
|
-
path:
|
|
235
|
-
|
|
236
|
-
}
|
|
238
|
+
path: enumerator.name,
|
|
239
|
+
difference: {},
|
|
240
|
+
};
|
|
241
|
+
this.schemaItemPathChanges.push(modifyEntry);
|
|
237
242
|
}
|
|
238
243
|
if (sourceValue !== undefined) {
|
|
239
|
-
modifyEntry.
|
|
244
|
+
modifyEntry.difference[propertyName] = sourceValue;
|
|
240
245
|
}
|
|
241
246
|
}
|
|
242
247
|
validateEnumerator(enumeration, enumerator, propertyName, sourceValue, targetValue) {
|
|
243
248
|
if (propertyName === "value") {
|
|
244
249
|
this.addConflict({
|
|
245
250
|
code: SchemaConflicts_1.ConflictCode.ConflictingEnumeratorValue,
|
|
246
|
-
schemaType:
|
|
251
|
+
schemaType: ecschema_metadata_1.SchemaItemType.Enumeration,
|
|
247
252
|
itemName: enumeration.name,
|
|
248
253
|
path: enumerator.name,
|
|
249
254
|
source: sourceValue,
|
|
@@ -256,46 +261,54 @@ class SchemaDiagnosticVisitor {
|
|
|
256
261
|
}
|
|
257
262
|
visitMissingProperty(diagnostic) {
|
|
258
263
|
const property = diagnostic.ecDefinition;
|
|
259
|
-
|
|
264
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
265
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.schemaType in ecschema_metadata_1.SchemaItemType && entry.itemName === property.class.name)) {
|
|
260
266
|
return;
|
|
261
267
|
}
|
|
262
|
-
this.
|
|
268
|
+
this.schemaItemPathChanges.push({
|
|
263
269
|
changeType: "add",
|
|
264
|
-
schemaType:
|
|
270
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.Property,
|
|
265
271
|
itemName: property.class.name,
|
|
266
272
|
path: property.name,
|
|
267
|
-
|
|
273
|
+
difference: property.toJSON(),
|
|
268
274
|
});
|
|
269
275
|
}
|
|
270
276
|
visitChangedProperty(diagnostic) {
|
|
271
277
|
const property = diagnostic.ecDefinition;
|
|
272
|
-
|
|
273
|
-
|
|
278
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
279
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === property.class.name)) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
283
|
+
if (this.schemaItemPathChanges.find((entry) => entry.changeType === "add" && entry.itemName === property.class.name && entry.path === property.name)) {
|
|
274
284
|
return;
|
|
275
285
|
}
|
|
276
286
|
const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs;
|
|
277
287
|
if (!this.validatePropertyChange(property, propertyName, sourceValue, targetValue)) {
|
|
278
288
|
return;
|
|
279
289
|
}
|
|
280
|
-
let modifyEntry = this.
|
|
281
|
-
|
|
282
|
-
|
|
290
|
+
let modifyEntry = this.schemaItemPathChanges.find((entry) => {
|
|
291
|
+
return entry.changeType === "modify" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.Property && entry.itemName === property.class.name && entry.path === property.name;
|
|
292
|
+
});
|
|
293
|
+
if (modifyEntry === undefined) {
|
|
294
|
+
modifyEntry = {
|
|
283
295
|
changeType: "modify",
|
|
284
|
-
schemaType:
|
|
296
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.Property,
|
|
285
297
|
itemName: property.class.name,
|
|
286
298
|
path: property.name,
|
|
287
|
-
|
|
288
|
-
}
|
|
299
|
+
difference: {},
|
|
300
|
+
};
|
|
301
|
+
this.schemaItemPathChanges.push(modifyEntry);
|
|
289
302
|
}
|
|
290
303
|
if (propertyName !== "name" && sourceValue !== undefined) {
|
|
291
|
-
modifyEntry.
|
|
304
|
+
modifyEntry.difference[propertyName] = sourceValue;
|
|
292
305
|
}
|
|
293
306
|
}
|
|
294
307
|
validatePropertyChange(ecProperty, propertyName, sourceValue, targetValue) {
|
|
295
308
|
if (propertyName === "primitiveType") {
|
|
296
309
|
this.addConflict({
|
|
297
310
|
code: SchemaConflicts_1.ConflictCode.ConflictingPropertyName,
|
|
298
|
-
schemaType:
|
|
311
|
+
schemaType: ecProperty.class.schemaItemType,
|
|
299
312
|
itemName: ecProperty.class.name,
|
|
300
313
|
path: ecProperty.name,
|
|
301
314
|
source: sourceValue,
|
|
@@ -308,29 +321,33 @@ class SchemaDiagnosticVisitor {
|
|
|
308
321
|
}
|
|
309
322
|
visitMissingBaseClass(diagnostic) {
|
|
310
323
|
const ecClass = diagnostic.ecDefinition;
|
|
311
|
-
|
|
324
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
325
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecClass.name)) {
|
|
312
326
|
return;
|
|
313
327
|
}
|
|
314
328
|
const [sourceBaseClass, targetBaseClass] = diagnostic.messageArgs;
|
|
315
329
|
if (!this.validateBaseClassChange(ecClass, sourceBaseClass, targetBaseClass)) {
|
|
316
330
|
return;
|
|
317
331
|
}
|
|
318
|
-
let modifyEntry = this.
|
|
319
|
-
|
|
320
|
-
|
|
332
|
+
let modifyEntry = this.schemaItemChanges.find((entry) => {
|
|
333
|
+
return entry.changeType === "modify" && entry.schemaType === ecClass.schemaItemType && entry.itemName === ecClass.name;
|
|
334
|
+
});
|
|
335
|
+
if (modifyEntry === undefined) {
|
|
336
|
+
modifyEntry = {
|
|
321
337
|
changeType: "modify",
|
|
322
|
-
schemaType:
|
|
338
|
+
schemaType: ecClass.schemaItemType,
|
|
323
339
|
itemName: ecClass.name,
|
|
324
|
-
|
|
325
|
-
}
|
|
340
|
+
difference: {},
|
|
341
|
+
};
|
|
342
|
+
this.schemaItemChanges.push(modifyEntry);
|
|
326
343
|
}
|
|
327
|
-
modifyEntry.
|
|
344
|
+
modifyEntry.difference.baseClass = sourceBaseClass.fullName;
|
|
328
345
|
}
|
|
329
346
|
validateBaseClassChange(targetClass, sourceBaseClass, targetBaseClass) {
|
|
330
347
|
if (sourceBaseClass === undefined) {
|
|
331
348
|
this.addConflict({
|
|
332
349
|
code: SchemaConflicts_1.ConflictCode.RemovingBaseClass,
|
|
333
|
-
schemaType:
|
|
350
|
+
schemaType: targetClass.schemaItemType,
|
|
334
351
|
itemName: targetClass.name,
|
|
335
352
|
path: "$baseClass",
|
|
336
353
|
source: undefined,
|
|
@@ -342,7 +359,7 @@ class SchemaDiagnosticVisitor {
|
|
|
342
359
|
if (sourceBaseClass.modifier === ecschema_metadata_1.ECClassModifier.Sealed) {
|
|
343
360
|
this.addConflict({
|
|
344
361
|
code: SchemaConflicts_1.ConflictCode.SealedBaseClass,
|
|
345
|
-
schemaType:
|
|
362
|
+
schemaType: targetClass.schemaItemType,
|
|
346
363
|
itemName: targetClass.name,
|
|
347
364
|
path: "$baseClass",
|
|
348
365
|
source: sourceBaseClass.fullName,
|
|
@@ -354,7 +371,7 @@ class SchemaDiagnosticVisitor {
|
|
|
354
371
|
if (targetBaseClass && !derivedFrom(sourceBaseClass, targetBaseClass.name)) {
|
|
355
372
|
this.addConflict({
|
|
356
373
|
code: SchemaConflicts_1.ConflictCode.ConflictingBaseClass,
|
|
357
|
-
schemaType:
|
|
374
|
+
schemaType: targetClass.schemaItemType,
|
|
358
375
|
itemName: targetClass.name,
|
|
359
376
|
path: "$baseClass",
|
|
360
377
|
source: sourceBaseClass.fullName,
|
|
@@ -367,30 +384,33 @@ class SchemaDiagnosticVisitor {
|
|
|
367
384
|
}
|
|
368
385
|
visitMissingMixinOnClass(diagnostic) {
|
|
369
386
|
const ecClass = diagnostic.ecDefinition;
|
|
370
|
-
|
|
387
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
388
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecClass.name)) {
|
|
371
389
|
return;
|
|
372
390
|
}
|
|
373
391
|
const [mixin] = diagnostic.messageArgs;
|
|
374
392
|
if (!this.validateMixin(ecClass, mixin)) {
|
|
375
393
|
return;
|
|
376
394
|
}
|
|
377
|
-
let modifyEntry = this.
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
395
|
+
let modifyEntry = this.schemaItemChanges.find((entry) => {
|
|
396
|
+
return entry.changeType === "add" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.EntityClassMixin && entry.itemName === ecClass.name;
|
|
397
|
+
});
|
|
398
|
+
if (modifyEntry === undefined) {
|
|
399
|
+
modifyEntry = {
|
|
400
|
+
changeType: "add",
|
|
401
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.EntityClassMixin,
|
|
382
402
|
itemName: ecClass.name,
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
403
|
+
difference: [],
|
|
404
|
+
};
|
|
405
|
+
this.schemaItemChanges.push(modifyEntry);
|
|
386
406
|
}
|
|
387
|
-
modifyEntry.
|
|
407
|
+
modifyEntry.difference.push(mixin.fullName);
|
|
388
408
|
}
|
|
389
409
|
validateMixin(targetClass, mixin) {
|
|
390
410
|
if (mixin.appliesTo && !derivedFrom(targetClass, mixin.appliesTo.name)) {
|
|
391
411
|
this.addConflict({
|
|
392
412
|
code: SchemaConflicts_1.ConflictCode.MixinAppliedMustDeriveFromConstraint,
|
|
393
|
-
schemaType:
|
|
413
|
+
schemaType: targetClass.schemaItemType,
|
|
394
414
|
itemName: targetClass.name,
|
|
395
415
|
path: "$mixins",
|
|
396
416
|
source: mixin.fullName,
|
|
@@ -404,98 +424,130 @@ class SchemaDiagnosticVisitor {
|
|
|
404
424
|
visitMissingRelationshipConstraintClass(diagnostic) {
|
|
405
425
|
const constraint = diagnostic.ecDefinition;
|
|
406
426
|
const className = constraint.relationshipClass.name;
|
|
407
|
-
const constraintPath =
|
|
408
|
-
|
|
427
|
+
const constraintPath = constraint.isSource ? "$source" : "$target";
|
|
428
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
429
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === className)) {
|
|
409
430
|
return;
|
|
410
431
|
}
|
|
411
|
-
let modifyEntry = this.
|
|
432
|
+
let modifyEntry = this.schemaItemPathChanges.find((entry) => {
|
|
433
|
+
return entry.changeType === "add" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.RelationshipConstraintClass, entry.itemName === className && entry.path === constraintPath;
|
|
434
|
+
});
|
|
412
435
|
if (!modifyEntry) {
|
|
413
|
-
modifyEntry =
|
|
414
|
-
changeType: "
|
|
415
|
-
schemaType:
|
|
436
|
+
modifyEntry = {
|
|
437
|
+
changeType: "add",
|
|
438
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.RelationshipConstraintClass,
|
|
416
439
|
itemName: className,
|
|
417
440
|
path: constraintPath,
|
|
418
|
-
|
|
419
|
-
}
|
|
441
|
+
difference: [],
|
|
442
|
+
};
|
|
443
|
+
this.schemaItemPathChanges.push(modifyEntry);
|
|
420
444
|
}
|
|
421
445
|
const [constraintClass] = diagnostic.messageArgs;
|
|
422
|
-
modifyEntry.
|
|
446
|
+
modifyEntry.difference.push(constraintClass.fullName);
|
|
423
447
|
}
|
|
424
448
|
visitChangedRelationshipConstraint(diagnostic) {
|
|
425
449
|
const constraint = diagnostic.ecDefinition;
|
|
426
450
|
const className = constraint.relationshipClass.name;
|
|
427
|
-
const constraintPath =
|
|
428
|
-
if (this.
|
|
451
|
+
const constraintPath = constraint.isSource ? "$source" : "$target";
|
|
452
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === className)) {
|
|
429
453
|
return;
|
|
430
454
|
}
|
|
431
|
-
let modifyEntry = this.
|
|
432
|
-
|
|
433
|
-
|
|
455
|
+
let modifyEntry = this.schemaItemPathChanges.find((entry) => {
|
|
456
|
+
return entry.changeType === "modify" && entry.schemaType === SchemaDifference_1.SchemaOtherTypes.RelationshipConstraint && entry.itemName === className && entry.path === constraintPath;
|
|
457
|
+
});
|
|
458
|
+
if (modifyEntry === undefined) {
|
|
459
|
+
modifyEntry = {
|
|
434
460
|
changeType: "modify",
|
|
435
|
-
schemaType:
|
|
461
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.RelationshipConstraint,
|
|
436
462
|
itemName: className,
|
|
437
463
|
path: constraintPath,
|
|
438
|
-
|
|
439
|
-
}
|
|
464
|
+
difference: {},
|
|
465
|
+
};
|
|
466
|
+
this.schemaItemPathChanges.push(modifyEntry);
|
|
440
467
|
}
|
|
441
468
|
const [propertyName, propertyValue] = diagnostic.messageArgs;
|
|
442
|
-
if (propertyValue !== undefined) {
|
|
443
|
-
modifyEntry.
|
|
469
|
+
if (propertyName === "abstractConstraint" && propertyValue !== undefined) {
|
|
470
|
+
modifyEntry.difference.abstractConstraint = propertyValue;
|
|
471
|
+
}
|
|
472
|
+
if (propertyName === "multiplicity" && propertyValue !== undefined) {
|
|
473
|
+
modifyEntry.difference.multiplicity = propertyValue;
|
|
474
|
+
}
|
|
475
|
+
if (propertyName === "polymorphic" && propertyValue !== undefined) {
|
|
476
|
+
modifyEntry.difference.polymorphic = propertyValue;
|
|
477
|
+
}
|
|
478
|
+
if (propertyName === "roleLabel" && propertyValue !== undefined) {
|
|
479
|
+
modifyEntry.difference.roleLabel = propertyValue;
|
|
444
480
|
}
|
|
445
481
|
}
|
|
446
482
|
visitSchemaReference(diagnostic, changeType) {
|
|
447
483
|
const [referencedSchema] = diagnostic.messageArgs;
|
|
448
|
-
this.
|
|
484
|
+
this.schemaChanges.push({
|
|
449
485
|
changeType,
|
|
450
|
-
schemaType:
|
|
451
|
-
|
|
452
|
-
json: {
|
|
486
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.SchemaReference,
|
|
487
|
+
difference: {
|
|
453
488
|
name: referencedSchema.name,
|
|
454
489
|
version: referencedSchema.schemaKey.version.toString(),
|
|
455
490
|
},
|
|
456
491
|
});
|
|
457
492
|
}
|
|
458
493
|
visitMissingCustomAttributeInstance(diagnostic) {
|
|
459
|
-
const { schemaType, itemName, path } = getItemNameAndPath(diagnostic.ecDefinition);
|
|
460
|
-
if (itemName && (this.lookupEntry("add", { itemName }) || this.lookupEntry("add", { itemName, path }))) {
|
|
461
|
-
return;
|
|
462
|
-
}
|
|
463
494
|
const [customAttribute] = diagnostic.messageArgs;
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
495
|
+
const ecType = diagnostic.ecDefinition;
|
|
496
|
+
if (ecschema_metadata_1.Schema.isSchema(ecType)) {
|
|
497
|
+
return this.customAttributeChanges.push({
|
|
498
|
+
changeType: "add",
|
|
499
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.CustomAttributeInstance,
|
|
500
|
+
appliedTo: "Schema",
|
|
501
|
+
difference: customAttribute,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
if (ecschema_metadata_1.SchemaItem.isSchemaItem(ecType)) {
|
|
505
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
506
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecType.name)) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
return this.customAttributeChanges.push({
|
|
510
|
+
changeType: "add",
|
|
511
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.CustomAttributeInstance,
|
|
512
|
+
appliedTo: "SchemaItem",
|
|
513
|
+
itemName: ecType.name,
|
|
514
|
+
difference: customAttribute,
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
if (ecschema_metadata_1.Property.isProperty(ecType)) {
|
|
518
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
519
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecType.name)) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
523
|
+
if (this.schemaItemPathChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecType.name && entry.path === ecType.name)) {
|
|
524
|
+
return;
|
|
525
|
+
}
|
|
526
|
+
return this.customAttributeChanges.push({
|
|
527
|
+
changeType: "add",
|
|
528
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.CustomAttributeInstance,
|
|
529
|
+
appliedTo: "Property",
|
|
530
|
+
itemName: ecType.class.name,
|
|
531
|
+
path: ecType.name,
|
|
532
|
+
difference: customAttribute,
|
|
533
|
+
});
|
|
534
|
+
}
|
|
535
|
+
if (ecschema_metadata_1.RelationshipConstraint.isRelationshipConstraint(ecType)) {
|
|
536
|
+
// TODO: Remove after fix #6560 has been merged into master.
|
|
537
|
+
if (this.schemaItemChanges.find((entry) => entry.changeType === "add" && entry.itemName === ecType.relationshipClass.name)) {
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
return this.customAttributeChanges.push({
|
|
541
|
+
changeType: "add",
|
|
542
|
+
schemaType: SchemaDifference_1.SchemaOtherTypes.CustomAttributeInstance,
|
|
543
|
+
appliedTo: "RelationshipConstraint",
|
|
544
|
+
itemName: ecType.relationshipClass.name,
|
|
545
|
+
path: ecType.isSource ? "$source" : "$target",
|
|
546
|
+
difference: customAttribute,
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
return;
|
|
471
550
|
}
|
|
472
551
|
}
|
|
473
552
|
exports.SchemaDiagnosticVisitor = SchemaDiagnosticVisitor;
|
|
474
|
-
function getItemNameAndPath(type) {
|
|
475
|
-
if (ecschema_metadata_1.Schema.isSchema(type))
|
|
476
|
-
return {
|
|
477
|
-
schemaType: "Schema",
|
|
478
|
-
};
|
|
479
|
-
if (ecschema_metadata_1.SchemaItem.isSchemaItem(type))
|
|
480
|
-
return {
|
|
481
|
-
schemaType: getSchemaItemName(type.schemaItemType),
|
|
482
|
-
itemName: type.name,
|
|
483
|
-
};
|
|
484
|
-
if (type instanceof ecschema_metadata_1.Property)
|
|
485
|
-
return {
|
|
486
|
-
schemaType: "Property",
|
|
487
|
-
itemName: type.class.name,
|
|
488
|
-
path: type.name,
|
|
489
|
-
};
|
|
490
|
-
if (type instanceof ecschema_metadata_1.RelationshipConstraint)
|
|
491
|
-
return {
|
|
492
|
-
schemaType: "RelationshipClass",
|
|
493
|
-
itemName: type.relationshipClass.name,
|
|
494
|
-
path: type.isSource ? "$source" : "$target",
|
|
495
|
-
};
|
|
496
|
-
throw Error("Unhandled Type");
|
|
497
|
-
}
|
|
498
|
-
function getSchemaItemName(schemaItemType) {
|
|
499
|
-
return (0, ecschema_metadata_1.schemaItemTypeToString)(schemaItemType);
|
|
500
|
-
}
|
|
501
553
|
//# sourceMappingURL=SchemaDiagnosticVisitor.js.map
|