@itwin/ecschema-editing 4.8.0-dev.2 → 4.8.0-dev.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/lib/cjs/Differencing/SchemaDifference.d.ts +10 -119
  3. package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
  4. package/lib/cjs/Differencing/SchemaDifference.js +28 -198
  5. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  6. package/lib/cjs/Differencing/Utils.d.ts +100 -0
  7. package/lib/cjs/Differencing/Utils.d.ts.map +1 -0
  8. package/lib/cjs/Differencing/Utils.js +165 -0
  9. package/lib/cjs/Differencing/Utils.js.map +1 -0
  10. package/lib/cjs/Editing/ECClasses.d.ts +0 -7
  11. package/lib/cjs/Editing/ECClasses.d.ts.map +1 -1
  12. package/lib/cjs/Editing/ECClasses.js +0 -27
  13. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  14. package/lib/cjs/Editing/Editor.d.ts +19 -3
  15. package/lib/cjs/Editing/Editor.d.ts.map +1 -1
  16. package/lib/cjs/Editing/Editor.js +48 -3
  17. package/lib/cjs/Editing/Editor.js.map +1 -1
  18. package/lib/cjs/Editing/Enumerations.js +4 -4
  19. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  20. package/lib/cjs/Editing/Exception.d.ts +237 -140
  21. package/lib/cjs/Editing/Exception.d.ts.map +1 -1
  22. package/lib/cjs/Editing/Exception.js +216 -196
  23. package/lib/cjs/Editing/Exception.js.map +1 -1
  24. package/lib/cjs/Editing/Formats.d.ts.map +1 -1
  25. package/lib/cjs/Editing/Formats.js +4 -1
  26. package/lib/cjs/Editing/Formats.js.map +1 -1
  27. package/lib/cjs/Editing/KindOfQuantities.d.ts.map +1 -1
  28. package/lib/cjs/Editing/KindOfQuantities.js +3 -1
  29. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  30. package/lib/cjs/Editing/Mutable/MutableSchema.d.ts +2 -0
  31. package/lib/cjs/Editing/Mutable/MutableSchema.d.ts.map +1 -1
  32. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  33. package/lib/cjs/Editing/Mutable/MutableSchemaItem.d.ts +11 -0
  34. package/lib/cjs/Editing/Mutable/MutableSchemaItem.d.ts.map +1 -0
  35. package/lib/cjs/Editing/Mutable/MutableSchemaItem.js +16 -0
  36. package/lib/cjs/Editing/Mutable/MutableSchemaItem.js.map +1 -0
  37. package/lib/cjs/Editing/Properties.d.ts +1 -4
  38. package/lib/cjs/Editing/Properties.d.ts.map +1 -1
  39. package/lib/cjs/Editing/Properties.js +4 -5
  40. package/lib/cjs/Editing/Properties.js.map +1 -1
  41. package/lib/cjs/Editing/SchemaItems.d.ts +21 -2
  42. package/lib/cjs/Editing/SchemaItems.d.ts.map +1 -1
  43. package/lib/cjs/Editing/SchemaItems.js +55 -24
  44. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  45. package/lib/cjs/Merging/ClassMerger.d.ts.map +1 -1
  46. package/lib/cjs/Merging/ClassMerger.js +10 -10
  47. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  48. package/lib/cjs/Merging/SchemaItemMerger.d.ts +4 -4
  49. package/lib/cjs/Merging/SchemaItemMerger.d.ts.map +1 -1
  50. package/lib/cjs/Merging/SchemaItemMerger.js +18 -18
  51. package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
  52. package/lib/cjs/Merging/SchemaMerger.d.ts +7 -7
  53. package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
  54. package/lib/cjs/Merging/SchemaMerger.js +32 -31
  55. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  56. package/lib/cjs/Validation/SchemaCompareVisitor.d.ts.map +1 -1
  57. package/lib/cjs/Validation/SchemaCompareVisitor.js +25 -14
  58. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  59. package/lib/cjs/Validation/SchemaComparer.d.ts.map +1 -1
  60. package/lib/cjs/Validation/SchemaComparer.js +33 -10
  61. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  62. package/lib/cjs/ecschema-editing.d.ts +3 -1
  63. package/lib/cjs/ecschema-editing.d.ts.map +1 -1
  64. package/lib/cjs/ecschema-editing.js +4 -2
  65. package/lib/cjs/ecschema-editing.js.map +1 -1
  66. package/package.json +9 -9
@@ -15,6 +15,7 @@ const SchemaDifference_1 = require("../Differencing/SchemaDifference");
15
15
  const CustomAttributeMerger_1 = require("./CustomAttributeMerger");
16
16
  const SchemaItemMerger_1 = require("./SchemaItemMerger");
17
17
  const SchemaReferenceMerger_1 = require("./SchemaReferenceMerger");
18
+ const Utils = require("../Differencing/Utils");
18
19
  /**
19
20
  * Class to merge two schemas together.
20
21
  * @see [[merge]] to merge the schemas.
@@ -29,40 +30,40 @@ class SchemaMerger {
29
30
  this._editor = new Editor_1.SchemaContextEditor(editingContext);
30
31
  }
31
32
  /**
32
- * Merges the source and the target. If the target is a SchemaDifference, the
33
- * source parameter must not be set. If it's a schema, it'll internally call
34
- * the Differencing api and recall itself with the difference argument overload.
35
- * @param input The methods input either a schema or a SchemaDifferences
36
- * @param source A source schema.
37
- * @returns The merged schema.
33
+ * Copy the SchemaItems of the source schemas to the target schema.
34
+ * @param targetSchema The schema the SchemaItems gets merged to.
35
+ * @param sourceSchema The schema the SchemaItems gets copied from.
36
+ * @returns The merged target schema.
37
+ */
38
+ async mergeSchemas(targetSchema, sourceSchema) {
39
+ return this.merge(await (0, SchemaDifference_1.getSchemaDifferences)(targetSchema, sourceSchema));
40
+ }
41
+ /**
42
+ * Merges the schema differences into the target schema context.
43
+ * @param differenceResult The differences that shall be applied to the target schema.
38
44
  * @alpha
39
45
  */
40
- async merge(input, source) {
41
- if (ecschema_metadata_1.Schema.isSchema(input)) {
42
- if (source === undefined) {
43
- throw new Error("When merging two schemas, source must not be undefined.");
44
- }
45
- return this.merge(await SchemaDifference_1.SchemaDifference.fromSchemas(input, source));
46
- }
47
- return this.mergeSchemas(input);
46
+ async merge(differenceResult) {
47
+ return this.mergeDifferences(differenceResult);
48
48
  }
49
49
  /**
50
50
  * Merges the schema differences in the target schema. The target schema is defined
51
51
  * in the given differences object.
52
- * @param differences The differences between a source schema and the target schema.
53
- * @returns The modified Schema.
52
+ * @param differenceResult The differences between a source schema and the target schema.
53
+ * @returns The modified Schema.
54
54
  */
55
- async mergeSchemas(differences) {
56
- const targetSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differences.targetSchemaName);
57
- const sourceSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differences.sourceSchemaName);
58
- if (differences.conflicts && differences.conflicts.length > 0) {
59
- throw new Errors_1.SchemaConflictsError("Schema's can't be merged if there are unresolved conflicts.", differences.conflicts, sourceSchemaKey, targetSchemaKey);
55
+ async mergeDifferences(differenceResult) {
56
+ const targetSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differenceResult.targetSchemaName);
57
+ const sourceSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differenceResult.sourceSchemaName);
58
+ if (differenceResult.conflicts && differenceResult.conflicts.length > 0) {
59
+ throw new Errors_1.SchemaConflictsError("Schema's can't be merged if there are unresolved conflicts.", differenceResult.conflicts, sourceSchemaKey, targetSchemaKey);
60
60
  }
