@itwin/ecschema-editing 4.6.0-dev.9 → 4.6.1
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/CHANGELOG.md +27 -1
- package/lib/cjs/Differencing/SchemaConflicts.d.ts +14 -0
- package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaConflicts.js +15 -2
- package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +0 -52
- package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.d.ts +2 -2
- package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
- package/lib/cjs/Differencing/SchemaDifference.js +3 -3
- package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
- package/lib/cjs/Editing/Constants.js.map +1 -1
- package/lib/cjs/Editing/CustomAttributes.d.ts +1 -1
- package/lib/cjs/Editing/CustomAttributes.d.ts.map +1 -1
- package/lib/cjs/Editing/CustomAttributes.js +2 -2
- package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
- package/lib/cjs/Editing/ECClasses.d.ts +29 -23
- package/lib/cjs/Editing/ECClasses.d.ts.map +1 -1
- package/lib/cjs/Editing/ECClasses.js +51 -95
- package/lib/cjs/Editing/ECClasses.js.map +1 -1
- package/lib/cjs/Editing/Editor.js.map +1 -1
- package/lib/cjs/Editing/Entities.d.ts +6 -7
- package/lib/cjs/Editing/Entities.d.ts.map +1 -1
- package/lib/cjs/Editing/Entities.js +7 -27
- package/lib/cjs/Editing/Entities.js.map +1 -1
- package/lib/cjs/Editing/Formats.js.map +1 -1
- package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
- package/lib/cjs/Editing/Mixins.d.ts +6 -2
- package/lib/cjs/Editing/Mixins.d.ts.map +1 -1
- package/lib/cjs/Editing/Mixins.js +7 -22
- package/lib/cjs/Editing/Mixins.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableEntityClass.js +2 -2
- package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
- package/lib/cjs/Editing/Mutable/MutableNavigationProperty.d.ts +8 -0
- package/lib/cjs/Editing/Mutable/MutableNavigationProperty.d.ts.map +1 -0
- package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js +16 -0
- package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js.map +1 -0
- package/lib/cjs/Editing/Mutable/MutableStructProperty.d.ts +8 -0
- package/lib/cjs/Editing/Mutable/MutableStructProperty.d.ts.map +1 -0
- package/lib/cjs/Editing/Mutable/MutableStructProperty.js +16 -0
- package/lib/cjs/Editing/Mutable/MutableStructProperty.js.map +1 -0
- package/lib/cjs/Editing/Properties.d.ts +201 -0
- package/lib/cjs/Editing/Properties.d.ts.map +1 -0
- package/lib/cjs/Editing/Properties.js +349 -0
- package/lib/cjs/Editing/Properties.js.map +1 -0
- package/lib/cjs/Editing/RelationshipClasses.d.ts +12 -1
- package/lib/cjs/Editing/RelationshipClasses.d.ts.map +1 -1
- package/lib/cjs/Editing/RelationshipClasses.js +26 -3
- package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
- package/lib/cjs/Editing/Structs.d.ts +1 -1
- package/lib/cjs/Editing/Structs.d.ts.map +1 -1
- package/lib/cjs/Editing/Structs.js +2 -2
- package/lib/cjs/Editing/Structs.js.map +1 -1
- package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ClassMerger.js +7 -16
- package/lib/cjs/Merging/ClassMerger.js.map +1 -1
- package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/CustomAttributeMerger.js +6 -1
- package/lib/cjs/Merging/CustomAttributeMerger.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.d.ts.map +1 -1
- package/lib/cjs/Merging/PropertyMerger.js +54 -23
- 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.d.ts +1 -1
- package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
- package/lib/cjs/Merging/SchemaMerger.js +12 -8
- 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.d.ts +2 -2
- package/lib/cjs/Validation/Diagnostic.d.ts.map +1 -1
- package/lib/cjs/Validation/Diagnostic.js +4 -4
- package/lib/cjs/Validation/Diagnostic.js.map +1 -1
- package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
- package/lib/cjs/Validation/ECRules.d.ts +35 -35
- package/lib/cjs/Validation/ECRules.d.ts.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/SchemaChanges.d.ts +38 -6
- package/lib/cjs/Validation/SchemaChanges.d.ts.map +1 -1
- package/lib/cjs/Validation/SchemaChanges.js +97 -27
- package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
- package/lib/cjs/Validation/SchemaCompareVisitor.js +4 -3
- package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.d.ts +1 -0
- package/lib/cjs/Validation/SchemaComparer.d.ts.map +1 -1
- package/lib/cjs/Validation/SchemaComparer.js +238 -260
- package/lib/cjs/Validation/SchemaComparer.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.d.ts +2 -0
- package/lib/cjs/ecschema-editing.d.ts.map +1 -1
- package/lib/cjs/ecschema-editing.js +2 -0
- package/lib/cjs/ecschema-editing.js.map +1 -1
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Structs.js","sourceRoot":"","sources":["../../../src/Editing/Structs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAAqJ;AAErJ,2CAAwC;AAGxC;;GAEG;AACH,MAAa,OAAQ,SAAQ,qBAAS;IACpC,YAAmB,
|
|
1
|
+
{"version":3,"file":"Structs.js","sourceRoot":"","sources":["../../../src/Editing/Structs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAAqJ;AAErJ,2CAAwC;AAGxC;;GAEG;AACH,MAAa,OAAQ,SAAQ,qBAAS;IACpC,YAAmB,YAAiC;QAClD,KAAK,CAAC,kCAAc,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,SAAoB,EAAE,IAAY,EAAE,YAAqB,EAAE,SAAyB;QACtG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,SAAS;YACtB,OAAO,EAAE,YAAY,EAAE,cAAc,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEzF,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAuB,CAAC;QAC9E,IAAI,QAAQ,KAAK,SAAS;YACxB,OAAO,EAAE,YAAY,EAAE,0BAA0B,IAAI,cAAc,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnG,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,UAAU,CAAc,SAAS,CAAC,CAAC;YACtE,IAAI,aAAa,KAAK,SAAS;gBAC7B,OAAO,EAAE,YAAY,EAAE,+BAA+B,SAAS,CAAC,QAAQ,cAAc,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC;YAE7G,IAAI,aAAa,CAAC,cAAc,KAAK,kCAAc,CAAC,WAAW;gBAC7D,OAAO,EAAE,YAAY,EAAE,GAAG,aAAa,CAAC,QAAQ,+BAA+B,EAAE,CAAC;YAEpF,QAAQ,CAAC,SAAS,GAAG,IAAI,2CAAuB,CAAyB,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC;QACjH,CAAC;QAED,IAAI,YAAY;YACd,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAEzC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,WAA6B;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAC7D,IAAI,MAAM,KAAK,SAAS;YACtB,OAAO,EAAE,YAAY,EAAE,cAAc,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAEzF,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS;YAChC,OAAO,EAAE,YAAY,EAAE,oCAAoC,EAAE,CAAC;QAEhE,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAiB,CAAC;QACpF,IAAI,QAAQ,KAAK,SAAS;YACxB,OAAO,EAAE,YAAY,EAAE,0BAA0B,WAAW,CAAC,IAAI,cAAc,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAE/G,MAAM,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;CACF;AAnDD,0BAmDC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Editing\r\n */\r\n\r\nimport { DelayedPromiseWithProps, ECClass, SchemaItemKey, SchemaItemType, SchemaKey, StructClass, StructClassProps } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaContextEditor, SchemaItemEditResults } from \"./Editor\";\r\nimport { ECClasses } from \"./ECClasses\";\r\nimport { MutableClass, MutableStructClass } from \"./Mutable/MutableClass\";\r\n\r\n/**\r\n * @alpha A class extending ECClasses allowing you to create schema items of type StructClass.\r\n */\r\nexport class Structs extends ECClasses {\r\n public constructor(schemaEditor: SchemaContextEditor) {\r\n super(SchemaItemType.StructClass, schemaEditor);\r\n }\r\n\r\n public async create(schemaKey: SchemaKey, name: string, displayLabel?: string, baseClass?: SchemaItemKey): Promise<SchemaItemEditResults> {\r\n const schema = await this._schemaEditor.getSchema(schemaKey);\r\n if (schema === undefined)\r\n return { errorMessage: `Schema Key ${schemaKey.toString(true)} not found in context` };\r\n\r\n const newClass = (await schema.createStructClass(name)) as MutableStructClass;\r\n if (newClass === undefined)\r\n return { errorMessage: `Failed to create class ${name} in schema ${schemaKey.toString(true)}.` };\r\n\r\n if (baseClass !== undefined) {\r\n const baseClassItem = await schema.lookupItem<StructClass>(baseClass);\r\n if (baseClassItem === undefined)\r\n return { errorMessage: `Unable to locate base class ${baseClass.fullName} in schema ${schema.fullName}.` };\r\n\r\n if (baseClassItem.schemaItemType !== SchemaItemType.StructClass)\r\n return { errorMessage: `${baseClassItem.fullName} is not of type Struct Class.` };\r\n\r\n newClass.baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(baseClass, async () => baseClassItem);\r\n }\r\n\r\n if (displayLabel)\r\n newClass.setDisplayLabel(displayLabel);\r\n\r\n return { itemKey: newClass.key };\r\n }\r\n\r\n /**\r\n * Creates a StructClass through a StructClassProps.\r\n * @param schemaKey a SchemaKey of the Schema that will house the new object.\r\n * @param structProps a json object that will be used to populate the new StructClass. Needs a name value passed in.\r\n */\r\n public async createFromProps(schemaKey: SchemaKey, structProps: StructClassProps): Promise<SchemaItemEditResults> {\r\n const schema = await this._schemaEditor.getSchema(schemaKey);\r\n if (schema === undefined)\r\n return { errorMessage: `Schema Key ${schemaKey.toString(true)} not found in context` };\r\n\r\n if (structProps.name === undefined)\r\n return { errorMessage: `No name was supplied within props.` };\r\n\r\n const newClass = (await schema.createStructClass(structProps.name)) as MutableClass;\r\n if (newClass === undefined)\r\n return { errorMessage: `Failed to create class ${structProps.name} in schema ${schemaKey.toString(true)}.` };\r\n\r\n await newClass.fromJSON(structProps);\r\n return { itemKey: newClass.key };\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CAClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/CAClassMerger.ts"],"names":[],"mappings":";;;AAOA,gEAAoG;AACpG,+CAA4C;AAE5C;;;GAGG;AACU,QAAA,0BAA0B,GAA4D;IACjG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"CAClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/CAClassMerger.ts"],"names":[],"mappings":";;;AAOA,gEAAoG;AACpG,+CAA4C;AAE5C;;;GAGG;AACU,QAAA,0BAA0B,GAA4D;IACjG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,EAAE,YAAY,EAAE,8EAA8E,EAAE,CAAC;QAC1G,CAAC;QAED,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YAC9E,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS;SACvC,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAoB;QACzD,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9C,MAAM,YAAY,GAAG,IAAA,yCAAqB,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC/D,IAAI,YAAY,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,YAAY,EAAE,CAAC;gBACxE,MAAM,aAAa,GAAG,IAAA,qDAAiC,EAAC,GAAG,YAAY,KAAK,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3G,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;oBAChC,OAAO,EAAE,YAAY,EAAE,oEAAoE,EAAE,CAAC;gBAChG,CAAC;gBACD,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,IAAA,yBAAW,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;CACF,CAAC","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 CustomAttributeClassDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler } from \"./SchemaItemMerger\";\r\nimport { type MutableCAClass } from \"../Editing/Mutable/MutableCAClass\";\r\nimport { containerTypeToString, parseCustomAttributeContainerType } from \"@itwin/ecschema-metadata\";\r\nimport { modifyClass } from \"./ClassMerger\";\r\n\r\n/**\r\n * Defines a merge handler to merge Custom Attribute Class schema items.\r\n * @internal\r\n */\r\nexport const customAttributeClassMerger: SchemaItemMergerHandler<CustomAttributeClassDifference> = {\r\n async add(context, change) {\r\n if (change.difference.appliesTo === undefined) {\r\n return { errorMessage: \"appliesTo is a required property of a CustomAttributeClass but it is not set\" };\r\n }\r\n\r\n return context.editor.customAttributes.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n appliesTo: change.difference.appliesTo,\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutableCAClass) {\r\n if (change.difference.appliesTo !== undefined) {\r\n const currentValue = containerTypeToString(item.containerType);\r\n if (currentValue !== \"\" && change.difference.appliesTo !== currentValue) {\r\n const containerType = parseCustomAttributeContainerType(`${currentValue}, ${change.difference.appliesTo}`);\r\n if (containerType === undefined) {\r\n return { errorMessage: \"An invalid custom attribute class containerType has been provided.\" };\r\n }\r\n item.setContainerType(containerType);\r\n }\r\n }\r\n return modifyClass(context, change, itemKey, item);\r\n },\r\n};\r\n"]}
|
|
@@ -125,20 +125,9 @@ exports.modifyClass = modifyClass;
|
|
|
125
125
|
async function setBaseClass(context, item, baseClass, isInitial) {
|
|
126
126
|
const baseClassKey = await (0, SchemaItemMerger_1.updateSchemaItemKey)(context, baseClass);
|
|
127
127
|
const baseClassSetter = getBaseClassSetter(context, item);
|
|
128
|
-
if (isInitial && item.baseClass === undefined)
|
|
129
|
-
return
|
|
130
|
-
|
|
131
|
-
if (item.baseClass !== undefined) {
|
|
132
|
-
const currentBaseClass = await item.baseClass;
|
|
133
|
-
const newBaseClass = await context.editor.schemaContext.getSchemaItem(baseClassKey);
|
|
134
|
-
if (newBaseClass === undefined) {
|
|
135
|
-
return { errorMessage: `'${baseClassKey.name}' class could not be located in the merged schema.` };
|
|
136
|
-
}
|
|
137
|
-
if (await newBaseClass.is(currentBaseClass)) {
|
|
138
|
-
return baseClassSetter(item.key, baseClassKey);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return { errorMessage: `Changing the class '${item.key.name}' baseClass is not supported.` };
|
|
128
|
+
if (!isInitial && item.baseClass === undefined)
|
|
129
|
+
return { errorMessage: `Changing the class '${item.key.name}' baseClass is not supported.` };
|
|
130
|
+
return baseClassSetter(item.key, baseClassKey);
|
|
142
131
|
}
|
|
143
132
|
async function setClassModifier(item, modifierValue) {
|
|
144
133
|
const modifier = (0, ecschema_metadata_1.parseClassModifier)(modifierValue);
|
|
@@ -154,9 +143,11 @@ async function setClassModifier(item, modifierValue) {
|
|
|
154
143
|
function getBaseClassSetter(context, item) {
|
|
155
144
|
return async (itemKey, baseClassKey) => {
|
|
156
145
|
switch (item.schemaItemType) {
|
|
146
|
+
case ecschema_metadata_1.SchemaItemType.CustomAttributeClass: return context.editor.customAttributes.setBaseClass(itemKey, baseClassKey);
|
|
157
147
|
case ecschema_metadata_1.SchemaItemType.EntityClass: return context.editor.entities.setBaseClass(itemKey, baseClassKey);
|
|
158
|
-
case ecschema_metadata_1.SchemaItemType.Mixin: return context.editor.mixins.
|
|
159
|
-
|
|
148
|
+
case ecschema_metadata_1.SchemaItemType.Mixin: return context.editor.mixins.setBaseClass(itemKey, baseClassKey);
|
|
149
|
+
case ecschema_metadata_1.SchemaItemType.RelationshipClass: return context.editor.relationships.setBaseClass(itemKey, baseClassKey);
|
|
150
|
+
case ecschema_metadata_1.SchemaItemType.StructClass: return context.editor.structs.setBaseClass(itemKey, baseClassKey);
|
|
160
151
|
}
|
|
161
152
|
return { itemKey, errorMessage: `Changing the base class '${item.name}' is not supported.` };
|
|
162
153
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/ClassMerger.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, ClassItemDifference, SchemaDifference, StructClassDifference } from \"../Differencing/SchemaDifference\";\r\nimport { locateSchemaItem, SchemaItemMergerHandler, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { type MutableClass } from \"../Editing/Mutable/MutableClass\";\r\nimport { CustomAttribute, ECClass, ECClassModifier, parseClassModifier, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaEditResults } from \"../Editing/Editor\";\r\nimport { entityClassMerger, mergeClassMixins } from \"./EntityClassMerger\";\r\nimport { customAttributeClassMerger } from \"./CAClassMerger\";\r\nimport { mixinClassMerger } from \"./MixinMerger\";\r\nimport { mergeRelationshipClassConstraint, mergeRelationshipConstraint, relationshipClassMerger } from \"./RelationshipClassMerger\";\r\nimport { mergeClassProperties, mergePropertyDifference } from \"./PropertyMerger\";\r\nimport { applyCustomAttributes } from \"./CustomAttributeMerger\";\r\n\r\ntype ClassItemHandler = <T extends AnySchemaItemDifference | AnySchemaItemPathDifference>(change: T, merger: SchemaItemMergerHandler<T>) => Promise<void>;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function* mergeClassItems(context: SchemaMergeContext, classChanges: AnySchemaDifference[]) {\r\n // In the first pass all class items will be created as stubs. That only applies to added entities.\r\n await iterateClassChanges(classChanges, async (change, merger) => {\r\n if (change.changeType === \"add\" && merger.add) {\r\n // Make a copy of the change instance, we don't want to alter the actual instance.\r\n const changeCopy = {\r\n ...change,\r\n difference: {\r\n ...change.difference,\r\n // Remove everything we want to validate before setting\r\n baseClass: undefined,\r\n mixins: undefined,\r\n properties: undefined,\r\n customAttributes: undefined,\r\n },\r\n };\r\n await merger.add(context, changeCopy);\r\n }\r\n });\r\n\r\n // In the second pass the base classes and mixins get merged. At that add-changes are\r\n // effectively modify changes now, as the items has been created in the first pass.\r\n await iterateClassChanges(classChanges, async (change, merger) => {\r\n if (merger.modify) {\r\n const schemaItem = await locateSchemaItem(context, change.itemName, change.schemaType);\r\n const result = await merger.modify(context, change, schemaItem.key, schemaItem);\r\n if (result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n });\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isEntityClassMixinDifference)) {\r\n const result = await mergeClassMixins(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipConstraintDifference)) {\r\n const result = await mergeRelationshipConstraint(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipConstraintClassDifference)) {\r\n const result = await mergeRelationshipClassConstraint(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n // At last step the properties that are added to existing classes or modified.\r\n for (const difference of classChanges.filter(SchemaDifference.isClassPropertyDifference)) {\r\n const result = await mergePropertyDifference(context, difference);\r\n if (result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n}\r\n\r\nasync function iterateClassChanges(classChanges: AnySchemaDifference[], handler: ClassItemHandler) {\r\n for (const difference of classChanges.filter(SchemaDifference.isCustomAttributeClassDifference)) {\r\n await handler(difference, customAttributeClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isMixinClassDifference)) {\r\n await handler(difference, mixinClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isStructClassDifference)) {\r\n await handler(difference, structClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isEntityClassDifference)) {\r\n await handler(difference, entityClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipClassDifference)) {\r\n await handler(difference, relationshipClassMerger);\r\n }\r\n}\r\n\r\n/**\r\n * Shared modify merger of all ECClass based items.\r\n * @internal\r\n */\r\nexport async function modifyClass(context: SchemaMergeContext, change: ClassItemDifference, itemKey: SchemaItemKey, item: ECClass): Promise<SchemaEditResults> {\r\n const mutableClass = item as MutableClass;\r\n if (change.difference.label !== undefined) {\r\n mutableClass.setDisplayLabel(change.difference.label);\r\n }\r\n\r\n if (change.difference.description !== undefined) {\r\n mutableClass.setDescription(change.difference.description);\r\n }\r\n\r\n if (change.difference.baseClass !== undefined) {\r\n const result = await setBaseClass(context, item, change.difference.baseClass, change.changeType === \"add\");\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n if (change.difference.modifier !== undefined) {\r\n const result = await setClassModifier(mutableClass, change.difference.modifier);\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n if (change.difference.customAttributes !== undefined) {\r\n const result = await applyCustomAttributes(context, change.difference.customAttributes as CustomAttribute[], async (ca) => {\r\n return context.editor.entities.addCustomAttribute(itemKey, ca);\r\n });\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n return mergeClassProperties(context, change, itemKey);\r\n}\r\n\r\nasync function setBaseClass(context: SchemaMergeContext, item: ECClass, baseClass: string, isInitial: boolean): Promise<SchemaEditResults> {\r\n const baseClassKey = await updateSchemaItemKey(context, baseClass);\r\n const baseClassSetter = getBaseClassSetter(context, item);\r\n if (isInitial && item.baseClass === undefined) {\r\n return baseClassSetter(item.key, baseClassKey);\r\n }\r\n if (item.baseClass !== undefined) {\r\n const currentBaseClass = await item.baseClass;\r\n const newBaseClass = await context.editor.schemaContext.getSchemaItem<ECClass>(baseClassKey);\r\n if (newBaseClass === undefined) {\r\n return { errorMessage: `'${baseClassKey.name}' class could not be located in the merged schema.` };\r\n }\r\n if (await newBaseClass.is(currentBaseClass)) {\r\n return baseClassSetter(item.key, baseClassKey);\r\n }\r\n }\r\n return { errorMessage: `Changing the class '${item.key.name}' baseClass is not supported.` };\r\n}\r\n\r\nasync function setClassModifier(item: MutableClass, modifierValue: string): Promise<SchemaEditResults> {\r\n const modifier = parseClassModifier(modifierValue);\r\n if (modifier === undefined) {\r\n return { errorMessage: \"An invalid class modifier has been provided.\" };\r\n }\r\n if (item.modifier === undefined || item.modifier === modifier || modifier === ECClassModifier.None) {\r\n item.setModifier(modifier);\r\n return {};\r\n }\r\n return { errorMessage: `Changing the class '${item.name}' modifier is not supported.` };\r\n}\r\n\r\nfunction getBaseClassSetter(context: SchemaMergeContext, item: ECClass) {\r\n return async (itemKey: SchemaItemKey, baseClassKey: SchemaItemKey) => {\r\n switch (item.schemaItemType) {\r\n case SchemaItemType.EntityClass: return context.editor.entities.setBaseClass(itemKey, baseClassKey);\r\n case SchemaItemType.Mixin: return context.editor.mixins.setMixinBaseClass(itemKey, baseClassKey);\r\n // TODO: verify; structs and relationship classes can't have base classes?\r\n }\r\n return { itemKey, errorMessage: `Changing the base class '${item.name}' is not supported.` };\r\n };\r\n}\r\n\r\nconst structClassMerger: SchemaItemMergerHandler<StructClassDifference> = {\r\n async add(context, change) {\r\n return context.editor.structs.createFromProps(context.targetSchemaKey, {\r\n name: change.itemName,\r\n ...change.difference,\r\n });\r\n },\r\n modify: modifyClass,\r\n};\r\n"]}
|
|
1
|
+
{"version":3,"file":"ClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/ClassMerger.ts"],"names":[],"mappings":";;;AAKA,uEAA2L;AAC3L,yDAAoG;AAEpG,gEAAwI;AAExI,2DAA0E;AAC1E,mDAA6D;AAC7D,+CAAiD;AACjD,uEAAmI;AACnI,qDAAiF;AACjF,mEAAgE;AAIhE;;GAEG;AACI,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC,OAA2B,EAAE,YAAmC;IACrG,mGAAmG;IACnG,MAAM,mBAAmB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC/D,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YAC9C,kFAAkF;YAClF,MAAM,UAAU,GAAG;gBACjB,GAAG,MAAM;gBACT,UAAU,EAAE;oBACV,GAAG,MAAM,CAAC,UAAU;oBACpB,uDAAuD;oBACvD,SAAS,EAAE,SAAS;oBACpB,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,SAAS;oBACrB,gBAAgB,EAAE,SAAS;iBAC5B;aACF,CAAC;YACF,MAAM,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACxC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,qFAAqF;IACrF,mFAAmF;IACnF,MAAM,mBAAmB,CAAC,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;QAC/D,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,UAAU,GAAG,MAAM,IAAA,mCAAgB,EAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;YACvF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAChF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,4BAA4B,CAAC,EAAE,CAAC;QAC5F,MAAM,MAAM,GAAG,MAAM,IAAA,oCAAgB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3D,IAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,kCAAkC,CAAC,EAAE,CAAC;QAClG,MAAM,MAAM,GAAG,MAAM,IAAA,qDAA2B,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACtE,IAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,uCAAuC,CAAC,EAAE,CAAC;QACvG,MAAM,MAAM,GAAG,MAAM,IAAA,0DAAgC,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3E,IAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,yBAAyB,CAAC,EAAE,CAAC;QACzF,MAAM,MAAM,GAAG,MAAM,IAAA,wCAAuB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AA5DD,0CA4DC;AAED,KAAK,UAAU,mBAAmB,CAAC,YAAmC,EAAE,OAAyB;IAC/F,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,gCAAgC,CAAC,EAAE,CAAC;QAChG,MAAM,OAAO,CAAC,UAAU,EAAE,0CAA0B,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACtF,MAAM,OAAO,CAAC,UAAU,EAAE,8BAAgB,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACvF,MAAM,OAAO,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,uBAAuB,CAAC,EAAE,CAAC;QACvF,MAAM,OAAO,CAAC,UAAU,EAAE,qCAAiB,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,MAAM,CAAC,mCAAgB,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC7F,MAAM,OAAO,CAAC,UAAU,EAAE,iDAAuB,CAAC,CAAC;IACrD,CAAC;AACH,CAAC;AAED;;;GAGG;AACI,KAAK,UAAU,WAAW,CAAC,OAA2B,EAAE,MAA2B,EAAE,OAAsB,EAAE,IAAa;IAC/H,MAAM,YAAY,GAAG,IAAoB,CAAC;IAC1C,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAChD,YAAY,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;QAC3G,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,IAAA,6CAAqB,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,gBAAqC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACxH,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAA,qCAAoB,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AAlCD,kCAkCC;AAED,KAAK,UAAU,YAAY,CAAC,OAA2B,EAAE,IAAa,EAAE,SAAiB,EAAE,SAAkB;IAC3G,MAAM,YAAY,GAAG,MAAM,IAAA,sCAAmB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1D,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;QAC5C,OAAO,EAAE,YAAY,EAAE,uBAAuB,IAAI,CAAC,GAAG,CAAC,IAAI,+BAA+B,EAAE,CAAC;IAC/F,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAkB,EAAE,aAAqB;IACvE,MAAM,QAAQ,GAAG,IAAA,sCAAkB,EAAC,aAAa,CAAC,CAAC;IACnD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,YAAY,EAAE,8CAA8C,EAAE,CAAC;IAC1E,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,mCAAe,CAAC,IAAI,EAAE,CAAC;QACnG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,uBAAuB,IAAI,CAAC,IAAI,8BAA8B,EAAE,CAAC;AAC1F,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA2B,EAAE,IAAa;IACpE,OAAO,KAAK,EAAE,OAAsB,EAAE,YAA2B,EAAE,EAAE;QACnE,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC5B,KAAK,kCAAc,CAAC,oBAAoB,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACrH,KAAK,kCAAc,CAAC,WAAW,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACpG,KAAK,kCAAc,CAAC,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC5F,KAAK,kCAAc,CAAC,iBAAiB,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAC/G,KAAK,kCAAc,CAAC,WAAW,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QACrG,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,4BAA4B,IAAI,CAAC,IAAI,qBAAqB,EAAE,CAAC;IAC/F,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAAmD;IACxE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACrE,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,GAAG,MAAM,CAAC,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,WAAW;CACpB,CAAC","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, ClassItemDifference, SchemaDifference, StructClassDifference } from \"../Differencing/SchemaDifference\";\r\nimport { locateSchemaItem, SchemaItemMergerHandler, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { type MutableClass } from \"../Editing/Mutable/MutableClass\";\r\nimport { CustomAttribute, ECClass, ECClassModifier, parseClassModifier, SchemaItemKey, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaEditResults } from \"../Editing/Editor\";\r\nimport { entityClassMerger, mergeClassMixins } from \"./EntityClassMerger\";\r\nimport { customAttributeClassMerger } from \"./CAClassMerger\";\r\nimport { mixinClassMerger } from \"./MixinMerger\";\r\nimport { mergeRelationshipClassConstraint, mergeRelationshipConstraint, relationshipClassMerger } from \"./RelationshipClassMerger\";\r\nimport { mergeClassProperties, mergePropertyDifference } from \"./PropertyMerger\";\r\nimport { applyCustomAttributes } from \"./CustomAttributeMerger\";\r\n\r\ntype ClassItemHandler = <T extends AnySchemaItemDifference | AnySchemaItemPathDifference>(change: T, merger: SchemaItemMergerHandler<T>) => Promise<void>;\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function* mergeClassItems(context: SchemaMergeContext, classChanges: AnySchemaDifference[]) {\r\n // In the first pass all class items will be created as stubs. That only applies to added entities.\r\n await iterateClassChanges(classChanges, async (change, merger) => {\r\n if (change.changeType === \"add\" && merger.add) {\r\n // Make a copy of the change instance, we don't want to alter the actual instance.\r\n const changeCopy = {\r\n ...change,\r\n difference: {\r\n ...change.difference,\r\n // Remove everything we want to validate before setting\r\n baseClass: undefined,\r\n mixins: undefined,\r\n properties: undefined,\r\n customAttributes: undefined,\r\n },\r\n };\r\n await merger.add(context, changeCopy);\r\n }\r\n });\r\n\r\n // In the second pass the base classes and mixins get merged. At that add-changes are\r\n // effectively modify changes now, as the items has been created in the first pass.\r\n await iterateClassChanges(classChanges, async (change, merger) => {\r\n if (merger.modify) {\r\n const schemaItem = await locateSchemaItem(context, change.itemName, change.schemaType);\r\n const result = await merger.modify(context, change, schemaItem.key, schemaItem);\r\n if (result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n });\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isEntityClassMixinDifference)) {\r\n const result = await mergeClassMixins(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipConstraintDifference)) {\r\n const result = await mergeRelationshipConstraint(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipConstraintClassDifference)) {\r\n const result = await mergeRelationshipClassConstraint(context, difference);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n\r\n // At last step the properties that are added to existing classes or modified.\r\n for (const difference of classChanges.filter(SchemaDifference.isClassPropertyDifference)) {\r\n const result = await mergePropertyDifference(context, difference);\r\n if (result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n}\r\n\r\nasync function iterateClassChanges(classChanges: AnySchemaDifference[], handler: ClassItemHandler) {\r\n for (const difference of classChanges.filter(SchemaDifference.isCustomAttributeClassDifference)) {\r\n await handler(difference, customAttributeClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isMixinClassDifference)) {\r\n await handler(difference, mixinClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isStructClassDifference)) {\r\n await handler(difference, structClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isEntityClassDifference)) {\r\n await handler(difference, entityClassMerger);\r\n }\r\n\r\n for (const difference of classChanges.filter(SchemaDifference.isRelationshipClassDifference)) {\r\n await handler(difference, relationshipClassMerger);\r\n }\r\n}\r\n\r\n/**\r\n * Shared modify merger of all ECClass based items.\r\n * @internal\r\n */\r\nexport async function modifyClass(context: SchemaMergeContext, change: ClassItemDifference, itemKey: SchemaItemKey, item: ECClass): Promise<SchemaEditResults> {\r\n const mutableClass = item as MutableClass;\r\n if (change.difference.label !== undefined) {\r\n mutableClass.setDisplayLabel(change.difference.label);\r\n }\r\n\r\n if (change.difference.description !== undefined) {\r\n mutableClass.setDescription(change.difference.description);\r\n }\r\n\r\n if (change.difference.baseClass !== undefined) {\r\n const result = await setBaseClass(context, item, change.difference.baseClass, change.changeType === \"add\");\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n if (change.difference.modifier !== undefined) {\r\n const result = await setClassModifier(mutableClass, change.difference.modifier);\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n if (change.difference.customAttributes !== undefined) {\r\n const result = await applyCustomAttributes(context, change.difference.customAttributes as CustomAttribute[], async (ca) => {\r\n return context.editor.entities.addCustomAttribute(itemKey, ca);\r\n });\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n\r\n return mergeClassProperties(context, change, itemKey);\r\n}\r\n\r\nasync function setBaseClass(context: SchemaMergeContext, item: ECClass, baseClass: string, isInitial: boolean): Promise<SchemaEditResults> {\r\n const baseClassKey = await updateSchemaItemKey(context, baseClass);\r\n const baseClassSetter = getBaseClassSetter(context, item);\r\n if (!isInitial && item.baseClass === undefined)\r\n return { errorMessage: `Changing the class '${item.key.name}' baseClass is not supported.` };\r\n return baseClassSetter(item.key, baseClassKey);\r\n}\r\n\r\nasync function setClassModifier(item: MutableClass, modifierValue: string): Promise<SchemaEditResults> {\r\n const modifier = parseClassModifier(modifierValue);\r\n if (modifier === undefined) {\r\n return { errorMessage: \"An invalid class modifier has been provided.\" };\r\n }\r\n if (item.modifier === undefined || item.modifier === modifier || modifier === ECClassModifier.None) {\r\n item.setModifier(modifier);\r\n return {};\r\n }\r\n return { errorMessage: `Changing the class '${item.name}' modifier is not supported.` };\r\n}\r\n\r\nfunction getBaseClassSetter(context: SchemaMergeContext, item: ECClass) {\r\n return async (itemKey: SchemaItemKey, baseClassKey: SchemaItemKey) => {\r\n switch (item.schemaItemType) {\r\n case SchemaItemType.CustomAttributeClass: return context.editor.customAttributes.setBaseClass(itemKey, baseClassKey);\r\n case SchemaItemType.EntityClass: return context.editor.entities.setBaseClass(itemKey, baseClassKey);\r\n case SchemaItemType.Mixin: return context.editor.mixins.setBaseClass(itemKey, baseClassKey);\r\n case SchemaItemType.RelationshipClass: return context.editor.relationships.setBaseClass(itemKey, baseClassKey);\r\n case SchemaItemType.StructClass: return context.editor.structs.setBaseClass(itemKey, baseClassKey);\r\n }\r\n return { itemKey, errorMessage: `Changing the base class '${item.name}' is not supported.` };\r\n };\r\n}\r\n\r\nconst structClassMerger: SchemaItemMergerHandler<StructClassDifference> = {\r\n async add(context, change) {\r\n return context.editor.structs.createFromProps(context.targetSchemaKey, {\r\n name: change.itemName,\r\n ...change.difference,\r\n });\r\n },\r\n modify: modifyClass,\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConstantMerger.js","sourceRoot":"","sources":["../../../src/Merging/ConstantMerger.ts"],"names":[],"mappings":";;;AAKA,yDAAuF;AAEvF,gEAAgH;AAEhH;;;GAGG;AACU,QAAA,cAAc,GAAgD;IACzE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"ConstantMerger.js","sourceRoot":"","sources":["../../../src/Merging/ConstantMerger.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 ConstantDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { type MutableConstant } from \"../Editing/Mutable/MutableConstant\";\r\nimport { DelayedPromiseWithProps, ECObjectsError, ECObjectsStatus, Phenomenon } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * Defines a merge handler to merge Constant schema items.\r\n * @internal\r\n */\r\nexport const constantMerger: SchemaItemMergerHandler<ConstantDifference> = {\r\n async add(context, change) {\r\n if (change.difference.phenomenon === undefined) {\r\n return { errorMessage: \"Constant must define phenomenon\" };\r\n }\r\n if (change.difference.definition === undefined) {\r\n return { errorMessage: \"Constant must define definition\" };\r\n }\r\n\r\n // Needs to update the reference from source to target schema.\r\n const phenomenonKey = await updateSchemaItemKey(context, change.difference.phenomenon);\r\n change.difference.phenomenon = phenomenonKey.fullName;\r\n\r\n return context.editor.constants.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n phenomenon: change.difference.phenomenon,\r\n definition: change.difference.definition,\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutableConstant) {\r\n if (change.difference.label !== undefined) {\r\n item.setDisplayLabel(change.difference.label);\r\n }\r\n if (change.difference.description !== undefined) {\r\n item.setDescription(change.difference.description);\r\n }\r\n\r\n // Note: There are no editor methods to modify a constant.\r\n if (change.difference.definition !== undefined) {\r\n if (change.difference.definition !== \"\" && item.definition.toLowerCase() !== change.difference.definition.toLowerCase()) {\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Constant ${itemKey.name} has an invalid 'definition' attribute.`);\r\n }\r\n item.setDefinition(change.difference.definition);\r\n }\r\n if (change.difference.denominator !== undefined) {\r\n if (item.hasDenominator && item.denominator !== change.difference.denominator) {\r\n throw new Error(`Failed to merged, constant denominator conflict: ${change.difference.denominator} -> ${item.denominator}`);\r\n }\r\n item.setDenominator(change.difference.denominator);\r\n }\r\n if (change.difference.numerator !== undefined) {\r\n if (item.hasNumerator && item.numerator !== change.difference.numerator) {\r\n throw new Error(`Failed to merged, constant numerator conflict: ${change.difference.numerator} -> ${item.numerator}`);\r\n }\r\n item.setNumerator(change.difference.numerator);\r\n }\r\n if (change.difference.phenomenon !== undefined) {\r\n const lookupKey = await updateSchemaItemKey(context, change.difference.phenomenon);\r\n const phenomenon = await context.editor.schemaContext.getSchemaItem<Phenomenon>(lookupKey);\r\n if (phenomenon === undefined) {\r\n throw new Error(`Could not find phenomenon ${lookupKey.fullName} in the current context`);\r\n }\r\n\r\n item.setPhenomenon(new DelayedPromiseWithProps(phenomenon.key, async () => phenomenon));\r\n }\r\n return { itemKey };\r\n },\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomAttributeMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/CustomAttributeMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAA0D,MAAM,0BAA0B,CAAC;AACnH,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,KAAK,qBAAqB,GAAG,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE9F;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"CustomAttributeMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/CustomAttributeMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAA0D,MAAM,0BAA0B,CAAC;AACnH,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAClF,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,KAAK,qBAAqB,GAAG,CAAC,eAAe,EAAE,eAAe,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAE9F;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiDrI;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQxK;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAGpK"}
|
|
@@ -39,7 +39,12 @@ async function mergeCustomAttribute(context, change) {
|
|
|
39
39
|
if (change.appliedTo === "Property") {
|
|
40
40
|
const itemKey = new ecschema_metadata_1.SchemaItemKey(change.itemName, context.targetSchemaKey);
|
|
41
41
|
const [propertyName] = change.path.split(".");
|
|
42
|
-
|
|
42
|
+
try {
|
|
43
|
+
await context.editor.entities.properties.addCustomAttribute(itemKey, propertyName, caInstance);
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
return { errorMessage: e.message };
|
|
47
|
+
}
|
|
43
48
|
}
|
|
44
49
|
if (change.appliedTo === "RelationshipConstraint") {
|
|
45
50
|
const itemKey = new ecschema_metadata_1.SchemaItemKey(change.itemName, context.targetSchemaKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomAttributeMerger.js","sourceRoot":"","sources":["../../../src/Merging/CustomAttributeMerger.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAAmH;AAInH,yDAAmF;AAInF;;;;;;;GAOG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAA2B,EAAE,MAAiC;IACvG,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"CustomAttributeMerger.js","sourceRoot":"","sources":["../../../src/Merging/CustomAttributeMerger.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 { CustomAttribute, CustomAttributeClass, RelationshipClass, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { type SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { type CustomAttributeDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaEditResults } from \"../Editing/Editor\";\r\nimport { updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\n\r\ntype CustomAttributeSetter = (customAttribute: CustomAttribute) => Promise<SchemaEditResults>;\r\n\r\n/**\r\n * Merges the custom attributes of the given changes iterable. The third parameter is a callback to pass\r\n * a scope (Class, Property, Schema) specific handler.\r\n * @param context The current schema merging context.\r\n * @param change The individual custom attribute change.\r\n * @returns A EditResults object.\r\n * @internal\r\n */\r\nexport async function mergeCustomAttribute(context: SchemaMergeContext, change: CustomAttributeDifference): Promise<SchemaEditResults> {\r\n if (change.changeType === \"add\") {\r\n if (change.difference.className === undefined) {\r\n return { errorMessage: \"CustomAttribute instance must specify className\" };\r\n }\r\n const schemaItemKey = await updateSchemaItemKey(context, change.difference.className);\r\n\r\n const targetCustomAttributeClass = await context.targetSchema.lookupItem<CustomAttributeClass>(schemaItemKey);\r\n if (targetCustomAttributeClass === undefined) {\r\n return { errorMessage: `Unable to locate the custom attribute class ${schemaItemKey.name} in the merged schema.` };\r\n }\r\n\r\n const caInstance: CustomAttribute = {\r\n ...change.difference,\r\n className: schemaItemKey.fullName,\r\n };\r\n\r\n if (change.appliedTo === \"Schema\") {\r\n return context.editor.addCustomAttribute(context.targetSchemaKey, caInstance);\r\n }\r\n if (change.appliedTo === \"SchemaItem\") {\r\n const itemKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n return context.editor.entities.addCustomAttribute(itemKey, caInstance);\r\n }\r\n if (change.appliedTo === \"Property\") {\r\n const itemKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n const [propertyName] = change.path.split(\".\");\r\n try{\r\n await context.editor.entities.properties.addCustomAttribute(itemKey, propertyName, caInstance);\r\n } catch(e: any) {\r\n return { errorMessage: e.message };\r\n }\r\n }\r\n if (change.appliedTo === \"RelationshipConstraint\") {\r\n const itemKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n const relationshipClass = await context.targetSchema.lookupItem<RelationshipClass>(itemKey);\r\n if (relationshipClass === undefined) {\r\n return { errorMessage: `Unable to locate the relationship class ${itemKey.name} in the merged schema.` };\r\n }\r\n const constraint = change.path === \"$source\"\r\n ? relationshipClass.source\r\n : relationshipClass.target;\r\n\r\n return context.editor.relationships.addCustomAttributeToConstraint(constraint, caInstance);\r\n }\r\n return {};\r\n } else {\r\n return { errorMessage: `Changes of Custom Attribute on merge is not implemented.` };\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function applyCustomAttributes(context: SchemaMergeContext, customAttributes: CustomAttribute[], handler: CustomAttributeSetter): Promise<SchemaEditResults> {\r\n for (const customAttribute of customAttributes) {\r\n const result = await applyCustomAttribute(context, customAttribute, handler);\r\n if (result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n return {};\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport async function applyCustomAttribute(context: SchemaMergeContext, customAttribute: CustomAttribute, handler: CustomAttributeSetter): Promise<SchemaEditResults> {\r\n customAttribute.className = await updateSchemaItemFullName(context, customAttribute.className);\r\n return handler(customAttribute);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/EntityClassMerger.ts"],"names":[],"mappings":";;;AAKA,yDAAuF;AAEvF,+CAA4C;AAC5C,gEAAyD;AAIzD;;;GAGG;AACU,QAAA,iBAAiB,GAAmD;IAC/E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACtE,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YAEjC,GAAG,MAAM,CAAC,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAwB;QAC7D,IAAG,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"EntityClassMerger.js","sourceRoot":"","sources":["../../../src/Merging/EntityClassMerger.ts"],"names":[],"mappings":";;;AAKA,yDAAuF;AAEvF,+CAA4C;AAC5C,gEAAyD;AAIzD;;;GAGG;AACU,QAAA,iBAAiB,GAAmD;IAC/E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACtE,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YAEjC,GAAG,MAAM,CAAC,UAAU;SACrB,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAwB;QAC7D,IAAG,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAI,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,MAAM,IAAA,sCAAmB,EAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBACzE,IAAG,MAAM,CAAC,YAAY,EAAE,CAAC;oBACvB,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAA,yBAAW,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;CACF,CAAC;AAEF;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CAAC,OAA2B,EAAE,MAAkC;IACpG,IAAG,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC/B,KAAI,MAAM,aAAa,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAA,sCAAmB,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;YACnE,MAAM,SAAS,GAAG,IAAI,iCAAa,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;YAC9E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC3E,IAAG,MAAM,CAAC,YAAY,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,YAAY,EAAE,8BAA8B,MAAM,CAAC,QAAQ,4BAA4B,EAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAdD,4CAcC","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 EntityClassDifference, EntityClassMixinDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { type MutableEntityClass } from \"../Editing/Mutable/MutableEntityClass\";\r\nimport { modifyClass } from \"./ClassMerger\";\r\nimport { SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { SchemaItemEditResults } from \"../Editing/Editor\";\r\n\r\n/**\r\n * Defines a merge handler to merge Entity Class schema items.\r\n * @internal\r\n */\r\nexport const entityClassMerger: SchemaItemMergerHandler<EntityClassDifference> = {\r\n async add(context, change) {\r\n return context.editor.entities.createFromProps(context.targetSchemaKey, {\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n\r\n ...change.difference,\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutableEntityClass) {\r\n if(change.difference.mixins !== undefined) {\r\n for(const mixin of change.difference.mixins) {\r\n const mixinKey = await updateSchemaItemKey(context, mixin);\r\n const result = await context.editor.entities.addMixin(itemKey, mixinKey);\r\n if(result.errorMessage) {\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n return modifyClass(context, change, itemKey, item);\r\n },\r\n};\r\n\r\n/**\r\n * Merges Mixins to Entity Class schema items.\r\n * @internal\r\n */\r\nexport async function mergeClassMixins(context: SchemaMergeContext, change: EntityClassMixinDifference): Promise<SchemaItemEditResults> {\r\n if(change.changeType === \"add\") {\r\n for(const mixinFullName of change.difference) {\r\n const mixinKey = await updateSchemaItemKey(context, mixinFullName);\r\n const entityKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n const result = await context.editor.entities.addMixin(entityKey, mixinKey);\r\n if(result.errorMessage) {\r\n throw new Error(result.errorMessage);\r\n }\r\n }\r\n return {};\r\n } else {\r\n return { errorMessage: `Changing the entity class '${change.itemName}' mixins is not supported.`};\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnumerationMerger.js","sourceRoot":"","sources":["../../../src/Merging/EnumerationMerger.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAAgF;AAKhF;;;GAGG;AACU,QAAA,iBAAiB,GAAmD;IAC/E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAA6B;QAC9C,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"EnumerationMerger.js","sourceRoot":"","sources":["../../../src/Merging/EnumerationMerger.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 { primitiveTypeToString, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport type { EnumerationDifference, EnumeratorDifference } from \"../Differencing/SchemaDifference\";\r\nimport type { SchemaItemMergerHandler } from \"./SchemaItemMerger\";\r\nimport type { MutableEnumeration } from \"../Editing/Mutable/MutableEnumeration\";\r\n\r\n/**\r\n * Defines a merge handler to merge Enumeration schema items.\r\n * @internal\r\n */\r\nexport const enumerationMerger: SchemaItemMergerHandler<EnumerationDifference> = {\r\n async add(context, change: EnumerationDifference) {\r\n if (change.difference.type === undefined) {\r\n return { errorMessage: \"Enumerations must define a type property\" };\r\n }\r\n if (change.difference.isStrict === undefined) {\r\n return { errorMessage: \"Enumerations must define whether enumeration is strict.\" };\r\n }\r\n if (change.difference.enumerators === undefined) {\r\n return { errorMessage: \"Enumerations must define at least ine enumerator.\" };\r\n }\r\n\r\n return context.editor.enumerations.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n type: change.difference.type,\r\n isStrict: change.difference.isStrict,\r\n enumerators: change.difference.enumerators,\r\n });\r\n },\r\n async modify(_context, change, itemKey, item: MutableEnumeration) {\r\n if(change.difference.type !== undefined) {\r\n return { errorMessage: `The Enumeration ${itemKey.name} has an incompatible type. It must be \"${primitiveTypeToString(item.type!)}\", not \"${change.difference.type}\".` };\r\n }\r\n if(change.difference.label !== undefined) {\r\n item.setDisplayLabel(change.difference.label);\r\n }\r\n if(change.difference.description !== undefined) {\r\n item.setDescription(change.difference.description);\r\n }\r\n if(change.difference.isStrict !== undefined) {\r\n item.setIsStrict(change.difference.isStrict);\r\n }\r\n return { itemKey};\r\n },\r\n};\r\n\r\n/**\r\n * Defines a merge handler to merge Enumeration schema items.\r\n * @internal\r\n */\r\nexport const enumeratorMerger: SchemaItemMergerHandler<EnumeratorDifference> = {\r\n async add(context, change) {\r\n if (change.difference.name === undefined) {\r\n return { errorMessage: \"Enumerators must define a name\" };\r\n }\r\n if (change.difference.value === undefined) {\r\n return { errorMessage: \"Enumerators must define a value\" };\r\n }\r\n\r\n const itemKey = new SchemaItemKey(change.itemName, context.targetSchemaKey);\r\n await context.editor.enumerations.addEnumerator(itemKey, {\r\n name: change.difference.name,\r\n value: change.difference.value,\r\n label: change.difference.label,\r\n description: change.difference.description,\r\n });\r\n\r\n return { itemKey };\r\n },\r\n async modify(context, change, itemKey) {\r\n if(change.difference.value !== undefined) {\r\n return { errorMessage: `Failed to merge enumerator attribute, Enumerator \"${change.path}\" has different values.` };\r\n }\r\n\r\n if(change.difference.description !== undefined) {\r\n await context.editor.enumerations.setEnumeratorDescription(itemKey, change.path, change.difference.description);\r\n }\r\n if(change.difference.label !== undefined) {\r\n await context.editor.enumerations.setEnumeratorLabel(itemKey, change.path, change.difference.label);\r\n }\r\n return { itemKey };\r\n },\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"KindOfQuantityMerger.js","sourceRoot":"","sources":["../../../src/Merging/KindOfQuantityMerger.ts"],"names":[],"mappings":";;;AAKA,yDAA4F;AAI5F;;;GAGG;AACU,QAAA,oBAAoB,GAAsD;IACrF,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,eAAe,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"KindOfQuantityMerger.js","sourceRoot":"","sources":["../../../src/Merging/KindOfQuantityMerger.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 KindOfQuantityDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler, updateSchemaItemFullName } from \"./SchemaItemMerger\";\r\nimport { type MutableKindOfQuantity } from \"../Editing/Mutable/MutableKindOfQuantity\";\r\nimport { SchemaMergeContext } from \"./SchemaMerger\";\r\n\r\n/**\r\n * Defines a merge handler to merge KindOfQuantity schema items.\r\n * @internal\r\n */\r\nexport const kindOfQuantityMerger: SchemaItemMergerHandler<KindOfQuantityDifference> = {\r\n async add(context, change) {\r\n if (change.difference.persistenceUnit === undefined) {\r\n return { errorMessage: \"KindOfQuantity must define persistenceUnit\" };\r\n }\r\n if (change.difference.relativeError === undefined) {\r\n return { errorMessage: \"KindOfQuantity must define relativeError\" };\r\n }\r\n change.difference.persistenceUnit = await updateSchemaItemFullName(context, change.difference.persistenceUnit);\r\n if(change.difference.presentationUnits) {\r\n if(Array.isArray(change.difference.presentationUnits)) {\r\n for(let index = 0; index < change.difference.presentationUnits.length; index++) {\r\n change.difference.presentationUnits[index] = await updateOverrideFormat(context, change.difference.presentationUnits[index]);\r\n }\r\n } else {\r\n change.difference.presentationUnits = await updateOverrideFormat(context, change.difference.presentationUnits);\r\n }\r\n }\r\n\r\n return context.editor.kindOfQuantities.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n persistenceUnit: change.difference.persistenceUnit,\r\n presentationUnits: change.difference.presentationUnits,\r\n relativeError: change.difference.relativeError,\r\n });\r\n },\r\n async modify(_context, change, itemKey, item: MutableKindOfQuantity) {\r\n if(change.difference.label !== undefined) {\r\n item.setDisplayLabel(change.difference.label);\r\n }\r\n if(change.difference.description !== undefined) {\r\n item.setDescription(change.difference.description);\r\n }\r\n if(change.difference.relativeError !== undefined) {\r\n item.setRelativeError(change.difference.relativeError);\r\n }\r\n if(change.difference.persistenceUnit !== undefined) {\r\n // TODO: It should be checked if the unit is the same, but referring to the source schema.\r\n throw new Error(`Changing the kind of quantity '${itemKey.name}' persistenceUnit is not supported.`);\r\n }\r\n return { itemKey };\r\n },\r\n};\r\n\r\nasync function updateOverrideFormat(context: SchemaMergeContext, formatString: string) {\r\n // https://www.itwinjs.org/v1/bis/ec/kindofquantity/#format-string\r\n const match = formatString.match(/^([^(]+)\\((\\d+)\\)\\[(.*)\\]$/);\r\n if(match === null) {\r\n return formatString;\r\n }\r\n\r\n const originalFormat = match[1];\r\n const updatedFormat = await updateSchemaItemFullName(context, originalFormat);\r\n\r\n const unitOverrides = match[3].split(\"][\");\r\n for(let index=0; index< unitOverrides.length; index++) {\r\n const [unit, label] = unitOverrides[index].split(\"|\");\r\n const updatedUnit = await updateSchemaItemFullName(context, unit);\r\n unitOverrides[index] = `${updatedUnit}${label ? `|${label}` : \"\"}`;\r\n }\r\n\r\n return `${updatedFormat}(${match[2]})[${unitOverrides.join(\"][\")}]`;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MixinMerger.js","sourceRoot":"","sources":["../../../src/Merging/MixinMerger.ts"],"names":[],"mappings":";;;AAKA,yDAAiH;AAEjH,+CAA4C;AAE5C;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"MixinMerger.js","sourceRoot":"","sources":["../../../src/Merging/MixinMerger.ts"],"names":[],"mappings":";;;AAKA,yDAAiH;AAEjH,+CAA4C;AAE5C;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM;QACvB,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC9C,OAAO,EAAE,YAAY,EAAE,6BAA6B,EAAE,CAAC;QACzD,CAAC;QACD,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,eAAe,EAAE;YACpE,GAAG,MAAM,CAAC,UAAU;YACpB,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,cAAc,EAAE,MAAM,CAAC,UAAU;YACjC,SAAS,EAAE,MAAM,IAAA,2CAAwB,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAkB;QACvD,IAAG,MAAM,CAAC,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,IAAA,sCAAmB,EAAC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAClF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;YAC1C,IAAI,YAAY,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvE,OAAO,EAAE,YAAY,EAAE,uBAAuB,OAAO,CAAC,IAAI,+BAA+B,EAAE,CAAC;YAC9F,CAAC;QACH,CAAC;QACD,OAAO,IAAA,yBAAW,EAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;CACF,CAAC","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 MixinClassDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler, updateSchemaItemFullName, updateSchemaItemKey } from \"./SchemaItemMerger\";\r\nimport { type MutableMixin } from \"../Editing/Mutable/MutableMixin\";\r\nimport { modifyClass } from \"./ClassMerger\";\r\n\r\n/**\r\n * Defines a merge handler to merge Mixin schema items.\r\n * @internal\r\n */\r\nexport const mixinClassMerger: SchemaItemMergerHandler<MixinClassDifference> = {\r\n async add(context, change) {\r\n if (change.difference.appliesTo === undefined) {\r\n return { errorMessage: \"Mixin must define appliesTo\" };\r\n }\r\n return context.editor.mixins.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n appliesTo: await updateSchemaItemFullName(context, change.difference.appliesTo),\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutableMixin) {\r\n if(change.difference.appliesTo !== undefined) {\r\n const appliesTo = await updateSchemaItemKey(context, change.difference.appliesTo);\r\n const currentValue = await item.appliesTo;\r\n if (currentValue !== undefined && !appliesTo.matches(currentValue.key)) {\r\n return { errorMessage: `Changing the mixin '${itemKey.name}' appliesTo is not supported.` };\r\n }\r\n }\r\n return modifyClass(context, change, itemKey, item);\r\n },\r\n};\r\n\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PhenomenonMerger.js","sourceRoot":"","sources":["../../../src/Merging/PhenomenonMerger.ts"],"names":[],"mappings":";;;AAOA,gEAA2E;AAE3E;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE;
|
|
1
|
+
{"version":3,"file":"PhenomenonMerger.js","sourceRoot":"","sources":["../../../src/Merging/PhenomenonMerger.ts"],"names":[],"mappings":";;;AAOA,gEAA2E;AAE3E;;;GAGG;AACU,QAAA,gBAAgB,GAAkD;IAC7E,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7B,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC/C,OAAO,EAAE,YAAY,EAAE,mCAAmC,EAAE,CAAC;QAC/D,CAAC;QAED,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;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,UAAU;SACzC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,UAA6B,EAAE,EAAE;QACzE,IAAG,MAAM,CAAC,UAAU,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACzC,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtD,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAC/C,UAAU,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC;QACD,IAAG,MAAM,CAAC,UAAU,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC9C,kFAAkF;YAClF,IAAI,UAAU,CAAC,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,UAAU,CAAC,WAAW,EAAE;gBACpH,MAAM,IAAI,kCAAc,CAAC,mCAAe,CAAC,aAAa,EAAE,kBAAkB,OAAO,CAAC,IAAI,yCAAyC,CAAC,CAAC;YAEnI,MAAM,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;CACF,CAAC","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 PhenomenonDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type MutablePhenomenon } from \"../Editing/Mutable/MutablePhenomenon\";\r\nimport { type SchemaItemMergerHandler} from \"./SchemaItemMerger\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * Defines a merge handler to merge Phenomenon schema items.\r\n * @internal\r\n */\r\nexport const phenomenonMerger: SchemaItemMergerHandler<PhenomenonDifference> = {\r\n add: async (context, change) => {\r\n if (change.difference.definition === undefined) {\r\n return { errorMessage: \"Phenomenon must define definition\" };\r\n }\r\n\r\n return context.editor.phenomenons.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n definition: change.difference.definition,\r\n });\r\n },\r\n modify: async (_context, change, itemKey, phenomenon: MutablePhenomenon) => {\r\n if(change.difference.label !== undefined) {\r\n phenomenon.setDisplayLabel(change.difference.label);\r\n }\r\n if(change.difference.description !== undefined) {\r\n phenomenon.setDescription(change.difference.description);\r\n }\r\n if(change.difference.definition !== undefined) {\r\n // It would be better if the validation would be part of phenomenon.setDefinition.\r\n if (phenomenon.definition !== \"\" && change.difference.definition.toLowerCase() !== phenomenon.definition.toLowerCase())\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Phenomenon ${itemKey.name} has an invalid 'definition' attribute.`);\r\n\r\n await phenomenon.setDefinition(change.difference.definition);\r\n }\r\n return { itemKey };\r\n },\r\n};\r\n"]}
|
|
@@ -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;
|
|
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,OAAO,EAAE,YAAY,EAAE,uCAAuC,EAAE,CAAC;QACnE,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;QACD,OAAO,EAAE,OAAO,EAAE,CAAC;IACrB,CAAC;CACF,CAAC","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 MutablePropertyCategory } from \"../Editing/Mutable/MutablePropertyCategory\";\r\nimport { type PropertyCategoryDifference } from \"../Differencing/SchemaDifference\";\r\nimport { type SchemaItemMergerHandler } from \"./SchemaItemMerger\";\r\n\r\n/**\r\n * Defines a merge handler to merge PropertyCategory schema items.\r\n * @internal\r\n */\r\nexport const propertyCategoryMerger: SchemaItemMergerHandler<PropertyCategoryDifference> = {\r\n async add(context, change) {\r\n if (change.difference.priority === undefined) {\r\n return { errorMessage: \"PropertyCategory must define priority\" };\r\n }\r\n\r\n return context.editor.propertyCategories.createFromProps(context.targetSchemaKey, {\r\n ...change.difference,\r\n name: change.itemName,\r\n schemaItemType: change.schemaType,\r\n priority: change.difference.priority,\r\n });\r\n },\r\n async modify(context, change, itemKey, item: MutablePropertyCategory) {\r\n if(change.difference.label !== undefined) {\r\n item.setDisplayLabel(change.difference.label);\r\n }\r\n if(change.difference.description !== undefined) {\r\n item.setDescription(change.difference.description);\r\n }\r\n if(change.difference.priority !== undefined) {\r\n // TODO: inconsistency: setPriority does not return a result whether the priority was set successfully.\r\n await context.editor.propertyCategories.setPriority(itemKey, change.difference.priority);\r\n }\r\n return { itemKey };\r\n },\r\n};\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAkB,MAAM,kCAAkC,CAAC;AACrH,OAAO,EAA8M,aAAa,EAAoD,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"PropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/PropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAkB,MAAM,kCAAkC,CAAC;AACrH,OAAO,EAA8M,aAAa,EAAoD,MAAM,0BAA0B,CAAC;AAgBvT;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAMtI;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAQvJ"}
|
|
@@ -46,7 +46,14 @@ async function addClassProperty(context, itemKey, property) {
|
|
|
46
46
|
}
|
|
47
47
|
if (property.customAttributes !== undefined) {
|
|
48
48
|
const result = await (0, CustomAttributeMerger_1.applyCustomAttributes)(context, property.customAttributes, async (ca) => {
|
|
49
|
-
|
|
49
|
+
try {
|
|
50
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
51
|
+
await classEditor.properties.addCustomAttribute(itemKey, property.name, ca);
|
|
52
|
+
return {};
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
return { errorMessage: e.message };
|
|
56
|
+
}
|
|
50
57
|
});
|
|
51
58
|
if (result.errorMessage) {
|
|
52
59
|
return result;
|
|
@@ -81,24 +88,25 @@ async function modifyClassProperty(context, itemKey, propertyProps) {
|
|
|
81
88
|
if (propertyProps.kindOfQuantity !== undefined) {
|
|
82
89
|
return { errorMessage: `Changing the property '${property.fullName}' kind of quantity is not supported.` };
|
|
83
90
|
}
|
|
91
|
+
const classEditor = await getClassEditor(context, ecClass);
|
|
84
92
|
if (propertyProps.description !== undefined) {
|
|
85
|
-
|
|
93
|
+
await classEditor.properties.setDescription(itemKey, propertyProps.name, propertyProps.description);
|
|
86
94
|
}
|
|
87
95
|
if (propertyProps.label !== undefined) {
|
|
88
|
-
|
|
96
|
+
await classEditor.properties.setLabel(itemKey, propertyProps.name, propertyProps.label);
|
|
89
97
|
}
|
|
90
98
|
if (propertyProps.isReadOnly !== undefined) {
|
|
91
|
-
|
|
99
|
+
await classEditor.properties.setIsReadOnly(itemKey, propertyProps.name, propertyProps.isReadOnly);
|
|
92
100
|
}
|
|
93
101
|
if (propertyProps.priority !== undefined) {
|
|
94
|
-
|
|
102
|
+
await classEditor.properties.setPriority(itemKey, propertyProps.name, propertyProps.priority);
|
|
95
103
|
}
|
|
96
104
|
if (property.isArray()) {
|
|
97
|
-
await arrayProperty.merge(property, propertyProps);
|
|
105
|
+
await arrayProperty.merge(context, itemKey, property.name, propertyProps);
|
|
98
106
|
}
|
|
99
107
|
if (propertyProps.category !== undefined) {
|
|
100
108
|
const categoryKey = await (0, SchemaItemMerger_1.updateSchemaItemKey)(context, propertyProps.category);
|
|
101
|
-
await
|
|
109
|
+
await classEditor.properties.setCategory(itemKey, property.name, categoryKey);
|
|
102
110
|
}
|
|
103
111
|
if (property.isEnumeration()) {
|
|
104
112
|
return enumerationProperty.merge(context, itemKey, property, propertyProps);
|
|
@@ -114,16 +122,36 @@ async function modifyClassProperty(context, itemKey, propertyProps) {
|
|
|
114
122
|
}
|
|
115
123
|
return {};
|
|
116
124
|
}
|
|
125
|
+
async function getClassEditor(context, ecClass) {
|
|
126
|
+
const schemaItemType = ecschema_metadata_1.ECClass.isECClass(ecClass)
|
|
127
|
+
? ecClass.schemaItemType
|
|
128
|
+
: (await context.editor.schemaContext.getSchemaItem(ecClass))?.schemaItemType;
|
|
129
|
+
switch (schemaItemType) {
|
|
130
|
+
case ecschema_metadata_1.SchemaItemType.EntityClass:
|
|
131
|
+
return context.editor.entities;
|
|
132
|
+
case ecschema_metadata_1.SchemaItemType.Mixin:
|
|
133
|
+
return context.editor.mixins;
|
|
134
|
+
case ecschema_metadata_1.SchemaItemType.StructClass:
|
|
135
|
+
return context.editor.structs;
|
|
136
|
+
case ecschema_metadata_1.SchemaItemType.CustomAttributeClass:
|
|
137
|
+
return context.editor.customAttributes;
|
|
138
|
+
case ecschema_metadata_1.SchemaItemType.RelationshipClass:
|
|
139
|
+
return context.editor.relationships;
|
|
140
|
+
default:
|
|
141
|
+
throw new Error("SchemaItemType not supported");
|
|
142
|
+
}
|
|
143
|
+
}
|
|
117
144
|
const arrayProperty = {
|
|
118
145
|
is(property) {
|
|
119
146
|
return "minOccurs" in property && "maxOccurs" in property;
|
|
120
147
|
},
|
|
121
|
-
async merge(
|
|
148
|
+
async merge(context, itemKey, propertyName, props) {
|
|
149
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
122
150
|
if (props.minOccurs !== undefined) {
|
|
123
|
-
|
|
151
|
+
await classEditor.arrayProperties.setMinOccurs(itemKey, propertyName, props.minOccurs);
|
|
124
152
|
}
|
|
125
153
|
if (props.maxOccurs !== undefined) {
|
|
126
|
-
|
|
154
|
+
await classEditor.arrayProperties.setMaxOccurs(itemKey, propertyName, props.maxOccurs);
|
|
127
155
|
}
|
|
128
156
|
},
|
|
129
157
|
};
|
|
@@ -138,9 +166,10 @@ const enumerationProperty = {
|
|
|
138
166
|
return { errorMessage: `Unable to locate the enumeration class ${enumerationKey.name} in the context schema.` };
|
|
139
167
|
}
|
|
140
168
|
property.typeName = enumerationKey.fullName;
|
|
169
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
141
170
|
return arrayProperty.is(property)
|
|
142
|
-
?
|
|
143
|
-
:
|
|
171
|
+
? classEditor.createEnumerationArrayPropertyFromProps(itemKey, property.name, enumerationType, property)
|
|
172
|
+
: classEditor.createEnumerationPropertyFromProps(itemKey, property.name, enumerationType, property);
|
|
144
173
|
},
|
|
145
174
|
async merge(context, itemKey, property, props) {
|
|
146
175
|
if ("enumeration" in props && props.enumeration !== undefined) {
|
|
@@ -188,29 +217,30 @@ const primitiveProperty = {
|
|
|
188
217
|
if (propertyType === undefined) {
|
|
189
218
|
return { errorMessage: `Invalid property type ${property.typeName} on property ${property.name}` };
|
|
190
219
|
}
|
|
220
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
191
221
|
return arrayProperty.is(property)
|
|
192
|
-
?
|
|
193
|
-
:
|
|
222
|
+
? classEditor.createPrimitiveArrayPropertyFromProps(itemKey, property.name, propertyType, property)
|
|
223
|
+
: classEditor.createPrimitivePropertyFromProps(itemKey, property.name, propertyType, property);
|
|
194
224
|
},
|
|
195
|
-
async merge(
|
|
196
|
-
const mutable = property;
|
|
225
|
+
async merge(context, itemKey, property, props) {
|
|
197
226
|
if (props.typeName) {
|
|
198
227
|
return { errorMessage: `Changing the property '${property.fullName}' primitiveType is not supported.` };
|
|
199
228
|
}
|
|
229
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
200
230
|
if (props.extendedTypeName !== undefined) {
|
|
201
|
-
|
|
231
|
+
await classEditor.primitiveProperties.setExtendedTypeName(itemKey, property.name, props.extendedTypeName);
|
|
202
232
|
}
|
|
203
233
|
if (props.minLength !== undefined) {
|
|
204
|
-
|
|
234
|
+
await classEditor.primitiveProperties.setMinLength(itemKey, property.name, props.minLength);
|
|
205
235
|
}
|
|
206
236
|
if (props.maxLength !== undefined) {
|
|
207
|
-
|
|
237
|
+
await classEditor.primitiveProperties.setMaxLength(itemKey, property.name, props.maxLength);
|
|
208
238
|
}
|
|
209
239
|
if (props.minValue !== undefined) {
|
|
210
|
-
|
|
240
|
+
await classEditor.primitiveProperties.setMinValue(itemKey, property.name, props.minValue);
|
|
211
241
|
}
|
|
212
242
|
if (props.maxValue !== undefined) {
|
|
213
|
-
|
|
243
|
+
await classEditor.primitiveProperties.setMaxValue(itemKey, property.name, props.maxValue);
|
|
214
244
|
}
|
|
215
245
|
return {};
|
|
216
246
|
},
|
|
@@ -226,9 +256,10 @@ const structProperty = {
|
|
|
226
256
|
return { errorMessage: `Unable to locate the struct ${structKey.name} in the context schema.` };
|
|
227
257
|
}
|
|
228
258
|
property.typeName = structKey.fullName;
|
|
259
|
+
const classEditor = await getClassEditor(context, itemKey);
|
|
229
260
|
return arrayProperty.is(property)
|
|
230
|
-
?
|
|
231
|
-
:
|
|
261
|
+
? classEditor.createStructArrayPropertyFromProps(itemKey, property.name, structType, property)
|
|
262
|
+
: classEditor.createStructPropertyFromProps(itemKey, property.name, structType, property);
|
|
232
263
|
},
|
|
233
264
|
async merge(_context, _itemKey, property, props) {
|
|
234
265
|
if ("structClass" in props && props.structClass !== undefined) {
|