@itwin/ecschema-editing 4.10.0-dev.3 → 4.10.0-dev.30
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 +29 -1
- package/lib/cjs/Differencing/Errors.d.ts +3 -3
- package/lib/cjs/Differencing/Errors.d.ts.map +1 -1
- package/lib/cjs/Differencing/Errors.js.map +1 -1
- package/lib/cjs/Differencing/SchemaConflicts.d.ts +18 -15
- package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaConflicts.js +2 -0
- package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts +3 -2
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +31 -12
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.d.ts +16 -5
- package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.js +1 -0
- package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifferenceValidator.d.ts +2 -2
- package/lib/cjs/Differencing/SchemaDifferenceValidator.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDifferenceValidator.js +56 -40
- package/lib/cjs/Differencing/SchemaDifferenceValidator.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifferenceVisitor.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDifferenceVisitor.js +2 -0
- package/lib/cjs/Differencing/SchemaDifferenceVisitor.js.map +1 -1
- package/lib/cjs/Editing/KindOfQuantities.d.ts +1 -2
- package/lib/cjs/Editing/KindOfQuantities.d.ts.map +1 -1
- package/lib/cjs/Editing/KindOfQuantities.js +2 -4
- package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
- package/lib/cjs/Editing/Properties.d.ts.map +1 -1
- package/lib/cjs/Editing/Properties.js +4 -0
- package/lib/cjs/Editing/Properties.js.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.js +4 -2
- package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
- package/lib/cjs/Merging/Edits/RenameEditHandler.js +2 -2
- package/lib/cjs/Merging/Edits/RenameEditHandler.js.map +1 -1
- package/lib/cjs/Merging/Edits/SkipEditHandler.d.ts.map +1 -1
- package/lib/cjs/Merging/Edits/SkipEditHandler.js +5 -4
- package/lib/cjs/Merging/Edits/SkipEditHandler.js.map +1 -1
- package/lib/cjs/Merging/KindOfQuantityMerger.d.ts +7 -2
- package/lib/cjs/Merging/KindOfQuantityMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/KindOfQuantityMerger.js +37 -15
- package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
- package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/PropertyMerger.js +10 -29
- package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.js +9 -3
- package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaMergingVisitor.d.ts +6 -1
- package/lib/cjs/Merging/SchemaMergingVisitor.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaMergingVisitor.js +9 -0
- package/lib/cjs/Merging/SchemaMergingVisitor.js.map +1 -1
- package/lib/cjs/Merging/SchemaMergingWalker.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaMergingWalker.js +1 -0
- package/lib/cjs/Merging/SchemaMergingWalker.js.map +1 -1
- package/lib/cjs/Merging/Utils.d.ts +6 -1
- package/lib/cjs/Merging/Utils.d.ts.map +1 -1
- package/lib/cjs/Merging/Utils.js +24 -1
- package/lib/cjs/Merging/Utils.js.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.js +6 -6
- package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaMergingWalker.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMergingWalker.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAA0D;AAC1D,qFAAiF;AACjF,uEAAqH;AAErH;;;;GAIG;AACH,MAAa,mBAAoB,SAAQ,gDAAsB;IAE7D;;;;;;;OAOG;IACa,KAAK,CAAC,QAAQ,CAAC,WAAuC,EAAE,UAA2B;QAEjG,MAAM,YAAY,GAAG,CAAC,UAAsB,EAAE,EAAE;YAC9C,OAAO,CAAC,KAA0B,EAAE,EAAE;gBACpC,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;YAC7F,CAAC,CAAC;QACJ,CAAC,CAAC;QAEF,OAAO,KAAK,CAAC,QAAQ,CAAC;YACpB,wDAAwD;YACxD,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,mCAAgB,CAAC,MAAM,CAAC,CAAC;YAC5D,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,mCAAgB,CAAC,eAAe,CAAC,CAAC;YAErE,+CAA+C;YAC/C,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,UAAU,CAAC,CAAC;YAC9D,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,gBAAgB,CAAC,CAAC;YACpE,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,WAAW,CAAC,CAAC;YAC/D,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,mCAAgB,CAAC,UAAU,CAAC,CAAC;YAChE,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,UAAU,CAAC,CAAC;YAC9D,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,IAAI,CAAC,CAAC;YACxD,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,YAAY,CAAC,CAAC;YAChE,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,MAAM,CAAC,CAAC;YAC1D,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,cAAc,CAAC,CAAC;YAClE,GAAG,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,kCAAc,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"SchemaMergingWalker.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMergingWalker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaDifferenceWalker } from \"../Differencing/SchemaDifferenceVisitor\";\r\nimport { AnySchemaDifference, DifferenceType, SchemaOtherTypes, SchemaType } from \"../Differencing/SchemaDifference\";\r\n\r\n/**\r\n * A walker that traverses the schema differences in a certain oder and invokes the appropriate\r\n * visitor method for each kind of schema difference.\r\n * @internal\r\n */\r\nexport class SchemaMergingWalker extends SchemaDifferenceWalker {\r\n\r\n /**\r\n * Traverses the schema differences and calls the appropriate method on the visitor.\r\n * This method overrides the derived class method to apply some ordering how the\r\n * differences are traversed.\r\n *\r\n * @param differences The differences to traverse.\r\n * @param changeType Optional type of change to filter by.\r\n */\r\n public override async traverse(differences: Array<AnySchemaDifference>, changeType?: DifferenceType): Promise<void> {\r\n\r\n const filterByType = (schemaType: SchemaType) => {\r\n return (entry: AnySchemaDifference) => {\r\n return entry.schemaType === schemaType && (!changeType || entry.changeType === changeType);\r\n };\r\n };\r\n\r\n return super.traverse([\r\n // First the schema related differences are traversed...\r\n ...differences.filter(filterByType(SchemaOtherTypes.Schema)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.SchemaReference)),\r\n\r\n // Then the schema items (excluding classes)...\r\n ...differences.filter(filterByType(SchemaItemType.UnitSystem)),\r\n ...differences.filter(filterByType(SchemaItemType.PropertyCategory)),\r\n ...differences.filter(filterByType(SchemaItemType.Enumeration)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.Enumerator)),\r\n ...differences.filter(filterByType(SchemaItemType.Phenomenon)),\r\n ...differences.filter(filterByType(SchemaItemType.Unit)),\r\n ...differences.filter(filterByType(SchemaItemType.InvertedUnit)),\r\n ...differences.filter(filterByType(SchemaItemType.Format)),\r\n ...differences.filter(filterByType(SchemaItemType.KindOfQuantity)),\r\n ...differences.filter(filterByType(SchemaItemType.Constant)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.KindOfQuantityPresentationFormat)),\r\n\r\n // Followed by classes and class related differences...\r\n ...differences.filter(filterByType(SchemaItemType.CustomAttributeClass)),\r\n ...differences.filter(filterByType(SchemaItemType.Mixin)),\r\n ...differences.filter(filterByType(SchemaItemType.StructClass)),\r\n ...differences.filter(filterByType(SchemaItemType.EntityClass)),\r\n ...differences.filter(filterByType(SchemaItemType.RelationshipClass)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.EntityClassMixin)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.RelationshipConstraint)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.RelationshipConstraintClass)),\r\n ...differences.filter(filterByType(SchemaOtherTypes.Property)),\r\n\r\n // And then the custom attributes.\r\n ...differences.filter(filterByType(SchemaOtherTypes.CustomAttributeInstance)),\r\n ]);\r\n }\r\n}\r\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { ECClasses } from "../Editing/ECClasses";
|
|
1
2
|
import type { SchemaMergeContext } from "./SchemaMerger";
|
|
2
|
-
import { SchemaItem, SchemaItemKey } from "@itwin/ecschema-metadata";
|
|
3
|
+
import { ECClass, SchemaItem, SchemaItemKey } from "@itwin/ecschema-metadata";
|
|
3
4
|
/**
|
|
4
5
|
* Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.
|
|
5
6
|
* @internal
|
|
@@ -15,4 +16,8 @@ export declare function updateSchemaItemKey(context: SchemaMergeContext, referen
|
|
|
15
16
|
* @internal
|
|
16
17
|
*/
|
|
17
18
|
export declare function locateSchemaItem(context: SchemaMergeContext, itemName: string, schemaType: string): Promise<SchemaItem>;
|
|
19
|
+
/**
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
export declare function getClassEditor(context: SchemaMergeContext, ecClass: ECClass | SchemaItemKey): Promise<ECClasses>;
|
|
18
23
|
//# sourceMappingURL=Utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/Merging/Utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAkD,UAAU,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/Merging/Utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAkD,UAAU,EAAE,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAE9I;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAG5F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,0BAYvF;AAgBD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAQvG;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAmBtH"}
|
package/lib/cjs/Merging/Utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.locateSchemaItem = exports.updateSchemaItemKey = exports.updateSchemaItemFullName = void 0;
|
|
3
|
+
exports.getClassEditor = exports.locateSchemaItem = exports.updateSchemaItemKey = exports.updateSchemaItemFullName = void 0;
|
|
4
4
|
const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
|
|
5
5
|
/**
|
|
6
6
|
* Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.
|
|
@@ -53,4 +53,27 @@ async function locateSchemaItem(context, itemName, schemaType) {
|
|
|
53
53
|
return schemaItem;
|
|
54
54
|
}
|
|
55
55
|
exports.locateSchemaItem = locateSchemaItem;
|
|
56
|
+
/**
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
async function getClassEditor(context, ecClass) {
|
|
60
|
+
const schemaItemType = ecschema_metadata_1.ECClass.isECClass(ecClass)
|
|
61
|
+
? ecClass.schemaItemType
|
|
62
|
+
: (await context.editor.schemaContext.getSchemaItem(ecClass))?.schemaItemType;
|
|
63
|
+
switch (schemaItemType) {
|
|
64
|
+
case ecschema_metadata_1.SchemaItemType.EntityClass:
|
|
65
|
+
return context.editor.entities;
|
|
66
|
+
case ecschema_metadata_1.SchemaItemType.Mixin:
|
|
67
|
+
return context.editor.mixins;
|
|
68
|
+
case ecschema_metadata_1.SchemaItemType.StructClass:
|
|
69
|
+
return context.editor.structs;
|
|
70
|
+
case ecschema_metadata_1.SchemaItemType.CustomAttributeClass:
|
|
71
|
+
return context.editor.customAttributes;
|
|
72
|
+
case ecschema_metadata_1.SchemaItemType.RelationshipClass:
|
|
73
|
+
return context.editor.relationships;
|
|
74
|
+
default:
|
|
75
|
+
throw new Error("SchemaItemType not supported");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.getClassEditor = getClassEditor;
|
|
56
79
|
//# sourceMappingURL=Utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Merging/Utils.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Merging/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { ECClasses } from \"../Editing/ECClasses\";\r\nimport type { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { ECClass, ECObjectsError, ECObjectsStatus, SchemaContext, SchemaItem, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.\r\n * @internal\r\n */\r\nexport async function updateSchemaItemFullName(context: SchemaMergeContext, reference: string) {\r\n const schemaItemKey = await updateSchemaItemKey(context, reference);\r\n return schemaItemKey.fullName;\r\n}\r\n\r\n/**\r\n * Updates the given reference if it refers to a SchemaItem in the source Schema and\r\n * returns a SchemaItemKey. If any other schema is referred the reference is not change.\r\n * @internal\r\n */\r\nexport async function updateSchemaItemKey(context: SchemaMergeContext, reference: string) {\r\n const [schemaName, itemName] = SchemaItem.parseFullName(reference);\r\n if (context.sourceSchemaKey.compareByName(schemaName)) {\r\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, context.targetSchemaKey));\r\n }\r\n\r\n const referencedSchema = await context.targetSchema.getReference(schemaName);\r\n if (referencedSchema !== undefined) {\r\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, referencedSchema.schemaKey));\r\n }\r\n\r\n throw new Error(`Cannot locate referenced schema item ${reference}`);\r\n}\r\n\r\n/**\r\n * To support case insensitivity for schema items, the given key is checked if there\r\n * exists an item for it.\r\n * @internal\r\n */\r\nasync function resolveSchemaItemKey(schemaContext: SchemaContext, itemKey: SchemaItemKey): Promise<SchemaItemKey> {\r\n const item = await schemaContext.getSchemaItem(itemKey);\r\n if (item === undefined) {\r\n // If the schema item hasn't been created yet, we have to trust the given key is correctly spelled.\r\n return itemKey;\r\n }\r\n return item.key;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function locateSchemaItem(context: SchemaMergeContext, itemName: string, schemaType: string) {\r\n const schemaItemKey = new SchemaItemKey(itemName, context.targetSchemaKey);\r\n const schemaItem = await context.editor.schemaContext.getSchemaItem(schemaItemKey);\r\n if (schemaItem === undefined) {\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `${schemaType} ${schemaItemKey.fullName} not found in schema context.`);\r\n }\r\n\r\n return schemaItem;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function getClassEditor(context: SchemaMergeContext, ecClass: ECClass | SchemaItemKey): Promise<ECClasses> {\r\n const schemaItemType = ECClass.isECClass(ecClass)\r\n ? ecClass.schemaItemType\r\n : (await context.editor.schemaContext.getSchemaItem<ECClass>(ecClass))?.schemaItemType;\r\n\r\n switch(schemaItemType) {\r\n case SchemaItemType.EntityClass:\r\n return context.editor.entities;\r\n case SchemaItemType.Mixin:\r\n return context.editor.mixins;\r\n case SchemaItemType.StructClass:\r\n return context.editor.structs;\r\n case SchemaItemType.CustomAttributeClass:\r\n return context.editor.customAttributes;\r\n case SchemaItemType.RelationshipClass:\r\n return context.editor.relationships;\r\n default:\r\n throw new Error(\"SchemaItemType not supported\");\r\n }\r\n}\r\n"]}
|
|
@@ -396,8 +396,8 @@ class SchemaComparer {
|
|
|
396
396
|
if (formatA.roundFactor !== formatB.roundFactor)
|
|
397
397
|
promises.push(this._reporter.reportFormatDelta(formatA, "roundFactor", formatA.roundFactor, formatB.roundFactor, this._compareDirection));
|
|
398
398
|
if (formatA.type !== formatB.type) {
|
|
399
|
-
const typeAString =
|
|
400
|
-
const typeBString =
|
|
399
|
+
const typeAString = formatA.type;
|
|
400
|
+
const typeBString = formatB.type;
|
|
401
401
|
promises.push(this._reporter.reportFormatDelta(formatA, "type", typeAString, typeBString, this._compareDirection));
|
|
402
402
|
}
|
|
403
403
|
if (formatA.precision !== formatB.precision)
|
|
@@ -405,13 +405,13 @@ class SchemaComparer {
|
|
|
405
405
|
if (formatA.minWidth !== formatB.minWidth)
|
|
406
406
|
promises.push(this._reporter.reportFormatDelta(formatA, "minWidth", formatA.minWidth, formatB.minWidth, this._compareDirection));
|
|
407
407
|
if (formatA.scientificType !== formatB.scientificType) {
|
|
408
|
-
const typeAString = formatA.scientificType !== undefined ?
|
|
409
|
-
const typeBString = formatB.scientificType !== undefined ?
|
|
408
|
+
const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;
|
|
409
|
+
const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;
|
|
410
410
|
promises.push(this._reporter.reportFormatDelta(formatA, "scientificType", typeAString, typeBString, this._compareDirection));
|
|
411
411
|
}
|
|
412
412
|
if (formatA.showSignOption !== formatB.showSignOption) {
|
|
413
|
-
const optionA =
|
|
414
|
-
const optionB =
|
|
413
|
+
const optionA = formatA.showSignOption;
|
|
414
|
+
const optionB = formatB.showSignOption;
|
|
415
415
|
promises.push(this._reporter.reportFormatDelta(formatA, "showSignOption", optionA, optionB, this._compareDirection));
|
|
416
416
|
}
|
|
417
417
|
if (formatA.decimalSeparator !== formatB.decimalSeparator)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaComparer.js","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Comparison\r\n */\r\n\r\nimport {\r\n AnyClass, AnyEnumerator, AnyProperty, classModifierToString, Constant, containerTypeToString, CustomAttribute, CustomAttributeClass,\r\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\r\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\r\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { formatTraitsToArray, formatTypeToString, scientificTypeToString, showSignOptionToString } from \"@itwin/core-quantity\";\r\nimport { ISchemaCompareReporter } from \"./SchemaCompareReporter\";\r\nimport { SchemaCompareResultDelegate } from \"./SchemaCompareResultDelegate\";\r\nimport { SchemaCompareVisitor } from \"./SchemaCompareVisitor\";\r\nimport { SchemaWalker } from \"./SchemaWalker\";\r\n\r\n/**\r\n * Enum that identifies if Schema A is being iterated (Forward) or\r\n * Schema B is being iterated (Backward);\r\n * @alpha\r\n */\r\nexport enum SchemaCompareDirection {\r\n Forward = 0,\r\n Backward = 1,\r\n}\r\n/**\r\n * Interface for comparing EC Schemas.\r\n * @alpha\r\n */\r\nexport interface ISchemaComparer {\r\n compareSchemas(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaProps(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): void;\r\n compareClasses(classA: AnyClass, classB: AnyClass): void;\r\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\r\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\r\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\r\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\r\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\r\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\r\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\r\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\r\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\r\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\r\n compareFormats(formatA: Format, formatB: Format): void;\r\n compareUnits(unitA: Unit, unitB: Unit): void;\r\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\r\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\r\n compareConstants(constantA: Constant, constantB: Constant): void;\r\n}\r\n\r\nfunction labelsMatch(label1?: string, label2?: string) {\r\n label1 = label1 === undefined ? \"\" : label1;\r\n label2 = label2 === undefined ? \"\" : label2;\r\n return label1 === label2;\r\n}\r\n\r\n/**\r\n * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects\r\n * specified.\r\n * @alpha\r\n */\r\nexport class SchemaComparer {\r\n private _compareDirection: SchemaCompareDirection;\r\n private _reporter!: SchemaCompareResultDelegate;\r\n private _reporters: ISchemaCompareReporter[];\r\n\r\n /**\r\n * Initializes a new SchemaComparer instance.\r\n * @param reporters The [[IDiagnosticReporter]] object(s) to use to report the results.\r\n */\r\n constructor(...reporters: ISchemaCompareReporter[]) {\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporters = reporters;\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemas(schemaA: Schema, schemaB: Schema) {\r\n this._reporter = new SchemaCompareResultDelegate(schemaA, schemaB, ...this._reporters);\r\n let visitor = new SchemaCompareVisitor(this, schemaB);\r\n let walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaA);\r\n\r\n this._compareDirection = SchemaCompareDirection.Backward;\r\n\r\n visitor = new SchemaCompareVisitor(this, schemaA);\r\n walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaB);\r\n\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporter.compareComplete();\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences between property values.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemaProps(schemaA: Schema, schemaB: Schema): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const ref of schemaA.references) {\r\n const refB = await schemaB.getReference(ref.fullName);\r\n if (!refB)\r\n promises.push(this._reporter.reportSchemaReferenceMissing(schemaA, ref, this._compareDirection));\r\n else if (!refB.schemaKey.matches(ref.schemaKey))\r\n promises.push(this._reporter.reportSchemaReferenceDelta(schemaA, ref, ref.schemaKey.version.toString(), refB.schemaKey.version.toString(), this._compareDirection));\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaA.schemaKey.toString() !== schemaB.schemaKey.toString())\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"schemaKey\", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));\r\n\r\n if (schemaA.alias !== schemaB.alias)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"alias\", schemaA.alias, schemaB.alias, this._compareDirection));\r\n\r\n if (schemaA.description !== schemaB.description)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"description\", schemaA.description, schemaB.description, this._compareDirection));\r\n\r\n if (schemaA.label !== schemaB.label)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"label\", schemaA.label, schemaB.label, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two SchemaItems to identify differences between property values.\r\n * @param schemaItemA The first SchemaItem.\r\n * @param schemaItemB The second SchemaItem.\r\n */\r\n public async compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n if (!schemaItemB) {\r\n promises.push(this._reporter.reportSchemaItemMissing(schemaItemA, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\r\n const aType = schemaItemA.schemaItemType;\r\n const bType = schemaItemB.schemaItemType;\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (schemaItemA.description !== schemaItemB.description)\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(schemaItemA.label, schemaItemB.label))\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECClasses to identify differences between property values.\r\n * @param classA The first ECClass.\r\n * @param classB The second ECClass.\r\n */\r\n public async compareClasses(classA: AnyClass, classB: AnyClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (classA.modifier !== classB.modifier) {\r\n const aMod = classModifierToString(classA.modifier);\r\n const bMod = classModifierToString(classB.modifier);\r\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\r\n }\r\n\r\n if (classA.baseClass || classB.baseClass) {\r\n const fullNameA = classA.baseClass?.fullName;\r\n const fullNameB = classB.baseClass?.fullName;\r\n\r\n if (fullNameA !== fullNameB) {\r\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\r\n if (!areSameByName) {\r\n const baseA = await classA.baseClass as AnyClass;\r\n const baseB = await classB.baseClass as AnyClass;\r\n promises.push(this._reporter.reportBaseClassDelta(classA, baseA, baseB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECProperties to identify differences between property values.\r\n * @param propertyA The first ECProperty.\r\n * @param propertyB The second ECProperty.\r\n */\r\n public async compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (!propertyB) {\r\n promises.push(this._reporter.reportPropertyMissing(propertyA, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\r\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\r\n if (propertyTypeA !== propertyTypeB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (!labelsMatch(propertyA.label, propertyB.label))\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\r\n\r\n if (propertyA.description !== propertyB.description)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, propertyB.description, this._compareDirection));\r\n\r\n if (propertyA.isReadOnly !== propertyB.isReadOnly)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));\r\n\r\n if (propertyA.priority !== propertyB.priority)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, propertyB.priority, this._compareDirection));\r\n\r\n if (propertyA.category || propertyB.category) {\r\n const catKeyA = propertyA.category?.fullName;\r\n const catKeyB = propertyB.category?.fullName;\r\n if (catKeyA !== catKeyB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.category, propertyB.category, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyA, catKeyB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\r\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\r\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\r\n if (koqKeyA !== koqKeyB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.kindOfQuantity, propertyB.kindOfQuantity, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyA, koqKeyB, this._compareDirection));\r\n }\r\n }\r\n\r\n promises.push(this.comparePropertyType(propertyA, propertyB));\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two EntityClass objects to identify differences between property values.\r\n * @param entityA\r\n * @param entityB\r\n */\r\n public async compareEntityClasses(entityA: EntityClass, entityB: EntityClass): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const mixinA of entityA.mixins) {\r\n if (-1 === entityB.mixins.findIndex((mixinB) => this.areItemsSameByName(mixinA, mixinB, entityA.schema.name, entityB.schema.name)))\r\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Mixin objects to identify differences between property values.\r\n * @param mixinA\r\n * @param mixinB\r\n */\r\n public async compareMixins(mixinA: Mixin, mixinB: Mixin): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (mixinA.appliesTo || mixinB.appliesTo) {\r\n const appliesToA = mixinA.appliesTo?.fullName;\r\n const appliesToB = mixinB.appliesTo?.fullName;\r\n if (appliesToA !== appliesToB) {\r\n const areSameByName = this.areItemsSameByName(mixinA.appliesTo, mixinB.appliesTo, mixinA.schema.name, mixinB.schema.name);\r\n if (!areSameByName)\r\n await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Compares two RelationshipClass objects to identify differences between property values.\r\n * @param relationshipA\r\n * @param relationshipB\r\n */\r\n public async compareRelationshipClasses(relationshipA: RelationshipClass, relationshipB: RelationshipClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (relationshipA.strength !== relationshipB.strength) {\r\n const strengthAString = strengthToString(relationshipA.strength);\r\n const strengthBString = strengthToString(relationshipB.strength);\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\r\n }\r\n\r\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\r\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\r\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strengthDirection\", directionAString, directionBString, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two RelationshipConstraint objects to identify differences between property values.\r\n * @param relationshipConstraintA\r\n * @param relationshipConstraintB\r\n */\r\n public async compareRelationshipConstraints(constraintA: RelationshipConstraint, constraintB: RelationshipConstraint): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (constraintA.constraintClasses) {\r\n for (const classA of constraintA.constraintClasses) {\r\n if (!constraintB.constraintClasses || -1 === constraintB.constraintClasses.findIndex((classB) =>\r\n this.areItemsSameByName(classA, classB, constraintA.schema.name, constraintB.schema.name)))\r\n promises.push(this._reporter.reportRelationshipConstraintClassMissing(constraintA, await classA, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (constraintA.multiplicity || constraintB.multiplicity) {\r\n const multiplicityA = constraintA.multiplicity.toString();\r\n const multiplicityB = constraintB.multiplicity.toString();\r\n if (multiplicityA !== multiplicityB)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\r\n }\r\n\r\n if (constraintA.roleLabel !== constraintB.roleLabel)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\r\n\r\n if (constraintA.polymorphic !== constraintB.polymorphic)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\r\n\r\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\r\n const abstractA = constraintA.abstractConstraint?.fullName;\r\n const abstractB = constraintB.abstractConstraint?.fullName;\r\n if (abstractA !== abstractB) {\r\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, constraintA.schema.name, constraintB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeClass objects to identify differences between property values.\r\n * @param customAttributeClassA\r\n * @param customAttributeClassB\r\n */\r\n public async compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\r\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\r\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\r\n await this._reporter.reportCustomAttributeClassDelta(customAttributeClassA, \"appliesTo\", typeA, typeB, this._compareDirection);\r\n }\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeContainerProps objects to identify differences between property values.\r\n * @param containerA\r\n * @param containerB\r\n */\r\n public async compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (containerA.customAttributes) {\r\n for (const ca of containerA.customAttributes) {\r\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], containerA, containerB))\r\n promises.push(this._reporter.reportCustomAttributeInstanceClassMissing(containerA, ca[1], this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Enumeration objects to identify differences between property values.\r\n * @param enumA\r\n * @param enumB\r\n */\r\n public async compareEnumerations(enumA: Enumeration, enumB: Enumeration): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const enumeratorA of enumA.enumerators) {\r\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\r\n if (!enumeratorB) {\r\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\r\n } else if (this._compareDirection === SchemaCompareDirection.Forward) {\r\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n if (enumA.type !== enumB.type) {\r\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\r\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (enumA.isStrict !== enumB.isStrict)\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two KindOfQuantity objects to identify differences between property values.\r\n * @param koqA\r\n * @param koqB\r\n */\r\n public async compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (koqA.presentationFormats) {\r\n for (const unitA of koqA.presentationFormats) {\r\n if (-1 === koqB.presentationFormats.findIndex((unitB) => this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)))\r\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (koqA.relativeError !== koqB.relativeError) {\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\r\n }\r\n\r\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\r\n const unitNameA = koqA.persistenceUnit?.fullName;\r\n const unitNameB = koqB.persistenceUnit?.fullName;\r\n if (unitNameA !== unitNameB) {\r\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"persistenceUnit\", unitNameA, unitNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two PropertyCategory objects to identify differences between property values.\r\n * @param categoryA\r\n * @param categoryB\r\n */\r\n public async comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (categoryA.priority !== categoryB.priority)\r\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Format objects to identify differences between property values.\r\n * @param formatA\r\n * @param formatB\r\n */\r\n public async compareFormats(formatA: Format, formatB: Format): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n promises.push(this.compareFormatUnits(formatA, formatB));\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (formatA.roundFactor !== formatB.roundFactor)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\r\n\r\n if (formatA.type !== formatB.type) {\r\n const typeAString = formatTypeToString(formatA.type);\r\n const typeBString = formatTypeToString(formatB.type);\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (formatA.precision !== formatB.precision)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\r\n\r\n if (formatA.minWidth !== formatB.minWidth)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\r\n\r\n if (formatA.scientificType !== formatB.scientificType) {\r\n const typeAString = formatA.scientificType !== undefined ? scientificTypeToString(formatA.scientificType) : undefined;\r\n const typeBString = formatB.scientificType !== undefined ? scientificTypeToString(formatB.scientificType) : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (formatA.showSignOption !== formatB.showSignOption) {\r\n const optionA = showSignOptionToString(formatA.showSignOption);\r\n const optionB = showSignOptionToString(formatB.showSignOption);\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\r\n }\r\n\r\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\r\n\r\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\r\n\r\n if (formatA.uomSeparator !== formatB.uomSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\r\n\r\n if (formatA.stationSeparator !== formatB.stationSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\r\n\r\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\r\n\r\n if (formatA.formatTraits !== formatB.formatTraits) {\r\n const traitsA = formatTraitsToArray(formatA.formatTraits);\r\n const traitsB = formatTraitsToArray(formatB.formatTraits);\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\r\n }\r\n\r\n if (formatA.spacer !== formatB.spacer)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\r\n\r\n if (formatA.includeZero !== formatB.includeZero)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Unit objects to identify differences between property values.\r\n * @param unitA\r\n * @param unitB\r\n */\r\n public async compareUnits(unitA: Unit, unitB: Unit): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (unitA.phenomenon || unitB.phenomenon) {\r\n const fullNameA = unitA.phenomenon?.fullName;\r\n const fullNameB = unitB.phenomenon?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (unitA.unitSystem || unitB.unitSystem) {\r\n const fullNameA = unitA.unitSystem?.fullName;\r\n const fullNameB = unitB.unitSystem?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (unitA.definition !== unitB.definition)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\r\n\r\n if (unitA.numerator !== unitB.numerator)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\r\n\r\n if (unitA.denominator !== unitB.denominator)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\r\n\r\n if (unitA.offset !== unitB.offset)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two InvertedUnit objects to identify differences between property values.\r\n * @param invertedUnitA\r\n * @param invertedUnitB\r\n */\r\n public async compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\r\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\r\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\r\n const fullNameA = invertedUnitA.unitSystem?.fullName;\r\n const fullNameB = invertedUnitB.unitSystem?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Phenomenon objects to identify differences between property values.\r\n * @param phenomenonA\r\n * @param phenomenonB\r\n */\r\n public async comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (phenomenonA.definition !== phenomenonB.definition)\r\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Constant objects to identify differences between property values.\r\n * @param constantA\r\n * @param constantB\r\n */\r\n public async compareConstants(constantA: Constant, constantB: Constant): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (constantA.phenomenon || constantB.phenomenon) {\r\n const fullNameA = constantA.phenomenon?.fullName;\r\n const fullNameB = constantB.phenomenon?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (constantA.definition !== constantB.definition)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\r\n\r\n if (constantA.numerator !== constantB.numerator)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\r\n\r\n if (constantA.denominator !== constantB.denominator)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async comparePropertyType(propertyA: AnyProperty, propertyB: AnyProperty): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (propertyA.isArray()) {\r\n const minOccursB = propertyB.isArray() ? propertyB.minOccurs : undefined;\r\n if (propertyA.minOccurs !== minOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minOccurs\", propertyA.minOccurs, minOccursB, this._compareDirection));\r\n }\r\n\r\n const maxOccursB = propertyB.isArray() ? propertyB.maxOccurs : undefined;\r\n if (propertyA.maxOccurs !== maxOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxOccurs\", propertyA.maxOccurs, maxOccursB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isEnumeration()) {\r\n const enumerationB = propertyB.isEnumeration() ? propertyB.enumeration : undefined;\r\n if (propertyA.enumeration || enumerationB) {\r\n const enumA = propertyA.enumeration?.fullName;\r\n const enumB = enumerationB?.fullName;\r\n if (enumA !== enumB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.enumeration, enumerationB, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isNavigation()) {\r\n const strengthDirectionB = propertyB.isNavigation() ? propertyB.direction : undefined;\r\n if (propertyA.direction !== strengthDirectionB) {\r\n const dirA = strengthDirectionToString(propertyA.direction);\r\n const dirB = strengthDirectionB !== undefined ? strengthDirectionToString(strengthDirectionB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"direction\", dirA, dirB, this._compareDirection));\r\n }\r\n\r\n if (propertyA.relationshipClass) { // eslint-disable-line @typescript-eslint/no-misused-promises\r\n const relationshipClassB = propertyB.isNavigation() ? propertyB.relationshipClass : undefined;\r\n const relA = propertyA.relationshipClass.fullName;\r\n const relB = relationshipClassB ? relationshipClassB.fullName : undefined;\r\n if (relA !== relB){\r\n const areSameByName = this.areItemsSameByName(propertyA.relationshipClass, relationshipClassB, propertyA.schema.name, propertyB.schema.name);\r\n if(!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isPrimitive()) {\r\n const primitiveTypeB = propertyB.isPrimitive() ? propertyB.primitiveType : undefined;\r\n if (propertyA.primitiveType !== primitiveTypeB) {\r\n const aType = primitiveTypeToString(propertyA.primitiveType);\r\n const bType = primitiveTypeB !== undefined ? primitiveTypeToString(primitiveTypeB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"primitiveType\", aType, bType, this._compareDirection));\r\n }\r\n\r\n const minLengthB = propertyB.isPrimitive() ? propertyB.minLength : undefined;\r\n if (propertyA.minLength !== minLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minLength\", propertyA.minLength, minLengthB, this._compareDirection));\r\n }\r\n\r\n // valid for primitive and enumeration properties\r\n const maxLengthB = propertyB.isPrimitive() ? propertyB.maxLength : undefined;\r\n if (propertyA.maxLength !== maxLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxLength\", propertyA.maxLength, maxLengthB, this._compareDirection));\r\n }\r\n\r\n const minValueB = propertyB.isPrimitive() ? propertyB.minValue : undefined;\r\n if (propertyA.minValue !== minValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minValue\", propertyA.minValue, minValueB, this._compareDirection));\r\n }\r\n\r\n const maxValueB = propertyB.isPrimitive() ? propertyB.maxValue : undefined;\r\n if (propertyA.maxValue !== maxValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxValue\", propertyA.maxValue, maxValueB, this._compareDirection));\r\n }\r\n\r\n const extendedTypeNameB = propertyB.isPrimitive() ? propertyB.extendedTypeName : undefined;\r\n if (propertyA.extendedTypeName !== extendedTypeNameB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"extendedTypeName\", propertyA.extendedTypeName, extendedTypeNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isStruct()) {\r\n const structA = propertyA.structClass;\r\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\r\n if (structA || structB) {\r\n const structNameA = structA.fullName;\r\n const structNameB = structB?.fullName;\r\n if (structNameA !== structNameB) {\r\n const areSameByName = this.areItemsSameByName(structA.key, structB?.key, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareEnumerators(enumeratorA: AnyEnumerator, enumeratorB: AnyEnumerator, enumA: Enumeration, enumB: Enumeration): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (enumeratorA.description !== enumeratorB.description)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(enumeratorA.label, enumeratorB.label))\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, enumeratorB.label, this._compareDirection));\r\n\r\n // No need to compare values if the type is different (which will be reported separately)\r\n if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, enumeratorB.value, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareFormatUnits(formatA: Format, formatB: Format): Promise<void> {\r\n if (!formatA.units)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const unitA of formatA.units) {\r\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA[0], u[0], formatA.schema.name, formatB.schema.name)) : undefined;\r\n if (!unitB) {\r\n promises.push(this._reporter.reportFormatUnitMissing(formatA, unitA[0], this._compareDirection));\r\n continue;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n continue;\r\n\r\n if (unitA[1] !== unitB[1]) {\r\n const labelA = unitA[1];\r\n const labelB = unitB[1];\r\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitB[0], labelA, labelB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private areOverrideFormatsSameByName(\r\n itemKeyA: Format | OverrideFormat,\r\n itemKeyB: Format | OverrideFormat,\r\n topLevelSchemaNameA: string,\r\n topLevelSchemaNameB: string | undefined ): boolean {\r\n\r\n if (itemKeyA.units) {\r\n for (const unitA of itemKeyA.units) {\r\n if (!itemKeyB.units\r\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\r\n && unitA[1] === unitB[1]))\r\n return false;\r\n }\r\n }\r\n\r\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\r\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\r\n\r\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\r\n }\r\n\r\n /**\r\n * Compares two item keys.\r\n * @param itemKeyA item key A to compare to.\r\n * @param itemKeyB item key B to compare to.\r\n * @param topLevelSchemaNameA top level schema name in which the item A exists.\r\n * @param topLevelSchemaNameB top level schema name in which the item B exists.\r\n * @returns true if both names are the same and they come from their respective top level schema.\r\n */\r\n private areItemsSameByName(\r\n itemKeyA: Readonly<SchemaItemKey> | SchemaItem | undefined,\r\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\r\n topLevelSchemaNameA: string,\r\n topLevelSchemaNameB: string | undefined ): boolean {\r\n\r\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\r\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\r\n\r\n const schemaNameA = itemKeyA\r\n ? SchemaItem.isSchemaItem(itemKeyA)\r\n ? itemKeyA.schema.name\r\n : itemKeyA.schemaName\r\n : undefined;\r\n\r\n const schemaNameB = itemKeyB\r\n ? SchemaItem.isSchemaItem(itemKeyB)\r\n ? itemKeyB.schema.name\r\n : itemKeyB.schemaName\r\n : undefined;\r\n\r\n return (nameA === nameB && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (nameA === nameB && schemaNameA === schemaNameB);\r\n }\r\n\r\n /**\r\n * Looks for same classA in containerB using key.\r\n * @param classNameA name of the class to look for in containerB.\r\n * @param containerA container which classNameA belongs to.\r\n * @param containerB container in which to look for classNameA.\r\n * @returns true if a same classA is in containerB, otherwise false.\r\n */\r\n private containerHasClass(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\r\n if (containerB && containerB.customAttributes) {\r\n for (const [_className, attributeB] of containerB.customAttributes) {\r\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\r\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\r\n\r\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\r\n return Object.keys(attributeA).every((propertyName) => {\r\n const valueA = attributeA[propertyName];\r\n const valueB = attributeB[propertyName];\r\n\r\n // If propertyName is class name, they don't need to be compared as this has been done\r\n // in the areItemsSameByName function.\r\n if(propertyName === \"className\")\r\n return true;\r\n\r\n return deepEquals(valueA, valueB);\r\n });\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Compares two values on their deep equality.\r\n * @param a left side to compare\r\n * @param b right side to compare\r\n * @returns true if they are deeply equal, otherwise false.\r\n */\r\nfunction deepEquals(a: unknown, b: unknown): boolean {\r\n if(Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((value, index) => {\r\n return deepEquals(value, b[index]);\r\n });\r\n }\r\n if(isObject(a) && isObject(b)) {\r\n const propertiesA = Object.keys(a);\r\n const propertiesB = Object.keys(b);\r\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\r\n return deepEquals(a[propertyName], b[propertyName]);\r\n });\r\n }\r\n return a === b;\r\n}\r\n\r\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\r\n return typeof value === \"object\";\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaComparer.js","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Comparison\r\n */\r\n\r\nimport {\r\n AnyClass, AnyEnumerator, AnyProperty, classModifierToString, Constant, containerTypeToString, CustomAttribute, CustomAttributeClass,\r\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, OverrideFormat, Phenomenon,\r\n primitiveTypeToString, PropertyCategory, propertyTypeToString, RelationshipClass, RelationshipConstraint, Schema,\r\n SchemaItem, SchemaItemKey, strengthDirectionToString, strengthToString, Unit,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { formatTraitsToArray } from \"@itwin/core-quantity\";\r\nimport { ISchemaCompareReporter } from \"./SchemaCompareReporter\";\r\nimport { SchemaCompareResultDelegate } from \"./SchemaCompareResultDelegate\";\r\nimport { SchemaCompareVisitor } from \"./SchemaCompareVisitor\";\r\nimport { SchemaWalker } from \"./SchemaWalker\";\r\n\r\n/**\r\n * Enum that identifies if Schema A is being iterated (Forward) or\r\n * Schema B is being iterated (Backward);\r\n * @alpha\r\n */\r\nexport enum SchemaCompareDirection {\r\n Forward = 0,\r\n Backward = 1,\r\n}\r\n/**\r\n * Interface for comparing EC Schemas.\r\n * @alpha\r\n */\r\nexport interface ISchemaComparer {\r\n compareSchemas(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaProps(schemaA: Schema, schemaB: Schema): void;\r\n compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): void;\r\n compareClasses(classA: AnyClass, classB: AnyClass): void;\r\n compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): void;\r\n compareEntityClasses(entityA: EntityClass, entityB: EntityClass): void;\r\n compareMixins(mixinA: Mixin, mixinB: Mixin): void;\r\n compareRelationshipClasses(relationshipClassA: RelationshipClass, relationshipClassB: RelationshipClass): void;\r\n compareRelationshipConstraints(relationshipConstraintA: RelationshipConstraint, relationshipConstraintB: RelationshipConstraint): void;\r\n compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): void;\r\n compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): void;\r\n compareEnumerations(enumA: Enumeration, enumB: Enumeration): void;\r\n compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): void;\r\n comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): void;\r\n compareFormats(formatA: Format, formatB: Format): void;\r\n compareUnits(unitA: Unit, unitB: Unit): void;\r\n compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): void;\r\n comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): void;\r\n compareConstants(constantA: Constant, constantB: Constant): void;\r\n}\r\n\r\nfunction labelsMatch(label1?: string, label2?: string) {\r\n label1 = label1 === undefined ? \"\" : label1;\r\n label2 = label2 === undefined ? \"\" : label2;\r\n return label1 === label2;\r\n}\r\n\r\n/**\r\n * Compares EC Schemas and reports differences using the [[IDiagnosticReporter]] objects\r\n * specified.\r\n * @alpha\r\n */\r\nexport class SchemaComparer {\r\n private _compareDirection: SchemaCompareDirection;\r\n private _reporter!: SchemaCompareResultDelegate;\r\n private _reporters: ISchemaCompareReporter[];\r\n\r\n /**\r\n * Initializes a new SchemaComparer instance.\r\n * @param reporters The [[IDiagnosticReporter]] object(s) to use to report the results.\r\n */\r\n constructor(...reporters: ISchemaCompareReporter[]) {\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporters = reporters;\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemas(schemaA: Schema, schemaB: Schema) {\r\n this._reporter = new SchemaCompareResultDelegate(schemaA, schemaB, ...this._reporters);\r\n let visitor = new SchemaCompareVisitor(this, schemaB);\r\n let walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaA);\r\n\r\n this._compareDirection = SchemaCompareDirection.Backward;\r\n\r\n visitor = new SchemaCompareVisitor(this, schemaA);\r\n walker = new SchemaWalker(visitor);\r\n await walker.traverseSchema(schemaB);\r\n\r\n this._compareDirection = SchemaCompareDirection.Forward;\r\n this._reporter.compareComplete();\r\n }\r\n\r\n /**\r\n * Compares two schemas to identify differences between property values.\r\n * @param schemaA The first Schema.\r\n * @param schemaB The second Schema.\r\n */\r\n public async compareSchemaProps(schemaA: Schema, schemaB: Schema): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const ref of schemaA.references) {\r\n const refB = await schemaB.getReference(ref.fullName);\r\n if (!refB)\r\n promises.push(this._reporter.reportSchemaReferenceMissing(schemaA, ref, this._compareDirection));\r\n else if (!refB.schemaKey.matches(ref.schemaKey))\r\n promises.push(this._reporter.reportSchemaReferenceDelta(schemaA, ref, ref.schemaKey.version.toString(), refB.schemaKey.version.toString(), this._compareDirection));\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaA.schemaKey.toString() !== schemaB.schemaKey.toString())\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"schemaKey\", schemaA.schemaKey.toString(), schemaB.schemaKey.toString(), this._compareDirection));\r\n\r\n if (schemaA.alias !== schemaB.alias)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"alias\", schemaA.alias, schemaB.alias, this._compareDirection));\r\n\r\n if (schemaA.description !== schemaB.description)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"description\", schemaA.description, schemaB.description, this._compareDirection));\r\n\r\n if (schemaA.label !== schemaB.label)\r\n promises.push(this._reporter.reportSchemaDelta(schemaA, \"label\", schemaA.label, schemaB.label, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two SchemaItems to identify differences between property values.\r\n * @param schemaItemA The first SchemaItem.\r\n * @param schemaItemB The second SchemaItem.\r\n */\r\n public async compareSchemaItems(schemaItemA: SchemaItem, schemaItemB: SchemaItem | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n if (!schemaItemB) {\r\n promises.push(this._reporter.reportSchemaItemMissing(schemaItemA, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (schemaItemA.schemaItemType !== schemaItemB.schemaItemType) {\r\n const aType = schemaItemA.schemaItemType;\r\n const bType = schemaItemB.schemaItemType;\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"schemaItemType\", aType, bType, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (schemaItemA.description !== schemaItemB.description)\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"description\", schemaItemA.description, schemaItemB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(schemaItemA.label, schemaItemB.label))\r\n promises.push(this._reporter.reportSchemaItemDelta(schemaItemA, \"label\", schemaItemA.label, schemaItemB.label, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECClasses to identify differences between property values.\r\n * @param classA The first ECClass.\r\n * @param classB The second ECClass.\r\n */\r\n public async compareClasses(classA: AnyClass, classB: AnyClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (classA.modifier !== classB.modifier) {\r\n const aMod = classModifierToString(classA.modifier);\r\n const bMod = classModifierToString(classB.modifier);\r\n promises.push(this._reporter.reportClassDelta(classA, \"modifier\", aMod, bMod, this._compareDirection));\r\n }\r\n\r\n if (classA.baseClass || classB.baseClass) {\r\n const fullNameA = classA.baseClass?.fullName;\r\n const fullNameB = classB.baseClass?.fullName;\r\n\r\n if (fullNameA !== fullNameB) {\r\n const areSameByName = this.areItemsSameByName(classA.baseClass, classB.baseClass, classA.schema.name, classB.schema.name);\r\n if (!areSameByName) {\r\n const baseA = await classA.baseClass as AnyClass;\r\n const baseB = await classB.baseClass as AnyClass;\r\n promises.push(this._reporter.reportBaseClassDelta(classA, baseA, baseB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two ECProperties to identify differences between property values.\r\n * @param propertyA The first ECProperty.\r\n * @param propertyB The second ECProperty.\r\n */\r\n public async compareProperties(propertyA: AnyProperty, propertyB: AnyProperty | undefined): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (!propertyB) {\r\n promises.push(this._reporter.reportPropertyMissing(propertyA, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const propertyTypeA = propertyTypeToString(propertyA.propertyType);\r\n const propertyTypeB = propertyTypeToString(propertyB.propertyType);\r\n if (propertyTypeA !== propertyTypeB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"type\", propertyTypeA, propertyTypeB, this._compareDirection));\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (!labelsMatch(propertyA.label, propertyB.label))\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"label\", propertyA.label, propertyB.label, this._compareDirection));\r\n\r\n if (propertyA.description !== propertyB.description)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"description\", propertyA.description, propertyB.description, this._compareDirection));\r\n\r\n if (propertyA.isReadOnly !== propertyB.isReadOnly)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"isReadOnly\", propertyA.isReadOnly, propertyB.isReadOnly, this._compareDirection));\r\n\r\n if (propertyA.priority !== propertyB.priority)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"priority\", propertyA.priority, propertyB.priority, this._compareDirection));\r\n\r\n if (propertyA.category || propertyB.category) {\r\n const catKeyA = propertyA.category?.fullName;\r\n const catKeyB = propertyB.category?.fullName;\r\n if (catKeyA !== catKeyB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.category, propertyB.category, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"category\", catKeyA, catKeyB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.kindOfQuantity || propertyB.kindOfQuantity) {\r\n const koqKeyA = propertyA.kindOfQuantity?.fullName;\r\n const koqKeyB = propertyB.kindOfQuantity?.fullName;\r\n if (koqKeyA !== koqKeyB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.kindOfQuantity, propertyB.kindOfQuantity, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"kindOfQuantity\", koqKeyA, koqKeyB, this._compareDirection));\r\n }\r\n }\r\n\r\n promises.push(this.comparePropertyType(propertyA, propertyB));\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two EntityClass objects to identify differences between property values.\r\n * @param entityA\r\n * @param entityB\r\n */\r\n public async compareEntityClasses(entityA: EntityClass, entityB: EntityClass): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n for (const mixinA of entityA.mixins) {\r\n if (-1 === entityB.mixins.findIndex((mixinB) => this.areItemsSameByName(mixinA, mixinB, entityA.schema.name, entityB.schema.name)))\r\n promises.push(this._reporter.reportEntityMixinMissing(entityA, await mixinA, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Mixin objects to identify differences between property values.\r\n * @param mixinA\r\n * @param mixinB\r\n */\r\n public async compareMixins(mixinA: Mixin, mixinB: Mixin): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (mixinA.appliesTo || mixinB.appliesTo) {\r\n const appliesToA = mixinA.appliesTo?.fullName;\r\n const appliesToB = mixinB.appliesTo?.fullName;\r\n if (appliesToA !== appliesToB) {\r\n const areSameByName = this.areItemsSameByName(mixinA.appliesTo, mixinB.appliesTo, mixinA.schema.name, mixinB.schema.name);\r\n if (!areSameByName)\r\n await this._reporter.reportMixinDelta(mixinA, \"appliesTo\", appliesToA, appliesToB, this._compareDirection);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Compares two RelationshipClass objects to identify differences between property values.\r\n * @param relationshipA\r\n * @param relationshipB\r\n */\r\n public async compareRelationshipClasses(relationshipA: RelationshipClass, relationshipB: RelationshipClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (relationshipA.strength !== relationshipB.strength) {\r\n const strengthAString = strengthToString(relationshipA.strength);\r\n const strengthBString = strengthToString(relationshipB.strength);\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strength\", strengthAString, strengthBString, this._compareDirection));\r\n }\r\n\r\n if (relationshipA.strengthDirection !== relationshipB.strengthDirection) {\r\n const directionAString = strengthDirectionToString(relationshipA.strengthDirection);\r\n const directionBString = strengthDirectionToString(relationshipB.strengthDirection);\r\n promises.push(this._reporter.reportRelationshipClassDelta(relationshipA, \"strengthDirection\", directionAString, directionBString, this._compareDirection));\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two RelationshipConstraint objects to identify differences between property values.\r\n * @param relationshipConstraintA\r\n * @param relationshipConstraintB\r\n */\r\n public async compareRelationshipConstraints(constraintA: RelationshipConstraint, constraintB: RelationshipConstraint): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (constraintA.constraintClasses) {\r\n for (const classA of constraintA.constraintClasses) {\r\n if (!constraintB.constraintClasses || -1 === constraintB.constraintClasses.findIndex((classB) =>\r\n this.areItemsSameByName(classA, classB, constraintA.schema.name, constraintB.schema.name)))\r\n promises.push(this._reporter.reportRelationshipConstraintClassMissing(constraintA, await classA, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (constraintA.multiplicity || constraintB.multiplicity) {\r\n const multiplicityA = constraintA.multiplicity.toString();\r\n const multiplicityB = constraintB.multiplicity.toString();\r\n if (multiplicityA !== multiplicityB)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"multiplicity\", multiplicityA, multiplicityB, this._compareDirection));\r\n }\r\n\r\n if (constraintA.roleLabel !== constraintB.roleLabel)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"roleLabel\", constraintA.roleLabel, constraintB.roleLabel, this._compareDirection));\r\n\r\n if (constraintA.polymorphic !== constraintB.polymorphic)\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"polymorphic\", constraintA.polymorphic, constraintB.polymorphic, this._compareDirection));\r\n\r\n if (constraintA.abstractConstraint || constraintB.abstractConstraint) {\r\n const abstractA = constraintA.abstractConstraint?.fullName;\r\n const abstractB = constraintB.abstractConstraint?.fullName;\r\n if (abstractA !== abstractB) {\r\n const areSameByName = this.areItemsSameByName(constraintA.abstractConstraint, constraintB.abstractConstraint, constraintA.schema.name, constraintB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportRelationshipConstraintDelta(constraintA, \"abstractConstraint\", abstractA, abstractB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeClass objects to identify differences between property values.\r\n * @param customAttributeClassA\r\n * @param customAttributeClassB\r\n */\r\n public async compareCustomAttributeClasses(customAttributeClassA: CustomAttributeClass, customAttributeClassB: CustomAttributeClass): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (customAttributeClassA.appliesTo !== customAttributeClassB.appliesTo) {\r\n const typeA = containerTypeToString(customAttributeClassA.appliesTo);\r\n const typeB = containerTypeToString(customAttributeClassB.appliesTo);\r\n await this._reporter.reportCustomAttributeClassDelta(customAttributeClassA, \"appliesTo\", typeA, typeB, this._compareDirection);\r\n }\r\n }\r\n\r\n /**\r\n * Compares two CustomAttributeContainerProps objects to identify differences between property values.\r\n * @param containerA\r\n * @param containerB\r\n */\r\n public async compareCustomAttributeContainers(containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (containerA.customAttributes) {\r\n for (const ca of containerA.customAttributes) {\r\n if (!containerB.customAttributes || !this.containerHasClass(ca[1], containerA, containerB))\r\n promises.push(this._reporter.reportCustomAttributeInstanceClassMissing(containerA, ca[1], this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Enumeration objects to identify differences between property values.\r\n * @param enumA\r\n * @param enumB\r\n */\r\n public async compareEnumerations(enumA: Enumeration, enumB: Enumeration): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const enumeratorA of enumA.enumerators) {\r\n const enumeratorB = enumB.enumerators.find((e) => e.name === enumeratorA.name);\r\n if (!enumeratorB) {\r\n promises.push(this._reporter.reportEnumeratorMissing(enumA, enumeratorA, this._compareDirection));\r\n } else if (this._compareDirection === SchemaCompareDirection.Forward) {\r\n promises.push(this.compareEnumerators(enumeratorA, enumeratorB, enumA, enumB));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n if (enumA.type !== enumB.type) {\r\n const typeAString = enumA.type ? primitiveTypeToString(enumA.type) : undefined;\r\n const typeBString = enumB.type ? primitiveTypeToString(enumB.type) : undefined;\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (enumA.isStrict !== enumB.isStrict)\r\n promises.push(this._reporter.reportEnumerationDelta(enumA, \"isStrict\", enumA.isStrict, enumB.isStrict, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two KindOfQuantity objects to identify differences between property values.\r\n * @param koqA\r\n * @param koqB\r\n */\r\n public async compareKindOfQuantities(koqA: KindOfQuantity, koqB: KindOfQuantity): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (koqA.presentationFormats) {\r\n for (const unitA of koqA.presentationFormats) {\r\n if (-1 === koqB.presentationFormats.findIndex((unitB) => this.areOverrideFormatsSameByName(unitA, unitB, koqA.schema.name, koqB.schema.name)))\r\n promises.push(this._reporter.reportPresentationUnitMissing(koqA, unitA, this._compareDirection));\r\n }\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (koqA.relativeError !== koqB.relativeError) {\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"relativeError\", koqA.relativeError, koqB.relativeError, this._compareDirection));\r\n }\r\n\r\n if (koqA.persistenceUnit || koqB.persistenceUnit) {\r\n const unitNameA = koqA.persistenceUnit?.fullName;\r\n const unitNameB = koqB.persistenceUnit?.fullName;\r\n if (unitNameA !== unitNameB) {\r\n const eqByName = this.areItemsSameByName(koqA.persistenceUnit, koqB.persistenceUnit, koqA.schema.name, koqB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportKoqDelta(koqA, \"persistenceUnit\", unitNameA, unitNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two PropertyCategory objects to identify differences between property values.\r\n * @param categoryA\r\n * @param categoryB\r\n */\r\n public async comparePropertyCategories(categoryA: PropertyCategory, categoryB: PropertyCategory): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (categoryA.priority !== categoryB.priority)\r\n await this._reporter.reportPropertyCategoryDelta(categoryA, \"priority\", categoryA.priority, categoryB.priority, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Format objects to identify differences between property values.\r\n * @param formatA\r\n * @param formatB\r\n */\r\n public async compareFormats(formatA: Format, formatB: Format): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n promises.push(this.compareFormatUnits(formatA, formatB));\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward) {\r\n await Promise.all(promises);\r\n return;\r\n }\r\n\r\n if (formatA.roundFactor !== formatB.roundFactor)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"roundFactor\", formatA.roundFactor, formatB.roundFactor, this._compareDirection));\r\n\r\n if (formatA.type !== formatB.type) {\r\n const typeAString = formatA.type;\r\n const typeBString = formatB.type;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"type\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (formatA.precision !== formatB.precision)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"precision\", formatA.precision, formatB.precision, this._compareDirection));\r\n\r\n if (formatA.minWidth !== formatB.minWidth)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"minWidth\", formatA.minWidth, formatB.minWidth, this._compareDirection));\r\n\r\n if (formatA.scientificType !== formatB.scientificType) {\r\n const typeAString = formatA.scientificType !== undefined ? formatA.scientificType : undefined;\r\n const typeBString = formatB.scientificType !== undefined ? formatB.scientificType : undefined;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"scientificType\", typeAString, typeBString, this._compareDirection));\r\n }\r\n\r\n if (formatA.showSignOption !== formatB.showSignOption) {\r\n const optionA = formatA.showSignOption;\r\n const optionB = formatB.showSignOption;\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"showSignOption\", optionA, optionB, this._compareDirection));\r\n }\r\n\r\n if (formatA.decimalSeparator !== formatB.decimalSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"decimalSeparator\", formatA.decimalSeparator, formatB.decimalSeparator, this._compareDirection));\r\n\r\n if (formatA.thousandSeparator !== formatB.thousandSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"thousandSeparator\", formatA.thousandSeparator, formatB.thousandSeparator, this._compareDirection));\r\n\r\n if (formatA.uomSeparator !== formatB.uomSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"uomSeparator\", formatA.uomSeparator, formatB.uomSeparator, this._compareDirection));\r\n\r\n if (formatA.stationSeparator !== formatB.stationSeparator)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationSeparator\", formatA.stationSeparator, formatB.stationSeparator, this._compareDirection));\r\n\r\n if (formatA.stationOffsetSize !== formatB.stationOffsetSize)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"stationOffsetSize\", formatA.stationOffsetSize, formatB.stationOffsetSize, this._compareDirection));\r\n\r\n if (formatA.formatTraits !== formatB.formatTraits) {\r\n const traitsA = formatTraitsToArray(formatA.formatTraits);\r\n const traitsB = formatTraitsToArray(formatB.formatTraits);\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"formatTraits\", traitsA.toString(), traitsB.toString(), this._compareDirection));\r\n }\r\n\r\n if (formatA.spacer !== formatB.spacer)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"spacer\", formatA.spacer, formatB.spacer, this._compareDirection));\r\n\r\n if (formatA.includeZero !== formatB.includeZero)\r\n promises.push(this._reporter.reportFormatDelta(formatA, \"includeZero\", formatA.includeZero, formatB.includeZero, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Unit objects to identify differences between property values.\r\n * @param unitA\r\n * @param unitB\r\n */\r\n public async compareUnits(unitA: Unit, unitB: Unit): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (unitA.phenomenon || unitB.phenomenon) {\r\n const fullNameA = unitA.phenomenon?.fullName;\r\n const fullNameB = unitB.phenomenon?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(unitA.phenomenon, unitB.phenomenon, unitA.schema.name, unitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (unitA.unitSystem || unitB.unitSystem) {\r\n const fullNameA = unitA.unitSystem?.fullName;\r\n const fullNameB = unitB.unitSystem?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(unitA.unitSystem, unitB.unitSystem, unitA.schema.name, unitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (unitA.definition !== unitB.definition)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"definition\", unitA.definition, unitB.definition, this._compareDirection));\r\n\r\n if (unitA.numerator !== unitB.numerator)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"numerator\", unitA.numerator, unitB.numerator, this._compareDirection));\r\n\r\n if (unitA.denominator !== unitB.denominator)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"denominator\", unitA.denominator, unitB.denominator, this._compareDirection));\r\n\r\n if (unitA.offset !== unitB.offset)\r\n promises.push(this._reporter.reportUnitDelta(unitA, \"offset\", unitA.offset, unitB.offset, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two InvertedUnit objects to identify differences between property values.\r\n * @param invertedUnitA\r\n * @param invertedUnitB\r\n */\r\n public async compareInvertedUnits(invertedUnitA: InvertedUnit, invertedUnitB: InvertedUnit): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (invertedUnitA.invertsUnit || invertedUnitB.invertsUnit) {\r\n const fullNameA = invertedUnitA.invertsUnit?.fullName;\r\n const fullNameB = invertedUnitB.invertsUnit?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(invertedUnitA.invertsUnit, invertedUnitB.invertsUnit, invertedUnitA.schema.name, invertedUnitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"invertsUnit\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (invertedUnitA.unitSystem || invertedUnitB.unitSystem) {\r\n const fullNameA = invertedUnitA.unitSystem?.fullName;\r\n const fullNameB = invertedUnitB.unitSystem?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(invertedUnitA.unitSystem, invertedUnitB.unitSystem, invertedUnitA.schema.name, invertedUnitB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportInvertedUnitDelta(invertedUnitA, \"unitSystem\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n /**\r\n * Compares two Phenomenon objects to identify differences between property values.\r\n * @param phenomenonA\r\n * @param phenomenonB\r\n */\r\n public async comparePhenomenons(phenomenonA: Phenomenon, phenomenonB: Phenomenon): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n if (phenomenonA.definition !== phenomenonB.definition)\r\n await this._reporter.reportPhenomenonDelta(phenomenonA, \"definition\", phenomenonA.definition, phenomenonB.definition, this._compareDirection);\r\n }\r\n\r\n /**\r\n * Compares two Constant objects to identify differences between property values.\r\n * @param constantA\r\n * @param constantB\r\n */\r\n public async compareConstants(constantA: Constant, constantB: Constant): Promise<void> {\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (constantA.phenomenon || constantB.phenomenon) {\r\n const fullNameA = constantA.phenomenon?.fullName;\r\n const fullNameB = constantB.phenomenon?.fullName;\r\n if (fullNameA !== fullNameB) {\r\n const eqByName = this.areItemsSameByName(constantA.phenomenon, constantB.phenomenon, constantA.schema.name, constantB.schema.name);\r\n if (!eqByName)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"phenomenon\", fullNameA, fullNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (constantA.definition !== constantB.definition)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"definition\", constantA.definition, constantB.definition, this._compareDirection));\r\n\r\n if (constantA.numerator !== constantB.numerator)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"numerator\", constantA.numerator, constantB.numerator, this._compareDirection));\r\n\r\n if (constantA.denominator !== constantB.denominator)\r\n promises.push(this._reporter.reportConstantDelta(constantA, \"denominator\", constantA.denominator, constantB.denominator, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async comparePropertyType(propertyA: AnyProperty, propertyB: AnyProperty): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (propertyA.isArray()) {\r\n const minOccursB = propertyB.isArray() ? propertyB.minOccurs : undefined;\r\n if (propertyA.minOccurs !== minOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minOccurs\", propertyA.minOccurs, minOccursB, this._compareDirection));\r\n }\r\n\r\n const maxOccursB = propertyB.isArray() ? propertyB.maxOccurs : undefined;\r\n if (propertyA.maxOccurs !== maxOccursB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxOccurs\", propertyA.maxOccurs, maxOccursB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isEnumeration()) {\r\n const enumerationB = propertyB.isEnumeration() ? propertyB.enumeration : undefined;\r\n if (propertyA.enumeration || enumerationB) {\r\n const enumA = propertyA.enumeration?.fullName;\r\n const enumB = enumerationB?.fullName;\r\n if (enumA !== enumB) {\r\n const areSameByName = this.areItemsSameByName(propertyA.enumeration, enumerationB, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"enumeration\", enumA, enumB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isNavigation()) {\r\n const strengthDirectionB = propertyB.isNavigation() ? propertyB.direction : undefined;\r\n if (propertyA.direction !== strengthDirectionB) {\r\n const dirA = strengthDirectionToString(propertyA.direction);\r\n const dirB = strengthDirectionB !== undefined ? strengthDirectionToString(strengthDirectionB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"direction\", dirA, dirB, this._compareDirection));\r\n }\r\n\r\n if (propertyA.relationshipClass) { // eslint-disable-line @typescript-eslint/no-misused-promises\r\n const relationshipClassB = propertyB.isNavigation() ? propertyB.relationshipClass : undefined;\r\n const relA = propertyA.relationshipClass.fullName;\r\n const relB = relationshipClassB ? relationshipClassB.fullName : undefined;\r\n if (relA !== relB){\r\n const areSameByName = this.areItemsSameByName(propertyA.relationshipClass, relationshipClassB, propertyA.schema.name, propertyB.schema.name);\r\n if(!areSameByName)\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"relationshipClass\", relA, relB, this._compareDirection));\r\n }\r\n }\r\n }\r\n\r\n if (propertyA.isPrimitive()) {\r\n const primitiveTypeB = propertyB.isPrimitive() ? propertyB.primitiveType : undefined;\r\n if (propertyA.primitiveType !== primitiveTypeB) {\r\n const aType = primitiveTypeToString(propertyA.primitiveType);\r\n const bType = primitiveTypeB !== undefined ? primitiveTypeToString(primitiveTypeB) : undefined;\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"primitiveType\", aType, bType, this._compareDirection));\r\n }\r\n\r\n const minLengthB = propertyB.isPrimitive() ? propertyB.minLength : undefined;\r\n if (propertyA.minLength !== minLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minLength\", propertyA.minLength, minLengthB, this._compareDirection));\r\n }\r\n\r\n // valid for primitive and enumeration properties\r\n const maxLengthB = propertyB.isPrimitive() ? propertyB.maxLength : undefined;\r\n if (propertyA.maxLength !== maxLengthB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxLength\", propertyA.maxLength, maxLengthB, this._compareDirection));\r\n }\r\n\r\n const minValueB = propertyB.isPrimitive() ? propertyB.minValue : undefined;\r\n if (propertyA.minValue !== minValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"minValue\", propertyA.minValue, minValueB, this._compareDirection));\r\n }\r\n\r\n const maxValueB = propertyB.isPrimitive() ? propertyB.maxValue : undefined;\r\n if (propertyA.maxValue !== maxValueB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"maxValue\", propertyA.maxValue, maxValueB, this._compareDirection));\r\n }\r\n\r\n const extendedTypeNameB = propertyB.isPrimitive() ? propertyB.extendedTypeName : undefined;\r\n if (propertyA.extendedTypeName !== extendedTypeNameB) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"extendedTypeName\", propertyA.extendedTypeName, extendedTypeNameB, this._compareDirection));\r\n }\r\n }\r\n\r\n if (propertyA.isStruct()) {\r\n const structA = propertyA.structClass;\r\n const structB = propertyB.isStruct() ? propertyB.structClass : undefined;\r\n if (structA || structB) {\r\n const structNameA = structA.fullName;\r\n const structNameB = structB?.fullName;\r\n if (structNameA !== structNameB) {\r\n const areSameByName = this.areItemsSameByName(structA.key, structB?.key, propertyA.schema.name, propertyB.schema.name);\r\n if (!areSameByName) {\r\n promises.push(this._reporter.reportPropertyDelta(propertyA, \"structClass\", structNameA, structNameB, this._compareDirection));\r\n }\r\n }\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareEnumerators(enumeratorA: AnyEnumerator, enumeratorB: AnyEnumerator, enumA: Enumeration, enumB: Enumeration): Promise<void> {\r\n const promises: Array<Promise<void>> = [];\r\n\r\n if (enumeratorA.description !== enumeratorB.description)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"description\", enumeratorA.description, enumeratorB.description, this._compareDirection));\r\n\r\n if (!labelsMatch(enumeratorA.label, enumeratorB.label))\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"label\", enumeratorA.label, enumeratorB.label, this._compareDirection));\r\n\r\n // No need to compare values if the type is different (which will be reported separately)\r\n if (enumA.type === enumB.type && enumeratorA.value !== enumeratorB.value)\r\n promises.push(this._reporter.reportEnumeratorDelta(enumA, enumeratorA, \"value\", enumeratorA.value, enumeratorB.value, this._compareDirection));\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private async compareFormatUnits(formatA: Format, formatB: Format): Promise<void> {\r\n if (!formatA.units)\r\n return;\r\n\r\n const promises: Array<Promise<void>> = [];\r\n\r\n for (const unitA of formatA.units) {\r\n const unitB = formatB.units ? formatB.units.find((u) => this.areItemsSameByName(unitA[0], u[0], formatA.schema.name, formatB.schema.name)) : undefined;\r\n if (!unitB) {\r\n promises.push(this._reporter.reportFormatUnitMissing(formatA, unitA[0], this._compareDirection));\r\n continue;\r\n }\r\n\r\n if (this._compareDirection === SchemaCompareDirection.Backward)\r\n continue;\r\n\r\n if (unitA[1] !== unitB[1]) {\r\n const labelA = unitA[1];\r\n const labelB = unitB[1];\r\n promises.push(this._reporter.reportUnitLabelOverrideDelta(formatA, unitB[0], labelA, labelB, this._compareDirection));\r\n }\r\n }\r\n\r\n await Promise.all(promises);\r\n }\r\n\r\n private areOverrideFormatsSameByName(\r\n itemKeyA: Format | OverrideFormat,\r\n itemKeyB: Format | OverrideFormat,\r\n topLevelSchemaNameA: string,\r\n topLevelSchemaNameB: string | undefined ): boolean {\r\n\r\n if (itemKeyA.units) {\r\n for (const unitA of itemKeyA.units) {\r\n if (!itemKeyB.units\r\n || -1 === itemKeyB.units.findIndex((unitB) => this.areItemsSameByName(unitA[0], unitB[0], topLevelSchemaNameA, topLevelSchemaNameB)\r\n && unitA[1] === unitB[1]))\r\n return false;\r\n }\r\n }\r\n\r\n const itemA = OverrideFormat.isOverrideFormat(itemKeyA) ? itemKeyA.parent : itemKeyA;\r\n const itemB = OverrideFormat.isOverrideFormat(itemKeyB) ? itemKeyB.parent : itemKeyB;\r\n\r\n return itemKeyA.precision === itemKeyB.precision && this.areItemsSameByName(itemA, itemB, topLevelSchemaNameA, topLevelSchemaNameB);\r\n }\r\n\r\n /**\r\n * Compares two item keys.\r\n * @param itemKeyA item key A to compare to.\r\n * @param itemKeyB item key B to compare to.\r\n * @param topLevelSchemaNameA top level schema name in which the item A exists.\r\n * @param topLevelSchemaNameB top level schema name in which the item B exists.\r\n * @returns true if both names are the same and they come from their respective top level schema.\r\n */\r\n private areItemsSameByName(\r\n itemKeyA: Readonly<SchemaItemKey> | SchemaItem | undefined,\r\n itemKeyB: Readonly<SchemaItemKey> | SchemaItem | undefined,\r\n topLevelSchemaNameA: string,\r\n topLevelSchemaNameB: string | undefined ): boolean {\r\n\r\n const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;\r\n const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;\r\n\r\n const schemaNameA = itemKeyA\r\n ? SchemaItem.isSchemaItem(itemKeyA)\r\n ? itemKeyA.schema.name\r\n : itemKeyA.schemaName\r\n : undefined;\r\n\r\n const schemaNameB = itemKeyB\r\n ? SchemaItem.isSchemaItem(itemKeyB)\r\n ? itemKeyB.schema.name\r\n : itemKeyB.schemaName\r\n : undefined;\r\n\r\n return (nameA === nameB && schemaNameA === topLevelSchemaNameA && schemaNameB === topLevelSchemaNameB) || (nameA === nameB && schemaNameA === schemaNameB);\r\n }\r\n\r\n /**\r\n * Looks for same classA in containerB using key.\r\n * @param classNameA name of the class to look for in containerB.\r\n * @param containerA container which classNameA belongs to.\r\n * @param containerB container in which to look for classNameA.\r\n * @returns true if a same classA is in containerB, otherwise false.\r\n */\r\n private containerHasClass(attributeA: CustomAttribute, containerA: CustomAttributeContainerProps, containerB: CustomAttributeContainerProps): boolean {\r\n if (containerB && containerB.customAttributes) {\r\n for (const [_className, attributeB] of containerB.customAttributes) {\r\n const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);\r\n const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);\r\n\r\n if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {\r\n return Object.keys(attributeA).every((propertyName) => {\r\n const valueA = attributeA[propertyName];\r\n const valueB = attributeB[propertyName];\r\n\r\n // If propertyName is class name, they don't need to be compared as this has been done\r\n // in the areItemsSameByName function.\r\n if(propertyName === \"className\")\r\n return true;\r\n\r\n return deepEquals(valueA, valueB);\r\n });\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Compares two values on their deep equality.\r\n * @param a left side to compare\r\n * @param b right side to compare\r\n * @returns true if they are deeply equal, otherwise false.\r\n */\r\nfunction deepEquals(a: unknown, b: unknown): boolean {\r\n if(Array.isArray(a) && Array.isArray(b)) {\r\n return a.length === b.length && a.every((value, index) => {\r\n return deepEquals(value, b[index]);\r\n });\r\n }\r\n if(isObject(a) && isObject(b)) {\r\n const propertiesA = Object.keys(a);\r\n const propertiesB = Object.keys(b);\r\n return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {\r\n return deepEquals(a[propertyName], b[propertyName]);\r\n });\r\n }\r\n return a === b;\r\n}\r\n\r\nfunction isObject(value: unknown): value is { [property: string]: unknown } {\r\n return typeof value === \"object\";\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/ecschema-editing",
|
|
3
|
-
"version": "4.10.0-dev.
|
|
3
|
+
"version": "4.10.0-dev.30",
|
|
4
4
|
"description": "ECSchema editing and validation API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/cjs/ecschema-editing.js",
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
"rimraf": "^3.0.2",
|
|
42
42
|
"sinon": "^17.0.2",
|
|
43
43
|
"typescript": "~5.3.3",
|
|
44
|
-
"@itwin/build-tools": "4.10.0-dev.
|
|
45
|
-
"@itwin/core-
|
|
46
|
-
"@itwin/core-
|
|
47
|
-
"@itwin/core-quantity": "4.10.0-dev.
|
|
48
|
-
"@itwin/ecschema-metadata": "4.10.0-dev.
|
|
44
|
+
"@itwin/build-tools": "4.10.0-dev.30",
|
|
45
|
+
"@itwin/core-bentley": "4.10.0-dev.30",
|
|
46
|
+
"@itwin/core-common": "4.10.0-dev.30",
|
|
47
|
+
"@itwin/core-quantity": "4.10.0-dev.30",
|
|
48
|
+
"@itwin/ecschema-metadata": "4.10.0-dev.30"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@itwin/core-bentley": "^4.10.0-dev.
|
|
52
|
-
"@itwin/core-quantity": "^4.10.0-dev.
|
|
53
|
-
"@itwin/ecschema-metadata": "^4.10.0-dev.
|
|
51
|
+
"@itwin/core-bentley": "^4.10.0-dev.30",
|
|
52
|
+
"@itwin/core-quantity": "^4.10.0-dev.30",
|
|
53
|
+
"@itwin/ecschema-metadata": "^4.10.0-dev.30"
|
|
54
54
|
},
|
|
55
55
|
"nyc": {
|
|
56
56
|
"extends": "./node_modules/@itwin/build-tools/.nycrc"
|