@itwin/ecschema-editing 3.0.0-extension.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,100 @@
1
1
  # Change Log - @itwin/ecschema-editing
2
2
 
3
- This log was last generated on Tue, 21 Sep 2021 21:06:40 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 24 Feb 2022 15:26:55 GMT and should not be manually modified.
4
+
5
+ ## 3.0.1
6
+ Thu, 24 Feb 2022 15:26:55 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 3.0.0
11
+ Mon, 24 Jan 2022 14:00:52 GMT
12
+
13
+ ### Updates
14
+
15
+ - Added delete class from schema and delete property from class as well as corresponding tests
16
+ - Upgrade target to ES2019
17
+ - Added the setVersion method to the Editor class to allow the update of a Schema version.
18
+ - rename to @itwin/ecschema-editing
19
+ - Replace usage of I18N with generic Localization interface.
20
+ - Removing deprecated editing and validation types from ecschema-metadata.
21
+ - remove ClientRequestContext.current
22
+ - Added CreateElement, CreateElementUniqueAspect and CreateElementMultiAspect to schema editing API.
23
+
24
+ ## 2.19.28
25
+ Wed, 12 Jan 2022 14:52:38 GMT
26
+
27
+ _Version update only_
28
+
29
+ ## 2.19.27
30
+ Wed, 05 Jan 2022 20:07:20 GMT
31
+
32
+ _Version update only_
33
+
34
+ ## 2.19.26
35
+ Wed, 08 Dec 2021 20:54:52 GMT
36
+
37
+ _Version update only_
38
+
39
+ ## 2.19.25
40
+ Fri, 03 Dec 2021 20:05:49 GMT
41
+
42
+ _Version update only_
43
+
44
+ ## 2.19.24
45
+ Mon, 29 Nov 2021 18:44:31 GMT
46
+
47
+ _Version update only_
48
+
49
+ ## 2.19.23
50
+ Mon, 22 Nov 2021 20:41:39 GMT
51
+
52
+ _Version update only_
53
+
54
+ ## 2.19.22
55
+ Wed, 17 Nov 2021 01:23:26 GMT
56
+
57
+ _Version update only_
58
+
59
+ ## 2.19.21
60
+ Wed, 10 Nov 2021 10:58:24 GMT
61
+
62
+ _Version update only_
63
+
64
+ ## 2.19.20
65
+ Fri, 29 Oct 2021 16:14:22 GMT
66
+
67
+ _Version update only_
68
+
69
+ ## 2.19.19
70
+ Mon, 25 Oct 2021 16:16:25 GMT
71
+
72
+ _Version update only_
73
+
74
+ ## 2.19.18
75
+ Thu, 21 Oct 2021 20:59:44 GMT
76
+
77
+ _Version update only_
78
+
79
+ ## 2.19.17
80
+ Thu, 14 Oct 2021 21:19:43 GMT
81
+
82
+ _Version update only_
83
+
84
+ ## 2.19.16
85
+ Mon, 11 Oct 2021 17:37:46 GMT
86
+
87
+ _Version update only_
88
+
89
+ ## 2.19.15
90
+ Fri, 08 Oct 2021 16:44:23 GMT
91
+
92
+ _Version update only_
93
+
94
+ ## 2.19.14
95
+ Fri, 01 Oct 2021 13:07:03 GMT
96
+
97
+ _Version update only_
4
98
 
5
99
  ## 2.19.13
6
100
  Tue, 21 Sep 2021 21:06:40 GMT
package/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright © 2017-2021 Bentley Systems, Incorporated. All rights reserved.
3
+ Copyright © 2017-2022 Bentley Systems, Incorporated. All rights reserved.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
6
 
@@ -376,7 +376,7 @@ class SchemaComparer {
376
376
  const unitNameA = koqA.persistenceUnit ? koqA.persistenceUnit.fullName : undefined;
377
377
  const unitNameB = unitB ? unitB.fullName : undefined;
378
378
  if (unitNameA !== unitNameB) {
379
- promises.push(this._reporter.reportKoqDelta(koqA, "persistenceUnit", await koqA.persistenceUnit, await unitB, this._compareDirection));
379
+ promises.push(this._reporter.reportKoqDelta(koqA, "persistenceUnit", unitNameA, unitNameB, this._compareDirection));
380
380
  }
381
381
  }
382
382
  await Promise.all(promises);
