@itwin/ecschema-editing 4.7.0-dev.8 → 4.7.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 (187) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/Differencing/Errors.d.ts +19 -0
  3. package/lib/cjs/Differencing/Errors.d.ts.map +1 -0
  4. package/lib/cjs/Differencing/Errors.js +24 -0
  5. package/lib/cjs/Differencing/Errors.js.map +1 -0
  6. package/lib/cjs/Differencing/SchemaConflicts.d.ts +0 -14
  7. package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -1
  8. package/lib/cjs/Differencing/SchemaConflicts.js +1 -14
  9. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
  10. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts +4 -4
  11. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
  12. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +31 -31
  13. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  14. package/lib/cjs/Differencing/SchemaDifference.d.ts +1 -1
  15. package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
  16. package/lib/cjs/Differencing/SchemaDifference.js +6 -6
  17. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  18. package/lib/cjs/Editing/Constants.d.ts +6 -6
  19. package/lib/cjs/Editing/Constants.d.ts.map +1 -1
  20. package/lib/cjs/Editing/Constants.js +26 -31
  21. package/lib/cjs/Editing/Constants.js.map +1 -1
  22. package/lib/cjs/Editing/CustomAttributes.d.ts +3 -3
  23. package/lib/cjs/Editing/CustomAttributes.d.ts.map +1 -1
  24. package/lib/cjs/Editing/CustomAttributes.js +18 -28
  25. package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
  26. package/lib/cjs/Editing/ECClasses.d.ts +24 -23
  27. package/lib/cjs/Editing/ECClasses.d.ts.map +1 -1
  28. package/lib/cjs/Editing/ECClasses.js +126 -156
  29. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  30. package/lib/cjs/Editing/Editor.d.ts +10 -31
  31. package/lib/cjs/Editing/Editor.d.ts.map +1 -1
  32. package/lib/cjs/Editing/Editor.js +59 -43
  33. package/lib/cjs/Editing/Editor.js.map +1 -1
  34. package/lib/cjs/Editing/Entities.d.ts +9 -9
  35. package/lib/cjs/Editing/Entities.d.ts.map +1 -1
  36. package/lib/cjs/Editing/Entities.js +65 -85
  37. package/lib/cjs/Editing/Entities.js.map +1 -1
  38. package/lib/cjs/Editing/Enumerations.d.ts +6 -6
  39. package/lib/cjs/Editing/Enumerations.d.ts.map +1 -1
  40. package/lib/cjs/Editing/Enumerations.js +57 -55
  41. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  42. package/lib/cjs/Editing/Exception.d.ts +257 -0
  43. package/lib/cjs/Editing/Exception.d.ts.map +1 -0
  44. package/lib/cjs/Editing/Exception.js +426 -0
  45. package/lib/cjs/Editing/Exception.js.map +1 -0
  46. package/lib/cjs/Editing/Formats.d.ts +6 -6
  47. package/lib/cjs/Editing/Formats.d.ts.map +1 -1
  48. package/lib/cjs/Editing/Formats.js +28 -33
  49. package/lib/cjs/Editing/Formats.js.map +1 -1
  50. package/lib/cjs/Editing/InvertedUnits.d.ts +6 -6
  51. package/lib/cjs/Editing/InvertedUnits.d.ts.map +1 -1
  52. package/lib/cjs/Editing/InvertedUnits.js +41 -56
  53. package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
  54. package/lib/cjs/Editing/KindOfQuantities.d.ts +6 -6
  55. package/lib/cjs/Editing/KindOfQuantities.d.ts.map +1 -1
  56. package/lib/cjs/Editing/KindOfQuantities.js +50 -57
  57. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  58. package/lib/cjs/Editing/Mixins.d.ts +5 -5
  59. package/lib/cjs/Editing/Mixins.d.ts.map +1 -1
  60. package/lib/cjs/Editing/Mixins.js +43 -58
  61. package/lib/cjs/Editing/Mixins.js.map +1 -1
  62. package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  63. package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
  64. package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
  65. package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
  66. package/lib/cjs/Editing/Mutable/MutableEntityClass.d.ts +1 -5
  67. package/lib/cjs/Editing/Mutable/MutableEntityClass.d.ts.map +1 -1
  68. package/lib/cjs/Editing/Mutable/MutableEntityClass.js +1 -45
  69. package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
  70. package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
  71. package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
  72. package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  73. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  74. package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
  75. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js.map +1 -1
  76. package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  77. package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  78. package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
  79. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  80. package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  81. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  82. package/lib/cjs/Editing/Mutable/MutableStructProperty.js.map +1 -1
  83. package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
  84. package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  85. package/lib/cjs/Editing/Phenomena.d.ts +7 -7
  86. package/lib/cjs/Editing/Phenomena.d.ts.map +1 -1
  87. package/lib/cjs/Editing/Phenomena.js +23 -23
  88. package/lib/cjs/Editing/Phenomena.js.map +1 -1
  89. package/lib/cjs/Editing/Properties.d.ts +7 -6
  90. package/lib/cjs/Editing/Properties.d.ts.map +1 -1
  91. package/lib/cjs/Editing/Properties.js +99 -46
  92. package/lib/cjs/Editing/Properties.js.map +1 -1
  93. package/lib/cjs/Editing/PropertyCategories.d.ts +6 -6
  94. package/lib/cjs/Editing/PropertyCategories.d.ts.map +1 -1
  95. package/lib/cjs/Editing/PropertyCategories.js +29 -27
  96. package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
  97. package/lib/cjs/Editing/RelationshipClasses.d.ts +15 -17
  98. package/lib/cjs/Editing/RelationshipClasses.d.ts.map +1 -1
  99. package/lib/cjs/Editing/RelationshipClasses.js +97 -101
  100. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  101. package/lib/cjs/Editing/SchemaItems.d.ts +13 -5
  102. package/lib/cjs/Editing/SchemaItems.d.ts.map +1 -1
  103. package/lib/cjs/Editing/SchemaItems.js +58 -6
  104. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  105. package/lib/cjs/Editing/Structs.d.ts +3 -3
  106. package/lib/cjs/Editing/Structs.d.ts.map +1 -1
  107. package/lib/cjs/Editing/Structs.js +17 -27
  108. package/lib/cjs/Editing/Structs.js.map +1 -1
  109. package/lib/cjs/Editing/UnitSystems.d.ts +7 -7
  110. package/lib/cjs/Editing/UnitSystems.d.ts.map +1 -1
  111. package/lib/cjs/Editing/UnitSystems.js +22 -20
  112. package/lib/cjs/Editing/UnitSystems.js.map +1 -1
  113. package/lib/cjs/Editing/Units.d.ts +6 -6
  114. package/lib/cjs/Editing/Units.d.ts.map +1 -1
  115. package/lib/cjs/Editing/Units.js +26 -35
  116. package/lib/cjs/Editing/Units.js.map +1 -1
  117. package/lib/cjs/Merging/CAClassMerger.js +2 -2
  118. package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
  119. package/lib/cjs/Merging/ClassMerger.d.ts +1 -2
  120. package/lib/cjs/Merging/ClassMerger.d.ts.map +1 -1
  121. package/lib/cjs/Merging/ClassMerger.js +15 -39
  122. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  123. package/lib/cjs/Merging/ConstantMerger.d.ts.map +1 -1
  124. package/lib/cjs/Merging/ConstantMerger.js +2 -3
  125. package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
  126. package/lib/cjs/Merging/CustomAttributeMerger.d.ts +4 -5
  127. package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
  128. package/lib/cjs/Merging/CustomAttributeMerger.js +8 -18
  129. package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
  130. package/lib/cjs/Merging/EntityClassMerger.d.ts +1 -2
  131. package/lib/cjs/Merging/EntityClassMerger.d.ts.map +1 -1
  132. package/lib/cjs/Merging/EntityClassMerger.js +3 -10
  133. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  134. package/lib/cjs/Merging/EnumerationMerger.d.ts.map +1 -1
  135. package/lib/cjs/Merging/EnumerationMerger.js +8 -10
  136. package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
  137. package/lib/cjs/Merging/KindOfQuantityMerger.d.ts.map +1 -1
  138. package/lib/cjs/Merging/KindOfQuantityMerger.js +2 -3
  139. package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
  140. package/lib/cjs/Merging/MixinMerger.js +2 -2
  141. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  142. package/lib/cjs/Merging/PhenomenonMerger.d.ts.map +1 -1
  143. package/lib/cjs/Merging/PhenomenonMerger.js +1 -2
  144. package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -1
  145. package/lib/cjs/Merging/PropertyCategoryMerger.d.ts.map +1 -1
  146. package/lib/cjs/Merging/PropertyCategoryMerger.js +1 -2
  147. package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -1
  148. package/lib/cjs/Merging/PropertyMerger.d.ts +2 -3
  149. package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -1
  150. package/lib/cjs/Merging/PropertyMerger.js +21 -42
  151. package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
  152. package/lib/cjs/Merging/RelationshipClassMerger.d.ts +5 -3
  153. package/lib/cjs/Merging/RelationshipClassMerger.d.ts.map +1 -1
  154. package/lib/cjs/Merging/RelationshipClassMerger.js +35 -33
  155. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
  156. package/lib/cjs/Merging/SchemaItemMerger.d.ts +3 -4
  157. package/lib/cjs/Merging/SchemaItemMerger.d.ts.map +1 -1
  158. package/lib/cjs/Merging/SchemaItemMerger.js +3 -2
  159. package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
  160. package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
  161. package/lib/cjs/Merging/SchemaMerger.js +8 -14
  162. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  163. package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
  164. package/lib/cjs/Merging/UnitSystemMerger.d.ts.map +1 -1
  165. package/lib/cjs/Merging/UnitSystemMerger.js +1 -2
  166. package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -1
  167. package/lib/cjs/Validation/Diagnostic.js.map +1 -1
  168. package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
  169. package/lib/cjs/Validation/ECRules.js.map +1 -1
  170. package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
  171. package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
  172. package/lib/cjs/Validation/Rules.js.map +1 -1
  173. package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
  174. package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
  175. package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
  176. package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
  177. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  178. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  179. package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
  180. package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
  181. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  182. package/lib/cjs/ecschema-editing.d.ts +1 -0
  183. package/lib/cjs/ecschema-editing.d.ts.map +1 -1
  184. package/lib/cjs/ecschema-editing.js +1 -0
  185. package/lib/cjs/ecschema-editing.js.map +1 -1
  186. package/package.json +9 -9
  187. package/public/locales/en/ECSchemaEditing.json +26 -26
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.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*--------------------------------------------------------------------------------------------*/\nimport type { SchemaEditResults } from \"../ecschema-editing\";\nimport type { SchemaMergeContext } from \"./SchemaMerger\";\nimport type { ClassItemDifference, ClassPropertyDifference, DifferenceType } from \"../Differencing/SchemaDifference\";\nimport { AnyProperty, AnyPropertyProps, ArrayPropertyProps, CustomAttribute, ECClass, Enumeration, EnumerationPropertyProps, NavigationPropertyProps, parsePrimitiveType, PrimitivePropertyProps, RelationshipClass, SchemaItemKey, SchemaItemType, StructClass, StructPropertyProps } from \"@itwin/ecschema-metadata\";\nimport { updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\nimport { MutableProperty } from \"../Editing/Mutable/MutableProperty\";\nimport { applyCustomAttributes } from \"./CustomAttributeMerger\";\nimport { ECClasses } from \"../Editing/ECClasses\";\n\ntype PartialEditable<T> = {\n -readonly [P in keyof T]: T[P];\n};\n\ninterface PropertyMerger<T extends AnyPropertyProps> {\n is(property: AnyPropertyProps): property is T;\n add(context: SchemaMergeContext, itemKey: SchemaItemKey, props: PartialEditable<T>): Promise<SchemaEditResults>;\n merge(context: SchemaMergeContext, itemKey: SchemaItemKey, property: AnyProperty, props: T): Promise<SchemaEditResults>;\n}\n\n/**\n * @internal\n */\nexport async function mergePropertyDifference(context: SchemaMergeContext, change: ClassPropertyDifference): Promise<SchemaEditResults> {\n const classKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\n return mergeClassProperty(context, change, classKey, {\n ...change.difference,\n name: change.path,\n } as AnyPropertyProps);\n}\n\n/**\n * @internal\n */\nexport async function mergeClassProperties(context: SchemaMergeContext, change: ClassItemDifference, itemKey: SchemaItemKey): Promise<SchemaEditResults> {\n for (const property of change.difference.properties || []) {\n const result = await mergeClassProperty(context, change, itemKey, property);\n if (result.errorMessage) {\n return result;\n }\n }\n return {};\n}\n\nasync function mergeClassProperty(context: SchemaMergeContext, change: { changeType: DifferenceType }, itemKey: SchemaItemKey, property: AnyPropertyProps) {\n return change.changeType === \"add\"\n ? addClassProperty(context, itemKey, property)\n : modifyClassProperty(context, itemKey, property);\n}\n\nasync function addClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>): Promise<SchemaEditResults> {\n if (property.category !== undefined) {\n property.category = await updateSchemaItemFullName(context, property.category);\n }\n\n if (property.kindOfQuantity !== undefined) {\n property.kindOfQuantity = await updateSchemaItemFullName(context, property.kindOfQuantity);\n }\n\n const createResult = await createProperty(context, itemKey, property);\n if (createResult.errorMessage) {\n return createResult;\n }\n\n if (property.customAttributes !== undefined) {\n const result = await applyCustomAttributes(context, property.customAttributes as CustomAttribute[], async (ca) => {\n try{\n const classEditor = await getClassEditor(context, itemKey);\n await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);\n return {};\n } catch(e: any) {\n return { errorMessage: e.message };\n }\n });\n if (result.errorMessage) {\n return result;\n }\n }\n\n return {};\n}\n\nasync function createProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, property: PartialEditable<AnyPropertyProps>) {\n if (enumerationProperty.is(property)) {\n return enumerationProperty.add(context, itemKey, property);\n }\n if (navigationProperty.is(property)) {\n return navigationProperty.add(context, itemKey, property);\n }\n if (primitiveProperty.is(property)) {\n return primitiveProperty.add(context, itemKey, property);\n }\n if (structProperty.is(property)) {\n return structProperty.add(context, itemKey, property);\n }\n return {};\n}\n\nasync function modifyClassProperty(context: SchemaMergeContext, itemKey: SchemaItemKey, propertyProps: AnyPropertyProps): Promise<SchemaEditResults> {\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\n const property = await ecClass.getProperty(propertyProps.name) as MutableProperty;\n if (property === undefined) {\n return { errorMessage: `Couldn't find property ${propertyProps.name} on class ${itemKey.name}` };\n }\n\n if (propertyProps.type !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' type is not supported.` };\n }\n if (propertyProps.kindOfQuantity !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' kind of quantity is not supported.` };\n }\n\n const classEditor = await getClassEditor(context, ecClass);\n\n if (propertyProps.description !== undefined) {\n await classEditor.properties.setDescription(itemKey, propertyProps.name, propertyProps.description);\n }\n if (propertyProps.label !== undefined) {\n await classEditor.properties.setLabel(itemKey, propertyProps.name, propertyProps.label);\n }\n if (propertyProps.isReadOnly !== undefined) {\n await classEditor.properties.setIsReadOnly(itemKey, propertyProps.name, propertyProps.isReadOnly);\n }\n if (propertyProps.priority !== undefined) {\n await classEditor.properties.setPriority(itemKey, propertyProps.name, propertyProps.priority);\n }\n\n if (property.isArray()) {\n await arrayProperty.merge(context, itemKey, property.name, propertyProps);\n }\n\n if (propertyProps.category !== undefined) {\n const categoryKey = await updateSchemaItemKey(context, propertyProps.category);\n await classEditor.properties.setCategory(itemKey, property.name, categoryKey);\n }\n\n if (property.isEnumeration()) {\n return enumerationProperty.merge(context, itemKey, property, propertyProps as any);\n }\n if (property.isNavigation()) {\n return navigationProperty.merge(context, itemKey, property, propertyProps as any);\n }\n if (property.isPrimitive()) {\n return primitiveProperty.merge(context, itemKey, property, propertyProps as any);\n }\n if (property.isStruct()) {\n return structProperty.merge(context, itemKey, property, propertyProps as any);\n }\n\n return {};\n}\n\nasync function getClassEditor(context: SchemaMergeContext, ecClass: ECClass | SchemaItemKey): Promise<ECClasses> {\n const schemaItemType = ECClass.isECClass(ecClass)\n ? ecClass.schemaItemType\n : (await context.editor.schemaContext.getSchemaItem<ECClass>(ecClass))?.schemaItemType;\n\n switch(schemaItemType) {\n case SchemaItemType.EntityClass:\n return context.editor.entities;\n case SchemaItemType.Mixin:\n return context.editor.mixins;\n case SchemaItemType.StructClass:\n return context.editor.structs;\n case SchemaItemType.CustomAttributeClass:\n return context.editor.customAttributes;\n case SchemaItemType.RelationshipClass:\n return context.editor.relationships;\n default:\n throw new Error(\"SchemaItemType not supported\");\n }\n}\n\nconst arrayProperty = {\n is(property: AnyPropertyProps): boolean {\n return \"minOccurs\" in property && \"maxOccurs\" in property;\n },\n async merge(context: SchemaMergeContext, itemKey: SchemaItemKey, propertyName: string, props: ArrayPropertyProps) {\n const classEditor = await getClassEditor(context, itemKey);\n if (props.minOccurs !== undefined) {\n await classEditor.arrayProperties.setMinOccurs(itemKey, propertyName, props.minOccurs);\n }\n if (props.maxOccurs !== undefined) {\n await classEditor.arrayProperties.setMaxOccurs(itemKey, propertyName, props.maxOccurs);\n }\n },\n};\n\nconst enumerationProperty: PropertyMerger<EnumerationPropertyProps> = {\n is(property): property is EnumerationPropertyProps {\n return primitiveProperty.is(property) && property.typeName.includes(\".\");\n },\n async add(context, itemKey, property): Promise<SchemaEditResults> {\n const enumerationKey = await updateSchemaItemKey(context, property.typeName);\n const enumerationType = await context.editor.schemaContext.getSchemaItem<Enumeration>(enumerationKey);\n if (enumerationType === undefined) {\n return { errorMessage: `Unable to locate the enumeration class ${enumerationKey.name} in the context schema.` };\n }\n\n property.typeName = enumerationKey.fullName;\n\n const classEditor = await getClassEditor(context, itemKey);\n return arrayProperty.is(property)\n ? classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)\n : classEditor.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);\n },\n async merge(context, itemKey, property, props) {\n if (\"enumeration\" in props && props.enumeration !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' enumeration is not supported.` };\n }\n return primitiveProperty.merge(context, itemKey, property, props);\n },\n};\n\nconst navigationProperty: PropertyMerger<NavigationPropertyProps> = {\n is(property): property is NavigationPropertyProps {\n return property.type === \"NavigationProperty\";\n },\n async add(context, itemKey, property): Promise<SchemaEditResults> {\n const relationshipKey = await updateSchemaItemKey(context, property.relationshipName);\n const relationshipType = await context.editor.schemaContext.getSchemaItem<RelationshipClass>(relationshipKey);\n if (relationshipType === undefined) {\n return { errorMessage: `Unable to locate the relationship class ${relationshipKey.name} in the context schema.` };\n }\n\n property.relationshipName = relationshipKey.fullName;\n\n const ecClass = await context.editor.schemaContext.getSchemaItem(itemKey) as ECClass;\n if (ecClass.schemaItemType === SchemaItemType.EntityClass)\n return context.editor.entities.createNavigationPropertyFromProps(itemKey, property);\n if (ecClass.schemaItemType === SchemaItemType.Mixin)\n return context.editor.mixins.createNavigationPropertyFromProps(itemKey, property);\n if (ecClass.schemaItemType === SchemaItemType.RelationshipClass)\n return context.editor.relationships.createNavigationPropertyFromProps(itemKey, property);\n return { errorMessage: `Navigation property can't be added to ${ecClass.schemaItemType}.` };\n },\n async merge(_context, _itemKey, property, props) {\n if (props.direction !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' direction is not supported.` };\n }\n if (\"relationshipClass\" in props && props.relationshipClass !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' relationship class is not supported.` };\n }\n return {};\n },\n};\n\nconst primitiveProperty: PropertyMerger<PrimitivePropertyProps> = {\n is(property): property is PrimitivePropertyProps {\n return property.type === \"PrimitiveProperty\" || property.type === \"PrimitiveArrayProperty\";\n },\n async add(context, itemKey, property): Promise<SchemaEditResults> {\n const propertyType = parsePrimitiveType(property.typeName);\n if (propertyType === undefined) {\n return { errorMessage: `Invalid property type ${property.typeName} on property ${property.name}` };\n }\n\n const classEditor = await getClassEditor(context, itemKey);\n return arrayProperty.is(property)\n ? classEditor.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)\n : classEditor.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);\n },\n async merge(context, itemKey, property, props) {\n if (props.typeName) {\n return { errorMessage: `Changing the property '${property.fullName}' primitiveType is not supported.` };\n }\n\n const classEditor = await getClassEditor(context, itemKey);\n if (props.extendedTypeName !== undefined) {\n await classEditor.primitiveProperties.setExtendedTypeName(itemKey, property.name, props.extendedTypeName);\n }\n if (props.minLength !== undefined) {\n await classEditor.primitiveProperties.setMinLength(itemKey, property.name, props.minLength);\n }\n if (props.maxLength !== undefined) {\n await classEditor.primitiveProperties.setMaxLength(itemKey, property.name, props.maxLength);\n }\n if (props.minValue !== undefined) {\n await classEditor.primitiveProperties.setMinValue(itemKey, property.name, props.minValue);\n }\n if (props.maxValue !== undefined) {\n await classEditor.primitiveProperties.setMaxValue(itemKey, property.name, props.maxValue);\n }\n return {};\n },\n};\n\nconst structProperty: PropertyMerger<StructPropertyProps> = {\n is(property): property is StructPropertyProps {\n return property.type === \"StructProperty\" || property.type === \"StructArrayProperty\";\n },\n async add(context, itemKey, property): Promise<SchemaEditResults> {\n const structKey = await updateSchemaItemKey(context, property.typeName);\n const structType = await context.editor.schemaContext.getSchemaItem<StructClass>(structKey);\n if (structType === undefined) {\n return { errorMessage: `Unable to locate the struct ${structKey.name} in the context schema.` };\n }\n\n property.typeName = structKey.fullName;\n\n const classEditor = await getClassEditor(context, itemKey);\n return arrayProperty.is(property)\n ? classEditor.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)\n : classEditor.createStructPropertyFromProps(itemKey, property.name, structType, property);\n },\n async merge(_context, _itemKey, property, props) {\n if (\"structClass\" in props && props.structClass !== undefined) {\n return { errorMessage: `Changing the property '${property.fullName}' structClass is not supported.` };\n }\n return {};\n },\n};\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 { 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<void>;\r\n merge(context: SchemaMergeContext, itemKey: SchemaItemKey, property: AnyProperty, props: T): Promise<void>;\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function mergePropertyDifference(context: SchemaMergeContext, change: ClassPropertyDifference): Promise<void> {\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<void> {\r\n for (const property of change.difference.properties || []) {\r\n await mergeClassProperty(context, change, itemKey, property);\r\n }\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<void> {\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 await createProperty(context, itemKey, property);\r\n\r\n if (property.customAttributes !== undefined) {\r\n await applyCustomAttributes(context, property.customAttributes as CustomAttribute[], async (ca) => {\r\n const classEditor = await getClassEditor(context, itemKey);\r\n await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);\r\n });\r\n }\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<void> {\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 throw new Error(`Couldn't find property ${propertyProps.name} on class ${itemKey.name}`);\r\n }\r\n\r\n if (propertyProps.type !== undefined) {\r\n throw new Error(`Changing the property '${property.fullName}' type is not supported.`);\r\n }\r\n if (propertyProps.kindOfQuantity !== undefined) {\r\n throw new Error(`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\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<void> {\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 throw new Error(`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\r\n arrayProperty.is(property)\r\n ? await classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)\r\n : await 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 throw new Error(`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<void> {\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 throw new Error(`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 throw new Error(`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 throw new Error(`Changing the property '${property.fullName}' direction is not supported.`);\r\n }\r\n if (\"relationshipClass\" in props && props.relationshipClass !== undefined) {\r\n throw new Error(`Changing the property '${property.fullName}' relationship class is not supported.`);\r\n }\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<void> {\r\n const propertyType = parsePrimitiveType(property.typeName);\r\n if (propertyType === undefined) {\r\n throw new Error(`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 throw new Error(`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 },\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<void> {\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 throw new Error(`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 throw new Error(`Changing the property '${property.fullName}' structClass is not supported.`);\r\n }\r\n },\r\n};\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import { type RelationshipClassDifference, type RelationshipConstraintClassDifference, type RelationshipConstraintDifference } from "../Differencing/SchemaDifference";
2
2
  import { type SchemaItemMergerHandler } from "./SchemaItemMerger";
