@itwin/ecschema-editing 5.2.0-dev.8 → 5.2.0

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 (195) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/lib/cjs/Differencing/Errors.js.map +1 -1
  3. package/lib/cjs/Differencing/SchemaConflicts.d.ts +2 -1
  4. package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -1
  5. package/lib/cjs/Differencing/SchemaConflicts.js +1 -0
  6. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
  7. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  8. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  9. package/lib/cjs/Differencing/SchemaDifferenceValidator.d.ts.map +1 -1
  10. package/lib/cjs/Differencing/SchemaDifferenceValidator.js +26 -4
  11. package/lib/cjs/Differencing/SchemaDifferenceValidator.js.map +1 -1
  12. package/lib/cjs/Differencing/SchemaDifferenceVisitor.js.map +1 -1
  13. package/lib/cjs/Differencing/Utils.js.map +1 -1
  14. package/lib/cjs/Editing/Constants.js.map +1 -1
  15. package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
  16. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  17. package/lib/cjs/Editing/Editor.js.map +1 -1
  18. package/lib/cjs/Editing/Entities.js.map +1 -1
  19. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  20. package/lib/cjs/Editing/Exception.js.map +1 -1
  21. package/lib/cjs/Editing/Formats.js.map +1 -1
  22. package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
  23. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  24. package/lib/cjs/Editing/Mixins.js.map +1 -1
  25. package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  26. package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
  27. package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
  28. package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
  29. package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
  30. package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
  31. package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
  32. package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  33. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  34. package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
  35. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js.map +1 -1
  36. package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  37. package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  38. package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
  39. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  40. package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  41. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  42. package/lib/cjs/Editing/Mutable/MutableSchemaItem.js.map +1 -1
  43. package/lib/cjs/Editing/Mutable/MutableStructProperty.js.map +1 -1
  44. package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
  45. package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  46. package/lib/cjs/Editing/Phenomena.js.map +1 -1
  47. package/lib/cjs/Editing/Properties.js.map +1 -1
  48. package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
  49. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  50. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  51. package/lib/cjs/Editing/Structs.js.map +1 -1
  52. package/lib/cjs/Editing/UnitSystems.js.map +1 -1
  53. package/lib/cjs/Editing/Units.js.map +1 -1
  54. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  55. package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
  56. package/lib/cjs/Merging/CustomAttributeClassMerger.js.map +1 -1
  57. package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
  58. package/lib/cjs/Merging/Edits/NameMapping.js.map +1 -1
  59. package/lib/cjs/Merging/Edits/RenameEditHandler.js.map +1 -1
  60. package/lib/cjs/Merging/Edits/SchemaEdits.js.map +1 -1
  61. package/lib/cjs/Merging/Edits/SkipEditHandler.js.map +1 -1
  62. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  63. package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
  64. package/lib/cjs/Merging/EnumeratorMerger.js.map +1 -1
  65. package/lib/cjs/Merging/FormatMerger.js.map +1 -1
  66. package/lib/cjs/Merging/InvertedUnitMerger.js.map +1 -1
  67. package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
  68. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  69. package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -1
  70. package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -1
  71. package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
  72. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
  73. package/lib/cjs/Merging/SchemaMerger.js +1 -1
  74. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  75. package/lib/cjs/Merging/SchemaMergingVisitor.js.map +1 -1
  76. package/lib/cjs/Merging/SchemaMergingWalker.js.map +1 -1
  77. package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
  78. package/lib/cjs/Merging/StructClassMerger.js.map +1 -1
  79. package/lib/cjs/Merging/UnitMerger.js.map +1 -1
  80. package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -1
  81. package/lib/cjs/Merging/Utils.js.map +1 -1
  82. package/lib/cjs/Validation/Diagnostic.js.map +1 -1
  83. package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
  84. package/lib/cjs/Validation/ECRules.js.map +1 -1
  85. package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
  86. package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
  87. package/lib/cjs/Validation/Rules.js.map +1 -1
  88. package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
  89. package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
  90. package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
  91. package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
  92. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  93. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  94. package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
  95. package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
  96. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  97. package/lib/cjs/ecschema-editing.js.map +1 -1
  98. package/lib/esm/Differencing/Errors.js.map +1 -1
  99. package/lib/esm/Differencing/SchemaConflicts.d.ts +2 -1
  100. package/lib/esm/Differencing/SchemaConflicts.d.ts.map +1 -1
  101. package/lib/esm/Differencing/SchemaConflicts.js +1 -0
  102. package/lib/esm/Differencing/SchemaConflicts.js.map +1 -1
  103. package/lib/esm/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  104. package/lib/esm/Differencing/SchemaDifference.js.map +1 -1
  105. package/lib/esm/Differencing/SchemaDifferenceValidator.d.ts.map +1 -1
  106. package/lib/esm/Differencing/SchemaDifferenceValidator.js +26 -4
  107. package/lib/esm/Differencing/SchemaDifferenceValidator.js.map +1 -1
  108. package/lib/esm/Differencing/SchemaDifferenceVisitor.js.map +1 -1
  109. package/lib/esm/Differencing/Utils.js.map +1 -1
  110. package/lib/esm/Editing/Constants.js.map +1 -1
  111. package/lib/esm/Editing/CustomAttributes.js.map +1 -1
  112. package/lib/esm/Editing/ECClasses.js.map +1 -1
  113. package/lib/esm/Editing/Editor.js.map +1 -1
  114. package/lib/esm/Editing/Entities.js.map +1 -1
  115. package/lib/esm/Editing/Enumerations.js.map +1 -1
  116. package/lib/esm/Editing/Exception.js.map +1 -1
  117. package/lib/esm/Editing/Formats.js.map +1 -1
  118. package/lib/esm/Editing/InvertedUnits.js.map +1 -1
  119. package/lib/esm/Editing/KindOfQuantities.js.map +1 -1
  120. package/lib/esm/Editing/Mixins.js.map +1 -1
  121. package/lib/esm/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  122. package/lib/esm/Editing/Mutable/MutableCAClass.js.map +1 -1
  123. package/lib/esm/Editing/Mutable/MutableClass.js.map +1 -1
  124. package/lib/esm/Editing/Mutable/MutableConstant.js.map +1 -1
  125. package/lib/esm/Editing/Mutable/MutableEntityClass.js.map +1 -1
  126. package/lib/esm/Editing/Mutable/MutableEnumeration.js.map +1 -1
  127. package/lib/esm/Editing/Mutable/MutableFormat.js.map +1 -1
  128. package/lib/esm/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  129. package/lib/esm/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  130. package/lib/esm/Editing/Mutable/MutableMixin.js.map +1 -1
  131. package/lib/esm/Editing/Mutable/MutableNavigationProperty.js.map +1 -1
  132. package/lib/esm/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  133. package/lib/esm/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  134. package/lib/esm/Editing/Mutable/MutableProperty.js.map +1 -1
  135. package/lib/esm/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  136. package/lib/esm/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  137. package/lib/esm/Editing/Mutable/MutableSchema.js.map +1 -1
  138. package/lib/esm/Editing/Mutable/MutableSchemaItem.js.map +1 -1
  139. package/lib/esm/Editing/Mutable/MutableStructProperty.js.map +1 -1
  140. package/lib/esm/Editing/Mutable/MutableUnit.js.map +1 -1
  141. package/lib/esm/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  142. package/lib/esm/Editing/Phenomena.js.map +1 -1
  143. package/lib/esm/Editing/Properties.js.map +1 -1
  144. package/lib/esm/Editing/PropertyCategories.js.map +1 -1
  145. package/lib/esm/Editing/RelationshipClasses.js.map +1 -1
  146. package/lib/esm/Editing/SchemaItems.js.map +1 -1
  147. package/lib/esm/Editing/Structs.js.map +1 -1
  148. package/lib/esm/Editing/UnitSystems.js.map +1 -1
  149. package/lib/esm/Editing/Units.js.map +1 -1
  150. package/lib/esm/Merging/ClassMerger.js.map +1 -1
  151. package/lib/esm/Merging/ConstantMerger.js.map +1 -1
  152. package/lib/esm/Merging/CustomAttributeClassMerger.js.map +1 -1
  153. package/lib/esm/Merging/CustomAttributeMerger.js.map +1 -1
  154. package/lib/esm/Merging/Edits/NameMapping.js.map +1 -1
  155. package/lib/esm/Merging/Edits/RenameEditHandler.js.map +1 -1
  156. package/lib/esm/Merging/Edits/SchemaEdits.js.map +1 -1
  157. package/lib/esm/Merging/Edits/SkipEditHandler.js.map +1 -1
  158. package/lib/esm/Merging/EntityClassMerger.js.map +1 -1
  159. package/lib/esm/Merging/EnumerationMerger.js.map +1 -1
  160. package/lib/esm/Merging/EnumeratorMerger.js.map +1 -1
  161. package/lib/esm/Merging/FormatMerger.js.map +1 -1
  162. package/lib/esm/Merging/InvertedUnitMerger.js.map +1 -1
  163. package/lib/esm/Merging/KindOfQuantityMerger.js.map +1 -1
  164. package/lib/esm/Merging/MixinMerger.js.map +1 -1
  165. package/lib/esm/Merging/PhenomenonMerger.js.map +1 -1
  166. package/lib/esm/Merging/PropertyCategoryMerger.js.map +1 -1
  167. package/lib/esm/Merging/PropertyMerger.js.map +1 -1
  168. package/lib/esm/Merging/RelationshipClassMerger.js.map +1 -1
  169. package/lib/esm/Merging/SchemaMerger.js +1 -1
  170. package/lib/esm/Merging/SchemaMerger.js.map +1 -1
  171. package/lib/esm/Merging/SchemaMergingVisitor.js.map +1 -1
  172. package/lib/esm/Merging/SchemaMergingWalker.js.map +1 -1
  173. package/lib/esm/Merging/SchemaReferenceMerger.js.map +1 -1
  174. package/lib/esm/Merging/StructClassMerger.js.map +1 -1
  175. package/lib/esm/Merging/UnitMerger.js.map +1 -1
  176. package/lib/esm/Merging/UnitSystemMerger.js.map +1 -1
  177. package/lib/esm/Merging/Utils.js.map +1 -1
  178. package/lib/esm/Validation/Diagnostic.js.map +1 -1
  179. package/lib/esm/Validation/DiagnosticReporter.js.map +1 -1
  180. package/lib/esm/Validation/ECRules.js.map +1 -1
  181. package/lib/esm/Validation/LoggingDiagnosticReporter.js.map +1 -1
  182. package/lib/esm/Validation/RuleSuppressionSet.js.map +1 -1
  183. package/lib/esm/Validation/Rules.js.map +1 -1
  184. package/lib/esm/Validation/SchemaChanges.js.map +1 -1
  185. package/lib/esm/Validation/SchemaCompareDiagnostics.js.map +1 -1
  186. package/lib/esm/Validation/SchemaCompareReporter.js.map +1 -1
  187. package/lib/esm/Validation/SchemaCompareResultDelegate.js.map +1 -1
  188. package/lib/esm/Validation/SchemaCompareVisitor.js.map +1 -1
  189. package/lib/esm/Validation/SchemaComparer.js.map +1 -1
  190. package/lib/esm/Validation/SchemaValidater.js.map +1 -1
  191. package/lib/esm/Validation/SchemaValidationVisitor.js.map +1 -1
  192. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  193. package/lib/esm/ecschema-editing.js.map +1 -1
  194. package/package.json +9 -9
  195. package/public/locales/en/ECSchemaEditing.json +26 -26
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaDifference.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Differencing\n */\n\nimport { AnySchemaDifferenceConflict } from \"./SchemaConflicts\";\nimport { AnySchemaEdits, SchemaEditType } from \"../Merging/Edits/SchemaEdits\";\nimport { SchemaDiagnosticVisitor } from \"./SchemaDiagnosticVisitor\";\nimport { SchemaChanges } from \"../Validation/SchemaChanges\";\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\nimport { AnyEnumerator, AnyProperty, AnyPropertyProps, ConstantProps, CustomAttribute,\n CustomAttributeClassProps, ECClass, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps,\n MixinProps, PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, RelationshipConstraintProps,\n type Schema, SchemaItem, SchemaItemFormatProps, SchemaItemKey, SchemaItemProps, SchemaItemType, SchemaItemUnitProps, SchemaReferenceProps, StructClassProps, UnitSystemProps,\n} from \"@itwin/ecschema-metadata\";\nimport { validateDifferences } from \"./SchemaDifferenceValidator\";\nimport { AnyDiagnostic } from \"../Validation/Diagnostic\";\nimport { NameMapping, PropertyKey } from \"../Merging/Edits/NameMapping\";\n\n/** Utility-Type to remove possible readonly flags on the given type. */\ntype PartialEditable<T> = {\n -readonly [P in keyof T]?: T[P];\n};\n\n/**\n * Utility-Type to simplify the expected SchemaItem props by omitting the base properties\n * that are not needed for the schema differencing. Also all properties are made mutable\n * by removing the readonly flag if present.\n */\ntype SchemaItemProperties<T extends SchemaItemProps> = {\n [P in keyof PartialEditable<Omit<T, keyof Omit<SchemaItemProps, \"label\" | \"description\" | \"customAttributes\">>>]: T[P]\n};\n\n/**\n * Defines the type of the difference operation.\n * @alpha\n */\nexport type DifferenceType = \"add\" | \"modify\";\n\n/**\n * Defines the SchemaTypes that are not SchemaItems.\n * @alpha\n */\nexport enum SchemaOtherTypes {\n Schema = \"Schema\",\n SchemaReference = \"SchemaReference\",\n Property = \"Property\",\n Enumerator = \"Enumerator\",\n CustomAttributeInstance = \"CustomAttributeInstance\",\n RelationshipConstraint = \"RelationshipConstraint\",\n RelationshipConstraintClass = \"RelationshipConstraintClass\",\n EntityClassMixin = \"EntityClassMixin\",\n KindOfQuantityPresentationFormat = \"KindOfQuantityPresentationFormat\",\n FormatUnit = \"FormatUnit\",\n FormatUnitLabel = \"FormatUnitLabel\",\n}\n\n/**\n * Defines the possible values SchemaTypes that can occur in SchemaDifferences or Conflicts.\n * @alpha\n */\nexport type SchemaType = SchemaOtherTypes | SchemaItemType;\n\n/**\n * Definition of the difference result between two Schemas.\n * @alpha\n */\nexport interface SchemaDifferenceResult {\n /** Full name of the source schema */\n readonly sourceSchemaName: string;\n /** Full name of the target schema */\n readonly targetSchemaName: string;\n\n /** List of differences between the compared schemas. */\n readonly differences: AnySchemaDifference[];\n\n /** List of conflicts found while comparing the schemas. */\n readonly conflicts?: AnySchemaDifferenceConflict[];\n}\n\n/**\n * Union of all supported schema differencing types.\n * @alpha\n */\nexport type AnySchemaDifference =\n SchemaDifference |\n SchemaReferenceDifference |\n AnySchemaItemDifference |\n AnySchemaItemPathDifference |\n EntityClassMixinDifference |\n CustomAttributeDifference |\n KindOfQuantityPresentationFormatDifference |\n FormatUnitDifference;\n\n/**\n * Differencing entry for changes on a Schema.\n * @alpha\n */\nexport interface SchemaDifference {\n readonly changeType: \"modify\";\n readonly schemaType: SchemaOtherTypes.Schema;\n readonly difference: {\n label?: string;\n description?: string;\n };\n}\n\n/**\n * Differencing entry for added or changed Schema References of a Schema.\n * @alpha\n */\nexport interface SchemaReferenceDifference {\n readonly changeType: \"add\" | \"modify\";\n readonly schemaType: SchemaOtherTypes.SchemaReference;\n readonly difference: SchemaReferenceProps;\n}\n\n/**\n * Union of all supported schema item differencing types.\n * @alpha\n */\nexport type AnySchemaItemDifference =\n AnyClassItemDifference |\n ConstantDifference |\n EnumerationDifference |\n FormatDifference |\n KindOfQuantityDifference |\n InvertedUnitDifference |\n PhenomenonDifference |\n PropertyCategoryDifference |\n UnitDifference |\n UnitSystemDifference;\n\n/**\n * Union for supported class Schema Items.\n * @alpha\n */\nexport type AnyClassItemDifference =\n EntityClassDifference |\n MixinClassDifference |\n StructClassDifference |\n CustomAttributeClassDifference |\n RelationshipClassDifference;\n\n/**\n * Union of all differences that have a path pointing inside a schema item.\n * @alpha\n */\nexport type AnySchemaItemPathDifference =\n RelationshipConstraintDifference |\n RelationshipConstraintClassDifference |\n CustomAttributePropertyDifference |\n EnumeratorDifference |\n ClassPropertyDifference |\n FormatUnitLabelDifference;\n\n/**\n * Internal base class for all Schema Item differencing entries.\n * @alpha\n */\ninterface SchemaItemDifference<T extends SchemaItemProps> {\n readonly changeType: \"add\" | \"modify\";\n readonly itemName: string;\n readonly difference: SchemaItemProperties<T>;\n}\n\n/**\n * Differencing entry for Constant Schema Items.\n * @alpha\n */\nexport interface ConstantDifference extends SchemaItemDifference<ConstantProps> {\n readonly schemaType: SchemaItemType.Constant;\n}\n\n/**\n * Differencing entry for Custom Attribute Class Schema Items.\n * @alpha\n */\nexport interface CustomAttributeClassDifference extends SchemaItemDifference<CustomAttributeClassProps> {\n readonly schemaType: SchemaItemType.CustomAttributeClass;\n}\n\n/**\n * Differencing entry for Entity Class Schema Items.\n * @alpha\n */\nexport interface EntityClassDifference extends SchemaItemDifference<EntityClassProps> {\n readonly schemaType: SchemaItemType.EntityClass;\n}\n\n/**\n * Differencing entry for Enumerator Schema Items.\n * @alpha\n */\nexport interface EnumerationDifference extends SchemaItemDifference<EnumerationProps> {\n readonly schemaType: SchemaItemType.Enumeration;\n}\n\n/**\n * Differencing entry for Kind-Of-Quantities Schema Items.\n * @alpha\n */\nexport interface KindOfQuantityDifference extends SchemaItemDifference<KindOfQuantityProps> {\n readonly schemaType: SchemaItemType.KindOfQuantity;\n}\n\n/**\n * Differencing entry for Mixin Class Schema Items.\n * @alpha\n */\nexport interface MixinClassDifference extends SchemaItemDifference<MixinProps> {\n readonly schemaType: SchemaItemType.Mixin;\n}\n\n/**\n * Differencing entry for Phenomenon Schema Items.\n * @alpha\n */\nexport interface PhenomenonDifference extends SchemaItemDifference<PhenomenonProps> {\n readonly schemaType: SchemaItemType.Phenomenon;\n}\n\n/**\n * Differencing entry for Property Category Schema Items.\n * @alpha\n */\nexport interface PropertyCategoryDifference extends SchemaItemDifference<PropertyCategoryProps> {\n readonly schemaType: SchemaItemType.PropertyCategory;\n}\n\n/**\n * Differencing entry for Relationship Class Schema Items.\n * @alpha\n */\nexport interface RelationshipClassDifference extends SchemaItemDifference<RelationshipClassProps> {\n readonly schemaType: SchemaItemType.RelationshipClass;\n}\n\n/**\n * Differencing entry for Struct Class Schema Items.\n * @alpha\n */\nexport interface StructClassDifference extends SchemaItemDifference<StructClassProps> {\n readonly schemaType: SchemaItemType.StructClass;\n}\n\n/**\n * Differencing entry for Unit System Schema Items.\n * @alpha\n */\nexport interface UnitSystemDifference extends SchemaItemDifference<UnitSystemProps> {\n readonly schemaType: SchemaItemType.UnitSystem;\n}\n\n/**\n * Differencing entry for Unit Schema Items.\n * @alpha\n */\nexport interface UnitDifference extends SchemaItemDifference<SchemaItemUnitProps> {\n readonly schemaType: SchemaItemType.Unit;\n}\n\n/**\n * Differencing entry for Inverted Unit Schema Items.\n * @alpha\n */\nexport interface InvertedUnitDifference extends SchemaItemDifference<InvertedUnitProps> {\n readonly schemaType: SchemaItemType.InvertedUnit;\n}\n/**\n * Differencing entry for Format Schema Items.\n * @alpha\n */\nexport interface FormatDifference extends SchemaItemDifference<SchemaItemFormatProps> {\n readonly schemaType: SchemaItemType.Format;\n}\n\n/**\n * Differencing entry for added or changed Properties.\n * @alpha\n */\nexport interface ClassPropertyDifference {\n readonly changeType: \"add\" | \"modify\";\n readonly schemaType: SchemaOtherTypes.Property;\n readonly itemName: string;\n readonly path: string;\n readonly difference: PartialEditable<AnyPropertyProps>;\n}\n\n/**\n * Union of supported Custom Attribute Differences.\n * @alpha\n */\nexport type CustomAttributeDifference =\n CustomAttributeSchemaDifference |\n CustomAttributeSchemaItemDifference |\n CustomAttributePropertyDifference |\n CustomAttributeRelationshipConstraintDifference;\n\n/**\n * Differencing entry for Custom Attributes on Schema.\n * @alpha\n */\nexport interface CustomAttributeSchemaDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\n readonly appliedTo: \"Schema\";\n readonly difference: PartialEditable<CustomAttribute>;\n}\n\n/**\n * Differencing entry for Custom Attributes on Schema Items.\n * @alpha\n */\nexport interface CustomAttributeSchemaItemDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\n readonly appliedTo: \"SchemaItem\";\n readonly itemName: string;\n readonly difference: PartialEditable<CustomAttribute>;\n}\n\n/**\n * Differencing entry for Custom Attributes on Properties.\n * @alpha\n */\nexport interface CustomAttributePropertyDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\n readonly appliedTo: \"Property\";\n readonly itemName: string;\n readonly path: string;\n readonly difference: PartialEditable<CustomAttribute>;\n}\n\n/**\n * Differencing entry for Custom Attributes on Relationship Constraints.\n * @alpha\n */\nexport interface CustomAttributeRelationshipConstraintDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\n readonly appliedTo: \"RelationshipConstraint\";\n readonly itemName: string;\n readonly path: \"$source\" | \"$target\";\n readonly difference: PartialEditable<CustomAttribute>;\n}\n\n/**\n * Differencing entry for changed mixins on EntityClasses.\n * @alpha\n */\nexport interface EntityClassMixinDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.EntityClassMixin;\n readonly itemName: string;\n readonly difference: string[];\n}\n\n/**\n * Differencing entry for changed Enumerators on Enumerable Schema Items.\n * @alpha\n */\nexport interface EnumeratorDifference {\n readonly changeType: \"add\" | \"modify\";\n readonly schemaType: SchemaOtherTypes.Enumerator;\n readonly itemName: string;\n readonly path: string;\n readonly difference: PartialEditable<AnyEnumerator>;\n}\n\n/**\n * Differencing entry for Relationship Constraints.\n * @alpha\n */\nexport interface RelationshipConstraintDifference {\n readonly changeType: \"modify\";\n readonly schemaType: SchemaOtherTypes.RelationshipConstraint;\n readonly itemName: string;\n readonly path: \"$source\" | \"$target\";\n readonly difference: PartialEditable<Omit<RelationshipConstraintProps, \"constraintClasses\">>;\n}\n\n/**\n * Differencing entry for constraint classes added to Relationship Constrains.\n * @alpha\n */\nexport interface RelationshipConstraintClassDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.RelationshipConstraintClass;\n readonly itemName: string;\n readonly path: \"$source\" | \"$target\";\n readonly difference: string[];\n}\n\n/**\n * Differencing entry for presentation formats added to KindOfQuantities.\n * @alpha\n */\nexport interface KindOfQuantityPresentationFormatDifference {\n readonly changeType: \"add\";\n readonly schemaType: SchemaOtherTypes.KindOfQuantityPresentationFormat;\n readonly itemName: string;\n readonly difference: string[];\n}\n\n/**\n * Differencing entry for changed Units on Formats.\n * @alpha\n */\nexport interface FormatUnitDifference {\n readonly changeType: \"modify\";\n readonly schemaType: SchemaOtherTypes.FormatUnit;\n readonly itemName: string;\n readonly difference: {\n name: string;\n label?: string;\n }[];\n}\n\n/**\n * Differencing entry for changed labels on Format Units.\n * @alpha\n */\nexport interface FormatUnitLabelDifference {\n readonly changeType: \"modify\";\n readonly schemaType: SchemaOtherTypes.FormatUnitLabel;\n readonly itemName: string;\n readonly path: string;\n readonly difference: {\n label?: string;\n };\n}\n\n/**\n * Creates a [[SchemaDifferenceResult]] for two given schemas.\n * @param targetSchema The schema the differences gets merged into.\n * @param sourceSchema The schema to get merged in the target.\n * @returns An [[SchemaDifferenceResult]] object.\n * @alpha\n */\nexport async function getSchemaDifferences(targetSchema: Schema, sourceSchema: Schema, schemaEdits?: Iterable<AnySchemaEdits>): Promise<SchemaDifferenceResult> {\n const schemaComparer = new DifferenceSchemaComparer();\n if(schemaEdits) {\n for(const edit of schemaEdits) {\n if(edit.type === SchemaEditType.RenameSchemaItem) {\n schemaComparer.nameMappings.addItemMapping(edit.key, edit.value);\n }\n if(edit.type === SchemaEditType.RenameProperty) {\n schemaComparer.nameMappings.addPropertyMapping(edit.key, edit.value);\n }\n }\n }\n\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\n\n const visitor = new SchemaDiagnosticVisitor();\n for (const diagnostic of schemaComparer.diagnostics) {\n visitor.visit(diagnostic);\n }\n\n const differences: AnySchemaDifference[] = [\n ...visitor.schemaDifferences,\n ...visitor.schemaItemDifferences,\n ...visitor.schemaItemPathDifferences,\n ...visitor.customAttributeDifferences,\n ];\n\n const conflicts = await validateDifferences(differences, targetSchema, sourceSchema, schemaComparer.nameMappings);\n\n return {\n sourceSchemaName: sourceSchema.schemaKey.toString(),\n targetSchemaName: targetSchema.schemaKey.toString(),\n conflicts: conflicts.length > 0 ? conflicts : undefined,\n differences,\n };\n}\n\n/**\n * Implementation of a SchemaComparer that is used in the schema differencing process.\n * It extends the SchemaComparer base class with additional functionality to store the\n * name mappings of renamed schema items and properties.\n *\n * @internal\n */\nclass DifferenceSchemaComparer extends SchemaComparer {\n public readonly nameMappings: NameMapping;\n private readonly _changes: Array<SchemaChanges>;\n\n public get diagnostics(): Iterable<AnyDiagnostic> {\n return this._changes[0].allDiagnostics;\n }\n\n constructor() {\n super({ report: (changes) => this._changes.push(changes as SchemaChanges) });\n\n this._changes = [];\n this.nameMappings = new NameMapping();\n }\n\n public override async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\n const classKey = this.nameMappings.resolveItemKey(item.key);\n return lookupSchema.lookupItem(classKey.name, itemConstructor);\n }\n\n public override async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\n const propertyKey = this.nameMappings.resolvePropertyKey(new PropertyKey(propertyA.name, propertyA.class.key));\n return ecClass.getProperty(propertyKey.propertyName) as Promise<AnyProperty | undefined>;\n }\n\n public override areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\n if (itemKeyA) {\n if (SchemaItem.isSchemaItem(itemKeyA)) {\n itemKeyA = itemKeyA.key;\n }\n itemKeyA = this.nameMappings.resolveItemKey(itemKeyA);\n }\n return super.areEqualByName(itemKeyA, itemKeyB);\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaDifference.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifference.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 Differencing\r\n */\r\n\r\nimport { AnySchemaDifferenceConflict } from \"./SchemaConflicts\";\r\nimport { AnySchemaEdits, SchemaEditType } from \"../Merging/Edits/SchemaEdits\";\r\nimport { SchemaDiagnosticVisitor } from \"./SchemaDiagnosticVisitor\";\r\nimport { SchemaChanges } from \"../Validation/SchemaChanges\";\r\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\r\nimport { AnyEnumerator, AnyProperty, AnyPropertyProps, ConstantProps, CustomAttribute,\r\n CustomAttributeClassProps, ECClass, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps,\r\n MixinProps, PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, RelationshipConstraintProps,\r\n type Schema, SchemaItem, SchemaItemFormatProps, SchemaItemKey, SchemaItemProps, SchemaItemType, SchemaItemUnitProps, SchemaReferenceProps, StructClassProps, UnitSystemProps,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { validateDifferences } from \"./SchemaDifferenceValidator\";\r\nimport { AnyDiagnostic } from \"../Validation/Diagnostic\";\r\nimport { NameMapping, PropertyKey } from \"../Merging/Edits/NameMapping\";\r\n\r\n/** Utility-Type to remove possible readonly flags on the given type. */\r\ntype PartialEditable<T> = {\r\n -readonly [P in keyof T]?: T[P];\r\n};\r\n\r\n/**\r\n * Utility-Type to simplify the expected SchemaItem props by omitting the base properties\r\n * that are not needed for the schema differencing. Also all properties are made mutable\r\n * by removing the readonly flag if present.\r\n */\r\ntype SchemaItemProperties<T extends SchemaItemProps> = {\r\n [P in keyof PartialEditable<Omit<T, keyof Omit<SchemaItemProps, \"label\" | \"description\" | \"customAttributes\">>>]: T[P]\r\n};\r\n\r\n/**\r\n * Defines the type of the difference operation.\r\n * @alpha\r\n */\r\nexport type DifferenceType = \"add\" | \"modify\";\r\n\r\n/**\r\n * Defines the SchemaTypes that are not SchemaItems.\r\n * @alpha\r\n */\r\nexport enum SchemaOtherTypes {\r\n Schema = \"Schema\",\r\n SchemaReference = \"SchemaReference\",\r\n Property = \"Property\",\r\n Enumerator = \"Enumerator\",\r\n CustomAttributeInstance = \"CustomAttributeInstance\",\r\n RelationshipConstraint = \"RelationshipConstraint\",\r\n RelationshipConstraintClass = \"RelationshipConstraintClass\",\r\n EntityClassMixin = \"EntityClassMixin\",\r\n KindOfQuantityPresentationFormat = \"KindOfQuantityPresentationFormat\",\r\n FormatUnit = \"FormatUnit\",\r\n FormatUnitLabel = \"FormatUnitLabel\",\r\n}\r\n\r\n/**\r\n * Defines the possible values SchemaTypes that can occur in SchemaDifferences or Conflicts.\r\n * @alpha\r\n */\r\nexport type SchemaType = SchemaOtherTypes | SchemaItemType;\r\n\r\n/**\r\n * Definition of the difference result between two Schemas.\r\n * @alpha\r\n */\r\nexport interface SchemaDifferenceResult {\r\n /** Full name of the source schema */\r\n readonly sourceSchemaName: string;\r\n /** Full name of the target schema */\r\n readonly targetSchemaName: string;\r\n\r\n /** List of differences between the compared schemas. */\r\n readonly differences: AnySchemaDifference[];\r\n\r\n /** List of conflicts found while comparing the schemas. */\r\n readonly conflicts?: AnySchemaDifferenceConflict[];\r\n}\r\n\r\n/**\r\n * Union of all supported schema differencing types.\r\n * @alpha\r\n */\r\nexport type AnySchemaDifference =\r\n SchemaDifference |\r\n SchemaReferenceDifference |\r\n AnySchemaItemDifference |\r\n AnySchemaItemPathDifference |\r\n EntityClassMixinDifference |\r\n CustomAttributeDifference |\r\n KindOfQuantityPresentationFormatDifference |\r\n FormatUnitDifference;\r\n\r\n/**\r\n * Differencing entry for changes on a Schema.\r\n * @alpha\r\n */\r\nexport interface SchemaDifference {\r\n readonly changeType: \"modify\";\r\n readonly schemaType: SchemaOtherTypes.Schema;\r\n readonly difference: {\r\n label?: string;\r\n description?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Differencing entry for added or changed Schema References of a Schema.\r\n * @alpha\r\n */\r\nexport interface SchemaReferenceDifference {\r\n readonly changeType: \"add\" | \"modify\";\r\n readonly schemaType: SchemaOtherTypes.SchemaReference;\r\n readonly difference: SchemaReferenceProps;\r\n}\r\n\r\n/**\r\n * Union of all supported schema item differencing types.\r\n * @alpha\r\n */\r\nexport type AnySchemaItemDifference =\r\n AnyClassItemDifference |\r\n ConstantDifference |\r\n EnumerationDifference |\r\n FormatDifference |\r\n KindOfQuantityDifference |\r\n InvertedUnitDifference |\r\n PhenomenonDifference |\r\n PropertyCategoryDifference |\r\n UnitDifference |\r\n UnitSystemDifference;\r\n\r\n/**\r\n * Union for supported class Schema Items.\r\n * @alpha\r\n */\r\nexport type AnyClassItemDifference =\r\n EntityClassDifference |\r\n MixinClassDifference |\r\n StructClassDifference |\r\n CustomAttributeClassDifference |\r\n RelationshipClassDifference;\r\n\r\n/**\r\n * Union of all differences that have a path pointing inside a schema item.\r\n * @alpha\r\n */\r\nexport type AnySchemaItemPathDifference =\r\n RelationshipConstraintDifference |\r\n RelationshipConstraintClassDifference |\r\n CustomAttributePropertyDifference |\r\n EnumeratorDifference |\r\n ClassPropertyDifference |\r\n FormatUnitLabelDifference;\r\n\r\n/**\r\n * Internal base class for all Schema Item differencing entries.\r\n * @alpha\r\n */\r\ninterface SchemaItemDifference<T extends SchemaItemProps> {\r\n readonly changeType: \"add\" | \"modify\";\r\n readonly itemName: string;\r\n readonly difference: SchemaItemProperties<T>;\r\n}\r\n\r\n/**\r\n * Differencing entry for Constant Schema Items.\r\n * @alpha\r\n */\r\nexport interface ConstantDifference extends SchemaItemDifference<ConstantProps> {\r\n readonly schemaType: SchemaItemType.Constant;\r\n}\r\n\r\n/**\r\n * Differencing entry for Custom Attribute Class Schema Items.\r\n * @alpha\r\n */\r\nexport interface CustomAttributeClassDifference extends SchemaItemDifference<CustomAttributeClassProps> {\r\n readonly schemaType: SchemaItemType.CustomAttributeClass;\r\n}\r\n\r\n/**\r\n * Differencing entry for Entity Class Schema Items.\r\n * @alpha\r\n */\r\nexport interface EntityClassDifference extends SchemaItemDifference<EntityClassProps> {\r\n readonly schemaType: SchemaItemType.EntityClass;\r\n}\r\n\r\n/**\r\n * Differencing entry for Enumerator Schema Items.\r\n * @alpha\r\n */\r\nexport interface EnumerationDifference extends SchemaItemDifference<EnumerationProps> {\r\n readonly schemaType: SchemaItemType.Enumeration;\r\n}\r\n\r\n/**\r\n * Differencing entry for Kind-Of-Quantities Schema Items.\r\n * @alpha\r\n */\r\nexport interface KindOfQuantityDifference extends SchemaItemDifference<KindOfQuantityProps> {\r\n readonly schemaType: SchemaItemType.KindOfQuantity;\r\n}\r\n\r\n/**\r\n * Differencing entry for Mixin Class Schema Items.\r\n * @alpha\r\n */\r\nexport interface MixinClassDifference extends SchemaItemDifference<MixinProps> {\r\n readonly schemaType: SchemaItemType.Mixin;\r\n}\r\n\r\n/**\r\n * Differencing entry for Phenomenon Schema Items.\r\n * @alpha\r\n */\r\nexport interface PhenomenonDifference extends SchemaItemDifference<PhenomenonProps> {\r\n readonly schemaType: SchemaItemType.Phenomenon;\r\n}\r\n\r\n/**\r\n * Differencing entry for Property Category Schema Items.\r\n * @alpha\r\n */\r\nexport interface PropertyCategoryDifference extends SchemaItemDifference<PropertyCategoryProps> {\r\n readonly schemaType: SchemaItemType.PropertyCategory;\r\n}\r\n\r\n/**\r\n * Differencing entry for Relationship Class Schema Items.\r\n * @alpha\r\n */\r\nexport interface RelationshipClassDifference extends SchemaItemDifference<RelationshipClassProps> {\r\n readonly schemaType: SchemaItemType.RelationshipClass;\r\n}\r\n\r\n/**\r\n * Differencing entry for Struct Class Schema Items.\r\n * @alpha\r\n */\r\nexport interface StructClassDifference extends SchemaItemDifference<StructClassProps> {\r\n readonly schemaType: SchemaItemType.StructClass;\r\n}\r\n\r\n/**\r\n * Differencing entry for Unit System Schema Items.\r\n * @alpha\r\n */\r\nexport interface UnitSystemDifference extends SchemaItemDifference<UnitSystemProps> {\r\n readonly schemaType: SchemaItemType.UnitSystem;\r\n}\r\n\r\n/**\r\n * Differencing entry for Unit Schema Items.\r\n * @alpha\r\n */\r\nexport interface UnitDifference extends SchemaItemDifference<SchemaItemUnitProps> {\r\n readonly schemaType: SchemaItemType.Unit;\r\n}\r\n\r\n/**\r\n * Differencing entry for Inverted Unit Schema Items.\r\n * @alpha\r\n */\r\nexport interface InvertedUnitDifference extends SchemaItemDifference<InvertedUnitProps> {\r\n readonly schemaType: SchemaItemType.InvertedUnit;\r\n}\r\n/**\r\n * Differencing entry for Format Schema Items.\r\n * @alpha\r\n */\r\nexport interface FormatDifference extends SchemaItemDifference<SchemaItemFormatProps> {\r\n readonly schemaType: SchemaItemType.Format;\r\n}\r\n\r\n/**\r\n * Differencing entry for added or changed Properties.\r\n * @alpha\r\n */\r\nexport interface ClassPropertyDifference {\r\n readonly changeType: \"add\" | \"modify\";\r\n readonly schemaType: SchemaOtherTypes.Property;\r\n readonly itemName: string;\r\n readonly path: string;\r\n readonly difference: PartialEditable<AnyPropertyProps>;\r\n}\r\n\r\n/**\r\n * Union of supported Custom Attribute Differences.\r\n * @alpha\r\n */\r\nexport type CustomAttributeDifference =\r\n CustomAttributeSchemaDifference |\r\n CustomAttributeSchemaItemDifference |\r\n CustomAttributePropertyDifference |\r\n CustomAttributeRelationshipConstraintDifference;\r\n\r\n/**\r\n * Differencing entry for Custom Attributes on Schema.\r\n * @alpha\r\n */\r\nexport interface CustomAttributeSchemaDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\r\n readonly appliedTo: \"Schema\";\r\n readonly difference: PartialEditable<CustomAttribute>;\r\n}\r\n\r\n/**\r\n * Differencing entry for Custom Attributes on Schema Items.\r\n * @alpha\r\n */\r\nexport interface CustomAttributeSchemaItemDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\r\n readonly appliedTo: \"SchemaItem\";\r\n readonly itemName: string;\r\n readonly difference: PartialEditable<CustomAttribute>;\r\n}\r\n\r\n/**\r\n * Differencing entry for Custom Attributes on Properties.\r\n * @alpha\r\n */\r\nexport interface CustomAttributePropertyDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\r\n readonly appliedTo: \"Property\";\r\n readonly itemName: string;\r\n readonly path: string;\r\n readonly difference: PartialEditable<CustomAttribute>;\r\n}\r\n\r\n/**\r\n * Differencing entry for Custom Attributes on Relationship Constraints.\r\n * @alpha\r\n */\r\nexport interface CustomAttributeRelationshipConstraintDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.CustomAttributeInstance;\r\n readonly appliedTo: \"RelationshipConstraint\";\r\n readonly itemName: string;\r\n readonly path: \"$source\" | \"$target\";\r\n readonly difference: PartialEditable<CustomAttribute>;\r\n}\r\n\r\n/**\r\n * Differencing entry for changed mixins on EntityClasses.\r\n * @alpha\r\n */\r\nexport interface EntityClassMixinDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.EntityClassMixin;\r\n readonly itemName: string;\r\n readonly difference: string[];\r\n}\r\n\r\n/**\r\n * Differencing entry for changed Enumerators on Enumerable Schema Items.\r\n * @alpha\r\n */\r\nexport interface EnumeratorDifference {\r\n readonly changeType: \"add\" | \"modify\";\r\n readonly schemaType: SchemaOtherTypes.Enumerator;\r\n readonly itemName: string;\r\n readonly path: string;\r\n readonly difference: PartialEditable<AnyEnumerator>;\r\n}\r\n\r\n/**\r\n * Differencing entry for Relationship Constraints.\r\n * @alpha\r\n */\r\nexport interface RelationshipConstraintDifference {\r\n readonly changeType: \"modify\";\r\n readonly schemaType: SchemaOtherTypes.RelationshipConstraint;\r\n readonly itemName: string;\r\n readonly path: \"$source\" | \"$target\";\r\n readonly difference: PartialEditable<Omit<RelationshipConstraintProps, \"constraintClasses\">>;\r\n}\r\n\r\n/**\r\n * Differencing entry for constraint classes added to Relationship Constrains.\r\n * @alpha\r\n */\r\nexport interface RelationshipConstraintClassDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.RelationshipConstraintClass;\r\n readonly itemName: string;\r\n readonly path: \"$source\" | \"$target\";\r\n readonly difference: string[];\r\n}\r\n\r\n/**\r\n * Differencing entry for presentation formats added to KindOfQuantities.\r\n * @alpha\r\n */\r\nexport interface KindOfQuantityPresentationFormatDifference {\r\n readonly changeType: \"add\";\r\n readonly schemaType: SchemaOtherTypes.KindOfQuantityPresentationFormat;\r\n readonly itemName: string;\r\n readonly difference: string[];\r\n}\r\n\r\n/**\r\n * Differencing entry for changed Units on Formats.\r\n * @alpha\r\n */\r\nexport interface FormatUnitDifference {\r\n readonly changeType: \"modify\";\r\n readonly schemaType: SchemaOtherTypes.FormatUnit;\r\n readonly itemName: string;\r\n readonly difference: {\r\n name: string;\r\n label?: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Differencing entry for changed labels on Format Units.\r\n * @alpha\r\n */\r\nexport interface FormatUnitLabelDifference {\r\n readonly changeType: \"modify\";\r\n readonly schemaType: SchemaOtherTypes.FormatUnitLabel;\r\n readonly itemName: string;\r\n readonly path: string;\r\n readonly difference: {\r\n label?: string;\r\n };\r\n}\r\n\r\n/**\r\n * Creates a [[SchemaDifferenceResult]] for two given schemas.\r\n * @param targetSchema The schema the differences gets merged into.\r\n * @param sourceSchema The schema to get merged in the target.\r\n * @returns An [[SchemaDifferenceResult]] object.\r\n * @alpha\r\n */\r\nexport async function getSchemaDifferences(targetSchema: Schema, sourceSchema: Schema, schemaEdits?: Iterable<AnySchemaEdits>): Promise<SchemaDifferenceResult> {\r\n const schemaComparer = new DifferenceSchemaComparer();\r\n if(schemaEdits) {\r\n for(const edit of schemaEdits) {\r\n if(edit.type === SchemaEditType.RenameSchemaItem) {\r\n schemaComparer.nameMappings.addItemMapping(edit.key, edit.value);\r\n }\r\n if(edit.type === SchemaEditType.RenameProperty) {\r\n schemaComparer.nameMappings.addPropertyMapping(edit.key, edit.value);\r\n }\r\n }\r\n }\r\n\r\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\r\n\r\n const visitor = new SchemaDiagnosticVisitor();\r\n for (const diagnostic of schemaComparer.diagnostics) {\r\n visitor.visit(diagnostic);\r\n }\r\n\r\n const differences: AnySchemaDifference[] = [\r\n ...visitor.schemaDifferences,\r\n ...visitor.schemaItemDifferences,\r\n ...visitor.schemaItemPathDifferences,\r\n ...visitor.customAttributeDifferences,\r\n ];\r\n\r\n const conflicts = await validateDifferences(differences, targetSchema, sourceSchema, schemaComparer.nameMappings);\r\n\r\n return {\r\n sourceSchemaName: sourceSchema.schemaKey.toString(),\r\n targetSchemaName: targetSchema.schemaKey.toString(),\r\n conflicts: conflicts.length > 0 ? conflicts : undefined,\r\n differences,\r\n };\r\n}\r\n\r\n/**\r\n * Implementation of a SchemaComparer that is used in the schema differencing process.\r\n * It extends the SchemaComparer base class with additional functionality to store the\r\n * name mappings of renamed schema items and properties.\r\n *\r\n * @internal\r\n */\r\nclass DifferenceSchemaComparer extends SchemaComparer {\r\n public readonly nameMappings: NameMapping;\r\n private readonly _changes: Array<SchemaChanges>;\r\n\r\n public get diagnostics(): Iterable<AnyDiagnostic> {\r\n return this._changes[0].allDiagnostics;\r\n }\r\n\r\n constructor() {\r\n super({ report: (changes) => this._changes.push(changes as SchemaChanges) });\r\n\r\n this._changes = [];\r\n this.nameMappings = new NameMapping();\r\n }\r\n\r\n public override async resolveItem<TItem extends typeof SchemaItem>(item: SchemaItem, lookupSchema: Schema, itemConstructor: TItem): Promise<InstanceType<TItem> | undefined> {\r\n const classKey = this.nameMappings.resolveItemKey(item.key);\r\n return lookupSchema.lookupItem(classKey.name, itemConstructor);\r\n }\r\n\r\n public override async resolveProperty(propertyA: AnyProperty, ecClass: ECClass): Promise<AnyProperty | undefined> {\r\n const propertyKey = this.nameMappings.resolvePropertyKey(new PropertyKey(propertyA.name, propertyA.class.key));\r\n return ecClass.getProperty(propertyKey.propertyName) as Promise<AnyProperty | undefined>;\r\n }\r\n\r\n public override areEqualByName(itemKeyA?: Readonly<SchemaItemKey> | SchemaItem, itemKeyB?: Readonly<SchemaItemKey> | SchemaItem): boolean {\r\n if (itemKeyA) {\r\n if (SchemaItem.isSchemaItem(itemKeyA)) {\r\n itemKeyA = itemKeyA.key;\r\n }\r\n itemKeyA = this.nameMappings.resolveItemKey(itemKeyA);\r\n }\r\n return super.areEqualByName(itemKeyA, itemKeyB);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaDifferenceValidator.d.ts","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceValidator.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA2N,MAAM,EAAoD,MAAM,0BAA0B,CAAC;AAC7T,OAAO,EAA0B,mBAAmB,EAA4pB,MAAM,oBAAoB,CAAC;AAC3uB,OAAO,EAAE,2BAA2B,EAAgB,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAe,MAAM,8BAA8B,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,0CAOlJ"}
1
+ {"version":3,"file":"SchemaDifferenceValidator.d.ts","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceValidator.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA2N,MAAM,EAA+D,MAAM,0BAA0B,CAAC;AACxU,OAAO,EAA0B,mBAAmB,EAA4pB,MAAM,oBAAoB,CAAC;AAC3uB,OAAO,EAAE,2BAA2B,EAAgB,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,WAAW,EAAe,MAAM,8BAA8B,CAAC;AAExE;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW,0CAOlJ"}
@@ -67,7 +67,7 @@ class SchemaDifferenceValidationVisitor {
67
67
  const sourceSchemaReference = await this._sourceSchema.getReference(entry.difference.name);
68
68
  const targetSchemaReferenceName = this._targetSchema.getReferenceNameByAlias(sourceSchemaReference.alias);
69
69
  if (targetSchemaReferenceName && targetSchemaReferenceName !== sourceSchemaReference.name) {
70
- this.addConflict({
70
+ return this.addConflict({
71
71
  code: ConflictCode.ConflictingReferenceAlias,
72
72
  difference: entry,
73
73
  source: entry.difference.name,
@@ -75,10 +75,24 @@ class SchemaDifferenceValidationVisitor {
75
75
  description: "Target schema already references a different schema with this alias.",
76
76
  });
77
77
  }
78
+ // The targetSchemaReference can be undefined, if the reference will be added by the source schema.
79
+ // In this case further validation is not needed.
80
+ const targetSchemaReference = await this._targetSchema.getReference(entry.difference.name);
81
+ if (targetSchemaReference === undefined) {
82
+ return;
83
+ }
78
84
  const sourceSchemaKey = sourceSchemaReference.schemaKey;
79
- const targetSchemaKey = await this._targetSchema.getReference(entry.difference.name)
80
- .then((schema) => schema?.schemaKey);
81
- if (entry.changeType === "modify" && targetSchemaKey && !sourceSchemaKey.matches(targetSchemaKey, SchemaMatchType.LatestWriteCompatible)) {
85
+ const targetSchemaKey = targetSchemaReference.schemaKey;
86
+ if (targetSchemaReference.isDynamic !== sourceSchemaReference.isDynamic) {
87
+ return this.addConflict({
88
+ code: ConflictCode.ConflictingReferenceDynamic,
89
+ difference: entry,
90
+ description: "Cannot update a schema reference to or from a dynamic schema.",
91
+ source: sourceSchemaKey.toString(),
92
+ target: targetSchemaKey.toString(),
93
+ });
94
+ }
95
+ if (entry.changeType === "modify" && !targetSchemaReference.isDynamic && !areCompatible(sourceSchemaKey, targetSchemaKey)) {
82
96
  return this.addConflict({
83
97
  code: ConflictCode.ConflictingReferenceVersion,
84
98
  difference: entry,
@@ -518,4 +532,12 @@ function resolvePropertyTypeName(property) {
518
532
  return `${prefix}${property.relationshipClass.fullName}${suffix}`;
519
533
  return propertyTypeToString(property.propertyType);
520
534
  }
535
+ /**
536
+ * Checks if the two schemas are compatible. Since the merger will eventually take the most
537
+ * recent schema version, it is sufficient to check if they are write compatible in one direction.
538
+ */
539
+ function areCompatible(leftSchemaKey, rightSchemaKey) {
540
+ return leftSchemaKey.matches(rightSchemaKey, SchemaMatchType.LatestWriteCompatible)
541
+ || rightSchemaKey.matches(leftSchemaKey, SchemaMatchType.LatestWriteCompatible);
542
+ }
521
543
  //# sourceMappingURL=SchemaDifferenceValidator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaDifferenceValidator.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceValidator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Differencing\n */\n\nimport { classModifierToString, ECClass, ECClassModifier, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, LazyLoadedSchemaItem, Mixin, parseClassModifier, primitiveTypeToString, Property, propertyTypeToString, Schema, SchemaItem, SchemaItemKey, SchemaMatchType, Unit } from \"@itwin/ecschema-metadata\";\nimport { AnyClassItemDifference, AnySchemaDifference, AnySchemaItemDifference, ClassPropertyDifference, ConstantDifference, CustomAttributeClassDifference, CustomAttributeDifference, EntityClassDifference, EntityClassMixinDifference, EnumerationDifference, EnumeratorDifference, FormatDifference, FormatUnitDifference, FormatUnitLabelDifference, InvertedUnitDifference, KindOfQuantityDifference, KindOfQuantityPresentationFormatDifference, MixinClassDifference, PhenomenonDifference, PropertyCategoryDifference, RelationshipClassDifference, RelationshipConstraintClassDifference, RelationshipConstraintDifference, SchemaDifference, SchemaReferenceDifference, StructClassDifference, UnitDifference, UnitSystemDifference } from \"./SchemaDifference\";\nimport { AnySchemaDifferenceConflict, ConflictCode } from \"./SchemaConflicts\";\nimport { SchemaDifferenceVisitor, SchemaDifferenceWalker } from \"./SchemaDifferenceVisitor\";\nimport { NameMapping, PropertyKey } from \"../Merging/Edits/NameMapping\";\n\n/**\n * Validates the given array of schema differences and returns a list of conflicts if the\n * validation finds violation against rules.\n * @param differences An array of schema differences.\n * @param targetSchema The target schema reference.\n * @param sourceSchema The source schema reference.\n * @returns An array of conflicts found when validating the difference.\n * @internal\n */\nexport async function validateDifferences(differences: AnySchemaDifference[], targetSchema: Schema, sourceSchema: Schema, nameMappings: NameMapping) {\n const visitor = new SchemaDifferenceValidationVisitor(targetSchema, sourceSchema, nameMappings);\n const walker = new SchemaDifferenceWalker(visitor);\n\n await walker.traverse(differences);\n\n return visitor.conflicts;\n}\n\n/**\n * The SchemaDifferenceValidationVisitor class is an implementation of ISchemaDifferenceVisitor and\n * validates the given SchemaDifferences if the violate against some EC Rules.\n */\nclass SchemaDifferenceValidationVisitor implements SchemaDifferenceVisitor {\n\n public readonly conflicts: Array<AnySchemaDifferenceConflict>;\n private readonly _sourceSchema: Schema;\n private readonly _targetSchema: Schema;\n private readonly _nameMappings: NameMapping;\n\n /** Initializes a new instance of SchemaDifferenceValidationVisitor class. */\n constructor(targetSchema: Schema, sourceSchema: Schema, nameMappings: NameMapping) {\n this.conflicts = [];\n this._targetSchema = targetSchema;\n this._sourceSchema = sourceSchema;\n this._nameMappings = nameMappings;\n }\n\n private addConflict(conflict: AnySchemaDifferenceConflict) {\n this.conflicts.push(conflict);\n }\n\n private async getTargetSchemaItem(name: string): Promise<SchemaItem | undefined> {\n const itemKey = new SchemaItemKey(name, this._sourceSchema.schemaKey);\n const mappedKey = this._nameMappings.resolveItemKey(itemKey);\n return this._targetSchema.getItem(mappedKey.name);\n }\n\n private getTargetProperty(itemName: string, propertyName: string): PropertyKey {\n const classKey = new SchemaItemKey(itemName, this._sourceSchema.schemaKey);\n const propertyKey = new PropertyKey(propertyName, classKey);\n return this._nameMappings.resolvePropertyKey(propertyKey);\n }\n\n /**\n * Visitor implementation for handling SchemaDifference.\n * @internal\n */\n public async visitSchemaDifference(_entry: SchemaDifference) {\n }\n\n /**\n * Visitor implementation for handling SchemaReferenceDifference.\n * @internal\n */\n public async visitSchemaReferenceDifference(entry: SchemaReferenceDifference) {\n const sourceSchemaReference = await this._sourceSchema.getReference(entry.difference.name) as Schema;\n const targetSchemaReferenceName = this._targetSchema.getReferenceNameByAlias(sourceSchemaReference.alias);\n if (targetSchemaReferenceName && targetSchemaReferenceName !== sourceSchemaReference.name) {\n this.addConflict({\n code: ConflictCode.ConflictingReferenceAlias,\n difference: entry,\n source: entry.difference.name,\n target: targetSchemaReferenceName,\n description: \"Target schema already references a different schema with this alias.\",\n });\n }\n\n const sourceSchemaKey = sourceSchemaReference.schemaKey;\n const targetSchemaKey = await this._targetSchema.getReference(entry.difference.name)\n .then((schema) => schema?.schemaKey);\n\n if(entry.changeType === \"modify\" && targetSchemaKey && !sourceSchemaKey.matches(targetSchemaKey, SchemaMatchType.LatestWriteCompatible)) {\n return this.addConflict({\n code: ConflictCode.ConflictingReferenceVersion,\n difference: entry,\n description: \"Schema reference cannot be updated, incompatible versions\",\n source: sourceSchemaKey.toString(),\n target: targetSchemaKey.toString(),\n });\n }\n }\n\n /**\n * Shared schema item validation for all types of AnySchemaItemDifference union.\n */\n private async visitSchemaItemDifference(entry: AnySchemaItemDifference, targetSchemaItem: SchemaItem | undefined) {\n // If the item shall be added, but the target schema already has an item with this name,\n // will produce an ConflictingItemName conflict.\n if (entry.changeType === \"add\" && targetSchemaItem !== undefined) {\n this.addConflict({\n code: ConflictCode.ConflictingItemName,\n difference: entry,\n source: entry.schemaType,\n target: targetSchemaItem.schemaItemType,\n description: \"Target schema already contains a schema item with the name but different type.\",\n });\n return false;\n }\n\n return true;\n }\n\n /**\n * Shared base-class validation for all types of ClassItemDifference union.\n */\n private async visitBaseClassDifference(entry: AnyClassItemDifference, targetClassItem: ECClass) {\n if (\"baseClass\" in entry.difference && entry.difference.baseClass === undefined && targetClassItem.baseClass !== undefined) {\n return this.addConflict({\n code: ConflictCode.RemovingBaseClass,\n difference: entry,\n source: null,\n target: resolveLazyItemFullName(targetClassItem.baseClass),\n description: \"BaseClass cannot be removed, if there has been a baseClass before.\",\n });\n }\n\n if (entry.difference.baseClass === undefined) {\n return;\n }\n\n const sourceBaseClass = await this._sourceSchema.lookupItem(entry.difference.baseClass) as ECClass;\n if (sourceBaseClass.modifier === ECClassModifier.Sealed) {\n return this.addConflict({\n code: ConflictCode.SealedBaseClass,\n difference: entry,\n source: sourceBaseClass.fullName,\n target: resolveLazyItemFullName(targetClassItem.baseClass) || null,\n description: \"BaseClass is sealed.\",\n });\n }\n\n if (targetClassItem.baseClass && !await this.derivedFrom(sourceBaseClass, targetClassItem.baseClass)) {\n return this.addConflict({\n code: ConflictCode.ConflictingBaseClass,\n difference: entry,\n source: sourceBaseClass.fullName,\n target: resolveLazyItemFullName(targetClassItem.baseClass),\n description: \"BaseClass is not valid, source class must derive from target.\",\n });\n }\n }\n\n /**\n * Shared validation for all types of ClassItemDifference union.\n */\n private async visitClassDifference(entry: AnyClassItemDifference) {\n const targetClassItem = await this.getTargetSchemaItem(entry.itemName);\n if (!await this.visitSchemaItemDifference(entry, targetClassItem)) {\n return;\n }\n\n if (entry.changeType === \"modify\" && ECClass.isECClass(targetClassItem)) {\n await this.visitClassModifierDifference(entry, targetClassItem);\n await this.visitBaseClassDifference(entry, targetClassItem);\n }\n }\n\n /**\n * Validation the modifiers of all types of ClassItemDifference union.\n */\n private async visitClassModifierDifference(entry: AnyClassItemDifference, targetClass: ECClass) {\n if (entry.difference.modifier) {\n const changedModifier = parseClassModifier(entry.difference.modifier);\n if (changedModifier !== undefined && changedModifier !== ECClassModifier.None) {\n this.addConflict({\n code: ConflictCode.ConflictingClassModifier,\n difference: entry,\n source: entry.difference.modifier,\n target: classModifierToString(targetClass.modifier),\n description: \"Class has conflicting modifiers.\",\n });\n }\n }\n }\n\n /**\n * Visitor implementation for handling ConstantDifference.\n * @internal\n */\n public async visitConstantDifference(entry: ConstantDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling CustomAttributeClassDifference.\n * @internal\n */\n public async visitCustomAttributeClassDifference(entry: CustomAttributeClassDifference) {\n await this.visitClassDifference(entry);\n }\n\n /**\n * Visitor implementation for handling CustomAttributeDifference.\n * @internal\n */\n public async visitCustomAttributeInstanceDifference(_entry: CustomAttributeDifference) {\n }\n\n /**\n * Visitor implementation for handling EntityClassDifference.\n * @internal\n */\n public async visitEntityClassDifference(entry: EntityClassDifference) {\n await this.visitClassDifference(entry);\n }\n\n /**\n * Visitor implementation for handling EntityClassMixinDifference.\n * @internal\n */\n public async visitEntityClassMixinDifference(entry: EntityClassMixinDifference) {\n for (const addedMixin of entry.difference) {\n // To validate the added mixins, the instance from the source schema it fetched,\n // otherwise validation gets too complicated as the mixin must not be existing in\n // the current target schema, it could also be added to the schema.\n const sourceMixin = await this._sourceSchema.lookupItem(addedMixin) as Mixin;\n const sourceSchemaItem = await this._sourceSchema.getItem(entry.itemName) as EntityClass;\n if (sourceMixin.appliesTo && !await sourceSchemaItem.is(await sourceMixin.appliesTo)) {\n this.addConflict({\n code: ConflictCode.MixinAppliedMustDeriveFromConstraint,\n difference: entry,\n source: addedMixin,\n target: undefined,\n description: \"Mixin cannot applied to this class.\",\n });\n }\n }\n }\n\n /**\n * Visitor implementation for handling EnumerationDifference.\n * @internal\n */\n public async visitEnumerationDifference(entry: EnumerationDifference) {\n const enumeration = await this.getTargetSchemaItem(entry.itemName);\n if (!await this.visitSchemaItemDifference(entry, enumeration)) {\n return;\n }\n\n if (entry.changeType === \"modify\" && Enumeration.isEnumeration(enumeration) && enumeration.type !== undefined) {\n if (entry.difference.type) {\n this.addConflict({\n code: ConflictCode.ConflictingEnumerationType,\n difference: entry,\n source: entry.difference.type,\n target: primitiveTypeToString(enumeration.type),\n description: \"Enumeration has a different primitive type.\",\n });\n }\n }\n }\n\n /**\n * Visitor implementation for handling EnumeratorDifference.\n * @internal\n */\n public async visitEnumeratorDifference(entry: EnumeratorDifference) {\n if (entry.changeType !== \"modify\") {\n return;\n }\n\n const enumeration = await this.getTargetSchemaItem(entry.itemName) as Enumeration;\n const enumerator = enumeration.getEnumeratorByName(entry.path);\n if (!enumerator) {\n return;\n }\n\n if (entry.difference.value) {\n this.addConflict({\n code: ConflictCode.ConflictingEnumeratorValue,\n difference: entry,\n source: entry.difference.value,\n target: enumerator.value,\n description: \"Enumerators must have unique values.\",\n });\n }\n }\n\n /**\n * Visitor implementation for handling FormatDifference.\n * @internal\n */\n public async visitFormatDifference(entry: FormatDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling InvertedUnitDifference.\n * @internal\n */\n public async visitInvertedUnitDifference(entry: InvertedUnitDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling KindOfQuantityDifference.\n * @internal\n */\n public async visitKindOfQuantityDifference(entry: KindOfQuantityDifference) {\n const kindOfQuantity = await this.getTargetSchemaItem(entry.itemName);\n if (!await this.visitSchemaItemDifference(entry, kindOfQuantity)) {\n return;\n }\n\n if (entry.changeType === \"modify\" && KindOfQuantity.isKindOfQuantity(kindOfQuantity)) {\n if (entry.difference.persistenceUnit) {\n this.addConflict({\n code: ConflictCode.ConflictingPersistenceUnit,\n difference: entry,\n source: entry.difference.persistenceUnit,\n target: resolveLazyItemFullName(kindOfQuantity.persistenceUnit),\n description: \"Kind of Quantity has a different persistence unit.\",\n });\n }\n }\n }\n\n /**\n * Visitor implementation for handling MixinClassDifference.\n * @internal\n */\n public async visitMixinDifference(entry: MixinClassDifference) {\n await this.visitClassDifference(entry);\n }\n\n /**\n * Visitor implementation for handling PhenomenonDifference.\n * @internal\n */\n public async visitPhenomenonDifference(entry: PhenomenonDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling ClassPropertyDifference.\n * @internal\n */\n public async visitPropertyDifference(entry: ClassPropertyDifference) {\n const targetClass = await this.getTargetSchemaItem(entry.itemName) as ECClass;\n const propertyKey = this.getTargetProperty(entry.itemName, entry.path);\n const targetProperty = await targetClass.getProperty(propertyKey.propertyName);\n\n const sourceClass = await this._sourceSchema.getItem(entry.itemName) as ECClass;\n const sourceProperty = await sourceClass.getProperty(entry.path) as Property;\n\n // If property shall be added but there is already a property with this name\n // in target, a ConflictingPropertyName is issued.\n if (entry.changeType === \"add\" && targetProperty !== undefined) {\n return this.addConflict({\n code: ConflictCode.ConflictingPropertyName,\n difference: entry,\n source: resolvePropertyTypeName(sourceProperty),\n target: resolvePropertyTypeName(targetProperty),\n description: \"Target class already contains a property with a different type.\",\n });\n }\n\n if (entry.changeType === \"modify\" && targetProperty !== undefined) {\n if (\"kindOfQuantity\" in entry.difference) {\n const sourceKoQ = await sourceProperty.kindOfQuantity;\n const targetKoQ = await targetProperty.kindOfQuantity;\n if(!targetKoQ) {\n return this.addConflict({\n code: ConflictCode.ConflictingPropertyKindOfQuantity,\n difference: entry,\n source: entry.difference.kindOfQuantity,\n target: null,\n description: \"The kind of quantity cannot be assiged if the property did not have a kind of quantities before.\",\n });\n }\n\n if(!sourceKoQ) {\n return this.addConflict({\n code: ConflictCode.ConflictingPropertyKindOfQuantity,\n difference: entry,\n source: null,\n target: resolveLazyItemFullName(targetProperty.kindOfQuantity),\n description: \"The kind of quantity cannot be undefined if the property had a kind of quantities before.\",\n });\n }\n\n if (resolveLazyItemName(sourceKoQ.persistenceUnit) !== resolveLazyItemName(targetKoQ.persistenceUnit)) {\n this.addConflict({\n code: ConflictCode.ConflictingPropertyKindOfQuantityUnit,\n difference: entry,\n source: entry.difference.kindOfQuantity,\n target: resolveLazyItemFullName(targetProperty.kindOfQuantity),\n description: \"The property has different kind of quantities with conflicting units.\",\n });\n }\n }\n }\n }\n\n /**\n * Visitor implementation for handling PropertyCategoryDifference.\n * @internal\n */\n public async visitPropertyCategoryDifference(entry: PropertyCategoryDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling RelationshipClassDifference.\n * @internal\n */\n public async visitRelationshipClassDifference(entry: RelationshipClassDifference) {\n await this.visitClassDifference(entry);\n }\n\n /**\n * Visitor implementation for handling RelationshipConstraintDifference.\n * @internal\n */\n public async visitRelationshipConstraintDifference(_entry: RelationshipConstraintDifference) {\n }\n\n /**\n * Visitor implementation for handling RelationshipConstraintClassDifference.\n * @internal\n */\n public async visitRelationshipConstraintClassDifference(_entry: RelationshipConstraintClassDifference) {\n }\n\n /**\n * Visitor implementation for handling StructClassDifference.\n * @internal\n */\n public async visitStructClassDifference(entry: StructClassDifference) {\n await this.visitClassDifference(entry);\n }\n\n /**\n * Visitor implementation for handling UnitDifference.\n * @internal\n */\n public async visitUnitDifference(entry: UnitDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling UnitSystemDifference.\n * @internal\n */\n public async visitUnitSystemDifference(entry: UnitSystemDifference) {\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\n }\n\n /**\n * Visitor implementation for handling KindOfQuantityPresentationFormatDifference.\n * @internal\n */\n public async visitKindOfQuantityPresentationFormatDifference(_entry: KindOfQuantityPresentationFormatDifference) {\n }\n\n /**\n * Visitor implementation for handling FormatUnitDifference.\n * @internal\n */\n public async visitFormatUnitDifference(entry: FormatUnitDifference) {\n const targetFormat = await this.getTargetSchemaItem(entry.itemName) as Format;\n\n if (targetFormat.units === undefined) {\n return this.addConflict({\n code: ConflictCode.ConflictingFormatUnit,\n difference: entry,\n source: entry.difference[0].name,\n target: null,\n description: \"The unit cannot be assiged if the format did not have a unit before.\",\n });\n };\n\n const targetUnit = await targetFormat.units[0][0];\n const targetPhenomenon = InvertedUnit.isInvertedUnit(targetUnit)\n ? (await targetUnit.invertsUnit)?.phenomenon\n : targetUnit.phenomenon;\n\n const sourceUnit = await this._sourceSchema.lookupItem(entry.difference[0].name) as Unit | InvertedUnit;\n const sourcePhenomenon = InvertedUnit.isInvertedUnit(sourceUnit)\n ? (await sourceUnit.invertsUnit)?.phenomenon\n : sourceUnit.phenomenon;\n\n if (resolveLazyItemName(targetPhenomenon) !== resolveLazyItemName(sourcePhenomenon)) {\n return this.addConflict({\n code: ConflictCode.ConflictingFormatUnitPhenomenon,\n difference: entry,\n source: entry.difference[0].name,\n target: targetUnit.fullName,\n description: \"Format units has a different phenomenon.\",\n });\n };\n };\n\n /**\n * Visitor implementation for handling FormatUnitLabelDifference.\n * @internal\n */\n public async visitFormatUnitLabelDifference(_entry: FormatUnitLabelDifference) {\n }\n\n /**\n * Recursive synchronous function to figure whether a given class derived from\n * a class with the given baseClass name.\n */\n private async derivedFrom(ecClass: ECClass | undefined, baseClassKey: Readonly<SchemaItemKey>): Promise<boolean> {\n if (ecClass === undefined) {\n return false;\n }\n\n // First check for name which must be same in any case...\n if (ecClass.name === baseClassKey.name) {\n // ... then check if the class is in the same schema as the expected base class...\n if(ecClass.schema.name === baseClassKey.schemaName)\n return true;\n // ... if not, whether it's in the source schema, but then we expect the baseclass\n // to be in the target schema.\n if(ecClass.schema.name === this._sourceSchema.name && baseClassKey.schemaName === this._targetSchema.name)\n return true;\n }\n return this.derivedFrom(await ecClass.baseClass, baseClassKey);\n }\n}\n\n/**\n * Helper method to resolve the schema item name from lazy loaded schema items.\n * @param lazyItem LazyLoaded item\n * @returns The full name of the item or undefined item was not set.\n */\nfunction resolveLazyItemFullName(lazyItem?: LazyLoadedSchemaItem<SchemaItem>) {\n return lazyItem && lazyItem.fullName;\n}\n\n/**\n * Helper method to resolve the schema item name from lazy loaded schema items.\n * @param lazyItem LazyLoaded item\n * @returns The full name of the item or undefined item was not set.\n */\nfunction resolveLazyItemName(lazyItem?: LazyLoadedSchemaItem<SchemaItem>) {\n return lazyItem && lazyItem.name;\n}\n\n/**\n * Helper method to resolve the type name of a property.\n * @param property The property which's type shall be resolved.\n * @returns The (full) name of the properties type.\n */\nfunction resolvePropertyTypeName(property: Property) {\n const [prefix, suffix] = property.isArray() ? [\"[\", \"]\"] : [\"\", \"\"];\n if (property.isEnumeration())\n return `${prefix}${resolveLazyItemFullName(property.enumeration)}${suffix}`;\n if (property.isPrimitive())\n return `${prefix}${primitiveTypeToString(property.primitiveType)}${suffix}`;\n if (property.isStruct())\n return `${prefix}${property.structClass.fullName}${suffix}`;\n if (property.isNavigation())\n return `${prefix}${property.relationshipClass.fullName}${suffix}`;\n return propertyTypeToString(property.propertyType);\n}\n"]}
1
+ {"version":3,"file":"SchemaDifferenceValidator.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceValidator.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 Differencing\r\n */\r\n\r\nimport { classModifierToString, ECClass, ECClassModifier, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, LazyLoadedSchemaItem, Mixin, parseClassModifier, primitiveTypeToString, Property, propertyTypeToString, Schema, SchemaItem, SchemaItemKey, SchemaKey, SchemaMatchType, Unit } from \"@itwin/ecschema-metadata\";\r\nimport { AnyClassItemDifference, AnySchemaDifference, AnySchemaItemDifference, ClassPropertyDifference, ConstantDifference, CustomAttributeClassDifference, CustomAttributeDifference, EntityClassDifference, EntityClassMixinDifference, EnumerationDifference, EnumeratorDifference, FormatDifference, FormatUnitDifference, FormatUnitLabelDifference, InvertedUnitDifference, KindOfQuantityDifference, KindOfQuantityPresentationFormatDifference, MixinClassDifference, PhenomenonDifference, PropertyCategoryDifference, RelationshipClassDifference, RelationshipConstraintClassDifference, RelationshipConstraintDifference, SchemaDifference, SchemaReferenceDifference, StructClassDifference, UnitDifference, UnitSystemDifference } from \"./SchemaDifference\";\r\nimport { AnySchemaDifferenceConflict, ConflictCode } from \"./SchemaConflicts\";\r\nimport { SchemaDifferenceVisitor, SchemaDifferenceWalker } from \"./SchemaDifferenceVisitor\";\r\nimport { NameMapping, PropertyKey } from \"../Merging/Edits/NameMapping\";\r\n\r\n/**\r\n * Validates the given array of schema differences and returns a list of conflicts if the\r\n * validation finds violation against rules.\r\n * @param differences An array of schema differences.\r\n * @param targetSchema The target schema reference.\r\n * @param sourceSchema The source schema reference.\r\n * @returns An array of conflicts found when validating the difference.\r\n * @internal\r\n */\r\nexport async function validateDifferences(differences: AnySchemaDifference[], targetSchema: Schema, sourceSchema: Schema, nameMappings: NameMapping) {\r\n const visitor = new SchemaDifferenceValidationVisitor(targetSchema, sourceSchema, nameMappings);\r\n const walker = new SchemaDifferenceWalker(visitor);\r\n\r\n await walker.traverse(differences);\r\n\r\n return visitor.conflicts;\r\n}\r\n\r\n/**\r\n * The SchemaDifferenceValidationVisitor class is an implementation of ISchemaDifferenceVisitor and\r\n * validates the given SchemaDifferences if the violate against some EC Rules.\r\n */\r\nclass SchemaDifferenceValidationVisitor implements SchemaDifferenceVisitor {\r\n\r\n public readonly conflicts: Array<AnySchemaDifferenceConflict>;\r\n private readonly _sourceSchema: Schema;\r\n private readonly _targetSchema: Schema;\r\n private readonly _nameMappings: NameMapping;\r\n\r\n /** Initializes a new instance of SchemaDifferenceValidationVisitor class. */\r\n constructor(targetSchema: Schema, sourceSchema: Schema, nameMappings: NameMapping) {\r\n this.conflicts = [];\r\n this._targetSchema = targetSchema;\r\n this._sourceSchema = sourceSchema;\r\n this._nameMappings = nameMappings;\r\n }\r\n\r\n private addConflict(conflict: AnySchemaDifferenceConflict) {\r\n this.conflicts.push(conflict);\r\n }\r\n\r\n private async getTargetSchemaItem(name: string): Promise<SchemaItem | undefined> {\r\n const itemKey = new SchemaItemKey(name, this._sourceSchema.schemaKey);\r\n const mappedKey = this._nameMappings.resolveItemKey(itemKey);\r\n return this._targetSchema.getItem(mappedKey.name);\r\n }\r\n\r\n private getTargetProperty(itemName: string, propertyName: string): PropertyKey {\r\n const classKey = new SchemaItemKey(itemName, this._sourceSchema.schemaKey);\r\n const propertyKey = new PropertyKey(propertyName, classKey);\r\n return this._nameMappings.resolvePropertyKey(propertyKey);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling SchemaDifference.\r\n * @internal\r\n */\r\n public async visitSchemaDifference(_entry: SchemaDifference) {\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling SchemaReferenceDifference.\r\n * @internal\r\n */\r\n public async visitSchemaReferenceDifference(entry: SchemaReferenceDifference) {\r\n const sourceSchemaReference = await this._sourceSchema.getReference(entry.difference.name) as Schema;\r\n const targetSchemaReferenceName = this._targetSchema.getReferenceNameByAlias(sourceSchemaReference.alias);\r\n if (targetSchemaReferenceName && targetSchemaReferenceName !== sourceSchemaReference.name) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingReferenceAlias,\r\n difference: entry,\r\n source: entry.difference.name,\r\n target: targetSchemaReferenceName,\r\n description: \"Target schema already references a different schema with this alias.\",\r\n });\r\n }\r\n\r\n // The targetSchemaReference can be undefined, if the reference will be added by the source schema.\r\n // In this case further validation is not needed.\r\n const targetSchemaReference = await this._targetSchema.getReference(entry.difference.name);\r\n if(targetSchemaReference === undefined) {\r\n return;\r\n }\r\n\r\n const sourceSchemaKey = sourceSchemaReference.schemaKey;\r\n const targetSchemaKey = targetSchemaReference.schemaKey;\r\n\r\n if(targetSchemaReference.isDynamic !== sourceSchemaReference.isDynamic) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingReferenceDynamic,\r\n difference: entry,\r\n description: \"Cannot update a schema reference to or from a dynamic schema.\",\r\n source: sourceSchemaKey.toString(),\r\n target: targetSchemaKey.toString(),\r\n });\r\n }\r\n\r\n if(entry.changeType === \"modify\" && !targetSchemaReference.isDynamic && !areCompatible(sourceSchemaKey, targetSchemaKey)) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingReferenceVersion,\r\n difference: entry,\r\n description: \"Schema reference cannot be updated, incompatible versions\",\r\n source: sourceSchemaKey.toString(),\r\n target: targetSchemaKey.toString(),\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Shared schema item validation for all types of AnySchemaItemDifference union.\r\n */\r\n private async visitSchemaItemDifference(entry: AnySchemaItemDifference, targetSchemaItem: SchemaItem | undefined) {\r\n // If the item shall be added, but the target schema already has an item with this name,\r\n // will produce an ConflictingItemName conflict.\r\n if (entry.changeType === \"add\" && targetSchemaItem !== undefined) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingItemName,\r\n difference: entry,\r\n source: entry.schemaType,\r\n target: targetSchemaItem.schemaItemType,\r\n description: \"Target schema already contains a schema item with the name but different type.\",\r\n });\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Shared base-class validation for all types of ClassItemDifference union.\r\n */\r\n private async visitBaseClassDifference(entry: AnyClassItemDifference, targetClassItem: ECClass) {\r\n if (\"baseClass\" in entry.difference && entry.difference.baseClass === undefined && targetClassItem.baseClass !== undefined) {\r\n return this.addConflict({\r\n code: ConflictCode.RemovingBaseClass,\r\n difference: entry,\r\n source: null,\r\n target: resolveLazyItemFullName(targetClassItem.baseClass),\r\n description: \"BaseClass cannot be removed, if there has been a baseClass before.\",\r\n });\r\n }\r\n\r\n if (entry.difference.baseClass === undefined) {\r\n return;\r\n }\r\n\r\n const sourceBaseClass = await this._sourceSchema.lookupItem(entry.difference.baseClass) as ECClass;\r\n if (sourceBaseClass.modifier === ECClassModifier.Sealed) {\r\n return this.addConflict({\r\n code: ConflictCode.SealedBaseClass,\r\n difference: entry,\r\n source: sourceBaseClass.fullName,\r\n target: resolveLazyItemFullName(targetClassItem.baseClass) || null,\r\n description: \"BaseClass is sealed.\",\r\n });\r\n }\r\n\r\n if (targetClassItem.baseClass && !await this.derivedFrom(sourceBaseClass, targetClassItem.baseClass)) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingBaseClass,\r\n difference: entry,\r\n source: sourceBaseClass.fullName,\r\n target: resolveLazyItemFullName(targetClassItem.baseClass),\r\n description: \"BaseClass is not valid, source class must derive from target.\",\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Shared validation for all types of ClassItemDifference union.\r\n */\r\n private async visitClassDifference(entry: AnyClassItemDifference) {\r\n const targetClassItem = await this.getTargetSchemaItem(entry.itemName);\r\n if (!await this.visitSchemaItemDifference(entry, targetClassItem)) {\r\n return;\r\n }\r\n\r\n if (entry.changeType === \"modify\" && ECClass.isECClass(targetClassItem)) {\r\n await this.visitClassModifierDifference(entry, targetClassItem);\r\n await this.visitBaseClassDifference(entry, targetClassItem);\r\n }\r\n }\r\n\r\n /**\r\n * Validation the modifiers of all types of ClassItemDifference union.\r\n */\r\n private async visitClassModifierDifference(entry: AnyClassItemDifference, targetClass: ECClass) {\r\n if (entry.difference.modifier) {\r\n const changedModifier = parseClassModifier(entry.difference.modifier);\r\n if (changedModifier !== undefined && changedModifier !== ECClassModifier.None) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingClassModifier,\r\n difference: entry,\r\n source: entry.difference.modifier,\r\n target: classModifierToString(targetClass.modifier),\r\n description: \"Class has conflicting modifiers.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling ConstantDifference.\r\n * @internal\r\n */\r\n public async visitConstantDifference(entry: ConstantDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling CustomAttributeClassDifference.\r\n * @internal\r\n */\r\n public async visitCustomAttributeClassDifference(entry: CustomAttributeClassDifference) {\r\n await this.visitClassDifference(entry);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling CustomAttributeDifference.\r\n * @internal\r\n */\r\n public async visitCustomAttributeInstanceDifference(_entry: CustomAttributeDifference) {\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling EntityClassDifference.\r\n * @internal\r\n */\r\n public async visitEntityClassDifference(entry: EntityClassDifference) {\r\n await this.visitClassDifference(entry);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling EntityClassMixinDifference.\r\n * @internal\r\n */\r\n public async visitEntityClassMixinDifference(entry: EntityClassMixinDifference) {\r\n for (const addedMixin of entry.difference) {\r\n // To validate the added mixins, the instance from the source schema it fetched,\r\n // otherwise validation gets too complicated as the mixin must not be existing in\r\n // the current target schema, it could also be added to the schema.\r\n const sourceMixin = await this._sourceSchema.lookupItem(addedMixin) as Mixin;\r\n const sourceSchemaItem = await this._sourceSchema.getItem(entry.itemName) as EntityClass;\r\n if (sourceMixin.appliesTo && !await sourceSchemaItem.is(await sourceMixin.appliesTo)) {\r\n this.addConflict({\r\n code: ConflictCode.MixinAppliedMustDeriveFromConstraint,\r\n difference: entry,\r\n source: addedMixin,\r\n target: undefined,\r\n description: \"Mixin cannot applied to this class.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling EnumerationDifference.\r\n * @internal\r\n */\r\n public async visitEnumerationDifference(entry: EnumerationDifference) {\r\n const enumeration = await this.getTargetSchemaItem(entry.itemName);\r\n if (!await this.visitSchemaItemDifference(entry, enumeration)) {\r\n return;\r\n }\r\n\r\n if (entry.changeType === \"modify\" && Enumeration.isEnumeration(enumeration) && enumeration.type !== undefined) {\r\n if (entry.difference.type) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingEnumerationType,\r\n difference: entry,\r\n source: entry.difference.type,\r\n target: primitiveTypeToString(enumeration.type),\r\n description: \"Enumeration has a different primitive type.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling EnumeratorDifference.\r\n * @internal\r\n */\r\n public async visitEnumeratorDifference(entry: EnumeratorDifference) {\r\n if (entry.changeType !== \"modify\") {\r\n return;\r\n }\r\n\r\n const enumeration = await this.getTargetSchemaItem(entry.itemName) as Enumeration;\r\n const enumerator = enumeration.getEnumeratorByName(entry.path);\r\n if (!enumerator) {\r\n return;\r\n }\r\n\r\n if (entry.difference.value) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingEnumeratorValue,\r\n difference: entry,\r\n source: entry.difference.value,\r\n target: enumerator.value,\r\n description: \"Enumerators must have unique values.\",\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling FormatDifference.\r\n * @internal\r\n */\r\n public async visitFormatDifference(entry: FormatDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling InvertedUnitDifference.\r\n * @internal\r\n */\r\n public async visitInvertedUnitDifference(entry: InvertedUnitDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling KindOfQuantityDifference.\r\n * @internal\r\n */\r\n public async visitKindOfQuantityDifference(entry: KindOfQuantityDifference) {\r\n const kindOfQuantity = await this.getTargetSchemaItem(entry.itemName);\r\n if (!await this.visitSchemaItemDifference(entry, kindOfQuantity)) {\r\n return;\r\n }\r\n\r\n if (entry.changeType === \"modify\" && KindOfQuantity.isKindOfQuantity(kindOfQuantity)) {\r\n if (entry.difference.persistenceUnit) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingPersistenceUnit,\r\n difference: entry,\r\n source: entry.difference.persistenceUnit,\r\n target: resolveLazyItemFullName(kindOfQuantity.persistenceUnit),\r\n description: \"Kind of Quantity has a different persistence unit.\",\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling MixinClassDifference.\r\n * @internal\r\n */\r\n public async visitMixinDifference(entry: MixinClassDifference) {\r\n await this.visitClassDifference(entry);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling PhenomenonDifference.\r\n * @internal\r\n */\r\n public async visitPhenomenonDifference(entry: PhenomenonDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling ClassPropertyDifference.\r\n * @internal\r\n */\r\n public async visitPropertyDifference(entry: ClassPropertyDifference) {\r\n const targetClass = await this.getTargetSchemaItem(entry.itemName) as ECClass;\r\n const propertyKey = this.getTargetProperty(entry.itemName, entry.path);\r\n const targetProperty = await targetClass.getProperty(propertyKey.propertyName);\r\n\r\n const sourceClass = await this._sourceSchema.getItem(entry.itemName) as ECClass;\r\n const sourceProperty = await sourceClass.getProperty(entry.path) as Property;\r\n\r\n // If property shall be added but there is already a property with this name\r\n // in target, a ConflictingPropertyName is issued.\r\n if (entry.changeType === \"add\" && targetProperty !== undefined) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingPropertyName,\r\n difference: entry,\r\n source: resolvePropertyTypeName(sourceProperty),\r\n target: resolvePropertyTypeName(targetProperty),\r\n description: \"Target class already contains a property with a different type.\",\r\n });\r\n }\r\n\r\n if (entry.changeType === \"modify\" && targetProperty !== undefined) {\r\n if (\"kindOfQuantity\" in entry.difference) {\r\n const sourceKoQ = await sourceProperty.kindOfQuantity;\r\n const targetKoQ = await targetProperty.kindOfQuantity;\r\n if(!targetKoQ) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingPropertyKindOfQuantity,\r\n difference: entry,\r\n source: entry.difference.kindOfQuantity,\r\n target: null,\r\n description: \"The kind of quantity cannot be assiged if the property did not have a kind of quantities before.\",\r\n });\r\n }\r\n\r\n if(!sourceKoQ) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingPropertyKindOfQuantity,\r\n difference: entry,\r\n source: null,\r\n target: resolveLazyItemFullName(targetProperty.kindOfQuantity),\r\n description: \"The kind of quantity cannot be undefined if the property had a kind of quantities before.\",\r\n });\r\n }\r\n\r\n if (resolveLazyItemName(sourceKoQ.persistenceUnit) !== resolveLazyItemName(targetKoQ.persistenceUnit)) {\r\n this.addConflict({\r\n code: ConflictCode.ConflictingPropertyKindOfQuantityUnit,\r\n difference: entry,\r\n source: entry.difference.kindOfQuantity,\r\n target: resolveLazyItemFullName(targetProperty.kindOfQuantity),\r\n description: \"The property has different kind of quantities with conflicting units.\",\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling PropertyCategoryDifference.\r\n * @internal\r\n */\r\n public async visitPropertyCategoryDifference(entry: PropertyCategoryDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling RelationshipClassDifference.\r\n * @internal\r\n */\r\n public async visitRelationshipClassDifference(entry: RelationshipClassDifference) {\r\n await this.visitClassDifference(entry);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling RelationshipConstraintDifference.\r\n * @internal\r\n */\r\n public async visitRelationshipConstraintDifference(_entry: RelationshipConstraintDifference) {\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling RelationshipConstraintClassDifference.\r\n * @internal\r\n */\r\n public async visitRelationshipConstraintClassDifference(_entry: RelationshipConstraintClassDifference) {\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling StructClassDifference.\r\n * @internal\r\n */\r\n public async visitStructClassDifference(entry: StructClassDifference) {\r\n await this.visitClassDifference(entry);\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling UnitDifference.\r\n * @internal\r\n */\r\n public async visitUnitDifference(entry: UnitDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling UnitSystemDifference.\r\n * @internal\r\n */\r\n public async visitUnitSystemDifference(entry: UnitSystemDifference) {\r\n await this.visitSchemaItemDifference(entry, await this.getTargetSchemaItem(entry.itemName));\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling KindOfQuantityPresentationFormatDifference.\r\n * @internal\r\n */\r\n public async visitKindOfQuantityPresentationFormatDifference(_entry: KindOfQuantityPresentationFormatDifference) {\r\n }\r\n\r\n /**\r\n * Visitor implementation for handling FormatUnitDifference.\r\n * @internal\r\n */\r\n public async visitFormatUnitDifference(entry: FormatUnitDifference) {\r\n const targetFormat = await this.getTargetSchemaItem(entry.itemName) as Format;\r\n\r\n if (targetFormat.units === undefined) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingFormatUnit,\r\n difference: entry,\r\n source: entry.difference[0].name,\r\n target: null,\r\n description: \"The unit cannot be assiged if the format did not have a unit before.\",\r\n });\r\n };\r\n\r\n const targetUnit = await targetFormat.units[0][0];\r\n const targetPhenomenon = InvertedUnit.isInvertedUnit(targetUnit)\r\n ? (await targetUnit.invertsUnit)?.phenomenon\r\n : targetUnit.phenomenon;\r\n\r\n const sourceUnit = await this._sourceSchema.lookupItem(entry.difference[0].name) as Unit | InvertedUnit;\r\n const sourcePhenomenon = InvertedUnit.isInvertedUnit(sourceUnit)\r\n ? (await sourceUnit.invertsUnit)?.phenomenon\r\n : sourceUnit.phenomenon;\r\n\r\n if (resolveLazyItemName(targetPhenomenon) !== resolveLazyItemName(sourcePhenomenon)) {\r\n return this.addConflict({\r\n code: ConflictCode.ConflictingFormatUnitPhenomenon,\r\n difference: entry,\r\n source: entry.difference[0].name,\r\n target: targetUnit.fullName,\r\n description: \"Format units has a different phenomenon.\",\r\n });\r\n };\r\n };\r\n\r\n /**\r\n * Visitor implementation for handling FormatUnitLabelDifference.\r\n * @internal\r\n */\r\n public async visitFormatUnitLabelDifference(_entry: FormatUnitLabelDifference) {\r\n }\r\n\r\n /**\r\n * Recursive synchronous function to figure whether a given class derived from\r\n * a class with the given baseClass name.\r\n */\r\n private async derivedFrom(ecClass: ECClass | undefined, baseClassKey: Readonly<SchemaItemKey>): Promise<boolean> {\r\n if (ecClass === undefined) {\r\n return false;\r\n }\r\n\r\n // First check for name which must be same in any case...\r\n if (ecClass.name === baseClassKey.name) {\r\n // ... then check if the class is in the same schema as the expected base class...\r\n if(ecClass.schema.name === baseClassKey.schemaName)\r\n return true;\r\n // ... if not, whether it's in the source schema, but then we expect the baseclass\r\n // to be in the target schema.\r\n if(ecClass.schema.name === this._sourceSchema.name && baseClassKey.schemaName === this._targetSchema.name)\r\n return true;\r\n }\r\n return this.derivedFrom(await ecClass.baseClass, baseClassKey);\r\n }\r\n}\r\n\r\n/**\r\n * Helper method to resolve the schema item name from lazy loaded schema items.\r\n * @param lazyItem LazyLoaded item\r\n * @returns The full name of the item or undefined item was not set.\r\n */\r\nfunction resolveLazyItemFullName(lazyItem?: LazyLoadedSchemaItem<SchemaItem>) {\r\n return lazyItem && lazyItem.fullName;\r\n}\r\n\r\n/**\r\n * Helper method to resolve the schema item name from lazy loaded schema items.\r\n * @param lazyItem LazyLoaded item\r\n * @returns The full name of the item or undefined item was not set.\r\n */\r\nfunction resolveLazyItemName(lazyItem?: LazyLoadedSchemaItem<SchemaItem>) {\r\n return lazyItem && lazyItem.name;\r\n}\r\n\r\n/**\r\n * Helper method to resolve the type name of a property.\r\n * @param property The property which's type shall be resolved.\r\n * @returns The (full) name of the properties type.\r\n */\r\nfunction resolvePropertyTypeName(property: Property) {\r\n const [prefix, suffix] = property.isArray() ? [\"[\", \"]\"] : [\"\", \"\"];\r\n if (property.isEnumeration())\r\n return `${prefix}${resolveLazyItemFullName(property.enumeration)}${suffix}`;\r\n if (property.isPrimitive())\r\n return `${prefix}${primitiveTypeToString(property.primitiveType)}${suffix}`;\r\n if (property.isStruct())\r\n return `${prefix}${property.structClass.fullName}${suffix}`;\r\n if (property.isNavigation())\r\n return `${prefix}${property.relationshipClass.fullName}${suffix}`;\r\n return propertyTypeToString(property.propertyType);\r\n}\r\n\r\n/**\r\n * Checks if the two schemas are compatible. Since the merger will eventually take the most\r\n * recent schema version, it is sufficient to check if they are write compatible in one direction.\r\n */\r\nfunction areCompatible(leftSchemaKey: SchemaKey, rightSchemaKey: SchemaKey): boolean {\r\n return leftSchemaKey.matches(rightSchemaKey, SchemaMatchType.LatestWriteCompatible)\r\n || rightSchemaKey.matches(leftSchemaKey, SchemaMatchType.LatestWriteCompatible);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaDifferenceVisitor.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceVisitor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Differencing\n */\n\nimport { SchemaItemType } from \"@itwin/ecschema-metadata\";\nimport { type AnySchemaDifference, SchemaOtherTypes } from \"./SchemaDifference\";\n\n/**\n * Defines the interface for a visitor that can be used to traverse schema differences.\n * It dynamically creates a method for each schema difference type.\n * @internal\n */\nexport type SchemaDifferenceVisitor = {\n [Difference in AnySchemaDifference as `visit${Difference[\"schemaType\"]}Difference`]: (entry: Difference, index: number, array: AnySchemaDifference[]) => Promise<void>;\n};\n\n/**\n * Implementation of a walker that traverses schema differences and calls the appropriate\n * method on the visitor.\n * @internal\n */\nexport class SchemaDifferenceWalker {\n\n private readonly _visitor: SchemaDifferenceVisitor;\n\n /** Initializes a new instance of SchemaDifferenceWalker class. */\n constructor(visitor: SchemaDifferenceVisitor) {\n this._visitor = visitor;\n }\n\n /**\n * Traverses the schema differences and calls the appropriate method on the visitor.\n * @param differences The differences to traverse.\n */\n public async traverse(differences: Array<AnySchemaDifference>): Promise<void> {\n for (const [index, entry] of differences.entries()) {\n await this.visit(entry, index, differences);\n }\n }\n\n /**\n * Calls the appropriate method on the visitor based on the schema difference type.\n */\n private async visit(difference: AnySchemaDifference, index: number, array: AnySchemaDifference[]) {\n switch (difference.schemaType) {\n case SchemaOtherTypes.Schema:\n return this._visitor.visitSchemaDifference(difference, index, array);\n case SchemaOtherTypes.SchemaReference:\n return this._visitor.visitSchemaReferenceDifference(difference, index, array);\n case SchemaItemType.Constant:\n return this._visitor.visitConstantDifference(difference, index, array);\n case SchemaItemType.CustomAttributeClass:\n return this._visitor.visitCustomAttributeClassDifference(difference, index, array);\n case SchemaOtherTypes.CustomAttributeInstance:\n return this._visitor.visitCustomAttributeInstanceDifference(difference, index, array);\n case SchemaItemType.EntityClass:\n return this._visitor.visitEntityClassDifference(difference, index, array);\n case SchemaOtherTypes.EntityClassMixin:\n return this._visitor.visitEntityClassMixinDifference(difference, index, array);\n case SchemaItemType.Enumeration:\n return this._visitor.visitEnumerationDifference(difference, index, array);\n case SchemaOtherTypes.Enumerator:\n return this._visitor.visitEnumeratorDifference(difference, index, array);\n case SchemaItemType.Format:\n return this._visitor.visitFormatDifference(difference, index, array);\n case SchemaOtherTypes.FormatUnit:\n return this._visitor.visitFormatUnitDifference(difference, index, array);\n case SchemaOtherTypes.FormatUnitLabel:\n return this._visitor.visitFormatUnitLabelDifference(difference, index, array);\n case SchemaItemType.InvertedUnit:\n return this._visitor.visitInvertedUnitDifference(difference, index, array);\n case SchemaItemType.KindOfQuantity:\n return this._visitor.visitKindOfQuantityDifference(difference, index, array);\n case SchemaOtherTypes.KindOfQuantityPresentationFormat:\n return this._visitor.visitKindOfQuantityPresentationFormatDifference(difference, index, array);\n case SchemaItemType.Mixin:\n return this._visitor.visitMixinDifference(difference, index, array);\n case SchemaItemType.Phenomenon:\n return this._visitor.visitPhenomenonDifference(difference, index, array);\n case SchemaOtherTypes.Property:\n return this._visitor.visitPropertyDifference(difference, index, array);\n case SchemaItemType.PropertyCategory:\n return this._visitor.visitPropertyCategoryDifference(difference, index, array);\n case SchemaItemType.RelationshipClass:\n return this._visitor.visitRelationshipClassDifference(difference, index, array);\n case SchemaOtherTypes.RelationshipConstraint:\n return this._visitor.visitRelationshipConstraintDifference(difference, index, array);\n case SchemaOtherTypes.RelationshipConstraintClass:\n return this._visitor.visitRelationshipConstraintClassDifference(difference, index, array);\n case SchemaItemType.StructClass:\n return this._visitor.visitStructClassDifference(difference, index, array);\n case SchemaItemType.Unit:\n return this._visitor.visitUnitDifference(difference, index, array);\n case SchemaItemType.UnitSystem:\n return this._visitor.visitUnitSystemDifference(difference, index, array);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaDifferenceVisitor.js","sourceRoot":"","sources":["../../../src/Differencing/SchemaDifferenceVisitor.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 Differencing\r\n */\r\n\r\nimport { SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { type AnySchemaDifference, SchemaOtherTypes } from \"./SchemaDifference\";\r\n\r\n/**\r\n * Defines the interface for a visitor that can be used to traverse schema differences.\r\n * It dynamically creates a method for each schema difference type.\r\n * @internal\r\n */\r\nexport type SchemaDifferenceVisitor = {\r\n [Difference in AnySchemaDifference as `visit${Difference[\"schemaType\"]}Difference`]: (entry: Difference, index: number, array: AnySchemaDifference[]) => Promise<void>;\r\n};\r\n\r\n/**\r\n * Implementation of a walker that traverses schema differences and calls the appropriate\r\n * method on the visitor.\r\n * @internal\r\n */\r\nexport class SchemaDifferenceWalker {\r\n\r\n private readonly _visitor: SchemaDifferenceVisitor;\r\n\r\n /** Initializes a new instance of SchemaDifferenceWalker class. */\r\n constructor(visitor: SchemaDifferenceVisitor) {\r\n this._visitor = visitor;\r\n }\r\n\r\n /**\r\n * Traverses the schema differences and calls the appropriate method on the visitor.\r\n * @param differences The differences to traverse.\r\n */\r\n public async traverse(differences: Array<AnySchemaDifference>): Promise<void> {\r\n for (const [index, entry] of differences.entries()) {\r\n await this.visit(entry, index, differences);\r\n }\r\n }\r\n\r\n /**\r\n * Calls the appropriate method on the visitor based on the schema difference type.\r\n */\r\n private async visit(difference: AnySchemaDifference, index: number, array: AnySchemaDifference[]) {\r\n switch (difference.schemaType) {\r\n case SchemaOtherTypes.Schema:\r\n return this._visitor.visitSchemaDifference(difference, index, array);\r\n case SchemaOtherTypes.SchemaReference:\r\n return this._visitor.visitSchemaReferenceDifference(difference, index, array);\r\n case SchemaItemType.Constant:\r\n return this._visitor.visitConstantDifference(difference, index, array);\r\n case SchemaItemType.CustomAttributeClass:\r\n return this._visitor.visitCustomAttributeClassDifference(difference, index, array);\r\n case SchemaOtherTypes.CustomAttributeInstance:\r\n return this._visitor.visitCustomAttributeInstanceDifference(difference, index, array);\r\n case SchemaItemType.EntityClass:\r\n return this._visitor.visitEntityClassDifference(difference, index, array);\r\n case SchemaOtherTypes.EntityClassMixin:\r\n return this._visitor.visitEntityClassMixinDifference(difference, index, array);\r\n case SchemaItemType.Enumeration:\r\n return this._visitor.visitEnumerationDifference(difference, index, array);\r\n case SchemaOtherTypes.Enumerator:\r\n return this._visitor.visitEnumeratorDifference(difference, index, array);\r\n case SchemaItemType.Format:\r\n return this._visitor.visitFormatDifference(difference, index, array);\r\n case SchemaOtherTypes.FormatUnit:\r\n return this._visitor.visitFormatUnitDifference(difference, index, array);\r\n case SchemaOtherTypes.FormatUnitLabel:\r\n return this._visitor.visitFormatUnitLabelDifference(difference, index, array);\r\n case SchemaItemType.InvertedUnit:\r\n return this._visitor.visitInvertedUnitDifference(difference, index, array);\r\n case SchemaItemType.KindOfQuantity:\r\n return this._visitor.visitKindOfQuantityDifference(difference, index, array);\r\n case SchemaOtherTypes.KindOfQuantityPresentationFormat:\r\n return this._visitor.visitKindOfQuantityPresentationFormatDifference(difference, index, array);\r\n case SchemaItemType.Mixin:\r\n return this._visitor.visitMixinDifference(difference, index, array);\r\n case SchemaItemType.Phenomenon:\r\n return this._visitor.visitPhenomenonDifference(difference, index, array);\r\n case SchemaOtherTypes.Property:\r\n return this._visitor.visitPropertyDifference(difference, index, array);\r\n case SchemaItemType.PropertyCategory:\r\n return this._visitor.visitPropertyCategoryDifference(difference, index, array);\r\n case SchemaItemType.RelationshipClass:\r\n return this._visitor.visitRelationshipClassDifference(difference, index, array);\r\n case SchemaOtherTypes.RelationshipConstraint:\r\n return this._visitor.visitRelationshipConstraintDifference(difference, index, array);\r\n case SchemaOtherTypes.RelationshipConstraintClass:\r\n return this._visitor.visitRelationshipConstraintClassDifference(difference, index, array);\r\n case SchemaItemType.StructClass:\r\n return this._visitor.visitStructClassDifference(difference, index, array);\r\n case SchemaItemType.Unit:\r\n return this._visitor.visitUnitDifference(difference, index, array);\r\n case SchemaItemType.UnitSystem:\r\n return this._visitor.visitUnitSystemDifference(difference, index, array);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Differencing/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Differencing\n */\n\nimport { SchemaItemType } from \"@itwin/ecschema-metadata\";\nimport {\n type AnyClassItemDifference,\n type AnySchemaDifference,\n type AnySchemaItemDifference,\n type ClassPropertyDifference,\n type ConstantDifference,\n type CustomAttributeClassDifference,\n type CustomAttributeDifference,\n type EntityClassDifference,\n type EntityClassMixinDifference,\n type EnumerationDifference,\n type EnumeratorDifference,\n type KindOfQuantityDifference,\n type MixinClassDifference,\n type PhenomenonDifference,\n type PropertyCategoryDifference,\n type RelationshipClassDifference,\n type RelationshipConstraintClassDifference,\n type RelationshipConstraintDifference,\n type SchemaDifference,\n SchemaOtherTypes,\n type SchemaReferenceDifference,\n type StructClassDifference,\n type UnitSystemDifference,\n} from \"./SchemaDifference\";\n\n/**\n * Indicates whether the given difference is type of ConstantDifference.\n * @alpha\n */\nexport function isConstantDifference(difference: AnySchemaDifference): difference is ConstantDifference {\n return difference.schemaType === SchemaItemType.Constant;\n}\n\n/**\n * Indicates whether the given difference is type of ClassPropertyDifference.\n * @alpha\n */\nexport function isClassPropertyDifference(difference: AnySchemaDifference): difference is ClassPropertyDifference {\n return difference.schemaType === SchemaOtherTypes.Property;\n}\n\n/**\n * Indicates whether the given difference is type of CustomAttributeClassDifference.\n * @alpha\n */\nexport function isCustomAttributeClassDifference(difference: AnySchemaDifference): difference is CustomAttributeClassDifference {\n return difference.schemaType === SchemaItemType.CustomAttributeClass;\n}\n\n/**\n * Indicates whether the given difference is type of CustomAttributeDifference.\n * @alpha\n */\nexport function isCustomAttributeDifference(difference: AnySchemaDifference): difference is CustomAttributeDifference {\n return difference.schemaType === SchemaOtherTypes.CustomAttributeInstance;\n}\n\n/**\n * Indicates whether the given difference is type of EntityClassDifference.\n * @alpha\n */\nexport function isEntityClassDifference(difference: AnySchemaDifference): difference is EntityClassDifference {\n return difference.schemaType === SchemaItemType.EntityClass;\n}\n\n/**\n * Indicates whether the given difference is type of EntityClassMixinDifference.\n * @alpha\n */\nexport function isEntityClassMixinDifference(difference: AnySchemaDifference): difference is EntityClassMixinDifference {\n return difference.schemaType === SchemaOtherTypes.EntityClassMixin;\n}\n\n/**\n * Indicates whether the given difference is type of EnumerationDifference.\n * @alpha\n */\nexport function isEnumerationDifference(difference: AnySchemaDifference): difference is EnumerationDifference {\n return difference.schemaType === SchemaItemType.Enumeration;\n}\n\n/**\n * Indicates whether the given difference is type of EnumeratorDifference.\n * @alpha\n */\nexport function isEnumeratorDifference(difference: AnySchemaDifference): difference is EnumeratorDifference {\n return difference.schemaType === SchemaOtherTypes.Enumerator;\n}\n\n/**\n * Indicates whether the given difference is type of KindOfQuantityDifference.\n * @alpha\n */\nexport function isKindOfQuantityDifference(difference: AnySchemaDifference): difference is KindOfQuantityDifference {\n return difference.schemaType === SchemaItemType.KindOfQuantity;\n}\n\n/**\n * Indicates whether the given difference is type of MixinClassDifference.\n * @alpha\n */\nexport function isMixinClassDifference(difference: AnySchemaDifference): difference is MixinClassDifference {\n return difference.schemaType === SchemaItemType.Mixin;\n}\n\n/**\n * Indicates whether the given difference is type of PhenomenonDifference.\n * @alpha\n */\nexport function isPhenomenonDifference(difference: AnySchemaDifference): difference is PhenomenonDifference {\n return difference.schemaType === SchemaItemType.Phenomenon;\n}\n\n/**\n * Indicates whether the given difference is type of PropertyCategoryDifference.\n * @alpha\n */\nexport function isPropertyCategoryDifference(difference: AnySchemaDifference): difference is PropertyCategoryDifference {\n return difference.schemaType === SchemaItemType.PropertyCategory;\n}\n\n/**\n * Indicates whether the given difference is type of SchemaDifference.\n * @alpha\n */\nexport function isSchemaDifference(difference: AnySchemaDifference): difference is SchemaDifference {\n return difference.schemaType === SchemaOtherTypes.Schema;\n}\n\n/**\n * Indicates whether the given difference is type of SchemaReferenceDifference.\n * @alpha\n */\nexport function isSchemaReferenceDifference(difference: AnySchemaDifference): difference is SchemaReferenceDifference {\n return difference.schemaType === SchemaOtherTypes.SchemaReference;\n}\n\n/**\n * Indicates whether the given difference is type of CustomAttributeDifference.\n * @alpha\n */\nexport function isStructClassDifference(difference: AnySchemaDifference): difference is StructClassDifference {\n return difference.schemaType === SchemaItemType.StructClass;\n}\n\n/**\n * Indicates whether the given difference is type of UnitSystemDifference.\n * @alpha\n */\nexport function isUnitSystemDifference(difference: AnySchemaDifference): difference is UnitSystemDifference {\n return difference.schemaType === SchemaItemType.UnitSystem;\n}\n\n/**\n * Indicates whether the given difference is type of RelationshipClassDifference.\n * @alpha\n */\nexport function isRelationshipClassDifference(difference: AnySchemaDifference): difference is RelationshipClassDifference {\n return difference.schemaType === SchemaItemType.RelationshipClass;\n}\n\n/**\n * Indicates whether the given difference is type of RelationshipConstraintDifference.\n * @alpha\n */\nexport function isRelationshipConstraintDifference(difference: AnySchemaDifference): difference is RelationshipConstraintDifference {\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraint;\n}\n\n/**\n * Indicates whether the given difference is type of RelationshipConstraintClassDifference.\n * @alpha\n */\nexport function isRelationshipConstraintClassDifference(difference: AnySchemaDifference): difference is RelationshipConstraintClassDifference {\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraintClass;\n}\n\n/**\n * Indicates whether the given difference is type of AnySchemaItemDifference.\n * @alpha\n */\nexport function isSchemaItemDifference(difference: AnySchemaDifference): difference is AnySchemaItemDifference {\n return difference.schemaType in SchemaItemType;\n}\n\n/**\n * Indicates whether the given difference is type of ClassItemDifference.\n * @alpha\n */\nexport function isClassDifference(difference: AnySchemaDifference): difference is AnyClassItemDifference {\n return isStructClassDifference(difference)\n || isCustomAttributeClassDifference(difference)\n || isEntityClassDifference(difference)\n || isMixinClassDifference(difference)\n || isRelationshipClassDifference(difference);\n}\n"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/Differencing/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\n/** @packageDocumentation\r\n * @module Differencing\r\n */\r\n\r\nimport { SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport {\r\n type AnyClassItemDifference,\r\n type AnySchemaDifference,\r\n type AnySchemaItemDifference,\r\n type ClassPropertyDifference,\r\n type ConstantDifference,\r\n type CustomAttributeClassDifference,\r\n type CustomAttributeDifference,\r\n type EntityClassDifference,\r\n type EntityClassMixinDifference,\r\n type EnumerationDifference,\r\n type EnumeratorDifference,\r\n type KindOfQuantityDifference,\r\n type MixinClassDifference,\r\n type PhenomenonDifference,\r\n type PropertyCategoryDifference,\r\n type RelationshipClassDifference,\r\n type RelationshipConstraintClassDifference,\r\n type RelationshipConstraintDifference,\r\n type SchemaDifference,\r\n SchemaOtherTypes,\r\n type SchemaReferenceDifference,\r\n type StructClassDifference,\r\n type UnitSystemDifference,\r\n} from \"./SchemaDifference\";\r\n\r\n/**\r\n * Indicates whether the given difference is type of ConstantDifference.\r\n * @alpha\r\n */\r\nexport function isConstantDifference(difference: AnySchemaDifference): difference is ConstantDifference {\r\n return difference.schemaType === SchemaItemType.Constant;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of ClassPropertyDifference.\r\n * @alpha\r\n */\r\nexport function isClassPropertyDifference(difference: AnySchemaDifference): difference is ClassPropertyDifference {\r\n return difference.schemaType === SchemaOtherTypes.Property;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of CustomAttributeClassDifference.\r\n * @alpha\r\n */\r\nexport function isCustomAttributeClassDifference(difference: AnySchemaDifference): difference is CustomAttributeClassDifference {\r\n return difference.schemaType === SchemaItemType.CustomAttributeClass;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of CustomAttributeDifference.\r\n * @alpha\r\n */\r\nexport function isCustomAttributeDifference(difference: AnySchemaDifference): difference is CustomAttributeDifference {\r\n return difference.schemaType === SchemaOtherTypes.CustomAttributeInstance;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of EntityClassDifference.\r\n * @alpha\r\n */\r\nexport function isEntityClassDifference(difference: AnySchemaDifference): difference is EntityClassDifference {\r\n return difference.schemaType === SchemaItemType.EntityClass;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of EntityClassMixinDifference.\r\n * @alpha\r\n */\r\nexport function isEntityClassMixinDifference(difference: AnySchemaDifference): difference is EntityClassMixinDifference {\r\n return difference.schemaType === SchemaOtherTypes.EntityClassMixin;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of EnumerationDifference.\r\n * @alpha\r\n */\r\nexport function isEnumerationDifference(difference: AnySchemaDifference): difference is EnumerationDifference {\r\n return difference.schemaType === SchemaItemType.Enumeration;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of EnumeratorDifference.\r\n * @alpha\r\n */\r\nexport function isEnumeratorDifference(difference: AnySchemaDifference): difference is EnumeratorDifference {\r\n return difference.schemaType === SchemaOtherTypes.Enumerator;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of KindOfQuantityDifference.\r\n * @alpha\r\n */\r\nexport function isKindOfQuantityDifference(difference: AnySchemaDifference): difference is KindOfQuantityDifference {\r\n return difference.schemaType === SchemaItemType.KindOfQuantity;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of MixinClassDifference.\r\n * @alpha\r\n */\r\nexport function isMixinClassDifference(difference: AnySchemaDifference): difference is MixinClassDifference {\r\n return difference.schemaType === SchemaItemType.Mixin;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of PhenomenonDifference.\r\n * @alpha\r\n */\r\nexport function isPhenomenonDifference(difference: AnySchemaDifference): difference is PhenomenonDifference {\r\n return difference.schemaType === SchemaItemType.Phenomenon;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of PropertyCategoryDifference.\r\n * @alpha\r\n */\r\nexport function isPropertyCategoryDifference(difference: AnySchemaDifference): difference is PropertyCategoryDifference {\r\n return difference.schemaType === SchemaItemType.PropertyCategory;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of SchemaDifference.\r\n * @alpha\r\n */\r\nexport function isSchemaDifference(difference: AnySchemaDifference): difference is SchemaDifference {\r\n return difference.schemaType === SchemaOtherTypes.Schema;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of SchemaReferenceDifference.\r\n * @alpha\r\n */\r\nexport function isSchemaReferenceDifference(difference: AnySchemaDifference): difference is SchemaReferenceDifference {\r\n return difference.schemaType === SchemaOtherTypes.SchemaReference;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of CustomAttributeDifference.\r\n * @alpha\r\n */\r\nexport function isStructClassDifference(difference: AnySchemaDifference): difference is StructClassDifference {\r\n return difference.schemaType === SchemaItemType.StructClass;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of UnitSystemDifference.\r\n * @alpha\r\n */\r\nexport function isUnitSystemDifference(difference: AnySchemaDifference): difference is UnitSystemDifference {\r\n return difference.schemaType === SchemaItemType.UnitSystem;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of RelationshipClassDifference.\r\n * @alpha\r\n */\r\nexport function isRelationshipClassDifference(difference: AnySchemaDifference): difference is RelationshipClassDifference {\r\n return difference.schemaType === SchemaItemType.RelationshipClass;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of RelationshipConstraintDifference.\r\n * @alpha\r\n */\r\nexport function isRelationshipConstraintDifference(difference: AnySchemaDifference): difference is RelationshipConstraintDifference {\r\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraint;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of RelationshipConstraintClassDifference.\r\n * @alpha\r\n */\r\nexport function isRelationshipConstraintClassDifference(difference: AnySchemaDifference): difference is RelationshipConstraintClassDifference {\r\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraintClass;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of AnySchemaItemDifference.\r\n * @alpha\r\n */\r\nexport function isSchemaItemDifference(difference: AnySchemaDifference): difference is AnySchemaItemDifference {\r\n return difference.schemaType in SchemaItemType;\r\n}\r\n\r\n/**\r\n * Indicates whether the given difference is type of ClassItemDifference.\r\n * @alpha\r\n */\r\nexport function isClassDifference(difference: AnySchemaDifference): difference is AnyClassItemDifference {\r\n return isStructClassDifference(difference)\r\n || isCustomAttributeClassDifference(difference)\r\n || isEntityClassDifference(difference)\r\n || isMixinClassDifference(difference)\r\n || isRelationshipClassDifference(difference);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/Editing/Constants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAiB,uBAAuB,EAAE,UAAU,EAAiB,cAAc,EAAa,MAAM,0BAA0B,CAAC;AAGlJ,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,WAAW;IACxC,IAAuB,aAAa;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,YAAmB,YAAiC;QAClD,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,IAAY,EAAE,UAAyB,EAAE,UAAkB,EAAE,YAAqB,EAAE,SAAkB,EAAE,WAAoB;QACpK,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAW,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAoB,CAAC;YAEnK,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;YACzE,WAAW,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAA4B,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YAEhI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAEtC,IAAI,SAAS;gBACX,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAEtC,IAAI,WAAW;gBACb,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAE1C,IAAI,YAAY;gBACd,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAE5C,OAAO,WAAW,CAAC,GAAG,CAAC;QACzB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClI,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,aAA4B;QAC7E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YACxJ,OAAO,WAAW,CAAC,GAAG,CAAC;QACzB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,yBAAyB,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACpJ,CAAC;IACH,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport { Constant, ConstantProps, DelayedPromiseWithProps, Phenomenon, SchemaItemKey, SchemaItemType, SchemaKey } from \"@itwin/ecschema-metadata\";\nimport { SchemaContextEditor } from \"./Editor\";\nimport { MutableConstant } from \"./Mutable/MutableConstant\";\nimport { ECEditingStatus, SchemaEditingError, SchemaItemId } from \"./Exception\";\nimport { SchemaItems } from \"./SchemaItems\";\n\n/**\n * @alpha\n * A class allowing you to create schema items of type Constant.\n */\nexport class Constants extends SchemaItems {\n protected override get itemTypeClass(): typeof Constant {\n return Constant;\n }\n\n public constructor(schemaEditor: SchemaContextEditor) {\n super(SchemaItemType.Constant, schemaEditor);\n }\n\n public async create(schemaKey: SchemaKey, name: string, phenomenon: SchemaItemKey, definition: string, displayLabel?: string, numerator?: number, denominator?: number): Promise<SchemaItemKey> {\n try {\n const newConstant = await this.createSchemaItem<Constant>(schemaKey, this.schemaItemType, (schema) => schema.createConstant.bind(schema), name) as MutableConstant;\n\n const newPhenomenon = (await this.getSchemaItem(phenomenon, Phenomenon));\n newConstant.setPhenomenon(new DelayedPromiseWithProps<SchemaItemKey, Phenomenon>(newPhenomenon.key, async () => newPhenomenon));\n\n newConstant.setDefinition(definition);\n\n if (numerator)\n newConstant.setNumerator(numerator);\n\n if (denominator)\n newConstant.setDenominator(denominator);\n\n if (displayLabel)\n newConstant.setDisplayLabel(displayLabel);\n\n return newConstant.key;\n } catch (e: any) {\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFailed, new SchemaItemId(this.schemaItemType, name, schemaKey), e);\n }\n }\n\n /**\n * Creates a Constant through a ConstantProps.\n * @param schemaKey a SchemaKey of the Schema that will house the new object.\n * @param relationshipProps a json object that will be used to populate the new RelationshipClass. Needs a name value passed in.\n */\n public async createFromProps(schemaKey: SchemaKey, constantProps: ConstantProps): Promise<SchemaItemKey> {\n try {\n const newConstant = await this.createSchemaItemFromProps(schemaKey, this.schemaItemType, (schema) => schema.createConstant.bind(schema), constantProps);\n return newConstant.key;\n } catch (e: any) {\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFromProps, new SchemaItemId(this.schemaItemType, constantProps.name!, schemaKey), e);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../../src/Editing/Constants.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAiB,uBAAuB,EAAE,UAAU,EAAiB,cAAc,EAAa,MAAM,0BAA0B,CAAC;AAGlJ,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,WAAW;IACxC,IAAuB,aAAa;QAClC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,YAAmB,YAAiC;QAClD,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,IAAY,EAAE,UAAyB,EAAE,UAAkB,EAAE,YAAqB,EAAE,SAAkB,EAAE,WAAoB;QACpK,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAW,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAoB,CAAC;YAEnK,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;YACzE,WAAW,CAAC,aAAa,CAAC,IAAI,uBAAuB,CAA4B,aAAa,CAAC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YAEhI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAEtC,IAAI,SAAS;gBACX,WAAW,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YAEtC,IAAI,WAAW;gBACb,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAE1C,IAAI,YAAY;gBACd,WAAW,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAE5C,OAAO,WAAW,CAAC,GAAG,CAAC;QACzB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClI,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,aAA4B;QAC7E,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YACxJ,OAAO,WAAW,CAAC,GAAG,CAAC;QACzB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,yBAAyB,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,IAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACpJ,CAAC;IACH,CAAC;CACF","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 Editing\r\n */\r\n\r\nimport { Constant, ConstantProps, DelayedPromiseWithProps, Phenomenon, SchemaItemKey, SchemaItemType, SchemaKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor } from \"./Editor\";\r\nimport { MutableConstant } from \"./Mutable/MutableConstant\";\r\nimport { ECEditingStatus, SchemaEditingError, SchemaItemId } from \"./Exception\";\r\nimport { SchemaItems } from \"./SchemaItems\";\r\n\r\n/**\r\n * @alpha\r\n * A class allowing you to create schema items of type Constant.\r\n */\r\nexport class Constants extends SchemaItems {\r\n protected override get itemTypeClass(): typeof Constant {\r\n return Constant;\r\n }\r\n\r\n public constructor(schemaEditor: SchemaContextEditor) {\r\n super(SchemaItemType.Constant, schemaEditor);\r\n }\r\n\r\n public async create(schemaKey: SchemaKey, name: string, phenomenon: SchemaItemKey, definition: string, displayLabel?: string, numerator?: number, denominator?: number): Promise<SchemaItemKey> {\r\n try {\r\n const newConstant = await this.createSchemaItem<Constant>(schemaKey, this.schemaItemType, (schema) => schema.createConstant.bind(schema), name) as MutableConstant;\r\n\r\n const newPhenomenon = (await this.getSchemaItem(phenomenon, Phenomenon));\r\n newConstant.setPhenomenon(new DelayedPromiseWithProps<SchemaItemKey, Phenomenon>(newPhenomenon.key, async () => newPhenomenon));\r\n\r\n newConstant.setDefinition(definition);\r\n\r\n if (numerator)\r\n newConstant.setNumerator(numerator);\r\n\r\n if (denominator)\r\n newConstant.setDenominator(denominator);\r\n\r\n if (displayLabel)\r\n newConstant.setDisplayLabel(displayLabel);\r\n\r\n return newConstant.key;\r\n } catch (e: any) {\r\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFailed, new SchemaItemId(this.schemaItemType, name, schemaKey), e);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a Constant through a ConstantProps.\r\n * @param schemaKey a SchemaKey of the Schema that will house the new object.\r\n * @param relationshipProps a json object that will be used to populate the new RelationshipClass. Needs a name value passed in.\r\n */\r\n public async createFromProps(schemaKey: SchemaKey, constantProps: ConstantProps): Promise<SchemaItemKey> {\r\n try {\r\n const newConstant = await this.createSchemaItemFromProps(schemaKey, this.schemaItemType, (schema) => schema.createConstant.bind(schema), constantProps);\r\n return newConstant.key;\r\n } catch (e: any) {\r\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFromProps, new SchemaItemId(this.schemaItemType, constantProps.name!, schemaKey), e);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomAttributes.js","sourceRoot":"","sources":["../../../src/Editing/CustomAttributes.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EACL,oBAAoB,EAEL,cAAc,GAC9B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YAAmB,YAAiC;QAClD,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,IAAuB,aAAa;QAClC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,IAAY,EAAE,SAAuC,EAAE,YAAqB,EAAE,YAA4B;QAClJ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAuB,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,CAAmB,CAAC;YAEhM,IAAI,YAAY;gBACd,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEzC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,OAAkC;QACnF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3J,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,yBAAyB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACzI,CAAC;IACH,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Editing\n */\n\nimport {\n CustomAttributeClass,\n CustomAttributeClassProps, CustomAttributeContainerType,\n SchemaItemKey, SchemaItemType, SchemaKey,\n} from \"@itwin/ecschema-metadata\";\nimport { SchemaContextEditor } from \"./Editor\";\nimport { ECClasses } from \"./ECClasses\";\nimport { MutableCAClass } from \"./Mutable/MutableCAClass\";\nimport { ClassId, ECEditingStatus, SchemaEditingError } from \"./Exception\";\n\n/**\n * @alpha\n * A class extending ECClasses allowing you to create schema items of type CustomAttributeClass.\n */\nexport class CustomAttributes extends ECClasses {\n public constructor(schemaEditor: SchemaContextEditor) {\n super(SchemaItemType.CustomAttributeClass, schemaEditor);\n }\n\n protected override get itemTypeClass(): typeof CustomAttributeClass {\n return CustomAttributeClass;\n }\n\n public async create(schemaKey: SchemaKey, name: string, appliesTo: CustomAttributeContainerType, displayLabel?: string, baseClassKey?: SchemaItemKey): Promise<SchemaItemKey> {\n try {\n const newClass = await this.createClass<CustomAttributeClass>(schemaKey, this.schemaItemType, (schema) => schema.createCustomAttributeClass.bind(schema), name, baseClassKey) as MutableCAClass;\n\n if (displayLabel)\n newClass.setDisplayLabel(displayLabel);\n\n newClass.setAppliesTo(appliesTo);\n return newClass.key;\n } catch (e: any) {\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFailed, new ClassId(this.schemaItemType, name, schemaKey), e);\n }\n }\n\n /**\n * Creates a CustomAttributeClass through a CustomAttributeClassProps.\n * @param schemaKey a SchemaKey of the Schema that will house the new object.\n * @param caProps a json object that will be used to populate the new CustomAttributeClass. Needs a name value passed in.\n */\n public async createFromProps(schemaKey: SchemaKey, caProps: CustomAttributeClassProps): Promise<SchemaItemKey> {\n try {\n const newClass = await this.createSchemaItemFromProps(schemaKey, this.schemaItemType, (schema) => schema.createCustomAttributeClass.bind(schema), caProps);\n return newClass.key;\n } catch (e: any) {\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFromProps, new ClassId(this.schemaItemType, caProps.name!, schemaKey), e);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"CustomAttributes.js","sourceRoot":"","sources":["../../../src/Editing/CustomAttributes.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EACL,oBAAoB,EAEL,cAAc,GAC9B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE3E;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,SAAS;IAC7C,YAAmB,YAAiC;QAClD,KAAK,CAAC,cAAc,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAC3D,CAAC;IAED,IAAuB,aAAa;QAClC,OAAO,oBAAoB,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,IAAY,EAAE,SAAuC,EAAE,YAAqB,EAAE,YAA4B;QAClJ,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAuB,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,YAAY,CAAmB,CAAC;YAEhM,IAAI,YAAY;gBACd,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YAEzC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACjC,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,sBAAsB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7H,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,OAAkC;QACnF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,0BAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;YAC3J,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,yBAAyB,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAK,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACzI,CAAC;IACH,CAAC;CACF","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 Editing\r\n */\r\n\r\nimport {\r\n CustomAttributeClass,\r\n CustomAttributeClassProps, CustomAttributeContainerType,\r\n SchemaItemKey, SchemaItemType, SchemaKey,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor } from \"./Editor\";\r\nimport { ECClasses } from \"./ECClasses\";\r\nimport { MutableCAClass } from \"./Mutable/MutableCAClass\";\r\nimport { ClassId, ECEditingStatus, SchemaEditingError } from \"./Exception\";\r\n\r\n/**\r\n * @alpha\r\n * A class extending ECClasses allowing you to create schema items of type CustomAttributeClass.\r\n */\r\nexport class CustomAttributes extends ECClasses {\r\n public constructor(schemaEditor: SchemaContextEditor) {\r\n super(SchemaItemType.CustomAttributeClass, schemaEditor);\r\n }\r\n\r\n protected override get itemTypeClass(): typeof CustomAttributeClass {\r\n return CustomAttributeClass;\r\n }\r\n\r\n public async create(schemaKey: SchemaKey, name: string, appliesTo: CustomAttributeContainerType, displayLabel?: string, baseClassKey?: SchemaItemKey): Promise<SchemaItemKey> {\r\n try {\r\n const newClass = await this.createClass<CustomAttributeClass>(schemaKey, this.schemaItemType, (schema) => schema.createCustomAttributeClass.bind(schema), name, baseClassKey) as MutableCAClass;\r\n\r\n if (displayLabel)\r\n newClass.setDisplayLabel(displayLabel);\r\n\r\n newClass.setAppliesTo(appliesTo);\r\n return newClass.key;\r\n } catch (e: any) {\r\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFailed, new ClassId(this.schemaItemType, name, schemaKey), e);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a CustomAttributeClass through a CustomAttributeClassProps.\r\n * @param schemaKey a SchemaKey of the Schema that will house the new object.\r\n * @param caProps a json object that will be used to populate the new CustomAttributeClass. Needs a name value passed in.\r\n */\r\n public async createFromProps(schemaKey: SchemaKey, caProps: CustomAttributeClassProps): Promise<SchemaItemKey> {\r\n try {\r\n const newClass = await this.createSchemaItemFromProps(schemaKey, this.schemaItemType, (schema) => schema.createCustomAttributeClass.bind(schema), caProps);\r\n return newClass.key;\r\n } catch (e: any) {\r\n throw new SchemaEditingError(ECEditingStatus.CreateSchemaItemFromProps, new ClassId(this.schemaItemType, caProps.name!, schemaKey), e);\r\n }\r\n }\r\n}\r\n"]}