@@ -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,\r\n containerTypeToString, CustomAttributeClass, CustomAttributeContainerProps, EntityClass, Enumeration, Format, formatTraitsToArray,\r\n formatTypeToString, InvertedUnit, KindOfQuantity, Mixin, Phenomenon, primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass,\r\n RelationshipConstraint, Schema, SchemaItem, schemaItemTypeToString, scientificTypeToString, showSignOptionToString, strengthDirectionToString,\r\n strengthToString, StructProperty, Unit,\r\n} from \"@itwin/ecschema-metadata\";\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 baseClassB = classB ? classB.baseClass : undefined;\r\n if (classA.baseClass || baseClassB) {\r\n const nameA = classA.baseClass ? classA.baseClass.fullName : undefined;\r\n const nameB = baseClassB ? baseClassB.fullName : undefined;\r\n if (nameA !== nameB) {\r\n const baseA = await classA.baseClass 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 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 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 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((m) => m.fullName === mixinA.fullName))\r\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\r\n }\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 await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\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 || -1 === constraintB.constraintClasses.findIndex((c) => c.matchesFullName(classA.fullName)))\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 promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\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 if (!containerB || !containerB.customAttributes || !containerB.customAttributes.has(ca[0]))\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\", await koqA.persistenceUnit, await unitB, 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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\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\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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\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"]}
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,\r\n containerTypeToString, CustomAttributeClass, CustomAttributeContainerProps, EntityClass, Enumeration, Format, formatTraitsToArray,\r\n formatTypeToString, InvertedUnit, KindOfQuantity, Mixin, Phenomenon, primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass,\r\n RelationshipConstraint, Schema, SchemaItem, schemaItemTypeToString, scientificTypeToString, showSignOptionToString, strengthDirectionToString,\r\n strengthToString, StructProperty, Unit,\r\n} from \"@itwin/ecschema-metadata\";\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 baseClassB = classB ? classB.baseClass : undefined;\r\n if (classA.baseClass || baseClassB) {\r\n const nameA = classA.baseClass ? classA.baseClass.fullName : undefined;\r\n const nameB = baseClassB ? baseClassB.fullName : undefined;\r\n if (nameA !== nameB) {\r\n const baseA = await classA.baseClass 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 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 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 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((m) => m.fullName === mixinA.fullName))\r\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\r\n }\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 await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\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 || -1 === constraintB.constraintClasses.findIndex((c) => c.matchesFullName(classA.fullName)))\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 promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\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 if (!containerB || !containerB.customAttributes || !containerB.customAttributes.has(ca[0]))\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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\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\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 promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\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"]}
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-editing",
3
- "version": "3.0.0-extension.0",
3
+ "version": "3.0.1",
4
4
  "description": "ECSchema editing and validation API",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-editing.js",
7
7
  "typings": "lib/cjs/ecschema-editing",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/imodeljs/imodeljs/tree/master/core/ecschema-editing"
10
+ "url": "https://github.com/iTwin/itwinjs-core/tree/master/core/ecschema-editing"
11
11
  },
12
12
  "keywords": [
13
13
  "Bentley",
14
14
  "iModel",
15
- "iModel.js",
15
+ "iTwin",
16
+ "iTwin.js",
16
17
  "EC"
17
18
  ],
18
19
  "author": {
@@ -20,13 +21,12 @@
20
21
  "url": "http://www.bentley.com"
21
22
  },
22
23
  "devDependencies": {
23
- "@itwin/core-bentley": "3.0.0-extension.0",
24
- "@itwin/core-common": "3.0.0-extension.0",
25
- "@itwin/build-tools": "3.0.0-extension.0",
26
- "@itwin/eslint-plugin": "3.0.0-extension.0",
27
- "@itwin/ecschema-metadata": "3.0.0-extension.0",
28
24
  "@bentley/units-schema": "^1.0.5",
29
- "@types/almost-equal": "1.1.0",
25
+ "@itwin/build-tools": "3.0.1",
26
+ "@itwin/core-bentley": "3.0.1",
27
+ "@itwin/core-common": "3.0.1",
28
+ "@itwin/ecschema-metadata": "3.0.1",
29
+ "@itwin/eslint-plugin": "3.0.1",
30
30
  "@types/benchmark": "^2.1.0",
31
31
  "@types/chai": "^4.1.4",
32
32
  "@types/chai-as-promised": "^7",
@@ -37,7 +37,7 @@
37
37
  "benchmark": "^2.1.4",
38
38
  "chai": "^4.1.2",
39
39
  "chai-as-promised": "^7",
40
- "cpx": "^1.5.0",
40
+ "cpx2": "^3.0.0",
41
41
  "eslint": "^7.11.0",
42
42
  "mocha": "^8.3.2",
43
43
  "nyc": "^15.1.0",
@@ -46,11 +46,8 @@
46
46
  "typescript": "~4.4.0"
47
47
  },
48
48
  "peerDependencies": {
49
- "@itwin/core-bentley": "^3.0.0-extension.0",
50
- "@itwin/ecschema-metadata": "^3.0.0-extension.0"
51
- },
52
- "dependencies": {
53
- "almost-equal": "^1.1.0"
49
+ "@itwin/core-bentley": "^3.0.1",
50
+ "@itwin/ecschema-metadata": "^3.0.1"
54
51
  },
55
52
  "nyc": {
56
53
  "extends": "./node_modules/@itwin/build-tools/.nycrc"
@@ -78,5 +75,6 @@
78
75
  "cover": "nyc npm -s test",
79
76
  "start": "npm run -s lint && npm run -s clean && npm run -s build && npm run -s test & npm run -s cover & npm run -s docs",
80
77
  "createLocalization": "node ./scripts/createLocalization.js && cpx \"./public/locales/**/*\" ./lib/public"
81
- }
78
+ },
79
+ "readme": "# @itwin/ecschema-editing\r\n\r\nCopyright © Bentley Systems, Incorporated. All rights reserved. See LICENSE.md for license terms and full copyright notice.\r\n\r\n## Description\r\n\r\nThe __@itwin/ecschema-editing__ package contains classes for editing and validating ECSchemas. This package is a work in progress consider everything in alpha.\r\n\r\n## Documentation\r\n\r\nSee the [iTwin.js](https://www.itwinjs.org) documentation for more information.\r\n"
82
80
  }