3
3
  import { SchemaMergeContext } from "./SchemaMerger";
4
- import { SchemaItemEditResults } from "../Editing/Editor";
4
+ import { SchemaItemKey } from "@itwin/ecschema-metadata";
5
5
  /**
6
6
  * Defines a merge handler to merge RelationshipClass schema items.
7
7
  * @internal
@@ -12,10 +12,12 @@ export declare const relationshipClassMerger: SchemaItemMergerHandler<Relationsh
12
12
  * This only supports modify as the RelationshipConstraints are always set on the Relationship classes.
13
13
  * @internal
14
14
  */
15
- export declare function mergeRelationshipConstraint(context: SchemaMergeContext, change: RelationshipConstraintDifference): Promise<SchemaItemEditResults>;
15
+ export declare function mergeRelationshipConstraint(context: SchemaMergeContext, change: RelationshipConstraintDifference): Promise<void | {
16
+ itemKey: SchemaItemKey;
17
+ }>;
16
18
  /**
17
19
  * Merges differences of a Relationship constraint classes.
18
20
  * @internal
19
21
  */
20
- export declare function mergeRelationshipClassConstraint(context: SchemaMergeContext, change: RelationshipConstraintClassDifference): Promise<SchemaItemEditResults>;
22
+ export declare function mergeRelationshipClassConstraint(context: SchemaMergeContext, change: RelationshipConstraintClassDifference): Promise<void>;
21
23
  //# sourceMappingURL=RelationshipClassMerger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipClassMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/RelationshipClassMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,qCAAqC,EAAE,KAAK,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEvK,OAAO,EAAoB,KAAK,uBAAuB,EAAuB,MAAM,oBAAoB,CAAC;AAEzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAI1D;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,uBAAuB,CAAC,2BAA2B,CA4BxF,CAAC;AAgCF;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,gCAAgC,kCAsCtH;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,qCAAqC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAmBjK"}