61
61
  const schema = await this._editor.getSchema(targetSchemaKey);
62
62
  if (schema === undefined) {
63
63
  throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);
64
64
  }
65
- if (differences.differences === undefined || differences.differences.length === 0) {
65
+ const { differences } = differenceResult;
66
+ if (differences === undefined || differences.length === 0) {
66
67
  return schema;
67
68
  }
68
69
  const context = {
@@ -71,20 +72,20 @@ class SchemaMerger {
71
72
  targetSchemaKey,
72
73
  sourceSchemaKey,
73
74
  };
74
- for (const referenceChange of differences.differences.filter(SchemaDifference_1.SchemaDifference.isSchemaReferenceDifference)) {
75
+ for (const referenceChange of differences.filter(Utils.isSchemaReferenceDifference)) {
75
76
  await (0, SchemaReferenceMerger_1.mergeSchemaReferences)(context, referenceChange);
76
77
  }
77
- const schemaDifference = differences.differences.find(SchemaDifference_1.SchemaDifference.isSchemaDifference);
78
+ const schemaDifference = differences.find(Utils.isSchemaDifference);
78
79
  if (schemaDifference !== undefined) {
79
80
  await mergeSchemaProperties(schema, schemaDifference);
80
81
  }
81
82
  // Filter a list of possible schema item changes. This list gets filtered and order in the
82
83
  // mergeSchemaItems method.
83
- for await (const _mergeResult of (0, SchemaItemMerger_1.mergeSchemaItems)(context, differences.differences)) {
84
+ for await (const _mergeResult of (0, SchemaItemMerger_1.mergeSchemaItems)(context, differences)) {
84
85
  }
85
86
  // At last the custom attributes gets merged because it could be that the CustomAttributes
86
87
  // depend on classes that has to get merged in as items before.
87
- for (const customAttributeChange of differences.differences.filter(SchemaDifference_1.SchemaDifference.isCustomAttributeDifference)) {
88
+ for (const customAttributeChange of differences.filter(Utils.isCustomAttributeDifference)) {
88
89
  await (0, CustomAttributeMerger_1.mergeCustomAttribute)(context, customAttributeChange);
89
90
  }
90
91
  return schema;
@@ -95,12 +96,12 @@ exports.SchemaMerger = SchemaMerger;
95
96
  * Sets the editable properties of a Schema.
96
97
  * @internal
97
98
  */
98
- async function mergeSchemaProperties(schema, changes) {
99
- if (changes.difference.label !== undefined) {
100
- schema.setDisplayLabel(changes.difference.label);
99
+ async function mergeSchemaProperties(schema, { difference }) {
100
+ if (difference.label !== undefined) {
101
+ schema.setDisplayLabel(difference.label);
101
102
  }
102
- if (changes.difference.description !== undefined) {
103
- schema.setDescription(changes.difference.description);
103
+ if (difference.description !== undefined) {
104
+ schema.setDescription(difference.description);
104
105
  }
105
106
  }
106
107
  //# sourceMappingURL=SchemaMerger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.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 Merging\r\n */\r\n\r\nimport { MutableSchema } from \"../Editing/Mutable/MutableSchema\";\r\nimport { Schema, type SchemaContext, SchemaKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor } from \"../Editing/Editor\";\r\nimport { SchemaConflictsError } from \"../Differencing/Errors\";\r\nimport { SchemaDifference, SchemaDifferences } from \"../Differencing/SchemaDifference\";\r\nimport { mergeCustomAttribute } from \"./CustomAttributeMerger\";\r\nimport { mergeSchemaItems } from \"./SchemaItemMerger\";\r\nimport { mergeSchemaReferences } from \"./SchemaReferenceMerger\";\r\n\r\n/**\r\n * Defines the context of a Schema merging run.\r\n * @internal\r\n */\r\nexport interface SchemaMergeContext {\r\n readonly targetSchema: Schema;\r\n readonly targetSchemaKey: SchemaKey;\r\n readonly sourceSchemaKey: SchemaKey;\r\n readonly editor: SchemaContextEditor;\r\n}\r\n\r\n/**\r\n * Class to merge two schemas together.\r\n * @see [[merge]] to merge the schemas.\r\n * @beta\r\n */\r\nexport class SchemaMerger {\r\n\r\n private readonly _editor: SchemaContextEditor;\r\n\r\n /**\r\n * Constructs a new instance of the SchemaMerger object.\r\n * @param editingContext The schema contexts that holds the schema to be edited.\r\n */\r\n constructor(editingContext: SchemaContext) {\r\n this._editor = new SchemaContextEditor(editingContext);\r\n }\r\n\r\n /**\r\n * Copy the SchemaItems of the source schemas to the target schema.\r\n * @param targetSchema The schema the SchemaItems gets merged to.\r\n * @param sourceSchema The schema the SchemaItems gets copied from.\r\n * @returns The merged target schema.\r\n */\r\n public merge(targetSchema: Schema, sourceSchema: Schema): Promise<Schema>;\r\n\r\n /**\r\n * Merges the schema differences into the target schema context.\r\n * @param differences The changes that shall be applied to the target schema.\r\n * @alpha\r\n */\r\n public merge(differences: SchemaDifferences): Promise<Schema>;\r\n\r\n /**\r\n * Merges the source and the target. If the target is a SchemaDifference, the\r\n * source parameter must not be set. If it's a schema, it'll internally call\r\n * the Differencing api and recall itself with the difference argument overload.\r\n * @param input The methods input either a schema or a SchemaDifferences\r\n * @param source A source schema.\r\n * @returns The merged schema.\r\n * @alpha\r\n */\r\n public async merge(input: SchemaDifferences | Schema, source?: Schema): Promise<Schema> {\r\n if(Schema.isSchema(input)) {\r\n if(source === undefined) {\r\n throw new Error(\"When merging two schemas, source must not be undefined.\");\r\n }\r\n return this.merge(await SchemaDifference.fromSchemas(input, source));\r\n }\r\n\r\n return this.mergeSchemas(input);\r\n }\r\n\r\n /**\r\n * Merges the schema differences in the target schema. The target schema is defined\r\n * in the given differences object.\r\n * @param differences The differences between a source schema and the target schema.\r\n * @returns The modified Schema.\r\n */\r\n private async mergeSchemas(differences: SchemaDifferences): Promise<Schema> {\r\n const targetSchemaKey = SchemaKey.parseString(differences.targetSchemaName);\r\n const sourceSchemaKey = SchemaKey.parseString(differences.sourceSchemaName);\r\n\r\n if(differences.conflicts && differences.conflicts.length > 0) {\r\n throw new SchemaConflictsError(\r\n \"Schema's can't be merged if there are unresolved conflicts.\",\r\n differences.conflicts,\r\n sourceSchemaKey,\r\n targetSchemaKey,\r\n );\r\n }\r\n\r\n const schema = await this._editor.getSchema(targetSchemaKey);\r\n if (schema === undefined) {\r\n throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);\r\n }\r\n\r\n if(differences.differences === undefined || differences.differences.length === 0) {\r\n return schema;\r\n }\r\n\r\n const context: SchemaMergeContext = {\r\n editor: this._editor,\r\n targetSchema: schema,\r\n targetSchemaKey,\r\n sourceSchemaKey,\r\n };\r\n\r\n for (const referenceChange of differences.differences.filter(SchemaDifference.isSchemaReferenceDifference)) {\r\n await mergeSchemaReferences(context, referenceChange);\r\n }\r\n\r\n const schemaDifference = differences.differences.find(SchemaDifference.isSchemaDifference);\r\n if(schemaDifference !== undefined) {\r\n await mergeSchemaProperties(schema, schemaDifference);\r\n }\r\n\r\n // Filter a list of possible schema item changes. This list gets filtered and order in the\r\n // mergeSchemaItems method.\r\n for await (const _mergeResult of mergeSchemaItems(context, differences.differences)) {\r\n }\r\n\r\n // At last the custom attributes gets merged because it could be that the CustomAttributes\r\n // depend on classes that has to get merged in as items before.\r\n for (const customAttributeChange of differences.differences.filter(SchemaDifference.isCustomAttributeDifference)) {\r\n await mergeCustomAttribute(context, customAttributeChange);\r\n }\r\n\r\n return schema;\r\n }\r\n}\r\n\r\n/**\r\n * Sets the editable properties of a Schema.\r\n * @internal\r\n */\r\nasync function mergeSchemaProperties(schema: MutableSchema, changes: SchemaDifference) {\r\n if(changes.difference.label !== undefined) {\r\n schema.setDisplayLabel(changes.difference.label);\r\n }\r\n if(changes.difference.description !== undefined) {\r\n schema.setDescription(changes.difference.description);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.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 Merging\r\n */\r\n\r\nimport { MutableSchema } from \"../Editing/Mutable/MutableSchema\";\r\nimport { Schema, type SchemaContext, SchemaKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor } from \"../Editing/Editor\";\r\nimport { SchemaConflictsError } from \"../Differencing/Errors\";\r\nimport { getSchemaDifferences, SchemaDifference, SchemaDifferenceResult } from \"../Differencing/SchemaDifference\";\r\nimport { mergeCustomAttribute } from \"./CustomAttributeMerger\";\r\nimport { mergeSchemaItems } from \"./SchemaItemMerger\";\r\nimport { mergeSchemaReferences } from \"./SchemaReferenceMerger\";\r\nimport * as Utils from \"../Differencing/Utils\";\r\n\r\n/**\r\n * Defines the context of a Schema merging run.\r\n * @internal\r\n */\r\nexport interface SchemaMergeContext {\r\n readonly targetSchema: Schema;\r\n readonly targetSchemaKey: SchemaKey;\r\n readonly sourceSchemaKey: SchemaKey;\r\n readonly editor: SchemaContextEditor;\r\n}\r\n\r\n/**\r\n * Class to merge two schemas together.\r\n * @see [[merge]] to merge the schemas.\r\n * @beta\r\n */\r\nexport class SchemaMerger {\r\n\r\n private readonly _editor: SchemaContextEditor;\r\n\r\n /**\r\n * Constructs a new instance of the SchemaMerger object.\r\n * @param editingContext The schema contexts that holds the schema to be edited.\r\n */\r\n constructor(editingContext: SchemaContext) {\r\n this._editor = new SchemaContextEditor(editingContext);\r\n }\r\n\r\n /**\r\n * Copy the SchemaItems of the source schemas to the target schema.\r\n * @param targetSchema The schema the SchemaItems gets merged to.\r\n * @param sourceSchema The schema the SchemaItems gets copied from.\r\n * @returns The merged target schema.\r\n */\r\n public async mergeSchemas(targetSchema: Schema, sourceSchema: Schema): Promise<Schema> {\r\n return this.merge(await getSchemaDifferences(targetSchema, sourceSchema));\r\n }\r\n\r\n /**\r\n * Merges the schema differences into the target schema context.\r\n * @param differenceResult The differences that shall be applied to the target schema.\r\n * @alpha\r\n */\r\n public async merge(differenceResult: SchemaDifferenceResult): Promise<Schema> {\r\n return this.mergeDifferences(differenceResult);\r\n }\r\n\r\n /**\r\n * Merges the schema differences in the target schema. The target schema is defined\r\n * in the given differences object.\r\n * @param differenceResult The differences between a source schema and the target schema.\r\n * @returns The modified Schema.\r\n */\r\n private async mergeDifferences(differenceResult: SchemaDifferenceResult): Promise<Schema> {\r\n const targetSchemaKey = SchemaKey.parseString(differenceResult.targetSchemaName);\r\n const sourceSchemaKey = SchemaKey.parseString(differenceResult.sourceSchemaName);\r\n\r\n if (differenceResult.conflicts && differenceResult.conflicts.length > 0) {\r\n throw new SchemaConflictsError(\r\n \"Schema's can't be merged if there are unresolved conflicts.\",\r\n differenceResult.conflicts,\r\n sourceSchemaKey,\r\n targetSchemaKey,\r\n );\r\n }\r\n\r\n const schema = await this._editor.getSchema(targetSchemaKey);\r\n if (schema === undefined) {\r\n throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);\r\n }\r\n\r\n const { differences } = differenceResult;\r\n if (differences === undefined || differences.length === 0) {\r\n return schema;\r\n }\r\n\r\n const context: SchemaMergeContext = {\r\n editor: this._editor,\r\n targetSchema: schema,\r\n targetSchemaKey,\r\n sourceSchemaKey,\r\n };\r\n\r\n for (const referenceChange of differences.filter(Utils.isSchemaReferenceDifference)) {\r\n await mergeSchemaReferences(context, referenceChange);\r\n }\r\n\r\n const schemaDifference = differences.find(Utils.isSchemaDifference);\r\n if (schemaDifference !== undefined) {\r\n await mergeSchemaProperties(schema, schemaDifference);\r\n }\r\n\r\n // Filter a list of possible schema item changes. This list gets filtered and order in the\r\n // mergeSchemaItems method.\r\n for await (const _mergeResult of mergeSchemaItems(context, differences)) {\r\n }\r\n\r\n // At last the custom attributes gets merged because it could be that the CustomAttributes\r\n // depend on classes that has to get merged in as items before.\r\n for (const customAttributeChange of differences.filter(Utils.isCustomAttributeDifference)) {\r\n await mergeCustomAttribute(context, customAttributeChange);\r\n }\r\n\r\n return schema;\r\n }\r\n}\r\n\r\n/**\r\n * Sets the editable properties of a Schema.\r\n * @internal\r\n */\r\nasync function mergeSchemaProperties(schema: MutableSchema, { difference }: SchemaDifference) {\r\n if (difference.label !== undefined) {\r\n schema.setDisplayLabel(difference.label);\r\n }\r\n if (difference.description !== undefined) {\r\n schema.setDescription(difference.description);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaCompareVisitor.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,6BAA6B,EAClF,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAClG,UAAU,EAAY,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EACrG,WAAW,EAAE,IAAI,EAAE,UAAU,EAC9B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAkB;IAEzC;;;;OAIG;gBACS,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM;IAKpE;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM;IAI5C;;;OAGG;IACU,eAAe,CAAC,WAAW,EAAE,UAAU;IAKpD;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;;OAGG;IACU,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;;OAGG;IACU,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;;OAGG;IACU,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrD;;;OAGG;IACU,sBAAsB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpF;;;OAGG;IACU,2BAA2B,CAAC,WAAW,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5F;;;OAGG;IACU,yBAAyB,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7F;;;OAGG;IACU,6BAA6B,CAAC,UAAU,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpG;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAKhD;;;OAGG;IACU,mBAAmB,CAAC,IAAI,EAAE,cAAc;IAKrD;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,gBAAgB;IAK9D;;;OAGG;IACU,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;;OAGG;IACU,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlD;;;OAGG;IACU,iBAAiB,CAAC,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E;;;OAGG;IACU,eAAe,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;OAGG;IACU,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpE;;;OAGG;IACU,aAAa,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAI/D"}
1
+ {"version":3,"file":"SchemaCompareVisitor.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE,6BAA6B,EAClF,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,KAAK,EAClG,UAAU,EAAY,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,EAAE,UAAU,EACrF,WAAW,EAAE,IAAI,EAAE,UAAU,EAC9C,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,kBAAkB;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAkB;IAEzC;;;;OAIG;gBACS,cAAc,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM;IAKpE;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,MAAM;IAI5C;;;OAGG;IACU,eAAe,CAAC,WAAW,EAAE,UAAU;IAKpD;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD;;;OAGG;IACU,aAAa,CAAC,SAAS,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjE;;;OAGG;IACU,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;;OAGG;IACU,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAInE;;;OAGG;IACU,UAAU,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD;;;OAGG;IACU,sBAAsB,CAAC,aAAa,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpF;;;OAGG;IACU,2BAA2B,CAAC,WAAW,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5F;;;OAGG;IACU,yBAAyB,CAAC,gBAAgB,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7F;;;OAGG;IACU,6BAA6B,CAAC,UAAU,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBpG;;;OAGG;IACU,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAMhD;;;OAGG;IACU,mBAAmB,CAAC,IAAI,EAAE,cAAc;IAMrD;;;OAGG;IACU,qBAAqB,CAAC,SAAS,EAAE,gBAAgB;IAM9D;;;OAGG;IACU,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMxD;;;OAGG;IACU,SAAS,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD;;;OAGG;IACU,iBAAiB,CAAC,aAAa,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1E;;;OAGG;IACU,eAAe,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;;OAGG;IACU,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpE;;;OAGG;IACU,aAAa,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAK/D"}
@@ -53,7 +53,7 @@ class SchemaCompareVisitor {
53
53
  async visitProperty(propertyA) {
54
54
  let propertyB;
55
55
  const classB = await this._schemaB.lookupItem(propertyA.class.name);
56
- if (classB) {
56
+ if (classB && ecschema_metadata_1.ECClass.isECClass(classB)) {
57
57
  propertyB = await classB.getProperty(propertyA.name);
58
58
  this._schemaComparer.compareProperties(propertyA, propertyB);
59
59
  }
@@ -79,7 +79,8 @@ class SchemaCompareVisitor {
79
79
  */
80
80
  async visitMixin(mixinA) {
81
81
  const mixinB = await this._schemaB.lookupItem(mixinA.name);
82
- this._schemaComparer.compareMixins(mixinA, mixinB);
82
+ if (!mixinB || mixinB.schemaItemType === ecschema_metadata_1.SchemaItemType.Mixin)
83
+ this._schemaComparer.compareMixins(mixinA, mixinB);
83
84
  }
84
85
  /**
85
86
  * Called for each [[RelationshipClass]] instance found during schema traversal.
@@ -87,7 +88,8 @@ class SchemaCompareVisitor {
87
88
  */
88
89
  async visitRelationshipClass(relationshipA) {
89
90
  const relationshipB = await this._schemaB.lookupItem(relationshipA.name);
90
- this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);
91
+ if (!relationshipB || relationshipB.schemaItemType === ecschema_metadata_1.SchemaItemType.RelationshipClass)
92
+ this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);
91
93
  }
92
94
  /**
93
95
  * Called for each [[RelationshipConstraint]] of each RelationshipClass found during schema traversal.
@@ -96,7 +98,7 @@ class SchemaCompareVisitor {
96
98
  async visitRelationshipConstraint(constraintA) {
97
99
  let constraintB;
98
100
  const relationshipB = await this._schemaB.lookupItem(constraintA.relationshipClass.name);
99
- if (relationshipB)
101
+ if (relationshipB && relationshipB.schemaItemType === ecschema_metadata_1.SchemaItemType.RelationshipClass)
100
102
  constraintB = constraintA.isSource ? relationshipB.source : relationshipB.target;
101
103
  this._schemaComparer.compareRelationshipConstraints(constraintA, constraintB);
102
104
  }
@@ -106,7 +108,8 @@ class SchemaCompareVisitor {
106
108
  */
107
109
  async visitCustomAttributeClass(customAttributeA) {
108
110
  const customAttributeB = await this._schemaB.lookupItem(customAttributeA.name);
109
- this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);
111
+ if (!customAttributeB || customAttributeB.schemaItemType === ecschema_metadata_1.SchemaItemType.CustomAttributeClass)
112
+ this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);
110
113
  }
111
114
  /**
112
115
  * Called for each [[CustomAttribute]] container in the schema.
@@ -124,7 +127,7 @@ class SchemaCompareVisitor {
124
127
  }
125
128
  else if (ecschema_metadata_1.Property.isProperty(containerA)) {
126
129
  const parent = await this._schemaB.lookupItem(containerA.class.name);
127
- containerB = parent ? await parent.getProperty(shortName) : undefined;
130
+ containerB = parent && ecschema_metadata_1.ECClass.isECClass(parent) ? await parent.getProperty(shortName) : undefined;
128
131
  }
129
132
  else if (ecschema_metadata_1.RelationshipConstraint.isRelationshipConstraint(containerA)) {
130
133
  const parent = await this._schemaB.lookupItem(containerA.relationshipClass.name);
@@ -138,7 +141,8 @@ class SchemaCompareVisitor {
138
141
  */
139
142
  async visitEnumeration(enumA) {
140
143
  const enumB = await this._schemaB.lookupItem(enumA.name);
141
- this._schemaComparer.compareEnumerations(enumA, enumB);
144
+ if (!enumB || enumB.schemaItemType === ecschema_metadata_1.SchemaItemType.Enumeration)
145
+ this._schemaComparer.compareEnumerations(enumA, enumB);
142
146
  }
143
147
  /**
144
148
  * Called for each [[KindOfQuantity]] instance found during schema traversal.
@@ -146,7 +150,8 @@ class SchemaCompareVisitor {
146
150
  */
147
151
  async visitKindOfQuantity(koqA) {
148
152
  const koqB = await this._schemaB.lookupItem(koqA.name);
149
- this._schemaComparer.compareKindOfQuantities(koqA, koqB);
153
+ if (!koqB || koqB.schemaItemType === ecschema_metadata_1.SchemaItemType.KindOfQuantity)
154
+ this._schemaComparer.compareKindOfQuantities(koqA, koqB);
150
155
  }
151
156
  /**
152
157
  * Called for each [[PropertyCategory]] instance found during schema traversal.
@@ -154,7 +159,8 @@ class SchemaCompareVisitor {
154
159
  */
155
160
  async visitPropertyCategory(categoryA) {
156
161
  const categoryB = await this._schemaB.lookupItem(categoryA.name);
157
- this._schemaComparer.comparePropertyCategories(categoryA, categoryB);
162
+ if (!categoryB || categoryB.schemaItemType === ecschema_metadata_1.SchemaItemType.PropertyCategory)
163
+ this._schemaComparer.comparePropertyCategories(categoryA, categoryB);
158
164
  }
159
165
  /**
160
166
  * Called for each [[Format]] instance found during schema traversal.
@@ -162,7 +168,8 @@ class SchemaCompareVisitor {
162
168
  */
163
169
  async visitFormat(formatA) {
164
170
  const formatB = await this._schemaB.lookupItem(formatA.name);
165
- this._schemaComparer.compareFormats(formatA, formatB);
171
+ if (!formatB || formatB.schemaItemType === ecschema_metadata_1.SchemaItemType.Format)
172
+ this._schemaComparer.compareFormats(formatA, formatB);
166
173
  }
167
174
  /**
168
175
  * Called for each [[Unit]] instance found during schema traversal.
@@ -170,7 +177,8 @@ class SchemaCompareVisitor {
170
177
  */
171
178
  async visitUnit(unitA) {
172
179
  const unitB = await this._schemaB.lookupItem(unitA.name);
173
- this._schemaComparer.compareUnits(unitA, unitB);
180
+ if (!unitB || ecschema_metadata_1.Unit.isUnit(unitB))
181
+ this._schemaComparer.compareUnits(unitA, unitB);
174
182
  }
175
183
  /**
176
184
  * Called for each [[InvertedUnit]] instance found during schema traversal.
@@ -178,7 +186,8 @@ class SchemaCompareVisitor {
178
186
  */
179
187
  async visitInvertedUnit(invertedUnitA) {
180
188
  const invertedUnitB = await this._schemaB.lookupItem(invertedUnitA.name);
181
- this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);
189
+ if (!invertedUnitB || invertedUnitB.schemaItemType === ecschema_metadata_1.SchemaItemType.InvertedUnit)
190
+ this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);
182
191
  }
183
192
  /**
184
193
  * Called for each [[UnitSystem]] instance found during schema traversal.
@@ -193,7 +202,8 @@ class SchemaCompareVisitor {
193
202
  */
194
203
  async visitPhenomenon(phenomenonA) {
195
204
  const phenomenonB = await this._schemaB.lookupItem(phenomenonA.name);
196
- this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);
205
+ if (!phenomenonB || phenomenonB.schemaItemType === ecschema_metadata_1.SchemaItemType.Phenomenon)
206
+ this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);
197
207
  }
198
208
  /**
199
209
  * Called for each [[Constant]] instance found during schema traversal.
@@ -201,7 +211,8 @@ class SchemaCompareVisitor {
201
211
  */
202
212
  async visitConstant(constantA) {
203
213
  const constantB = await this._schemaB.lookupItem(constantA.name);
204
- this._schemaComparer.compareConstants(constantA, constantB);
214
+ if (!constantB || constantB.schemaItemType === ecschema_metadata_1.SchemaItemType.Constant)
215
+ this._schemaComparer.compareConstants(constantA, constantB);
205
216
  }
206
217
  }
207
218
  exports.SchemaCompareVisitor = SchemaCompareVisitor;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaCompareVisitor.js","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.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 { AnyClass, AnyProperty, Constant, CustomAttributeClass, CustomAttributeContainerProps,\r\n ECClass, EntityClass, Enumeration, Format, InvertedUnit, ISchemaPartVisitor, KindOfQuantity, Mixin,\r\n Phenomenon, Property, PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem,\r\n StructClass, Unit, UnitSystem,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { ISchemaComparer } from \"./SchemaComparer\";\r\n\r\n/**\r\n * An ISchemaPartVisitor interface implementation that is used to compare to Schemas.\r\n * @internal\r\n */\r\nexport class SchemaCompareVisitor implements ISchemaPartVisitor {\r\n private _schemaB: Schema;\r\n private _schemaComparer: ISchemaComparer;\r\n\r\n /**\r\n * Initializes a new SchemaCompareVisitor instance.\r\n * @param schemaComparer The [[SchemaComparer]] to use to compare each item of the schema.\r\n * @param schemaToCompare The second or 'B' schema to compare against the schema being traversed (Schema A).\r\n */\r\n constructor(schemaComparer: ISchemaComparer, schemaToCompare: Schema) {\r\n this._schemaComparer = schemaComparer;\r\n this._schemaB = schemaToCompare;\r\n }\r\n\r\n /**\r\n * Called before schema traversal.\r\n * @param schema a Schema object.\r\n */\r\n public async visitFullSchema(schemaA: Schema) {\r\n this._schemaComparer.compareSchemaProps(schemaA, this._schemaB);\r\n }\r\n\r\n /**\r\n * Called for each [[SchemaItem]] instance found during schema traversal.\r\n * @param schemaItem a SchemaItem object.\r\n */\r\n public async visitSchemaItem(schemaItemA: SchemaItem) {\r\n const schemaItemB = await this._schemaB.lookupItem(schemaItemA.name);\r\n this._schemaComparer.compareSchemaItems(schemaItemA, schemaItemB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyClass]] instance found during schema traversal.\r\n * @param ecClass an ECClass object.\r\n */\r\n public async visitClass(classA: AnyClass): Promise<void> {\r\n const classB = await this._schemaB.lookupItem<AnyClass>(classA.name);\r\n this._schemaComparer.compareClasses(classA, classB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyProperty]] instance of an ECClass.\r\n * @param property an AnyProperty object.\r\n */\r\n public async visitProperty(propertyA: AnyProperty): Promise<void> {\r\n let propertyB: AnyProperty | undefined;\r\n\r\n const classB = await this._schemaB.lookupItem<ECClass>(propertyA.class.name);\r\n if (classB) {\r\n propertyB = await classB.getProperty(propertyA.name) as AnyProperty;\r\n this._schemaComparer.compareProperties(propertyA, propertyB);\r\n }\r\n }\r\n\r\n /**\r\n * Called for each [[EntityClass]] instance found during schema traversal.\r\n * @param entityClass an EntityClass object.\r\n */\r\n public async visitEntityClass(entityA: EntityClass): Promise<void> {\r\n const entityB = await this._schemaB.lookupItem<EntityClass>(entityA.name);\r\n this._schemaComparer.compareEntityClasses(entityA, entityB);\r\n }\r\n\r\n /**\r\n * Called for each [[StructClass]] instance found during schema traversal.\r\n * @param structClass a StructClass object.\r\n */\r\n public async visitStructClass(_structA: StructClass): Promise<void> {\r\n // No comparison to make specifically on StructClasses\r\n }\r\n\r\n /**\r\n * Called for each [[Mixin]] instance found during schema traversal.\r\n * @param mixin a Mixin object.\r\n */\r\n public async visitMixin(mixinA: Mixin): Promise<void> {\r\n const mixinB = await this._schemaB.lookupItem<Mixin>(mixinA.name);\r\n this._schemaComparer.compareMixins(mixinA, mixinB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipClass]] instance found during schema traversal.\r\n * @param relationshipClass a RelationshipClass object.\r\n */\r\n public async visitRelationshipClass(relationshipA: RelationshipClass): Promise<void> {\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(relationshipA.name);\r\n this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipConstraint]] of each RelationshipClass found during schema traversal.\r\n * @param relationshipConstraint a RelationshipConstraint object.\r\n */\r\n public async visitRelationshipConstraint(constraintA: RelationshipConstraint): Promise<void> {\r\n let constraintB: RelationshipConstraint | undefined;\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(constraintA.relationshipClass.name);\r\n if (relationshipB)\r\n constraintB = constraintA.isSource ? relationshipB.source : relationshipB.target;\r\n this._schemaComparer.compareRelationshipConstraints(constraintA, constraintB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttributeClass]] instance found during schema traversal.\r\n * @param customAttributeClass a CustomAttributeClass object.\r\n */\r\n public async visitCustomAttributeClass(customAttributeA: CustomAttributeClass): Promise<void> {\r\n const customAttributeB = await this._schemaB.lookupItem<CustomAttributeClass>(customAttributeA.name);\r\n this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttribute]] container in the schema.\r\n * @param customAttributeContainer a [[CustomAttributeContainerProps]] object.\r\n */\r\n public async visitCustomAttributeContainer(containerA: CustomAttributeContainerProps): Promise<void> {\r\n const nameParts = containerA.fullName.split(\".\");\r\n const shortName = nameParts.length === 1 ? nameParts[0] : nameParts[1];\r\n let containerB: CustomAttributeContainerProps | undefined;\r\n\r\n if (Schema.isSchema(containerA)) {\r\n containerB = this._schemaB;\r\n } else if (ECClass.isECClass(containerA)) {\r\n containerB = await this._schemaB.lookupItem(containerA.name);\r\n } else if (Property.isProperty(containerA)) {\r\n const parent = await this._schemaB.lookupItem<ECClass>(containerA.class.name);\r\n containerB = parent ? await parent.getProperty(shortName) : undefined;\r\n } else if (RelationshipConstraint.isRelationshipConstraint(containerA)) {\r\n const parent = await this._schemaB.lookupItem<RelationshipClass>(containerA.relationshipClass.name);\r\n containerB = parent ? containerA.isSource ? parent.source : parent.target : undefined;\r\n }\r\n\r\n this._schemaComparer.compareCustomAttributeContainers(containerA, containerB);\r\n }\r\n\r\n /**\r\n * Called for each [[Enumeration]] instance found during schema traversal.\r\n * @param enumeration an Enumeration object.\r\n */\r\n public async visitEnumeration(enumA: Enumeration) {\r\n const enumB = await this._schemaB.lookupItem<Enumeration>(enumA.name);\r\n this._schemaComparer.compareEnumerations(enumA, enumB);\r\n }\r\n\r\n /**\r\n * Called for each [[KindOfQuantity]] instance found during schema traversal.\r\n * @param koq a KindOfQuantity object.\r\n */\r\n public async visitKindOfQuantity(koqA: KindOfQuantity) {\r\n const koqB = await this._schemaB.lookupItem<KindOfQuantity>(koqA.name);\r\n this._schemaComparer.compareKindOfQuantities(koqA, koqB);\r\n }\r\n\r\n /**\r\n * Called for each [[PropertyCategory]] instance found during schema traversal.\r\n * @param category a PropertyCategory object.\r\n */\r\n public async visitPropertyCategory(categoryA: PropertyCategory) {\r\n const categoryB = await this._schemaB.lookupItem<PropertyCategory>(categoryA.name);\r\n this._schemaComparer.comparePropertyCategories(categoryA, categoryB);\r\n }\r\n\r\n /**\r\n * Called for each [[Format]] instance found during schema traversal.\r\n * @param format a Format object.\r\n */\r\n public async visitFormat(formatA: Format): Promise<void> {\r\n const formatB = await this._schemaB.lookupItem<Format>(formatA.name);\r\n this._schemaComparer.compareFormats(formatA, formatB);\r\n }\r\n\r\n /**\r\n * Called for each [[Unit]] instance found during schema traversal.\r\n * @param unit a Unit object.\r\n */\r\n public async visitUnit(unitA: Unit): Promise<void> {\r\n const unitB = await this._schemaB.lookupItem<Unit>(unitA.name);\r\n this._schemaComparer.compareUnits(unitA, unitB);\r\n }\r\n\r\n /**\r\n * Called for each [[InvertedUnit]] instance found during schema traversal.\r\n * @param invertedUnit an InvertedUnit object.\r\n */\r\n public async visitInvertedUnit(invertedUnitA: InvertedUnit): Promise<void> {\r\n const invertedUnitB = await this._schemaB.lookupItem<InvertedUnit>(invertedUnitA.name);\r\n this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);\r\n }\r\n\r\n /**\r\n * Called for each [[UnitSystem]] instance found during schema traversal.\r\n * @param unitSystem a UnitSystem object.\r\n */\r\n public async visitUnitSystem(_unitSystemA: UnitSystem): Promise<void> {\r\n // No comparison to make specifically on unitSystem\r\n }\r\n\r\n /**\r\n * Called for each [[Phenomenon]] instance found during schema traversal.\r\n * @param phenomena a Phenomenon object.\r\n */\r\n public async visitPhenomenon(phenomenonA: Phenomenon): Promise<void> {\r\n const phenomenonB = await this._schemaB.lookupItem<Phenomenon>(phenomenonA.name);\r\n this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);\r\n }\r\n\r\n /**\r\n * Called for each [[Constant]] instance found during schema traversal.\r\n * @param constant a Constant object.\r\n */\r\n public async visitConstant(constantA: Constant): Promise<void> {\r\n const constantB = await this._schemaB.lookupItem<Constant>(constantA.name);\r\n this._schemaComparer.compareConstants(constantA, constantB);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaCompareVisitor.js","sourceRoot":"","sources":["../../../src/Validation/SchemaCompareVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Comparison\r\n */\r\n\r\nimport { AnyClass, AnyProperty, Constant, CustomAttributeClass, CustomAttributeContainerProps,\r\n ECClass, EntityClass, Enumeration, Format, InvertedUnit, ISchemaPartVisitor, KindOfQuantity, Mixin,\r\n Phenomenon, Property, PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem,\r\n SchemaItemType, StructClass, Unit, UnitSystem,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { ISchemaComparer } from \"./SchemaComparer\";\r\n\r\n/**\r\n * An ISchemaPartVisitor interface implementation that is used to compare to Schemas.\r\n * @internal\r\n */\r\nexport class SchemaCompareVisitor implements ISchemaPartVisitor {\r\n private _schemaB: Schema;\r\n private _schemaComparer: ISchemaComparer;\r\n\r\n /**\r\n * Initializes a new SchemaCompareVisitor instance.\r\n * @param schemaComparer The [[SchemaComparer]] to use to compare each item of the schema.\r\n * @param schemaToCompare The second or 'B' schema to compare against the schema being traversed (Schema A).\r\n */\r\n constructor(schemaComparer: ISchemaComparer, schemaToCompare: Schema) {\r\n this._schemaComparer = schemaComparer;\r\n this._schemaB = schemaToCompare;\r\n }\r\n\r\n /**\r\n * Called before schema traversal.\r\n * @param schema a Schema object.\r\n */\r\n public async visitFullSchema(schemaA: Schema) {\r\n this._schemaComparer.compareSchemaProps(schemaA, this._schemaB);\r\n }\r\n\r\n /**\r\n * Called for each [[SchemaItem]] instance found during schema traversal.\r\n * @param schemaItem a SchemaItem object.\r\n */\r\n public async visitSchemaItem(schemaItemA: SchemaItem) {\r\n const schemaItemB = await this._schemaB.lookupItem(schemaItemA.name);\r\n this._schemaComparer.compareSchemaItems(schemaItemA, schemaItemB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyClass]] instance found during schema traversal.\r\n * @param ecClass an ECClass object.\r\n */\r\n public async visitClass(classA: AnyClass): Promise<void> {\r\n const classB = await this._schemaB.lookupItem<AnyClass>(classA.name);\r\n this._schemaComparer.compareClasses(classA, classB);\r\n }\r\n\r\n /**\r\n * Called for each [[AnyProperty]] instance of an ECClass.\r\n * @param property an AnyProperty object.\r\n */\r\n public async visitProperty(propertyA: AnyProperty): Promise<void> {\r\n let propertyB: AnyProperty | undefined;\r\n\r\n const classB = await this._schemaB.lookupItem<ECClass>(propertyA.class.name);\r\n if (classB && ECClass.isECClass(classB)) {\r\n propertyB = await classB.getProperty(propertyA.name) as AnyProperty;\r\n this._schemaComparer.compareProperties(propertyA, propertyB);\r\n }\r\n }\r\n\r\n /**\r\n * Called for each [[EntityClass]] instance found during schema traversal.\r\n * @param entityClass an EntityClass object.\r\n */\r\n public async visitEntityClass(entityA: EntityClass): Promise<void> {\r\n const entityB = await this._schemaB.lookupItem<EntityClass>(entityA.name);\r\n this._schemaComparer.compareEntityClasses(entityA, entityB);\r\n }\r\n\r\n /**\r\n * Called for each [[StructClass]] instance found during schema traversal.\r\n * @param structClass a StructClass object.\r\n */\r\n public async visitStructClass(_structA: StructClass): Promise<void> {\r\n // No comparison to make specifically on StructClasses\r\n }\r\n\r\n /**\r\n * Called for each [[Mixin]] instance found during schema traversal.\r\n * @param mixin a Mixin object.\r\n */\r\n public async visitMixin(mixinA: Mixin): Promise<void> {\r\n const mixinB = await this._schemaB.lookupItem<Mixin>(mixinA.name);\r\n if (!mixinB || mixinB.schemaItemType === SchemaItemType.Mixin)\r\n this._schemaComparer.compareMixins(mixinA, mixinB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipClass]] instance found during schema traversal.\r\n * @param relationshipClass a RelationshipClass object.\r\n */\r\n public async visitRelationshipClass(relationshipA: RelationshipClass): Promise<void> {\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(relationshipA.name);\r\n if (!relationshipB || relationshipB.schemaItemType === SchemaItemType.RelationshipClass)\r\n this._schemaComparer.compareRelationshipClasses(relationshipA, relationshipB);\r\n }\r\n\r\n /**\r\n * Called for each [[RelationshipConstraint]] of each RelationshipClass found during schema traversal.\r\n * @param relationshipConstraint a RelationshipConstraint object.\r\n */\r\n public async visitRelationshipConstraint(constraintA: RelationshipConstraint): Promise<void> {\r\n let constraintB: RelationshipConstraint | undefined;\r\n const relationshipB = await this._schemaB.lookupItem<RelationshipClass>(constraintA.relationshipClass.name);\r\n if (relationshipB && relationshipB.schemaItemType === SchemaItemType.RelationshipClass)\r\n constraintB = constraintA.isSource ? relationshipB.source : relationshipB.target;\r\n this._schemaComparer.compareRelationshipConstraints(constraintA, constraintB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttributeClass]] instance found during schema traversal.\r\n * @param customAttributeClass a CustomAttributeClass object.\r\n */\r\n public async visitCustomAttributeClass(customAttributeA: CustomAttributeClass): Promise<void> {\r\n const customAttributeB = await this._schemaB.lookupItem<CustomAttributeClass>(customAttributeA.name);\r\n if (!customAttributeB || customAttributeB.schemaItemType === SchemaItemType.CustomAttributeClass)\r\n this._schemaComparer.compareCustomAttributeClasses(customAttributeA, customAttributeB);\r\n }\r\n\r\n /**\r\n * Called for each [[CustomAttribute]] container in the schema.\r\n * @param customAttributeContainer a [[CustomAttributeContainerProps]] object.\r\n */\r\n public async visitCustomAttributeContainer(containerA: CustomAttributeContainerProps): Promise<void> {\r\n const nameParts = containerA.fullName.split(\".\");\r\n const shortName = nameParts.length === 1 ? nameParts[0] : nameParts[1];\r\n let containerB: CustomAttributeContainerProps | undefined;\r\n\r\n if (Schema.isSchema(containerA)) {\r\n containerB = this._schemaB;\r\n } else if (ECClass.isECClass(containerA)) {\r\n containerB = await this._schemaB.lookupItem(containerA.name);\r\n } else if (Property.isProperty(containerA)) {\r\n const parent = await this._schemaB.lookupItem<ECClass>(containerA.class.name);\r\n containerB = parent && ECClass.isECClass(parent) ? await parent.getProperty(shortName) : undefined;\r\n } else if (RelationshipConstraint.isRelationshipConstraint(containerA)) {\r\n const parent = await this._schemaB.lookupItem<RelationshipClass>(containerA.relationshipClass.name);\r\n containerB = parent ? containerA.isSource ? parent.source : parent.target : undefined;\r\n }\r\n\r\n this._schemaComparer.compareCustomAttributeContainers(containerA, containerB);\r\n }\r\n\r\n /**\r\n * Called for each [[Enumeration]] instance found during schema traversal.\r\n * @param enumeration an Enumeration object.\r\n */\r\n public async visitEnumeration(enumA: Enumeration) {\r\n const enumB = await this._schemaB.lookupItem<Enumeration>(enumA.name);\r\n if (!enumB || enumB.schemaItemType === SchemaItemType.Enumeration)\r\n this._schemaComparer.compareEnumerations(enumA, enumB);\r\n }\r\n\r\n /**\r\n * Called for each [[KindOfQuantity]] instance found during schema traversal.\r\n * @param koq a KindOfQuantity object.\r\n */\r\n public async visitKindOfQuantity(koqA: KindOfQuantity) {\r\n const koqB = await this._schemaB.lookupItem<KindOfQuantity>(koqA.name);\r\n if (!koqB || koqB.schemaItemType === SchemaItemType.KindOfQuantity)\r\n this._schemaComparer.compareKindOfQuantities(koqA, koqB);\r\n }\r\n\r\n /**\r\n * Called for each [[PropertyCategory]] instance found during schema traversal.\r\n * @param category a PropertyCategory object.\r\n */\r\n public async visitPropertyCategory(categoryA: PropertyCategory) {\r\n const categoryB = await this._schemaB.lookupItem<PropertyCategory>(categoryA.name);\r\n if (!categoryB || categoryB.schemaItemType === SchemaItemType.PropertyCategory)\r\n this._schemaComparer.comparePropertyCategories(categoryA, categoryB);\r\n }\r\n\r\n /**\r\n * Called for each [[Format]] instance found during schema traversal.\r\n * @param format a Format object.\r\n */\r\n public async visitFormat(formatA: Format): Promise<void> {\r\n const formatB = await this._schemaB.lookupItem<Format>(formatA.name);\r\n if (!formatB || formatB.schemaItemType === SchemaItemType.Format)\r\n this._schemaComparer.compareFormats(formatA, formatB);\r\n }\r\n\r\n /**\r\n * Called for each [[Unit]] instance found during schema traversal.\r\n * @param unit a Unit object.\r\n */\r\n public async visitUnit(unitA: Unit): Promise<void> {\r\n const unitB = await this._schemaB.lookupItem<Unit>(unitA.name);\r\n if (!unitB || Unit.isUnit(unitB))\r\n this._schemaComparer.compareUnits(unitA, unitB);\r\n }\r\n\r\n /**\r\n * Called for each [[InvertedUnit]] instance found during schema traversal.\r\n * @param invertedUnit an InvertedUnit object.\r\n */\r\n public async visitInvertedUnit(invertedUnitA: InvertedUnit): Promise<void> {\r\n const invertedUnitB = await this._schemaB.lookupItem<InvertedUnit>(invertedUnitA.name);\r\n if (!invertedUnitB || invertedUnitB.schemaItemType === SchemaItemType.InvertedUnit)\r\n this._schemaComparer.compareInvertedUnits(invertedUnitA, invertedUnitB);\r\n }\r\n\r\n /**\r\n * Called for each [[UnitSystem]] instance found during schema traversal.\r\n * @param unitSystem a UnitSystem object.\r\n */\r\n public async visitUnitSystem(_unitSystemA: UnitSystem): Promise<void> {\r\n // No comparison to make specifically on unitSystem\r\n }\r\n\r\n /**\r\n * Called for each [[Phenomenon]] instance found during schema traversal.\r\n * @param phenomena a Phenomenon object.\r\n */\r\n public async visitPhenomenon(phenomenonA: Phenomenon): Promise<void> {\r\n const phenomenonB = await this._schemaB.lookupItem<Phenomenon>(phenomenonA.name);\r\n if (!phenomenonB || phenomenonB.schemaItemType === SchemaItemType.Phenomenon)\r\n this._schemaComparer.comparePhenomenons(phenomenonA, phenomenonB);\r\n }\r\n\r\n /**\r\n * Called for each [[Constant]] instance found during schema traversal.\r\n * @param constant a Constant object.\r\n */\r\n public async visitConstant(constantA: Constant): Promise<void> {\r\n const constantB = await this._schemaB.lookupItem<Constant>(constantA.name);\r\n if (!constantB || constantB.schemaItemType === SchemaItemType.Constant)\r\n this._schemaComparer.compareConstants(constantA, constantB);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SchemaComparer.d.ts","sourceRoot":"","sources":["../../../src/Validation/SchemaComparer.ts"],"names":[],"mappings":"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"}
@@ -679,8 +679,8 @@ class SchemaComparer {
679
679
  * @returns true if both names are the same and they come from their respective top level schema.
680
680
  */
681
681
  areItemsSameByName(itemKeyA, itemKeyB, topLevelSchemaNameA, topLevelSchemaNameB) {
682
- const nameA = itemKeyA ? itemKeyA.name : undefined;
683
- const nameB = itemKeyB ? itemKeyB.name : undefined;
682
+ const nameA = itemKeyA ? itemKeyA.name.toUpperCase() : undefined;
683
+ const nameB = itemKeyB ? itemKeyB.name.toUpperCase() : undefined;
684
684
  const schemaNameA = itemKeyA
685
685
  ? ecschema_metadata_1.SchemaItem.isSchemaItem(itemKeyA)
686
686
  ? itemKeyA.schema.name
@@ -702,19 +702,18 @@ class SchemaComparer {
702
702
  */
703
703
  containerHasClass(attributeA, containerA, containerB) {
704
704
  if (containerB && containerB.customAttributes) {
705
- for (const caB of containerB.customAttributes) {
706
- const attributeB = caB[1];
705
+ for (const [_className, attributeB] of containerB.customAttributes) {
707
706
  const classItemKeyA = containerA.schema.getSchemaItemKey(attributeA.className);
708
707
  const classItemKeyB = containerB.schema.getSchemaItemKey(attributeB.className);
709
708
  if (this.areItemsSameByName(classItemKeyA, classItemKeyB, containerA.schema.name, containerB.schema.name)) {
710
- return Object.keys(attributeA).every((property) => {
711
- const propertyName = property.toString();
709
+ return Object.keys(attributeA).every((propertyName) => {
712
710
  const valueA = attributeA[propertyName];
713
711
  const valueB = attributeB[propertyName];
714
- return propertyName === "className"
715
- || valueA === valueB
716
- || Array.isArray(valueA) && Array.isArray(valueB) && valueA.length === valueB.length
717
- && valueA.every((val, idx) => val === valueB[idx]);
712
+ // If propertyName is class name, they don't need to be compared as this has been done
713
+ // in the areItemsSameByName function.
714
+ if (propertyName === "className")
715
+ return true;
716
+ return deepEquals(valueA, valueB);
718
717
  });
719
718
  }
720
719
  }
@@ -723,4 +722,28 @@ class SchemaComparer {
723
722
  }
724
723
  }
725
724
  exports.SchemaComparer = SchemaComparer;
725
+ /**
726
+ * Compares two values on their deep equality.
727
+ * @param a left side to compare
728
+ * @param b right side to compare
729
+ * @returns true if they are deeply equal, otherwise false.
730
+ */
731
+ function deepEquals(a, b) {
732
+ if (Array.isArray(a) && Array.isArray(b)) {
733
+ return a.length === b.length && a.every((value, index) => {
734
+ return deepEquals(value, b[index]);
735
+ });
736
+ }
737
+ if (isObject(a) && isObject(b)) {
738
+ const propertiesA = Object.keys(a);
739
+ const propertiesB = Object.keys(b);
740
+ return propertiesA.length === propertiesB.length && propertiesA.every((propertyName) => {
741
+ return deepEquals(a[propertyName], b[propertyName]);
742
+ });
743
+ }
744
+ return a === b;
745
+ }
746
+ function isObject(value) {
747
+ return typeof value === "object";
748
+ }
726
749
  //# sourceMappingURL=SchemaComparer.js.map