@itwin/ecschema-editing 4.6.0-dev.3 → 4.6.0-dev.5

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 (71) hide show
  1. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
  2. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  3. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  4. package/lib/cjs/Editing/Constants.js.map +1 -1
  5. package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
  6. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  7. package/lib/cjs/Editing/Editor.js.map +1 -1
  8. package/lib/cjs/Editing/Entities.js.map +1 -1
  9. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  10. package/lib/cjs/Editing/Formats.js.map +1 -1
  11. package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
  12. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  13. package/lib/cjs/Editing/Mixins.js.map +1 -1
  14. package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  15. package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
  16. package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
  17. package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
  18. package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
  19. package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
  20. package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
  21. package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  22. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  23. package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
  24. package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  25. package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  26. package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
  27. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  28. package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  29. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  30. package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
  31. package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  32. package/lib/cjs/Editing/Phenomena.js.map +1 -1
  33. package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
  34. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  35. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  36. package/lib/cjs/Editing/Structs.js.map +1 -1
  37. package/lib/cjs/Editing/UnitSystems.js.map +1 -1
  38. package/lib/cjs/Editing/Units.js.map +1 -1
  39. package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
  40. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  41. package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
  42. package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
  43. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  44. package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
  45. package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
  46. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  47. package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
  48. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
  49. package/lib/cjs/Merging/SchemaItemFactory.js.map +1 -1
  50. package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
  51. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  52. package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
  53. package/lib/cjs/Merging/StructClassMerger.js.map +1 -1
  54. package/lib/cjs/Validation/Diagnostic.js.map +1 -1
  55. package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
  56. package/lib/cjs/Validation/ECRules.js.map +1 -1
  57. package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
  58. package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
  59. package/lib/cjs/Validation/Rules.js.map +1 -1
  60. package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
  61. package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
  62. package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
  63. package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
  64. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  65. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  66. package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
  67. package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
  68. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  69. package/lib/cjs/ecschema-editing.js.map +1 -1
  70. package/package.json +9 -9
  71. package/public/locales/en/ECSchemaEditing.json +26 -26
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaCompareVisitor.js","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAIkC;AAGlC;;;GAGG;AACH,MAAa,oBAAoB;IAI/B;;;;OAIG;IACH,YAAY,cAA+B,EAAE,eAAuB;QAClE,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;IAClC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,OAAe;QAC1C,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,WAAuB;QAClD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,UAAU,CAAC,MAAgB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAW,MAAM,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,aAAa,CAAC,SAAsB;QAC/C,IAAI,SAAkC,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAU,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,MAAM;YACR,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;QAEtE,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,OAAoB;QAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAc,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1E,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,QAAqB;QACjD,sDAAsD;IACxD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,UAAU,CAAC,MAAa;QACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAQ,MAAM,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,sBAAsB,CAAC,aAAgC;QAClE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAoB,aAAa,CAAC,IAAI,CAAC,CAAC;QAC5F,IAAI,CAAC,eAAe,CAAC,0BAA0B,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,2BAA2B,CAAC,WAAmC;QAC1E,IAAI,WAA+C,CAAC;QACpD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAoB,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5G,IAAI,aAAa;YACf,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC;QACnF,IAAI,CAAC,eAAe,CAAC,8BAA8B,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,yBAAyB,CAAC,gBAAsC;QAC3E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAuB,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrG,IAAI,CAAC,eAAe,CAAC,6BAA6B,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,6BAA6B,CAAC,UAAyC;QAClF,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,UAAqD,CAAC;QAE1D,IAAI,0BAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAC/B,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC5B;aAAM,IAAI,2BAAO,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE;YACxC,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC9D;aAAM,IAAI,4BAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAU,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9E,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACvE;aAAM,IAAI,0CAAsB,CAAC,wBAAwB,CAAC,UAAU,CAAC,EAAE;YACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAoB,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACpG,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACvE;QAED,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,gBAAgB,CAAC,KAAkB;QAC9C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAc,KAAK,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,mBAAmB,CAAC,IAAoB;QACnD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAiB,IAAI,CAAC,IAAI,CAAC,CAAC;QACvE,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,qBAAqB,CAAC,SAA2B;QAC5D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAmB,SAAS,CAAC,IAAI,CAAC,CAAC;QACnF,IAAI,CAAC,eAAe,CAAC,yBAAyB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,WAAW,CAAC,OAAe;QACtC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAS,OAAO,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,KAAW;QAChC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAO,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,iBAAiB,CAAC,aAA2B;QACxD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAe,aAAa,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,YAAwB;QACnD,mDAAmD;IACrD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,eAAe,CAAC,WAAuB;QAClD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAa,WAAW,CAAC,IAAI,CAAC,CAAC;QACjF,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,aAAa,CAAC,SAAmB;QAC5C,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAW,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;CACF;AArND,oDAqNC","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 Comparison\r\n */\r\n\r\nimport { AnyClass, AnyProperty, Constant, CustomAttributeClass, CustomAttributeContainerProps,\r\n ECClass, EntityClass, Enumeration, Format, InvertedUnit, ISchemaPartVisitor, KindOfQuantity, Mixin,\r\n Phenomenon, Property, PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem,\r\n StructClass, Unit, UnitSystem,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { ISchemaComparer } from \"./SchemaComparer\";\r\n\r\n/**\r\n * An ISchemaPartVisitor interface implementation that is used to compare to Schemas.\r\n * @internal\r\n */\r\nexport class SchemaCompareVisitor implements ISchemaPartVisitor {\r\n private _schemaB: Schema;\r\n private _schemaComparer: ISchemaComparer;\r\n\r\n /**\r\n * Initializes a new SchemaCompareVisitor instance.\r\n * @param schemaComparer The [[SchemaComparer]] to use to compare each item of the schema.\r\n * @param schemaToCompare The second or 'B' schema to compare against the schema being traversed (Schema A).\r\n */\r\n constructor(schemaComparer: ISchemaComparer, schemaToCompare: Schema) {\r\n this._schemaComparer = schemaComparer;\r\n this._schemaB = schemaToCompare;\r\n }\r\n\r\n /**\r\n * Called before schema traversal.\r\n * @param schema a Schema object.\r\n */\r\n public async visitFullSchema(schemaA: Schema) {\r\n this._schemaComparer.compareSchemaProps(schemaA, this._schemaB);\r\n }\r\n\r\n /**\r\n * Called for each [[SchemaItem]] instance found during schema traversal.\r\n * @param schemaItem a SchemaItem object.\r\n */\r\n public async visitSchemaItem(schemaItemA: SchemaItem) {\r\n const schemaItemB = await this._schemaB.lookupItem(schemaItemA.name);\r\n this._schemaComparer.compareSchemaItems(schemaItemA, schemaItemB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyClass]] instance found during schema traversal.\r\n * @param ecClass an ECClass object.\r\n */\r\n public async visitClass(classA: AnyClass): Promise<void> {\r\n const classB = await this._schemaB.lookupItem<AnyClass>(classA.name);\r\n this._schemaComparer.compareClasses(classA, classB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyProperty]] instance of an ECClass.\r\n * @param property an AnyProperty object.\r\n */\r\n public async visitProperty(propertyA: AnyProperty): Promise<void> {\r\n let propertyB: AnyProperty | undefined;\r\n\r\n const classB = await this._schemaB.lookupItem<ECClass>(propertyA.class.name);\r\n if (classB)\r\n propertyB = await classB.getProperty(propertyA.name) as AnyProperty;\r\n\r\n this._schemaComparer.compareProperties(propertyA, propertyB);\r\n }\r\n\r\n /**\r\n * Called for each [[EntityClass]] instance found during schema traversal.\r\n * @param entityClass an EntityClass object.\r\n */\r\n public async visitEntityClass(entityA: EntityClass): Promise<void> {\r\n const entityB = await this._schemaB.lookupItem<EntityClass>(entityA.name);\r\n this._schemaComparer.compareEntityClasses(entityA, entityB);\r\n }\r\n\r\n /**\r\n * Called for each [[StructClass]] instance found during schema traversal.\r\n * @param structClass a StructClass object.\r\n */\r\n public async visitStructClass(_structA: StructClass): Promise<void> {\r\n // No comparison to make specifically on StructClasses\r\n }\r\n\r\n /**\r\n * Called for each [[Mixin]] instance found during schema traversal.\r\n * @param mixin a Mixin object.\r\n */\r\n public async visitMixin(mixinA: Mixin): Promise<void> {\r\n const mixinB = await this._schemaB.lookupItem<Mixin>(mixinA.name);\r\n this._schemaComparer.compareMixins(mixinA, mixinB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipClass]] instance found during schema traversal.\r\n * @param relationshipClass a RelationshipClass object.\r\n */\r\n public async visitRelationshipClass(relationshipA: RelationshipClass): Promise<void> {\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(relationshipA.name);\r\n this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipConstraint]] of each RelationshipClass found during schema traversal.\r\n * @param relationshipConstraint a RelationshipConstraint object.\r\n */\r\n public async visitRelationshipConstraint(constraintA: RelationshipConstraint): Promise<void> {\r\n let constraintB: RelationshipConstraint | undefined;\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(constraintA.relationshipClass.name);\r\n if (relationshipB)\r\n constraintB = constraintA.isSource ? relationshipB.source : relationshipB.target;\r\n this._schemaComparer.compareRelationshipConstraints(constraintA, constraintB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttributeClass]] instance found during schema traversal.\r\n * @param customAttributeClass a CustomAttributeClass object.\r\n */\r\n public async visitCustomAttributeClass(customAttributeA: CustomAttributeClass): Promise<void> {\r\n const customAttributeB = await this._schemaB.lookupItem<CustomAttributeClass>(customAttributeA.name);\r\n this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttribute]] container in the schema.\r\n * @param customAttributeContainer a [[CustomAttributeContainerProps]] object.\r\n */\r\n public async visitCustomAttributeContainer(containerA: CustomAttributeContainerProps): Promise<void> {\r\n const nameParts = containerA.fullName.split(\".\");\r\n const shortName = nameParts.length === 1 ? nameParts[0] : nameParts[1];\r\n let containerB: CustomAttributeContainerProps | undefined;\r\n\r\n if (Schema.isSchema(containerA)) {\r\n containerB = this._schemaB;\r\n } else if (ECClass.isECClass(containerA)) {\r\n containerB = await this._schemaB.lookupItem(containerA.name);\r\n } else if (Property.isProperty(containerA)) {\r\n const parent = await this._schemaB.lookupItem<ECClass>(containerA.class.name);\r\n containerB = parent ? await parent.getProperty(shortName) : undefined;\r\n } else if (RelationshipConstraint.isRelationshipConstraint(containerA)) {\r\n const parent = await this._schemaB.lookupItem<RelationshipClass>(containerA.relationshipClass.name);\r\n containerB = parent ? await parent.getProperty(shortName) : undefined;\r\n }\r\n\r\n this._schemaComparer.compareCustomAttributeContainers(containerA, containerB);\r\n }\r\n\r\n /**\r\n * Called for each [[Enumeration]] instance found during schema traversal.\r\n * @param enumeration an Enumeration object.\r\n */\r\n public async visitEnumeration(enumA: Enumeration) {\r\n const enumB = await this._schemaB.lookupItem<Enumeration>(enumA.name);\r\n this._schemaComparer.compareEnumerations(enumA, enumB);\r\n }\r\n\r\n /**\r\n * Called for each [[KindOfQuantity]] instance found during schema traversal.\r\n * @param koq a KindOfQuantity object.\r\n */\r\n public async visitKindOfQuantity(koqA: KindOfQuantity) {\r\n const koqB = await this._schemaB.lookupItem<KindOfQuantity>(koqA.name);\r\n this._schemaComparer.compareKindOfQuantities(koqA, koqB);\r\n }\r\n\r\n /**\r\n * Called for each [[PropertyCategory]] instance found during schema traversal.\r\n * @param category a PropertyCategory object.\r\n */\r\n public async visitPropertyCategory(categoryA: PropertyCategory) {\r\n const categoryB = await this._schemaB.lookupItem<PropertyCategory>(categoryA.name);\r\n this._schemaComparer.comparePropertyCategories(categoryA, categoryB);\r\n }\r\n\r\n /**\r\n * Called for each [[Format]] instance found during schema traversal.\r\n * @param format a Format object.\r\n */\r\n public async visitFormat(formatA: Format): Promise<void> {\r\n const formatB = await this._schemaB.lookupItem<Format>(formatA.name);\r\n this._schemaComparer.compareFormats(formatA, formatB);\r\n }\r\n\r\n /**\r\n * Called for each [[Unit]] instance found during schema traversal.\r\n * @param unit a Unit object.\r\n */\r\n public async visitUnit(unitA: Unit): Promise<void> {\r\n const unitB = await this._schemaB.lookupItem<Unit>(unitA.name);\r\n this._schemaComparer.compareUnits(unitA, unitB);\r\n }\r\n\r\n /**\r\n * Called for each [[InvertedUnit]] instance found during schema traversal.\r\n * @param invertedUnit an InvertedUnit object.\r\n */\r\n public async visitInvertedUnit(invertedUnitA: InvertedUnit): Promise<void> {\r\n const invertedUnitB = await this._schemaB.lookupItem<InvertedUnit>(invertedUnitA.name);\r\n this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);\r\n }\r\n\r\n /**\r\n * Called for each [[UnitSystem]] instance found during schema traversal.\r\n * @param unitSystem a UnitSystem object.\r\n */\r\n public async visitUnitSystem(_unitSystemA: UnitSystem): Promise<void> {\r\n // No comparison to make specifically on unitSystem\r\n }\r\n\r\n /**\r\n * Called for each [[Phenomenon]] instance found during schema traversal.\r\n * @param phenomena a Phenomenon object.\r\n */\r\n public async visitPhenomenon(phenomenonA: Phenomenon): Promise<void> {\r\n const phenomenonB = await this._schemaB.lookupItem<Phenomenon>(phenomenonA.name);\r\n this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);\r\n }\r\n\r\n /**\r\n * Called for each [[Constant]] instance found during schema traversal.\r\n * @param constant a Constant object.\r\n */\r\n public async visitConstant(constantA: Constant): Promise<void> {\r\n const constantB = await this._schemaB.lookupItem<Constant>(constantA.name);\r\n this._schemaComparer.compareConstants(constantA, constantB);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaCompareVisitor.js","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.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 Comparison\n */\n\nimport { AnyClass, AnyProperty, Constant, CustomAttributeClass, CustomAttributeContainerProps,\n ECClass, EntityClass, Enumeration, Format, InvertedUnit, ISchemaPartVisitor, KindOfQuantity, Mixin,\n Phenomenon, Property, PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem,\n StructClass, Unit, UnitSystem,\n} from \"@itwin/ecschema-metadata\";\nimport { ISchemaComparer } from \"./SchemaComparer\";\n\n/**\n * An ISchemaPartVisitor interface implementation that is used to compare to Schemas.\n * @internal\n */\nexport class SchemaCompareVisitor implements ISchemaPartVisitor {\n private _schemaB: Schema;\n private _schemaComparer: ISchemaComparer;\n\n /**\n * Initializes a new SchemaCompareVisitor instance.\n * @param schemaComparer The [[SchemaComparer]] to use to compare each item of the schema.\n * @param schemaToCompare The second or 'B' schema to compare against the schema being traversed (Schema A).\n */\n constructor(schemaComparer: ISchemaComparer, schemaToCompare: Schema) {\n this._schemaComparer = schemaComparer;\n this._schemaB = schemaToCompare;\n }\n\n /**\n * Called before schema traversal.\n * @param schema a Schema object.\n */\n public async visitFullSchema(schemaA: Schema) {\n this._schemaComparer.compareSchemaProps(schemaA, this._schemaB);\n }\n\n /**\n * Called for each [[SchemaItem]] instance found during schema traversal.\n * @param schemaItem a SchemaItem object.\n */\n public async visitSchemaItem(schemaItemA: SchemaItem) {\n const schemaItemB = await this._schemaB.lookupItem(schemaItemA.name);\n this._schemaComparer.compareSchemaItems(schemaItemA, schemaItemB);\n }\n\n /**\n * Called for each [[AnyClass]] instance found during schema traversal.\n * @param ecClass an ECClass object.\n */\n public async visitClass(classA: AnyClass): Promise<void> {\n const classB = await this._schemaB.lookupItem<AnyClass>(classA.name);\n this._schemaComparer.compareClasses(classA, classB);\n }\n\n /**\n * Called for each [[AnyProperty]] instance of an ECClass.\n * @param property an AnyProperty object.\n */\n public async visitProperty(propertyA: AnyProperty): Promise<void> {\n let propertyB: AnyProperty | undefined;\n\n const classB = await this._schemaB.lookupItem<ECClass>(propertyA.class.name);\n if (classB)\n propertyB = await classB.getProperty(propertyA.name) as AnyProperty;\n\n this._schemaComparer.compareProperties(propertyA, propertyB);\n }\n\n /**\n * Called for each [[EntityClass]] instance found during schema traversal.\n * @param entityClass an EntityClass object.\n */\n public async visitEntityClass(entityA: EntityClass): Promise<void> {\n const entityB = await this._schemaB.lookupItem<EntityClass>(entityA.name);\n this._schemaComparer.compareEntityClasses(entityA, entityB);\n }\n\n /**\n * Called for each [[StructClass]] instance found during schema traversal.\n * @param structClass a StructClass object.\n */\n public async visitStructClass(_structA: StructClass): Promise<void> {\n // No comparison to make specifically on StructClasses\n }\n\n /**\n * Called for each [[Mixin]] instance found during schema traversal.\n * @param mixin a Mixin object.\n */\n public async visitMixin(mixinA: Mixin): Promise<void> {\n const mixinB = await this._schemaB.lookupItem<Mixin>(mixinA.name);\n this._schemaComparer.compareMixins(mixinA, mixinB);\n }\n\n /**\n * Called for each [[RelationshipClass]] instance found during schema traversal.\n * @param relationshipClass a RelationshipClass object.\n */\n public async visitRelationshipClass(relationshipA: RelationshipClass): Promise<void> {\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(relationshipA.name);\n this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);\n }\n\n /**\n * Called for each [[RelationshipConstraint]] of each RelationshipClass found during schema traversal.\n * @param relationshipConstraint a RelationshipConstraint object.\n */\n public async visitRelationshipConstraint(constraintA: RelationshipConstraint): Promise<void> {\n let constraintB: RelationshipConstraint | undefined;\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(constraintA.relationshipClass.name);\n if (relationshipB)\n constraintB = constraintA.isSource ? relationshipB.source : relationshipB.target;\n this._schemaComparer.compareRelationshipConstraints(constraintA, constraintB);\n }\n\n /**\n * Called for each [[CustomAttributeClass]] instance found during schema traversal.\n * @param customAttributeClass a CustomAttributeClass object.\n */\n public async visitCustomAttributeClass(customAttributeA: CustomAttributeClass): Promise<void> {\n const customAttributeB = await this._schemaB.lookupItem<CustomAttributeClass>(customAttributeA.name);\n this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);\n }\n\n /**\n * Called for each [[CustomAttribute]] container in the schema.\n * @param customAttributeContainer a [[CustomAttributeContainerProps]] object.\n */\n public async visitCustomAttributeContainer(containerA: CustomAttributeContainerProps): Promise<void> {\n const nameParts = containerA.fullName.split(\".\");\n const shortName = nameParts.length === 1 ? nameParts[0] : nameParts[1];\n let containerB: CustomAttributeContainerProps | undefined;\n\n if (Schema.isSchema(containerA)) {\n containerB = this._schemaB;\n } else if (ECClass.isECClass(containerA)) {\n containerB = await this._schemaB.lookupItem(containerA.name);\n } else if (Property.isProperty(containerA)) {\n const parent = await this._schemaB.lookupItem<ECClass>(containerA.class.name);\n containerB = parent ? await parent.getProperty(shortName) : undefined;\n } else if (RelationshipConstraint.isRelationshipConstraint(containerA)) {\n const parent = await this._schemaB.lookupItem<RelationshipClass>(containerA.relationshipClass.name);\n containerB = parent ? await parent.getProperty(shortName) : undefined;\n }\n\n this._schemaComparer.compareCustomAttributeContainers(containerA, containerB);\n }\n\n /**\n * Called for each [[Enumeration]] instance found during schema traversal.\n * @param enumeration an Enumeration object.\n */\n public async visitEnumeration(enumA: Enumeration) {\n const enumB = await this._schemaB.lookupItem<Enumeration>(enumA.name);\n this._schemaComparer.compareEnumerations(enumA, enumB);\n }\n\n /**\n * Called for each [[KindOfQuantity]] instance found during schema traversal.\n * @param koq a KindOfQuantity object.\n */\n public async visitKindOfQuantity(koqA: KindOfQuantity) {\n const koqB = await this._schemaB.lookupItem<KindOfQuantity>(koqA.name);\n this._schemaComparer.compareKindOfQuantities(koqA, koqB);\n }\n\n /**\n * Called for each [[PropertyCategory]] instance found during schema traversal.\n * @param category a PropertyCategory object.\n */\n public async visitPropertyCategory(categoryA: PropertyCategory) {\n const categoryB = await this._schemaB.lookupItem<PropertyCategory>(categoryA.name);\n this._schemaComparer.comparePropertyCategories(categoryA, categoryB);\n }\n\n /**\n * Called for each [[Format]] instance found during schema traversal.\n * @param format a Format object.\n */\n public async visitFormat(formatA: Format): Promise<void> {\n const formatB = await this._schemaB.lookupItem<Format>(formatA.name);\n this._schemaComparer.compareFormats(formatA, formatB);\n }\n\n /**\n * Called for each [[Unit]] instance found during schema traversal.\n * @param unit a Unit object.\n */\n public async visitUnit(unitA: Unit): Promise<void> {\n const unitB = await this._schemaB.lookupItem<Unit>(unitA.name);\n this._schemaComparer.compareUnits(unitA, unitB);\n }\n\n /**\n * Called for each [[InvertedUnit]] instance found during schema traversal.\n * @param invertedUnit an InvertedUnit object.\n */\n public async visitInvertedUnit(invertedUnitA: InvertedUnit): Promise<void> {\n const invertedUnitB = await this._schemaB.lookupItem<InvertedUnit>(invertedUnitA.name);\n this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);\n }\n\n /**\n * Called for each [[UnitSystem]] instance found during schema traversal.\n * @param unitSystem a UnitSystem object.\n */\n public async visitUnitSystem(_unitSystemA: UnitSystem): Promise<void> {\n // No comparison to make specifically on unitSystem\n }\n\n /**\n * Called for each [[Phenomenon]] instance found during schema traversal.\n * @param phenomena a Phenomenon object.\n */\n public async visitPhenomenon(phenomenonA: Phenomenon): Promise<void> {\n const phenomenonB = await this._schemaB.lookupItem<Phenomenon>(phenomenonA.name);\n this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);\n }\n\n /**\n * Called for each [[Constant]] instance found during schema traversal.\n * @param constant a Constant object.\n */\n public async visitConstant(constantA: Constant): Promise<void> {\n const constantB = await this._schemaB.lookupItem<Constant>(constantA.name);\n this._schemaComparer.compareConstants(constantA, constantB);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaComparer.js","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.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 Comparison\r\n */\r\n\r\nimport {\r\n AnyClass, AnyEnumerator, AnyProperty, classModifierToString, Constant, containerTypeToString, CustomAttributeClass,\r\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, Phenomenon,\r\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\r\n SchemaItem, SchemaItemKey, schemaItemTypeToString, strengthDirectionToString, strengthToString, StructProperty, Unit,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { formatTraitsToArray, formatTypeToString, scientificTypeToString, showSignOptionToString } from \"@itwin/core-quantity\";\r\nimport { ISchemaCompareReporter } from \"./SchemaCompareReporter\";\r\nimport { SchemaCompareResultDelegate } from \"./SchemaCompareResultDelegate\";\r\nimport { SchemaCompareVisitor } from \"./SchemaCompareVisitor\";\r\nimport { SchemaWalker } from \"./SchemaWalker\";\r\n\r\n/**\r\n * Enum that identifies if Schema A is being iterated (Forward) or\r\n * Schema B is being iterated (Backward);\r\n * @alpha\r\n */\r\nexport enum SchemaCompareDirection {\r\n Forward = 0,\r\n Backward = 1,\r\n}\r\n/**\r\n * Interface for comparing EC Schemas.\r\n * @alpha\r\n */\r\nexport interface ISchemaComparer {\r\n compareSchemas(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaProps(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): void;\r\n compareClasses(classA: AnyClass, classB: AnyClass | undefined): void;\r\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\r\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass | undefined): void;\r\n compareMixins(mixinA: Mixin, mixinB: Mixin | undefined): void;\r\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass | undefined): void;\r\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint | undefined): void;\r\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass | undefined): void;\r\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps | undefined): void;\r\n compareEnumerations(enumA: Enumeration, enumB: Enumeration | undefined): void;\r\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity | undefined): void;\r\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory | undefined): void;\r\n compareFormats(formatA: Format, formatB: Format | undefined): void;\r\n compareUnits(unitA: Unit, unitB: Unit | undefined): void;\r\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit | undefined): void;\r\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon | undefined): void;\r\n compareConstants(constantA: Constant, constantB: Constant | undefined): void;\r\n}\r\n\r\nfunction labelsMatch(label1?: string, label2?: string) {\r\n label1 = label1 === undefined ? \"\" : label1;\r\n label2 = label2 === undefined ? \"\" : label2;\r\n return label1 === label2;\r\n}\r\n\r\n/**\r\n * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects\r\n * specified.\r\n * @alpha\r\n */\r\nexport class SchemaComparer {\r\n private _compareDirection: SchemaCompareDirection;\r\n private _reporter!: SchemaCompareResultDelegate;\r\n private _reporters: ISchemaCompareReporter[];\r\n\r\n /**\r\n * Initializes a new SchemaComparer instance.\r\n * @param reporters The [[IDiagnosticReporter]] object(s) to use to report the results.\r\n */\r\n constructor(...reporters: ISchemaCompareReporter[]) {\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporters = reporters;\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemas(schemaA: Schema, schemaB: Schema) {\r\n this._reporter = new SchemaCompareResultDelegate(schemaA, schemaB, ...this._reporters);\r\n let visitor = new SchemaCompareVisitor(this, schemaB);\r\n let walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaA);\r\n\r\n this._compareDirection = SchemaCompareDirection.Backward;\r\n\r\n visitor = new SchemaCompareVisitor(this, schemaA);\r\n walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaB);\r\n\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporter.compareComplete();\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences between property values.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemaProps(schemaA: Schema, schemaB: Schema): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const ref of schemaA.references) {\r\n const refB = await schemaB.getReference(ref.fullName);\r\n if (!refB)\r\n promises.push(this._reporter.reportSchemaReferenceMissing(schemaA, ref, this._compareDirection));\r\n else if (!refB.schemaKey.matches(ref.schemaKey))\r\n promises.push(this._reporter.reportSchemaReferenceDelta(schemaA, ref, ref.schemaKey.version.toString(), refB.schemaKey.version.toString(), this._compareDirection));\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaA.schemaKey.toString() !== schemaB.schemaKey.toString())\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"schemaKey\", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));\r\n\r\n if (schemaA.alias !== schemaB.alias)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"alias\", schemaA.alias, schemaB.alias, this._compareDirection));\r\n\r\n if (schemaA.description !== schemaB.description)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"description\", schemaA.description, schemaB.description, this._compareDirection));\r\n\r\n if (schemaA.label !== schemaB.label)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"label\", schemaA.label, schemaB.label, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two SchemaItems to identify differences between property values.\r\n * @param schemaItemA The first SchemaItem.\r\n * @param schemaItemB The second SchemaItem.\r\n */\r\n public async compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n if (!schemaItemB) {\r\n promises.push(this._reporter.reportSchemaItemMissing(schemaItemA, this._compareDirection));\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, undefined, this._compareDirection));\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, undefined, this._compareDirection));\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", schemaItemTypeToString(schemaItemA.schemaItemType), undefined, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaItemA.description !== schemaItemB.description)\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(schemaItemA.label, schemaItemB.label))\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\r\n\r\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\r\n const aType = schemaItemTypeToString(schemaItemA.schemaItemType);\r\n const bType = schemaItemTypeToString(schemaItemB.schemaItemType);\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECClasses to identify differences between property values.\r\n * @param classA The first ECClass.\r\n * @param classB The second ECClass.\r\n */\r\n public async compareClasses(classA: AnyClass, classB: AnyClass | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && classB)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const modifierB = classB ? classB.modifier : undefined;\r\n if (classA.modifier !== modifierB) {\r\n const aMod = classModifierToString(classA.modifier);\r\n const bMod = modifierB !== undefined ? classModifierToString(modifierB) : undefined;\r\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\r\n }\r\n\r\n const baseClassA = classA.baseClass;\r\n const baseClassB = classB ? classB.baseClass : undefined;\r\n if (baseClassA || baseClassB) {\r\n\r\n const fullNameA = baseClassA ? baseClassA.fullName : undefined;\r\n const fullNameB = baseClassB ? baseClassB.fullName : undefined;\r\n\r\n if (fullNameA !== fullNameB) {\r\n const areSameByName = this.areItemsSameByName(baseClassA, baseClassB, classA.schema.name, classB?.schema.name);\r\n if (!areSameByName) {\r\n const baseA = await baseClassA as AnyClass;\r\n const baseB = baseClassB ? await baseClassB as AnyClass : undefined;\r\n promises.push(this._reporter.reportBaseClassDelta(classA, baseA, baseB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECProperties to identify differences between property values.\r\n * @param propertyA The first ECProperty.\r\n * @param propertyB The second ECProperty.\r\n */\r\n public async compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (!propertyB) {\r\n promises.push(this._reporter.reportPropertyMissing(propertyA, this._compareDirection));\r\n if (undefined !== propertyA.label)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, undefined, this._compareDirection));\r\n if (undefined !== propertyA.description)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, undefined, this._compareDirection));\r\n\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, undefined, this._compareDirection));\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, undefined, this._compareDirection));\r\n\r\n const catKeyA = propertyA.category ? (await propertyA.category).key : undefined;\r\n const catKeyAText = catKeyA ? catKeyA.fullName : undefined;\r\n if (undefined !== catKeyAText)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyAText, undefined, this._compareDirection));\r\n\r\n const koqKeyA = propertyA.kindOfQuantity ? (await propertyA.kindOfQuantity).key : undefined;\r\n const koqKeyAText = koqKeyA ? koqKeyA.fullName : undefined;\r\n if (undefined !== koqKeyAText)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyAText, undefined, this._compareDirection));\r\n\r\n await this.comparePropertyType(propertyA, undefined);\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (!labelsMatch(propertyA.label, propertyB.label))\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\r\n\r\n if (propertyA.description !== propertyB.description)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, propertyB.description, this._compareDirection));\r\n\r\n if (propertyA.isReadOnly !== propertyB.isReadOnly)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));\r\n\r\n if (propertyA.priority !== propertyB.priority)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, propertyB.priority, this._compareDirection));\r\n\r\n if (propertyA.category || propertyB.category) {\r\n const catKeyA = propertyA.category ? (await propertyA.category).key : undefined;\r\n const catKeyB = propertyB.category ? (await propertyB.category).key : undefined;\r\n const catKeyAText = catKeyA ? catKeyA.fullName : undefined;\r\n const catKeyBText = catKeyB ? catKeyB.fullName : undefined;\r\n if (catKeyAText !== catKeyBText) {\r\n const areSameByName = this.areItemsSameByName(propertyA.category, propertyB.category, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyAText, catKeyBText, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\r\n const koqKeyA = propertyA.kindOfQuantity ? (await propertyA.kindOfQuantity).key : undefined;\r\n const koqKeyB = propertyB.kindOfQuantity ? (await propertyB.kindOfQuantity).key : undefined;\r\n const koqKeyAText = koqKeyA ? koqKeyA.fullName : undefined;\r\n const koqKeyBText = koqKeyB ? koqKeyB.fullName : undefined;\r\n if (koqKeyAText !== koqKeyBText) {\r\n const areSameByName = this.areItemsSameByName(propertyA.kindOfQuantity, propertyB.kindOfQuantity, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyAText, koqKeyBText, this._compareDirection));\r\n }\r\n }\r\n\r\n promises.push(this.comparePropertyType(propertyA, propertyB));\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two EntityClass objects to identify differences between property values.\r\n * @param entityA\r\n * @param entityB\r\n */\r\n public async compareEntityClasses(entityA: EntityClass, entityB: EntityClass | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const mixinA of entityA.mixins) {\r\n if (!entityB || -1 === entityB.mixins.findIndex((mixinB) => this.areItemsSameByName(mixinA, mixinB, entityA.schema.name, entityB.schema.name)))\r\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\r\n }\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Mixin objects to identify differences between property values.\r\n * @param mixinA\r\n * @param mixinB\r\n */\r\n public async compareMixins(mixinA: Mixin, mixinB: Mixin | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && mixinB)\r\n return;\r\n\r\n if (mixinA.appliesTo) {\r\n const appliesToA = mixinA.appliesTo.fullName;\r\n const appliesToB = mixinB ? mixinB.appliesTo ? mixinB.appliesTo.fullName : undefined : undefined;\r\n if (appliesToA !== appliesToB) {\r\n const areSameByName = this.areItemsSameByName(mixinA.appliesTo, mixinB?.appliesTo, mixinA.schema.name, mixinB?.schema.name);\r\n if (!areSameByName)\r\n await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Compares two RelationshipClass objects to identify differences between property values.\r\n * @param relationshipA\r\n * @param relationshipB\r\n */\r\n public async compareRelationshipClasses(relationshipA: RelationshipClass, relationshipB: RelationshipClass | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && relationshipB)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const strengthB = relationshipB ? relationshipB.strength : undefined;\r\n if (relationshipA.strength !== strengthB) {\r\n const strengthAString = strengthToString(relationshipA.strength);\r\n const strengthBString = strengthB !== undefined ? strengthToString(strengthB) : undefined;\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\r\n }\r\n\r\n const directionB = relationshipB ? relationshipB.strengthDirection : undefined;\r\n if (relationshipA.strengthDirection !== directionB) {\r\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\r\n const directionBString = directionB !== undefined ? strengthDirectionToString(directionB) : undefined;\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strengthDirection\", directionAString, directionBString, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two RelationshipConstraint objects to identify differences between property values.\r\n * @param relationshipConstraintA\r\n * @param relationshipConstraintB\r\n */\r\n public async compareRelationshipConstraints(constraintA: RelationshipConstraint, constraintB: RelationshipConstraint | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (constraintA.constraintClasses) {\r\n for (const classA of constraintA.constraintClasses) {\r\n if (!constraintB || !constraintB.constraintClasses ||\r\n -1 === constraintB.constraintClasses.findIndex((classB) =>\r\n this.areItemsSameByName(classA, classB, constraintA.schema.name, constraintB.schema.name)))\r\n promises.push(this._reporter.reportRelationshipConstraintClassMissing(constraintA, await classA, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward && constraintB) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n const constraintBMultiplicity = constraintB ? constraintB.multiplicity : undefined;\r\n if (constraintA.multiplicity || constraintBMultiplicity) {\r\n const multiplicityA = constraintA.multiplicity ? constraintA.multiplicity.toString() : undefined;\r\n const multiplicityB = constraintBMultiplicity ? constraintBMultiplicity.toString() : undefined;\r\n if (multiplicityA !== multiplicityB)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\r\n }\r\n\r\n const constraintBRoleLabel = constraintB ? constraintB.roleLabel : undefined;\r\n if (constraintA.roleLabel !== constraintBRoleLabel)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintBRoleLabel, this._compareDirection));\r\n\r\n const constraintBPolymorphic = constraintB ? constraintB.polymorphic : undefined;\r\n if (constraintA.polymorphic !== constraintBPolymorphic)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintBPolymorphic, this._compareDirection));\r\n\r\n const constraintBAbstractConstraint = constraintB ? constraintB.abstractConstraint : undefined;\r\n if (constraintA.abstractConstraint || constraintBAbstractConstraint) {\r\n const abstractA = constraintA.abstractConstraint ? constraintA.abstractConstraint.fullName : undefined;\r\n const abstractB = constraintBAbstractConstraint ? constraintBAbstractConstraint.fullName : undefined;\r\n if (abstractA !== abstractB) {\r\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintBAbstractConstraint, constraintA.schema.name, constraintB?.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeClass objects to identify differences between property values.\r\n * @param customAttributeClassA\r\n * @param customAttributeClassB\r\n */\r\n public async compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && customAttributeClassB)\r\n return;\r\n\r\n const containerTypeB = customAttributeClassB ? customAttributeClassB.containerType : undefined;\r\n if (customAttributeClassA.containerType !== containerTypeB) {\r\n const typeA = containerTypeToString(customAttributeClassA.containerType);\r\n const typeB = containerTypeB !== undefined ? containerTypeToString(containerTypeB) : undefined;\r\n await this._reporter.reportCustomAttributeClassDelta(customAttributeClassA, \"appliesTo\", typeA, typeB, this._compareDirection);\r\n }\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeContainerProps objects to identify differences between property values.\r\n * @param containerA\r\n * @param containerB\r\n */\r\n public async compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (containerA.customAttributes) {\r\n for (const ca of containerA.customAttributes) {\r\n const caClassName = ca[0];\r\n if (!containerB || !containerB.customAttributes || !this.containerHasClass(caClassName, containerA, containerB))\r\n promises.push(this._reporter.reportCustomAttributeInstanceClassMissing(containerA, ca[1], this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Enumeration objects to identify differences between property values.\r\n * @param enumA\r\n * @param enumB\r\n */\r\n public async compareEnumerations(enumA: Enumeration, enumB: Enumeration | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const enumeratorA of enumA.enumerators) {\r\n const enumeratorB = enumB ? enumB.enumerators.find((e) => e.name === enumeratorA.name) : undefined;\r\n if (!enumeratorB) {\r\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\r\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\r\n } else if (this._compareDirection === SchemaCompareDirection.Forward) {\r\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward && enumB) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n const typeB = enumB ? enumB.type : undefined;\r\n if (enumA.type !== typeB) {\r\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\r\n const typeBString = typeB !== undefined ? primitiveTypeToString(typeB) : undefined;\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n const isStrictB = enumB ? enumB.isStrict : undefined;\r\n if (enumA.isStrict !== isStrictB)\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, isStrictB, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two KindOfQuantity objects to identify differences between property values.\r\n * @param koqA\r\n * @param koqB\r\n */\r\n public async compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (koqA.presentationFormats) {\r\n for (const unit of koqA.presentationFormats) {\r\n if (!koqB || !koqB.presentationFormats || -1 === koqB.presentationFormats.findIndex((u) => u.fullName === unit.fullName))\r\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unit, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward && koqB) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n const errorB = koqB ? koqB.relativeError : undefined;\r\n if (koqA.relativeError !== errorB) {\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, errorB, this._compareDirection));\r\n }\r\n\r\n const unitB = koqB ? koqB.persistenceUnit : undefined;\r\n if (koqA.persistenceUnit || unitB) {\r\n const unitNameA = koqA.persistenceUnit ? koqA.persistenceUnit.fullName : undefined;\r\n const unitNameB = unitB ? unitB.fullName : undefined;\r\n if (unitNameA !== unitNameB) {\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"persistenceUnit\", unitNameA, unitNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two PropertyCategory objects to identify differences between property values.\r\n * @param categoryA\r\n * @param categoryB\r\n */\r\n public async comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && categoryB)\r\n return;\r\n\r\n const priorityB = categoryB ? categoryB.priority : undefined;\r\n if (categoryA.priority !== priorityB)\r\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, priorityB, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Format objects to identify differences between property values.\r\n * @param formatA\r\n * @param formatB\r\n */\r\n public async compareFormats(formatA: Format, formatB: Format | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n promises.push(this.compareFormatUnits(formatA, formatB));\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward && formatB) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n const roundFactorB = formatB ? formatB.roundFactor : undefined;\r\n if (formatA.roundFactor !== roundFactorB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, roundFactorB, this._compareDirection));\r\n\r\n const typeB = formatB ? formatB.type : undefined;\r\n if (formatA.type !== typeB) {\r\n const typeAString = formatTypeToString(formatA.type);\r\n const typeBString = typeB !== undefined ? formatTypeToString(typeB) : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n const precisionB = formatB ? formatB.precision : undefined;\r\n if (formatA.precision !== precisionB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, precisionB, this._compareDirection));\r\n\r\n const minWidthB = formatB ? formatB.minWidth : undefined;\r\n if (formatA.minWidth !== minWidthB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, minWidthB, this._compareDirection));\r\n\r\n const scientificTypeB = formatB ? formatB.scientificType : undefined;\r\n if (formatA.scientificType !== scientificTypeB) {\r\n const typeAString = formatA.scientificType !== undefined ? scientificTypeToString(formatA.scientificType) : undefined;\r\n const typeBString = scientificTypeB !== undefined ? scientificTypeToString(scientificTypeB) : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n const showSignOptionB = formatB ? formatB.showSignOption : undefined;\r\n if (formatA.showSignOption !== showSignOptionB) {\r\n const optionA = showSignOptionToString(formatA.showSignOption);\r\n const optionB = showSignOptionB !== undefined ? showSignOptionToString(showSignOptionB) : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\r\n }\r\n\r\n const decimalSeparatorB = formatB ? formatB.decimalSeparator : undefined;\r\n if (formatA.decimalSeparator !== decimalSeparatorB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, decimalSeparatorB, this._compareDirection));\r\n\r\n const thousandSeparatorB = formatB ? formatB.thousandSeparator : undefined;\r\n if (formatA.thousandSeparator !== thousandSeparatorB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, thousandSeparatorB, this._compareDirection));\r\n\r\n const uomSeparatorB = formatB ? formatB.uomSeparator : undefined;\r\n if (formatA.uomSeparator !== uomSeparatorB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, uomSeparatorB, this._compareDirection));\r\n\r\n const stationSeparatorB = formatB ? formatB.stationSeparator : undefined;\r\n if (formatA.stationSeparator !== stationSeparatorB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, stationSeparatorB, this._compareDirection));\r\n\r\n const stationOffsetSizeB = formatB ? formatB.stationOffsetSize : undefined;\r\n if (formatA.stationOffsetSize !== stationOffsetSizeB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, stationOffsetSizeB, this._compareDirection));\r\n\r\n const formatTraitsB = formatB ? formatB.formatTraits : undefined;\r\n if (formatA.formatTraits !== formatTraitsB) {\r\n const traitsA = formatTraitsToArray(formatA.formatTraits);\r\n const traitsB = formatTraitsB !== undefined ? formatTraitsToArray(formatTraitsB) : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB ? traitsB.toString() : undefined, this._compareDirection));\r\n }\r\n\r\n const spacerB = formatB ? formatB.spacer : undefined;\r\n if (formatA.spacer !== spacerB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, spacerB, this._compareDirection));\r\n\r\n const includeZeroB = formatB ? formatB.includeZero : undefined;\r\n if (formatA.includeZero !== includeZeroB)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, includeZeroB, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Unit objects to identify differences between property values.\r\n * @param unitA\r\n * @param unitB\r\n */\r\n public async compareUnits(unitA: Unit, unitB: Unit | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && unitB)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const phenomenonB = unitB ? unitB.phenomenon : undefined;\r\n if (unitA.phenomenon || phenomenonB) {\r\n const fullNameA = unitA.phenomenon ? unitA.phenomenon.fullName : undefined;\r\n const fullNameB = phenomenonB ? phenomenonB.fullName : undefined;\r\n if (fullNameA !== fullNameB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n\r\n const unitSystemB = unitB ? unitB.unitSystem : undefined;\r\n if (unitA.unitSystem || unitSystemB) {\r\n const fullNameA = unitA.unitSystem ? unitA.unitSystem.fullName : undefined;\r\n const fullNameB = unitSystemB ? unitSystemB.fullName : undefined;\r\n if (fullNameA !== fullNameB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n\r\n const definitionB = unitB ? unitB.definition : undefined;\r\n if (unitA.definition !== definitionB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, definitionB, this._compareDirection));\r\n\r\n const numeratorB = unitB ? unitB.numerator : undefined;\r\n if (unitA.numerator !== numeratorB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, numeratorB, this._compareDirection));\r\n\r\n const denominatorB = unitB ? unitB.denominator : undefined;\r\n if (unitA.denominator !== denominatorB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, denominatorB, this._compareDirection));\r\n\r\n const offsetB = unitB ? unitB.offset : undefined;\r\n if (unitA.offset !== offsetB)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, offsetB, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two InvertedUnit objects to identify differences between property values.\r\n * @param invertedUnitA\r\n * @param invertedUnitB\r\n */\r\n public async compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && invertedUnitB)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const invertsUnitB = invertedUnitB ? invertedUnitB.invertsUnit : undefined;\r\n if (invertedUnitA.invertsUnit || invertsUnitB) {\r\n const fullNameA = invertedUnitA.invertsUnit ? invertedUnitA.invertsUnit.fullName : undefined;\r\n const fullNameB = invertsUnitB ? invertsUnitB.fullName : undefined;\r\n if (fullNameA !== fullNameB)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n\r\n const unitSystemB = invertedUnitB ? invertedUnitB.unitSystem : undefined;\r\n if (invertedUnitA.unitSystem || unitSystemB) {\r\n const fullNameA = invertedUnitA.unitSystem ? invertedUnitA.unitSystem.fullName : undefined;\r\n const fullNameB = unitSystemB ? unitSystemB.fullName : undefined;\r\n if (fullNameA !== fullNameB)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Phenomenon objects to identify differences between property values.\r\n * @param phenomenonA\r\n * @param phenomenonB\r\n */\r\n public async comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && phenomenonB)\r\n return;\r\n\r\n const definitionB = phenomenonB ? phenomenonB.definition : undefined;\r\n if (phenomenonA.definition !== definitionB)\r\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, definitionB, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Constant objects to identify differences between property values.\r\n * @param constantA\r\n * @param constantB\r\n */\r\n public async compareConstants(constantA: Constant, constantB: Constant | undefined): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward && constantB)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const phenomenonB = constantB ? constantB.phenomenon : undefined;\r\n if (constantA.phenomenon || phenomenonB) {\r\n const fullNameA = constantA.phenomenon ? constantA.phenomenon.fullName : undefined;\r\n const fullNameB = phenomenonB ? phenomenonB.fullName : undefined;\r\n if (fullNameA !== fullNameB)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n\r\n const definitionB = constantB ? constantB.definition : undefined;\r\n if (constantA.definition !== definitionB)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, definitionB, this._compareDirection));\r\n\r\n const numeratorB = constantB ? constantB.numerator : undefined;\r\n if (constantA.numerator !== numeratorB)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, numeratorB, this._compareDirection));\r\n\r\n const denominatorB = constantB ? constantB.denominator : undefined;\r\n if (constantA.denominator !== denominatorB)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, denominatorB, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async comparePropertyType(propertyA: AnyProperty, propertyB?: AnyProperty): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\r\n const propertyTypeB = propertyB !== undefined ? propertyTypeToString(propertyB.propertyType) : undefined;\r\n if (propertyTypeA !== propertyTypeB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\r\n }\r\n\r\n if (propertyA.isArray()) {\r\n const minOccursB = propertyB && propertyB.isArray() ? propertyB.minOccurs : undefined;\r\n if (propertyA.minOccurs !== minOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minOccurs\", propertyA.minOccurs, minOccursB, this._compareDirection));\r\n }\r\n\r\n const maxOccursB = propertyB && propertyB.isArray() ? propertyB.maxOccurs : undefined;\r\n if (propertyA.maxOccurs !== maxOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxOccurs\", propertyA.maxOccurs, maxOccursB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isEnumeration()) {\r\n const enumerationB = propertyB && propertyB.isEnumeration() ? propertyB.enumeration : undefined;\r\n if (propertyA.enumeration || enumerationB) {\r\n const enumA = propertyA.enumeration ? propertyA.enumeration.fullName : undefined;\r\n const enumB = enumerationB ? enumerationB.fullName : undefined;\r\n if (enumA !== enumB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.enumeration, enumerationB, propertyA.schema.name, propertyB?.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isNavigation()) {\r\n const strengthDirectionB = propertyB && propertyB.isNavigation() ? propertyB.direction : undefined;\r\n if (propertyA.direction !== strengthDirectionB) {\r\n const dirA = strengthDirectionToString(propertyA.direction);\r\n const dirB = strengthDirectionB !== undefined ? strengthDirectionToString(strengthDirectionB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"direction\", dirA, dirB, this._compareDirection));\r\n }\r\n\r\n if (propertyA.relationshipClass) { // eslint-disable-line @typescript-eslint/no-misused-promises\r\n const relationshipClassB = propertyB && propertyB.isNavigation() ? propertyB.relationshipClass : undefined;\r\n const relA = propertyA.relationshipClass.fullName;\r\n const relB = relationshipClassB ? relationshipClassB.fullName : undefined;\r\n if (relA !== relB){\r\n const areSameByName = this.areItemsSameByName(propertyA.relationshipClass, relationshipClassB, propertyA.schema.name, propertyB?.schema.name);\r\n if(!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isPrimitive()) {\r\n const primitiveTypeB = propertyB && propertyB.isPrimitive() ? propertyB.primitiveType : undefined;\r\n if (propertyA.primitiveType !== primitiveTypeB) {\r\n const aType = primitiveTypeToString(propertyA.primitiveType);\r\n const bType = primitiveTypeB !== undefined ? primitiveTypeToString(primitiveTypeB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"primitiveType\", aType, bType, this._compareDirection));\r\n }\r\n\r\n const minLengthB = propertyB && propertyB.isPrimitive() ? propertyB.minLength : undefined;\r\n if (propertyA.minLength !== minLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minLength\", propertyA.minLength, minLengthB, this._compareDirection));\r\n }\r\n\r\n // valid for primitive and enumeration properties\r\n const maxLengthB = propertyB && propertyB.isPrimitive() ? propertyB.maxLength : undefined;\r\n if (propertyA.maxLength !== maxLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxLength\", propertyA.maxLength, maxLengthB, this._compareDirection));\r\n }\r\n\r\n const minValueB = propertyB && propertyB.isPrimitive() ? propertyB.minValue : undefined;\r\n if (propertyA.minValue !== minValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minValue\", propertyA.minValue, minValueB, this._compareDirection));\r\n }\r\n\r\n const maxValueB = propertyB && propertyB.isPrimitive() ? propertyB.maxValue : undefined;\r\n if (propertyA.maxValue !== maxValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxValue\", propertyA.maxValue, maxValueB, this._compareDirection));\r\n }\r\n\r\n const extendedTypeNameB = propertyB && propertyB.isPrimitive() ? propertyB.extendedTypeName : undefined;\r\n if (propertyA.extendedTypeName !== extendedTypeNameB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"extendedTypeName\", propertyA.extendedTypeName, extendedTypeNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isStruct()) {\r\n const structA = (propertyA as StructProperty).structClass;\r\n const structB = propertyB && propertyB.isStruct() ? (propertyB as StructProperty).structClass : undefined;\r\n if (structA || structB) {\r\n const structNameA = structA ? structA.fullName : undefined;\r\n const structNameB = structB ? structB.fullName : undefined;\r\n if (structNameA !== structNameB) {\r\n const areSameByName = this.areItemsSameByName(structA.key, structB?.key, propertyA.schema.name, propertyB?.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareEnumerators(enumeratorA: AnyEnumerator, enumeratorB: AnyEnumerator | undefined, enumA: Enumeration, enumB: Enumeration | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (!enumB || !enumeratorB) {\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, undefined, this._compareDirection));\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, undefined, this._compareDirection));\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, undefined, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n if (enumeratorA.description !== enumeratorB.description)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(enumeratorA.label, enumeratorB.label))\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, enumeratorB.label, this._compareDirection));\r\n\r\n // No need to compare values if the type is different (which will be reported separately)\r\n if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, enumeratorB.value, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareFormatUnits(formatA: Format, formatB: Format | undefined): Promise<void> {\r\n if (!formatA.units)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const unitA of formatA.units) {\r\n const unitB = formatB && formatB.units ? formatB.units.find((u) => u[0].fullName === unitA[0].fullName) : undefined;\r\n if (!unitB) {\r\n promises.push(this._reporter.reportFormatUnitMissing(formatA, unitA[0], this._compareDirection));\r\n continue;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward && formatB)\r\n continue;\r\n\r\n if (unitA[1] !== unitB[1]) {\r\n const labelA = unitA[1];\r\n const labelB = unitB[1];\r\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitB[0], labelA, labelB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two item keys.\r\n * @param itemKeyA item key A to compare to.\r\n * @param itemKeyB item key B to compare to.\r\n * @param topLevelSchemaNameA top level schema name in which the item A exists.\r\n * @param topLevelSchemaNameB top level schema name in which the item B exists.\r\n * @returns true if both names are the same and they come from their respective top level schema.\r\n */\r\n private areItemsSameByName(\r\n itemKeyA: Readonly<SchemaItemKey> | undefined,\r\n itemKeyB: Readonly<SchemaItemKey> | undefined,\r\n topLevelSchemaNameA: string,\r\n topLevelSchemaNameB: string | undefined ): boolean {\r\n\r\n const nameA = itemKeyA ? itemKeyA.name : undefined;\r\n const nameB = itemKeyB ? itemKeyB.name : undefined;\r\n\r\n const schemaNameA = itemKeyA ? itemKeyA.schemaName : undefined;\r\n const schemaNameB = itemKeyB ? itemKeyB.schemaName : undefined;\r\n\r\n return (nameA === nameB && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (nameA === nameB && schemaNameA === schemaNameB);\r\n }\r\n\r\n /**\r\n * Looks for same classA in containerB using key.\r\n * @param classNameA name of the class to look for in containerB.\r\n * @param containerA container which classNameA belongs to.\r\n * @param containerB container in which to look for classNameA.\r\n * @returns true if a same classA is in containerB, otherwise false.\r\n */\r\n private containerHasClass(classNameA: string, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\r\n if (containerB && containerB.customAttributes) {\r\n for (const caB of containerB.customAttributes) {\r\n const classNameB = caB[0];\r\n const classItemKeyA = containerA.schema.getSchemaItemKey(classNameA);\r\n const classItemKeyB = containerB.schema.getSchemaItemKey(classNameB);\r\n return this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name);\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaComparer.js","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.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 Comparison\n */\n\nimport {\n AnyClass, AnyEnumerator, AnyProperty, classModifierToString, Constant, containerTypeToString, CustomAttributeClass,\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, Phenomenon,\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\n SchemaItem, SchemaItemKey, schemaItemTypeToString, strengthDirectionToString, strengthToString, StructProperty, Unit,\n} from \"@itwin/ecschema-metadata\";\nimport { formatTraitsToArray, formatTypeToString, scientificTypeToString, showSignOptionToString } from \"@itwin/core-quantity\";\nimport { ISchemaCompareReporter } from \"./SchemaCompareReporter\";\nimport { SchemaCompareResultDelegate } from \"./SchemaCompareResultDelegate\";\nimport { SchemaCompareVisitor } from \"./SchemaCompareVisitor\";\nimport { SchemaWalker } from \"./SchemaWalker\";\n\n/**\n * Enum that identifies if Schema A is being iterated (Forward) or\n * Schema B is being iterated (Backward);\n * @alpha\n */\nexport enum SchemaCompareDirection {\n Forward = 0,\n Backward = 1,\n}\n/**\n * Interface for comparing EC Schemas.\n * @alpha\n */\nexport interface ISchemaComparer {\n compareSchemas(schemaA: Schema, schemaB: Schema): void;\n compareSchemaProps(schemaA: Schema, schemaB: Schema): void;\n compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): void;\n compareClasses(classA: AnyClass, classB: AnyClass | undefined): void;\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass | undefined): void;\n compareMixins(mixinA: Mixin, mixinB: Mixin | undefined): void;\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass | undefined): void;\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint | undefined): void;\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass | undefined): void;\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps | undefined): void;\n compareEnumerations(enumA: Enumeration, enumB: Enumeration | undefined): void;\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity | undefined): void;\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory | undefined): void;\n compareFormats(formatA: Format, formatB: Format | undefined): void;\n compareUnits(unitA: Unit, unitB: Unit | undefined): void;\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit | undefined): void;\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon | undefined): void;\n compareConstants(constantA: Constant, constantB: Constant | undefined): void;\n}\n\nfunction labelsMatch(label1?: string, label2?: string) {\n label1 = label1 === undefined ? \"\" : label1;\n label2 = label2 === undefined ? \"\" : label2;\n return label1 === label2;\n}\n\n/**\n * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects\n * specified.\n * @alpha\n */\nexport class SchemaComparer {\n private _compareDirection: SchemaCompareDirection;\n private _reporter!: SchemaCompareResultDelegate;\n private _reporters: ISchemaCompareReporter[];\n\n /**\n * Initializes a new SchemaComparer instance.\n * @param reporters The [[IDiagnosticReporter]] object(s) to use to report the results.\n */\n constructor(...reporters: ISchemaCompareReporter[]) {\n this._compareDirection = SchemaCompareDirection.Forward;\n this._reporters = reporters;\n }\n\n /**\n * Compares two schemas to identify differences.\n * @param schemaA The first Schema.\n * @param schemaB The second Schema.\n */\n public async compareSchemas(schemaA: Schema, schemaB: Schema) {\n this._reporter = new SchemaCompareResultDelegate(schemaA, schemaB, ...this._reporters);\n let visitor = new SchemaCompareVisitor(this, schemaB);\n let walker = new SchemaWalker(visitor);\n await walker.traverseSchema(schemaA);\n\n this._compareDirection = SchemaCompareDirection.Backward;\n\n visitor = new SchemaCompareVisitor(this, schemaA);\n walker = new SchemaWalker(visitor);\n await walker.traverseSchema(schemaB);\n\n this._compareDirection = SchemaCompareDirection.Forward;\n this._reporter.compareComplete();\n }\n\n /**\n * Compares two schemas to identify differences between property values.\n * @param schemaA The first Schema.\n * @param schemaB The second Schema.\n */\n public async compareSchemaProps(schemaA: Schema, schemaB: Schema): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const ref of schemaA.references) {\n const refB = await schemaB.getReference(ref.fullName);\n if (!refB)\n promises.push(this._reporter.reportSchemaReferenceMissing(schemaA, ref, this._compareDirection));\n else if (!refB.schemaKey.matches(ref.schemaKey))\n promises.push(this._reporter.reportSchemaReferenceDelta(schemaA, ref, ref.schemaKey.version.toString(), refB.schemaKey.version.toString(), this._compareDirection));\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaA.schemaKey.toString() !== schemaB.schemaKey.toString())\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"schemaKey\", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));\n\n if (schemaA.alias !== schemaB.alias)\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"alias\", schemaA.alias, schemaB.alias, this._compareDirection));\n\n if (schemaA.description !== schemaB.description)\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"description\", schemaA.description, schemaB.description, this._compareDirection));\n\n if (schemaA.label !== schemaB.label)\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"label\", schemaA.label, schemaB.label, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two SchemaItems to identify differences between property values.\n * @param schemaItemA The first SchemaItem.\n * @param schemaItemB The second SchemaItem.\n */\n public async compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n if (!schemaItemB) {\n promises.push(this._reporter.reportSchemaItemMissing(schemaItemA, this._compareDirection));\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, undefined, this._compareDirection));\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, undefined, this._compareDirection));\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", schemaItemTypeToString(schemaItemA.schemaItemType), undefined, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaItemA.description !== schemaItemB.description)\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\n\n if (!labelsMatch(schemaItemA.label, schemaItemB.label))\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\n\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\n const aType = schemaItemTypeToString(schemaItemA.schemaItemType);\n const bType = schemaItemTypeToString(schemaItemB.schemaItemType);\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two ECClasses to identify differences between property values.\n * @param classA The first ECClass.\n * @param classB The second ECClass.\n */\n public async compareClasses(classA: AnyClass, classB: AnyClass | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && classB)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n const modifierB = classB ? classB.modifier : undefined;\n if (classA.modifier !== modifierB) {\n const aMod = classModifierToString(classA.modifier);\n const bMod = modifierB !== undefined ? classModifierToString(modifierB) : undefined;\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\n }\n\n const baseClassA = classA.baseClass;\n const baseClassB = classB ? classB.baseClass : undefined;\n if (baseClassA || baseClassB) {\n\n const fullNameA = baseClassA ? baseClassA.fullName : undefined;\n const fullNameB = baseClassB ? baseClassB.fullName : undefined;\n\n if (fullNameA !== fullNameB) {\n const areSameByName = this.areItemsSameByName(baseClassA, baseClassB, classA.schema.name, classB?.schema.name);\n if (!areSameByName) {\n const baseA = await baseClassA as AnyClass;\n const baseB = baseClassB ? await baseClassB as AnyClass : undefined;\n promises.push(this._reporter.reportBaseClassDelta(classA, baseA, baseB, this._compareDirection));\n }\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two ECProperties to identify differences between property values.\n * @param propertyA The first ECProperty.\n * @param propertyB The second ECProperty.\n */\n public async compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (!propertyB) {\n promises.push(this._reporter.reportPropertyMissing(propertyA, this._compareDirection));\n if (undefined !== propertyA.label)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, undefined, this._compareDirection));\n if (undefined !== propertyA.description)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, undefined, this._compareDirection));\n\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, undefined, this._compareDirection));\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, undefined, this._compareDirection));\n\n const catKeyA = propertyA.category ? (await propertyA.category).key : undefined;\n const catKeyAText = catKeyA ? catKeyA.fullName : undefined;\n if (undefined !== catKeyAText)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyAText, undefined, this._compareDirection));\n\n const koqKeyA = propertyA.kindOfQuantity ? (await propertyA.kindOfQuantity).key : undefined;\n const koqKeyAText = koqKeyA ? koqKeyA.fullName : undefined;\n if (undefined !== koqKeyAText)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyAText, undefined, this._compareDirection));\n\n await this.comparePropertyType(propertyA, undefined);\n await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (!labelsMatch(propertyA.label, propertyB.label))\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\n\n if (propertyA.description !== propertyB.description)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, propertyB.description, this._compareDirection));\n\n if (propertyA.isReadOnly !== propertyB.isReadOnly)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));\n\n if (propertyA.priority !== propertyB.priority)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, propertyB.priority, this._compareDirection));\n\n if (propertyA.category || propertyB.category) {\n const catKeyA = propertyA.category ? (await propertyA.category).key : undefined;\n const catKeyB = propertyB.category ? (await propertyB.category).key : undefined;\n const catKeyAText = catKeyA ? catKeyA.fullName : undefined;\n const catKeyBText = catKeyB ? catKeyB.fullName : undefined;\n if (catKeyAText !== catKeyBText) {\n const areSameByName = this.areItemsSameByName(propertyA.category, propertyB.category, propertyA.schema.name, propertyB.schema.name);\n if (!areSameByName)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyAText, catKeyBText, this._compareDirection));\n }\n }\n\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\n const koqKeyA = propertyA.kindOfQuantity ? (await propertyA.kindOfQuantity).key : undefined;\n const koqKeyB = propertyB.kindOfQuantity ? (await propertyB.kindOfQuantity).key : undefined;\n const koqKeyAText = koqKeyA ? koqKeyA.fullName : undefined;\n const koqKeyBText = koqKeyB ? koqKeyB.fullName : undefined;\n if (koqKeyAText !== koqKeyBText) {\n const areSameByName = this.areItemsSameByName(propertyA.kindOfQuantity, propertyB.kindOfQuantity, propertyA.schema.name, propertyB.schema.name);\n if (!areSameByName)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyAText, koqKeyBText, this._compareDirection));\n }\n }\n\n promises.push(this.comparePropertyType(propertyA, propertyB));\n await Promise.all(promises);\n }\n\n /**\n * Compares two EntityClass objects to identify differences between property values.\n * @param entityA\n * @param entityB\n */\n public async compareEntityClasses(entityA: EntityClass, entityB: EntityClass | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const mixinA of entityA.mixins) {\n if (!entityB || -1 === entityB.mixins.findIndex((mixinB) => this.areItemsSameByName(mixinA, mixinB, entityA.schema.name, entityB.schema.name)))\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\n }\n await Promise.all(promises);\n }\n\n /**\n * Compares two Mixin objects to identify differences between property values.\n * @param mixinA\n * @param mixinB\n */\n public async compareMixins(mixinA: Mixin, mixinB: Mixin | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && mixinB)\n return;\n\n if (mixinA.appliesTo) {\n const appliesToA = mixinA.appliesTo.fullName;\n const appliesToB = mixinB ? mixinB.appliesTo ? mixinB.appliesTo.fullName : undefined : undefined;\n if (appliesToA !== appliesToB) {\n const areSameByName = this.areItemsSameByName(mixinA.appliesTo, mixinB?.appliesTo, mixinA.schema.name, mixinB?.schema.name);\n if (!areSameByName)\n await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\n }\n }\n }\n\n /**\n * Compares two RelationshipClass objects to identify differences between property values.\n * @param relationshipA\n * @param relationshipB\n */\n public async compareRelationshipClasses(relationshipA: RelationshipClass, relationshipB: RelationshipClass | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && relationshipB)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n const strengthB = relationshipB ? relationshipB.strength : undefined;\n if (relationshipA.strength !== strengthB) {\n const strengthAString = strengthToString(relationshipA.strength);\n const strengthBString = strengthB !== undefined ? strengthToString(strengthB) : undefined;\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\n }\n\n const directionB = relationshipB ? relationshipB.strengthDirection : undefined;\n if (relationshipA.strengthDirection !== directionB) {\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\n const directionBString = directionB !== undefined ? strengthDirectionToString(directionB) : undefined;\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strengthDirection\", directionAString, directionBString, this._compareDirection));\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two RelationshipConstraint objects to identify differences between property values.\n * @param relationshipConstraintA\n * @param relationshipConstraintB\n */\n public async compareRelationshipConstraints(constraintA: RelationshipConstraint, constraintB: RelationshipConstraint | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (constraintA.constraintClasses) {\n for (const classA of constraintA.constraintClasses) {\n if (!constraintB || !constraintB.constraintClasses ||\n -1 === constraintB.constraintClasses.findIndex((classB) =>\n this.areItemsSameByName(classA, classB, constraintA.schema.name, constraintB.schema.name)))\n promises.push(this._reporter.reportRelationshipConstraintClassMissing(constraintA, await classA, this._compareDirection));\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward && constraintB) {\n await Promise.all(promises);\n return;\n }\n\n const constraintBMultiplicity = constraintB ? constraintB.multiplicity : undefined;\n if (constraintA.multiplicity || constraintBMultiplicity) {\n const multiplicityA = constraintA.multiplicity ? constraintA.multiplicity.toString() : undefined;\n const multiplicityB = constraintBMultiplicity ? constraintBMultiplicity.toString() : undefined;\n if (multiplicityA !== multiplicityB)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\n }\n\n const constraintBRoleLabel = constraintB ? constraintB.roleLabel : undefined;\n if (constraintA.roleLabel !== constraintBRoleLabel)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintBRoleLabel, this._compareDirection));\n\n const constraintBPolymorphic = constraintB ? constraintB.polymorphic : undefined;\n if (constraintA.polymorphic !== constraintBPolymorphic)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintBPolymorphic, this._compareDirection));\n\n const constraintBAbstractConstraint = constraintB ? constraintB.abstractConstraint : undefined;\n if (constraintA.abstractConstraint || constraintBAbstractConstraint) {\n const abstractA = constraintA.abstractConstraint ? constraintA.abstractConstraint.fullName : undefined;\n const abstractB = constraintBAbstractConstraint ? constraintBAbstractConstraint.fullName : undefined;\n if (abstractA !== abstractB) {\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintBAbstractConstraint, constraintA.schema.name, constraintB?.schema.name);\n if (!areSameByName) {\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\n }\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two CustomAttributeClass objects to identify differences between property values.\n * @param customAttributeClassA\n * @param customAttributeClassB\n */\n public async compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && customAttributeClassB)\n return;\n\n const containerTypeB = customAttributeClassB ? customAttributeClassB.containerType : undefined;\n if (customAttributeClassA.containerType !== containerTypeB) {\n const typeA = containerTypeToString(customAttributeClassA.containerType);\n const typeB = containerTypeB !== undefined ? containerTypeToString(containerTypeB) : undefined;\n await this._reporter.reportCustomAttributeClassDelta(customAttributeClassA, \"appliesTo\", typeA, typeB, this._compareDirection);\n }\n }\n\n /**\n * Compares two CustomAttributeContainerProps objects to identify differences between property values.\n * @param containerA\n * @param containerB\n */\n public async compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (containerA.customAttributes) {\n for (const ca of containerA.customAttributes) {\n const caClassName = ca[0];\n if (!containerB || !containerB.customAttributes || !this.containerHasClass(caClassName, containerA, containerB))\n promises.push(this._reporter.reportCustomAttributeInstanceClassMissing(containerA, ca[1], this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two Enumeration objects to identify differences between property values.\n * @param enumA\n * @param enumB\n */\n public async compareEnumerations(enumA: Enumeration, enumB: Enumeration | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n for (const enumeratorA of enumA.enumerators) {\n const enumeratorB = enumB ? enumB.enumerators.find((e) => e.name === enumeratorA.name) : undefined;\n if (!enumeratorB) {\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\n } else if (this._compareDirection === SchemaCompareDirection.Forward) {\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward && enumB) {\n await Promise.all(promises);\n return;\n }\n\n const typeB = enumB ? enumB.type : undefined;\n if (enumA.type !== typeB) {\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\n const typeBString = typeB !== undefined ? primitiveTypeToString(typeB) : undefined;\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n const isStrictB = enumB ? enumB.isStrict : undefined;\n if (enumA.isStrict !== isStrictB)\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, isStrictB, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two KindOfQuantity objects to identify differences between property values.\n * @param koqA\n * @param koqB\n */\n public async compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (koqA.presentationFormats) {\n for (const unit of koqA.presentationFormats) {\n if (!koqB || !koqB.presentationFormats || -1 === koqB.presentationFormats.findIndex((u) => u.fullName === unit.fullName))\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unit, this._compareDirection));\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward && koqB) {\n await Promise.all(promises);\n return;\n }\n\n const errorB = koqB ? koqB.relativeError : undefined;\n if (koqA.relativeError !== errorB) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, errorB, this._compareDirection));\n }\n\n const unitB = koqB ? koqB.persistenceUnit : undefined;\n if (koqA.persistenceUnit || unitB) {\n const unitNameA = koqA.persistenceUnit ? koqA.persistenceUnit.fullName : undefined;\n const unitNameB = unitB ? unitB.fullName : undefined;\n if (unitNameA !== unitNameB) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"persistenceUnit\", unitNameA, unitNameB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two PropertyCategory objects to identify differences between property values.\n * @param categoryA\n * @param categoryB\n */\n public async comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && categoryB)\n return;\n\n const priorityB = categoryB ? categoryB.priority : undefined;\n if (categoryA.priority !== priorityB)\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, priorityB, this._compareDirection);\n }\n\n /**\n * Compares two Format objects to identify differences between property values.\n * @param formatA\n * @param formatB\n */\n public async compareFormats(formatA: Format, formatB: Format | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n promises.push(this.compareFormatUnits(formatA, formatB));\n\n if (this._compareDirection === SchemaCompareDirection.Backward && formatB) {\n await Promise.all(promises);\n return;\n }\n\n const roundFactorB = formatB ? formatB.roundFactor : undefined;\n if (formatA.roundFactor !== roundFactorB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, roundFactorB, this._compareDirection));\n\n const typeB = formatB ? formatB.type : undefined;\n if (formatA.type !== typeB) {\n const typeAString = formatTypeToString(formatA.type);\n const typeBString = typeB !== undefined ? formatTypeToString(typeB) : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n const precisionB = formatB ? formatB.precision : undefined;\n if (formatA.precision !== precisionB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, precisionB, this._compareDirection));\n\n const minWidthB = formatB ? formatB.minWidth : undefined;\n if (formatA.minWidth !== minWidthB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, minWidthB, this._compareDirection));\n\n const scientificTypeB = formatB ? formatB.scientificType : undefined;\n if (formatA.scientificType !== scientificTypeB) {\n const typeAString = formatA.scientificType !== undefined ? scientificTypeToString(formatA.scientificType) : undefined;\n const typeBString = scientificTypeB !== undefined ? scientificTypeToString(scientificTypeB) : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\n }\n\n const showSignOptionB = formatB ? formatB.showSignOption : undefined;\n if (formatA.showSignOption !== showSignOptionB) {\n const optionA = showSignOptionToString(formatA.showSignOption);\n const optionB = showSignOptionB !== undefined ? showSignOptionToString(showSignOptionB) : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\n }\n\n const decimalSeparatorB = formatB ? formatB.decimalSeparator : undefined;\n if (formatA.decimalSeparator !== decimalSeparatorB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, decimalSeparatorB, this._compareDirection));\n\n const thousandSeparatorB = formatB ? formatB.thousandSeparator : undefined;\n if (formatA.thousandSeparator !== thousandSeparatorB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, thousandSeparatorB, this._compareDirection));\n\n const uomSeparatorB = formatB ? formatB.uomSeparator : undefined;\n if (formatA.uomSeparator !== uomSeparatorB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, uomSeparatorB, this._compareDirection));\n\n const stationSeparatorB = formatB ? formatB.stationSeparator : undefined;\n if (formatA.stationSeparator !== stationSeparatorB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, stationSeparatorB, this._compareDirection));\n\n const stationOffsetSizeB = formatB ? formatB.stationOffsetSize : undefined;\n if (formatA.stationOffsetSize !== stationOffsetSizeB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, stationOffsetSizeB, this._compareDirection));\n\n const formatTraitsB = formatB ? formatB.formatTraits : undefined;\n if (formatA.formatTraits !== formatTraitsB) {\n const traitsA = formatTraitsToArray(formatA.formatTraits);\n const traitsB = formatTraitsB !== undefined ? formatTraitsToArray(formatTraitsB) : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB ? traitsB.toString() : undefined, this._compareDirection));\n }\n\n const spacerB = formatB ? formatB.spacer : undefined;\n if (formatA.spacer !== spacerB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, spacerB, this._compareDirection));\n\n const includeZeroB = formatB ? formatB.includeZero : undefined;\n if (formatA.includeZero !== includeZeroB)\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, includeZeroB, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two Unit objects to identify differences between property values.\n * @param unitA\n * @param unitB\n */\n public async compareUnits(unitA: Unit, unitB: Unit | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && unitB)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n const phenomenonB = unitB ? unitB.phenomenon : undefined;\n if (unitA.phenomenon || phenomenonB) {\n const fullNameA = unitA.phenomenon ? unitA.phenomenon.fullName : undefined;\n const fullNameB = phenomenonB ? phenomenonB.fullName : undefined;\n if (fullNameA !== fullNameB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n\n const unitSystemB = unitB ? unitB.unitSystem : undefined;\n if (unitA.unitSystem || unitSystemB) {\n const fullNameA = unitA.unitSystem ? unitA.unitSystem.fullName : undefined;\n const fullNameB = unitSystemB ? unitSystemB.fullName : undefined;\n if (fullNameA !== fullNameB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n\n const definitionB = unitB ? unitB.definition : undefined;\n if (unitA.definition !== definitionB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, definitionB, this._compareDirection));\n\n const numeratorB = unitB ? unitB.numerator : undefined;\n if (unitA.numerator !== numeratorB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, numeratorB, this._compareDirection));\n\n const denominatorB = unitB ? unitB.denominator : undefined;\n if (unitA.denominator !== denominatorB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, denominatorB, this._compareDirection));\n\n const offsetB = unitB ? unitB.offset : undefined;\n if (unitA.offset !== offsetB)\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, offsetB, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two InvertedUnit objects to identify differences between property values.\n * @param invertedUnitA\n * @param invertedUnitB\n */\n public async compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && invertedUnitB)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n const invertsUnitB = invertedUnitB ? invertedUnitB.invertsUnit : undefined;\n if (invertedUnitA.invertsUnit || invertsUnitB) {\n const fullNameA = invertedUnitA.invertsUnit ? invertedUnitA.invertsUnit.fullName : undefined;\n const fullNameB = invertsUnitB ? invertsUnitB.fullName : undefined;\n if (fullNameA !== fullNameB)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\n }\n\n const unitSystemB = invertedUnitB ? invertedUnitB.unitSystem : undefined;\n if (invertedUnitA.unitSystem || unitSystemB) {\n const fullNameA = invertedUnitA.unitSystem ? invertedUnitA.unitSystem.fullName : undefined;\n const fullNameB = unitSystemB ? unitSystemB.fullName : undefined;\n if (fullNameA !== fullNameB)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two Phenomenon objects to identify differences between property values.\n * @param phenomenonA\n * @param phenomenonB\n */\n public async comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && phenomenonB)\n return;\n\n const definitionB = phenomenonB ? phenomenonB.definition : undefined;\n if (phenomenonA.definition !== definitionB)\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, definitionB, this._compareDirection);\n }\n\n /**\n * Compares two Constant objects to identify differences between property values.\n * @param constantA\n * @param constantB\n */\n public async compareConstants(constantA: Constant, constantB: Constant | undefined): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward && constantB)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n const phenomenonB = constantB ? constantB.phenomenon : undefined;\n if (constantA.phenomenon || phenomenonB) {\n const fullNameA = constantA.phenomenon ? constantA.phenomenon.fullName : undefined;\n const fullNameB = phenomenonB ? phenomenonB.fullName : undefined;\n if (fullNameA !== fullNameB)\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n\n const definitionB = constantB ? constantB.definition : undefined;\n if (constantA.definition !== definitionB)\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, definitionB, this._compareDirection));\n\n const numeratorB = constantB ? constantB.numerator : undefined;\n if (constantA.numerator !== numeratorB)\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, numeratorB, this._compareDirection));\n\n const denominatorB = constantB ? constantB.denominator : undefined;\n if (constantA.denominator !== denominatorB)\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, denominatorB, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n private async comparePropertyType(propertyA: AnyProperty, propertyB?: AnyProperty): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\n const propertyTypeB = propertyB !== undefined ? propertyTypeToString(propertyB.propertyType) : undefined;\n if (propertyTypeA !== propertyTypeB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\n }\n\n if (propertyA.isArray()) {\n const minOccursB = propertyB && propertyB.isArray() ? propertyB.minOccurs : undefined;\n if (propertyA.minOccurs !== minOccursB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minOccurs\", propertyA.minOccurs, minOccursB, this._compareDirection));\n }\n\n const maxOccursB = propertyB && propertyB.isArray() ? propertyB.maxOccurs : undefined;\n if (propertyA.maxOccurs !== maxOccursB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxOccurs\", propertyA.maxOccurs, maxOccursB, this._compareDirection));\n }\n }\n\n if (propertyA.isEnumeration()) {\n const enumerationB = propertyB && propertyB.isEnumeration() ? propertyB.enumeration : undefined;\n if (propertyA.enumeration || enumerationB) {\n const enumA = propertyA.enumeration ? propertyA.enumeration.fullName : undefined;\n const enumB = enumerationB ? enumerationB.fullName : undefined;\n if (enumA !== enumB) {\n const areSameByName = this.areItemsSameByName(propertyA.enumeration, enumerationB, propertyA.schema.name, propertyB?.schema.name);\n if (!areSameByName) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\n }\n }\n }\n }\n\n if (propertyA.isNavigation()) {\n const strengthDirectionB = propertyB && propertyB.isNavigation() ? propertyB.direction : undefined;\n if (propertyA.direction !== strengthDirectionB) {\n const dirA = strengthDirectionToString(propertyA.direction);\n const dirB = strengthDirectionB !== undefined ? strengthDirectionToString(strengthDirectionB) : undefined;\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"direction\", dirA, dirB, this._compareDirection));\n }\n\n if (propertyA.relationshipClass) { // eslint-disable-line @typescript-eslint/no-misused-promises\n const relationshipClassB = propertyB && propertyB.isNavigation() ? propertyB.relationshipClass : undefined;\n const relA = propertyA.relationshipClass.fullName;\n const relB = relationshipClassB ? relationshipClassB.fullName : undefined;\n if (relA !== relB){\n const areSameByName = this.areItemsSameByName(propertyA.relationshipClass, relationshipClassB, propertyA.schema.name, propertyB?.schema.name);\n if(!areSameByName)\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\n }\n }\n }\n\n if (propertyA.isPrimitive()) {\n const primitiveTypeB = propertyB && propertyB.isPrimitive() ? propertyB.primitiveType : undefined;\n if (propertyA.primitiveType !== primitiveTypeB) {\n const aType = primitiveTypeToString(propertyA.primitiveType);\n const bType = primitiveTypeB !== undefined ? primitiveTypeToString(primitiveTypeB) : undefined;\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"primitiveType\", aType, bType, this._compareDirection));\n }\n\n const minLengthB = propertyB && propertyB.isPrimitive() ? propertyB.minLength : undefined;\n if (propertyA.minLength !== minLengthB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minLength\", propertyA.minLength, minLengthB, this._compareDirection));\n }\n\n // valid for primitive and enumeration properties\n const maxLengthB = propertyB && propertyB.isPrimitive() ? propertyB.maxLength : undefined;\n if (propertyA.maxLength !== maxLengthB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxLength\", propertyA.maxLength, maxLengthB, this._compareDirection));\n }\n\n const minValueB = propertyB && propertyB.isPrimitive() ? propertyB.minValue : undefined;\n if (propertyA.minValue !== minValueB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minValue\", propertyA.minValue, minValueB, this._compareDirection));\n }\n\n const maxValueB = propertyB && propertyB.isPrimitive() ? propertyB.maxValue : undefined;\n if (propertyA.maxValue !== maxValueB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxValue\", propertyA.maxValue, maxValueB, this._compareDirection));\n }\n\n const extendedTypeNameB = propertyB && propertyB.isPrimitive() ? propertyB.extendedTypeName : undefined;\n if (propertyA.extendedTypeName !== extendedTypeNameB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"extendedTypeName\", propertyA.extendedTypeName, extendedTypeNameB, this._compareDirection));\n }\n }\n\n if (propertyA.isStruct()) {\n const structA = (propertyA as StructProperty).structClass;\n const structB = propertyB && propertyB.isStruct() ? (propertyB as StructProperty).structClass : undefined;\n if (structA || structB) {\n const structNameA = structA ? structA.fullName : undefined;\n const structNameB = structB ? structB.fullName : undefined;\n if (structNameA !== structNameB) {\n const areSameByName = this.areItemsSameByName(structA.key, structB?.key, propertyA.schema.name, propertyB?.schema.name);\n if (!areSameByName) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\n }\n }\n }\n }\n\n await Promise.all(promises);\n }\n\n private async compareEnumerators(enumeratorA: AnyEnumerator, enumeratorB: AnyEnumerator | undefined, enumA: Enumeration, enumB: Enumeration | undefined): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (!enumB || !enumeratorB) {\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, undefined, this._compareDirection));\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, undefined, this._compareDirection));\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, undefined, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n if (enumeratorA.description !== enumeratorB.description)\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\n\n if (!labelsMatch(enumeratorA.label, enumeratorB.label))\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, enumeratorB.label, this._compareDirection));\n\n // No need to compare values if the type is different (which will be reported separately)\n if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, enumeratorB.value, this._compareDirection));\n\n await Promise.all(promises);\n }\n\n private async compareFormatUnits(formatA: Format, formatB: Format | undefined): Promise<void> {\n if (!formatA.units)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n for (const unitA of formatA.units) {\n const unitB = formatB && formatB.units ? formatB.units.find((u) => u[0].fullName === unitA[0].fullName) : undefined;\n if (!unitB) {\n promises.push(this._reporter.reportFormatUnitMissing(formatA, unitA[0], this._compareDirection));\n continue;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward && formatB)\n continue;\n\n if (unitA[1] !== unitB[1]) {\n const labelA = unitA[1];\n const labelB = unitB[1];\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitB[0], labelA, labelB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n /**\n * Compares two item keys.\n * @param itemKeyA item key A to compare to.\n * @param itemKeyB item key B to compare to.\n * @param topLevelSchemaNameA top level schema name in which the item A exists.\n * @param topLevelSchemaNameB top level schema name in which the item B exists.\n * @returns true if both names are the same and they come from their respective top level schema.\n */\n private areItemsSameByName(\n itemKeyA: Readonly<SchemaItemKey> | undefined,\n itemKeyB: Readonly<SchemaItemKey> | undefined,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n const nameA = itemKeyA ? itemKeyA.name : undefined;\n const nameB = itemKeyB ? itemKeyB.name : undefined;\n\n const schemaNameA = itemKeyA ? itemKeyA.schemaName : undefined;\n const schemaNameB = itemKeyB ? itemKeyB.schemaName : undefined;\n\n return (nameA === nameB && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (nameA === nameB && schemaNameA === schemaNameB);\n }\n\n /**\n * Looks for same classA in containerB using key.\n * @param classNameA name of the class to look for in containerB.\n * @param containerA container which classNameA belongs to.\n * @param containerB container in which to look for classNameA.\n * @returns true if a same classA is in containerB, otherwise false.\n */\n private containerHasClass(classNameA: string, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\n if (containerB && containerB.customAttributes) {\n for (const caB of containerB.customAttributes) {\n const classNameB = caB[0];\n const classItemKeyA = containerA.schema.getSchemaItemKey(classNameA);\n const classItemKeyB = containerB.schema.getSchemaItemKey(classNameB);\n return this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name);\n }\n }\n return false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidater.js","sourceRoot":"","sources":["../../../src/Validation/SchemaValidater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,uEAAoE;AACpE,6DAA0F;AAE1F,iDAA8C;AAC9C,uCAAsC;AAEtC,MAAM,kBAAmB,SAAQ,kDAA6B;IAA9D;;QACU,iBAAY,GAAoB,EAAE,CAAC;IAe7C,CAAC;IAbC,iDAAiD;IACjD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACO,cAAc,CAAC,UAAyB;QAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAa,eAAe;IAC1B;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,gBAA2B;QAC5E,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACpD,MAAM,SAAS,GAA0B,CAAC,kBAAkB,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,CAAC,mBAAS,CAAC,CAAC;QAC7B,IAAI,gBAAgB;YAClB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,kBAAkB,CAAC,WAAW,CAAC;IACxC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,QAAoB,EAAE,SAAgC;QACpF,MAAM,OAAO,GAAG,IAAI,iDAAuB,EAAE,CAAC;QAC9C,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA3BD,0CA2BC","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 Validation\r\n */\r\n\r\nimport { ISchemaPartVisitor, Schema } from \"@itwin/ecschema-metadata\";\r\nimport { IRuleSet } from \"./Rules\";\r\nimport { SchemaValidationVisitor } from \"./SchemaValidationVisitor\";\r\nimport { IDiagnosticReporter, SuppressionDiagnosticReporter } from \"./DiagnosticReporter\";\r\nimport { AnyDiagnostic } from \"./Diagnostic\";\r\nimport { SchemaWalker } from \"./SchemaWalker\";\r\nimport { ECRuleSet } from \"./ECRules\";\r\n\r\nclass CollectionReporter extends SuppressionDiagnosticReporter {\r\n private _diagnostics: AnyDiagnostic[] = [];\r\n\r\n /** Gets the collection of diagnostic message. */\r\n public get diagnostics(): AnyDiagnostic[] {\r\n return this._diagnostics;\r\n }\r\n\r\n /**\r\n * Handles the given [[IDiagnostic]] based on the implementation requirements for a\r\n * given reporter.\r\n * @param diagnostic The diagnostic to report.\r\n */\r\n protected reportInternal(diagnostic: AnyDiagnostic) {\r\n this._diagnostics.push(diagnostic);\r\n }\r\n}\r\n\r\n/**\r\n * Applies EC Rules, see [[ECRuleSet]], to a given Schema and reports any violations.\r\n * @beta\r\n */\r\nexport class SchemaValidater {\r\n /**\r\n * Validates a schema against the [[ECRuleSet]].\r\n * @param schema The schema to validate.\r\n * @param validaterRuleSet Optional IRuleSet to be applied to the schema in addition to the default EC rules.\r\n */\r\n public static async validateSchema(schema: Schema, validaterRuleSet?: IRuleSet): Promise<AnyDiagnostic[]> {\r\n const collectionReporter = new CollectionReporter();\r\n const reporters: IDiagnosticReporter[] = [collectionReporter];\r\n\r\n const ruleSets = [ECRuleSet];\r\n if (validaterRuleSet)\r\n ruleSets.push(validaterRuleSet);\r\n\r\n const visitor = this.createNewVisitor(ruleSets, reporters);\r\n const reader = new SchemaWalker(visitor);\r\n await reader.traverseSchema(schema);\r\n\r\n return collectionReporter.diagnostics;\r\n }\r\n\r\n private static createNewVisitor(ruleSets: IRuleSet[], reporters: IDiagnosticReporter[]): ISchemaPartVisitor {\r\n const visitor = new SchemaValidationVisitor();\r\n ruleSets.forEach((set) => visitor.registerRuleSet(set));\r\n reporters.forEach((reporter) => visitor.registerReporter(reporter));\r\n return visitor;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaValidater.js","sourceRoot":"","sources":["../../../src/Validation/SchemaValidater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAIH,uEAAoE;AACpE,6DAA0F;AAE1F,iDAA8C;AAC9C,uCAAsC;AAEtC,MAAM,kBAAmB,SAAQ,kDAA6B;IAA9D;;QACU,iBAAY,GAAoB,EAAE,CAAC;IAe7C,CAAC;IAbC,iDAAiD;IACjD,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACO,cAAc,CAAC,UAAyB;QAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;CACF;AAED;;;GAGG;AACH,MAAa,eAAe;IAC1B;;;;OAIG;IACI,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,gBAA2B;QAC5E,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACpD,MAAM,SAAS,GAA0B,CAAC,kBAAkB,CAAC,CAAC;QAE9D,MAAM,QAAQ,GAAG,CAAC,mBAAS,CAAC,CAAC;QAC7B,IAAI,gBAAgB;YAClB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG,IAAI,2BAAY,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,kBAAkB,CAAC,WAAW,CAAC;IACxC,CAAC;IAEO,MAAM,CAAC,gBAAgB,CAAC,QAAoB,EAAE,SAAgC;QACpF,MAAM,OAAO,GAAG,IAAI,iDAAuB,EAAE,CAAC;QAC9C,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;QACxD,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpE,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA3BD,0CA2BC","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 Validation\n */\n\nimport { ISchemaPartVisitor, Schema } from \"@itwin/ecschema-metadata\";\nimport { IRuleSet } from \"./Rules\";\nimport { SchemaValidationVisitor } from \"./SchemaValidationVisitor\";\nimport { IDiagnosticReporter, SuppressionDiagnosticReporter } from \"./DiagnosticReporter\";\nimport { AnyDiagnostic } from \"./Diagnostic\";\nimport { SchemaWalker } from \"./SchemaWalker\";\nimport { ECRuleSet } from \"./ECRules\";\n\nclass CollectionReporter extends SuppressionDiagnosticReporter {\n private _diagnostics: AnyDiagnostic[] = [];\n\n /** Gets the collection of diagnostic message. */\n public get diagnostics(): AnyDiagnostic[] {\n return this._diagnostics;\n }\n\n /**\n * Handles the given [[IDiagnostic]] based on the implementation requirements for a\n * given reporter.\n * @param diagnostic The diagnostic to report.\n */\n protected reportInternal(diagnostic: AnyDiagnostic) {\n this._diagnostics.push(diagnostic);\n }\n}\n\n/**\n * Applies EC Rules, see [[ECRuleSet]], to a given Schema and reports any violations.\n * @beta\n */\nexport class SchemaValidater {\n /**\n * Validates a schema against the [[ECRuleSet]].\n * @param schema The schema to validate.\n * @param validaterRuleSet Optional IRuleSet to be applied to the schema in addition to the default EC rules.\n */\n public static async validateSchema(schema: Schema, validaterRuleSet?: IRuleSet): Promise<AnyDiagnostic[]> {\n const collectionReporter = new CollectionReporter();\n const reporters: IDiagnosticReporter[] = [collectionReporter];\n\n const ruleSets = [ECRuleSet];\n if (validaterRuleSet)\n ruleSets.push(validaterRuleSet);\n\n const visitor = this.createNewVisitor(ruleSets, reporters);\n const reader = new SchemaWalker(visitor);\n await reader.traverseSchema(schema);\n\n return collectionReporter.diagnostics;\n }\n\n private static createNewVisitor(ruleSets: IRuleSet[], reporters: IDiagnosticReporter[]): ISchemaPartVisitor {\n const visitor = new SchemaValidationVisitor();\n ruleSets.forEach((set) => visitor.registerRuleSet(set));\n reporters.forEach((reporter) => visitor.registerReporter(reporter));\n return visitor;\n }\n}\n"]}