@itwin/ecschema-editing 4.9.0-dev.3 → 4.9.0-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/Differencing/Errors.js.map +1 -1
- package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
- package/lib/cjs/Differencing/Utils.js.map +1 -1
- package/lib/cjs/Editing/Constants.js.map +1 -1
- package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
- package/lib/cjs/Editing/ECClasses.js.map +1 -1
- package/lib/cjs/Editing/Editor.js.map +1 -1
- package/lib/cjs/Editing/Entities.js.map +1 -1
- package/lib/cjs/Editing/Enumerations.js.map +1 -1
- package/lib/cjs/Editing/Exception.js.map +1 -1
- package/lib/cjs/Editing/Formats.js.map +1 -1
- package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
- package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
- package/lib/cjs/Editing/Mixins.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableSchemaItem.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableStructProperty.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
- package/lib/cjs/Editing/Phenomena.js.map +1 -1
- package/lib/cjs/Editing/Properties.js.map +1 -1
- package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
- package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
- package/lib/cjs/Editing/SchemaItems.js.map +1 -1
- package/lib/cjs/Editing/Structs.js.map +1 -1
- package/lib/cjs/Editing/UnitSystems.js.map +1 -1
- package/lib/cjs/Editing/Units.js.map +1 -1
- package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
- package/lib/cjs/Merging/Edits/RenameEditHandler.js.map +1 -1
- package/lib/cjs/Merging/Edits/SchemaEdits.js.map +1 -1
- package/lib/cjs/Merging/Edits/SkipEditHandler.js.map +1 -1
- package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
- package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
- package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
- package/lib/cjs/Merging/MixinMerger.js.map +1 -1
- package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -1
- package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -1
- package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
- package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
- package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
- package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -1
- package/lib/cjs/Validation/Diagnostic.js.map +1 -1
- package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
- package/lib/cjs/Validation/ECRules.js.map +1 -1
- package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
- package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
- package/lib/cjs/Validation/Rules.js.map +1 -1
- package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
- package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
- package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
- package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
- package/lib/cjs/ecschema-editing.js.map +1 -1
- package/package.json +9 -9
- package/public/locales/en/ECSchemaEditing.json +26 -26
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyCategoryMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyCategoryMerger.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACU,QAAA,sBAAsB,GAAwD;IACzF,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YAChF,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;SACrC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAA6B;QAClE,IAAG,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5C,uGAAuG;YACvG,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"PropertyCategoryMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyCategoryMerger.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACU,QAAA,sBAAsB,GAAwD;IACzF,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YAChF,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;SACrC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAA6B;QAClE,IAAG,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC5C,uGAAuG;YACvG,MAAM,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;CACF,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 MutablePropertyCategory } from \"../Editing/Mutable/MutablePropertyCategory\";\nimport { type PropertyCategoryDifference } from \"../Differencing/SchemaDifference\";\nimport { type SchemaItemMergerHandler } from \"./SchemaItemMerger\";\n\n/**\n * Defines a merge handler to merge PropertyCategory schema items.\n * @internal\n */\nexport const propertyCategoryMerger: SchemaItemMergerHandler<PropertyCategoryDifference> = {\n async add(context, change) {\n if (change.difference.priority === undefined) {\n throw new Error(\"PropertyCategory must define priority\");\n }\n\n return context.editor.propertyCategories.createFromProps(context.targetSchemaKey, {\n ...change.difference,\n name: change.itemName,\n schemaItemType: change.schemaType,\n priority: change.difference.priority,\n });\n },\n async modify(context, change, itemKey, item: MutablePropertyCategory) {\n if(change.difference.label !== undefined) {\n item.setDisplayLabel(change.difference.label);\n }\n if(change.difference.description !== undefined) {\n item.setDescription(change.difference.description);\n }\n if(change.difference.priority !== undefined) {\n // TODO: inconsistency: setPriority does not return a result whether the priority was set successfully.\n await context.editor.propertyCategories.setPriority(itemKey, change.difference.priority);\n }\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport type { 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
|
+
{"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 { 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<void>;\n merge(context: SchemaMergeContext, itemKey: SchemaItemKey, property: AnyProperty, props: T): Promise<void>;\n}\n\n/**\n * @internal\n */\nexport async function mergePropertyDifference(context: SchemaMergeContext, change: ClassPropertyDifference): Promise<void> {\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<void> {\n for (const property of change.difference.properties || []) {\n await mergeClassProperty(context, change, itemKey, property);\n }\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<void> {\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 await createProperty(context, itemKey, property);\n\n if (property.customAttributes !== undefined) {\n await applyCustomAttributes(context, property.customAttributes as CustomAttribute[], async (ca) => {\n const classEditor = await getClassEditor(context, itemKey);\n await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);\n });\n }\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<void> {\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 throw new Error(`Couldn't find property ${propertyProps.name} on class ${itemKey.name}`);\n }\n\n if (propertyProps.type !== undefined) {\n throw new Error(`Changing the property '${property.fullName}' type is not supported.`);\n }\n if (propertyProps.kindOfQuantity !== undefined) {\n throw new Error(`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\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<void> {\n const enumerationKey = await updateSchemaItemKey(context, property.typeName);\n const enumerationType = await context.editor.schemaContext.getSchemaItem<Enumeration>(enumerationKey);\n if (enumerationType === undefined) {\n throw new Error(`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\n arrayProperty.is(property)\n ? await classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)\n : await classEditor.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);\n },\n async merge(context, itemKey, property, props) {\n if (\"enumeration\" in props && props.enumeration !== undefined) {\n throw new Error(`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<void> {\n const relationshipKey = await updateSchemaItemKey(context, property.relationshipName);\n const relationshipType = await context.editor.schemaContext.getSchemaItem<RelationshipClass>(relationshipKey);\n if (relationshipType === undefined) {\n throw new Error(`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 throw new Error(`Navigation property can't be added to ${ecClass.schemaItemType}.`);\n },\n async merge(_context, _itemKey, property, props) {\n if (props.direction !== undefined) {\n throw new Error(`Changing the property '${property.fullName}' direction is not supported.`);\n }\n if (\"relationshipClass\" in props && props.relationshipClass !== undefined) {\n throw new Error(`Changing the property '${property.fullName}' relationship class is not supported.`);\n }\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<void> {\n const propertyType = parsePrimitiveType(property.typeName);\n if (propertyType === undefined) {\n throw new Error(`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 throw new Error(`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 },\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<void> {\n const structKey = await updateSchemaItemKey(context, property.typeName);\n const structType = await context.editor.schemaContext.getSchemaItem<StructClass>(structKey);\n if (structType === undefined) {\n throw new Error(`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 throw new Error(`Changing the property '${property.fullName}' structClass is not supported.`);\n }\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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, updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\nimport { modifyClass } from \"./ClassMerger\";\nimport { SchemaMergeContext } from \"./SchemaMerger\";\nimport { EntityClass, Mixin, parseStrength, parseStrengthDirection, RelationshipClass, RelationshipConstraintProps, RelationshipMultiplicity, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\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 throw new Error(\"RelationshipClass must define strength\");\n }\n if (change.difference.strengthDirection === undefined) {\n throw new Error(\"RelationshipClass must define strengthDirection\");\n }\n if (change.difference.source === undefined) {\n throw new Error(\"RelationshipClass must define a source constraint\");\n }\n if (change.difference.target === undefined) {\n throw new Error(\"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: await updateRelationshipConstraintKey(context, change.difference.source),\n target: await updateRelationshipConstraintKey(context, change.difference.target),\n });\n },\n async modify(context, change, itemKey, item: MutableRelationshipClass) {\n await 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 throw new Error(`An invalid relationship class strength value '${change.difference.strength}' has been provided.`);\n }\n item.setStrength(strength);\n }\n throw new Error(`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 throw new Error(`An invalid relationship class strengthDirection value '${change.difference.strengthDirection}' has been provided.`);\n }\n item.setStrengthDirection(strengthDirection);\n }\n throw new Error(`Changing the relationship '${itemKey.name}' strengthDirection is not supported.`);\n }\n }\n await 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 throw new Error(\"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 await context.editor.relationships.setConstraintPolymorphic(constraint, change.difference.polymorphic);\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 throw new Error(`An invalid relationship constraint multiplicity value '${change.difference.multiplicity}' has been provided.`);\n }\n await context.editor.relationships.setConstraintMultiplicity(constraint, multiplicity);\n }\n throw new Error(`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 throw new Error(`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<void> {\n if(change.changeType !== \"add\") {\n throw new Error(`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 throw new Error(`Could not locate relationship constraint class ${constraintClassKey.name}`);\n }\n\n await context.editor.relationships.addConstraintClass(constraint, constraintClass);\n }\n}\n\nfunction parseConstraint(path: string): \"source\" | \"target\" {\n return path.startsWith(\"$source\")\n ? \"source\"\n : \"target\";\n}\n\nasync function updateRelationshipConstraintKey(context: SchemaMergeContext, props: RelationshipConstraintProps): Promise<RelationshipConstraintProps> {\n let abstractConstraint = props.abstractConstraint;\n if (abstractConstraint !== undefined)\n abstractConstraint = await updateSchemaItemFullName(context, abstractConstraint);\n\n const constraintClasses: string[] = [];\n for (const ecClass of props.constraintClasses) {\n constraintClasses.push(await updateSchemaItemFullName(context, ecClass));\n }\n\n return {\n ...props,\n abstractConstraint,\n constraintClasses,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
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 } 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\nimport * as Utils from \"../Differencing/Utils\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport interface SchemaItemMergerHandler<T extends AnySchemaItemDifference | AnySchemaItemPathDifference> {\r\n add: (context: SchemaMergeContext, difference: T) => Promise<SchemaItemKey>;\r\n modify: (context: SchemaMergeContext, difference: 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, difference: T, merger: SchemaItemMergerHandler<T>): Promise<void> {\r\n if (difference.changeType === \"add\") {\r\n await merger.add(context, difference);\r\n return;\r\n }\r\n\r\n if (difference.changeType === \"modify\") {\r\n const schemaItem = await locateSchemaItem(context, difference.itemName, difference.schemaType);\r\n return merger.modify(context, difference, schemaItem.key, schemaItem);\r\n }\r\n\r\n throw new Error(`The merger does not support ${difference.changeType} of ${difference.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 differences 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, differences: AnySchemaDifference[]) {\r\n for (const difference of differences.filter(Utils.isUnitSystemDifference)) {\r\n yield await mergeSchemaItem(context, difference, unitSystemMerger);\r\n }\r\n\r\n for (const difference of differences.filter(Utils.isPropertyCategoryDifference)) {\r\n yield await mergeSchemaItem(context, difference, propertyCategoryMerger);\r\n }\r\n\r\n for (const difference of differences.filter(Utils.isEnumerationDifference)) {\r\n yield await mergeSchemaItem(context, difference, enumerationMerger);\r\n }\r\n\r\n for (const difference of differences.filter(Utils.isEnumeratorDifference)) {\r\n yield await mergeSchemaItem(context, difference, enumeratorMerger);\r\n }\r\n\r\n for (const difference of differences.filter(Utils.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 differences.filter(Utils.isKindOfQuantityDifference)) {\r\n yield await mergeSchemaItem(context, difference, kindOfQuantityMerger);\r\n }\r\n\r\n for (const difference of differences.filter(Utils.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, differences)) {\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
|
+
{"version":3,"file":"SchemaItemMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaItemMerger.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 { SchemaMergeContext } from \"./SchemaMerger\";\nimport { AnySchemaDifference, AnySchemaItemDifference, AnySchemaItemPathDifference } 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\";\nimport * as Utils from \"../Differencing/Utils\";\n\n/**\n * @internal\n */\nexport interface SchemaItemMergerHandler<T extends AnySchemaItemDifference | AnySchemaItemPathDifference> {\n add: (context: SchemaMergeContext, difference: T) => Promise<SchemaItemKey>;\n modify: (context: SchemaMergeContext, difference: T, itemKey: SchemaItemKey, item: any) => Promise<void>;\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, difference: T, merger: SchemaItemMergerHandler<T>): Promise<void> {\n if (difference.changeType === \"add\") {\n await merger.add(context, difference);\n return;\n }\n\n if (difference.changeType === \"modify\") {\n const schemaItem = await locateSchemaItem(context, difference.itemName, difference.schemaType);\n return merger.modify(context, difference, schemaItem.key, schemaItem);\n }\n\n throw new Error(`The merger does not support ${difference.changeType} of ${difference.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 differences 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, differences: AnySchemaDifference[]) {\n for (const difference of differences.filter(Utils.isUnitSystemDifference)) {\n yield await mergeSchemaItem(context, difference, unitSystemMerger);\n }\n\n for (const difference of differences.filter(Utils.isPropertyCategoryDifference)) {\n yield await mergeSchemaItem(context, difference, propertyCategoryMerger);\n }\n\n for (const difference of differences.filter(Utils.isEnumerationDifference)) {\n yield await mergeSchemaItem(context, difference, enumerationMerger);\n }\n\n for (const difference of differences.filter(Utils.isEnumeratorDifference)) {\n yield await mergeSchemaItem(context, difference, enumeratorMerger);\n }\n\n for (const difference of differences.filter(Utils.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 differences.filter(Utils.isKindOfQuantityDifference)) {\n yield await mergeSchemaItem(context, difference, kindOfQuantityMerger);\n }\n\n for (const difference of differences.filter(Utils.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, differences)) {\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAAiF;AACjF,8CAAwD;AACxD,mDAA8D;AAC9D,uEAAsJ;AAEtJ,mEAA+D;AAC/D,yDAAsD;AACtD,mEAAgE;AAChE,+CAA+C;AAa/C;;;;GAIG;AACH,MAAa,YAAY;IAIvB;;;OAGG;IACH,YAAY,cAA6B;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,4BAAmB,CAAC,cAAc,CAAC,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,YAAY,CAAC,YAAoB,EAAE,YAAoB,EAAE,KAAmB;QACvF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,IAAA,uCAAoB,EAAC,YAAY,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;IACnF,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,KAAK,CAAC,gBAAwC,EAAE,KAAmB;QAC9E,MAAM,eAAe,GAAG,6BAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QACjF,MAAM,eAAe,GAAG,6BAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;QAEjF,oGAAoG;QACpG,iEAAiE;QACjE,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,OAAO,CAAC,gBAAgB,GAAG,EAAE,GAAG,gBAAgB,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,gBAAgB,CAAC,SAAS,IAAI,gBAAgB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,MAAM,IAAI,6BAAoB,CAC5B,6DAA6D,EAC7D,gBAAgB,CAAC,SAAS,EAC1B,eAAe,EACf,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,sBAAsB,eAAe,CAAC,IAAI,8CAA8C,CAAC,CAAC;QAC5G,CAAC;QAED,MAAM,OAAO,GAAuB;YAClC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,YAAY,EAAE,MAAM;YACpB,eAAe;YACf,eAAe;SAChB,CAAC;QAEF,MAAM,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAEpE,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAjED,oCAiEC;AAED;;;;;GAKG;AACH,KAAK,UAAU,sBAAsB,CAAC,OAA2B,EAAE,WAAkC;IACnG,KAAK,MAAM,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC;QACxF,MAAM,IAAA,6CAAqB,EAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,MAAM,gBAAgB,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC5E,MAAM,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;IACzD,CAAC;IAED,0FAA0F;IAC1F,2BAA2B;IAC3B,IAAI,KAAK,EAAE,MAAM,YAAY,IAAI,IAAA,mCAAgB,EAAC,OAAO,EAAE,WAAW,CAAC,EAAE,CAAC;IAC1E,CAAC;IAED,0FAA0F;IAC1F,+DAA+D;IAC/D,KAAK,MAAM,yBAAyB,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC;QAC9F,MAAM,IAAA,4CAAoB,EAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IACjE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,qBAAqB,CAAC,OAA2B,EAAE,EAAE,UAAU,EAAoB;IAChG,IAAI,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
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 { SchemaConflictsError } from \"../Differencing/Errors\";\nimport { type AnySchemaDifference, getSchemaDifferences, type SchemaDifference, type SchemaDifferenceResult } from \"../Differencing/SchemaDifference\";\nimport { type SchemaEdits } from \"./Edits/SchemaEdits\";\nimport { mergeCustomAttribute } from \"./CustomAttributeMerger\";\nimport { mergeSchemaItems } from \"./SchemaItemMerger\";\nimport { mergeSchemaReferences } from \"./SchemaReferenceMerger\";\nimport * as Utils from \"../Differencing/Utils\";\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]] or [[mergeSchemas]] to merge two schemas together.\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 * @param edits An optional instance of schema edits that shall be applied before the schemas get merged.\n * @returns The merged target schema.\n * @alpha\n */\n public async mergeSchemas(targetSchema: Schema, sourceSchema: Schema, edits?: SchemaEdits): Promise<Schema> {\n return this.merge(await getSchemaDifferences(targetSchema, sourceSchema), edits);\n }\n\n /**\n * Merges the schema differences into the target schema context.\n * @param differenceResult The differences that shall be applied to the target schema.\n * @param edits An optional instance of schema edits that shall be applied before the schemas get merged.\n * @alpha\n */\n public async merge(differenceResult: SchemaDifferenceResult, edits?: SchemaEdits): Promise<Schema> {\n const targetSchemaKey = SchemaKey.parseString(differenceResult.targetSchemaName);\n const sourceSchemaKey = SchemaKey.parseString(differenceResult.sourceSchemaName);\n\n // If schema changes were provided, they'll get applied and a new SchemaDifferenceResult is returned\n // to prevent altering the differenceResult the caller passed in.\n if (edits) {\n await edits.applyTo(differenceResult = { ...differenceResult });\n }\n\n if (differenceResult.conflicts && differenceResult.conflicts.length > 0) {\n throw new SchemaConflictsError(\n \"Schema's can't be merged if there are unresolved conflicts.\",\n differenceResult.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 const context: SchemaMergeContext = {\n editor: this._editor,\n targetSchema: schema,\n targetSchemaKey,\n sourceSchemaKey,\n };\n\n await mergeSchemaDifferences(context, differenceResult.differences);\n\n return schema;\n }\n}\n\n/**\n * Merges the schema differences in the target schema.\n * @param context The current merging context.\n * @param differences The differences between a source schema and the target schema.\n * @internal\n */\nasync function mergeSchemaDifferences(context: SchemaMergeContext, differences: AnySchemaDifference[]): Promise<void> {\n for (const referenceDifference of differences.filter(Utils.isSchemaReferenceDifference)) {\n await mergeSchemaReferences(context, referenceDifference);\n }\n\n for (const schemaDifference of differences.filter(Utils.isSchemaDifference)) {\n await mergeSchemaProperties(context, 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)) {\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 customAttributeDifference of differences.filter(Utils.isCustomAttributeDifference)) {\n await mergeCustomAttribute(context, customAttributeDifference);\n }\n}\n\n/**\n * Sets the editable properties of a Schema.\n * @internal\n */\nasync function mergeSchemaProperties(context: SchemaMergeContext, { difference }: SchemaDifference) {\n if (difference.label !== undefined) {\n await context.editor.setDisplayLabel(context.targetSchemaKey, difference.label);\n }\n if (difference.description !== undefined) {\n await context.editor.setDescription(context.targetSchemaKey, difference.description);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaReferenceMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaReferenceMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"SchemaReferenceMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaReferenceMerger.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 { ECVersion, Schema, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\nimport { type SchemaMergeContext } from \"./SchemaMerger\";\nimport { type SchemaReferenceDifference } from \"../Differencing/SchemaDifference\";\nimport { type SchemaContextEditor } from \"../Editing/Editor\";\n\n/**\n * Merges the schema references of two schemas.\n * @param context current merge context\n * @param change schema changes.\n * @internal\n */\nexport async function mergeSchemaReferences(context: SchemaMergeContext, change: SchemaReferenceDifference) {\n // If the target schema does not have a reference to a schema yet, it can be added\n // but should be checked if it's schema references have collisions with existing references.\n if(change.changeType === \"add\") {\n const referencedSchema = await locateSchema(context.editor, change.difference.name, change.difference.version);\n await context.editor.addSchemaReference(context.targetSchemaKey, referencedSchema);\n }\n\n // If the source schema referenced a schema that is also referenced by the target\n // schema but in a different version, it is marked as delta. Here we need to check if\n // the source schema is compatible to the existing one. This is not be checked by the\n // schema instance when added.\n if(change.changeType === \"modify\") {\n const referencedSchema = await locateSchema(context.editor, change.difference.name, change.difference.version);\n const existingSchema = (await context.targetSchema.getReference(referencedSchema.name))!;\n\n const [older, latest] = compareSchemas(existingSchema, referencedSchema);\n if(!latest.schemaKey.matches(older.schemaKey, SchemaMatchType.LatestWriteCompatible)) {\n throw new Error(`Schemas references of ${referencedSchema.name} have incompatible versions: ${older.schemaKey.version} and ${latest.schemaKey.version}`);\n }\n\n if(latest === existingSchema) {\n return;\n }\n\n const index = context.targetSchema.references.findIndex((reference) => reference === existingSchema);\n context.targetSchema.references.splice(index, 1);\n\n await context.editor.addSchemaReference(context.targetSchema.schemaKey, referencedSchema);\n }\n}\n\n/**\n * Tries to locate the Schema in the current Context\n * @param editor Current editor context.\n * @param schemaName The schema name to be looked up.\n * @param version The schemas version to beo looked up.\n * @returns The schema found in the context.\n */\nasync function locateSchema(editor: SchemaContextEditor, schemaName?: string, version?: string): Promise<Schema> {\n if(schemaName === undefined || version === undefined) {\n throw new Error(\"Schema name and version must not be undefined.\");\n }\n\n const schemaKey = new SchemaKey(schemaName, ECVersion.fromString(version));\n const schema = await editor.schemaContext.getSchema(schemaKey, SchemaMatchType.LatestWriteCompatible);\n if(schema === undefined) {\n throw new Error(`Referenced schema ${schemaKey.toString()} could not be found in target context`);\n }\n return schema;\n}\n\n/**\n * Compares the schemas and return them in order of their versions [older, latest].\n * @param left The first schema to be added.\n * @param right The second schema to be added.\n * @returns The schemas in order.\n */\nfunction compareSchemas(left: Schema, right: Schema): [Schema, Schema] {\n return left.schemaKey.compareByVersion(right.schemaKey) < 0\n ? [left, right]\n : [right, left];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnitSystemMerger.js","sourceRoot":"","sources":["../../../src/Merging/UnitSystemMerger.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACzE,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;SAClC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAuB;QAC9D,IAAG,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"UnitSystemMerger.js","sourceRoot":"","sources":["../../../src/Merging/UnitSystemMerger.ts"],"names":[],"mappings":";;;AAQA;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACzE,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;SAClC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAuB;QAC9D,IAAG,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF,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 MutableUnitSystem } from \"../Editing/Mutable/MutableUnitSystem\";\nimport { type SchemaItemMergerHandler } from \"./SchemaItemMerger\";\nimport { type UnitSystemDifference } from \"../Differencing/SchemaDifference\";\n\n/**\n * Defines a merge handler to merge UnitSystem schema items.\n * @internal\n */\nexport const unitSystemMerger: SchemaItemMergerHandler<UnitSystemDifference> = {\n async add(context, change) {\n return context.editor.unitSystems.createFromProps(context.targetSchemaKey, {\n ...change.difference,\n name: change.itemName,\n schemaItemType: change.schemaType,\n });\n },\n async modify(_context, change, _itemKey, item: MutableUnitSystem) {\n if(change.difference.label !== undefined) {\n item.setDisplayLabel(change.difference.label);\n }\n if(change.difference.description !== undefined) {\n item.setDescription(change.difference.description);\n }\n },\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Diagnostic.js","sourceRoot":"","sources":["../../../src/Validation/Diagnostic.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 Diagnostic\r\n */\r\n\r\nimport { AnyClass, AnyECType, AnyProperty, CustomAttributeContainerProps, RelationshipConstraint, Schema, SchemaItem } from \"@itwin/ecschema-metadata\";\r\n\r\n/* eslint-disable @typescript-eslint/no-shadow */\r\n\r\nconst formatString = (format: string, ...args: string[]) => {\r\n return format.replace(/{(\\d+)}/g, (match, theNumber) => {\r\n return typeof args[theNumber] !== \"undefined\"\r\n ? args[theNumber]\r\n : match;\r\n });\r\n};\r\n\r\n/**\r\n * Defines the possible diagnostic types.\r\n * @beta\r\n */\r\nexport enum DiagnosticType {\r\n None,\r\n Schema, // eslint-disable-line @typescript-eslint/no-shadow\r\n SchemaItem, // eslint-disable-line @typescript-eslint/no-shadow\r\n Property,\r\n CustomAttributeContainer,\r\n RelationshipConstraint, // eslint-disable-line @typescript-eslint/no-shadow\r\n}\r\n\r\n/**\r\n * Defines the possible diagnostic categories.\r\n * @beta\r\n */\r\nexport enum DiagnosticCategory {\r\n Warning,\r\n Error,\r\n Suggestion,\r\n Message,\r\n}\r\n\r\n/**\r\n * The interface implemented by all diagnostics used during schema validation.\r\n * @beta\r\n */\r\nexport interface IDiagnostic<TYPE extends AnyECType, ARGS extends any[]> {\r\n /** The diagnostic category (error, warning, etc...). Value is static across all instances. */\r\n category: DiagnosticCategory;\r\n /** The unique string identifier of the diagnostic in the format '<ruleSetName>:<number>. Value is static across all instances. */\r\n code: string;\r\n /** The context type of diagnostic (schema, schema item, property, etc...). Value is static across all instances. */\r\n diagnosticType: DiagnosticType;\r\n /** The unformatted message text associated with the diagnostic. Value is static across all instances. */\r\n messageText: string;\r\n /** The arguments used when formatted the diagnostic instance's message. */\r\n messageArgs?: ARGS;\r\n /** The EC object associated with the diagnostic instance. */\r\n ecDefinition: TYPE;\r\n /** The schema where the diagnostic originated. */\r\n schema: Schema;\r\n}\r\n\r\n/**\r\n * Type which encapsulates all possible diagnostics.\r\n * @beta\r\n */\r\nexport type AnyDiagnostic = IDiagnostic<AnyECType, any[]>;\r\n\r\n/**\r\n * The abstract base class for all [[IDiagnostic]] implementations.\r\n * @beta\r\n */\r\nexport abstract class BaseDiagnostic<TYPE extends AnyECType, ARGS extends any[]> implements IDiagnostic<TYPE, ARGS> {\r\n /**\r\n * Initializes a new BaseDiagnostic.\r\n * @param ecDefinition The EC object to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(ecDefinition: TYPE, messageArgs?: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n this.ecDefinition = ecDefinition;\r\n this.messageArgs = messageArgs;\r\n this.category = category;\r\n }\r\n\r\n /** Gets the unique string identifier for the diagnostic in the format '<ruleSetName>:<number>'. */\r\n public abstract get code(): string;\r\n /** Gets the context type of the diagnostic (schema, schema item, property, etc...) */\r\n public abstract get diagnosticType(): DiagnosticType;\r\n /** Gets the message associated with the diagnostic. */\r\n public abstract get messageText(): string;\r\n /** Gets the schema where the diagnostic originated. */\r\n public abstract get schema(): Schema;\r\n\r\n /** The EC object to associate with the diagnostic. */\r\n public ecDefinition: TYPE;\r\n /** The arguments used when formatting the diagnostic message. */\r\n public messageArgs?: ARGS;\r\n /** The diagnostic category is of the type DiagnosticCategory; which is defined as an enumeration above. */\r\n public category: DiagnosticCategory;\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[Schema]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class SchemaDiagnostic<ARGS extends any[]> extends BaseDiagnostic<Schema, ARGS> {\r\n public static diagnosticType = DiagnosticType.SchemaItem;\r\n\r\n /**\r\n * Initializes a new SchemaDiagnostic.\r\n * @param ecDefinition The EC object to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(schema: Schema, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(schema, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public get schema(): Schema { return this.ecDefinition; }\r\n\r\n /** Gets the DiagnosticType. */\r\n public get diagnosticType(): DiagnosticType { return DiagnosticType.Schema; }\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[SchemaItem]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class SchemaItemDiagnostic<TYPE extends SchemaItem, ARGS extends any[]> extends BaseDiagnostic<TYPE, ARGS> {\r\n public static diagnosticType = DiagnosticType.SchemaItem;\r\n /**\r\n * Initializes a new SchemaItemDiagnostic.\r\n * @param ecDefinition The EC object to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(ecDefinition: SchemaItem, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(ecDefinition as TYPE, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public get schema(): Schema { return this.ecDefinition.schema; }\r\n\r\n /** Gets the DiagnosticType. */\r\n public get diagnosticType(): DiagnosticType { return DiagnosticType.SchemaItem; }\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[ECClass]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class ClassDiagnostic<ARGS extends any[]> extends SchemaItemDiagnostic<AnyClass, ARGS> {\r\n /**\r\n * Initializes a new ClassDiagnostic.\r\n * @param ecClass The class to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(ecClass: AnyClass, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(ecClass, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public override get schema(): Schema { return this.ecDefinition.schema; }\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[Property]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class PropertyDiagnostic<ARGS extends any[]> extends BaseDiagnostic<AnyProperty, ARGS> {\r\n /**\r\n * Initializes a new PropertyDiagnostic.\r\n * @param property The property to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(property: AnyProperty, messageArgs?: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(property, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public get schema(): Schema { return this.ecDefinition.schema; }\r\n\r\n /** Gets the DiagnosticType. */\r\n public get diagnosticType(): DiagnosticType { return DiagnosticType.Property; }\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[RelationshipConstraint]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class RelationshipConstraintDiagnostic<ARGS extends any[]> extends BaseDiagnostic<RelationshipConstraint, ARGS> {\r\n /**\r\n * Initializes a new RelationshipConstraintDiagnostic.\r\n * @param constraint The Relationship Constraint to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(constraint: RelationshipConstraint, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(constraint, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public get schema(): Schema { return this.ecDefinition.schema; }\r\n\r\n /** Gets the DiagnosticType. */\r\n public get diagnosticType(): DiagnosticType { return DiagnosticType.RelationshipConstraint; }\r\n}\r\n\r\n/**\r\n * An [[IDiagnostic]] implementation used for [[CustomAttributeContainerProps]] diagnostics.\r\n * @beta\r\n */\r\nexport abstract class CustomAttributeContainerDiagnostic<ARGS extends any[]> extends BaseDiagnostic<CustomAttributeContainerProps, ARGS> {\r\n /**\r\n * Initializes a new CustomAttributeContainerDiagnostic.\r\n * @param constraint The Custom Attribute Container to associate with the diagnostic.\r\n * @param messageArgs The arguments used when formatting the diagnostic message.\r\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\r\n */\r\n constructor(container: CustomAttributeContainerProps, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\r\n super(container, messageArgs, category);\r\n }\r\n\r\n /** Gets the schema where the diagnostic originated. */\r\n public get schema(): Schema { return this.ecDefinition.schema; }\r\n\r\n /** Gets the DiagnosticType. */\r\n public get diagnosticType(): DiagnosticType { return DiagnosticType.CustomAttributeContainer; }\r\n}\r\n\r\n/**\r\n * Helper method for creating [[SchemaDiagnostic]] child classes.\r\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createSchemaDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends SchemaDiagnostic<ARGS> {\r\n public static code = code;\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/**\r\n * Helper method for creating [[SchemaItemDiagnostic]] child classes.\r\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createSchemaItemDiagnosticClass<ITEM extends SchemaItem, ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends SchemaItemDiagnostic<ITEM, ARGS> {\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/**\r\n * Helper method for creating [[ClassDiagnostic]] child classes.\r\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createClassDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends ClassDiagnostic<ARGS> {\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/**\r\n * Helper method for creating [[PropertyDiagnostic]] child classes.\r\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createPropertyDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends PropertyDiagnostic<ARGS> {\r\n public static code = code;\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/**\r\n * Helper method for creating [[RelationshipConstraintDiagnostic]] child classes.\r\n * @param code The string that uniquely identifies the type of diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createRelationshipConstraintDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends RelationshipConstraintDiagnostic<ARGS> {\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/**\r\n * Helper method for creating [[CustomAttributeContainerDiagnostic]] child classes.\r\n * @param code The that uniquely identifies the type of diagnostic in the format '<ruleSetName>:<number>'.\r\n * @param messageText The message to associate with the diagnostic class.\r\n * @beta\r\n */\r\nexport function createCustomAttributeContainerDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\r\n validateCode(code);\r\n return class extends CustomAttributeContainerDiagnostic<ARGS> {\r\n public get code(): string { return code; }\r\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\r\n };\r\n}\r\n\r\n/** @beta */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory) {\r\n switch (category) {\r\n case DiagnosticCategory.Error:\r\n return \"Error\";\r\n case DiagnosticCategory.Warning:\r\n return \"Warning\";\r\n case DiagnosticCategory.Message:\r\n return \"Message\";\r\n case DiagnosticCategory.Suggestion:\r\n return \"Suggestion\";\r\n }\r\n}\r\n\r\n/** @beta */\r\nexport function diagnosticTypeToString(type: DiagnosticType) {\r\n switch (type) {\r\n case DiagnosticType.CustomAttributeContainer:\r\n return \"CustomAttributeContainer\";\r\n case DiagnosticType.None:\r\n return \"None\";\r\n case DiagnosticType.Property:\r\n return \"Property\";\r\n case DiagnosticType.RelationshipConstraint:\r\n return \"RelationshipConstraint\";\r\n case DiagnosticType.Schema:\r\n return \"Schema\";\r\n case DiagnosticType.SchemaItem:\r\n return \"SchemaItem\";\r\n }\r\n}\r\n\r\nfunction validateCode(code: string) {\r\n const msg = `Diagnostic code ${code} is invalid. Expected the format <ruleSetName>-<number>.`;\r\n const parts = code.split(\"-\");\r\n if (parts.length !== 2)\r\n throw new Error(msg);\r\n\r\n if (isNaN(Number(parts[1])))\r\n throw new Error(msg);\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Diagnostic.js","sourceRoot":"","sources":["../../../src/Validation/Diagnostic.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 Diagnostic\n */\n\nimport { AnyClass, AnyECType, AnyProperty, CustomAttributeContainerProps, RelationshipConstraint, Schema, SchemaItem } from \"@itwin/ecschema-metadata\";\n\n/* eslint-disable @typescript-eslint/no-shadow */\n\nconst formatString = (format: string, ...args: string[]) => {\n return format.replace(/{(\\d+)}/g, (match, theNumber) => {\n return typeof args[theNumber] !== \"undefined\"\n ? args[theNumber]\n : match;\n });\n};\n\n/**\n * Defines the possible diagnostic types.\n * @beta\n */\nexport enum DiagnosticType {\n None,\n Schema, // eslint-disable-line @typescript-eslint/no-shadow\n SchemaItem, // eslint-disable-line @typescript-eslint/no-shadow\n Property,\n CustomAttributeContainer,\n RelationshipConstraint, // eslint-disable-line @typescript-eslint/no-shadow\n}\n\n/**\n * Defines the possible diagnostic categories.\n * @beta\n */\nexport enum DiagnosticCategory {\n Warning,\n Error,\n Suggestion,\n Message,\n}\n\n/**\n * The interface implemented by all diagnostics used during schema validation.\n * @beta\n */\nexport interface IDiagnostic<TYPE extends AnyECType, ARGS extends any[]> {\n /** The diagnostic category (error, warning, etc...). Value is static across all instances. */\n category: DiagnosticCategory;\n /** The unique string identifier of the diagnostic in the format '<ruleSetName>:<number>. Value is static across all instances. */\n code: string;\n /** The context type of diagnostic (schema, schema item, property, etc...). Value is static across all instances. */\n diagnosticType: DiagnosticType;\n /** The unformatted message text associated with the diagnostic. Value is static across all instances. */\n messageText: string;\n /** The arguments used when formatted the diagnostic instance's message. */\n messageArgs?: ARGS;\n /** The EC object associated with the diagnostic instance. */\n ecDefinition: TYPE;\n /** The schema where the diagnostic originated. */\n schema: Schema;\n}\n\n/**\n * Type which encapsulates all possible diagnostics.\n * @beta\n */\nexport type AnyDiagnostic = IDiagnostic<AnyECType, any[]>;\n\n/**\n * The abstract base class for all [[IDiagnostic]] implementations.\n * @beta\n */\nexport abstract class BaseDiagnostic<TYPE extends AnyECType, ARGS extends any[]> implements IDiagnostic<TYPE, ARGS> {\n /**\n * Initializes a new BaseDiagnostic.\n * @param ecDefinition The EC object to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(ecDefinition: TYPE, messageArgs?: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n this.ecDefinition = ecDefinition;\n this.messageArgs = messageArgs;\n this.category = category;\n }\n\n /** Gets the unique string identifier for the diagnostic in the format '<ruleSetName>:<number>'. */\n public abstract get code(): string;\n /** Gets the context type of the diagnostic (schema, schema item, property, etc...) */\n public abstract get diagnosticType(): DiagnosticType;\n /** Gets the message associated with the diagnostic. */\n public abstract get messageText(): string;\n /** Gets the schema where the diagnostic originated. */\n public abstract get schema(): Schema;\n\n /** The EC object to associate with the diagnostic. */\n public ecDefinition: TYPE;\n /** The arguments used when formatting the diagnostic message. */\n public messageArgs?: ARGS;\n /** The diagnostic category is of the type DiagnosticCategory; which is defined as an enumeration above. */\n public category: DiagnosticCategory;\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[Schema]] diagnostics.\n * @beta\n */\nexport abstract class SchemaDiagnostic<ARGS extends any[]> extends BaseDiagnostic<Schema, ARGS> {\n public static diagnosticType = DiagnosticType.SchemaItem;\n\n /**\n * Initializes a new SchemaDiagnostic.\n * @param ecDefinition The EC object to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(schema: Schema, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(schema, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public get schema(): Schema { return this.ecDefinition; }\n\n /** Gets the DiagnosticType. */\n public get diagnosticType(): DiagnosticType { return DiagnosticType.Schema; }\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[SchemaItem]] diagnostics.\n * @beta\n */\nexport abstract class SchemaItemDiagnostic<TYPE extends SchemaItem, ARGS extends any[]> extends BaseDiagnostic<TYPE, ARGS> {\n public static diagnosticType = DiagnosticType.SchemaItem;\n /**\n * Initializes a new SchemaItemDiagnostic.\n * @param ecDefinition The EC object to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(ecDefinition: SchemaItem, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(ecDefinition as TYPE, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public get schema(): Schema { return this.ecDefinition.schema; }\n\n /** Gets the DiagnosticType. */\n public get diagnosticType(): DiagnosticType { return DiagnosticType.SchemaItem; }\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[ECClass]] diagnostics.\n * @beta\n */\nexport abstract class ClassDiagnostic<ARGS extends any[]> extends SchemaItemDiagnostic<AnyClass, ARGS> {\n /**\n * Initializes a new ClassDiagnostic.\n * @param ecClass The class to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(ecClass: AnyClass, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(ecClass, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public override get schema(): Schema { return this.ecDefinition.schema; }\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[Property]] diagnostics.\n * @beta\n */\nexport abstract class PropertyDiagnostic<ARGS extends any[]> extends BaseDiagnostic<AnyProperty, ARGS> {\n /**\n * Initializes a new PropertyDiagnostic.\n * @param property The property to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(property: AnyProperty, messageArgs?: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(property, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public get schema(): Schema { return this.ecDefinition.schema; }\n\n /** Gets the DiagnosticType. */\n public get diagnosticType(): DiagnosticType { return DiagnosticType.Property; }\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[RelationshipConstraint]] diagnostics.\n * @beta\n */\nexport abstract class RelationshipConstraintDiagnostic<ARGS extends any[]> extends BaseDiagnostic<RelationshipConstraint, ARGS> {\n /**\n * Initializes a new RelationshipConstraintDiagnostic.\n * @param constraint The Relationship Constraint to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(constraint: RelationshipConstraint, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(constraint, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public get schema(): Schema { return this.ecDefinition.schema; }\n\n /** Gets the DiagnosticType. */\n public get diagnosticType(): DiagnosticType { return DiagnosticType.RelationshipConstraint; }\n}\n\n/**\n * An [[IDiagnostic]] implementation used for [[CustomAttributeContainerProps]] diagnostics.\n * @beta\n */\nexport abstract class CustomAttributeContainerDiagnostic<ARGS extends any[]> extends BaseDiagnostic<CustomAttributeContainerProps, ARGS> {\n /**\n * Initializes a new CustomAttributeContainerDiagnostic.\n * @param constraint The Custom Attribute Container to associate with the diagnostic.\n * @param messageArgs The arguments used when formatting the diagnostic message.\n * @param category The [[DiagnosticCategory]] to associate with the diagnostic, Error by default.\n */\n constructor(container: CustomAttributeContainerProps, messageArgs: ARGS, category: DiagnosticCategory = DiagnosticCategory.Error) {\n super(container, messageArgs, category);\n }\n\n /** Gets the schema where the diagnostic originated. */\n public get schema(): Schema { return this.ecDefinition.schema; }\n\n /** Gets the DiagnosticType. */\n public get diagnosticType(): DiagnosticType { return DiagnosticType.CustomAttributeContainer; }\n}\n\n/**\n * Helper method for creating [[SchemaDiagnostic]] child classes.\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createSchemaDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends SchemaDiagnostic<ARGS> {\n public static code = code;\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/**\n * Helper method for creating [[SchemaItemDiagnostic]] child classes.\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createSchemaItemDiagnosticClass<ITEM extends SchemaItem, ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends SchemaItemDiagnostic<ITEM, ARGS> {\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/**\n * Helper method for creating [[ClassDiagnostic]] child classes.\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createClassDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends ClassDiagnostic<ARGS> {\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/**\n * Helper method for creating [[PropertyDiagnostic]] child classes.\n * @param code The string that uniquely identifies the diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createPropertyDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends PropertyDiagnostic<ARGS> {\n public static code = code;\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/**\n * Helper method for creating [[RelationshipConstraintDiagnostic]] child classes.\n * @param code The string that uniquely identifies the type of diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createRelationshipConstraintDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends RelationshipConstraintDiagnostic<ARGS> {\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/**\n * Helper method for creating [[CustomAttributeContainerDiagnostic]] child classes.\n * @param code The that uniquely identifies the type of diagnostic in the format '<ruleSetName>:<number>'.\n * @param messageText The message to associate with the diagnostic class.\n * @beta\n */\nexport function createCustomAttributeContainerDiagnosticClass<ARGS extends any[]>(code: string, messageText: string) {\n validateCode(code);\n return class extends CustomAttributeContainerDiagnostic<ARGS> {\n public get code(): string { return code; }\n public get messageText(): string { return undefined === this.messageArgs ? messageText : formatString(messageText, ...this.messageArgs); }\n };\n}\n\n/** @beta */\nexport function diagnosticCategoryToString(category: DiagnosticCategory) {\n switch (category) {\n case DiagnosticCategory.Error:\n return \"Error\";\n case DiagnosticCategory.Warning:\n return \"Warning\";\n case DiagnosticCategory.Message:\n return \"Message\";\n case DiagnosticCategory.Suggestion:\n return \"Suggestion\";\n }\n}\n\n/** @beta */\nexport function diagnosticTypeToString(type: DiagnosticType) {\n switch (type) {\n case DiagnosticType.CustomAttributeContainer:\n return \"CustomAttributeContainer\";\n case DiagnosticType.None:\n return \"None\";\n case DiagnosticType.Property:\n return \"Property\";\n case DiagnosticType.RelationshipConstraint:\n return \"RelationshipConstraint\";\n case DiagnosticType.Schema:\n return \"Schema\";\n case DiagnosticType.SchemaItem:\n return \"SchemaItem\";\n }\n}\n\nfunction validateCode(code: string) {\n const msg = `Diagnostic code ${code} is invalid. Expected the format <ruleSetName>-<number>.`;\n const parts = code.split(\"-\");\n if (parts.length !== 2)\n throw new Error(msg);\n\n if (isNaN(Number(parts[1])))\n throw new Error(msg);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DiagnosticReporter.js","sourceRoot":"","sources":["../../../src/Validation/DiagnosticReporter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,iCAAkC;AAElC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAC9C,MAAM,kBAAkB,GAAG,GAAG,oBAAoB,IAAI,uBAAuB,EAAE,CAAC;AAwBhF;;;;;GAKG;AACH,MAAsB,6BAA6B;IAGjD;;;OAGG;IACH,YAAY,YAAoC;QAC9C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,UAAyB;QACrC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,eAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC5C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;CAQF;AAxCD,sEAwCC;AAED;;;;;GAKG;AACH,MAAsB,wBAAyB,SAAQ,6BAA6B;IAClF;;;;OAIG;IACH,YAAY,YAAoC,EAAE,YAA2B;QAC3E,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAKD;;;;OAIG;IACI,cAAc,CAAC,UAAyB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAUD;;;;;;OAMG;IACO,oBAAoB,CAAC,IAAY,EAAE,IAAuB,EAAE,SAAS,GAAG,CAAC;QACjF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEO,aAAa,CAAC,UAAyB;QAC7C,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE1D,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAC7D,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,gBAAgB,CAAC,UAAyB;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY;YACpB,OAAO,UAAU,CAAC,WAAW,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,iBAAiB,CAAC,UAAyB;QACjD,OAAO,GAAG,kBAAkB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAEO,aAAa,CAAI,KAA2B,EAAE,OAAgB;QACpE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YACvC,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,CAAU,CAAC;QAEzC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApED,4DAoEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"DiagnosticReporter.js","sourceRoot":"","sources":["../../../src/Validation/DiagnosticReporter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAKH,iCAAkC;AAElC,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAC9C,MAAM,kBAAkB,GAAG,GAAG,oBAAoB,IAAI,uBAAuB,EAAE,CAAC;AAwBhF;;;;;GAKG;AACH,MAAsB,6BAA6B;IAGjD;;;OAGG;IACH,YAAY,YAAoC;QAC9C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED;;;OAGG;IACH,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,UAAyB;QACrC,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC3E,IAAI,eAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;gBAC5C,OAAO;QACX,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;CAQF;AAxCD,sEAwCC;AAED;;;;;GAKG;AACH,MAAsB,wBAAyB,SAAQ,6BAA6B;IAClF;;;;OAIG;IACH,YAAY,YAAoC,EAAE,YAA2B;QAC3E,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAKD;;;;OAIG;IACI,cAAc,CAAC,UAAyB;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAUD;;;;;;OAMG;IACO,oBAAoB,CAAC,IAAY,EAAE,IAAuB,EAAE,SAAS,GAAG,CAAC;QACjF,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3G,CAAC;IAEO,aAAa,CAAC,UAAyB;QAC7C,IAAI,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE1D,IAAI,UAAU,CAAC,WAAW,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YAC7D,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3F,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAEO,gBAAgB,CAAC,UAAyB;QAChD,IAAI,CAAC,IAAI,CAAC,YAAY;YACpB,OAAO,UAAU,CAAC,WAAW,CAAC;QAEhC,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;IAClF,CAAC;IAEO,iBAAiB,CAAC,UAAyB;QACjD,OAAO,GAAG,kBAAkB,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;IACpD,CAAC;IAEO,aAAa,CAAI,KAA2B,EAAE,OAAgB;QACpE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YACvC,OAAO,MAAM,CAAC,KAAK,EAAE,OAAO,CAAU,CAAC;QAEzC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AApED,4DAoEC","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 Diagnostic\n */\n\nimport { Localization } from \"@itwin/core-common\";\nimport { AnyDiagnostic } from \"./Diagnostic\";\n\nimport assert = require(\"assert\");\n\nconst translationNamespace = \"ECSchemaMetaData\";\nconst subTranslationNamespace = \"Diagnostics\";\nconst baseTranslationKey = `${translationNamespace}:${subTranslationNamespace}`;\n\n/**\n * Interface used to report [[IDiagnostic]] objects created during schema validation.\n * @beta\n */\nexport interface IDiagnosticReporter {\n /**\n * A map where the key is a schema full name and the value is a collection\n * of diagnostics codes identifying which rules violations to ignore during validation.\n */\n suppressions?: Map<string, string[]>;\n\n /** The localization object to use for message translation. */\n localization?: Localization;\n\n /**\n * Handles the given [[IDiagnostic]] based on the implementation requirements for a\n * given reporter.\n * @param diagnostic The diagnostic to report.\n */\n report(diagnostic: AnyDiagnostic): void;\n}\n\n/**\n * An abstract base class for [[IDiagnosticReporter]] implementation that used the\n * provided Map to suppress certain rule violations from being reported. The Map's key\n * a schema full name, and the Map's value is a collection of rule codes to suppress.\n * @beta\n */\nexport abstract class SuppressionDiagnosticReporter implements IDiagnosticReporter {\n private _suppressions?: Map<string, string[]>;\n\n /**\n * Initializes a new SuppressionDiagnosticReporter\n * @param suppressions A Map where the key is a schema full name and the value is collection of diagnostic codes to suppress.\n */\n constructor(suppressions?: Map<string, string[]>) {\n this._suppressions = suppressions;\n }\n\n /**\n * Gets the collection of ISchemaDiagnosticSuppression objects that identify\n * rules violations to ignore during validation.\n */\n public get suppressions(): Map<string, string[]> | undefined {\n return this._suppressions;\n }\n\n /**\n * Prior to reporting the [[IDiagnostic]], the diagnostic message is formatted (with translations)\n * base on arguments contained in the diagnostic. Calls reportDiagnostic after the message is formatted.\n * @param diagnostic The diagnostic to report.\n */\n public report(diagnostic: AnyDiagnostic) {\n if (this._suppressions && this._suppressions.has(diagnostic.schema.fullName)) {\n const suppressedCodes = this._suppressions.get(diagnostic.schema.fullName);\n if (suppressedCodes!.includes(diagnostic.code))\n return;\n }\n\n this.reportInternal(diagnostic);\n }\n\n /**\n * Handles the given [[IDiagnostic]] based on the implementation requirements for a\n * given reporter.\n * @param diagnostic The diagnostic to report.\n */\n protected abstract reportInternal(diagnostic: AnyDiagnostic): void;\n}\n\n/**\n * An abstract [[SuppressionDiagnosticReporter]] implementation that formats the\n * diagnostic message with the message args. If a Localization implementation is specified,\n * the message will also be translated.\n * @beta\n */\nexport abstract class FormatDiagnosticReporter extends SuppressionDiagnosticReporter {\n /**\n * Initializes a new FormatDiagnosticReporter\n * @param suppressions A Map where the key is a schema full name and the value is collection of diagnostic codes to suppress.\n * @param localization The Localization instance to use to translate validation messages.\n */\n constructor(suppressions?: Map<string, string[]>, localization?: Localization) {\n super(suppressions);\n this.localization = localization;\n }\n\n /** The Localization object to use for message translation. If undefined, no translation will occur. */\n public localization?: Localization;\n\n /**\n * Prior to reporting the [[IDiagnostic]], the diagnostic message is formatted (with translations)\n * base on arguments contained in the diagnostic. Calls reportDiagnostic after the message is formatted.\n * @param diagnostic The diagnostic to report.\n */\n public reportInternal(diagnostic: AnyDiagnostic) {\n const message = this.formatMessage(diagnostic);\n this.reportDiagnostic(diagnostic, message);\n }\n\n /**\n * Handles the given [[IDiagnostic]] based on the implementation requirements for a\n * given reporter.\n * @param diagnostic The diagnostic to report.\n * @param messageText The formatted message.\n */\n protected abstract reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string): void;\n\n /**\n * Helper method that formats string with provided arguments where the place holders\n * are in the the format '{0}', '{1}', etc.\n * @param text The text to format.\n * @param args The arguments to place in the text.\n * @param baseIndex The base index for the args, used for validation (typically 0, which is the default).\n */\n protected formatStringFromArgs(text: string, args: ArrayLike<string>, baseIndex = 0): string {\n return text.replace(/{(\\d+)}/g, (_match, index: string) => this.assertDefined(args[+index + baseIndex]));\n }\n\n private formatMessage(diagnostic: AnyDiagnostic): string {\n let translatedMessage = this.translateMessage(diagnostic);\n\n if (diagnostic.messageArgs && diagnostic.messageArgs.length > 0)\n translatedMessage = this.formatStringFromArgs(translatedMessage, diagnostic.messageArgs);\n return translatedMessage;\n }\n\n private translateMessage(diagnostic: AnyDiagnostic): string {\n if (!this.localization)\n return diagnostic.messageText;\n\n return this.localization.getLocalizedString(this.getTranslationKey(diagnostic));\n }\n\n private getTranslationKey(diagnostic: AnyDiagnostic): string {\n return `${baseTranslationKey}.${diagnostic.code}`;\n }\n\n private assertDefined<T>(value: T | null | undefined, message?: string): T {\n if (value === undefined || value === null)\n return assert(false, message) as never;\n\n return value;\n }\n}\n"]}
|