1
+ {"version":3,"file":"RelationshipClassMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/RelationshipClassMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,2BAA2B,EAAE,KAAK,qCAAqC,EAAE,KAAK,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAEvK,OAAO,EAAoB,KAAK,uBAAuB,EAAiD,MAAM,oBAAoB,CAAC;AAEnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAuI,aAAa,EAAkB,MAAM,0BAA0B,CAAC;AAI9M;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,uBAAuB,CAAC,2BAA2B,CA4BxF,CAAC;AA8BF;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,gCAAgC;;GAgCtH;AAED;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,qCAAqC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhJ"}
@@ -11,16 +11,16 @@ const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
11
11
  exports.relationshipClassMerger = {
12
12
  async add(context, change) {
13
13
  if (change.difference.strength === undefined) {
14
- return { errorMessage: "RelationshipClass must define strength" };
14
+ throw new Error("RelationshipClass must define strength");
15
15
  }
16
16
  if (change.difference.strengthDirection === undefined) {
17
- return { errorMessage: "RelationshipClass must define strengthDirection" };
17
+ throw new Error("RelationshipClass must define strengthDirection");
18
18
  }
19
19
  if (change.difference.source === undefined) {
20
- return { errorMessage: "RelationshipClass must define a source constraint" };
20
+ throw new Error("RelationshipClass must define a source constraint");
21
21
  }
22
22
  if (change.difference.target === undefined) {
23
- return { errorMessage: "RelationshipClass must define a target constraint" };
23
+ throw new Error("RelationshipClass must define a target constraint");
24
24
  }
25
25
  return context.editor.relationships.createFromProps(context.targetSchemaKey, {
26
26
  ...change.difference,
@@ -28,12 +28,12 @@ exports.relationshipClassMerger = {
28
28
  schemaItemType: change.schemaType,
29
29
  strength: change.difference.strength,
30
30
  strengthDirection: change.difference.strengthDirection,
31
- source: change.difference.source,
32
- target: change.difference.target,
31
+ source: await updateRelationshipConstraintKey(context, change.difference.source),
32
+ target: await updateRelationshipConstraintKey(context, change.difference.target),
33
33
  });
34
34
  },
35
35
  async modify(context, change, itemKey, item) {
36
- return modifyRelationshipClass(context, change, itemKey, item);
36
+ await modifyRelationshipClass(context, change, itemKey, item);
37
37
  },
38
38
  };
39
39
  async function modifyRelationshipClass(context, change, itemKey, item) {
@@ -44,26 +44,24 @@ async function modifyRelationshipClass(context, change, itemKey, item) {
44
44
  if (item.strength === undefined) {
45
45
  const strength = (0, ecschema_metadata_1.parseStrength)(change.difference.strength);
46
46
  if (strength === undefined) {
47
- return { itemKey, errorMessage: `An invalid relationship class strength value '${change.difference.strength}' has been provided.` };
47
+ throw new Error(`An invalid relationship class strength value '${change.difference.strength}' has been provided.`);
48
48
  }
49
49
  item.setStrength(strength);
50
- return { itemKey };
51
50
  }
52
- return { itemKey, errorMessage: `Changing the relationship '${itemKey.name}' strength is not supported.` };
51
+ throw new Error(`Changing the relationship '${itemKey.name}' strength is not supported.`);
53
52
  }
54
53
  if (change.difference.strengthDirection !== undefined) {
55
54
  if (item.strengthDirection === undefined) {
56
55
  const strengthDirection = (0, ecschema_metadata_1.parseStrengthDirection)(change.difference.strengthDirection);
57
56
  if (strengthDirection === undefined) {
58
- return { itemKey, errorMessage: `An invalid relationship class strengthDirection value '${change.difference.strengthDirection}' has been provided.` };
57
+ throw new Error(`An invalid relationship class strengthDirection value '${change.difference.strengthDirection}' has been provided.`);
59
58
  }
60
59
  item.setStrengthDirection(strengthDirection);
61
- return { itemKey };
62
60
  }
63
- return { itemKey, errorMessage: `Changing the relationship '${itemKey.name}' strengthDirection is not supported.` };
61
+ throw new Error(`Changing the relationship '${itemKey.name}' strengthDirection is not supported.`);
64
62
  }
65
63
  }
66
- return (0, ClassMerger_1.modifyClass)(context, change, itemKey, item);
64
+ await (0, ClassMerger_1.modifyClass)(context, change, itemKey, item);
67
65
  }
68
66
  /**
69
67
  * Merges differences of a Relationship constraint.
@@ -72,7 +70,7 @@ async function modifyRelationshipClass(context, change, itemKey, item) {
72
70
  */
