@itwin/ecschema-editing 4.6.0-dev.19 → 4.6.0-dev.22

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.
@@ -203,7 +203,7 @@ export interface SchemaReferenceDifference {
203
203
  export type AnySchemaItemDifference = ClassItemDifference | ConstantDifference | EnumerationDifference | EntityClassMixinDifference | FormatDifference | KindOfQuantityDifference | InvertedUnitDifference | PhenomenonDifference | PropertyCategoryDifference | UnitDifference | UnitSystemDifference;
204
204
  /**
205
205
  * Union for supported class Schema Items.
206
- * @internal
206
+ * @alpha
207
207
  */
208
208
  export type ClassItemDifference = EntityClassDifference | MixinClassDifference | StructClassDifference | CustomAttributeClassDifference | RelationshipClassDifference;
209
209
  /**
@@ -1 +1 @@
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 { SchemaChanges } from \"../Validation/SchemaChanges\";\r\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\r\nimport { SchemaDifferenceConflict } from \"./SchemaConflicts\";\r\nimport { SchemaDiagnosticVisitor } from \"./SchemaDiagnosticVisitor\";\r\nimport {\r\n AnyEnumerator, AnyPropertyProps, ConstantProps, CustomAttribute,\r\n CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps,\r\n MixinProps, PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, RelationshipConstraintProps,\r\n type Schema, SchemaItemFormatProps, SchemaItemProps, SchemaItemType, SchemaItemUnitProps, SchemaReferenceProps, StructClassProps, UnitSystemProps,\r\n} from \"@itwin/ecschema-metadata\";\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}\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 * @alpha\r\n */\r\nexport namespace SchemaDifference {\r\n /**\r\n * Creates a [[SchemaDifference]] 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 [[SchemaDifference]] object.\r\n * @alpha\r\n */\r\n export async function fromSchemas(targetSchema: Schema, sourceSchema: Schema): Promise<SchemaDifferences> {\r\n const changesList: SchemaChanges[] = [];\r\n const schemaComparer = new SchemaComparer({ report: changesList.push.bind(changesList) });\r\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\r\n\r\n return fromSchemaChanges(targetSchema, changesList[0]);\r\n }\r\n\r\n /**\r\n * Creates a [[SchemaDifference]] for a given [[SchemaChanges]] report.\r\n * @param targetSchema\r\n * @param schemaChanges A changes report of two schemas.\r\n * @returns An [[SchemaDifference]] object.\r\n * @internal\r\n */\r\n export async function fromSchemaChanges(targetSchema: Schema, schemaChanges: SchemaChanges): Promise<SchemaDifferences> {\r\n const visitor = new SchemaDiagnosticVisitor();\r\n for (const diagnostic of schemaChanges.allDiagnostics) {\r\n visitor.visit(diagnostic);\r\n }\r\n\r\n const changes: AnySchemaDifference[] = [\r\n ...visitor.schemaChanges,\r\n ...visitor.schemaItemChanges,\r\n ...visitor.schemaItemPathChanges,\r\n ...visitor.customAttributeChanges,\r\n ];\r\n\r\n return {\r\n sourceSchemaName: schemaChanges.schema.schemaKey.toString(),\r\n targetSchemaName: targetSchema.schemaKey.toString(),\r\n conflicts: visitor.conflicts.length > 0 ? visitor.conflicts : undefined,\r\n changes,\r\n };\r\n }\r\n\r\n /**\r\n * Indicates whether the given difference is type of ConstantDifference.\r\n * @alpha\r\n */\r\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export function isRelationshipConstraintClassDifference(difference: AnySchemaDifference): difference is RelationshipConstraintClassDifference {\r\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraintClass;\r\n }\r\n}\r\n\r\n/**\r\n * Definition of the differences between two Schemas.\r\n * @alpha\r\n */\r\nexport interface SchemaDifferences {\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 changes: AnySchemaDifference[];\r\n\r\n /** List of conflicts found while comparing the schemas. */\r\n readonly conflicts?: SchemaDifferenceConflict[];\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 CustomAttributeDifference;\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 ClassItemDifference |\r\n ConstantDifference |\r\n EnumerationDifference |\r\n EntityClassMixinDifference |\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 * @internal\r\n */\r\nexport type ClassItemDifference =\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\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"]}
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 { SchemaChanges } from \"../Validation/SchemaChanges\";\r\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\r\nimport { SchemaDifferenceConflict } from \"./SchemaConflicts\";\r\nimport { SchemaDiagnosticVisitor } from \"./SchemaDiagnosticVisitor\";\r\nimport {\r\n AnyEnumerator, AnyPropertyProps, ConstantProps, CustomAttribute,\r\n CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps,\r\n MixinProps, PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, RelationshipConstraintProps,\r\n type Schema, SchemaItemFormatProps, SchemaItemProps, SchemaItemType, SchemaItemUnitProps, SchemaReferenceProps, StructClassProps, UnitSystemProps,\r\n} from \"@itwin/ecschema-metadata\";\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}\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 * @alpha\r\n */\r\nexport namespace SchemaDifference {\r\n /**\r\n * Creates a [[SchemaDifference]] 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 [[SchemaDifference]] object.\r\n * @alpha\r\n */\r\n export async function fromSchemas(targetSchema: Schema, sourceSchema: Schema): Promise<SchemaDifferences> {\r\n const changesList: SchemaChanges[] = [];\r\n const schemaComparer = new SchemaComparer({ report: changesList.push.bind(changesList) });\r\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\r\n\r\n return fromSchemaChanges(targetSchema, changesList[0]);\r\n }\r\n\r\n /**\r\n * Creates a [[SchemaDifference]] for a given [[SchemaChanges]] report.\r\n * @param targetSchema\r\n * @param schemaChanges A changes report of two schemas.\r\n * @returns An [[SchemaDifference]] object.\r\n * @internal\r\n */\r\n export async function fromSchemaChanges(targetSchema: Schema, schemaChanges: SchemaChanges): Promise<SchemaDifferences> {\r\n const visitor = new SchemaDiagnosticVisitor();\r\n for (const diagnostic of schemaChanges.allDiagnostics) {\r\n visitor.visit(diagnostic);\r\n }\r\n\r\n const changes: AnySchemaDifference[] = [\r\n ...visitor.schemaChanges,\r\n ...visitor.schemaItemChanges,\r\n ...visitor.schemaItemPathChanges,\r\n ...visitor.customAttributeChanges,\r\n ];\r\n\r\n return {\r\n sourceSchemaName: schemaChanges.schema.schemaKey.toString(),\r\n targetSchemaName: targetSchema.schemaKey.toString(),\r\n conflicts: visitor.conflicts.length > 0 ? visitor.conflicts : undefined,\r\n changes,\r\n };\r\n }\r\n\r\n /**\r\n * Indicates whether the given difference is type of ConstantDifference.\r\n * @alpha\r\n */\r\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export 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\n export function isRelationshipConstraintClassDifference(difference: AnySchemaDifference): difference is RelationshipConstraintClassDifference {\r\n return difference.schemaType === SchemaOtherTypes.RelationshipConstraintClass;\r\n }\r\n}\r\n\r\n/**\r\n * Definition of the differences between two Schemas.\r\n * @alpha\r\n */\r\nexport interface SchemaDifferences {\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 changes: AnySchemaDifference[];\r\n\r\n /** List of conflicts found while comparing the schemas. */\r\n readonly conflicts?: SchemaDifferenceConflict[];\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 CustomAttributeDifference;\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 ClassItemDifference |\r\n ConstantDifference |\r\n EnumerationDifference |\r\n EntityClassMixinDifference |\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 ClassItemDifference =\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\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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAkB,MAAM,kCAAkC,CAAC;AACrH,OAAO,EAA8M,aAAa,EAAoD,MAAM,0BAA0B,CAAC;AAkBvT;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAMtI;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQvJ"}
1
+ {"version":3,"file":"PropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAkB,MAAM,kCAAkC,CAAC;AACrH,OAAO,EAA8M,aAAa,EAAoD,MAAM,0BAA0B,CAAC;AAgBvT;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAMtI;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQvJ"}
@@ -47,7 +47,8 @@ async function addClassProperty(context, itemKey, property) {
47
47
  if (property.customAttributes !== undefined) {
48
48
  const result = await (0, CustomAttributeMerger_1.applyCustomAttributes)(context, property.customAttributes, async (ca) => {
49
49
  try {
50
- await context.editor.entities.properties.addCustomAttribute(itemKey, property.name, ca);
50
+ const classEditor = await getClassEditor(context, itemKey);
51
+ await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);
51
52
  return {};
52
53
  }
53
54
  catch (e) {
@@ -87,7 +88,7 @@ async function modifyClassProperty(context, itemKey, propertyProps) {
87
88
  if (propertyProps.kindOfQuantity !== undefined) {
88
89
  return { errorMessage: `Changing the property '${property.fullName}' kind of quantity is not supported.` };
89
90
  }
90
- const classEditor = getClassEditor(context, ecClass);
91
+ const classEditor = await getClassEditor(context, ecClass);
91
92
  if (propertyProps.description !== undefined) {
92
93
  await classEditor.properties.setDescription(itemKey, propertyProps.name, propertyProps.description);
93
94
  }
@@ -101,7 +102,7 @@ async function modifyClassProperty(context, itemKey, propertyProps) {
101
102
  await classEditor.properties.setPriority(itemKey, propertyProps.name, propertyProps.priority);
102
103
  }
103
104
  if (property.isArray()) {
104
- await arrayProperty.merge(property, propertyProps);
105
+ await arrayProperty.merge(context, itemKey, property.name, propertyProps);
105
106
  }
106
107
  if (propertyProps.category !== undefined) {
107
108
  const categoryKey = await (0, SchemaItemMerger_1.updateSchemaItemKey)(context, propertyProps.category);
@@ -121,8 +122,11 @@ async function modifyClassProperty(context, itemKey, propertyProps) {
121
122
  }
122
123
  return {};
123
124
  }
124
- function getClassEditor(context, ecClass) {
125
- switch (ecClass.schemaItemType) {
125
+ async function getClassEditor(context, ecClass) {
126
+ const schemaItemType = ecschema_metadata_1.ECClass.isECClass(ecClass)
127
+ ? ecClass.schemaItemType
128
+ : (await context.editor.schemaContext.getSchemaItem(ecClass))?.schemaItemType;
129
+ switch (schemaItemType) {
126
130
  case ecschema_metadata_1.SchemaItemType.EntityClass:
127
131
  return context.editor.entities;
128
132
  case ecschema_metadata_1.SchemaItemType.Mixin:
@@ -141,12 +145,13 @@ const arrayProperty = {
141
145
  is(property) {
142
146
  return "minOccurs" in property && "maxOccurs" in property;
143
147
  },
144
- async merge(property, props) {
148
+ async merge(context, itemKey, propertyName, props) {
149
+ const classEditor = await getClassEditor(context, itemKey);
145
150
  if (props.minOccurs !== undefined) {
146
- property.setMinOccurs(props.minOccurs);
151
+ await classEditor.arrayProperties.setMinOccurs(itemKey, propertyName, props.minOccurs);
147
152
  }
148
153
  if (props.maxOccurs !== undefined) {
149
- property.setMaxOccurs(props.maxOccurs);
154
+ await classEditor.arrayProperties.setMaxOccurs(itemKey, propertyName, props.maxOccurs);
150
155
  }
151
156
  },
152
157
  };
@@ -161,9 +166,10 @@ const enumerationProperty = {
161
166
  return { errorMessage: `Unable to locate the enumeration class ${enumerationKey.name} in the context schema.` };
162
167
  }
163
168
  property.typeName = enumerationKey.fullName;
169
+ const classEditor = await getClassEditor(context, itemKey);
164
170
  return arrayProperty.is(property)
165
- ? context.editor.entities.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)
166
- : context.editor.entities.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);
171
+ ? classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)
172
+ : classEditor.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);
167
173
  },
168
174
  async merge(context, itemKey, property, props) {
169
175
  if ("enumeration" in props && props.enumeration !== undefined) {
@@ -211,29 +217,30 @@ const primitiveProperty = {
211
217
  if (propertyType === undefined) {
212
218
  return { errorMessage: `Invalid property type ${property.typeName} on property ${property.name}` };
213
219
  }
220
+ const classEditor = await getClassEditor(context, itemKey);
214
221
  return arrayProperty.is(property)
215
- ? context.editor.entities.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)
216
- : context.editor.entities.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);
222
+ ? classEditor.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)
223
+ : classEditor.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);
217
224
  },
218
- async merge(_context, _itemKey, property, props) {
219
- const mutable = property;
225
+ async merge(context, itemKey, property, props) {
220
226
  if (props.typeName) {
221
227
  return { errorMessage: `Changing the property '${property.fullName}' primitiveType is not supported.` };
222
228
  }
229
+ const classEditor = await getClassEditor(context, itemKey);
223
230
  if (props.extendedTypeName !== undefined) {
224
- mutable.setExtendedTypeName(props.extendedTypeName);
231
+ await classEditor.primitiveProperties.setExtendedTypeName(itemKey, property.name, props.extendedTypeName);
225
232
  }
226
233
  if (props.minLength !== undefined) {
227
- mutable.setMinLength(props.minLength);
234
+ await classEditor.primitiveProperties.setMinLength(itemKey, property.name, props.minLength);
228
235
  }
229
236
  if (props.maxLength !== undefined) {
230
- mutable.setMaxLength(props.maxLength);
237
+ await classEditor.primitiveProperties.setMaxLength(itemKey, property.name, props.maxLength);
231
238
  }
232
239
  if (props.minValue !== undefined) {
233
- mutable.setMinValue(props.minValue);
240
+ await classEditor.primitiveProperties.setMinValue(itemKey, property.name, props.minValue);
234
241
  }
235
242
  if (props.maxValue !== undefined) {
236
- mutable.setMaxValue(props.maxValue);
243
+ await classEditor.primitiveProperties.setMaxValue(itemKey, property.name, props.maxValue);
237
244
  }
238
245
  return {};
239
246
  },
@@ -249,9 +256,10 @@ const structProperty = {
249
256
  return { errorMessage: `Unable to locate the struct ${structKey.name} in the context schema.` };
250
257
  }
251
258
  property.typeName = structKey.fullName;
259
+ const classEditor = await getClassEditor(context, itemKey);
252
260
  return arrayProperty.is(property)
253
- ? context.editor.entities.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)
254
- : context.editor.entities.createStructPropertyFromProps(itemKey, property.name, structType, property);
261
+ ? classEditor.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)
262
+ : classEditor.createStructPropertyFromProps(itemKey, property.name, structType, property);
255
263
  },
256
264
  async merge(_context, _itemKey, property, props) {
257
265
  if ("structClass" in props && props.structClass !== undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport type { SchemaEditResults } from \"../ecschema-editing\";\r\nimport type { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport type { ClassItemDifference, ClassPropertyDifference, DifferenceType } from \"../Differencing/SchemaDifference\";\r\nimport { AnyProperty, AnyPropertyProps, ArrayPropertyProps, CustomAttribute, ECClass, Enumeration, EnumerationPropertyProps, NavigationPropertyProps, parsePrimitiveType, PrimitivePropertyProps, RelationshipClass, SchemaItemKey, SchemaItemType, StructClass, StructPropertyProps } from \"@itwin/ecschema-metadata\";\r\nimport { updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { MutableProperty } from \"../Editing/Mutable/MutableProperty\";\r\nimport { MutableArrayProperty } from \"../Editing/Mutable/MutableArrayProperty\";\r\nimport { MutablePrimitiveOrEnumPropertyBase } from \"../Editing/Mutable/MutablePrimitiveOrEnumProperty\";\r\nimport { applyCustomAttributes } from \"./CustomAttributeMerger\";\r\nimport { ECClasses } from \"../Editing/ECClasses\";\r\n\r\ntype PartialEditable<T> = {\r\n -readonly [P in keyof T]: T[P];\r\n};\r\n\r\ninterface PropertyMerger<T extends AnyPropertyProps> {\r\n is(property: AnyPropertyProps): property is T;\r\n add(context: SchemaMergeContext, itemKey: SchemaItemKey, props: PartialEditable<T>): Promise<SchemaEditResults>;\r\n merge(context: SchemaMergeContext, itemKey: SchemaItemKey, property: AnyProperty, props: T): Promise<SchemaEditResults>;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function mergePropertyDifference(context: SchemaMergeContext, change: ClassPropertyDifference): Promise<SchemaEditResults> {\r\n const classKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n return mergeClassProperty(context, change, classKey, {\r\n ...change.difference,\r\n name: change.path,\r\n } as AnyPropertyProps);\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function mergeClassProperties(context: SchemaMergeContext, change: ClassItemDifference, itemKey: SchemaItemKey): Promise<SchemaEditResults> {\r\n for (const property of change.difference.properties || []) {\r\n const result = await mergeClassProperty(context, change, itemKey, property);\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nasync function mergeClassProperty(context: SchemaMergeContext, change: { changeType: DifferenceType }, itemKey: SchemaItemKey, property: AnyPropertyProps) {\r\n return change.changeType === \"add\"\r\n ? addClassProperty(context, itemKey, property)\r\n : modifyClassProperty(context, itemKey, property);\r\n}\r\n\r\nasync function addClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>): Promise<SchemaEditResults> {\r\n\r\n if (property.category !== undefined) {\r\n property.category = await updateSchemaItemFullName(context, property.category);\r\n }\r\n\r\n if (property.kindOfQuantity !== undefined) {\r\n property.kindOfQuantity = await updateSchemaItemFullName(context, property.kindOfQuantity);\r\n }\r\n\r\n const createResult = await createProperty(context, itemKey, property);\r\n if (createResult.errorMessage) {\r\n return createResult;\r\n }\r\n\r\n if (property.customAttributes !== undefined) {\r\n const result = await applyCustomAttributes(context, property.customAttributes as CustomAttribute[], async (ca) => {\r\n try{\r\n await context.editor.entities.properties.addCustomAttribute(itemKey, property.name, ca);\r\n return {};\r\n } catch(e: any) {\r\n return { errorMessage: e.message };\r\n }\r\n });\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n return {};\r\n}\r\n\r\nasync function createProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>) {\r\n if (enumerationProperty.is(property)) {\r\n return enumerationProperty.add(context, itemKey, property);\r\n }\r\n if (navigationProperty.is(property)) {\r\n return navigationProperty.add(context, itemKey, property);\r\n }\r\n if (primitiveProperty.is(property)) {\r\n return primitiveProperty.add(context, itemKey, property);\r\n }\r\n if (structProperty.is(property)) {\r\n return structProperty.add(context, itemKey, property);\r\n }\r\n return {};\r\n}\r\n\r\nasync function modifyClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, propertyProps: AnyPropertyProps): Promise<SchemaEditResults> {\r\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\r\n const property = await ecClass.getProperty(propertyProps.name) as MutableProperty;\r\n if (property === undefined) {\r\n return { errorMessage: `Couldn't find property ${propertyProps.name} on class ${itemKey.name}` };\r\n }\r\n\r\n if (propertyProps.type !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' type is not supported.` };\r\n }\r\n if (propertyProps.kindOfQuantity !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' kind of quantity is not supported.` };\r\n }\r\n\r\n const classEditor = getClassEditor(context, ecClass);\r\n\r\n if (propertyProps.description !== undefined) {\r\n await classEditor.properties.setDescription(itemKey, propertyProps.name, propertyProps.description);\r\n }\r\n if (propertyProps.label !== undefined) {\r\n await classEditor.properties.setLabel(itemKey, propertyProps.name, propertyProps.label);\r\n }\r\n if (propertyProps.isReadOnly !== undefined) {\r\n await classEditor.properties.setIsReadOnly(itemKey, propertyProps.name, propertyProps.isReadOnly);\r\n }\r\n if (propertyProps.priority !== undefined) {\r\n await classEditor.properties.setPriority(itemKey, propertyProps.name, propertyProps.priority);\r\n }\r\n\r\n if (property.isArray()) {\r\n await arrayProperty.merge(property as any, propertyProps);\r\n }\r\n\r\n if (propertyProps.category !== undefined) {\r\n const categoryKey = await updateSchemaItemKey(context, propertyProps.category);\r\n await classEditor.properties.setCategory(itemKey, property.name, categoryKey);\r\n }\r\n\r\n if (property.isEnumeration()) {\r\n return enumerationProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isNavigation()) {\r\n return navigationProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isPrimitive()) {\r\n return primitiveProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isStruct()) {\r\n return structProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n\r\n return {};\r\n}\r\n\r\nfunction getClassEditor(context: SchemaMergeContext, ecClass: ECClass): ECClasses {\r\n switch(ecClass.schemaItemType) {\r\n case SchemaItemType.EntityClass:\r\n return context.editor.entities;\r\n case SchemaItemType.Mixin:\r\n return context.editor.mixins;\r\n case SchemaItemType.StructClass:\r\n return context.editor.structs;\r\n case SchemaItemType.CustomAttributeClass:\r\n return context.editor.customAttributes;\r\n case SchemaItemType.RelationshipClass:\r\n return context.editor.relationships;\r\n default:\r\n throw new Error(\"SchemaItemType not supported\");\r\n }\r\n}\r\n\r\nconst arrayProperty = {\r\n is(property: AnyPropertyProps): boolean {\r\n return \"minOccurs\" in property && \"maxOccurs\" in property;\r\n },\r\n async merge(property: MutableArrayProperty, props: ArrayPropertyProps) {\r\n if (props.minOccurs !== undefined) {\r\n property.setMinOccurs(props.minOccurs);\r\n }\r\n if (props.maxOccurs !== undefined) {\r\n property.setMaxOccurs(props.maxOccurs);\r\n }\r\n },\r\n};\r\n\r\nconst enumerationProperty: PropertyMerger<EnumerationPropertyProps> = {\r\n is(property): property is EnumerationPropertyProps {\r\n return primitiveProperty.is(property) && property.typeName.includes(\".\");\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const enumerationKey = await updateSchemaItemKey(context, property.typeName);\r\n const enumerationType = await context.editor.schemaContext.getSchemaItem<Enumeration>(enumerationKey);\r\n if (enumerationType === undefined) {\r\n return { errorMessage: `Unable to locate the enumeration class ${enumerationKey.name} in the context schema.` };\r\n }\r\n\r\n property.typeName = enumerationKey.fullName;\r\n\r\n return arrayProperty.is(property)\r\n ? context.editor.entities.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)\r\n : context.editor.entities.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);\r\n },\r\n async merge(context, itemKey, property, props) {\r\n if (\"enumeration\" in props && props.enumeration !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' enumeration is not supported.` };\r\n }\r\n return primitiveProperty.merge(context, itemKey, property, props);\r\n },\r\n};\r\n\r\nconst navigationProperty: PropertyMerger<NavigationPropertyProps> = {\r\n is(property): property is NavigationPropertyProps {\r\n return property.type === \"NavigationProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const relationshipKey = await updateSchemaItemKey(context, property.relationshipName);\r\n const relationshipType = await context.editor.schemaContext.getSchemaItem<RelationshipClass>(relationshipKey);\r\n if (relationshipType === undefined) {\r\n return { errorMessage: `Unable to locate the relationship class ${relationshipKey.name} in the context schema.` };\r\n }\r\n\r\n property.relationshipName = relationshipKey.fullName;\r\n\r\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\r\n if (ecClass.schemaItemType === SchemaItemType.EntityClass)\r\n return context.editor.entities.createNavigationPropertyFromProps(itemKey, property);\r\n if (ecClass.schemaItemType === SchemaItemType.Mixin)\r\n return context.editor.mixins.createNavigationPropertyFromProps(itemKey, property);\r\n if (ecClass.schemaItemType === SchemaItemType.RelationshipClass)\r\n return context.editor.relationships.createNavigationPropertyFromProps(itemKey, property);\r\n return { errorMessage: `Navigation property can't be added to ${ecClass.schemaItemType}.` };\r\n },\r\n async merge(_context, _itemKey, property, props) {\r\n if (props.direction !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' direction is not supported.` };\r\n }\r\n if (\"relationshipClass\" in props && props.relationshipClass !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' relationship class is not supported.` };\r\n }\r\n return {};\r\n },\r\n};\r\n\r\nconst primitiveProperty: PropertyMerger<PrimitivePropertyProps> = {\r\n is(property): property is PrimitivePropertyProps {\r\n return property.type === \"PrimitiveProperty\" || property.type === \"PrimitiveArrayProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const propertyType = parsePrimitiveType(property.typeName);\r\n if (propertyType === undefined) {\r\n return { errorMessage: `Invalid property type ${property.typeName} on property ${property.name}` };\r\n }\r\n\r\n return arrayProperty.is(property)\r\n ? context.editor.entities.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)\r\n : context.editor.entities.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);\r\n },\r\n async merge(_context, _itemKey, property, props) {\r\n const mutable = property as unknown as MutablePrimitiveOrEnumPropertyBase;\r\n if (props.typeName) {\r\n return { errorMessage: `Changing the property '${property.fullName}' primitiveType is not supported.` };\r\n }\r\n\r\n if (props.extendedTypeName !== undefined) {\r\n mutable.setExtendedTypeName(props.extendedTypeName);\r\n }\r\n if (props.minLength !== undefined) {\r\n mutable.setMinLength(props.minLength);\r\n }\r\n if (props.maxLength !== undefined) {\r\n mutable.setMaxLength(props.maxLength);\r\n }\r\n if (props.minValue !== undefined) {\r\n mutable.setMinValue(props.minValue);\r\n }\r\n if (props.maxValue !== undefined) {\r\n mutable.setMaxValue(props.maxValue);\r\n }\r\n return {};\r\n },\r\n};\r\n\r\nconst structProperty: PropertyMerger<StructPropertyProps> = {\r\n is(property): property is StructPropertyProps {\r\n return property.type === \"StructProperty\" || property.type === \"StructArrayProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const structKey = await updateSchemaItemKey(context, property.typeName);\r\n const structType = await context.editor.schemaContext.getSchemaItem<StructClass>(structKey);\r\n if (structType === undefined) {\r\n return { errorMessage: `Unable to locate the struct ${structKey.name} in the context schema.` };\r\n }\r\n\r\n property.typeName = structKey.fullName;\r\n\r\n return arrayProperty.is(property)\r\n ? context.editor.entities.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)\r\n : context.editor.entities.createStructPropertyFromProps(itemKey, property.name, structType, property);\r\n },\r\n async merge(_context, _itemKey, property, props) {\r\n if (\"structClass\" in props && props.structClass !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' structClass is not supported.` };\r\n }\r\n return {};\r\n },\r\n};\r\n"]}
1
+ {"version":3,"file":"PropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport type { SchemaEditResults } from \"../ecschema-editing\";\r\nimport type { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport type { ClassItemDifference, ClassPropertyDifference, DifferenceType } from \"../Differencing/SchemaDifference\";\r\nimport { AnyProperty, AnyPropertyProps, ArrayPropertyProps, CustomAttribute, ECClass, Enumeration, EnumerationPropertyProps, NavigationPropertyProps, parsePrimitiveType, PrimitivePropertyProps, RelationshipClass, SchemaItemKey, SchemaItemType, StructClass, StructPropertyProps } from \"@itwin/ecschema-metadata\";\r\nimport { updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { MutableProperty } from \"../Editing/Mutable/MutableProperty\";\r\nimport { applyCustomAttributes } from \"./CustomAttributeMerger\";\r\nimport { ECClasses } from \"../Editing/ECClasses\";\r\n\r\ntype PartialEditable<T> = {\r\n -readonly [P in keyof T]: T[P];\r\n};\r\n\r\ninterface PropertyMerger<T extends AnyPropertyProps> {\r\n is(property: AnyPropertyProps): property is T;\r\n add(context: SchemaMergeContext, itemKey: SchemaItemKey, props: PartialEditable<T>): Promise<SchemaEditResults>;\r\n merge(context: SchemaMergeContext, itemKey: SchemaItemKey, property: AnyProperty, props: T): Promise<SchemaEditResults>;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function mergePropertyDifference(context: SchemaMergeContext, change: ClassPropertyDifference): Promise<SchemaEditResults> {\r\n const classKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n return mergeClassProperty(context, change, classKey, {\r\n ...change.difference,\r\n name: change.path,\r\n } as AnyPropertyProps);\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function mergeClassProperties(context: SchemaMergeContext, change: ClassItemDifference, itemKey: SchemaItemKey): Promise<SchemaEditResults> {\r\n for (const property of change.difference.properties || []) {\r\n const result = await mergeClassProperty(context, change, itemKey, property);\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n return {};\r\n}\r\n\r\nasync function mergeClassProperty(context: SchemaMergeContext, change: { changeType: DifferenceType }, itemKey: SchemaItemKey, property: AnyPropertyProps) {\r\n return change.changeType === \"add\"\r\n ? addClassProperty(context, itemKey, property)\r\n : modifyClassProperty(context, itemKey, property);\r\n}\r\n\r\nasync function addClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>): Promise<SchemaEditResults> {\r\n if (property.category !== undefined) {\r\n property.category = await updateSchemaItemFullName(context, property.category);\r\n }\r\n\r\n if (property.kindOfQuantity !== undefined) {\r\n property.kindOfQuantity = await updateSchemaItemFullName(context, property.kindOfQuantity);\r\n }\r\n\r\n const createResult = await createProperty(context, itemKey, property);\r\n if (createResult.errorMessage) {\r\n return createResult;\r\n }\r\n\r\n if (property.customAttributes !== undefined) {\r\n const result = await applyCustomAttributes(context, property.customAttributes as CustomAttribute[], async (ca) => {\r\n try{\r\n const classEditor = await getClassEditor(context, itemKey);\r\n await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);\r\n return {};\r\n } catch(e: any) {\r\n return { errorMessage: e.message };\r\n }\r\n });\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n return {};\r\n}\r\n\r\nasync function createProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>) {\r\n if (enumerationProperty.is(property)) {\r\n return enumerationProperty.add(context, itemKey, property);\r\n }\r\n if (navigationProperty.is(property)) {\r\n return navigationProperty.add(context, itemKey, property);\r\n }\r\n if (primitiveProperty.is(property)) {\r\n return primitiveProperty.add(context, itemKey, property);\r\n }\r\n if (structProperty.is(property)) {\r\n return structProperty.add(context, itemKey, property);\r\n }\r\n return {};\r\n}\r\n\r\nasync function modifyClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, propertyProps: AnyPropertyProps): Promise<SchemaEditResults> {\r\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\r\n const property = await ecClass.getProperty(propertyProps.name) as MutableProperty;\r\n if (property === undefined) {\r\n return { errorMessage: `Couldn't find property ${propertyProps.name} on class ${itemKey.name}` };\r\n }\r\n\r\n if (propertyProps.type !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' type is not supported.` };\r\n }\r\n if (propertyProps.kindOfQuantity !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' kind of quantity is not supported.` };\r\n }\r\n\r\n const classEditor = await getClassEditor(context, ecClass);\r\n\r\n if (propertyProps.description !== undefined) {\r\n await classEditor.properties.setDescription(itemKey, propertyProps.name, propertyProps.description);\r\n }\r\n if (propertyProps.label !== undefined) {\r\n await classEditor.properties.setLabel(itemKey, propertyProps.name, propertyProps.label);\r\n }\r\n if (propertyProps.isReadOnly !== undefined) {\r\n await classEditor.properties.setIsReadOnly(itemKey, propertyProps.name, propertyProps.isReadOnly);\r\n }\r\n if (propertyProps.priority !== undefined) {\r\n await classEditor.properties.setPriority(itemKey, propertyProps.name, propertyProps.priority);\r\n }\r\n\r\n if (property.isArray()) {\r\n await arrayProperty.merge(context, itemKey, property.name, propertyProps);\r\n }\r\n\r\n if (propertyProps.category !== undefined) {\r\n const categoryKey = await updateSchemaItemKey(context, propertyProps.category);\r\n await classEditor.properties.setCategory(itemKey, property.name, categoryKey);\r\n }\r\n\r\n if (property.isEnumeration()) {\r\n return enumerationProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isNavigation()) {\r\n return navigationProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isPrimitive()) {\r\n return primitiveProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n if (property.isStruct()) {\r\n return structProperty.merge(context, itemKey, property, propertyProps as any);\r\n }\r\n\r\n return {};\r\n}\r\n\r\nasync function getClassEditor(context: SchemaMergeContext, ecClass: ECClass | SchemaItemKey): Promise<ECClasses> {\r\n const schemaItemType = ECClass.isECClass(ecClass)\r\n ? ecClass.schemaItemType\r\n : (await context.editor.schemaContext.getSchemaItem<ECClass>(ecClass))?.schemaItemType;\r\n\r\n switch(schemaItemType) {\r\n case SchemaItemType.EntityClass:\r\n return context.editor.entities;\r\n case SchemaItemType.Mixin:\r\n return context.editor.mixins;\r\n case SchemaItemType.StructClass:\r\n return context.editor.structs;\r\n case SchemaItemType.CustomAttributeClass:\r\n return context.editor.customAttributes;\r\n case SchemaItemType.RelationshipClass:\r\n return context.editor.relationships;\r\n default:\r\n throw new Error(\"SchemaItemType not supported\");\r\n }\r\n}\r\n\r\nconst arrayProperty = {\r\n is(property: AnyPropertyProps): boolean {\r\n return \"minOccurs\" in property && \"maxOccurs\" in property;\r\n },\r\n async merge(context: SchemaMergeContext, itemKey: SchemaItemKey, propertyName: string, props: ArrayPropertyProps) {\r\n const classEditor = await getClassEditor(context, itemKey);\r\n if (props.minOccurs !== undefined) {\r\n await classEditor.arrayProperties.setMinOccurs(itemKey, propertyName, props.minOccurs);\r\n }\r\n if (props.maxOccurs !== undefined) {\r\n await classEditor.arrayProperties.setMaxOccurs(itemKey, propertyName, props.maxOccurs);\r\n }\r\n },\r\n};\r\n\r\nconst enumerationProperty: PropertyMerger<EnumerationPropertyProps> = {\r\n is(property): property is EnumerationPropertyProps {\r\n return primitiveProperty.is(property) && property.typeName.includes(\".\");\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const enumerationKey = await updateSchemaItemKey(context, property.typeName);\r\n const enumerationType = await context.editor.schemaContext.getSchemaItem<Enumeration>(enumerationKey);\r\n if (enumerationType === undefined) {\r\n return { errorMessage: `Unable to locate the enumeration class ${enumerationKey.name} in the context schema.` };\r\n }\r\n\r\n property.typeName = enumerationKey.fullName;\r\n\r\n const classEditor = await getClassEditor(context, itemKey);\r\n return arrayProperty.is(property)\r\n ? classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)\r\n : classEditor.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);\r\n },\r\n async merge(context, itemKey, property, props) {\r\n if (\"enumeration\" in props && props.enumeration !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' enumeration is not supported.` };\r\n }\r\n return primitiveProperty.merge(context, itemKey, property, props);\r\n },\r\n};\r\n\r\nconst navigationProperty: PropertyMerger<NavigationPropertyProps> = {\r\n is(property): property is NavigationPropertyProps {\r\n return property.type === \"NavigationProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const relationshipKey = await updateSchemaItemKey(context, property.relationshipName);\r\n const relationshipType = await context.editor.schemaContext.getSchemaItem<RelationshipClass>(relationshipKey);\r\n if (relationshipType === undefined) {\r\n return { errorMessage: `Unable to locate the relationship class ${relationshipKey.name} in the context schema.` };\r\n }\r\n\r\n property.relationshipName = relationshipKey.fullName;\r\n\r\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\r\n if (ecClass.schemaItemType === SchemaItemType.EntityClass)\r\n return context.editor.entities.createNavigationPropertyFromProps(itemKey, property);\r\n if (ecClass.schemaItemType === SchemaItemType.Mixin)\r\n return context.editor.mixins.createNavigationPropertyFromProps(itemKey, property);\r\n if (ecClass.schemaItemType === SchemaItemType.RelationshipClass)\r\n return context.editor.relationships.createNavigationPropertyFromProps(itemKey, property);\r\n return { errorMessage: `Navigation property can't be added to ${ecClass.schemaItemType}.` };\r\n },\r\n async merge(_context, _itemKey, property, props) {\r\n if (props.direction !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' direction is not supported.` };\r\n }\r\n if (\"relationshipClass\" in props && props.relationshipClass !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' relationship class is not supported.` };\r\n }\r\n return {};\r\n },\r\n};\r\n\r\nconst primitiveProperty: PropertyMerger<PrimitivePropertyProps> = {\r\n is(property): property is PrimitivePropertyProps {\r\n return property.type === \"PrimitiveProperty\" || property.type === \"PrimitiveArrayProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const propertyType = parsePrimitiveType(property.typeName);\r\n if (propertyType === undefined) {\r\n return { errorMessage: `Invalid property type ${property.typeName} on property ${property.name}` };\r\n }\r\n\r\n const classEditor = await getClassEditor(context, itemKey);\r\n return arrayProperty.is(property)\r\n ? classEditor.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)\r\n : classEditor.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);\r\n },\r\n async merge(context, itemKey, property, props) {\r\n if (props.typeName) {\r\n return { errorMessage: `Changing the property '${property.fullName}' primitiveType is not supported.` };\r\n }\r\n\r\n const classEditor = await getClassEditor(context, itemKey);\r\n if (props.extendedTypeName !== undefined) {\r\n await classEditor.primitiveProperties.setExtendedTypeName(itemKey, property.name, props.extendedTypeName);\r\n }\r\n if (props.minLength !== undefined) {\r\n await classEditor.primitiveProperties.setMinLength(itemKey, property.name, props.minLength);\r\n }\r\n if (props.maxLength !== undefined) {\r\n await classEditor.primitiveProperties.setMaxLength(itemKey, property.name, props.maxLength);\r\n }\r\n if (props.minValue !== undefined) {\r\n await classEditor.primitiveProperties.setMinValue(itemKey, property.name, props.minValue);\r\n }\r\n if (props.maxValue !== undefined) {\r\n await classEditor.primitiveProperties.setMaxValue(itemKey, property.name, props.maxValue);\r\n }\r\n return {};\r\n },\r\n};\r\n\r\nconst structProperty: PropertyMerger<StructPropertyProps> = {\r\n is(property): property is StructPropertyProps {\r\n return property.type === \"StructProperty\" || property.type === \"StructArrayProperty\";\r\n },\r\n async add(context, itemKey, property): Promise<SchemaEditResults> {\r\n const structKey = await updateSchemaItemKey(context, property.typeName);\r\n const structType = await context.editor.schemaContext.getSchemaItem<StructClass>(structKey);\r\n if (structType === undefined) {\r\n return { errorMessage: `Unable to locate the struct ${structKey.name} in the context schema.` };\r\n }\r\n\r\n property.typeName = structKey.fullName;\r\n\r\n const classEditor = await getClassEditor(context, itemKey);\r\n return arrayProperty.is(property)\r\n ? classEditor.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)\r\n : classEditor.createStructPropertyFromProps(itemKey, property.name, structType, property);\r\n },\r\n async merge(_context, _itemKey, property, props) {\r\n if (\"structClass\" in props && props.structClass !== undefined) {\r\n return { errorMessage: `Changing the property '${property.fullName}' structClass is not supported.` };\r\n }\r\n return {};\r\n },\r\n};\r\n"]}
@@ -13,7 +13,8 @@ export * from "./Editing/Editor";
13
13
  export { ISuppressionRule, IRuleSuppressionSet, IRuleSuppressionMap } from "./Validation/RuleSuppressionSet";
14
14
  export { SchemaValidater } from "./Validation/SchemaValidater";
15
15
  export { SchemaMerger } from "./Merging/SchemaMerger";
16
- export { SchemaDifference } from "./Differencing/SchemaDifference";
16
+ export * from "./Differencing/SchemaDifference";
17
+ export * from "./Differencing/SchemaConflicts";
17
18
  /** @docs-package-description
18
19
  * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).
19
20
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ecschema-editing.d.ts","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":"AAKA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/E,cAAc,wCAAwC,CAAC;AACvD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAEnE;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
1
+ {"version":3,"file":"ecschema-editing.d.ts","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":"AAKA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/E,cAAc,wCAAwC,CAAC;AACvD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAE/C;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
18
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.SchemaDifference = exports.SchemaMerger = exports.SchemaValidater = exports.ECRuleSet = exports.Diagnostics = exports.DiagnosticCodes = void 0;
21
+ exports.SchemaMerger = exports.SchemaValidater = exports.ECRuleSet = exports.Diagnostics = exports.DiagnosticCodes = void 0;
22
22
  __exportStar(require("./Validation/Diagnostic"), exports);
23
23
  __exportStar(require("./Validation/DiagnosticReporter"), exports);
24
24
  /* eslint-disable-next-line deprecation/deprecation */
@@ -39,8 +39,8 @@ var SchemaValidater_1 = require("./Validation/SchemaValidater");
39
39
  Object.defineProperty(exports, "SchemaValidater", { enumerable: true, get: function () { return SchemaValidater_1.SchemaValidater; } });
40
40
  var SchemaMerger_1 = require("./Merging/SchemaMerger");
41
41
  Object.defineProperty(exports, "SchemaMerger", { enumerable: true, get: function () { return SchemaMerger_1.SchemaMerger; } });
42
- var SchemaDifference_1 = require("./Differencing/SchemaDifference");
43
- Object.defineProperty(exports, "SchemaDifference", { enumerable: true, get: function () { return SchemaDifference_1.SchemaDifference; } });
42
+ __exportStar(require("./Differencing/SchemaDifference"), exports);
43
+ __exportStar(require("./Differencing/SchemaConflicts"), exports);
44
44
  /** @docs-package-description
45
45
  * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).
46
46
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ecschema-editing.js","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;AAE/F,0DAAwC;AACxC,kEAAgD;AAChD,sDAAsD;AACtD,gDAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,oGAAA,SAAS,OAAA;AAChD,yEAAuD;AACvD,qDAAmC;AACnC,uEAAqD;AACrD,4DAA0C;AAC1C,wEAAsD;AACtD,6DAA2C;AAC3C,8DAA4C;AAC5C,qEAAmD;AACnD,mDAAiC;AAEjC,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,oEAAmE;AAA1D,oHAAA,gBAAgB,OAAA;AAEzB;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","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\r\nexport * from \"./Validation/Diagnostic\";\r\nexport * from \"./Validation/DiagnosticReporter\";\r\n/* eslint-disable-next-line deprecation/deprecation */\r\nexport { DiagnosticCodes, Diagnostics, ECRuleSet } from \"./Validation/ECRules\";\r\nexport * from \"./Validation/LoggingDiagnosticReporter\";\r\nexport * from \"./Validation/Rules\";\r\nexport * from \"./Validation/SchemaValidationVisitor\";\r\nexport * from \"./Validation/SchemaWalker\";\r\nexport * from \"./Validation/SchemaCompareDiagnostics\";\r\nexport * from \"./Validation/SchemaChanges\";\r\nexport * from \"./Validation/SchemaComparer\";\r\nexport * from \"./Validation/SchemaCompareReporter\";\r\nexport * from \"./Editing/Editor\";\r\nexport { ISuppressionRule, IRuleSuppressionSet, IRuleSuppressionMap } from \"./Validation/RuleSuppressionSet\";\r\nexport { SchemaValidater } from \"./Validation/SchemaValidater\";\r\nexport { SchemaMerger } from \"./Merging/SchemaMerger\";\r\nexport { SchemaDifference } from \"./Differencing/SchemaDifference\";\r\n\r\n/** @docs-package-description\r\n * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).\r\n */\r\n/**\r\n * @docs-group-description Editing\r\n * Set of classes used to perform editing of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Diagnostic\r\n * Set of classes to categorize and manage ECSchema validation results.\r\n */\r\n/**\r\n * @docs-group-description Validation\r\n * Set of classes used to perform validation on ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Comparison\r\n * Set of classes to enable comparison of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Merging\r\n * Set of classes used to merge schemas.\r\n */\r\n/**\r\n * @docs-group-description Differencing\r\n * Set of classes used to perform differences between ECSchemas.\r\n */\r\n"]}
1
+ {"version":3,"file":"ecschema-editing.js","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;AAE/F,0DAAwC;AACxC,kEAAgD;AAChD,sDAAsD;AACtD,gDAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,oGAAA,SAAS,OAAA;AAChD,yEAAuD;AACvD,qDAAmC;AACnC,uEAAqD;AACrD,4DAA0C;AAC1C,wEAAsD;AACtD,6DAA2C;AAC3C,8DAA4C;AAC5C,qEAAmD;AACnD,mDAAiC;AAEjC,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AACrB,kEAAgD;AAChD,iEAA+C;AAE/C;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","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\r\nexport * from \"./Validation/Diagnostic\";\r\nexport * from \"./Validation/DiagnosticReporter\";\r\n/* eslint-disable-next-line deprecation/deprecation */\r\nexport { DiagnosticCodes, Diagnostics, ECRuleSet } from \"./Validation/ECRules\";\r\nexport * from \"./Validation/LoggingDiagnosticReporter\";\r\nexport * from \"./Validation/Rules\";\r\nexport * from \"./Validation/SchemaValidationVisitor\";\r\nexport * from \"./Validation/SchemaWalker\";\r\nexport * from \"./Validation/SchemaCompareDiagnostics\";\r\nexport * from \"./Validation/SchemaChanges\";\r\nexport * from \"./Validation/SchemaComparer\";\r\nexport * from \"./Validation/SchemaCompareReporter\";\r\nexport * from \"./Editing/Editor\";\r\nexport { ISuppressionRule, IRuleSuppressionSet, IRuleSuppressionMap } from \"./Validation/RuleSuppressionSet\";\r\nexport { SchemaValidater } from \"./Validation/SchemaValidater\";\r\nexport { SchemaMerger } from \"./Merging/SchemaMerger\";\r\nexport * from \"./Differencing/SchemaDifference\";\r\nexport * from \"./Differencing/SchemaConflicts\";\r\n\r\n/** @docs-package-description\r\n * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).\r\n */\r\n/**\r\n * @docs-group-description Editing\r\n * Set of classes used to perform editing of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Diagnostic\r\n * Set of classes to categorize and manage ECSchema validation results.\r\n */\r\n/**\r\n * @docs-group-description Validation\r\n * Set of classes used to perform validation on ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Comparison\r\n * Set of classes to enable comparison of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Merging\r\n * Set of classes used to merge schemas.\r\n */\r\n/**\r\n * @docs-group-description Differencing\r\n * Set of classes used to perform differences between ECSchemas.\r\n */\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-editing",
3
- "version": "4.6.0-dev.19",
3
+ "version": "4.6.0-dev.22",
4
4
  "description": "ECSchema editing and validation API",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-editing.js",
@@ -42,16 +42,16 @@
42
42
  "rimraf": "^3.0.2",
43
43
  "sinon": "^17.0.1",
44
44
  "typescript": "~5.0.2",
45
- "@itwin/core-common": "4.6.0-dev.19",
46
- "@itwin/core-bentley": "4.6.0-dev.19",
47
- "@itwin/build-tools": "4.6.0-dev.19",
48
- "@itwin/core-quantity": "4.6.0-dev.19",
49
- "@itwin/ecschema-metadata": "4.6.0-dev.19"
45
+ "@itwin/core-bentley": "4.6.0-dev.22",
46
+ "@itwin/ecschema-metadata": "4.6.0-dev.22",
47
+ "@itwin/build-tools": "4.6.0-dev.22",
48
+ "@itwin/core-common": "4.6.0-dev.22",
49
+ "@itwin/core-quantity": "4.6.0-dev.22"
50
50
  },
51
51
  "peerDependencies": {
52
- "@itwin/core-bentley": "^4.6.0-dev.19",
53
- "@itwin/core-quantity": "^4.6.0-dev.19",
54
- "@itwin/ecschema-metadata": "^4.6.0-dev.19"
52
+ "@itwin/core-bentley": "^4.6.0-dev.22",
53
+ "@itwin/core-quantity": "^4.6.0-dev.22",
54
+ "@itwin/ecschema-metadata": "^4.6.0-dev.22"
55
55
  },
56
56
  "nyc": {
57
57
  "extends": "./node_modules/@itwin/build-tools/.nycrc"