@itwin/ecschema-editing 5.1.0-dev.9 → 5.2.0-dev.2

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,73 @@
1
1
  # Change Log - @itwin/ecschema-editing
2
2
 
3
- This log was last generated on Wed, 30 Apr 2025 13:16:15 GMT and should not be manually modified.
3
+ This log was last generated on Wed, 06 Aug 2025 15:37:23 GMT and should not be manually modified.
4
+
5
+ ## 5.0.5
6
+ Wed, 06 Aug 2025 15:34:15 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 5.0.4
11
+ Wed, 16 Jul 2025 14:59:59 GMT
12
+
13
+ _Version update only_
14
+
15
+ ## 5.0.3
16
+ Fri, 11 Jul 2025 00:56:56 GMT
17
+
18
+ _Version update only_
19
+
20
+ ## 5.0.2
21
+ Thu, 26 Jun 2025 22:16:01 GMT
22
+
23
+ _Version update only_
24
+
25
+ ## 5.0.1
26
+ Tue, 17 Jun 2025 18:33:52 GMT
27
+
28
+ _Version update only_
29
+
30
+ ## 5.0.0
31
+ Fri, 13 Jun 2025 20:25:38 GMT
32
+
33
+ ### Updates
34
+
35
+ - Replaced ECClass.baseClass setter with setBaseClass method due to underlying changes in the ecschema-metadata package.
36
+ - Changed Class.getProperty method to include inherited properties by default. This affected numerous call in the editing package.
37
+ - Upgrade compile target to ES2023 and module to ES2022
38
+ - Dropped support for Node 18
39
+ - Added ESM support
40
+ - Updated getSchemaItem methods from MergingSchemaContext to reflect changes made to methods from the base class SchemaContext.
41
+ - Added format merging
42
+ - Allows to re-apply stored conflict resolutions
43
+ - Added ability to merge Unit and InvertedUnit Schema Items
44
+ - applied changes in ecschema-metadatas SchemaLocater interface
45
+ - Change core peer dependencies to strict version.
46
+
47
+ ## 4.11.6
48
+ Mon, 16 Jun 2025 15:00:15 GMT
49
+
50
+ _Version update only_
51
+
52
+ ## 4.11.5
53
+ Fri, 06 Jun 2025 13:41:18 GMT
54
+
55
+ _Version update only_
56
+
57
+ ## 4.11.4
58
+ Tue, 03 Jun 2025 16:15:19 GMT
59
+
60
+ _Version update only_
61
+
62
+ ## 4.11.3
63
+ Wed, 28 May 2025 13:56:23 GMT
64
+
65
+ _Version update only_
66
+
67
+ ## 4.11.2
68
+ Tue, 20 May 2025 20:14:46 GMT
69
+
70
+ _Version update only_
4
71
 
5
72
  ## 4.11.1
6
73
  Wed, 30 Apr 2025 13:13:21 GMT
@@ -16,6 +16,7 @@ export declare abstract class MutableFormat extends Format {
16
16
  abstract setStationSeparator(separator: string): void;
17
17
  abstract setMinWidth(minWidth: number): void;
18
18
  abstract setStationOffsetSize(stationOffsetSize: number): void;
19
+ abstract setStationBaseFactor(stationBaseFactor: number): void;
19
20
  abstract setScientificType(scientificType: ScientificType): void;
20
21
  abstract setSpacer(spacer: string): void;
21
22
  abstract setIncludeZero(includeZero: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"MutableFormat.d.ts","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhG;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,MAAM;aACvB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;aAC5E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACrC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;aAC3C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;aACzC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;aACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACxC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;aACnC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;aACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;aAC/B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;aAC1C,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;aACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI;aAC3F,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE"}
1
+ {"version":3,"file":"MutableFormat.d.ts","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhG;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,MAAM;aACvB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;aAC5E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACrC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;aAC3C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;aACzC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;aACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACxC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;aACnC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;aACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;aAC/B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;aAC1C,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;aACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI;aAC3F,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"MutableFormat.js","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAA0F;AAG1F;;;GAGG;AACH,MAAsB,aAAc,SAAQ,0BAAM;CAkBjD;AAlBD,sCAkBC","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*--------------------------------------------------------------------------------------------*/\nimport { Format, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"@itwin/ecschema-metadata\";\nimport { FormatTraits, FormatType, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableFormat extends Format {\n public abstract override addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;\n public abstract override setPrecision(precision: number): void;\n public abstract override setFormatType(formatType: FormatType): void;\n public abstract override setRoundFactor(roundFactor: number): void;\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\n public abstract override setDecimalSeparator(separator: string): void;\n public abstract override setThousandSeparator(separator: string): void;\n public abstract override setUomSeparator(separator: string): void;\n public abstract override setStationSeparator(separator: string): void;\n public abstract override setMinWidth(minWidth: number): void;\n public abstract override setStationOffsetSize(stationOffsetSize: number): void;\n public abstract override setScientificType(scientificType: ScientificType): void;\n public abstract override setSpacer(spacer: string): void;\n public abstract override setIncludeZero(includeZero: boolean): void;\n public abstract override setFormatTraits(formatTraits: FormatTraits): void;\n public abstract override setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): void;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n"]}
1
+ {"version":3,"file":"MutableFormat.js","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAA0F;AAG1F;;;GAGG;AACH,MAAsB,aAAc,SAAQ,0BAAM;CAmBjD;AAnBD,sCAmBC","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*--------------------------------------------------------------------------------------------*/\nimport { Format, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"@itwin/ecschema-metadata\";\nimport { FormatTraits, FormatType, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableFormat extends Format {\n public abstract override addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;\n public abstract override setPrecision(precision: number): void;\n public abstract override setFormatType(formatType: FormatType): void;\n public abstract override setRoundFactor(roundFactor: number): void;\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\n public abstract override setDecimalSeparator(separator: string): void;\n public abstract override setThousandSeparator(separator: string): void;\n public abstract override setUomSeparator(separator: string): void;\n public abstract override setStationSeparator(separator: string): void;\n public abstract override setMinWidth(minWidth: number): void;\n public abstract override setStationOffsetSize(stationOffsetSize: number): void;\n public abstract override setStationBaseFactor(stationBaseFactor: number): void;\n public abstract override setScientificType(scientificType: ScientificType): void;\n public abstract override setSpacer(spacer: string): void;\n public abstract override setIncludeZero(includeZero: boolean): void;\n public abstract override setFormatTraits(formatTraits: FormatTraits): void;\n public abstract override setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): void;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,QAAQ,EAAiB,WAAW,EAAyB,QAAQ,EAA0C,oBAAoB,EACnI,6BAA6B,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,KAAK,EAAkB,UAAU,EAClH,gBAAgB,EAAwB,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,EAChH,UAAU,EAAE,aAAa,EAA+C,IAAI,EAC7E,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAKjE;;;;GAIG;AACH,oBAAY,sBAAsB;IAChC,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AACD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACvF,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzD,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAAC;IACpF,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACvE,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IAClD,0BAA0B,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC/G,8BAA8B,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACvI,6BAA6B,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC9H,gCAAgC,CAAC,UAAU,EAAE,6BAA6B,EAAE,UAAU,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAC7H,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAClE,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;IAC1E,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1F,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvD,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,CAAC;IAC7C,oBAAoB,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,GAAG,IAAI,CAAC;IACrF,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3E,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAAC;IAEjE,gBAAgB;IAChB,WAAW,CAAC,KAAK,SAAS,OAAO,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;IACvJ,gBAAgB;IAChB,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;IAC5F,gBAAgB;IAChB,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,GAAG,OAAO,CAAC;CAC3H;AAQD;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,UAAU,CAA2B;IAE7C;;;OAGG;gBACS,GAAG,SAAS,EAAE,sBAAsB,EAAE;IAKlD;;;OAGG;IACU,WAAW,CAAC,KAAK,SAAS,OAAO,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC;IAInK;;;OAGG;IACU,eAAe,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAIxG;;;OAGG;IACI,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,GAAG,OAAO;IAMhI;;;;OAIG;IACU,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAgB5D;;;;OAIG;IACU,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BhF;;;;OAIG;IACU,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B5G;;;;OAIG;IACU,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B9E;;;;OAIG;IACU,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDzG;;;;OAIG;IACU,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5F;;;;OAIG;IACU,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAevE;;;;OAIG;IACU,0BAA0B,CAAC,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB1H;;;;OAIG;IACU,8BAA8B,CAAC,WAAW,EAAE,sBAAsB,EAAE,WAAW,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CpI;;;;OAIG;IACU,6BAA6B,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnJ;;;;OAIG;IACU,gCAAgC,CAAC,UAAU,EAAE,6BAA6B,EAAE,UAAU,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAalJ;;;;OAIG;IACU,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BvF;;;;OAIG;IACU,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA4C/F;;;;OAIG;IACU,yBAAyB,CAAC,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/G;;;;OAIG;IACU,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmE5E;;;;OAIG;IACU,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAyClE;;;;OAIG;IACU,oBAAoB,CAAC,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B1G;;;;OAIG;IACU,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhG;;;;OAIG;IACU,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YA4BxE,mBAAmB;YAsGnB,kBAAkB;YAgBlB,kBAAkB;IA0BhC,OAAO,CAAC,4BAA4B;IAqBpC;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAuB1B;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;CAuB1B"}
1
+ {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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"}
@@ -23,10 +23,8 @@ var SchemaCompareDirection;
23
23
  SchemaCompareDirection[SchemaCompareDirection["Forward"] = 0] = "Forward";
24
24
  SchemaCompareDirection[SchemaCompareDirection["Backward"] = 1] = "Backward";
25
25
  })(SchemaCompareDirection || (exports.SchemaCompareDirection = SchemaCompareDirection = {}));