73
71
  async function mergeRelationshipConstraint(context, change) {
74
72
  if (change.changeType !== "modify") {
75
- return { errorMessage: "RelationshipConstraints can only be modified." };
73
+ throw new Error("RelationshipConstraints can only be modified.");
76
74
  }
77
75
  const item = await (0, SchemaItemMerger_1.locateSchemaItem)(context, change.itemName, ecschema_metadata_1.SchemaItemType.RelationshipClass);
78
76
  const constraint = item[parseConstraint(change.path)];
@@ -80,29 +78,23 @@ async function mergeRelationshipConstraint(context, change) {
80
78
  constraint.roleLabel = change.difference.roleLabel;
81
79
  }
82
80
  if (change.difference.polymorphic !== undefined) {
83
- const result = await context.editor.relationships.setConstraintPolymorphic(constraint, change.difference.polymorphic);
84
- if (result.errorMessage) {
85
- return result;
86
- }
81
+ await context.editor.relationships.setConstraintPolymorphic(constraint, change.difference.polymorphic);
87
82
  }
88
83
  if (change.difference.multiplicity !== undefined) {
89
84
  if (constraint.multiplicity === undefined) {
90
85
  const multiplicity = ecschema_metadata_1.RelationshipMultiplicity.fromString(change.difference.multiplicity);
91
86
  if (multiplicity === undefined) {
92
- return { errorMessage: `An invalid relationship constraint multiplicity value '${change.difference.multiplicity}' has been provided.` };
93
- }
94
- const result = await context.editor.relationships.setConstraintMultiplicity(constraint, multiplicity);
95
- if (result.errorMessage) {
96
- return result;
87
+ throw new Error(`An invalid relationship constraint multiplicity value '${change.difference.multiplicity}' has been provided.`);
97
88
  }
89
+ await context.editor.relationships.setConstraintMultiplicity(constraint, multiplicity);
98
90
  }
99
- return { errorMessage: `Changing the relationship constraint '${constraint.fullName}' multiplicity is not supported.` };
91
+ throw new Error(`Changing the relationship constraint '${constraint.fullName}' multiplicity is not supported.`);
100
92
  }
101
93
  if (change.difference.abstractConstraint !== undefined) {
102
94
  const itemKey = await (0, SchemaItemMerger_1.updateSchemaItemKey)(context, change.difference.abstractConstraint);
103
95
  const abstractConstraint = await context.editor.schemaContext.getSchemaItem(itemKey);
104
96
  if (abstractConstraint === undefined) {
105
- return { itemKey: constraint.relationshipClass.key, errorMessage: `Unable to locate the abstract constraint class ${change.difference.abstractConstraint} in the context schema.` };
97
+ throw new Error(`Unable to locate the abstract constraint class ${change.difference.abstractConstraint} in the context schema.`);
106
98
  }
107
99
  return context.editor.relationships.setAbstractConstraint(constraint, abstractConstraint);
108
100
  }
@@ -115,7 +107,7 @@ exports.mergeRelationshipConstraint = mergeRelationshipConstraint;
115
107
  */
116
108
  async function mergeRelationshipClassConstraint(context, change) {
117
109
  if (change.changeType !== "add") {
118
- return { errorMessage: `Change type ${change.changeType} is not supported for Relationship constraint classes.` };
110
+ throw new Error(`Change type ${change.changeType} is not supported for Relationship constraint classes.`);
119
111
  }
120
112
  const item = await (0, SchemaItemMerger_1.locateSchemaItem)(context, change.itemName, ecschema_metadata_1.SchemaItemType.RelationshipClass);
121
113
  const constraint = item[parseConstraint(change.path)];
@@ -123,14 +115,10 @@ async function mergeRelationshipClassConstraint(context, change) {
123
115
  const constraintClassKey = await (0, SchemaItemMerger_1.updateSchemaItemKey)(context, constraintName);
124
116
  const constraintClass = await context.editor.schemaContext.getSchemaItem(constraintClassKey);
125
117
  if (constraintClass === undefined) {
126
- return { errorMessage: `Could not locate relationship constraint class ${constraintClassKey.name}` };
127
- }
128
- const result = await context.editor.relationships.addConstraintClass(constraint, constraintClass);
129
- if (result.errorMessage) {
130
- return result;
118
+ throw new Error(`Could not locate relationship constraint class ${constraintClassKey.name}`);
131
119
  }
120
+ await context.editor.relationships.addConstraintClass(constraint, constraintClass);
132
121
  }
133
- return { itemKey: constraint.relationshipClass.key };
134
122
  }
135
123
  exports.mergeRelationshipClassConstraint = mergeRelationshipClassConstraint;
136
124
  function parseConstraint(path) {
@@ -138,4 +126,18 @@ function parseConstraint(path) {
138
126
  ? "source"
139
127
  : "target";
140
128
  }
129
+ async function updateRelationshipConstraintKey(context, props) {
130
+ let abstractConstraint = props.abstractConstraint;
131
+ if (abstractConstraint !== undefined)
132
+ abstractConstraint = await (0, SchemaItemMerger_1.updateSchemaItemFullName)(context, abstractConstraint);
133
+ const constraintClasses = [];
134
+ for (const ecClass of props.constraintClasses) {
135
+ constraintClasses.push(await (0, SchemaItemMerger_1.updateSchemaItemFullName)(context, ecClass));
136
+ }
137
+ return {
138
+ ...props,
139
+ abstractConstraint,
140
+ constraintClasses,
141
+ };
142
+ }
141
143
  //# sourceMappingURL=RelationshipClassMerger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RelationshipClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/RelationshipClassMerger.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*--------------------------------------------------------------------------------------------*/\nimport { type RelationshipClassDifference, type RelationshipConstraintClassDifference, type RelationshipConstraintDifference } from \"../Differencing/SchemaDifference\";\nimport { type MutableRelationshipClass } from \"../Editing/Mutable/MutableRelationshipClass\";\nimport { locateSchemaItem, type SchemaItemMergerHandler, updateSchemaItemKey } from \"./SchemaItemMerger\";\nimport { modifyClass } from \"./ClassMerger\";\nimport { SchemaMergeContext } from \"./SchemaMerger\";\nimport { EntityClass, Mixin, parseStrength, parseStrengthDirection, RelationshipClass, RelationshipMultiplicity, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\nimport { SchemaItemEditResults } from \"../Editing/Editor\";\n\ntype ConstraintClassTypes = EntityClass | Mixin | RelationshipClass;\n\n/**\n * Defines a merge handler to merge RelationshipClass schema items.\n * @internal\n */\nexport const relationshipClassMerger: SchemaItemMergerHandler<RelationshipClassDifference> = {\n async add(context, change) {\n if (change.difference.strength === undefined) {\n return { errorMessage: \"RelationshipClass must define strength\" };\n }\n if (change.difference.strengthDirection === undefined) {\n return { errorMessage: \"RelationshipClass must define strengthDirection\" };\n }\n if (change.difference.source === undefined) {\n return { errorMessage: \"RelationshipClass must define a source constraint\" };\n }\n if (change.difference.target === undefined) {\n return { errorMessage: \"RelationshipClass must define a target constraint\" };\n }\n\n return context.editor.relationships.createFromProps(context.targetSchemaKey, {\n ...change.difference,\n name: change.itemName,\n schemaItemType: change.schemaType,\n strength: change.difference.strength,\n strengthDirection: change.difference.strengthDirection,\n source: change.difference.source,\n target: change.difference.target,\n });\n },\n async modify(context, change, itemKey, item: MutableRelationshipClass) {\n return modifyRelationshipClass(context, change, itemKey, item);\n },\n};\n\nasync function modifyRelationshipClass(context: SchemaMergeContext, change: RelationshipClassDifference, itemKey: SchemaItemKey, item: MutableRelationshipClass) {\n // The following modifications will only be applied if the items gets modified\n // and not the 2nd pass when adding a RelationshipClass.\n if(change.changeType === \"modify\") {\n if(change.difference.strength !== undefined) {\n if (item.strength === undefined) {\n const strength = parseStrength(change.difference.strength);\n if (strength === undefined) {\n return { itemKey, errorMessage: `An invalid relationship class strength value '${change.difference.strength}' has been provided.` };\n }\n item.setStrength(strength);\n return { itemKey };\n }\n return { itemKey, errorMessage: `Changing the relationship '${itemKey.name}' strength is not supported.` };\n }\n if(change.difference.strengthDirection !== undefined) {\n if (item.strengthDirection === undefined) {\n const strengthDirection = parseStrengthDirection(change.difference.strengthDirection);\n if (strengthDirection === undefined) {\n return { itemKey, errorMessage: `An invalid relationship class strengthDirection value '${change.difference.strengthDirection}' has been provided.` };\n }\n item.setStrengthDirection(strengthDirection);\n return { itemKey };\n }\n return { itemKey, errorMessage: `Changing the relationship '${itemKey.name}' strengthDirection is not supported.` };\n }\n }\n return modifyClass(context, change, itemKey, item);\n}\n\n/**\n * Merges differences of a Relationship constraint.\n * This only supports modify as the RelationshipConstraints are always set on the Relationship classes.\n * @internal\n */\nexport async function mergeRelationshipConstraint(context: SchemaMergeContext, change: RelationshipConstraintDifference) {\n if(change.changeType !== \"modify\") {\n return { errorMessage: \"RelationshipConstraints can only be modified.\" };\n }\n\n const item = await locateSchemaItem(context, change.itemName, SchemaItemType.RelationshipClass) as MutableRelationshipClass;\n const constraint = item[parseConstraint(change.path)];\n if(change.difference.roleLabel !== undefined) {\n constraint.roleLabel = change.difference.roleLabel;\n }\n if(change.difference.polymorphic !== undefined) {\n const result = await context.editor.relationships.setConstraintPolymorphic(constraint, change.difference.polymorphic);\n if(result.errorMessage) {\n return result;\n }\n }\n if(change.difference.multiplicity !== undefined) {\n if (constraint.multiplicity === undefined) {\n const multiplicity = RelationshipMultiplicity.fromString(change.difference.multiplicity);\n if (multiplicity === undefined) {\n return { errorMessage: `An invalid relationship constraint multiplicity value '${change.difference.multiplicity}' has been provided.` };\n }\n const result = await context.editor.relationships.setConstraintMultiplicity(constraint, multiplicity);\n if(result.errorMessage) {\n return result;\n }\n }\n return { errorMessage: `Changing the relationship constraint '${constraint.fullName}' multiplicity is not supported.` };\n }\n if(change.difference.abstractConstraint !== undefined) {\n const itemKey = await updateSchemaItemKey(context, change.difference.abstractConstraint);\n const abstractConstraint = await context.editor.schemaContext.getSchemaItem<ConstraintClassTypes>(itemKey);\n if (abstractConstraint === undefined) {\n return { itemKey: constraint.relationshipClass.key, errorMessage: `Unable to locate the abstract constraint class ${change.difference.abstractConstraint} in the context schema.`};\n }\n return context.editor.relationships.setAbstractConstraint(constraint, abstractConstraint);\n }\n return { itemKey: constraint.relationshipClass.key };\n}\n\n/**\n * Merges differences of a Relationship constraint classes.\n * @internal\n */\nexport async function mergeRelationshipClassConstraint(context: SchemaMergeContext, change: RelationshipConstraintClassDifference): Promise<SchemaItemEditResults> {\n if(change.changeType !== \"add\") {\n return { errorMessage: `Change type ${change.changeType} is not supported for Relationship constraint classes.` };\n }\n\n const item = await locateSchemaItem(context, change.itemName, SchemaItemType.RelationshipClass) as MutableRelationshipClass;\n const constraint = item[parseConstraint(change.path)];\n for(const constraintName of change.difference) {\n const constraintClassKey = await updateSchemaItemKey(context, constraintName);\n const constraintClass = await context.editor.schemaContext.getSchemaItem<ConstraintClassTypes>(constraintClassKey);\n if(constraintClass === undefined) {\n return { errorMessage: `Could not locate relationship constraint class ${constraintClassKey.name}` };\n }\n const result = await context.editor.relationships.addConstraintClass(constraint, constraintClass);\n if(result.errorMessage) {\n return result;\n }\n }\n return { itemKey: constraint.relationshipClass.key };\n}\n\nfunction parseConstraint(path: string): \"source\" | \"target\" {\n return path.startsWith(\"$source\")\n ? \"source\"\n : \"target\";\n}\n"]}
1
+ {"version":3,"file":"RelationshipClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/RelationshipClassMerger.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 RelationshipClassDifference, type RelationshipConstraintClassDifference, type RelationshipConstraintDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type MutableRelationshipClass } from \"../Editing/Mutable/MutableRelationshipClass\";\r\nimport { locateSchemaItem, type SchemaItemMergerHandler, updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { modifyClass } from \"./ClassMerger\";\r\nimport { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { EntityClass, Mixin, parseStrength, parseStrengthDirection, RelationshipClass, RelationshipConstraintProps, RelationshipMultiplicity, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\n\r\ntype ConstraintClassTypes = EntityClass | Mixin | RelationshipClass;\r\n\r\n/**\r\n * Defines a merge handler to merge RelationshipClass schema items.\r\n * @internal\r\n */\r\nexport const relationshipClassMerger: SchemaItemMergerHandler<RelationshipClassDifference> = {\r\n async add(context, change) {\r\n if (change.difference.strength === undefined) {\r\n throw new Error(\"RelationshipClass must define strength\");\r\n }\r\n if (change.difference.strengthDirection === undefined) {\r\n throw new Error(\"RelationshipClass must define strengthDirection\");\r\n }\r\n if (change.difference.source === undefined) {\r\n throw new Error(\"RelationshipClass must define a source constraint\");\r\n }\r\n if (change.difference.target === undefined) {\r\n throw new Error(\"RelationshipClass must define a target constraint\");\r\n }\r\n\r\n return context.editor.relationships.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n strength: change.difference.strength,\r\n strengthDirection: change.difference.strengthDirection,\r\n source: await updateRelationshipConstraintKey(context, change.difference.source),\r\n target: await updateRelationshipConstraintKey(context, change.difference.target),\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutableRelationshipClass) {\r\n await modifyRelationshipClass(context, change, itemKey, item);\r\n },\r\n};\r\n\r\nasync function modifyRelationshipClass(context: SchemaMergeContext, change: RelationshipClassDifference, itemKey: SchemaItemKey, item: MutableRelationshipClass) {\r\n // The following modifications will only be applied if the items gets modified\r\n // and not the 2nd pass when adding a RelationshipClass.\r\n if(change.changeType === \"modify\") {\r\n if(change.difference.strength !== undefined) {\r\n if (item.strength === undefined) {\r\n const strength = parseStrength(change.difference.strength);\r\n if (strength === undefined) {\r\n throw new Error(`An invalid relationship class strength value '${change.difference.strength}' has been provided.`);\r\n }\r\n item.setStrength(strength);\r\n }\r\n throw new Error(`Changing the relationship '${itemKey.name}' strength is not supported.`);\r\n }\r\n if(change.difference.strengthDirection !== undefined) {\r\n if (item.strengthDirection === undefined) {\r\n const strengthDirection = parseStrengthDirection(change.difference.strengthDirection);\r\n if (strengthDirection === undefined) {\r\n throw new Error(`An invalid relationship class strengthDirection value '${change.difference.strengthDirection}' has been provided.`);\r\n }\r\n item.setStrengthDirection(strengthDirection);\r\n }\r\n throw new Error(`Changing the relationship '${itemKey.name}' strengthDirection is not supported.`);\r\n }\r\n }\r\n await modifyClass(context, change, itemKey, item);\r\n}\r\n\r\n/**\r\n * Merges differences of a Relationship constraint.\r\n * This only supports modify as the RelationshipConstraints are always set on the Relationship classes.\r\n * @internal\r\n */\r\nexport async function mergeRelationshipConstraint(context: SchemaMergeContext, change: RelationshipConstraintDifference) {\r\n if(change.changeType !== \"modify\") {\r\n throw new Error(\"RelationshipConstraints can only be modified.\");\r\n }\r\n\r\n const item = await locateSchemaItem(context, change.itemName, SchemaItemType.RelationshipClass) as MutableRelationshipClass;\r\n const constraint = item[parseConstraint(change.path)];\r\n if(change.difference.roleLabel !== undefined) {\r\n constraint.roleLabel = change.difference.roleLabel;\r\n }\r\n if(change.difference.polymorphic !== undefined) {\r\n await context.editor.relationships.setConstraintPolymorphic(constraint, change.difference.polymorphic);\r\n }\r\n if(change.difference.multiplicity !== undefined) {\r\n if (constraint.multiplicity === undefined) {\r\n const multiplicity = RelationshipMultiplicity.fromString(change.difference.multiplicity);\r\n if (multiplicity === undefined) {\r\n throw new Error(`An invalid relationship constraint multiplicity value '${change.difference.multiplicity}' has been provided.`);\r\n }\r\n await context.editor.relationships.setConstraintMultiplicity(constraint, multiplicity);\r\n }\r\n throw new Error(`Changing the relationship constraint '${constraint.fullName}' multiplicity is not supported.`);\r\n }\r\n if(change.difference.abstractConstraint !== undefined) {\r\n const itemKey = await updateSchemaItemKey(context, change.difference.abstractConstraint);\r\n const abstractConstraint = await context.editor.schemaContext.getSchemaItem<ConstraintClassTypes>(itemKey);\r\n if (abstractConstraint === undefined) {\r\n throw new Error(`Unable to locate the abstract constraint class ${change.difference.abstractConstraint} in the context schema.`);\r\n }\r\n return context.editor.relationships.setAbstractConstraint(constraint, abstractConstraint);\r\n }\r\n return { itemKey: constraint.relationshipClass.key };\r\n}\r\n\r\n/**\r\n * Merges differences of a Relationship constraint classes.\r\n * @internal\r\n */\r\nexport async function mergeRelationshipClassConstraint(context: SchemaMergeContext, change: RelationshipConstraintClassDifference): Promise<void> {\r\n if(change.changeType !== \"add\") {\r\n throw new Error(`Change type ${change.changeType} is not supported for Relationship constraint classes.`);\r\n }\r\n\r\n const item = await locateSchemaItem(context, change.itemName, SchemaItemType.RelationshipClass) as MutableRelationshipClass;\r\n const constraint = item[parseConstraint(change.path)];\r\n for(const constraintName of change.difference) {\r\n const constraintClassKey = await updateSchemaItemKey(context, constraintName);\r\n const constraintClass = await context.editor.schemaContext.getSchemaItem<ConstraintClassTypes>(constraintClassKey);\r\n if(constraintClass === undefined) {\r\n throw new Error(`Could not locate relationship constraint class ${constraintClassKey.name}`);\r\n }\r\n\r\n await context.editor.relationships.addConstraintClass(constraint, constraintClass);\r\n }\r\n}\r\n\r\nfunction parseConstraint(path: string): \"source\" | \"target\" {\r\n return path.startsWith(\"$source\")\r\n ? \"source\"\r\n : \"target\";\r\n}\r\n\r\nasync function updateRelationshipConstraintKey(context: SchemaMergeContext, props: RelationshipConstraintProps): Promise<RelationshipConstraintProps> {\r\n let abstractConstraint = props.abstractConstraint;\r\n if (abstractConstraint !== undefined)\r\n abstractConstraint = await updateSchemaItemFullName(context, abstractConstraint);\r\n\r\n const constraintClasses: string[] = [];\r\n for (const ecClass of props.constraintClasses) {\r\n constraintClasses.push(await updateSchemaItemFullName(context, ecClass));\r\n }\r\n\r\n return {\r\n ...props,\r\n abstractConstraint,\r\n constraintClasses,\r\n };\r\n}\r\n"]}
@@ -1,13 +1,12 @@
1
1
  import type { SchemaMergeContext } from "./SchemaMerger";
2
- import type { SchemaEditResults, SchemaItemEditResults } from "../Editing/Editor";
3
2
  import { AnySchemaDifference, AnySchemaItemDifference, AnySchemaItemPathDifference } from "../Differencing/SchemaDifference";
4
3
  import { SchemaItem, SchemaItemKey } from "@itwin/ecschema-metadata";
5
4
  /**
6
5
  * @internal
7
6
  */
8
7
  export interface SchemaItemMergerHandler<T extends AnySchemaItemDifference | AnySchemaItemPathDifference> {
9
- add: (context: SchemaMergeContext, change: T) => Promise<SchemaItemEditResults>;
10
- modify: (context: SchemaMergeContext, change: T, itemKey: SchemaItemKey, item: any) => Promise<SchemaItemEditResults>;
8
+ add: (context: SchemaMergeContext, change: T) => Promise<SchemaItemKey>;
9
+ modify: (context: SchemaMergeContext, change: T, itemKey: SchemaItemKey, item: any) => Promise<void>;
11
10
  }
12
11
  /**
13
12
  * @internal
@@ -21,7 +20,7 @@ export declare function locateSchemaItem(context: SchemaMergeContext, itemName:
21
20
  * @returns An async iterable with the merge result for each schema item.
22
21
  * @internal
23
22
  */
24
- export declare function mergeSchemaItems(context: SchemaMergeContext, itemChanges: AnySchemaDifference[]): AsyncGenerator<SchemaEditResults, void, unknown>;
23
+ export declare function mergeSchemaItems(context: SchemaMergeContext, itemChanges: AnySchemaDifference[]): AsyncGenerator<void, void, unknown>;
25
24
  /**
26
25
  * Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.
27
26
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaItemMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/SchemaItemMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,2BAA2B,EAAoB,MAAM,kCAAkC,CAAC;AAC/I,OAAO,EAAkD,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASrH;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,uBAAuB,GAAG,2BAA2B;IACtG,GAAG,EAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnF,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;CACvH;AAmBD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAQvG;AAED;;;;;;;GAOG;AACH,wBAAuB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,oDAwCtG;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAG5F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,0BAYvF"}
1
+ {"version":3,"file":"SchemaItemMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/SchemaItemMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,2BAA2B,EAAoB,MAAM,kCAAkC,CAAC;AAC/I,OAAO,EAAkD,UAAU,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AASrH;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,uBAAuB,GAAG,2BAA2B;IACtG,GAAG,EAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC3E,MAAM,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtG;AAoBD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAQvG;AAED;;;;;;;GAOG;AACH,wBAAuB,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,uCAwCtG;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,mBAG5F;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,0BAYvF"}
@@ -16,13 +16,14 @@ const ClassMerger_1 = require("./ClassMerger");
16
16
  */
17
17
  async function mergeSchemaItem(context, change, merger) {
18
18
  if (change.changeType === "add") {
19
- return merger.add(context, change);
19
+ await merger.add(context, change);
20
+ return;
20
21
  }
21
22
  if (change.changeType === "modify") {
22
23
  const schemaItem = await locateSchemaItem(context, change.itemName, change.schemaType);
23
24
  return merger.modify(context, change, schemaItem.key, schemaItem);
24
25
  }
25
- return { errorMessage: `The merger does not support ${change.changeType} of ${change.schemaType}.` };
26
+ throw new Error(`The merger does not support ${change.changeType} of ${change.schemaType}.`);
26
27
  }
27
28
  /**
28
29
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaItemMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaItemMerger.ts"],"names":[],"mappings":";;;AAMA,uEAA+I;AAC/I,gEAAqH;AACrH,2DAA0E;AAC1E,yDAAsD;AACtD,qEAAkE;AAClE,yDAAsD;AACtD,iEAA8D;AAC9D,qDAAkD;AAClD,+CAAgD;AAUhD;;;GAGG;AACH,KAAK,UAAU,eAAe,CAAgE,OAA2B,EAAE,MAAS,EAAE,MAAkC;IACtK,IAAG,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAG,MAAM,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;QACvF,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,+BAA+B,MAAM,CAAC,UAAU,OAAO,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;AACvG,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAA2B,EAAE,QAAgB,EAAE,UAAkB;IACtG,MAAM,aAAa,GAAG,IAAI,iCAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3E,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACnF,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,kCAAc,CAAC,mCAAe,CAAC,aAAa,EAAE,GAAG,UAAU,IAAI,aAAa,CAAC,QAAQ,+BAA+B,CAAC,CAAC;IAClI,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AARD,4CAQC;AAED;;;;;;;GAOG;AACI,KAAK,SAAS,CAAC,CAAC,gBAAgB,CAAC,OAA2B,EAAE,WAAkC;IACrG,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACrF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,mCAAgB,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,4BAA4B,CAAC,EAAE,CAAC;QAC3F,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,+CAAsB,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,qCAAiB,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACrF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,oCAAgB,CAAC,CAAC;IACrE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACrF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,mCAAgB,CAAC,CAAC;IACrE,CAAC;IAED,QAAQ;IACR,uFAAuF;IACvF,SAAS;IACT,kBAAkB;IAClB,WAAW;IAEX,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,0BAA0B,CAAC,EAAE,CAAC;QACzF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,2CAAoB,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC,mCAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC;QACnF,MAAM,MAAM,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,+BAAc,CAAC,CAAC;IACnE,CAAC;IAED,uFAAuF;IACvF,gCAAgC;IAChC,IAAI,KAAK,EAAE,MAAM,gBAAgB,IAAI,IAAA,6BAAe,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;QAC3E,MAAM,gBAAgB,CAAC;IACzB,CAAC;AACH,CAAC;AAxCD,4CAwCC;AAED;;;GAGG;AACI,KAAK,UAAU,wBAAwB,CAAC,OAA2B,EAAE,SAAiB;IAC3F,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpE,OAAO,aAAa,CAAC,QAAQ,CAAC;AAChC,CAAC;AAHD,4DAGC;AAED;;;;GAIG;AACI,KAAK,UAAU,mBAAmB,CAAC,OAA2B,EAAE,SAAiB;IACtF,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,8BAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,OAAO,CAAC,eAAe,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,iCAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;IAC7E,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACnC,OAAO,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,iCAAa,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IACrH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;AACvE,CAAC;AAZD,kDAYC;AAED;;;;GAIG;AACH,KAAK,UAAU,oBAAoB,CAAC,aAA4B,EAAE,OAAsB;IACtF,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,mGAAmG;QACnG,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC;AAClB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { SchemaMergeContext } from \"./SchemaMerger\";\nimport type { SchemaEditResults, SchemaItemEditResults } from \"../Editing/Editor\";\nimport { AnySchemaDifference, AnySchemaItemDifference, AnySchemaItemPathDifference, SchemaDifference } from \"../Differencing/SchemaDifference\";\nimport { ECObjectsError, ECObjectsStatus, SchemaContext, SchemaItem, SchemaItemKey } from \"@itwin/ecschema-metadata\";\nimport { enumerationMerger, enumeratorMerger } from \"./EnumerationMerger\";\nimport { phenomenonMerger } from \"./PhenomenonMerger\";\nimport { propertyCategoryMerger } from \"./PropertyCategoryMerger\";\nimport { unitSystemMerger } from \"./UnitSystemMerger\";\nimport { kindOfQuantityMerger } from \"./KindOfQuantityMerger\";\nimport { constantMerger } from \"./ConstantMerger\";\nimport { mergeClassItems } from \"./ClassMerger\";\n\n/**\n * @internal\n */\nexport interface SchemaItemMergerHandler<T extends AnySchemaItemDifference | AnySchemaItemPathDifference> {\n add: (context: SchemaMergeContext, change: T) => Promise<SchemaItemEditResults>;\n modify: (context: SchemaMergeContext, change: T, itemKey: SchemaItemKey, item: any) => Promise<SchemaItemEditResults>;\n}\n\n/**\n * Handles the merging logic for everything that is same for all schema items such as labels or descriptions\n * @internal\n */\nasync function mergeSchemaItem<T extends AnySchemaItemDifference|AnySchemaItemPathDifference>(context: SchemaMergeContext, change: T, merger: SchemaItemMergerHandler<T>): Promise<SchemaEditResults> {\n if(change.changeType === \"add\") {\n return merger.add(context, change);\n }\n\n if(change.changeType === \"modify\") {\n const schemaItem = await locateSchemaItem(context, change.itemName, change.schemaType);\n return merger.modify(context, change, schemaItem.key, schemaItem);\n }\n\n return { errorMessage: `The merger does not support ${change.changeType} of ${change.schemaType}.` };\n}\n\n/**\n * @internal\n */\nexport async function locateSchemaItem(context: SchemaMergeContext, itemName: string, schemaType: string) {\n const schemaItemKey = new SchemaItemKey(itemName, context.targetSchemaKey);\n const schemaItem = await context.editor.schemaContext.getSchemaItem(schemaItemKey);\n if (schemaItem === undefined) {\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `${schemaType} ${schemaItemKey.fullName} not found in schema context.`);\n }\n\n return schemaItem;\n}\n\n/**\n * Merges the given set of schema items. As schema items may depend or relate with other\n * schema items, the list gets filtered to ensure the items get merged in a certain order.\n * @param context The current merging context.\n * @param itemChanges Set of schema item that differed.\n * @returns An async iterable with the merge result for each schema item.\n * @internal\n */\nexport async function* mergeSchemaItems(context: SchemaMergeContext, itemChanges: AnySchemaDifference[]) {\n for (const difference of itemChanges.filter(SchemaDifference.isUnitSystemDifference)) {\n yield await mergeSchemaItem(context, difference, unitSystemMerger);\n }\n\n for (const difference of itemChanges.filter(SchemaDifference.isPropertyCategoryDifference)) {\n yield await mergeSchemaItem(context, difference, propertyCategoryMerger);\n }\n\n for (const difference of itemChanges.filter(SchemaDifference.isEnumerationDifference)) {\n yield await mergeSchemaItem(context, difference, enumerationMerger);\n }\n\n for (const difference of itemChanges.filter(SchemaDifference.isEnumeratorDifference)) {\n yield await mergeSchemaItem(context, difference, enumeratorMerger);\n }\n\n for (const difference of itemChanges.filter(SchemaDifference.isPhenomenonDifference)) {\n yield await mergeSchemaItem(context, difference, phenomenonMerger);\n }\n\n // TODO:\n // The following schema items are not supported yet. Mentioned in the processing order:\n // - Unit\n // - Inverted Unit\n // - Format\n\n for (const difference of itemChanges.filter(SchemaDifference.isKindOfQuantityDifference)) {\n yield await mergeSchemaItem(context, difference, kindOfQuantityMerger);\n }\n\n for (const difference of itemChanges.filter(SchemaDifference.isConstantDifference)) {\n yield await mergeSchemaItem(context, difference, constantMerger);\n }\n\n // Classes are slightly differently merged, since they can refer each other the process\n // uses several stages to merge.\n for await (const classMergeResult of mergeClassItems(context, itemChanges)) {\n yield classMergeResult;\n }\n}\n\n/**\n * Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.\n * @internal\n */\nexport async function updateSchemaItemFullName(context: SchemaMergeContext, reference: string) {\n const schemaItemKey = await updateSchemaItemKey(context, reference);\n return schemaItemKey.fullName;\n}\n\n/**\n * Updates the given reference if it refers to a SchemaItem in the source Schema and\n * returns a SchemaItemKey. If any other schema is referred the reference is not change.\n * @internal\n */\nexport async function updateSchemaItemKey(context: SchemaMergeContext, reference: string) {\n const [schemaName, itemName] = SchemaItem.parseFullName(reference);\n if (context.sourceSchemaKey.compareByName(schemaName)) {\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, context.targetSchemaKey));\n }\n\n const referencedSchema = await context.targetSchema.getReference(schemaName);\n if (referencedSchema !== undefined) {\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, referencedSchema.schemaKey));\n }\n\n throw new Error(`Cannot locate referenced schema item ${reference}`);\n}\n\n/**\n * To support case insensitivity for schema items, the given key is checked if there\n * exists an item for it.\n * @internal\n */\nasync function resolveSchemaItemKey(schemaContext: SchemaContext, itemKey: SchemaItemKey): Promise<SchemaItemKey> {\n const item = await schemaContext.getSchemaItem(itemKey);\n if (item === undefined) {\n // If the schema item hasn't been created yet, we have to trust the given key is correctly spelled.\n return itemKey;\n }\n return item.key;\n}\n"]}
1
+ {"version":3,"file":"SchemaItemMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaItemMerger.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 { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { AnySchemaDifference, AnySchemaItemDifference, AnySchemaItemPathDifference, SchemaDifference } from \"../Differencing/SchemaDifference\";\r\nimport { ECObjectsError, ECObjectsStatus, SchemaContext, SchemaItem, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { enumerationMerger, enumeratorMerger } from \"./EnumerationMerger\";\r\nimport { phenomenonMerger } from \"./PhenomenonMerger\";\r\nimport { propertyCategoryMerger } from \"./PropertyCategoryMerger\";\r\nimport { unitSystemMerger } from \"./UnitSystemMerger\";\r\nimport { kindOfQuantityMerger } from \"./KindOfQuantityMerger\";\r\nimport { constantMerger } from \"./ConstantMerger\";\r\nimport { mergeClassItems } from \"./ClassMerger\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport interface SchemaItemMergerHandler<T extends AnySchemaItemDifference | AnySchemaItemPathDifference> {\r\n add: (context: SchemaMergeContext, change: T) => Promise<SchemaItemKey>;\r\n modify: (context: SchemaMergeContext, change: T, itemKey: SchemaItemKey, item: any) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Handles the merging logic for everything that is same for all schema items such as labels or descriptions\r\n * @internal\r\n */\r\nasync function mergeSchemaItem<T extends AnySchemaItemDifference|AnySchemaItemPathDifference>(context: SchemaMergeContext, change: T, merger: SchemaItemMergerHandler<T>): Promise<void> {\r\n if(change.changeType === \"add\") {\r\n await merger.add(context, change);\r\n return;\r\n }\r\n\r\n if(change.changeType === \"modify\") {\r\n const schemaItem = await locateSchemaItem(context, change.itemName, change.schemaType);\r\n return merger.modify(context, change, schemaItem.key, schemaItem);\r\n }\r\n\r\n throw new Error(`The merger does not support ${change.changeType} of ${change.schemaType}.`);\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function locateSchemaItem(context: SchemaMergeContext, itemName: string, schemaType: string) {\r\n const schemaItemKey = new SchemaItemKey(itemName, context.targetSchemaKey);\r\n const schemaItem = await context.editor.schemaContext.getSchemaItem(schemaItemKey);\r\n if (schemaItem === undefined) {\r\n throw new ECObjectsError(ECObjectsStatus.ClassNotFound, `${schemaType} ${schemaItemKey.fullName} not found in schema context.`);\r\n }\r\n\r\n return schemaItem;\r\n}\r\n\r\n/**\r\n * Merges the given set of schema items. As schema items may depend or relate with other\r\n * schema items, the list gets filtered to ensure the items get merged in a certain order.\r\n * @param context The current merging context.\r\n * @param itemChanges Set of schema item that differed.\r\n * @returns An async iterable with the merge result for each schema item.\r\n * @internal\r\n */\r\nexport async function* mergeSchemaItems(context: SchemaMergeContext, itemChanges: AnySchemaDifference[]) {\r\n for (const difference of itemChanges.filter(SchemaDifference.isUnitSystemDifference)) {\r\n yield await mergeSchemaItem(context, difference, unitSystemMerger);\r\n }\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isPropertyCategoryDifference)) {\r\n yield await mergeSchemaItem(context, difference, propertyCategoryMerger);\r\n }\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isEnumerationDifference)) {\r\n yield await mergeSchemaItem(context, difference, enumerationMerger);\r\n }\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isEnumeratorDifference)) {\r\n yield await mergeSchemaItem(context, difference, enumeratorMerger);\r\n }\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isPhenomenonDifference)) {\r\n yield await mergeSchemaItem(context, difference, phenomenonMerger);\r\n }\r\n\r\n // TODO:\r\n // The following schema items are not supported yet. Mentioned in the processing order:\r\n // - Unit\r\n // - Inverted Unit\r\n // - Format\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isKindOfQuantityDifference)) {\r\n yield await mergeSchemaItem(context, difference, kindOfQuantityMerger);\r\n }\r\n\r\n for (const difference of itemChanges.filter(SchemaDifference.isConstantDifference)) {\r\n yield await mergeSchemaItem(context, difference, constantMerger);\r\n }\r\n\r\n // Classes are slightly differently merged, since they can refer each other the process\r\n // uses several stages to merge.\r\n for await (const classMergeResult of mergeClassItems(context, itemChanges)) {\r\n yield classMergeResult;\r\n }\r\n}\r\n\r\n/**\r\n * Convenience-method around updateSchemaItemKey that returns the full name instead of a SchemaItemKey.\r\n * @internal\r\n */\r\nexport async function updateSchemaItemFullName(context: SchemaMergeContext, reference: string) {\r\n const schemaItemKey = await updateSchemaItemKey(context, reference);\r\n return schemaItemKey.fullName;\r\n}\r\n\r\n/**\r\n * Updates the given reference if it refers to a SchemaItem in the source Schema and\r\n * returns a SchemaItemKey. If any other schema is referred the reference is not change.\r\n * @internal\r\n */\r\nexport async function updateSchemaItemKey(context: SchemaMergeContext, reference: string) {\r\n const [schemaName, itemName] = SchemaItem.parseFullName(reference);\r\n if (context.sourceSchemaKey.compareByName(schemaName)) {\r\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, context.targetSchemaKey));\r\n }\r\n\r\n const referencedSchema = await context.targetSchema.getReference(schemaName);\r\n if (referencedSchema !== undefined) {\r\n return resolveSchemaItemKey(context.editor.schemaContext, new SchemaItemKey(itemName, referencedSchema.schemaKey));\r\n }\r\n\r\n throw new Error(`Cannot locate referenced schema item ${reference}`);\r\n}\r\n\r\n/**\r\n * To support case insensitivity for schema items, the given key is checked if there\r\n * exists an item for it.\r\n * @internal\r\n */\r\nasync function resolveSchemaItemKey(schemaContext: SchemaContext, itemKey: SchemaItemKey): Promise<SchemaItemKey> {\r\n const item = await schemaContext.getSchemaItem(itemKey);\r\n if (item === undefined) {\r\n // If the schema item hasn't been created yet, we have to trust the given key is correctly spelled.\r\n return itemKey;\r\n }\r\n return item.key;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAoB,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAMvF;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;GAIG;AACH,qBAAa,YAAY;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C;;;OAGG;gBACS,cAAc,EAAE,aAAa;IAIzC;;;;;OAKG;IACI,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEzE;;;;OAIG;IACI,KAAK,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB7D;;;;;OAKG;YACW,YAAY;CAyD3B"}
1
+ {"version":3,"file":"SchemaMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,OAAO,EAAoB,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAKvF;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,SAAS,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;CACtC;AAED;;;;GAIG;AACH,qBAAa,YAAY;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAE9C;;;OAGG;gBACS,cAAc,EAAE,aAAa;IAIzC;;;;;OAKG;IACI,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAEzE;;;;OAIG;IACI,KAAK,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAsB7D;;;;;OAKG;YACW,YAAY;CAmD3B"}
@@ -10,11 +10,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.SchemaMerger = void 0;
11
11
  const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
12
12
  const Editor_1 = require("../Editing/Editor");
13
+ const Errors_1 = require("../Differencing/Errors");
13
14
  const SchemaDifference_1 = require("../Differencing/SchemaDifference");
14
15
  const CustomAttributeMerger_1 = require("./CustomAttributeMerger");
15
16
  const SchemaItemMerger_1 = require("./SchemaItemMerger");
16
17
  const SchemaReferenceMerger_1 = require("./SchemaReferenceMerger");
17
- const SchemaConflicts_1 = require("../Differencing/SchemaConflicts");
18
18
  /**
19
19
  * Class to merge two schemas together.
20
20
  * @see [[merge]] to merge the schemas.
@@ -56,13 +56,13 @@ class SchemaMerger {
56
56
  const targetSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differences.targetSchemaName);
57
57
  const sourceSchemaKey = ecschema_metadata_1.SchemaKey.parseString(differences.sourceSchemaName);
58
58
  if (differences.conflicts && differences.conflicts.length > 0) {
59
- throw new SchemaConflicts_1.SchemaConflictsError("Schema's can't be merged if there are unresolved conflicts.", differences.conflicts, sourceSchemaKey, targetSchemaKey);
59
+ throw new Errors_1.SchemaConflictsError("Schema's can't be merged if there are unresolved conflicts.", differences.conflicts, sourceSchemaKey, targetSchemaKey);
60
60
  }
61
61
  const schema = await this._editor.getSchema(targetSchemaKey);
62
62
  if (schema === undefined) {
63
63
  throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);
64
64
  }
65
- if (differences.changes === undefined || differences.changes.length === 0) {
65
+ if (differences.differences === undefined || differences.differences.length === 0) {
66
66
  return schema;
67
67
  }
68
68
  const context = {
@@ -71,27 +71,21 @@ class SchemaMerger {
71
71
  targetSchemaKey,
72
72
  sourceSchemaKey,
73
73
  };
74
- for (const referenceChange of differences.changes.filter(SchemaDifference_1.SchemaDifference.isSchemaReferenceDifference)) {
74
+ for (const referenceChange of differences.differences.filter(SchemaDifference_1.SchemaDifference.isSchemaReferenceDifference)) {
75
75
  await (0, SchemaReferenceMerger_1.mergeSchemaReferences)(context, referenceChange);
76
76
  }
77
- const schemaDifference = differences.changes.find(SchemaDifference_1.SchemaDifference.isSchemaDifference);
77
+ const schemaDifference = differences.differences.find(SchemaDifference_1.SchemaDifference.isSchemaDifference);
78
78
  if (schemaDifference !== undefined) {
79
79
  await mergeSchemaProperties(schema, schemaDifference);
80
80
  }
81
81
  // Filter a list of possible schema item changes. This list gets filtered and order in the
82
82
  // mergeSchemaItems method.
83
- for await (const mergeResult of (0, SchemaItemMerger_1.mergeSchemaItems)(context, differences.changes)) {
84
- if (mergeResult.errorMessage) {
85
- throw new Error(mergeResult.errorMessage);
86
- }
83
+ for await (const _mergeResult of (0, SchemaItemMerger_1.mergeSchemaItems)(context, differences.differences)) {
87
84
  }
88
85
  // At last the custom attributes gets merged because it could be that the CustomAttributes
89
86
  // depend on classes that has to get merged in as items before.
90
- for (const customAttributeChange of differences.changes.filter(SchemaDifference_1.SchemaDifference.isCustomAttributeDifference)) {
91
- const mergeResult = await (0, CustomAttributeMerger_1.mergeCustomAttribute)(context, customAttributeChange);
92
- if (mergeResult.errorMessage) {
93
- throw new Error(mergeResult.errorMessage);
94
- }
87
+ for (const customAttributeChange of differences.differences.filter(SchemaDifference_1.SchemaDifference.isCustomAttributeDifference)) {
88
+ await (0, CustomAttributeMerger_1.mergeCustomAttribute)(context, customAttributeChange);
95
89
  }
96
90
  return schema;
97
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.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 Merging\n */\n\nimport { Schema, type SchemaContext, SchemaKey } from \"@itwin/ecschema-metadata\";\nimport { SchemaContextEditor } from \"../Editing/Editor\";\nimport { MutableSchema } from \"../Editing/Mutable/MutableSchema\";\nimport { SchemaDifference, SchemaDifferences } from \"../Differencing/SchemaDifference\";\nimport { mergeCustomAttribute } from \"./CustomAttributeMerger\";\nimport { mergeSchemaItems } from \"./SchemaItemMerger\";\nimport { mergeSchemaReferences } from \"./SchemaReferenceMerger\";\nimport { SchemaConflictsError } from \"../Differencing/SchemaConflicts\";\n\n/**\n * Defines the context of a Schema merging run.\n * @internal\n */\nexport interface SchemaMergeContext {\n readonly targetSchema: Schema;\n readonly targetSchemaKey: SchemaKey;\n readonly sourceSchemaKey: SchemaKey;\n readonly editor: SchemaContextEditor;\n}\n\n/**\n * Class to merge two schemas together.\n * @see [[merge]] to merge the schemas.\n * @beta\n */\nexport class SchemaMerger {\n\n private readonly _editor: SchemaContextEditor;\n\n /**\n * Constructs a new instance of the SchemaMerger object.\n * @param editingContext The schema contexts that holds the schema to be edited.\n */\n constructor(editingContext: SchemaContext) {\n this._editor = new SchemaContextEditor(editingContext);\n }\n\n /**\n * Copy the SchemaItems of the source schemas to the target schema.\n * @param targetSchema The schema the SchemaItems gets merged to.\n * @param sourceSchema The schema the SchemaItems gets copied from.\n * @returns The merged target schema.\n */\n public merge(targetSchema: Schema, sourceSchema: Schema): Promise<Schema>;\n\n /**\n * Merges the schema differences into the target schema context.\n * @param differences The changes that shall be applied to the target schema.\n * @alpha\n */\n public merge(differences: SchemaDifferences): Promise<Schema>;\n\n /**\n * Merges the source and the target. If the target is a SchemaDifference, the\n * source parameter must not be set. If it's a schema, it'll internally call\n * the Differencing api and recall itself with the difference argument overload.\n * @param input The methods input either a schema or a SchemaDifferences\n * @param source A source schema.\n * @returns The merged schema.\n * @alpha\n */\n public async merge(input: SchemaDifferences | Schema, source?: Schema): Promise<Schema> {\n if(Schema.isSchema(input)) {\n if(source === undefined) {\n throw new Error(\"When merging two schemas, source must not be undefined.\");\n }\n return this.merge(await SchemaDifference.fromSchemas(input, source));\n }\n\n return this.mergeSchemas(input);\n }\n\n /**\n * Merges the schema differences in the target schema. The target schema is defined\n * in the given differences object.\n * @param differences The differences between a source schema and the target schema.\n * @returns The modified Schema.\n */\n private async mergeSchemas(differences: SchemaDifferences): Promise<Schema> {\n const targetSchemaKey = SchemaKey.parseString(differences.targetSchemaName);\n const sourceSchemaKey = SchemaKey.parseString(differences.sourceSchemaName);\n\n if(differences.conflicts && differences.conflicts.length > 0) {\n throw new SchemaConflictsError(\n \"Schema's can't be merged if there are unresolved conflicts.\",\n differences.conflicts,\n sourceSchemaKey,\n targetSchemaKey,\n );\n }\n\n const schema = await this._editor.getSchema(targetSchemaKey);\n if (schema === undefined) {\n throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);\n }\n\n if(differences.changes === undefined || differences.changes.length === 0) {\n return schema;\n }\n\n const context: SchemaMergeContext = {\n editor: this._editor,\n targetSchema: schema,\n targetSchemaKey,\n sourceSchemaKey,\n };\n\n for (const referenceChange of differences.changes.filter(SchemaDifference.isSchemaReferenceDifference)) {\n await mergeSchemaReferences(context, referenceChange);\n }\n\n const schemaDifference = differences.changes.find(SchemaDifference.isSchemaDifference);\n if(schemaDifference !== undefined) {\n await mergeSchemaProperties(schema, schemaDifference);\n }\n\n // Filter a list of possible schema item changes. This list gets filtered and order in the\n // mergeSchemaItems method.\n for await (const mergeResult of mergeSchemaItems(context, differences.changes)) {\n if(mergeResult.errorMessage) {\n throw new Error(mergeResult.errorMessage);\n }\n }\n\n // At last the custom attributes gets merged because it could be that the CustomAttributes\n // depend on classes that has to get merged in as items before.\n for (const customAttributeChange of differences.changes.filter(SchemaDifference.isCustomAttributeDifference)) {\n const mergeResult = await mergeCustomAttribute(context, customAttributeChange);\n if(mergeResult.errorMessage) {\n throw new Error(mergeResult.errorMessage);\n }\n }\n\n return schema;\n }\n}\n\n/**\n * Sets the editable properties of a Schema.\n * @internal\n */\nasync function mergeSchemaProperties(schema: MutableSchema, changes: SchemaDifference) {\n if(changes.difference.label !== undefined) {\n schema.setDisplayLabel(changes.difference.label);\n }\n if(changes.difference.description !== undefined) {\n schema.setDescription(changes.difference.description);\n }\n}\n"]}
1
+ {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Merging\r\n */\r\n\r\nimport { MutableSchema } from \"../Editing/Mutable/MutableSchema\";\r\nimport { Schema, type SchemaContext, SchemaKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor } from \"../Editing/Editor\";\r\nimport { SchemaConflictsError } from \"../Differencing/Errors\";\r\nimport { SchemaDifference, SchemaDifferences } from \"../Differencing/SchemaDifference\";\r\nimport { mergeCustomAttribute } from \"./CustomAttributeMerger\";\r\nimport { mergeSchemaItems } from \"./SchemaItemMerger\";\r\nimport { mergeSchemaReferences } from \"./SchemaReferenceMerger\";\r\n\r\n/**\r\n * Defines the context of a Schema merging run.\r\n * @internal\r\n */\r\nexport interface SchemaMergeContext {\r\n readonly targetSchema: Schema;\r\n readonly targetSchemaKey: SchemaKey;\r\n readonly sourceSchemaKey: SchemaKey;\r\n readonly editor: SchemaContextEditor;\r\n}\r\n\r\n/**\r\n * Class to merge two schemas together.\r\n * @see [[merge]] to merge the schemas.\r\n * @beta\r\n */\r\nexport class SchemaMerger {\r\n\r\n private readonly _editor: SchemaContextEditor;\r\n\r\n /**\r\n * Constructs a new instance of the SchemaMerger object.\r\n * @param editingContext The schema contexts that holds the schema to be edited.\r\n */\r\n constructor(editingContext: SchemaContext) {\r\n this._editor = new SchemaContextEditor(editingContext);\r\n }\r\n\r\n /**\r\n * Copy the SchemaItems of the source schemas to the target schema.\r\n * @param targetSchema The schema the SchemaItems gets merged to.\r\n * @param sourceSchema The schema the SchemaItems gets copied from.\r\n * @returns The merged target schema.\r\n */\r\n public merge(targetSchema: Schema, sourceSchema: Schema): Promise<Schema>;\r\n\r\n /**\r\n * Merges the schema differences into the target schema context.\r\n * @param differences The changes that shall be applied to the target schema.\r\n * @alpha\r\n */\r\n public merge(differences: SchemaDifferences): Promise<Schema>;\r\n\r\n /**\r\n * Merges the source and the target. If the target is a SchemaDifference, the\r\n * source parameter must not be set. If it's a schema, it'll internally call\r\n * the Differencing api and recall itself with the difference argument overload.\r\n * @param input The methods input either a schema or a SchemaDifferences\r\n * @param source A source schema.\r\n * @returns The merged schema.\r\n * @alpha\r\n */\r\n public async merge(input: SchemaDifferences | Schema, source?: Schema): Promise<Schema> {\r\n if(Schema.isSchema(input)) {\r\n if(source === undefined) {\r\n throw new Error(\"When merging two schemas, source must not be undefined.\");\r\n }\r\n return this.merge(await SchemaDifference.fromSchemas(input, source));\r\n }\r\n\r\n return this.mergeSchemas(input);\r\n }\r\n\r\n /**\r\n * Merges the schema differences in the target schema. The target schema is defined\r\n * in the given differences object.\r\n * @param differences The differences between a source schema and the target schema.\r\n * @returns The modified Schema.\r\n */\r\n private async mergeSchemas(differences: SchemaDifferences): Promise<Schema> {\r\n const targetSchemaKey = SchemaKey.parseString(differences.targetSchemaName);\r\n const sourceSchemaKey = SchemaKey.parseString(differences.sourceSchemaName);\r\n\r\n if(differences.conflicts && differences.conflicts.length > 0) {\r\n throw new SchemaConflictsError(\r\n \"Schema's can't be merged if there are unresolved conflicts.\",\r\n differences.conflicts,\r\n sourceSchemaKey,\r\n targetSchemaKey,\r\n );\r\n }\r\n\r\n const schema = await this._editor.getSchema(targetSchemaKey);\r\n if (schema === undefined) {\r\n throw new Error(`The target schema '${targetSchemaKey.name}' could not be found in the editing context.`);\r\n }\r\n\r\n if(differences.differences === undefined || differences.differences.length === 0) {\r\n return schema;\r\n }\r\n\r\n const context: SchemaMergeContext = {\r\n editor: this._editor,\r\n targetSchema: schema,\r\n targetSchemaKey,\r\n sourceSchemaKey,\r\n };\r\n\r\n for (const referenceChange of differences.differences.filter(SchemaDifference.isSchemaReferenceDifference)) {\r\n await mergeSchemaReferences(context, referenceChange);\r\n }\r\n\r\n const schemaDifference = differences.differences.find(SchemaDifference.isSchemaDifference);\r\n if(schemaDifference !== undefined) {\r\n await mergeSchemaProperties(schema, schemaDifference);\r\n }\r\n\r\n // Filter a list of possible schema item changes. This list gets filtered and order in the\r\n // mergeSchemaItems method.\r\n for await (const _mergeResult of mergeSchemaItems(context, differences.differences)) {\r\n }\r\n\r\n // At last the custom attributes gets merged because it could be that the CustomAttributes\r\n // depend on classes that has to get merged in as items before.\r\n for (const customAttributeChange of differences.differences.filter(SchemaDifference.isCustomAttributeDifference)) {\r\n await mergeCustomAttribute(context, customAttributeChange);\r\n }\r\n\r\n return schema;\r\n }\r\n}\r\n\r\n/**\r\n * Sets the editable properties of a Schema.\r\n * @internal\r\n */\r\nasync function mergeSchemaProperties(schema: MutableSchema, changes: SchemaDifference) {\r\n if(changes.difference.label !== undefined) {\r\n schema.setDisplayLabel(changes.difference.label);\r\n }\r\n if(changes.difference.description !== undefined) {\r\n schema.setDescription(changes.difference.description);\r\n }\r\n}\r\n"]}