@itwin/ecschema-editing 4.6.0-dev.6 → 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.
- 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/Constants.js.map +1 -1
- package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
- package/lib/cjs/Editing/ECClasses.js.map +1 -1
- package/lib/cjs/Editing/Editor.js.map +1 -1
- package/lib/cjs/Editing/Entities.js.map +1 -1
- package/lib/cjs/Editing/Enumerations.js.map +1 -1
- package/lib/cjs/Editing/Formats.js.map +1 -1
- package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
- package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
- package/lib/cjs/Editing/Mixins.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableClass.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/MutableEntityClass.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/MutableFormat.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableInvertedUnit.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/MutableMixin.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/MutablePrimitiveOrEnumProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableProperty.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/MutableRelationshipClass.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/MutableUnit.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/Editing/Phenomena.js.map +1 -1
- package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
- package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
- package/lib/cjs/Editing/SchemaItems.js.map +1 -1
- package/lib/cjs/Editing/Structs.js.map +1 -1
- package/lib/cjs/Editing/UnitSystems.js.map +1 -1
- package/lib/cjs/Editing/Units.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/Diagnostic.js.map +1 -1
- package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
- package/lib/cjs/Validation/ECRules.d.ts +23 -23
- package/lib/cjs/Validation/ECRules.d.ts.map +1 -1
- package/lib/cjs/Validation/ECRules.js +1 -1
- package/lib/cjs/Validation/ECRules.js.map +1 -1
- package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
- package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
- package/lib/cjs/Validation/Rules.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/SchemaCompareDiagnostics.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareVisitor.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/lib/cjs/Validation/SchemaValidater.js.map +1 -1
- package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
- package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
- package/lib/cjs/ecschema-editing.js.map +1 -1
- package/package.json +9 -9
- package/public/locales/en/ECSchemaEditing.json +26 -26
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaDiagnosticVisitor.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDiagnosticVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Differencing\r\n */\r\n\r\nimport type { AnyDiagnostic } from \"../Validation/Diagnostic\";\r\nimport { SchemaCompareCodes } from \"../Validation/SchemaCompareDiagnostics\";\r\nimport {\r\n AnyECType, AnyEnumerator, AnySchemaItemProps, CustomAttribute, ECClass, ECClassModifier, Enumeration, Mixin, Property, PropertyProps,\r\n RelationshipConstraint, RelationshipConstraintProps, Schema, SchemaItem, SchemaItemType, schemaItemTypeToString,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport {\r\n AnySchemaDifference,\r\n DifferenceType,\r\n SchemaClassMixinDifference,\r\n SchemaDifference,\r\n SchemaDifferences,\r\n SchemaEnumeratorDifference,\r\n SchemaItemDifference,\r\n SchemaItemTypeName,\r\n SchemaPropertyDifference,\r\n SchemaRelationshipConstraintClassDifference,\r\n SchemaRelationshipConstraintDifference,\r\n SchemaType,\r\n} from \"./SchemaDifference\";\r\nimport { ConflictCode, SchemaDifferenceConflict } from \"./SchemaConflicts\";\r\n\r\n/**\r\n * Recursive syncronous function to figure whether a given class derived from\r\n * a class with the given baseClassName.\r\n */\r\nfunction derivedFrom(ecClass: ECClass|undefined, baseClassName: string): boolean {\r\n if(ecClass === undefined) {\r\n return false;\r\n }\r\n if(ecClass && ecClass.name === baseClassName) {\r\n return true;\r\n }\r\n return derivedFrom(ecClass.getBaseClassSync(), baseClassName);\r\n}\r\n\r\n/**\r\n * Definition of lookup args to locate certain elements in the existing differences.\r\n */\r\ninterface LookupArgs {\r\n schemaType?: string;\r\n itemName?: string;\r\n path?: string;\r\n}\r\n\r\n/**\r\n * The SchemaDiagnosticVisitor is a visitor implementation for diagnostic entries\r\n * from the schema comparer api. Depending on the diagnostic code, the difference\r\n * result is build together.\r\n * @internal\r\n */\r\nexport class SchemaDiagnosticVisitor {\r\n\r\n private readonly _differenceReport: SchemaDifferences;\r\n\r\n constructor(differenceReport: SchemaDifferences) {\r\n this._differenceReport = differenceReport;\r\n }\r\n\r\n private addEntry<T extends AnySchemaDifference>(entry: T): T {\r\n this._differenceReport.changes.push(entry);\r\n return entry;\r\n }\r\n\r\n private lookupEntry(changeType: DifferenceType, args: LookupArgs) {\r\n return this._differenceReport.changes && this._differenceReport.changes.find((change) => {\r\n return (change.changeType === changeType)\r\n && (!args.schemaType || change.schemaType === args.schemaType)\r\n && (!args.itemName || change.itemName === args.itemName)\r\n && change.path === args.path;\r\n });\r\n }\r\n\r\n private addConflict(conflict: SchemaDifferenceConflict) {\r\n this._differenceReport.conflicts.push(conflict);\r\n }\r\n\r\n /**\r\n * Visitor function to process the schema change diagnostic object.\r\n * @internal\r\n */\r\n public visit(diagnostic: AnyDiagnostic) {\r\n switch(diagnostic.code) {\r\n case SchemaCompareCodes.SchemaDelta:\r\n return this.visitChangedSchemaProperties(diagnostic);\r\n\r\n case SchemaCompareCodes.SchemaReferenceMissing:\r\n return this.visitSchemaReference(diagnostic, \"add\");\r\n case SchemaCompareCodes.SchemaReferenceDelta:\r\n return this.visitSchemaReference(diagnostic, \"modify\");\r\n\r\n case SchemaCompareCodes.SchemaItemMissing:\r\n return this.visitMissingSchemaItem(diagnostic);\r\n\r\n case SchemaCompareCodes.SchemaItemDelta:\r\n case SchemaCompareCodes.ClassDelta:\r\n case SchemaCompareCodes.ConstantDelta:\r\n case SchemaCompareCodes.CustomAttributeClassDelta:\r\n case SchemaCompareCodes.FormatDelta:\r\n case SchemaCompareCodes.InvertedUnitDelta:\r\n case SchemaCompareCodes.KoqDelta:\r\n case SchemaCompareCodes.MixinDelta:\r\n case SchemaCompareCodes.PhenomenonDelta:\r\n case SchemaCompareCodes.PropertyCategoryDelta:\r\n case SchemaCompareCodes.RelationshipDelta:\r\n case SchemaCompareCodes.UnitDelta:\r\n return this.visitChangedSchemaItem(diagnostic);\r\n\r\n case SchemaCompareCodes.EnumerationDelta:\r\n return this.visitChangedEnumeration(diagnostic);\r\n\r\n case SchemaCompareCodes.EnumeratorDelta:\r\n return this.visitChangedEnumerator(diagnostic);\r\n case SchemaCompareCodes.EnumeratorMissing:\r\n return this.visitMissingEnumerator(diagnostic);\r\n\r\n case SchemaCompareCodes.BaseClassDelta:\r\n return this.visitMissingBaseClass(diagnostic);\r\n case SchemaCompareCodes.EntityMixinMissing:\r\n return this.visitMissingMixinOnClass(diagnostic);\r\n case SchemaCompareCodes.PropertyDelta:\r\n return this.visitChangedProperty(diagnostic);\r\n case SchemaCompareCodes.PropertyMissing:\r\n return this.visitMissingProperty(diagnostic);\r\n\r\n case SchemaCompareCodes.RelationshipConstraintClassMissing:\r\n return this.visitMissingRelationshipConstraintClass(diagnostic);\r\n case SchemaCompareCodes.RelationshipConstraintDelta:\r\n return this.visitChangedRelationshipConstraint(diagnostic);\r\n\r\n case SchemaCompareCodes.CustomAttributeInstanceClassMissing:\r\n return this.visitMissingCustomAttributeInstance(diagnostic);\r\n\r\n // Currently not handled...\r\n case SchemaCompareCodes.FormatUnitMissing:\r\n case SchemaCompareCodes.PresentationUnitMissing:\r\n case SchemaCompareCodes.UnitLabelOverrideDelta:\r\n break;\r\n }\r\n return;\r\n }\r\n\r\n private visitChangedSchemaProperties(diagnostic: AnyDiagnostic) {\r\n let modifyEntry = this.lookupEntry(\"modify\", { schemaType: \"Schema\" }) as SchemaDifference;\r\n let hasChanges = false;\r\n const existsAlready = modifyEntry !== undefined;\r\n if(!existsAlready) {\r\n modifyEntry = {\r\n changeType: \"modify\",\r\n schemaType: \"Schema\",\r\n json: {},\r\n };\r\n }\r\n\r\n // Only label and description are taken from the source schema. If the schema name or alias\r\n // differs, those are ignored for now.\r\n const [propertyName, propertyValue] = diagnostic.messageArgs as [string, any];\r\n switch(propertyName) {\r\n case \"label\":\r\n modifyEntry.json.label = propertyValue;\r\n hasChanges = true;\r\n break;\r\n case \"description\":\r\n modifyEntry.json.description = propertyValue;\r\n hasChanges = true;\r\n break;\r\n }\r\n\r\n if(!existsAlready && hasChanges) {\r\n this.addEntry(modifyEntry);\r\n }\r\n }\r\n\r\n private visitMissingSchemaItem(diagnostic: AnyDiagnostic) {\r\n const schemaItem = diagnostic.ecDefinition as SchemaItem;\r\n this.addEntry({\r\n changeType: \"add\",\r\n schemaType: getSchemaItemName(schemaItem.schemaItemType),\r\n itemName: schemaItem.name,\r\n json: schemaItem.toJSON(),\r\n });\r\n }\r\n\r\n private visitChangedSchemaItem(diagnostic: AnyDiagnostic) {\r\n const schemaItem = diagnostic.ecDefinition as SchemaItem;\r\n if(this.lookupEntry(\"add\", { itemName: schemaItem.name })) {\r\n return;\r\n }\r\n\r\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [keyof AnySchemaItemProps, any, any];\r\n if(propertyName === \"schemaItemType\") {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingItemName,\r\n schemaType: getSchemaItemName(schemaItem.schemaItemType),\r\n itemName: schemaItem.name,\r\n source: sourceValue,\r\n target: targetValue,\r\n description: \"Target schema already contains a schema item with the name but different type.\",\r\n });\r\n }\r\n\r\n if(sourceValue === undefined) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: schemaItem.name }) as SchemaItemDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: getSchemaItemName(schemaItem.schemaItemType),\r\n itemName: schemaItem.name,\r\n json: {},\r\n });\r\n }\r\n\r\n modifyEntry.json[propertyName] = sourceValue;\r\n }\r\n\r\n private visitChangedEnumeration(diagnostic: AnyDiagnostic) {\r\n const enumeration = diagnostic.ecDefinition as Enumeration;\r\n if(this.lookupEntry(\"add\", { itemName: enumeration.name })) {\r\n return;\r\n }\r\n\r\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [string, string, string];\r\n if(propertyName === \"type\") {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingEnumerationType,\r\n schemaType: getSchemaItemName(SchemaItemType.Enumeration),\r\n itemName: enumeration.name,\r\n source: sourceValue,\r\n target: targetValue,\r\n description: \"Enumeration has a different primitive type.\",\r\n });\r\n }\r\n\r\n return this.visitChangedSchemaItem(diagnostic);\r\n }\r\n\r\n private visitMissingEnumerator(diagnostic: AnyDiagnostic) {\r\n const enumeration = diagnostic.ecDefinition as SchemaItem;\r\n if(this.lookupEntry(\"add\", { itemName: enumeration.name })) {\r\n return;\r\n }\r\n\r\n const [enumerator] = diagnostic.messageArgs as [AnyEnumerator];\r\n this.addEntry({\r\n changeType: \"add\",\r\n schemaType: \"Enumeration\",\r\n itemName: enumeration.name,\r\n path: \"$enumerators\",\r\n json: enumerator,\r\n });\r\n }\r\n\r\n private lookupEnumeratorEntry(changeType: DifferenceType, item: string, enumeratorName: string) {\r\n return this._differenceReport.changes && this._differenceReport.changes.find((change) => {\r\n return change.changeType === changeType\r\n && change.schemaType === \"Enumeration\"\r\n && change.itemName === item\r\n && change.path === \"$enumerators\"\r\n && (change.json as AnyEnumerator).name === enumeratorName;\r\n });\r\n }\r\n\r\n private visitChangedEnumerator(diagnostic: AnyDiagnostic) {\r\n const enumeration = diagnostic.ecDefinition as Enumeration;\r\n if(this.lookupEntry(\"add\", { itemName: enumeration.name })) {\r\n return;\r\n }\r\n\r\n const [enumerator, propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [AnyEnumerator, keyof AnyEnumerator, any, any];\r\n if(this.lookupEnumeratorEntry(\"add\", enumeration.name, enumerator.name)) {\r\n return;\r\n }\r\n\r\n if(!this.validateEnumerator(enumeration, enumerator, propertyName, sourceValue, targetValue)) {\r\n return;\r\n }\r\n\r\n const enumeratorPath = `$enumerators.${enumerator.name}`;\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: enumeration.name, path: enumeratorPath}) as SchemaEnumeratorDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: \"Enumeration\",\r\n itemName: enumeration.name,\r\n path: enumeratorPath,\r\n json: {},\r\n });\r\n }\r\n\r\n if(sourceValue !== undefined) {\r\n modifyEntry.json[propertyName] = sourceValue;\r\n }\r\n }\r\n\r\n private validateEnumerator(enumeration: Enumeration, enumerator: AnyEnumerator, propertyName: string, sourceValue: unknown, targetValue: unknown) {\r\n if(propertyName === \"value\") {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingEnumeratorValue,\r\n schemaType: getSchemaItemName(SchemaItemType.Enumeration),\r\n itemName: enumeration.name,\r\n path: enumerator.name,\r\n source: sourceValue,\r\n target: targetValue,\r\n description: \"Enumerator values must not differ.\",\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private visitMissingProperty(diagnostic: AnyDiagnostic) {\r\n const property = diagnostic.ecDefinition as Property;\r\n if(this.lookupEntry(\"add\", { itemName: property.class.name })) {\r\n return;\r\n }\r\n\r\n this.addEntry({\r\n changeType: \"add\",\r\n schemaType: \"Property\",\r\n itemName: property.class.name,\r\n path: property.name,\r\n json: property.toJSON(),\r\n });\r\n }\r\n\r\n private visitChangedProperty(diagnostic: AnyDiagnostic) {\r\n const property = diagnostic.ecDefinition as Property;\r\n if(this.lookupEntry(\"add\", { itemName: property.class.name})\r\n || this.lookupEntry(\"add\", { itemName: property.class.name, path: property.name })) {\r\n return;\r\n }\r\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [keyof PropertyProps, any, any];\r\n if(!this.validatePropertyChange(property, propertyName, sourceValue, targetValue)) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: property.class.name, path: property.name}) as SchemaPropertyDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: \"Property\",\r\n itemName: property.class.name,\r\n path: property.name,\r\n json: {},\r\n });\r\n }\r\n\r\n if(propertyName !== \"name\" && sourceValue !== undefined) {\r\n modifyEntry.json[propertyName] = sourceValue;\r\n }\r\n }\r\n\r\n private validatePropertyChange(ecProperty: Property, propertyName: string, sourceValue: unknown, targetValue: unknown): boolean {\r\n if(propertyName === \"primitiveType\") {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingPropertyName,\r\n schemaType: getSchemaItemName(ecProperty.class.schemaItemType),\r\n itemName: ecProperty.class.name,\r\n path: ecProperty.name,\r\n source: sourceValue,\r\n target: targetValue,\r\n description: \"Target class already contains a property with a different type.\",\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private visitMissingBaseClass(diagnostic: AnyDiagnostic) {\r\n const ecClass = diagnostic.ecDefinition as ECClass;\r\n if(this.lookupEntry(\"add\", { itemName: ecClass.name })) {\r\n return;\r\n }\r\n\r\n const [sourceBaseClass, targetBaseClass] = diagnostic.messageArgs as [ECClass, ECClass];\r\n if(!this.validateBaseClassChange(ecClass, sourceBaseClass, targetBaseClass)) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\",{ itemName: ecClass.name }) as SchemaItemDifference<{ baseClass: string }>;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: getSchemaItemName(ecClass.schemaItemType),\r\n itemName: ecClass.name,\r\n json: {},\r\n });\r\n }\r\n\r\n modifyEntry.json.baseClass = sourceBaseClass.fullName;\r\n }\r\n\r\n private validateBaseClassChange(targetClass: ECClass, sourceBaseClass?: ECClass, targetBaseClass?: ECClass): boolean {\r\n if(sourceBaseClass === undefined) {\r\n this.addConflict({\r\n code: ConflictCode.RemovingBaseClass,\r\n schemaType: getSchemaItemName(targetClass.schemaItemType),\r\n itemName: targetClass.name,\r\n path: \"$baseClass\",\r\n source: undefined,\r\n target: targetBaseClass?.fullName,\r\n description: \"BaseClass cannot be set unset if there has been a baseClass before.\",\r\n });\r\n return false;\r\n }\r\n\r\n if(sourceBaseClass.modifier === ECClassModifier.Sealed) {\r\n this.addConflict({\r\n code: ConflictCode.SealedBaseClass,\r\n schemaType: getSchemaItemName(targetClass.schemaItemType),\r\n itemName: targetClass.name,\r\n path: \"$baseClass\",\r\n source: sourceBaseClass.fullName,\r\n target: targetBaseClass?.fullName,\r\n description: \"BaseClass is sealed.\",\r\n });\r\n return false;\r\n }\r\n\r\n if(targetBaseClass && !derivedFrom(sourceBaseClass, targetBaseClass.name)) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingBaseClass,\r\n schemaType: getSchemaItemName(targetClass.schemaItemType),\r\n itemName: targetClass.name,\r\n path: \"$baseClass\",\r\n source: sourceBaseClass.fullName,\r\n target: targetBaseClass.fullName,\r\n description: \"BaseClass is not valid, source class must derive from target.\",\r\n });\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n private visitMissingMixinOnClass(diagnostic: AnyDiagnostic) {\r\n const ecClass = diagnostic.ecDefinition as ECClass;\r\n if(this.lookupEntry(\"add\", { itemName: ecClass.name })) {\r\n return;\r\n }\r\n\r\n const [mixin] = diagnostic.messageArgs as [Mixin];\r\n if(!this.validateMixin(ecClass, mixin)) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: ecClass.name, path: \"$mixins\" }) as SchemaClassMixinDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: \"EntityClass\",\r\n itemName: ecClass.name,\r\n path: \"$mixins\",\r\n json: [],\r\n });\r\n }\r\n\r\n modifyEntry.json.push(mixin.fullName);\r\n }\r\n\r\n private validateMixin(targetClass: ECClass, mixin: Mixin): boolean {\r\n if(mixin.appliesTo && !derivedFrom(targetClass, mixin.appliesTo.name)) {\r\n this.addConflict({\r\n code: ConflictCode.MixinAppliedMustDeriveFromConstraint,\r\n schemaType: getSchemaItemName(targetClass.schemaItemType),\r\n itemName: targetClass.name,\r\n path: \"$mixins\",\r\n source: mixin.fullName,\r\n target: undefined,\r\n description: \"Mixin cannot applied to this class.\",\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n private visitMissingRelationshipConstraintClass(diagnostic: AnyDiagnostic) {\r\n const constraint = diagnostic.ecDefinition as RelationshipConstraint;\r\n const className = constraint.relationshipClass.name;\r\n const constraintPath = `$${constraint.isSource ? \"source\" : \"target\"}.constraintClasses`;\r\n if(this.lookupEntry(\"add\", { itemName: className })) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: className, path: constraintPath}) as SchemaRelationshipConstraintClassDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: \"RelationshipClass\",\r\n itemName: className,\r\n path: constraintPath,\r\n json: [],\r\n });\r\n }\r\n\r\n const [constraintClass] = diagnostic.messageArgs as [ECClass];\r\n modifyEntry.json.push(constraintClass.fullName);\r\n }\r\n\r\n private visitChangedRelationshipConstraint(diagnostic: AnyDiagnostic) {\r\n const constraint = diagnostic.ecDefinition as RelationshipConstraint;\r\n const className = constraint.relationshipClass.name;\r\n const constraintPath = `$${constraint.isSource ? \"source\" : \"target\"}`;\r\n if(this.lookupEntry(\"add\", { itemName: className })) {\r\n return;\r\n }\r\n\r\n let modifyEntry = this.lookupEntry(\"modify\", { itemName: className, path: constraintPath }) as SchemaRelationshipConstraintDifference;\r\n if(!modifyEntry) {\r\n modifyEntry = this.addEntry({\r\n changeType: \"modify\",\r\n schemaType: \"RelationshipConstraint\",\r\n itemName: className,\r\n path: constraintPath,\r\n json: {},\r\n });\r\n }\r\n\r\n const [propertyName, propertyValue] = diagnostic.messageArgs as [keyof RelationshipConstraintProps, any];\r\n if(propertyValue !== undefined) {\r\n modifyEntry.json[propertyName] = propertyValue;\r\n }\r\n }\r\n\r\n private visitSchemaReference(diagnostic: AnyDiagnostic, changeType: DifferenceType) {\r\n const [referencedSchema] = diagnostic.messageArgs as [Schema];\r\n this.addEntry({\r\n changeType,\r\n schemaType: \"Schema\",\r\n path: \"$references\",\r\n json: {\r\n name: referencedSchema.name,\r\n version: referencedSchema.schemaKey.version.toString(),\r\n },\r\n });\r\n }\r\n\r\n private visitMissingCustomAttributeInstance(diagnostic: AnyDiagnostic) {\r\n const { schemaType, itemName, path } = getItemNameAndPath(diagnostic.ecDefinition);\r\n if(itemName && (this.lookupEntry(\"add\", { itemName }) || this.lookupEntry(\"add\", { itemName, path }))) {\r\n return;\r\n }\r\n\r\n const [customAttribute] = diagnostic.messageArgs as [CustomAttribute];\r\n this.addEntry({\r\n changeType: \"add\",\r\n schemaType,\r\n itemName: itemName!,\r\n path: `${path ? `${path}.` : \"\"}$customAttributes`,\r\n json: customAttribute as any,\r\n });\r\n }\r\n}\r\n\r\nfunction getItemNameAndPath(type: AnyECType): { schemaType: SchemaType, itemName?: string, path?: string } {\r\n if(Schema.isSchema(type))\r\n return {\r\n schemaType: \"Schema\",\r\n };\r\n if(SchemaItem.isSchemaItem(type))\r\n return {\r\n schemaType: getSchemaItemName(type.schemaItemType),\r\n itemName: type.name,\r\n };\r\n if(type instanceof Property)\r\n return {\r\n schemaType: \"Property\",\r\n itemName: type.class.name,\r\n path: type.name,\r\n };\r\n if(type instanceof RelationshipConstraint)\r\n return {\r\n schemaType: \"RelationshipClass\",\r\n itemName: type.relationshipClass.name,\r\n path: type.isSource ? \"$source\" : \"$target\",\r\n };\r\n throw Error(\"Unhandled Type\");\r\n}\r\n\r\nfunction getSchemaItemName(schemaItemType: SchemaItemType) {\r\n return schemaItemTypeToString(schemaItemType) as SchemaItemTypeName;\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaDiagnosticVisitor.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDiagnosticVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Differencing\n */\n\nimport type { AnyDiagnostic } from \"../Validation/Diagnostic\";\nimport { SchemaCompareCodes } from \"../Validation/SchemaCompareDiagnostics\";\nimport {\n AnyEnumerator, AnyPropertyProps, AnySchemaItem, CustomAttribute, ECClass, ECClassModifier,\n Enumeration, Mixin, Property, PropertyProps,\n RelationshipConstraint, RelationshipConstraintProps, Schema, SchemaItem, SchemaItemType,\n} from \"@itwin/ecschema-metadata\";\nimport {\n type AnySchemaItemDifference,\n type AnySchemaItemPathDifference,\n ClassItemDifference,\n ClassPropertyDifference,\n type CustomAttributeDifference,\n type DifferenceType,\n EntityClassMixinDifference,\n EnumeratorDifference,\n RelationshipConstraintClassDifference,\n RelationshipConstraintDifference,\n type SchemaDifference,\n SchemaOtherTypes,\n type SchemaReferenceDifference,\n} from \"./SchemaDifference\";\nimport { ConflictCode, SchemaDifferenceConflict } from \"./SchemaConflicts\";\n\n/**\n * Recursive synchronous function to figure whether a given class derived from\n * a class with the given baseClassName.\n */\nfunction derivedFrom(ecClass: ECClass | undefined, baseClassName: string): boolean {\n if (ecClass === undefined) {\n return false;\n }\n if (ecClass && ecClass.name === baseClassName) {\n return true;\n }\n return derivedFrom(ecClass.getBaseClassSync(), baseClassName);\n}\n\n/**\n * The SchemaDiagnosticVisitor is a visitor implementation for diagnostic entries\n * from the schema comparer api. Depending on the diagnostic code, the difference\n * result is build together.\n * @internal\n */\nexport class SchemaDiagnosticVisitor {\n\n public readonly schemaChanges: Array<SchemaDifference|SchemaReferenceDifference>;\n public readonly schemaItemChanges: Array<AnySchemaItemDifference>;\n public readonly schemaItemPathChanges: Array<AnySchemaItemPathDifference>;\n public readonly customAttributeChanges: Array<CustomAttributeDifference>;\n public readonly conflicts: Array<SchemaDifferenceConflict>;\n\n constructor() {\n this.schemaChanges = [];\n this.schemaItemChanges = [];\n this.schemaItemPathChanges = [];\n this.customAttributeChanges = [];\n this.conflicts = [];\n }\n\n private addConflict(conflict: SchemaDifferenceConflict) {\n this.conflicts.push(conflict);\n }\n\n /**\n * Visitor function to process the schema change diagnostic object.\n * @internal\n */\n public visit(diagnostic: AnyDiagnostic) {\n switch (diagnostic.code) {\n case SchemaCompareCodes.SchemaDelta:\n return this.visitChangedSchemaProperties(diagnostic);\n\n case SchemaCompareCodes.SchemaReferenceMissing:\n return this.visitSchemaReference(diagnostic, \"add\");\n case SchemaCompareCodes.SchemaReferenceDelta:\n return this.visitSchemaReference(diagnostic, \"modify\");\n\n case SchemaCompareCodes.SchemaItemMissing:\n return this.visitMissingSchemaItem(diagnostic);\n\n case SchemaCompareCodes.SchemaItemDelta:\n case SchemaCompareCodes.ClassDelta:\n case SchemaCompareCodes.ConstantDelta:\n case SchemaCompareCodes.CustomAttributeClassDelta:\n case SchemaCompareCodes.FormatDelta:\n case SchemaCompareCodes.InvertedUnitDelta:\n case SchemaCompareCodes.KoqDelta:\n case SchemaCompareCodes.MixinDelta:\n case SchemaCompareCodes.PhenomenonDelta:\n case SchemaCompareCodes.PropertyCategoryDelta:\n case SchemaCompareCodes.RelationshipDelta:\n case SchemaCompareCodes.UnitDelta:\n return this.visitChangedSchemaItem(diagnostic);\n\n case SchemaCompareCodes.EnumerationDelta:\n return this.visitChangedEnumeration(diagnostic);\n\n case SchemaCompareCodes.EnumeratorDelta:\n return this.visitChangedEnumerator(diagnostic);\n case SchemaCompareCodes.EnumeratorMissing:\n return this.visitMissingEnumerator(diagnostic);\n\n case SchemaCompareCodes.BaseClassDelta:\n return this.visitMissingBaseClass(diagnostic);\n case SchemaCompareCodes.EntityMixinMissing:\n return this.visitMissingMixinOnClass(diagnostic);\n case SchemaCompareCodes.PropertyDelta:\n return this.visitChangedProperty(diagnostic);\n case SchemaCompareCodes.PropertyMissing:\n return this.visitMissingProperty(diagnostic);\n\n case SchemaCompareCodes.RelationshipConstraintClassMissing:\n return this.visitMissingRelationshipConstraintClass(diagnostic);\n case SchemaCompareCodes.RelationshipConstraintDelta:\n return this.visitChangedRelationshipConstraint(diagnostic);\n\n case SchemaCompareCodes.CustomAttributeInstanceClassMissing:\n return this.visitMissingCustomAttributeInstance(diagnostic);\n\n // Currently not handled...\n case SchemaCompareCodes.FormatUnitMissing:\n case SchemaCompareCodes.PresentationUnitMissing:\n case SchemaCompareCodes.UnitLabelOverrideDelta:\n break;\n }\n return;\n }\n\n private visitChangedSchemaProperties(diagnostic: AnyDiagnostic) {\n let modifyEntry = this.schemaChanges.find((entry): entry is SchemaDifference => {\n return entry.changeType === \"modify\" && entry.schemaType === SchemaOtherTypes.Schema;\n });\n\n let hasChanges = false;\n let addEntry = false;\n if (modifyEntry === undefined) {\n addEntry = true;\n modifyEntry = {\n changeType: \"modify\",\n schemaType: SchemaOtherTypes.Schema,\n difference: {},\n };\n }\n\n // Only label and description are taken from the source schema. If the schema name or alias\n // differs, those are ignored for now.\n const [propertyName, propertyValue] = diagnostic.messageArgs as [string, any];\n if (propertyName === \"label\") {\n modifyEntry.difference.label = propertyValue;\n hasChanges = true;\n }\n if (propertyName === \"description\") {\n modifyEntry.difference.description = propertyValue;\n hasChanges = true;\n }\n\n if (addEntry && hasChanges) {\n this.schemaChanges.push(modifyEntry);\n }\n }\n\n private visitMissingSchemaItem(diagnostic: AnyDiagnostic) {\n const schemaItem = diagnostic.ecDefinition as AnySchemaItem;\n\n this.schemaItemChanges.push({\n changeType: \"add\",\n schemaType: schemaItem.schemaItemType,\n itemName: schemaItem.name,\n difference: schemaItem.toJSON(),\n });\n }\n\n private visitChangedSchemaItem(diagnostic: AnyDiagnostic) {\n const schemaItem = diagnostic.ecDefinition as AnySchemaItem;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === schemaItem.name)) {\n return;\n }\n\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [string, unknown, unknown];\n if (propertyName === \"schemaItemType\") {\n return this.addConflict({\n code: ConflictCode.ConflictingItemName,\n schemaType: schemaItem.schemaItemType,\n itemName: schemaItem.name,\n source: sourceValue,\n target: targetValue,\n description: \"Target schema already contains a schema item with the name but different type.\",\n });\n }\n\n if (sourceValue === undefined) {\n return;\n }\n\n let modifyEntry = this.schemaItemChanges.find((entry): entry is AnySchemaItemDifference => {\n return entry.changeType === \"modify\" && entry.itemName === schemaItem.name;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"modify\",\n schemaType: schemaItem.schemaItemType,\n itemName: schemaItem.name,\n difference: {},\n } as AnySchemaItemDifference;\n this.schemaItemChanges.push(modifyEntry);\n }\n\n // TODO: Since propertyName is type of string, the compiler complains about accepting\n // an unspecific string as property indexer. Casted to any as short term fix but that\n // needs to be handled better in future.\n (modifyEntry.difference as any)[propertyName] = sourceValue;\n }\n\n private visitChangedEnumeration(diagnostic: AnyDiagnostic) {\n const enumeration = diagnostic.ecDefinition as Enumeration;\n if (this.schemaItemPathChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === enumeration.name)) {\n return;\n }\n\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [string, string, string];\n if (propertyName === \"type\") {\n return this.addConflict({\n code: ConflictCode.ConflictingEnumerationType,\n schemaType: SchemaItemType.Enumeration,\n itemName: enumeration.name,\n source: sourceValue,\n target: targetValue,\n description: \"Enumeration has a different primitive type.\",\n });\n }\n\n return this.visitChangedSchemaItem(diagnostic);\n }\n\n private visitMissingEnumerator(diagnostic: AnyDiagnostic) {\n const enumeration = diagnostic.ecDefinition as Enumeration;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemPathChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === enumeration.name)) {\n return;\n }\n\n const [enumerator] = diagnostic.messageArgs as [AnyEnumerator];\n this.schemaItemPathChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.Enumerator,\n itemName: enumeration.name,\n path: \"$enumerators\",\n difference: enumerator,\n });\n }\n\n private lookupEnumeratorEntry(changeType: DifferenceType, item: string, enumeratorName: string) {\n return this.schemaItemPathChanges.find((change) => {\n return change.changeType === changeType\n && change.schemaType === SchemaOtherTypes.Enumerator\n && change.itemName === item\n && change.path === \"$enumerators\"\n && change.difference.name === enumeratorName;\n });\n }\n\n private visitChangedEnumerator(diagnostic: AnyDiagnostic) {\n const enumeration = diagnostic.ecDefinition as Enumeration;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemPathChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === enumeration.name)) {\n return;\n }\n\n const [enumerator, propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [AnyEnumerator, keyof AnyEnumerator, any, any];\n if (this.lookupEnumeratorEntry(\"add\", enumeration.name, enumerator.name)) {\n return;\n }\n\n if (!this.validateEnumerator(enumeration, enumerator, propertyName, sourceValue, targetValue)) {\n return;\n }\n\n let modifyEntry = this.schemaItemPathChanges.find((entry): entry is EnumeratorDifference => {\n return entry.changeType === \"modify\" && entry.schemaType === SchemaOtherTypes.Enumerator && entry.itemName === enumeration.name && entry.path === enumerator.name;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"modify\",\n schemaType: SchemaOtherTypes.Enumerator,\n itemName: enumeration.name,\n path: enumerator.name,\n difference: {},\n };\n this.schemaItemPathChanges.push(modifyEntry);\n }\n\n if (sourceValue !== undefined) {\n modifyEntry.difference[propertyName] = sourceValue;\n }\n }\n\n private validateEnumerator(enumeration: Enumeration, enumerator: AnyEnumerator, propertyName: string, sourceValue: unknown, targetValue: unknown) {\n if (propertyName === \"value\") {\n this.addConflict({\n code: ConflictCode.ConflictingEnumeratorValue,\n schemaType: SchemaItemType.Enumeration,\n itemName: enumeration.name,\n path: enumerator.name,\n source: sourceValue,\n target: targetValue,\n description: \"Enumerator values must not differ.\",\n });\n return false;\n }\n\n return true;\n }\n\n private visitMissingProperty(diagnostic: AnyDiagnostic) {\n const property = diagnostic.ecDefinition as Property;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.schemaType in SchemaItemType && entry.itemName === property.class.name)) {\n return;\n }\n\n this.schemaItemPathChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.Property,\n itemName: property.class.name,\n path: property.name,\n difference: property.toJSON() as AnyPropertyProps,\n });\n }\n\n private visitChangedProperty(diagnostic: AnyDiagnostic) {\n const property = diagnostic.ecDefinition as Property;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === property.class.name)) {\n return;\n }\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemPathChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === property.class.name && entry.path === property.name)) {\n return;\n }\n\n const [propertyName, sourceValue, targetValue] = diagnostic.messageArgs as [keyof PropertyProps, any, any];\n if (!this.validatePropertyChange(property, propertyName, sourceValue, targetValue)) {\n return;\n }\n\n let modifyEntry = this.schemaItemPathChanges.find((entry): entry is ClassPropertyDifference => {\n return entry.changeType === \"modify\" && entry.schemaType === SchemaOtherTypes.Property && entry.itemName === property.class.name && entry.path === property.name;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"modify\",\n schemaType: SchemaOtherTypes.Property,\n itemName: property.class.name,\n path: property.name,\n difference: {},\n };\n this.schemaItemPathChanges.push(modifyEntry);\n }\n\n if (propertyName !== \"name\" && sourceValue !== undefined) {\n modifyEntry.difference[propertyName] = sourceValue;\n }\n }\n\n private validatePropertyChange(ecProperty: Property, propertyName: string, sourceValue: unknown, targetValue: unknown): boolean {\n if (propertyName === \"primitiveType\") {\n this.addConflict({\n code: ConflictCode.ConflictingPropertyName,\n schemaType: ecProperty.class.schemaItemType,\n itemName: ecProperty.class.name,\n path: ecProperty.name,\n source: sourceValue,\n target: targetValue,\n description: \"Target class already contains a property with a different type.\",\n });\n return false;\n }\n return true;\n }\n\n private visitMissingBaseClass(diagnostic: AnyDiagnostic) {\n const ecClass = diagnostic.ecDefinition as ECClass;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecClass.name)) {\n return;\n }\n\n const [sourceBaseClass, targetBaseClass] = diagnostic.messageArgs as [ECClass, ECClass];\n if (!this.validateBaseClassChange(ecClass, sourceBaseClass, targetBaseClass)) {\n return;\n }\n\n let modifyEntry = this.schemaItemChanges.find((entry): entry is ClassItemDifference => {\n return entry.changeType === \"modify\" && entry.schemaType === ecClass.schemaItemType && entry.itemName === ecClass.name;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"modify\",\n schemaType: ecClass.schemaItemType,\n itemName: ecClass.name,\n difference: {},\n } as ClassItemDifference;\n this.schemaItemChanges.push(modifyEntry);\n }\n\n modifyEntry.difference.baseClass = sourceBaseClass.fullName;\n }\n\n private validateBaseClassChange(targetClass: ECClass, sourceBaseClass?: ECClass, targetBaseClass?: ECClass): boolean {\n if (sourceBaseClass === undefined) {\n this.addConflict({\n code: ConflictCode.RemovingBaseClass,\n schemaType: targetClass.schemaItemType,\n itemName: targetClass.name,\n path: \"$baseClass\",\n source: undefined,\n target: targetBaseClass?.fullName,\n description: \"BaseClass cannot be set unset if there has been a baseClass before.\",\n });\n return false;\n }\n\n if (sourceBaseClass.modifier === ECClassModifier.Sealed) {\n this.addConflict({\n code: ConflictCode.SealedBaseClass,\n schemaType: targetClass.schemaItemType,\n itemName: targetClass.name,\n path: \"$baseClass\",\n source: sourceBaseClass.fullName,\n target: targetBaseClass?.fullName,\n description: \"BaseClass is sealed.\",\n });\n return false;\n }\n\n if (targetBaseClass && !derivedFrom(sourceBaseClass, targetBaseClass.name)) {\n this.addConflict({\n code: ConflictCode.ConflictingBaseClass,\n schemaType: targetClass.schemaItemType,\n itemName: targetClass.name,\n path: \"$baseClass\",\n source: sourceBaseClass.fullName,\n target: targetBaseClass.fullName,\n description: \"BaseClass is not valid, source class must derive from target.\",\n });\n return false;\n }\n return true;\n }\n\n private visitMissingMixinOnClass(diagnostic: AnyDiagnostic) {\n const ecClass = diagnostic.ecDefinition as ECClass;\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecClass.name)) {\n return;\n }\n\n const [mixin] = diagnostic.messageArgs as [Mixin];\n if (!this.validateMixin(ecClass, mixin)) {\n return;\n }\n\n let modifyEntry = this.schemaItemChanges.find((entry): entry is EntityClassMixinDifference => {\n return entry.changeType === \"add\" && entry.schemaType === SchemaOtherTypes.EntityClassMixin && entry.itemName === ecClass.name;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"add\",\n schemaType: SchemaOtherTypes.EntityClassMixin,\n itemName: ecClass.name,\n difference: [],\n };\n this.schemaItemChanges.push(modifyEntry);\n }\n modifyEntry.difference.push(mixin.fullName);\n }\n\n private validateMixin(targetClass: ECClass, mixin: Mixin): boolean {\n if (mixin.appliesTo && !derivedFrom(targetClass, mixin.appliesTo.name)) {\n this.addConflict({\n code: ConflictCode.MixinAppliedMustDeriveFromConstraint,\n schemaType: targetClass.schemaItemType,\n itemName: targetClass.name,\n path: \"$mixins\",\n source: mixin.fullName,\n target: undefined,\n description: \"Mixin cannot applied to this class.\",\n });\n return false;\n }\n\n return true;\n }\n\n private visitMissingRelationshipConstraintClass(diagnostic: AnyDiagnostic) {\n const constraint = diagnostic.ecDefinition as RelationshipConstraint;\n const className = constraint.relationshipClass.name;\n const constraintPath = constraint.isSource ? \"$source\" : \"$target\";\n\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === className)) {\n return;\n }\n\n let modifyEntry = this.schemaItemPathChanges.find((entry): entry is RelationshipConstraintClassDifference => {\n return entry.changeType === \"add\" && entry.schemaType === SchemaOtherTypes.RelationshipConstraintClass, entry.itemName === className && entry.path === constraintPath;\n });\n\n if (!modifyEntry) {\n modifyEntry = {\n changeType: \"add\",\n schemaType: SchemaOtherTypes.RelationshipConstraintClass,\n itemName: className,\n path: constraintPath,\n difference: [],\n };\n this.schemaItemPathChanges.push(modifyEntry);\n }\n\n const [constraintClass] = diagnostic.messageArgs as [ECClass];\n modifyEntry.difference.push(constraintClass.fullName);\n }\n\n private visitChangedRelationshipConstraint(diagnostic: AnyDiagnostic) {\n const constraint = diagnostic.ecDefinition as RelationshipConstraint;\n const className = constraint.relationshipClass.name;\n const constraintPath = constraint.isSource ? \"$source\" : \"$target\";\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === className)) {\n return;\n }\n\n let modifyEntry = this.schemaItemPathChanges.find((entry): entry is RelationshipConstraintDifference => {\n return entry.changeType === \"modify\" && entry.schemaType === SchemaOtherTypes.RelationshipConstraint && entry.itemName === className && entry.path === constraintPath;\n });\n\n if (modifyEntry === undefined) {\n modifyEntry = {\n changeType: \"modify\",\n schemaType: SchemaOtherTypes.RelationshipConstraint,\n itemName: className,\n path: constraintPath,\n difference: {},\n };\n this.schemaItemPathChanges.push(modifyEntry);\n }\n\n const [propertyName, propertyValue] = diagnostic.messageArgs as [keyof RelationshipConstraintProps, any];\n if (propertyName === \"abstractConstraint\" && propertyValue !== undefined) {\n modifyEntry.difference.abstractConstraint = propertyValue;\n }\n if (propertyName === \"multiplicity\" && propertyValue !== undefined) {\n modifyEntry.difference.multiplicity = propertyValue;\n }\n if (propertyName === \"polymorphic\" && propertyValue !== undefined) {\n modifyEntry.difference.polymorphic = propertyValue;\n }\n if (propertyName === \"roleLabel\" && propertyValue !== undefined) {\n modifyEntry.difference.roleLabel = propertyValue;\n }\n }\n\n private visitSchemaReference(diagnostic: AnyDiagnostic, changeType: DifferenceType) {\n const [referencedSchema] = diagnostic.messageArgs as [Schema];\n this.schemaChanges.push({\n changeType,\n schemaType: SchemaOtherTypes.SchemaReference,\n difference: {\n name: referencedSchema.name,\n version: referencedSchema.schemaKey.version.toString(),\n },\n });\n }\n\n private visitMissingCustomAttributeInstance(diagnostic: AnyDiagnostic) {\n const [customAttribute] = diagnostic.messageArgs as [CustomAttribute];\n const ecType = diagnostic.ecDefinition;\n if (Schema.isSchema(ecType)) {\n return this.customAttributeChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.CustomAttributeInstance,\n appliedTo: \"Schema\",\n difference: customAttribute,\n });\n }\n\n if (SchemaItem.isSchemaItem(ecType)) {\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecType.name)) {\n return;\n }\n return this.customAttributeChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.CustomAttributeInstance,\n appliedTo: \"SchemaItem\",\n itemName: ecType.name,\n difference: customAttribute,\n });\n }\n\n if (Property.isProperty(ecType)) {\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecType.name)) {\n return;\n }\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemPathChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecType.name && entry.path === ecType.name)) {\n return;\n }\n\n return this.customAttributeChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.CustomAttributeInstance,\n appliedTo: \"Property\",\n itemName: ecType.class.name,\n path: ecType.name,\n difference: customAttribute,\n });\n }\n\n if (RelationshipConstraint.isRelationshipConstraint(ecType)) {\n // TODO: Remove after fix #6560 has been merged into master.\n if (this.schemaItemChanges.find((entry) => entry.changeType === \"add\" && entry.itemName === ecType.relationshipClass.name)) {\n return;\n }\n\n return this.customAttributeChanges.push({\n changeType: \"add\",\n schemaType: SchemaOtherTypes.CustomAttributeInstance,\n appliedTo: \"RelationshipConstraint\",\n itemName: ecType.relationshipClass.name,\n path: ecType.isSource ? \"$source\" : \"$target\",\n difference: customAttribute,\n });\n }\n return;\n }\n}\n"]}
|