@itwin/ecschema-editing 4.6.0-dev.7 → 4.6.0-dev.8

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.
Files changed (156) hide show
  1. package/lib/cjs/Differencing/SchemaConflicts.d.ts +2 -2
  2. package/lib/cjs/Differencing/SchemaConflicts.js +1 -1
  3. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
  4. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts +9 -6
  5. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
  6. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +213 -161
  7. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  8. package/lib/cjs/Differencing/SchemaDifference.d.ts +354 -78
  9. package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
  10. package/lib/cjs/Differencing/SchemaDifference.js +184 -11
  11. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  12. package/lib/cjs/Editing/Constants.js.map +1 -1
  13. package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
  14. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  15. package/lib/cjs/Editing/Editor.js.map +1 -1
  16. package/lib/cjs/Editing/Entities.js.map +1 -1
  17. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  18. package/lib/cjs/Editing/Formats.js.map +1 -1
  19. package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
  20. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  21. package/lib/cjs/Editing/Mixins.js.map +1 -1
  22. package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  23. package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
  24. package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
  25. package/lib/cjs/Editing/Mutable/MutableConstant.d.ts +1 -0
  26. package/lib/cjs/Editing/Mutable/MutableConstant.d.ts.map +1 -1
  27. package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
  28. package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
  29. package/lib/cjs/Editing/Mutable/MutableEnumeration.d.ts +1 -0
  30. package/lib/cjs/Editing/Mutable/MutableEnumeration.d.ts.map +1 -1
  31. package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
  32. package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
  33. package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  34. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.d.ts +2 -0
  35. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.d.ts.map +1 -1
  36. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  37. package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
  38. package/lib/cjs/Editing/Mutable/MutablePhenomenon.d.ts +1 -0
  39. package/lib/cjs/Editing/Mutable/MutablePhenomenon.d.ts.map +1 -1
  40. package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  41. package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  42. package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
  43. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.d.ts +1 -0
  44. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.d.ts.map +1 -1
  45. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  46. package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  47. package/lib/cjs/Editing/Mutable/MutableSchema.d.ts +2 -0
  48. package/lib/cjs/Editing/Mutable/MutableSchema.d.ts.map +1 -1
  49. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  50. package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
  51. package/lib/cjs/Editing/Mutable/MutableUnitSystem.d.ts +1 -0
  52. package/lib/cjs/Editing/Mutable/MutableUnitSystem.d.ts.map +1 -1
  53. package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  54. package/lib/cjs/Editing/Phenomena.js.map +1 -1
  55. package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
  56. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  57. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  58. package/lib/cjs/Editing/Structs.js.map +1 -1
  59. package/lib/cjs/Editing/UnitSystems.js.map +1 -1
  60. package/lib/cjs/Editing/Units.js.map +1 -1
  61. package/lib/cjs/Merging/CAClassMerger.d.ts +4 -7
  62. package/lib/cjs/Merging/CAClassMerger.d.ts.map +1 -1
  63. package/lib/cjs/Merging/CAClassMerger.js +26 -23
  64. package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
  65. package/lib/cjs/Merging/ClassMerger.d.ts +10 -18
  66. package/lib/cjs/Merging/ClassMerger.d.ts.map +1 -1
  67. package/lib/cjs/Merging/ClassMerger.js +148 -155
  68. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  69. package/lib/cjs/Merging/ConstantMerger.d.ts +4 -8
  70. package/lib/cjs/Merging/ConstantMerger.d.ts.map +1 -1
  71. package/lib/cjs/Merging/ConstantMerger.js +59 -40
  72. package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
  73. package/lib/cjs/Merging/CustomAttributeMerger.d.ts +16 -13
  74. package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
  75. package/lib/cjs/Merging/CustomAttributeMerger.js +66 -34
  76. package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
  77. package/lib/cjs/Merging/EntityClassMerger.d.ts +10 -7
  78. package/lib/cjs/Merging/EntityClassMerger.d.ts.map +1 -1
  79. package/lib/cjs/Merging/EntityClassMerger.js +41 -29
  80. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  81. package/lib/cjs/Merging/EnumerationMerger.d.ts +9 -9
  82. package/lib/cjs/Merging/EnumerationMerger.d.ts.map +1 -1
  83. package/lib/cjs/Merging/EnumerationMerger.js +77 -48
  84. package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
  85. package/lib/cjs/Merging/KindOfQuantityMerger.d.ts +4 -11
  86. package/lib/cjs/Merging/KindOfQuantityMerger.d.ts.map +1 -1
  87. package/lib/cjs/Merging/KindOfQuantityMerger.js +57 -53
  88. package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
  89. package/lib/cjs/Merging/MixinMerger.d.ts +4 -7
  90. package/lib/cjs/Merging/MixinMerger.d.ts.map +1 -1
  91. package/lib/cjs/Merging/MixinMerger.js +24 -25
  92. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  93. package/lib/cjs/Merging/PhenomenonMerger.d.ts +8 -0
  94. package/lib/cjs/Merging/PhenomenonMerger.d.ts.map +1 -0
  95. package/lib/cjs/Merging/PhenomenonMerger.js +37 -0
  96. package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -0
  97. package/lib/cjs/Merging/PropertyCategoryMerger.d.ts +8 -0
  98. package/lib/cjs/Merging/PropertyCategoryMerger.d.ts.map +1 -0
  99. package/lib/cjs/Merging/PropertyCategoryMerger.js +34 -0
  100. package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -0
  101. package/lib/cjs/Merging/PropertyMerger.d.ts +6 -14
  102. package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -1
  103. package/lib/cjs/Merging/PropertyMerger.js +212 -287
  104. package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
  105. package/lib/cjs/Merging/RelationshipClassMerger.d.ts +16 -10
  106. package/lib/cjs/Merging/RelationshipClassMerger.d.ts.map +1 -1
  107. package/lib/cjs/Merging/RelationshipClassMerger.js +121 -112
  108. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
  109. package/lib/cjs/Merging/SchemaItemMerger.d.ts +26 -51
  110. package/lib/cjs/Merging/SchemaItemMerger.d.ts.map +1 -1
  111. package/lib/cjs/Merging/SchemaItemMerger.js +106 -88
  112. package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
  113. package/lib/cjs/Merging/SchemaMerger.d.ts +21 -9
  114. package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
  115. package/lib/cjs/Merging/SchemaMerger.js +74 -88
  116. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  117. package/lib/cjs/Merging/SchemaReferenceMerger.d.ts +5 -5
  118. package/lib/cjs/Merging/SchemaReferenceMerger.d.ts.map +1 -1
  119. package/lib/cjs/Merging/SchemaReferenceMerger.js +33 -15
  120. package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
  121. package/lib/cjs/Merging/UnitSystemMerger.d.ts +8 -0
  122. package/lib/cjs/Merging/UnitSystemMerger.d.ts.map +1 -0
  123. package/lib/cjs/Merging/UnitSystemMerger.js +26 -0
  124. package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -0
  125. package/lib/cjs/Validation/Diagnostic.js.map +1 -1
  126. package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
  127. package/lib/cjs/Validation/ECRules.d.ts +23 -23
  128. package/lib/cjs/Validation/ECRules.d.ts.map +1 -1
  129. package/lib/cjs/Validation/ECRules.js +1 -1
  130. package/lib/cjs/Validation/ECRules.js.map +1 -1
  131. package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
  132. package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
  133. package/lib/cjs/Validation/Rules.js.map +1 -1
  134. package/lib/cjs/Validation/SchemaChanges.js +1 -1
  135. package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
  136. package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
  137. package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
  138. package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
  139. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  140. package/lib/cjs/Validation/SchemaComparer.d.ts.map +1 -1
  141. package/lib/cjs/Validation/SchemaComparer.js +3 -3
  142. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  143. package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
  144. package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
  145. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  146. package/lib/cjs/ecschema-editing.js.map +1 -1
  147. package/package.json +9 -9
  148. package/public/locales/en/ECSchemaEditing.json +26 -26
  149. package/lib/cjs/Merging/SchemaItemFactory.d.ts +0 -15
  150. package/lib/cjs/Merging/SchemaItemFactory.d.ts.map +0 -1
  151. package/lib/cjs/Merging/SchemaItemFactory.js +0 -82
  152. package/lib/cjs/Merging/SchemaItemFactory.js.map +0 -1
  153. package/lib/cjs/Merging/StructClassMerger.d.ts +0 -10
  154. package/lib/cjs/Merging/StructClassMerger.d.ts.map +0 -1
  155. package/lib/cjs/Merging/StructClassMerger.js +0 -13
  156. 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 syncronous function to figure whether a given class derived from
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(differenceReport) {
35
- this._differenceReport = differenceReport;
36
- }
37
- addEntry(entry) {
38
- this._differenceReport.changes.push(entry);
39
- return entry;
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._differenceReport.conflicts.push(conflict);
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.lookupEntry("modify", { schemaType: "Schema" });
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
- const existsAlready = modifyEntry !== undefined;
111
- if (!existsAlready) {
105
+ let addEntry = false;
106
+ if (modifyEntry === undefined) {
107
+ addEntry = true;
112
108
  modifyEntry = {
113
109
  changeType: "modify",
114
- schemaType: "Schema",
115
- json: {},
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
- switch (propertyName) {
122
- case "label":
123
- modifyEntry.json.label = propertyValue;
124
- hasChanges = true;
125
- break;
126
- case "description":
127
- modifyEntry.json.description = propertyValue;
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 (!existsAlready && hasChanges) {
132
- this.addEntry(modifyEntry);
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.addEntry({
131
+ this.schemaItemChanges.push({
138
132
  changeType: "add",
139
- schemaType: getSchemaItemName(schemaItem.schemaItemType),
133
+ schemaType: schemaItem.schemaItemType,
140
134
  itemName: schemaItem.name,
141
- json: schemaItem.toJSON(),
135
+ difference: schemaItem.toJSON(),
142
136
  });
143
137
  }
144
138
  visitChangedSchemaItem(diagnostic) {
145
139
  const schemaItem = diagnostic.ecDefinition;
146
- if (this.lookupEntry("add", { itemName: schemaItem.name })) {
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: getSchemaItemName(schemaItem.schemaItemType),
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.lookupEntry("modify", { itemName: schemaItem.name });
164
- if (!modifyEntry) {
165
- modifyEntry = this.addEntry({
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: getSchemaItemName(schemaItem.schemaItemType),
164
+ schemaType: schemaItem.schemaItemType,
168
165
  itemName: schemaItem.name,
169
- json: {},
170
- });
166
+ difference: {},
167
+ };
168
+ this.schemaItemChanges.push(modifyEntry);
171
169
  }
172
- modifyEntry.json[propertyName] = sourceValue;
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.lookupEntry("add", { itemName: enumeration.name })) {
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: getSchemaItemName(ecschema_metadata_1.SchemaItemType.Enumeration),
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
- if (this.lookupEntry("add", { itemName: enumeration.name })) {
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.addEntry({
200
+ this.schemaItemPathChanges.push({
199
201
  changeType: "add",
200
- schemaType: "Enumeration",
202
+ schemaType: SchemaDifference_1.SchemaOtherTypes.Enumerator,
201
203
  itemName: enumeration.name,
202
204
  path: "$enumerators",
203
- json: enumerator,
205
+ difference: enumerator,
204
206
  });
205
207
  }
206
208
  lookupEnumeratorEntry(changeType, item, enumeratorName) {
207
- return this._differenceReport.changes && this._differenceReport.changes.find((change) => {
209
+ return this.schemaItemPathChanges.find((change) => {
208
210
  return change.changeType === changeType
209
- && change.schemaType === "Enumeration"
211
+ && change.schemaType === SchemaDifference_1.SchemaOtherTypes.Enumerator
210
212
  && change.itemName === item
211
213
  && change.path === "$enumerators"
212
- && change.json.name === enumeratorName;
214
+ && change.difference.name === enumeratorName;
213
215
  });
214
216
  }
215
217
  visitChangedEnumerator(diagnostic) {
216
218
  const enumeration = diagnostic.ecDefinition;
217
- if (this.lookupEntry("add", { itemName: enumeration.name })) {
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
- const enumeratorPath = `$enumerators.${enumerator.name}`;
228
- let modifyEntry = this.lookupEntry("modify", { itemName: enumeration.name, path: enumeratorPath });
229
- if (!modifyEntry) {
230
- modifyEntry = this.addEntry({
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: "Enumeration",
236
+ schemaType: SchemaDifference_1.SchemaOtherTypes.Enumerator,
233
237
  itemName: enumeration.name,
234
- path: enumeratorPath,
235
- json: {},
236
- });
238
+ path: enumerator.name,
239
+ difference: {},
240
+ };
241
+ this.schemaItemPathChanges.push(modifyEntry);
237
242
  }
238
243
  if (sourceValue !== undefined) {
239
- modifyEntry.json[propertyName] = sourceValue;
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: getSchemaItemName(ecschema_metadata_1.SchemaItemType.Enumeration),
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
- if (this.lookupEntry("add", { itemName: property.class.name })) {
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.addEntry({
268
+ this.schemaItemPathChanges.push({
263
269
  changeType: "add",
264
- schemaType: "Property",
270
+ schemaType: SchemaDifference_1.SchemaOtherTypes.Property,
265
271
  itemName: property.class.name,
266
272
  path: property.name,
267
- json: property.toJSON(),
273
+ difference: property.toJSON(),
268
274
  });
269
275
  }
270
276
  visitChangedProperty(diagnostic) {
271
277
  const property = diagnostic.ecDefinition;
272
- if (this.lookupEntry("add", { itemName: property.class.name })
273
- || this.lookupEntry("add", { itemName: property.class.name, path: property.name })) {
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.lookupEntry("modify", { itemName: property.class.name, path: property.name });
281
- if (!modifyEntry) {
282
- modifyEntry = this.addEntry({
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: "Property",
296
+ schemaType: SchemaDifference_1.SchemaOtherTypes.Property,
285
297
  itemName: property.class.name,
286
298
  path: property.name,
287
- json: {},
288
- });
299
+ difference: {},
300
+ };
301
+ this.schemaItemPathChanges.push(modifyEntry);
289
302
  }
290
303
  if (propertyName !== "name" && sourceValue !== undefined) {
291
- modifyEntry.json[propertyName] = sourceValue;
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: getSchemaItemName(ecProperty.class.schemaItemType),
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
- if (this.lookupEntry("add", { itemName: ecClass.name })) {
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.lookupEntry("modify", { itemName: ecClass.name });
319
- if (!modifyEntry) {
320
- modifyEntry = this.addEntry({
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: getSchemaItemName(ecClass.schemaItemType),
338
+ schemaType: ecClass.schemaItemType,
323
339
  itemName: ecClass.name,
324
- json: {},
325
- });
340
+ difference: {},
341
+ };
342
+ this.schemaItemChanges.push(modifyEntry);
326
343
  }
327
- modifyEntry.json.baseClass = sourceBaseClass.fullName;
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: getSchemaItemName(targetClass.schemaItemType),
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: getSchemaItemName(targetClass.schemaItemType),
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: getSchemaItemName(targetClass.schemaItemType),
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
- if (this.lookupEntry("add", { itemName: ecClass.name })) {
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.lookupEntry("modify", { itemName: ecClass.name, path: "$mixins" });
378
- if (!modifyEntry) {
379
- modifyEntry = this.addEntry({
380
- changeType: "modify",
381
- schemaType: "EntityClass",
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
- path: "$mixins",
384
- json: [],
385
- });
403
+ difference: [],
404
+ };
405
+ this.schemaItemChanges.push(modifyEntry);
386
406
  }
387
- modifyEntry.json.push(mixin.fullName);
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: getSchemaItemName(targetClass.schemaItemType),
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 = `$${constraint.isSource ? "source" : "target"}.constraintClasses`;
408
- if (this.lookupEntry("add", { itemName: className })) {
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.lookupEntry("modify", { itemName: className, path: constraintPath });
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 = this.addEntry({
414
- changeType: "modify",
415
- schemaType: "RelationshipClass",
436
+ modifyEntry = {
437
+ changeType: "add",
438
+ schemaType: SchemaDifference_1.SchemaOtherTypes.RelationshipConstraintClass,
416
439
  itemName: className,
417
440
  path: constraintPath,
418
- json: [],
419
- });
441
+ difference: [],
442
+ };
443
+ this.schemaItemPathChanges.push(modifyEntry);
420
444
  }
421
445
  const [constraintClass] = diagnostic.messageArgs;
422
- modifyEntry.json.push(constraintClass.fullName);
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 = `$${constraint.isSource ? "source" : "target"}`;
428
- if (this.lookupEntry("add", { itemName: className })) {
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.lookupEntry("modify", { itemName: className, path: constraintPath });
432
- if (!modifyEntry) {
433
- modifyEntry = this.addEntry({
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: "RelationshipConstraint",
461
+ schemaType: SchemaDifference_1.SchemaOtherTypes.RelationshipConstraint,
436
462
  itemName: className,
437
463
  path: constraintPath,
438
- json: {},
439
- });
464
+ difference: {},
465
+ };
466
+ this.schemaItemPathChanges.push(modifyEntry);
440
467
  }
441
468
  const [propertyName, propertyValue] = diagnostic.messageArgs;
442
- if (propertyValue !== undefined) {
443
- modifyEntry.json[propertyName] = propertyValue;
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.addEntry({
484
+ this.schemaChanges.push({
449
485
  changeType,
450
- schemaType: "Schema",
451
- path: "$references",
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
- this.addEntry({
465
- changeType: "add",
466
- schemaType,
467
- itemName: itemName,
468
- path: `${path ? `${path}.` : ""}$customAttributes`,
469
- json: customAttribute,
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