26
- function labelsMatch(label1, label2) {
27
- label1 = label1 === undefined ? "" : label1;
28
- label2 = label2 === undefined ? "" : label2;
29
- return label1 === label2;
26
+ function areStringsEqual(lhs, rhs) {
27
+ return (lhs ?? "") === (rhs ?? "");
30
28
  }
31
29
  /**
32
30
  * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects
@@ -105,7 +103,7 @@ class SchemaComparer {
105
103
  promises.push(this._reporter.reportSchemaDelta(schemaA, "schemaKey", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));
106
104
  if (schemaA.alias !== schemaB.alias)
107
105
  promises.push(this._reporter.reportSchemaDelta(schemaA, "alias", schemaA.alias, schemaB.alias, this._compareDirection));
108
- if (schemaA.description !== schemaB.description)
106
+ if (!areStringsEqual(schemaA.description, schemaB.description))
109
107
  promises.push(this._reporter.reportSchemaDelta(schemaA, "description", schemaA.description, schemaB.description, this._compareDirection));
110
108
  if (schemaA.label !== schemaB.label)
111
109
  promises.push(this._reporter.reportSchemaDelta(schemaA, "label", schemaA.label, schemaB.label, this._compareDirection));
@@ -132,9 +130,9 @@ class SchemaComparer {
132
130
  await Promise.all(promises);
133
131
  return;
134
132
  }
135
- if (schemaItemA.description !== schemaItemB.description)
133
+ if (!areStringsEqual(schemaItemA.description, schemaItemB.description))
136
134
  promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, "description", schemaItemA.description, schemaItemB.description, this._compareDirection));
137
- if (!labelsMatch(schemaItemA.label, schemaItemB.label))
135
+ if (!areStringsEqual(schemaItemA.label, schemaItemB.label))
138
136
  promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, "label", schemaItemA.label, schemaItemB.label, this._compareDirection));
139
137
  await Promise.all(promises);
140
138
  }
@@ -187,9 +185,9 @@ class SchemaComparer {
187
185
  await Promise.all(promises);
188
186
  return;
189
187
  }
190
- if (!labelsMatch(propertyA.label, propertyB.label))
188
+ if (!areStringsEqual(propertyA.label, propertyB.label))
191
189
  promises.push(this._reporter.reportPropertyDelta(propertyA, "label", propertyA.label, propertyB.label, this._compareDirection));
192
- if (propertyA.description !== propertyB.description)
190
+ if (!areStringsEqual(propertyA.description, propertyB.description))
193
191
  promises.push(this._reporter.reportPropertyDelta(propertyA, "description", propertyA.description, propertyB.description, this._compareDirection));
194
192
  if (propertyA.isReadOnly !== propertyB.isReadOnly)
195
193
  promises.push(this._reporter.reportPropertyDelta(propertyA, "isReadOnly", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));
@@ -664,9 +662,9 @@ class SchemaComparer {
664
662
  }
665
663
  async compareEnumerators(enumeratorA, enumeratorB, enumA, enumB) {
666
664
  const promises = [];
667
- if (enumeratorA.description !== enumeratorB.description)
665
+ if (!areStringsEqual(enumeratorA.description, enumeratorB.description))
668
666
  promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, "description", enumeratorA.description, enumeratorB.description, this._compareDirection));
669
- if (!labelsMatch(enumeratorA.label, enumeratorB.label))
667
+ if (!areStringsEqual(enumeratorA.label, enumeratorB.label))
670
668
  promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, "label", enumeratorA.label, enumeratorB.label, this._compareDirection));
671
669
  // No need to compare values if the type is different (which will be reported separately)
672
670
  if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)
@@ -1 +1 @@
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, CustomAttribute, CustomAttributeClass,\n CustomAttributeContainerProps, ECClass, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\n} from \"@itwin/ecschema-metadata\";\nimport { formatTraitsToArray } 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): void;\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\n compareFormats(formatA: Format, formatB: Format): void;\n compareUnits(unitA: Unit, unitB: Unit): void;\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\n compareConstants(constantA: Constant, constantB: Constant): void;\n\n /** @internal */\n resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined>;\n /** @internal */\n resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined>;\n /** @internal */\n areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean;\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 * Resolves a schema Item from the given lookup schema.\n * @internal\n */\n public async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\n return lookupSchema.lookupItem(item.name, itemConstructor);\n }\n\n /**\n * Resolves a property from a class.\n * @internal\n */\n public async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\n return ecClass.getProperty(propertyA.name) as Promise<AnyProperty | undefined>;\n }\n\n /**\n * Compares two schema items to determine if they are the same by name.\n * @internal\n */\n public areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\n return nameA === nameB;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\n const aType = schemaItemA.schemaItemType;\n const bType = schemaItemB.schemaItemType;\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\n await Promise.all(promises);\n return;\n }\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 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (classA.modifier !== classB.modifier) {\n const aMod = classModifierToString(classA.modifier);\n const bMod = classModifierToString(classB.modifier);\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\n }\n\n if (classA.baseClass || classB.baseClass) {\n const fullNameA = classA.baseClass?.fullName;\n const fullNameB = classB.baseClass?.fullName;\n\n if (fullNameA !== fullNameB) {\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\n if (!areSameByName) {\n const baseA = await classA.baseClass as AnyClass;\n const baseB = await classB.baseClass as AnyClass;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\n if (propertyTypeA !== propertyTypeB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\n await Promise.all(promises);\n return;\n }\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?.fullName;\n const catKeyB = propertyB.category?.fullName;\n if (catKeyA !== catKeyB) {\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\", catKeyA, catKeyB, this._compareDirection));\n }\n }\n\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\n if (koqKeyA !== koqKeyB) {\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\", koqKeyA, koqKeyB, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const mixinA of entityA.mixins) {\n if (-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\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (mixinA.appliesTo || mixinB.appliesTo) {\n const appliesToA = mixinA.appliesTo?.fullName;\n const appliesToB = mixinB.appliesTo?.fullName;\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (relationshipA.strength !== relationshipB.strength) {\n const strengthAString = strengthToString(relationshipA.strength);\n const strengthBString = strengthToString(relationshipB.strength);\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\n }\n\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (constraintA.constraintClasses) {\n for (const classA of constraintA.constraintClasses) {\n if (!constraintB.constraintClasses || -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) {\n await Promise.all(promises);\n return;\n }\n\n if (constraintA.multiplicity || constraintB.multiplicity) {\n const multiplicityA = constraintA.multiplicity.toString();\n const multiplicityB = constraintB.multiplicity.toString();\n if (multiplicityA !== multiplicityB)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\n }\n\n if (constraintA.roleLabel !== constraintB.roleLabel)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\n\n if (constraintA.polymorphic !== constraintB.polymorphic)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\n\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\n const abstractA = constraintA.abstractConstraint?.fullName;\n const abstractB = constraintB.abstractConstraint?.fullName;\n if (abstractA !== abstractB) {\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (containerA.customAttributes) {\n for (const ca of containerA.customAttributes) {\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n for (const enumeratorA of enumA.enumerators) {\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\n if (!enumeratorB) {\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\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) {\n await Promise.all(promises);\n return;\n }\n if (enumA.type !== enumB.type) {\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (enumA.isStrict !== enumB.isStrict)\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (koqA.presentationFormats) {\n for (const lazyUnitA of koqA.presentationFormats) {\n const unitA = OverrideFormat.isOverrideFormat(lazyUnitA) ? lazyUnitA : await lazyUnitA;\n\n let itemFound = false;\n for(const lazyUnitB of koqB.presentationFormats) {\n const unitB = OverrideFormat.isOverrideFormat(lazyUnitB) ? lazyUnitB : await lazyUnitB;\n if (this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)) {\n itemFound = true;\n break;\n }\n }\n\n if (!itemFound) {\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\n }\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (koqA.relativeError !== koqB.relativeError) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\n }\n\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\n const unitNameA = koqA.persistenceUnit?.fullName;\n const unitNameB = koqB.persistenceUnit?.fullName;\n if (unitNameA !== unitNameB) {\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\n if (!eqByName)\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (categoryA.priority !== categoryB.priority)\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n promises.push(this.compareFormatUnits(formatA, formatB));\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (formatA.roundFactor !== formatB.roundFactor)\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\n\n if (formatA.type !== formatB.type) {\n const typeAString = formatA.type;\n const typeBString = formatB.type;\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.precision !== formatB.precision)\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\n\n if (formatA.minWidth !== formatB.minWidth)\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\n\n if (formatA.scientificType !== formatB.scientificType) {\n const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;\n const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.showSignOption !== formatB.showSignOption) {\n const optionA = formatA.showSignOption;\n const optionB = formatB.showSignOption;\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\n }\n\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\n\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\n\n if (formatA.uomSeparator !== formatB.uomSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\n\n if (formatA.stationSeparator !== formatB.stationSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\n\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\n\n if (formatA.formatTraits !== formatB.formatTraits) {\n const traitsA = formatTraitsToArray(formatA.formatTraits);\n const traitsB = formatTraitsToArray(formatB.formatTraits);\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\n }\n\n if (formatA.spacer !== formatB.spacer)\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\n\n if (formatA.includeZero !== formatB.includeZero)\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (unitA.phenomenon || unitB.phenomenon) {\n const fullNameA = unitA.phenomenon?.fullName;\n const fullNameB = unitB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.unitSystem || unitB.unitSystem) {\n const fullNameA = unitA.unitSystem?.fullName;\n const fullNameB = unitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.definition !== unitB.definition)\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\n\n if (unitA.numerator !== unitB.numerator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\n\n if (unitA.denominator !== unitB.denominator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\n\n if (unitA.offset !== unitB.offset)\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\n const fullNameA = invertedUnitA.unitSystem?.fullName;\n const fullNameB = invertedUnitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (phenomenonA.definition !== phenomenonB.definition)\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (constantA.phenomenon || constantB.phenomenon) {\n const fullNameA = constantA.phenomenon?.fullName;\n const fullNameB = constantB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (constantA.definition !== constantB.definition)\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\n\n if (constantA.numerator !== constantB.numerator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\n\n if (constantA.denominator !== constantB.denominator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, 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 if (propertyA.isArray()) {\n const minOccursB = 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.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.isEnumeration() ? propertyB.enumeration : undefined;\n if (propertyA.enumeration || enumerationB) {\n const enumA = propertyA.enumeration?.fullName;\n const enumB = enumerationB?.fullName;\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.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.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.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.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.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.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.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.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.structClass;\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\n if (structA || structB) {\n const structNameA = structA.fullName;\n const structNameB = structB?.fullName;\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, enumA: Enumeration, enumB: Enumeration): Promise<void> {\n const promises: Array<Promise<void>> = [];\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): Promise<void> {\n if (!formatA.units)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n for (const [lazyUnitA, labelA] of formatA.units) {\n const unitA = await lazyUnitA;\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA, u[0], formatA.schema.name, formatB.schema.name)) : undefined;\n if (!unitB) {\n promises.push(this._reporter.reportFormatUnitMissing(formatA, [unitA, labelA], this._compareDirection));\n continue;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n continue;\n\n if (labelA !== unitB[1]) {;\n const labelB = unitB[1];\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitA, labelA, labelB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n private areOverrideFormatsSameByName(\n itemKeyA: Format | OverrideFormat,\n itemKeyB: Format | OverrideFormat,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n if (itemKeyA.units) {\n for (const unitA of itemKeyA.units) {\n if (!itemKeyB.units\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\n && unitA[1] === unitB[1]))\n return false;\n }\n }\n\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\n\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\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> | SchemaItem | undefined,\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n const equalByName = this.areEqualByName(itemKeyA, itemKeyB);\n\n const schemaNameA = itemKeyA\n ? SchemaItem.isSchemaItem(itemKeyA)\n ? itemKeyA.schema.name\n : itemKeyA.schemaName\n : undefined;\n\n const schemaNameB = itemKeyB\n ? SchemaItem.isSchemaItem(itemKeyB)\n ? itemKeyB.schema.name\n : itemKeyB.schemaName\n : undefined;\n\n return (equalByName && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (equalByName && 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(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\n if (containerB && containerB.customAttributes) {\n for (const [_className, attributeB] of containerB.customAttributes) {\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\n\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\n return Object.keys(attributeA).every((propertyName) => {\n const valueA = attributeA[propertyName];\n const valueB = attributeB[propertyName];\n\n // If propertyName is class name, they don't need to be compared as this has been done\n // in the areItemsSameByName function.\n if(propertyName === \"className\")\n return true;\n\n return deepEquals(valueA, valueB);\n });\n }\n }\n }\n return false;\n }\n}\n\n/**\n * Compares two values on their deep equality.\n * @param a left side to compare\n * @param b right side to compare\n * @returns true if they are deeply equal, otherwise false.\n */\nfunction deepEquals(a: unknown, b: unknown): boolean {\n if(Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((value, index) => {\n return deepEquals(value, b[index]);\n });\n }\n if(isObject(a) && isObject(b)) {\n const propertiesA = Object.keys(a);\n const propertiesB = Object.keys(b);\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\n return deepEquals(a[propertyName], b[propertyName]);\n });\n }\n return a === b;\n}\n\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\n return typeof value === \"object\";\n}\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, CustomAttribute, CustomAttributeClass,\n CustomAttributeContainerProps, ECClass, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\n} from \"@itwin/ecschema-metadata\";\nimport { formatTraitsToArray } 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): void;\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\n compareFormats(formatA: Format, formatB: Format): void;\n compareUnits(unitA: Unit, unitB: Unit): void;\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\n compareConstants(constantA: Constant, constantB: Constant): void;\n\n /** @internal */\n resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined>;\n /** @internal */\n resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined>;\n /** @internal */\n areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean;\n}\n\n function areStringsEqual(lhs?: string, rhs?: string): boolean {\n return (lhs ?? \"\") === (rhs ?? \"\");\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 * Resolves a schema Item from the given lookup schema.\n * @internal\n */\n public async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\n return lookupSchema.lookupItem(item.name, itemConstructor);\n }\n\n /**\n * Resolves a property from a class.\n * @internal\n */\n public async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\n return ecClass.getProperty(propertyA.name) as Promise<AnyProperty | undefined>;\n }\n\n /**\n * Compares two schema items to determine if they are the same by name.\n * @internal\n */\n public areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\n return nameA === nameB;\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 (!areStringsEqual(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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\n const aType = schemaItemA.schemaItemType;\n const bType = schemaItemB.schemaItemType;\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n\n if (!areStringsEqual(schemaItemA.description, schemaItemB.description))\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\n\n if (!areStringsEqual(schemaItemA.label, schemaItemB.label))\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (classA.modifier !== classB.modifier) {\n const aMod = classModifierToString(classA.modifier);\n const bMod = classModifierToString(classB.modifier);\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\n }\n\n if (classA.baseClass || classB.baseClass) {\n const fullNameA = classA.baseClass?.fullName;\n const fullNameB = classB.baseClass?.fullName;\n\n if (fullNameA !== fullNameB) {\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\n if (!areSameByName) {\n const baseA = await classA.baseClass as AnyClass;\n const baseB = await classB.baseClass as AnyClass;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\n if (propertyTypeA !== propertyTypeB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n\n if (!areStringsEqual(propertyA.label, propertyB.label))\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\n\n if (!areStringsEqual(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?.fullName;\n const catKeyB = propertyB.category?.fullName;\n if (catKeyA !== catKeyB) {\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\", catKeyA, catKeyB, this._compareDirection));\n }\n }\n\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\n if (koqKeyA !== koqKeyB) {\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\", koqKeyA, koqKeyB, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const mixinA of entityA.mixins) {\n if (-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\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (mixinA.appliesTo || mixinB.appliesTo) {\n const appliesToA = mixinA.appliesTo?.fullName;\n const appliesToB = mixinB.appliesTo?.fullName;\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (relationshipA.strength !== relationshipB.strength) {\n const strengthAString = strengthToString(relationshipA.strength);\n const strengthBString = strengthToString(relationshipB.strength);\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\n }\n\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (constraintA.constraintClasses) {\n for (const classA of constraintA.constraintClasses) {\n if (!constraintB.constraintClasses || -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) {\n await Promise.all(promises);\n return;\n }\n\n if (constraintA.multiplicity || constraintB.multiplicity) {\n const multiplicityA = constraintA.multiplicity.toString();\n const multiplicityB = constraintB.multiplicity.toString();\n if (multiplicityA !== multiplicityB)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\n }\n\n if (constraintA.roleLabel !== constraintB.roleLabel)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\n\n if (constraintA.polymorphic !== constraintB.polymorphic)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\n\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\n const abstractA = constraintA.abstractConstraint?.fullName;\n const abstractB = constraintB.abstractConstraint?.fullName;\n if (abstractA !== abstractB) {\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (containerA.customAttributes) {\n for (const ca of containerA.customAttributes) {\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n for (const enumeratorA of enumA.enumerators) {\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\n if (!enumeratorB) {\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\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) {\n await Promise.all(promises);\n return;\n }\n if (enumA.type !== enumB.type) {\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (enumA.isStrict !== enumB.isStrict)\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (koqA.presentationFormats) {\n for (const lazyUnitA of koqA.presentationFormats) {\n const unitA = OverrideFormat.isOverrideFormat(lazyUnitA) ? lazyUnitA : await lazyUnitA;\n\n let itemFound = false;\n for(const lazyUnitB of koqB.presentationFormats) {\n const unitB = OverrideFormat.isOverrideFormat(lazyUnitB) ? lazyUnitB : await lazyUnitB;\n if (this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)) {\n itemFound = true;\n break;\n }\n }\n\n if (!itemFound) {\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\n }\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (koqA.relativeError !== koqB.relativeError) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\n }\n\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\n const unitNameA = koqA.persistenceUnit?.fullName;\n const unitNameB = koqB.persistenceUnit?.fullName;\n if (unitNameA !== unitNameB) {\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\n if (!eqByName)\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (categoryA.priority !== categoryB.priority)\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n promises.push(this.compareFormatUnits(formatA, formatB));\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (formatA.roundFactor !== formatB.roundFactor)\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\n\n if (formatA.type !== formatB.type) {\n const typeAString = formatA.type;\n const typeBString = formatB.type;\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.precision !== formatB.precision)\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\n\n if (formatA.minWidth !== formatB.minWidth)\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\n\n if (formatA.scientificType !== formatB.scientificType) {\n const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;\n const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.showSignOption !== formatB.showSignOption) {\n const optionA = formatA.showSignOption;\n const optionB = formatB.showSignOption;\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\n }\n\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\n\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\n\n if (formatA.uomSeparator !== formatB.uomSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\n\n if (formatA.stationSeparator !== formatB.stationSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\n\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\n\n if (formatA.formatTraits !== formatB.formatTraits) {\n const traitsA = formatTraitsToArray(formatA.formatTraits);\n const traitsB = formatTraitsToArray(formatB.formatTraits);\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\n }\n\n if (formatA.spacer !== formatB.spacer)\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\n\n if (formatA.includeZero !== formatB.includeZero)\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (unitA.phenomenon || unitB.phenomenon) {\n const fullNameA = unitA.phenomenon?.fullName;\n const fullNameB = unitB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.unitSystem || unitB.unitSystem) {\n const fullNameA = unitA.unitSystem?.fullName;\n const fullNameB = unitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.definition !== unitB.definition)\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\n\n if (unitA.numerator !== unitB.numerator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\n\n if (unitA.denominator !== unitB.denominator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\n\n if (unitA.offset !== unitB.offset)\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\n const fullNameA = invertedUnitA.unitSystem?.fullName;\n const fullNameB = invertedUnitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (phenomenonA.definition !== phenomenonB.definition)\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (constantA.phenomenon || constantB.phenomenon) {\n const fullNameA = constantA.phenomenon?.fullName;\n const fullNameB = constantB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (constantA.definition !== constantB.definition)\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\n\n if (constantA.numerator !== constantB.numerator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\n\n if (constantA.denominator !== constantB.denominator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, 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 if (propertyA.isArray()) {\n const minOccursB = 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.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.isEnumeration() ? propertyB.enumeration : undefined;\n if (propertyA.enumeration || enumerationB) {\n const enumA = propertyA.enumeration?.fullName;\n const enumB = enumerationB?.fullName;\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.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.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.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.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.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.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.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.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.structClass;\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\n if (structA || structB) {\n const structNameA = structA.fullName;\n const structNameB = structB?.fullName;\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, enumA: Enumeration, enumB: Enumeration): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (!areStringsEqual(enumeratorA.description, enumeratorB.description))\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\n\n if (!areStringsEqual(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): Promise<void> {\n if (!formatA.units)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n for (const [lazyUnitA, labelA] of formatA.units) {\n const unitA = await lazyUnitA;\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA, u[0], formatA.schema.name, formatB.schema.name)) : undefined;\n if (!unitB) {\n promises.push(this._reporter.reportFormatUnitMissing(formatA, [unitA, labelA], this._compareDirection));\n continue;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n continue;\n\n if (labelA !== unitB[1]) {;\n const labelB = unitB[1];\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitA, labelA, labelB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n private areOverrideFormatsSameByName(\n itemKeyA: Format | OverrideFormat,\n itemKeyB: Format | OverrideFormat,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n if (itemKeyA.units) {\n for (const unitA of itemKeyA.units) {\n if (!itemKeyB.units\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\n && unitA[1] === unitB[1]))\n return false;\n }\n }\n\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\n\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\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> | SchemaItem | undefined,\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n const equalByName = this.areEqualByName(itemKeyA, itemKeyB);\n\n const schemaNameA = itemKeyA\n ? SchemaItem.isSchemaItem(itemKeyA)\n ? itemKeyA.schema.name\n : itemKeyA.schemaName\n : undefined;\n\n const schemaNameB = itemKeyB\n ? SchemaItem.isSchemaItem(itemKeyB)\n ? itemKeyB.schema.name\n : itemKeyB.schemaName\n : undefined;\n\n return (equalByName && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (equalByName && 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(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\n if (containerB && containerB.customAttributes) {\n for (const [_className, attributeB] of containerB.customAttributes) {\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\n\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\n return Object.keys(attributeA).every((propertyName) => {\n const valueA = attributeA[propertyName];\n const valueB = attributeB[propertyName];\n\n // If propertyName is class name, they don't need to be compared as this has been done\n // in the areItemsSameByName function.\n if(propertyName === \"className\")\n return true;\n\n return deepEquals(valueA, valueB);\n });\n }\n }\n }\n return false;\n }\n}\n\n/**\n * Compares two values on their deep equality.\n * @param a left side to compare\n * @param b right side to compare\n * @returns true if they are deeply equal, otherwise false.\n */\nfunction deepEquals(a: unknown, b: unknown): boolean {\n if(Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((value, index) => {\n return deepEquals(value, b[index]);\n });\n }\n if(isObject(a) && isObject(b)) {\n const propertiesA = Object.keys(a);\n const propertiesB = Object.keys(b);\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\n return deepEquals(a[propertyName], b[propertyName]);\n });\n }\n return a === b;\n}\n\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\n return typeof value === \"object\";\n}\n"]}
@@ -16,6 +16,7 @@ export declare abstract class MutableFormat extends Format {
16
16
  abstract setStationSeparator(separator: string): void;
17
17
  abstract setMinWidth(minWidth: number): void;
18
18
  abstract setStationOffsetSize(stationOffsetSize: number): void;
19
+ abstract setStationBaseFactor(stationBaseFactor: number): void;
19
20
  abstract setScientificType(scientificType: ScientificType): void;
20
21
  abstract setSpacer(spacer: string): void;
21
22
  abstract setIncludeZero(includeZero: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"MutableFormat.d.ts","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhG;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,MAAM;aACvB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;aAC5E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACrC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;aAC3C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;aACzC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;aACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACxC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;aACnC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;aACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;aAC/B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;aAC1C,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;aACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI;aAC3F,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE"}
1
+ {"version":3,"file":"MutableFormat.d.ts","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhG;;;GAGG;AACH,8BAAsB,aAAc,SAAQ,MAAM;aACvB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,sBAAsB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;aAC5E,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACrC,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;aAC3C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;aACzC,iBAAiB,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI;aACnD,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC7C,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aACxC,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;aAC5C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;aACnC,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,oBAAoB,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;aACrD,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,IAAI;aACvD,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;aAC/B,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;aAC1C,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;aACjD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,cAAc,GAAG,sBAAsB,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI;aAC3F,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;CACrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"MutableFormat.js","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAA0C,MAAM,0BAA0B,CAAC;AAG1F;;;GAGG;AACH,MAAM,OAAgB,aAAc,SAAQ,MAAM;CAkBjD","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*--------------------------------------------------------------------------------------------*/\nimport { Format, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"@itwin/ecschema-metadata\";\nimport { FormatTraits, FormatType, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableFormat extends Format {\n public abstract override addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;\n public abstract override setPrecision(precision: number): void;\n public abstract override setFormatType(formatType: FormatType): void;\n public abstract override setRoundFactor(roundFactor: number): void;\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\n public abstract override setDecimalSeparator(separator: string): void;\n public abstract override setThousandSeparator(separator: string): void;\n public abstract override setUomSeparator(separator: string): void;\n public abstract override setStationSeparator(separator: string): void;\n public abstract override setMinWidth(minWidth: number): void;\n public abstract override setStationOffsetSize(stationOffsetSize: number): void;\n public abstract override setScientificType(scientificType: ScientificType): void;\n public abstract override setSpacer(spacer: string): void;\n public abstract override setIncludeZero(includeZero: boolean): void;\n public abstract override setFormatTraits(formatTraits: FormatTraits): void;\n public abstract override setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): void;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n"]}
1
+ {"version":3,"file":"MutableFormat.js","sourceRoot":"","sources":["../../../../src/Editing/Mutable/MutableFormat.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,MAAM,EAA0C,MAAM,0BAA0B,CAAC;AAG1F;;;GAGG;AACH,MAAM,OAAgB,aAAc,SAAQ,MAAM;CAmBjD","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*--------------------------------------------------------------------------------------------*/\nimport { Format, LazyLoadedInvertedUnit, LazyLoadedUnit } from \"@itwin/ecschema-metadata\";\nimport { FormatTraits, FormatType, ScientificType, ShowSignOption } from \"@itwin/core-quantity\";\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableFormat extends Format {\n public abstract override addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;\n public abstract override setPrecision(precision: number): void;\n public abstract override setFormatType(formatType: FormatType): void;\n public abstract override setRoundFactor(roundFactor: number): void;\n public abstract override setShowSignOption(signOption: ShowSignOption): void;\n public abstract override setDecimalSeparator(separator: string): void;\n public abstract override setThousandSeparator(separator: string): void;\n public abstract override setUomSeparator(separator: string): void;\n public abstract override setStationSeparator(separator: string): void;\n public abstract override setMinWidth(minWidth: number): void;\n public abstract override setStationOffsetSize(stationOffsetSize: number): void;\n public abstract override setStationBaseFactor(stationBaseFactor: number): void;\n public abstract override setScientificType(scientificType: ScientificType): void;\n public abstract override setSpacer(spacer: string): void;\n public abstract override setIncludeZero(includeZero: boolean): void;\n public abstract override setFormatTraits(formatTraits: FormatTraits): void;\n public abstract override setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): void;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,8 @@ export var SchemaCompareDirection;
20
20
  SchemaCompareDirection[SchemaCompareDirection["Forward"] = 0] = "Forward";
21
21
  SchemaCompareDirection[SchemaCompareDirection["Backward"] = 1] = "Backward";
22
22
  })(SchemaCompareDirection || (SchemaCompareDirection = {}));
23
- function labelsMatch(label1, label2) {
24
- label1 = label1 === undefined ? "" : label1;
25
- label2 = label2 === undefined ? "" : label2;
26
- return label1 === label2;
23
+ function areStringsEqual(lhs, rhs) {
24
+ return (lhs ?? "") === (rhs ?? "");
27
25
  }
28
26
  /**
29
27
  * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects
@@ -102,7 +100,7 @@ export class SchemaComparer {
102
100
  promises.push(this._reporter.reportSchemaDelta(schemaA, "schemaKey", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));
103
101
  if (schemaA.alias !== schemaB.alias)
104
102
  promises.push(this._reporter.reportSchemaDelta(schemaA, "alias", schemaA.alias, schemaB.alias, this._compareDirection));
105
- if (schemaA.description !== schemaB.description)
103
+ if (!areStringsEqual(schemaA.description, schemaB.description))
106
104
  promises.push(this._reporter.reportSchemaDelta(schemaA, "description", schemaA.description, schemaB.description, this._compareDirection));
107
105
  if (schemaA.label !== schemaB.label)
108
106
  promises.push(this._reporter.reportSchemaDelta(schemaA, "label", schemaA.label, schemaB.label, this._compareDirection));
@@ -129,9 +127,9 @@ export class SchemaComparer {
129
127
  await Promise.all(promises);
130
128
  return;
131
129
  }
132
- if (schemaItemA.description !== schemaItemB.description)
130
+ if (!areStringsEqual(schemaItemA.description, schemaItemB.description))
133
131
  promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, "description", schemaItemA.description, schemaItemB.description, this._compareDirection));
134
- if (!labelsMatch(schemaItemA.label, schemaItemB.label))
132
+ if (!areStringsEqual(schemaItemA.label, schemaItemB.label))
135
133
  promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, "label", schemaItemA.label, schemaItemB.label, this._compareDirection));
136
134
  await Promise.all(promises);
137
135
  }
@@ -184,9 +182,9 @@ export class SchemaComparer {
184
182
  await Promise.all(promises);
185
183
  return;
186
184
  }
187
- if (!labelsMatch(propertyA.label, propertyB.label))
185
+ if (!areStringsEqual(propertyA.label, propertyB.label))
188
186
  promises.push(this._reporter.reportPropertyDelta(propertyA, "label", propertyA.label, propertyB.label, this._compareDirection));
189
- if (propertyA.description !== propertyB.description)
187
+ if (!areStringsEqual(propertyA.description, propertyB.description))
190
188
  promises.push(this._reporter.reportPropertyDelta(propertyA, "description", propertyA.description, propertyB.description, this._compareDirection));
191
189
  if (propertyA.isReadOnly !== propertyB.isReadOnly)
192
190
  promises.push(this._reporter.reportPropertyDelta(propertyA, "isReadOnly", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));
@@ -661,9 +659,9 @@ export class SchemaComparer {
661
659
  }
662
660
  async compareEnumerators(enumeratorA, enumeratorB, enumA, enumB) {
663
661
  const promises = [];
664
- if (enumeratorA.description !== enumeratorB.description)
662
+ if (!areStringsEqual(enumeratorA.description, enumeratorB.description))
665
663
  promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, "description", enumeratorA.description, enumeratorB.description, this._compareDirection));
666
- if (!labelsMatch(enumeratorA.label, enumeratorB.label))
664
+ if (!areStringsEqual(enumeratorA.label, enumeratorB.label))
667
665
  promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, "label", enumeratorA.label, enumeratorB.label, this._compareDirection));
668
666
  // No need to compare values if the type is different (which will be reported separately)
669
667
  if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)
@@ -1 +1 @@
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, CustomAttribute, CustomAttributeClass,\n CustomAttributeContainerProps, ECClass, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\n} from \"@itwin/ecschema-metadata\";\nimport { formatTraitsToArray } 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): void;\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\n compareFormats(formatA: Format, formatB: Format): void;\n compareUnits(unitA: Unit, unitB: Unit): void;\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\n compareConstants(constantA: Constant, constantB: Constant): void;\n\n /** @internal */\n resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined>;\n /** @internal */\n resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined>;\n /** @internal */\n areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean;\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 * Resolves a schema Item from the given lookup schema.\n * @internal\n */\n public async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\n return lookupSchema.lookupItem(item.name, itemConstructor);\n }\n\n /**\n * Resolves a property from a class.\n * @internal\n */\n public async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\n return ecClass.getProperty(propertyA.name) as Promise<AnyProperty | undefined>;\n }\n\n /**\n * Compares two schema items to determine if they are the same by name.\n * @internal\n */\n public areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\n return nameA === nameB;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\n const aType = schemaItemA.schemaItemType;\n const bType = schemaItemB.schemaItemType;\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\n await Promise.all(promises);\n return;\n }\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 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (classA.modifier !== classB.modifier) {\n const aMod = classModifierToString(classA.modifier);\n const bMod = classModifierToString(classB.modifier);\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\n }\n\n if (classA.baseClass || classB.baseClass) {\n const fullNameA = classA.baseClass?.fullName;\n const fullNameB = classB.baseClass?.fullName;\n\n if (fullNameA !== fullNameB) {\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\n if (!areSameByName) {\n const baseA = await classA.baseClass as AnyClass;\n const baseB = await classB.baseClass as AnyClass;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\n if (propertyTypeA !== propertyTypeB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\n await Promise.all(promises);\n return;\n }\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?.fullName;\n const catKeyB = propertyB.category?.fullName;\n if (catKeyA !== catKeyB) {\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\", catKeyA, catKeyB, this._compareDirection));\n }\n }\n\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\n if (koqKeyA !== koqKeyB) {\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\", koqKeyA, koqKeyB, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const mixinA of entityA.mixins) {\n if (-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\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (mixinA.appliesTo || mixinB.appliesTo) {\n const appliesToA = mixinA.appliesTo?.fullName;\n const appliesToB = mixinB.appliesTo?.fullName;\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (relationshipA.strength !== relationshipB.strength) {\n const strengthAString = strengthToString(relationshipA.strength);\n const strengthBString = strengthToString(relationshipB.strength);\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\n }\n\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (constraintA.constraintClasses) {\n for (const classA of constraintA.constraintClasses) {\n if (!constraintB.constraintClasses || -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) {\n await Promise.all(promises);\n return;\n }\n\n if (constraintA.multiplicity || constraintB.multiplicity) {\n const multiplicityA = constraintA.multiplicity.toString();\n const multiplicityB = constraintB.multiplicity.toString();\n if (multiplicityA !== multiplicityB)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\n }\n\n if (constraintA.roleLabel !== constraintB.roleLabel)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\n\n if (constraintA.polymorphic !== constraintB.polymorphic)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\n\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\n const abstractA = constraintA.abstractConstraint?.fullName;\n const abstractB = constraintB.abstractConstraint?.fullName;\n if (abstractA !== abstractB) {\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (containerA.customAttributes) {\n for (const ca of containerA.customAttributes) {\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n for (const enumeratorA of enumA.enumerators) {\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\n if (!enumeratorB) {\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\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) {\n await Promise.all(promises);\n return;\n }\n if (enumA.type !== enumB.type) {\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (enumA.isStrict !== enumB.isStrict)\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (koqA.presentationFormats) {\n for (const lazyUnitA of koqA.presentationFormats) {\n const unitA = OverrideFormat.isOverrideFormat(lazyUnitA) ? lazyUnitA : await lazyUnitA;\n\n let itemFound = false;\n for(const lazyUnitB of koqB.presentationFormats) {\n const unitB = OverrideFormat.isOverrideFormat(lazyUnitB) ? lazyUnitB : await lazyUnitB;\n if (this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)) {\n itemFound = true;\n break;\n }\n }\n\n if (!itemFound) {\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\n }\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (koqA.relativeError !== koqB.relativeError) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\n }\n\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\n const unitNameA = koqA.persistenceUnit?.fullName;\n const unitNameB = koqB.persistenceUnit?.fullName;\n if (unitNameA !== unitNameB) {\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\n if (!eqByName)\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (categoryA.priority !== categoryB.priority)\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n promises.push(this.compareFormatUnits(formatA, formatB));\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (formatA.roundFactor !== formatB.roundFactor)\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\n\n if (formatA.type !== formatB.type) {\n const typeAString = formatA.type;\n const typeBString = formatB.type;\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.precision !== formatB.precision)\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\n\n if (formatA.minWidth !== formatB.minWidth)\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\n\n if (formatA.scientificType !== formatB.scientificType) {\n const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;\n const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.showSignOption !== formatB.showSignOption) {\n const optionA = formatA.showSignOption;\n const optionB = formatB.showSignOption;\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\n }\n\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\n\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\n\n if (formatA.uomSeparator !== formatB.uomSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\n\n if (formatA.stationSeparator !== formatB.stationSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\n\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\n\n if (formatA.formatTraits !== formatB.formatTraits) {\n const traitsA = formatTraitsToArray(formatA.formatTraits);\n const traitsB = formatTraitsToArray(formatB.formatTraits);\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\n }\n\n if (formatA.spacer !== formatB.spacer)\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\n\n if (formatA.includeZero !== formatB.includeZero)\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (unitA.phenomenon || unitB.phenomenon) {\n const fullNameA = unitA.phenomenon?.fullName;\n const fullNameB = unitB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.unitSystem || unitB.unitSystem) {\n const fullNameA = unitA.unitSystem?.fullName;\n const fullNameB = unitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.definition !== unitB.definition)\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\n\n if (unitA.numerator !== unitB.numerator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\n\n if (unitA.denominator !== unitB.denominator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\n\n if (unitA.offset !== unitB.offset)\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\n const fullNameA = invertedUnitA.unitSystem?.fullName;\n const fullNameB = invertedUnitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (phenomenonA.definition !== phenomenonB.definition)\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (constantA.phenomenon || constantB.phenomenon) {\n const fullNameA = constantA.phenomenon?.fullName;\n const fullNameB = constantB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (constantA.definition !== constantB.definition)\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\n\n if (constantA.numerator !== constantB.numerator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\n\n if (constantA.denominator !== constantB.denominator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, 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 if (propertyA.isArray()) {\n const minOccursB = 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.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.isEnumeration() ? propertyB.enumeration : undefined;\n if (propertyA.enumeration || enumerationB) {\n const enumA = propertyA.enumeration?.fullName;\n const enumB = enumerationB?.fullName;\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.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.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.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.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.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.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.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.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.structClass;\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\n if (structA || structB) {\n const structNameA = structA.fullName;\n const structNameB = structB?.fullName;\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, enumA: Enumeration, enumB: Enumeration): Promise<void> {\n const promises: Array<Promise<void>> = [];\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): Promise<void> {\n if (!formatA.units)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n for (const [lazyUnitA, labelA] of formatA.units) {\n const unitA = await lazyUnitA;\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA, u[0], formatA.schema.name, formatB.schema.name)) : undefined;\n if (!unitB) {\n promises.push(this._reporter.reportFormatUnitMissing(formatA, [unitA, labelA], this._compareDirection));\n continue;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n continue;\n\n if (labelA !== unitB[1]) {;\n const labelB = unitB[1];\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitA, labelA, labelB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n private areOverrideFormatsSameByName(\n itemKeyA: Format | OverrideFormat,\n itemKeyB: Format | OverrideFormat,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n if (itemKeyA.units) {\n for (const unitA of itemKeyA.units) {\n if (!itemKeyB.units\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\n && unitA[1] === unitB[1]))\n return false;\n }\n }\n\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\n\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\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> | SchemaItem | undefined,\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n const equalByName = this.areEqualByName(itemKeyA, itemKeyB);\n\n const schemaNameA = itemKeyA\n ? SchemaItem.isSchemaItem(itemKeyA)\n ? itemKeyA.schema.name\n : itemKeyA.schemaName\n : undefined;\n\n const schemaNameB = itemKeyB\n ? SchemaItem.isSchemaItem(itemKeyB)\n ? itemKeyB.schema.name\n : itemKeyB.schemaName\n : undefined;\n\n return (equalByName && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (equalByName && 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(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\n if (containerB && containerB.customAttributes) {\n for (const [_className, attributeB] of containerB.customAttributes) {\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\n\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\n return Object.keys(attributeA).every((propertyName) => {\n const valueA = attributeA[propertyName];\n const valueB = attributeB[propertyName];\n\n // If propertyName is class name, they don't need to be compared as this has been done\n // in the areItemsSameByName function.\n if(propertyName === \"className\")\n return true;\n\n return deepEquals(valueA, valueB);\n });\n }\n }\n }\n return false;\n }\n}\n\n/**\n * Compares two values on their deep equality.\n * @param a left side to compare\n * @param b right side to compare\n * @returns true if they are deeply equal, otherwise false.\n */\nfunction deepEquals(a: unknown, b: unknown): boolean {\n if(Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((value, index) => {\n return deepEquals(value, b[index]);\n });\n }\n if(isObject(a) && isObject(b)) {\n const propertiesA = Object.keys(a);\n const propertiesB = Object.keys(b);\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\n return deepEquals(a[propertyName], b[propertyName]);\n });\n }\n return a === b;\n}\n\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\n return typeof value === \"object\";\n}\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, CustomAttribute, CustomAttributeClass,\n CustomAttributeContainerProps, ECClass, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\n} from \"@itwin/ecschema-metadata\";\nimport { formatTraitsToArray } 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): void;\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\n compareFormats(formatA: Format, formatB: Format): void;\n compareUnits(unitA: Unit, unitB: Unit): void;\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\n compareConstants(constantA: Constant, constantB: Constant): void;\n\n /** @internal */\n resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined>;\n /** @internal */\n resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined>;\n /** @internal */\n areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean;\n}\n\n function areStringsEqual(lhs?: string, rhs?: string): boolean {\n return (lhs ?? \"\") === (rhs ?? \"\");\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 * Resolves a schema Item from the given lookup schema.\n * @internal\n */\n public async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\n return lookupSchema.lookupItem(item.name, itemConstructor);\n }\n\n /**\n * Resolves a property from a class.\n * @internal\n */\n public async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\n return ecClass.getProperty(propertyA.name) as Promise<AnyProperty | undefined>;\n }\n\n /**\n * Compares two schema items to determine if they are the same by name.\n * @internal\n */\n public areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\n return nameA === nameB;\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 (!areStringsEqual(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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\n const aType = schemaItemA.schemaItemType;\n const bType = schemaItemB.schemaItemType;\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n\n if (!areStringsEqual(schemaItemA.description, schemaItemB.description))\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\n\n if (!areStringsEqual(schemaItemA.label, schemaItemB.label))\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (classA.modifier !== classB.modifier) {\n const aMod = classModifierToString(classA.modifier);\n const bMod = classModifierToString(classB.modifier);\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\n }\n\n if (classA.baseClass || classB.baseClass) {\n const fullNameA = classA.baseClass?.fullName;\n const fullNameB = classB.baseClass?.fullName;\n\n if (fullNameA !== fullNameB) {\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\n if (!areSameByName) {\n const baseA = await classA.baseClass as AnyClass;\n const baseB = await classB.baseClass as AnyClass;\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 await Promise.all(promises);\n return;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\n if (propertyTypeA !== propertyTypeB) {\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\n await Promise.all(promises);\n return;\n }\n\n if (!areStringsEqual(propertyA.label, propertyB.label))\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\n\n if (!areStringsEqual(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?.fullName;\n const catKeyB = propertyB.category?.fullName;\n if (catKeyA !== catKeyB) {\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\", catKeyA, catKeyB, this._compareDirection));\n }\n }\n\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\n if (koqKeyA !== koqKeyB) {\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\", koqKeyA, koqKeyB, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n for (const mixinA of entityA.mixins) {\n if (-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\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (mixinA.appliesTo || mixinB.appliesTo) {\n const appliesToA = mixinA.appliesTo?.fullName;\n const appliesToB = mixinB.appliesTo?.fullName;\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (relationshipA.strength !== relationshipB.strength) {\n const strengthAString = strengthToString(relationshipA.strength);\n const strengthBString = strengthToString(relationshipB.strength);\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\n }\n\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (constraintA.constraintClasses) {\n for (const classA of constraintA.constraintClasses) {\n if (!constraintB.constraintClasses || -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) {\n await Promise.all(promises);\n return;\n }\n\n if (constraintA.multiplicity || constraintB.multiplicity) {\n const multiplicityA = constraintA.multiplicity.toString();\n const multiplicityB = constraintB.multiplicity.toString();\n if (multiplicityA !== multiplicityB)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\n }\n\n if (constraintA.roleLabel !== constraintB.roleLabel)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\n\n if (constraintA.polymorphic !== constraintB.polymorphic)\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\n\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\n const abstractA = constraintA.abstractConstraint?.fullName;\n const abstractB = constraintB.abstractConstraint?.fullName;\n if (abstractA !== abstractB) {\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (containerA.customAttributes) {\n for (const ca of containerA.customAttributes) {\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n for (const enumeratorA of enumA.enumerators) {\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\n if (!enumeratorB) {\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\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) {\n await Promise.all(promises);\n return;\n }\n if (enumA.type !== enumB.type) {\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (enumA.isStrict !== enumB.isStrict)\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (koqA.presentationFormats) {\n for (const lazyUnitA of koqA.presentationFormats) {\n const unitA = OverrideFormat.isOverrideFormat(lazyUnitA) ? lazyUnitA : await lazyUnitA;\n\n let itemFound = false;\n for(const lazyUnitB of koqB.presentationFormats) {\n const unitB = OverrideFormat.isOverrideFormat(lazyUnitB) ? lazyUnitB : await lazyUnitB;\n if (this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)) {\n itemFound = true;\n break;\n }\n }\n\n if (!itemFound) {\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\n }\n }\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (koqA.relativeError !== koqB.relativeError) {\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\n }\n\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\n const unitNameA = koqA.persistenceUnit?.fullName;\n const unitNameB = koqB.persistenceUnit?.fullName;\n if (unitNameA !== unitNameB) {\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\n if (!eqByName)\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (categoryA.priority !== categoryB.priority)\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, 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): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n promises.push(this.compareFormatUnits(formatA, formatB));\n\n if (this._compareDirection === SchemaCompareDirection.Backward) {\n await Promise.all(promises);\n return;\n }\n\n if (formatA.roundFactor !== formatB.roundFactor)\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\n\n if (formatA.type !== formatB.type) {\n const typeAString = formatA.type;\n const typeBString = formatB.type;\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.precision !== formatB.precision)\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\n\n if (formatA.minWidth !== formatB.minWidth)\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\n\n if (formatA.scientificType !== formatB.scientificType) {\n const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;\n const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\n }\n\n if (formatA.showSignOption !== formatB.showSignOption) {\n const optionA = formatA.showSignOption;\n const optionB = formatB.showSignOption;\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\n }\n\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\n\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\n\n if (formatA.uomSeparator !== formatB.uomSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\n\n if (formatA.stationSeparator !== formatB.stationSeparator)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\n\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\n\n if (formatA.formatTraits !== formatB.formatTraits) {\n const traitsA = formatTraitsToArray(formatA.formatTraits);\n const traitsB = formatTraitsToArray(formatB.formatTraits);\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\n }\n\n if (formatA.spacer !== formatB.spacer)\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\n\n if (formatA.includeZero !== formatB.includeZero)\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (unitA.phenomenon || unitB.phenomenon) {\n const fullNameA = unitA.phenomenon?.fullName;\n const fullNameB = unitB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.unitSystem || unitB.unitSystem) {\n const fullNameA = unitA.unitSystem?.fullName;\n const fullNameB = unitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (unitA.definition !== unitB.definition)\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\n\n if (unitA.numerator !== unitB.numerator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\n\n if (unitA.denominator !== unitB.denominator)\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\n\n if (unitA.offset !== unitB.offset)\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\n const fullNameA = invertedUnitA.unitSystem?.fullName;\n const fullNameB = invertedUnitB.unitSystem?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\n }\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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n if (phenomenonA.definition !== phenomenonB.definition)\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, 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): Promise<void> {\n if (this._compareDirection === SchemaCompareDirection.Backward)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n if (constantA.phenomenon || constantB.phenomenon) {\n const fullNameA = constantA.phenomenon?.fullName;\n const fullNameB = constantB.phenomenon?.fullName;\n if (fullNameA !== fullNameB) {\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\n if (!eqByName)\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\n }\n }\n\n if (constantA.definition !== constantB.definition)\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\n\n if (constantA.numerator !== constantB.numerator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\n\n if (constantA.denominator !== constantB.denominator)\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, 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 if (propertyA.isArray()) {\n const minOccursB = 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.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.isEnumeration() ? propertyB.enumeration : undefined;\n if (propertyA.enumeration || enumerationB) {\n const enumA = propertyA.enumeration?.fullName;\n const enumB = enumerationB?.fullName;\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.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.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.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.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.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.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.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.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.structClass;\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\n if (structA || structB) {\n const structNameA = structA.fullName;\n const structNameB = structB?.fullName;\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, enumA: Enumeration, enumB: Enumeration): Promise<void> {\n const promises: Array<Promise<void>> = [];\n\n if (!areStringsEqual(enumeratorA.description, enumeratorB.description))\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\n\n if (!areStringsEqual(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): Promise<void> {\n if (!formatA.units)\n return;\n\n const promises: Array<Promise<void>> = [];\n\n for (const [lazyUnitA, labelA] of formatA.units) {\n const unitA = await lazyUnitA;\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA, u[0], formatA.schema.name, formatB.schema.name)) : undefined;\n if (!unitB) {\n promises.push(this._reporter.reportFormatUnitMissing(formatA, [unitA, labelA], this._compareDirection));\n continue;\n }\n\n if (this._compareDirection === SchemaCompareDirection.Backward)\n continue;\n\n if (labelA !== unitB[1]) {;\n const labelB = unitB[1];\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitA, labelA, labelB, this._compareDirection));\n }\n }\n\n await Promise.all(promises);\n }\n\n private areOverrideFormatsSameByName(\n itemKeyA: Format | OverrideFormat,\n itemKeyB: Format | OverrideFormat,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n if (itemKeyA.units) {\n for (const unitA of itemKeyA.units) {\n if (!itemKeyB.units\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\n && unitA[1] === unitB[1]))\n return false;\n }\n }\n\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\n\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\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> | SchemaItem | undefined,\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\n topLevelSchemaNameA: string,\n topLevelSchemaNameB: string | undefined ): boolean {\n\n const equalByName = this.areEqualByName(itemKeyA, itemKeyB);\n\n const schemaNameA = itemKeyA\n ? SchemaItem.isSchemaItem(itemKeyA)\n ? itemKeyA.schema.name\n : itemKeyA.schemaName\n : undefined;\n\n const schemaNameB = itemKeyB\n ? SchemaItem.isSchemaItem(itemKeyB)\n ? itemKeyB.schema.name\n : itemKeyB.schemaName\n : undefined;\n\n return (equalByName && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (equalByName && 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(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\n if (containerB && containerB.customAttributes) {\n for (const [_className, attributeB] of containerB.customAttributes) {\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\n\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\n return Object.keys(attributeA).every((propertyName) => {\n const valueA = attributeA[propertyName];\n const valueB = attributeB[propertyName];\n\n // If propertyName is class name, they don't need to be compared as this has been done\n // in the areItemsSameByName function.\n if(propertyName === \"className\")\n return true;\n\n return deepEquals(valueA, valueB);\n });\n }\n }\n }\n return false;\n }\n}\n\n/**\n * Compares two values on their deep equality.\n * @param a left side to compare\n * @param b right side to compare\n * @returns true if they are deeply equal, otherwise false.\n */\nfunction deepEquals(a: unknown, b: unknown): boolean {\n if(Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((value, index) => {\n return deepEquals(value, b[index]);\n });\n }\n if(isObject(a) && isObject(b)) {\n const propertiesA = Object.keys(a);\n const propertiesB = Object.keys(b);\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\n return deepEquals(a[propertyName], b[propertyName]);\n });\n }\n return a === b;\n}\n\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\n return typeof value === \"object\";\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-editing",
3
- "version": "5.1.0-dev.9",
3
+ "version": "5.2.0-dev.2",
4
4
  "description": "ECSchema editing and validation API",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-editing.js",
@@ -23,8 +23,8 @@
23
23
  "url": "http://www.bentley.com"
24
24
  },
25
25
  "devDependencies": {
26
- "@bentley/units-schema": "^1.0.8",
27
- "@itwin/eslint-plugin": "5.0.0-dev.1",
26
+ "@bentley/units-schema": "^1.0.9",
27
+ "@itwin/eslint-plugin": "5.2.2-dev.2",
28
28
  "@types/benchmark": "^2.1.0",
29
29
  "@types/chai": "4.3.1",
30
30
  "@types/chai-as-promised": "^7",
@@ -36,22 +36,22 @@
36
36
  "chai": "^4.3.10",
37
37
  "chai-as-promised": "^7.1.1",
38
38
  "cpx2": "^8.0.0",
39
- "eslint": "^9.13.0",
39
+ "eslint": "^9.31.0",
40
40
  "mocha": "^11.1.0",
41
41
  "nyc": "^17.1.0",
42
42
  "rimraf": "^6.0.1",
43
43
  "sinon": "^17.0.2",
44
44
  "typescript": "~5.6.2",
45
- "@itwin/build-tools": "5.1.0-dev.9",
46
- "@itwin/core-common": "5.1.0-dev.9",
47
- "@itwin/ecschema-metadata": "5.1.0-dev.9",
48
- "@itwin/core-bentley": "5.1.0-dev.9",
49
- "@itwin/core-quantity": "5.1.0-dev.9"
45
+ "@itwin/ecschema-metadata": "5.2.0-dev.2",
46
+ "@itwin/core-bentley": "5.2.0-dev.2",
47
+ "@itwin/build-tools": "5.2.0-dev.2",
48
+ "@itwin/core-common": "5.2.0-dev.2",
49
+ "@itwin/core-quantity": "5.2.0-dev.2"
50
50
  },
51
51
  "peerDependencies": {
52
- "@itwin/core-bentley": "5.1.0-dev.9",
53
- "@itwin/core-quantity": "5.1.0-dev.9",
54
- "@itwin/ecschema-metadata": "5.1.0-dev.9"
52
+ "@itwin/core-bentley": "5.2.0-dev.2",
53
+ "@itwin/core-quantity": "5.2.0-dev.2",
54
+ "@itwin/ecschema-metadata": "5.2.0-dev.2"
55
55
  },
56
56
  "nyc": {
57
57
  "extends": "./node_modules/@itwin/build-tools/.nycrc"
@@ -64,6 +64,7 @@
64
64
  "copy:test-assets": "cpx \"./src/test/assets/**/*\" ./lib/cjs/test/assets",
65
65
  "extract-api": "betools extract-api --entry=ecschema-editing",
66
66
  "lint": "eslint \"./src/**/*.ts\" 1>&2",
67
+ "lint-deprecation": "eslint --fix -f visualstudio --no-inline-config -c ../../common/config/eslint/eslint.config.deprecation-policy.js \"./src/**/*.ts\"",
67
68
  "test": "mocha",
68
69
  "docs": "betools docs --json=../../generated-docs/core/ecschema-editing/file.json --tsIndexFile=./ecschema-editing.ts --onlyJson",
69
70
  "cover": "nyc npm -s test",