@itwin/ecschema-editing 4.5.0-dev.9 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/Differencing/SchemaConflicts.d.ts +76 -0
  4. package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -0
  5. package/lib/cjs/Differencing/SchemaConflicts.js +56 -0
  6. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -0
  7. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts +43 -0
  8. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -0
  9. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +501 -0
  10. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -0
  11. package/lib/cjs/Differencing/SchemaDifference.d.ts +150 -0
  12. package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -0
  13. package/lib/cjs/Differencing/SchemaDifference.js +54 -0
  14. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -0
  15. package/lib/cjs/Editing/ECClasses.d.ts +9 -2
  16. package/lib/cjs/Editing/ECClasses.d.ts.map +1 -1
  17. package/lib/cjs/Editing/ECClasses.js +25 -0
  18. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  19. package/lib/cjs/Editing/Entities.d.ts +8 -2
  20. package/lib/cjs/Editing/Entities.d.ts.map +1 -1
  21. package/lib/cjs/Editing/Entities.js +29 -6
  22. package/lib/cjs/Editing/Entities.js.map +1 -1
  23. package/lib/cjs/Editing/Mixins.d.ts +7 -1
  24. package/lib/cjs/Editing/Mixins.d.ts.map +1 -1
  25. package/lib/cjs/Editing/Mixins.js +15 -0
  26. package/lib/cjs/Editing/Mixins.js.map +1 -1
  27. package/lib/cjs/Editing/RelationshipClasses.d.ts +7 -1
  28. package/lib/cjs/Editing/RelationshipClasses.d.ts.map +1 -1
  29. package/lib/cjs/Editing/RelationshipClasses.js +20 -1
  30. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  31. package/lib/cjs/Merging/CAClassMerger.d.ts.map +1 -1
  32. package/lib/cjs/Merging/CAClassMerger.js +1 -5
  33. package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
  34. package/lib/cjs/Merging/ClassMerger.d.ts +4 -3
  35. package/lib/cjs/Merging/ClassMerger.d.ts.map +1 -1
  36. package/lib/cjs/Merging/ClassMerger.js +57 -49
  37. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  38. package/lib/cjs/Merging/EntityClassMerger.d.ts +3 -2
  39. package/lib/cjs/Merging/EntityClassMerger.d.ts.map +1 -1
  40. package/lib/cjs/Merging/EntityClassMerger.js +22 -7
  41. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  42. package/lib/cjs/Merging/MixinMerger.d.ts.map +1 -1
  43. package/lib/cjs/Merging/MixinMerger.js +1 -5
  44. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  45. package/lib/cjs/Merging/PropertyMerger.d.ts +21 -0
  46. package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -0
  47. package/lib/cjs/Merging/PropertyMerger.js +315 -0
  48. package/lib/cjs/Merging/PropertyMerger.js.map +1 -0
  49. package/lib/cjs/Merging/RelationshipClassMerger.d.ts +15 -0
  50. package/lib/cjs/Merging/RelationshipClassMerger.d.ts.map +1 -0
  51. package/lib/cjs/Merging/RelationshipClassMerger.js +132 -0
  52. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -0
  53. package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
  54. package/lib/cjs/Merging/SchemaMerger.js +7 -3
  55. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  56. package/lib/cjs/ecschema-editing.d.ts +4 -0
  57. package/lib/cjs/ecschema-editing.d.ts.map +1 -1
  58. package/lib/cjs/ecschema-editing.js +4 -0
  59. package/lib/cjs/ecschema-editing.js.map +1 -1
  60. package/package.json +10 -10
  61. package/lib/cjs/Merging/AnyPropertyMerger.d.ts +0 -15
  62. package/lib/cjs/Merging/AnyPropertyMerger.d.ts.map +0 -1
  63. package/lib/cjs/Merging/AnyPropertyMerger.js +0 -71
  64. package/lib/cjs/Merging/AnyPropertyMerger.js.map +0 -1
  65. package/lib/cjs/Merging/ArrayPropertyMerger.d.ts +0 -32
  66. package/lib/cjs/Merging/ArrayPropertyMerger.d.ts.map +0 -1
  67. package/lib/cjs/Merging/ArrayPropertyMerger.js +0 -143
  68. package/lib/cjs/Merging/ArrayPropertyMerger.js.map +0 -1
  69. package/lib/cjs/Merging/ClassPropertyMerger.d.ts +0 -16
  70. package/lib/cjs/Merging/ClassPropertyMerger.d.ts.map +0 -1
  71. package/lib/cjs/Merging/ClassPropertyMerger.js +0 -90
  72. package/lib/cjs/Merging/ClassPropertyMerger.js.map +0 -1
  73. package/lib/cjs/Merging/PrimitiveOrEnumPropertyMerger.d.ts +0 -24
  74. package/lib/cjs/Merging/PrimitiveOrEnumPropertyMerger.d.ts.map +0 -1
  75. package/lib/cjs/Merging/PrimitiveOrEnumPropertyMerger.js +0 -106
  76. package/lib/cjs/Merging/PrimitiveOrEnumPropertyMerger.js.map +0 -1
  77. package/lib/cjs/Merging/StructPropertyMerger.d.ts +0 -11
  78. package/lib/cjs/Merging/StructPropertyMerger.d.ts.map +0 -1
  79. package/lib/cjs/Merging/StructPropertyMerger.js +0 -47
  80. package/lib/cjs/Merging/StructPropertyMerger.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Merging\r\n */\r\n\r\nimport { Schema, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaChanges, SchemaItemChanges } from \"../Validation/SchemaChanges\";\r\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\r\nimport { SchemaContextEditor } from \"../Editing/Editor\";\r\nimport { SchemaItemMerger } from \"./SchemaItemMerger\";\r\n\r\nimport mergeSchemaReferences from \"./SchemaReferenceMerger\";\r\nimport CAClassMerger from \"./CAClassMerger\";\r\nimport EnumerationMerger from \"./EnumerationMerger\";\r\nimport ConstantsMerger from \"./ConstantMerger\";\r\nimport EntityClassMerger from \"./EntityClassMerger\";\r\nimport StructClassMerger from \"./StructClassMerger\";\r\nimport MixinMerger from \"./MixinMerger\";\r\nimport { mergeCustomAttributes } from \"./CustomAttributeMerger\";\r\nimport KindOfQuantityMerger from \"./KindOfQuantityMerger\";\r\n\r\n/**\r\n * Defines the context of a Schema merging run.\r\n * @beta\r\n */\r\nexport interface SchemaMergeContext {\r\n readonly targetSchema: Schema;\r\n readonly sourceSchema: Schema;\r\n readonly editor: SchemaContextEditor;\r\n}\r\n\r\n/**\r\n * Class to merge two schemas together.\r\n * @see [[merge]] to merge the schemas.\r\n * @beta\r\n */\r\nexport class SchemaMerger {\r\n /**\r\n * Gets the @see SchemaChanges between the two given Schemas from perspective of the source\r\n * to the target schema. For example if source contains a class which does not exists in the\r\n * target one, it would be listed as missing.\r\n * @param targetSchema The schema the differences gets merged into.\r\n * @param sourceSchema The schema to compare.\r\n * @returns An instance of @see SchemaChanges between the two schemas.\r\n */\r\n private async getSchemaChanges(targetSchema: Schema, sourceSchema: Schema): Promise<SchemaChanges> {\r\n const changesList: SchemaChanges[] = [];\r\n const schemaComparer = new SchemaComparer({ report: changesList.push.bind(changesList) });\r\n\r\n // It is important to compare the schema items by name, not full name as otherwise\r\n // we'd often see differences when comparing two different schemas.\r\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\r\n\r\n return changesList[0];\r\n }\r\n\r\n /**\r\n * Copy the SchemaItems of the source schemas to the target schema.\r\n * @param targetSchema The schema the SchemaItems gets merged to.\r\n * @param sourceSchema The schema the SchemaItems gets copied from.\r\n * @returns The merged target schema.\r\n */\r\n public async merge(targetSchema: Schema, sourceSchema: Schema): Promise<Schema> {\r\n const schemaChanges = await this.getSchemaChanges(targetSchema, sourceSchema);\r\n const mergeContext: SchemaMergeContext = {\r\n editor: new SchemaContextEditor(targetSchema.context),\r\n targetSchema,\r\n sourceSchema,\r\n };\r\n\r\n await mergeSchemaReferences(mergeContext, schemaChanges);\r\n\r\n const itemChanges = getSchemaItemChanges(schemaChanges);\r\n await EnumerationMerger.mergeChanges(mergeContext, itemChanges.enumeratations);\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.propertyCategories);\r\n\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.unitSystems);\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.phenomenons);\r\n await ConstantsMerger.mergeChanges(mergeContext, itemChanges.constants);\r\n await KindOfQuantityMerger.mergeChanges(mergeContext, itemChanges.kindOfQuantities);\r\n\r\n // TODO: For now we just do simple copy and merging of properties and classes. For more complex types\r\n // with bases classes or relationships, this might need to get extended.\r\n await CAClassMerger.mergeItemStubChanges(mergeContext, itemChanges.customAttributeClasses);\r\n await StructClassMerger.mergeItemStubChanges(mergeContext, itemChanges.structClasses);\r\n await EntityClassMerger.mergeItemStubChanges(mergeContext, itemChanges.entityClasses);\r\n await MixinMerger.mergeItemStubChanges(mergeContext, itemChanges.mixins);\r\n\r\n // 2nd pass to complete merge changes such as properties, baseClasses and mixins.\r\n await CAClassMerger.mergeItemContentChanges(mergeContext, itemChanges.customAttributeClasses);\r\n await StructClassMerger.mergeItemContentChanges(mergeContext, itemChanges.structClasses);\r\n await EntityClassMerger.mergeItemContentChanges(mergeContext, itemChanges.entityClasses);\r\n await MixinMerger.mergeItemContentChanges(mergeContext, itemChanges.mixins);\r\n\r\n await mergeCustomAttributes(mergeContext, schemaChanges.customAttributeChanges.values(), async (ca) => {\r\n return mergeContext.editor.addCustomAttribute(mergeContext.targetSchema.schemaKey, ca);\r\n });\r\n\r\n // TODO: For now we directly manipulate the target schema. For error handing purposes, we should first\r\n // merge into a temporary schema and eventually swap that with the given instance.\r\n return targetSchema;\r\n }\r\n}\r\n\r\n/**\r\n * This helper method composes the different schema change objects to a single easier\r\n * to use object that should improve readability when the methods get called.\r\n */\r\nfunction getSchemaItemChanges(schemaChanges: SchemaChanges) {\r\n return {\r\n get entityClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.EntityClass); },\r\n get constants() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.Constant); },\r\n get customAttributeClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.CustomAttributeClass); },\r\n get enumeratations() { return schemaChanges.enumerationChanges.values(); },\r\n get kindOfQuantities() { return schemaChanges.kindOfQuantityChanges.values(); },\r\n get phenomenons() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.Phenomenon); },\r\n get propertyCategories() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.PropertyCategory); },\r\n get unitSystems() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.UnitSystem); },\r\n get structClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.StructClass); },\r\n get mixins() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.Mixin); },\r\n };\r\n}\r\n\r\n/**\r\n * Filters and returns the changed items by its schema item type.\r\n * @param changes A map of changed schema items.\r\n * @param types A list of schema item types to filter.\r\n * @returns An Iterable with the filtered schema items.\r\n */\r\nfunction * filterChangesByItemType<TChange extends SchemaItemChanges>(changes: Map<string, TChange>, ...types: SchemaItemType[]): Iterable<TChange> {\r\n for(const change of changes.values()) {\r\n if (types.includes(change.schemaItemType)) {\r\n yield change;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaMerger.js","sourceRoot":"","sources":["../../../src/Merging/SchemaMerger.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Merging\r\n */\r\n\r\nimport { Schema, SchemaItemType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaChanges, SchemaItemChanges } from \"../Validation/SchemaChanges\";\r\nimport { SchemaComparer } from \"../Validation/SchemaComparer\";\r\nimport { SchemaContextEditor } from \"../Editing/Editor\";\r\nimport { SchemaItemMerger } from \"./SchemaItemMerger\";\r\n\r\nimport mergeSchemaReferences from \"./SchemaReferenceMerger\";\r\nimport CAClassMerger from \"./CAClassMerger\";\r\nimport EnumerationMerger from \"./EnumerationMerger\";\r\nimport ConstantsMerger from \"./ConstantMerger\";\r\nimport EntityClassMerger from \"./EntityClassMerger\";\r\nimport StructClassMerger from \"./StructClassMerger\";\r\nimport MixinMerger from \"./MixinMerger\";\r\nimport { mergeCustomAttributes } from \"./CustomAttributeMerger\";\r\nimport KindOfQuantityMerger from \"./KindOfQuantityMerger\";\r\nimport RelationshipClassMerger from \"./RelationshipClassMerger\";\r\n\r\n/**\r\n * Defines the context of a Schema merging run.\r\n * @beta\r\n */\r\nexport interface SchemaMergeContext {\r\n readonly targetSchema: Schema;\r\n readonly sourceSchema: Schema;\r\n readonly editor: SchemaContextEditor;\r\n}\r\n\r\n/**\r\n * Class to merge two schemas together.\r\n * @see [[merge]] to merge the schemas.\r\n * @beta\r\n */\r\nexport class SchemaMerger {\r\n /**\r\n * Gets the @see SchemaChanges between the two given Schemas from perspective of the source\r\n * to the target schema. For example if source contains a class which does not exists in the\r\n * target one, it would be listed as missing.\r\n * @param targetSchema The schema the differences gets merged into.\r\n * @param sourceSchema The schema to compare.\r\n * @returns An instance of @see SchemaChanges between the two schemas.\r\n */\r\n private async getSchemaChanges(targetSchema: Schema, sourceSchema: Schema): Promise<SchemaChanges> {\r\n const changesList: SchemaChanges[] = [];\r\n const schemaComparer = new SchemaComparer({ report: changesList.push.bind(changesList) });\r\n\r\n // It is important to compare the schema items by name, not full name as otherwise\r\n // we'd often see differences when comparing two different schemas.\r\n await schemaComparer.compareSchemas(sourceSchema, targetSchema);\r\n\r\n return changesList[0];\r\n }\r\n\r\n /**\r\n * Copy the SchemaItems of the source schemas to the target schema.\r\n * @param targetSchema The schema the SchemaItems gets merged to.\r\n * @param sourceSchema The schema the SchemaItems gets copied from.\r\n * @returns The merged target schema.\r\n */\r\n public async merge(targetSchema: Schema, sourceSchema: Schema): Promise<Schema> {\r\n const schemaChanges = await this.getSchemaChanges(targetSchema, sourceSchema);\r\n const mergeContext: SchemaMergeContext = {\r\n editor: new SchemaContextEditor(targetSchema.context),\r\n targetSchema,\r\n sourceSchema,\r\n };\r\n\r\n await mergeSchemaReferences(mergeContext, schemaChanges);\r\n\r\n const itemChanges = getSchemaItemChanges(schemaChanges);\r\n await EnumerationMerger.mergeChanges(mergeContext, itemChanges.enumeratations);\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.propertyCategories);\r\n\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.unitSystems);\r\n await SchemaItemMerger.mergeChanges(mergeContext, itemChanges.phenomenons);\r\n await ConstantsMerger.mergeChanges(mergeContext, itemChanges.constants);\r\n await KindOfQuantityMerger.mergeChanges(mergeContext, itemChanges.kindOfQuantities);\r\n\r\n // TODO: For now we just do simple copy and merging of properties and classes. For more complex types\r\n // with bases classes or relationships, this might need to get extended.\r\n await CAClassMerger.mergeItemStubChanges(mergeContext, itemChanges.customAttributeClasses);\r\n await StructClassMerger.mergeItemStubChanges(mergeContext, itemChanges.structClasses);\r\n await EntityClassMerger.mergeItemStubChanges(mergeContext, itemChanges.entityClasses);\r\n await MixinMerger.mergeItemStubChanges(mergeContext, itemChanges.mixins);\r\n await RelationshipClassMerger.mergeItemStubChanges(mergeContext, itemChanges.relationships);\r\n\r\n // 2nd pass to complete merge changes such as properties, baseClasses and mixins.\r\n await CAClassMerger.mergeItemContentChanges(mergeContext, itemChanges.customAttributeClasses);\r\n await StructClassMerger.mergeItemContentChanges(mergeContext, itemChanges.structClasses);\r\n await EntityClassMerger.mergeItemContentChanges(mergeContext, itemChanges.entityClasses);\r\n await MixinMerger.mergeItemContentChanges(mergeContext, itemChanges.mixins);\r\n await RelationshipClassMerger.mergeItemContentChanges(mergeContext, itemChanges.relationships);\r\n\r\n await mergeCustomAttributes(mergeContext, schemaChanges.customAttributeChanges.values(), async (ca) => {\r\n return mergeContext.editor.addCustomAttribute(mergeContext.targetSchema.schemaKey, ca);\r\n });\r\n\r\n // TODO: For now we directly manipulate the target schema. For error handing purposes, we should first\r\n // merge into a temporary schema and eventually swap that with the given instance.\r\n return targetSchema;\r\n }\r\n}\r\n\r\n/**\r\n * This helper method composes the different schema change objects to a single easier\r\n * to use object that should improve readability when the methods get called.\r\n */\r\nfunction getSchemaItemChanges(schemaChanges: SchemaChanges) {\r\n return {\r\n get constants() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.Constant); },\r\n get customAttributeClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.CustomAttributeClass); },\r\n get entityClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.EntityClass); },\r\n get enumeratations() { return schemaChanges.enumerationChanges.values(); },\r\n get kindOfQuantities() { return schemaChanges.kindOfQuantityChanges.values(); },\r\n get mixins() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.Mixin); },\r\n get phenomenons() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.Phenomenon); },\r\n get propertyCategories() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.PropertyCategory); },\r\n get relationships() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.RelationshipClass); },\r\n get structClasses() { return filterChangesByItemType(schemaChanges.classChanges, SchemaItemType.StructClass); },\r\n get unitSystems() { return filterChangesByItemType(schemaChanges.schemaItemChanges, SchemaItemType.UnitSystem); },\r\n };\r\n}\r\n\r\n/**\r\n * Filters and returns the changed items by its schema item type.\r\n * @param changes A map of changed schema items.\r\n * @param types A list of schema item types to filter.\r\n * @returns An Iterable with the filtered schema items.\r\n */\r\nfunction * filterChangesByItemType<TChange extends SchemaItemChanges>(changes: Map<string, TChange>, ...types: SchemaItemType[]): Iterable<TChange> {\r\n for(const change of changes.values()) {\r\n if (types.includes(change.schemaItemType)) {\r\n yield change;\r\n }\r\n }\r\n}\r\n"]}
@@ -36,4 +36,8 @@ export { SchemaMerger } from "./Merging/SchemaMerger";
36
36
  * @docs-group-description Merging
37
37
  * Set of classes used to merge schemas.
38
38
  */
39
+ /**
40
+ * @docs-group-description Differencing
41
+ * Set of classes used to perform differences between ECSchemas.
42
+ */
39
43
  //# sourceMappingURL=ecschema-editing.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecschema-editing.d.ts","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":"AAKA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/E,cAAc,wCAAwC,CAAC;AACvD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
1
+ {"version":3,"file":"ecschema-editing.d.ts","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":"AAKA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iCAAiC,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/E,cAAc,wCAAwC,CAAC;AACvD,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uCAAuC,CAAC;AACtD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG"}
@@ -62,4 +62,8 @@ Object.defineProperty(exports, "SchemaMerger", { enumerable: true, get: function
62
62
  * @docs-group-description Merging
63
63
  * Set of classes used to merge schemas.
64
64
  */
65
+ /**
66
+ * @docs-group-description Differencing
67
+ * Set of classes used to perform differences between ECSchemas.
68
+ */
65
69
  //# sourceMappingURL=ecschema-editing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecschema-editing.js","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;AAE/F,0DAAwC;AACxC,kEAAgD;AAChD,sDAAsD;AACtD,gDAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,oGAAA,SAAS,OAAA;AAChD,yEAAuD;AACvD,qDAAmC;AACnC,uEAAqD;AACrD,4DAA0C;AAC1C,wEAAsD;AACtD,6DAA2C;AAC3C,8DAA4C;AAC5C,qEAAmD;AACnD,mDAAiC;AAEjC,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AAErB;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./Validation/Diagnostic\";\r\nexport * from \"./Validation/DiagnosticReporter\";\r\n/* eslint-disable-next-line deprecation/deprecation */\r\nexport { DiagnosticCodes, Diagnostics, ECRuleSet } from \"./Validation/ECRules\";\r\nexport * from \"./Validation/LoggingDiagnosticReporter\";\r\nexport * from \"./Validation/Rules\";\r\nexport * from \"./Validation/SchemaValidationVisitor\";\r\nexport * from \"./Validation/SchemaWalker\";\r\nexport * from \"./Validation/SchemaCompareDiagnostics\";\r\nexport * from \"./Validation/SchemaChanges\";\r\nexport * from \"./Validation/SchemaComparer\";\r\nexport * from \"./Validation/SchemaCompareReporter\";\r\nexport * from \"./Editing/Editor\";\r\nexport { ISuppressionRule, IRuleSuppressionSet, IRuleSuppressionMap } from \"./Validation/RuleSuppressionSet\";\r\nexport { SchemaValidater } from \"./Validation/SchemaValidater\";\r\nexport { SchemaMerger } from \"./Merging/SchemaMerger\";\r\n\r\n/** @docs-package-description\r\n * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).\r\n */\r\n/**\r\n * @docs-group-description Editing\r\n * Set of classes used to perform editing of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Diagnostic\r\n * Set of classes to categorize and manage ECSchema validation results.\r\n */\r\n/**\r\n * @docs-group-description Validation\r\n * Set of classes used to perform validation on ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Comparison\r\n * Set of classes to enable comparison of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Merging\r\n * Set of classes used to merge schemas.\r\n */\r\n"]}
1
+ {"version":3,"file":"ecschema-editing.js","sourceRoot":"","sources":["../../src/ecschema-editing.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;;;;;;;;;;;;;;;AAE/F,0DAAwC;AACxC,kEAAgD;AAChD,sDAAsD;AACtD,gDAA+E;AAAtE,0GAAA,eAAe,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,oGAAA,SAAS,OAAA;AAChD,yEAAuD;AACvD,qDAAmC;AACnC,uEAAqD;AACrD,4DAA0C;AAC1C,wEAAsD;AACtD,6DAA2C;AAC3C,8DAA4C;AAC5C,qEAAmD;AACnD,mDAAiC;AAEjC,gEAA+D;AAAtD,kHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,4GAAA,YAAY,OAAA;AAErB;;GAEG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG;AACH;;;GAGG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nexport * from \"./Validation/Diagnostic\";\r\nexport * from \"./Validation/DiagnosticReporter\";\r\n/* eslint-disable-next-line deprecation/deprecation */\r\nexport { DiagnosticCodes, Diagnostics, ECRuleSet } from \"./Validation/ECRules\";\r\nexport * from \"./Validation/LoggingDiagnosticReporter\";\r\nexport * from \"./Validation/Rules\";\r\nexport * from \"./Validation/SchemaValidationVisitor\";\r\nexport * from \"./Validation/SchemaWalker\";\r\nexport * from \"./Validation/SchemaCompareDiagnostics\";\r\nexport * from \"./Validation/SchemaChanges\";\r\nexport * from \"./Validation/SchemaComparer\";\r\nexport * from \"./Validation/SchemaCompareReporter\";\r\nexport * from \"./Editing/Editor\";\r\nexport { ISuppressionRule, IRuleSuppressionSet, IRuleSuppressionMap } from \"./Validation/RuleSuppressionSet\";\r\nexport { SchemaValidater } from \"./Validation/SchemaValidater\";\r\nexport { SchemaMerger } from \"./Merging/SchemaMerger\";\r\n\r\n/** @docs-package-description\r\n * The ecschema-editing package contains classes for validating, and editing ECSchemas that can be used in both [frontend]($docs/learning/frontend/index.md) and [backend]($docs/learning/backend/index.md).\r\n */\r\n/**\r\n * @docs-group-description Editing\r\n * Set of classes used to perform editing of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Diagnostic\r\n * Set of classes to categorize and manage ECSchema validation results.\r\n */\r\n/**\r\n * @docs-group-description Validation\r\n * Set of classes used to perform validation on ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Comparison\r\n * Set of classes to enable comparison of ECSchemas.\r\n */\r\n/**\r\n * @docs-group-description Merging\r\n * Set of classes used to merge schemas.\r\n */\r\n/**\r\n * @docs-group-description Differencing\r\n * Set of classes used to perform differences between ECSchemas.\r\n */\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-editing",
3
- "version": "4.5.0-dev.9",
3
+ "version": "4.5.0",
4
4
  "description": "ECSchema editing and validation API",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-editing.js",
@@ -22,7 +22,7 @@
22
22
  "url": "http://www.bentley.com"
23
23
  },
24
24
  "devDependencies": {
25
- "@bentley/units-schema": "^1.0.7",
25
+ "@bentley/units-schema": "^1.0.8",
26
26
  "@itwin/eslint-plugin": "4.0.0-dev.44",
27
27
  "@types/almost-equal": "1.1.0",
28
28
  "@types/benchmark": "^2.1.0",
@@ -42,16 +42,16 @@
42
42
  "rimraf": "^3.0.2",
43
43
  "sinon": "^17.0.1",
44
44
  "typescript": "~5.0.2",
45
- "@itwin/build-tools": "4.5.0-dev.9",
46
- "@itwin/ecschema-metadata": "4.5.0-dev.9",
47
- "@itwin/core-common": "4.5.0-dev.9",
48
- "@itwin/core-bentley": "4.5.0-dev.9",
49
- "@itwin/core-quantity": "4.5.0-dev.9"
45
+ "@itwin/build-tools": "4.5.0",
46
+ "@itwin/core-bentley": "4.5.0",
47
+ "@itwin/core-common": "4.5.0",
48
+ "@itwin/core-quantity": "4.5.0",
49
+ "@itwin/ecschema-metadata": "4.5.0"
50
50
  },
51
51
  "peerDependencies": {
52
- "@itwin/core-bentley": "^4.5.0-dev.9",
53
- "@itwin/core-quantity": "^4.5.0-dev.9",
54
- "@itwin/ecschema-metadata": "^4.5.0-dev.9"
52
+ "@itwin/core-bentley": "^4.5.0",
53
+ "@itwin/core-quantity": "^4.5.0",
54
+ "@itwin/ecschema-metadata": "^4.5.0"
55
55
  },
56
56
  "nyc": {
57
57
  "extends": "./node_modules/@itwin/build-tools/.nycrc"
@@ -1,15 +0,0 @@
1
- import { Property, PropertyProps, SchemaItemKey } from "@itwin/ecschema-metadata";
2
- import { SchemaMergeContext } from "./SchemaMerger";
3
- import { PropertyEditResults } from "../Editing/Editor";
4
- /**
5
- * @internal
6
- */
7
- export declare class AnyPropertyMerger<TProperty extends Property> {
8
- protected readonly context: SchemaMergeContext;
9
- constructor(context: SchemaMergeContext);
10
- createFromProps(_classKey: SchemaItemKey, property: TProperty): Promise<PropertyEditResults>;
11
- protected isPropertyEditResults(obj: any): obj is PropertyEditResults;
12
- protected getPropertyProps(property: TProperty): Promise<PropertyEditResults | PropertyProps>;
13
- mergeAttributes(property: TProperty, attributeName: string, attributeNewValue: any, _attributeOldValue: any): Promise<PropertyEditResults | boolean>;
14
- }
15
- //# sourceMappingURL=AnyPropertyMerger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnyPropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/AnyPropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,QAAQ,EAAoB,aAAa,EAAwB,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC1I,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;GAEG;AACH,qBAAa,iBAAiB,CAAC,SAAS,SAAS,QAAQ;IACvD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAEnC,OAAO,EAAE,kBAAkB;IAI1B,eAAe,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIzG,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,mBAAmB;cAIrD,gBAAgB,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,mBAAmB,GAAG,aAAa,CAAC;IA+BtF,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;CAqBlK"}
@@ -1,71 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AnyPropertyMerger = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
9
- /**
10
- * @internal
11
- */
12
- class AnyPropertyMerger {
13
- constructor(context) {
14
- this.context = context;
15
- }
16
- async createFromProps(_classKey, property) {
17
- return { errorMessage: `Property Type ${(0, ecschema_metadata_1.propertyTypeToString)(property.propertyType)} is not implemented.` };
18
- }
19
- isPropertyEditResults(obj) {
20
- return typeof obj === "object" && "errorMessage" in obj;
21
- }
22
- async getPropertyProps(property) {
23
- let props = {};
24
- if (property.category !== undefined) {
25
- const sourceCategory = await property.category;
26
- const itemKey = new ecschema_metadata_1.SchemaItemKey(sourceCategory.name, this.context.sourceSchema.schemaKey.matches(sourceCategory.schema.schemaKey)
27
- ? this.context.targetSchema.schemaKey
28
- : sourceCategory.schema.schemaKey);
29
- const targetCategory = await this.context.targetSchema.lookupItem(itemKey);
30
- if (targetCategory === undefined) {
31
- return { errorMessage: `Unable to locate the property category class ${sourceCategory.name} in the merged schema.` };
32
- }
33
- props = { ...props, category: targetCategory.fullName };
34
- }
35
- if (property.kindOfQuantity !== undefined) {
36
- const sourceKoq = await property.kindOfQuantity;
37
- const itemKey = new ecschema_metadata_1.SchemaItemKey(sourceKoq.name, this.context.sourceSchema.schemaKey.matches(sourceKoq.schema.schemaKey)
38
- ? this.context.targetSchema.schemaKey
39
- : sourceKoq.schema.schemaKey);
40
- const targetKoq = await this.context.targetSchema.lookupItem(itemKey);
41
- if (targetKoq === undefined) {
42
- return { errorMessage: `Unable to locate the property kind of quantity ${sourceKoq.name} in the merged schema.` };
43
- }
44
- props = { ...props, kindOfQuantity: targetKoq.fullName };
45
- }
46
- return props;
47
- }
48
- async mergeAttributes(property, attributeName, attributeNewValue, _attributeOldValue) {
49
- const mutableProperty = property;
50
- switch (attributeName) {
51
- case "description":
52
- mutableProperty.setDescription(attributeNewValue);
53
- return true;
54
- case "label":
55
- mutableProperty.setLabel(attributeNewValue);
56
- return true;
57
- case "isReadOnly":
58
- mutableProperty.setIsReadOnly(attributeNewValue);
59
- return true;
60
- case "priority":
61
- mutableProperty.setPriority(attributeNewValue);
62
- return true;
63
- case "type":
64
- case "primitiveType":
65
- return { errorMessage: `Changing the property '${property.name}' ${attributeName} is not supported.` };
66
- }
67
- return false;
68
- }
69
- }
70
- exports.AnyPropertyMerger = AnyPropertyMerger;
71
- //# sourceMappingURL=AnyPropertyMerger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AnyPropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/AnyPropertyMerger.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 { KindOfQuantity, Property, PropertyCategory, PropertyProps, propertyTypeToString, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { PropertyEditResults } from \"../Editing/Editor\";\r\nimport { MutableProperty } from \"../Editing/Mutable/MutableProperty\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class AnyPropertyMerger<TProperty extends Property> {\r\n protected readonly context: SchemaMergeContext;\r\n\r\n constructor(context: SchemaMergeContext) {\r\n this.context = context;\r\n }\r\n\r\n public async createFromProps(_classKey: SchemaItemKey, property: TProperty): Promise<PropertyEditResults> {\r\n return { errorMessage: `Property Type ${propertyTypeToString(property.propertyType)} is not implemented.` };\r\n }\r\n\r\n protected isPropertyEditResults(obj: any): obj is PropertyEditResults {\r\n return typeof obj === \"object\" && \"errorMessage\" in obj;\r\n }\r\n\r\n protected async getPropertyProps(property: TProperty): Promise<PropertyEditResults | PropertyProps> {\r\n let props = {} as PropertyProps;\r\n\r\n if (property.category !== undefined) {\r\n const sourceCategory = await property.category;\r\n const itemKey = new SchemaItemKey(sourceCategory.name, this.context.sourceSchema.schemaKey.matches(sourceCategory.schema.schemaKey)\r\n ? this.context.targetSchema.schemaKey\r\n : sourceCategory.schema.schemaKey,\r\n );\r\n const targetCategory = await this.context.targetSchema.lookupItem<PropertyCategory>(itemKey);\r\n if (targetCategory === undefined) {\r\n return { errorMessage: `Unable to locate the property category class ${sourceCategory.name} in the merged schema.` };\r\n }\r\n props = {...props, category: targetCategory.fullName};\r\n }\r\n\r\n if (property.kindOfQuantity !== undefined) {\r\n const sourceKoq = await property.kindOfQuantity;\r\n const itemKey = new SchemaItemKey(sourceKoq.name, this.context.sourceSchema.schemaKey.matches(sourceKoq.schema.schemaKey)\r\n ? this.context.targetSchema.schemaKey\r\n : sourceKoq.schema.schemaKey,\r\n );\r\n const targetKoq = await this.context.targetSchema.lookupItem<KindOfQuantity>(itemKey);\r\n if (targetKoq === undefined) {\r\n return { errorMessage: `Unable to locate the property kind of quantity ${sourceKoq.name} in the merged schema.` };\r\n }\r\n props = {...props, kindOfQuantity: targetKoq.fullName};\r\n }\r\n return props;\r\n }\r\n\r\n public async mergeAttributes(property: TProperty, attributeName: string, attributeNewValue: any, _attributeOldValue: any): Promise<PropertyEditResults | boolean> {\r\n const mutableProperty = property as unknown as MutableProperty;\r\n switch(attributeName) {\r\n case \"description\":\r\n mutableProperty.setDescription(attributeNewValue);\r\n return true;\r\n case \"label\":\r\n mutableProperty.setLabel(attributeNewValue);\r\n return true;\r\n case \"isReadOnly\":\r\n mutableProperty.setIsReadOnly(attributeNewValue);\r\n return true;\r\n case \"priority\":\r\n mutableProperty.setPriority(attributeNewValue);\r\n return true;\r\n case \"type\":\r\n case \"primitiveType\":\r\n return { errorMessage: `Changing the property '${property.name}' ${attributeName} is not supported.` };\r\n }\r\n return false;\r\n }\r\n}\r\n"]}
@@ -1,32 +0,0 @@
1
- import { ArrayProperty, EnumerationArrayProperty, PrimitiveArrayProperty, SchemaItemKey, StructArrayProperty } from "@itwin/ecschema-metadata";
2
- import { AnyPropertyMerger } from "./AnyPropertyMerger";
3
- import { PropertyEditResults } from "../Editing/Editor";
4
- /**
5
- * @internal
6
- */
7
- declare class ArrayPropertyMerger<TArrayProperty extends ArrayProperty> extends AnyPropertyMerger<TArrayProperty> {
8
- mergeAttributes(property: TArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
9
- }
10
- /**
11
- * @internal
12
- */
13
- export declare class StructArrayPropertyMerger extends ArrayPropertyMerger<StructArrayProperty> {
14
- mergeAttributes(property: StructArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
15
- createFromProps(classKey: SchemaItemKey, property: StructArrayProperty): Promise<PropertyEditResults>;
16
- }
17
- /**
18
- * @internal
19
- */
20
- export declare class EnumerationArrayPropertyMerger extends ArrayPropertyMerger<EnumerationArrayProperty> {
21
- mergeAttributes(property: EnumerationArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
22
- createFromProps(classKey: SchemaItemKey, property: EnumerationArrayProperty): Promise<PropertyEditResults>;
23
- }
24
- /**
25
- * @internal
26
- */
27
- export declare class PrimitiveArraPropertyMerger extends ArrayPropertyMerger<PrimitiveArrayProperty> {
28
- mergeAttributes(property: PrimitiveArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
29
- createFromProps(classKey: SchemaItemKey, property: PrimitiveArrayProperty): Promise<PropertyEditResults>;
30
- }
31
- export {};
32
- //# sourceMappingURL=ArrayPropertyMerger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArrayPropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/ArrayPropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAe,wBAAwB,EAAE,sBAAsB,EAAE,aAAa,EAAE,mBAAmB,EAAyC,MAAM,0BAA0B,CAAC;AAEnM,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxD;;GAEG;AACH,cAAM,mBAAmB,CAAC,cAAc,SAAS,aAAa,CAAG,SAAQ,iBAAiB,CAAE,cAAc,CAAC;IACnF,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;CAmB/K;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,mBAAmB,CAAE,mBAAmB,CAAC;IAChE,eAAe,CAAC,QAAQ,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;IAiB7J,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAsB5H;AAED;;GAEG;AACH,qBAAa,8BAA+B,SAAQ,mBAAmB,CAAE,wBAAwB,CAAC;IAC1E,eAAe,CAAC,QAAQ,EAAE,wBAAwB,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;IAiBlK,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA0BjI;AAED;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,mBAAmB,CAAE,sBAAsB,CAAC;IACrE,eAAe,CAAC,QAAQ,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,GAAG,OAAO,CAAC,mBAAmB,GAAG,OAAO,CAAC;IAchK,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAY/H"}
@@ -1,143 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PrimitiveArraPropertyMerger = exports.EnumerationArrayPropertyMerger = exports.StructArrayPropertyMerger = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
9
- const AnyPropertyMerger_1 = require("./AnyPropertyMerger");
10
- /**
11
- * @internal
12
- */
13
- class ArrayPropertyMerger extends AnyPropertyMerger_1.AnyPropertyMerger {
14
- async mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue) {
15
- const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);
16
- if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
17
- return results;
18
- }
19
- const mutableProperty = property;
20
- switch (attributeName) {
21
- case "minOccurs":
22
- mutableProperty.setMinOccurs(attributeNewValue);
23
- return true;
24
- case "maxOccurs":
25
- mutableProperty.setMaxOccurs(attributeNewValue);
26
- return true;
27
- }
28
- return false;
29
- }
30
- }
31
- /**
32
- * @internal
33
- */
34
- class StructArrayPropertyMerger extends ArrayPropertyMerger {
35
- async mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue) {
36
- const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);
37
- if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
38
- return results;
39
- }
40
- switch (attributeName) {
41
- case "structClass": {
42
- if (attributeOldValue !== undefined) {
43
- return { errorMessage: `Changing the property '${property.name}' structClass is not supported.` };
44
- }
45
- return true;
46
- }
47
- }
48
- return false;
49
- }
50
- async createFromProps(classKey, property) {
51
- const results = await super.getPropertyProps(property);
52
- if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
53
- return results;
54
- }
55
- const itemKey = new ecschema_metadata_1.SchemaItemKey(property.structClass.name, this.context.sourceSchema.schemaKey.matches(property.structClass.schema.schemaKey)
56
- ? this.context.targetSchema.schemaKey
57
- : property.structClass.schema.schemaKey);
58
- const type = await this.context.targetSchema.lookupItem(itemKey);
59
- if (type === undefined) {
60
- return { errorMessage: `Unable to locate the struct class ${property.structClass.name} in the merged schema.` };
61
- }
62
- const props = {
63
- ...property.toJSON(),
64
- ...results,
65
- typeName: type.fullName,
66
- };
67
- return this.context.editor.entities.createStructArrayPropertyFromProps(classKey, property.name, type, props);
68
- }
69
- }
70
- exports.StructArrayPropertyMerger = StructArrayPropertyMerger;
71
- /**
72
- * @internal
73
- */
74
- class EnumerationArrayPropertyMerger extends ArrayPropertyMerger {
75
- async mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue) {
76
- const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);
77
- if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
78
- return results;
79
- }
80
- switch (attributeName) {
81
- case "enumeration": {
82
- if (attributeOldValue !== undefined) {
83
- return { errorMessage: `Changing the property '${property.name}' enumeration is not supported.` };
84
- }
85
- return true;
86
- }
87
- }
88
- return false;
89
- }
90
- async createFromProps(classKey, property) {
91
- const results = await super.getPropertyProps(property);
92
- if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
93
- return results;
94
- }
95
- if (property.enumeration === undefined) {
96
- return { errorMessage: `Property '${property.fullName}' is missing the required 'enumeration' attribute.` };
97
- }
98
- const enumeration = await property.enumeration;
99
- const itemKey = new ecschema_metadata_1.SchemaItemKey(enumeration.name, this.context.sourceSchema.schemaKey.matches(enumeration.schema.schemaKey)
100
- ? this.context.targetSchema.schemaKey
101
- : enumeration.schema.schemaKey);
102
- const type = await this.context.targetSchema.lookupItem(itemKey);
103
- if (type === undefined) {
104
- return { errorMessage: `Unable to locate the enumeration class ${enumeration.name} in the merged schema.` };
105
- }
106
- const props = {
107
- ...property.toJSON(),
108
- ...results,
109
- };
110
- return this.context.editor.entities.createEnumerationArrayPropertyFromProps(classKey, property.name, type, props);
111
- }
112
- }
113
- exports.EnumerationArrayPropertyMerger = EnumerationArrayPropertyMerger;
114
- /**
115
- * @internal
116
- */
117
- class PrimitiveArraPropertyMerger extends ArrayPropertyMerger {
118
- async mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue) {
119
- const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);
120
- if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
121
- return results;
122
- }
123
- switch (attributeName) {
124
- case "primitiveType": {
125
- return { errorMessage: `Changing the property '${property.name}' typeName is not supported.` };
126
- }
127
- }
128
- return false;
129
- }
130
- async createFromProps(classKey, property) {
131
- const results = await super.getPropertyProps(property);
132
- if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
133
- return results;
134
- }
135
- const props = {
136
- ...property.toJSON(),
137
- ...results,
138
- };
139
- return this.context.editor.entities.createPrimitiveArrayPropertyFromProps(classKey, property.name, property.primitiveType, props);
140
- }
141
- }
142
- exports.PrimitiveArraPropertyMerger = PrimitiveArraPropertyMerger;
143
- //# sourceMappingURL=ArrayPropertyMerger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ArrayPropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/ArrayPropertyMerger.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,gEAAmM;AAEnM,2DAAwD;AAIxD;;GAEG;AACH,MAAM,mBAA2D,SAAQ,qCAAkC;IACzF,KAAK,CAAC,eAAe,CAAC,QAAwB,EAAE,aAAqB,EAAE,iBAAsB,EAAE,iBAAsB;QACnI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YACjG,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,eAAe,GAAG,QAA2C,CAAC;QACpE,QAAQ,aAAa,EAAE;YACrB,KAAK,WAAW;gBACd,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YAEd,KAAK,WAAW;gBACd,eAAe,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;SAEf;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED;;GAEG;AACH,MAAa,yBAA0B,SAAQ,mBAAyC;IACtE,KAAK,CAAC,eAAe,CAAC,QAA6B,EAAE,aAAqB,EAAE,iBAAsB,EAAE,iBAAsB;QACxI,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YACjG,OAAO,OAAO,CAAC;SAChB;QAED,QAAQ,aAAa,EAAE;YACrB,KAAK,aAAa,CAAC,CAAC;gBAClB,IAAI,iBAAiB,KAAK,SAAS,EAAE;oBACnC,OAAO,EAAE,YAAY,EAAE,0BAA0B,QAAQ,CAAC,IAAI,iCAAiC,EAAE,CAAC;iBACnG;gBACD,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,QAAuB,EAAE,QAA6B;QAC1F,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YAC7E,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,OAAO,GAAG,IAAI,iCAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;YAC7I,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS;YACrC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CACxC,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAc,OAAO,CAAC,CAAC;QAC9E,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,EAAE,YAAY,EAAE,qCAAqC,QAAQ,CAAC,WAAW,CAAC,IAAI,wBAAwB,EAAE,CAAC;SACjH;QAED,MAAM,KAAK,GAA6B;YACtC,GAAG,QAAQ,CAAC,MAAM,EAAE;YACpB,GAAG,OAAO;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,kCAAkC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/G,CAAC;CACF;AAxCD,8DAwCC;AAED;;GAEG;AACH,MAAa,8BAA+B,SAAQ,mBAA8C;IAChF,KAAK,CAAC,eAAe,CAAC,QAAkC,EAAE,aAAqB,EAAE,iBAAsB,EAAE,iBAAsB;QAC7I,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YACjG,OAAO,OAAO,CAAC;SAChB;QAED,QAAQ,aAAa,EAAE;YACrB,KAAK,aAAa,CAAC,CAAC;gBAClB,IAAI,iBAAiB,KAAK,SAAS,EAAE;oBACnC,OAAO,EAAE,YAAY,EAAE,0BAA0B,QAAQ,CAAC,IAAI,iCAAiC,EAAE,CAAC;iBACnG;gBACD,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,QAAuB,EAAE,QAAkC;QAC/F,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YAC7E,OAAO,OAAO,CAAC;SAChB;QAED,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;YACtC,OAAO,EAAE,YAAY,EAAE,aAAa,QAAQ,CAAC,QAAQ,oDAAoD,EAAE,CAAC;SAC7G;QAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,iCAAa,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3H,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS;YACrC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAC/B,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAc,OAAO,CAAC,CAAC;QAC9E,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,OAAO,EAAE,YAAY,EAAE,0CAA0C,WAAW,CAAC,IAAI,wBAAwB,EAAE,CAAC;SAC7G;QAED,MAAM,KAAK,GAAgC;YACzC,GAAG,QAAQ,CAAC,MAAM,EAAE;YACpB,GAAG,OAAO;SACX,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uCAAuC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACpH,CAAC;CACF;AA5CD,wEA4CC;AAED;;GAEG;AACH,MAAa,2BAA4B,SAAQ,mBAA4C;IAC3E,KAAK,CAAC,eAAe,CAAC,QAAgC,EAAE,aAAqB,EAAE,iBAAsB,EAAE,iBAAsB;QAC3I,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,CAAC,CAAC;QAC3G,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YACjG,OAAO,OAAO,CAAC;SAChB;QAED,QAAQ,aAAa,EAAE;YACrB,KAAK,eAAe,CAAC,CAAC;gBACpB,OAAO,EAAE,YAAY,EAAE,0BAA0B,QAAQ,CAAC,IAAI,8BAA8B,EAAC,CAAC;aAC/F;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEe,KAAK,CAAC,eAAe,CAAC,QAAuB,EAAE,QAAgC;QAC7F,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QACvD,IAAI,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE;YAC7E,OAAO,OAAO,CAAC;SAChB;QAED,MAAM,KAAK,GAAgC;YACzC,GAAG,QAAQ,CAAC,MAAM,EAAE;YACpB,GAAG,OAAO;SACX,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qCAAqC,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpI,CAAC;CACF;AA3BD,kEA2BC","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 { ArrayProperty, Enumeration, EnumerationArrayProperty, PrimitiveArrayProperty, SchemaItemKey, StructArrayProperty, StructArrayPropertyProps, StructClass } from \"@itwin/ecschema-metadata\";\r\nimport { PrimitiveArrayPropertyProps } from \"@itwin/ecschema-metadata/src/Deserialization/JsonProps\";\r\nimport { AnyPropertyMerger } from \"./AnyPropertyMerger\";\r\nimport { PropertyEditResults } from \"../Editing/Editor\";\r\nimport { MutableArrayProperty } from \"../Editing/Mutable/MutableArrayProperty\";\r\n\r\n/**\r\n * @internal\r\n */\r\nclass ArrayPropertyMerger<TArrayProperty extends ArrayProperty> extends AnyPropertyMerger <TArrayProperty> {\r\n public override async mergeAttributes(property: TArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean> {\r\n const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);\r\n if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n const mutableProperty = property as unknown as MutableArrayProperty;\r\n switch (attributeName) {\r\n case \"minOccurs\":\r\n mutableProperty.setMinOccurs(attributeNewValue);\r\n return true;\r\n\r\n case \"maxOccurs\":\r\n mutableProperty.setMaxOccurs(attributeNewValue);\r\n return true;\r\n\r\n }\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class StructArrayPropertyMerger extends ArrayPropertyMerger <StructArrayProperty> {\r\n public override async mergeAttributes(property: StructArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean> {\r\n const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);\r\n if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n switch (attributeName) {\r\n case \"structClass\": {\r\n if (attributeOldValue !== undefined) {\r\n return { errorMessage: `Changing the property '${property.name}' structClass is not supported.` };\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public override async createFromProps(classKey: SchemaItemKey, property: StructArrayProperty): Promise<PropertyEditResults> {\r\n const results = await super.getPropertyProps(property);\r\n if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n const itemKey = new SchemaItemKey(property.structClass.name, this.context.sourceSchema.schemaKey.matches(property.structClass.schema.schemaKey)\r\n ? this.context.targetSchema.schemaKey\r\n : property.structClass.schema.schemaKey,\r\n );\r\n const type = await this.context.targetSchema.lookupItem<StructClass>(itemKey);\r\n if (type === undefined) {\r\n return { errorMessage: `Unable to locate the struct class ${property.structClass.name} in the merged schema.` };\r\n }\r\n\r\n const props: StructArrayPropertyProps = {\r\n ...property.toJSON(),\r\n ...results,\r\n typeName: type.fullName,\r\n };\r\n return this.context.editor.entities.createStructArrayPropertyFromProps(classKey, property.name, type, props);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class EnumerationArrayPropertyMerger extends ArrayPropertyMerger <EnumerationArrayProperty> {\r\n public override async mergeAttributes(property: EnumerationArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean> {\r\n const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);\r\n if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n switch (attributeName) {\r\n case \"enumeration\": {\r\n if (attributeOldValue !== undefined) {\r\n return { errorMessage: `Changing the property '${property.name}' enumeration is not supported.` };\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public override async createFromProps(classKey: SchemaItemKey, property: EnumerationArrayProperty): Promise<PropertyEditResults> {\r\n const results = await super.getPropertyProps(property);\r\n if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n if (property.enumeration === undefined) {\r\n return { errorMessage: `Property '${property.fullName}' is missing the required 'enumeration' attribute.` };\r\n }\r\n\r\n const enumeration = await property.enumeration;\r\n const itemKey = new SchemaItemKey(enumeration.name, this.context.sourceSchema.schemaKey.matches(enumeration.schema.schemaKey)\r\n ? this.context.targetSchema.schemaKey\r\n : enumeration.schema.schemaKey,\r\n );\r\n const type = await this.context.targetSchema.lookupItem<Enumeration>(itemKey);\r\n if (type === undefined) {\r\n return { errorMessage: `Unable to locate the enumeration class ${enumeration.name} in the merged schema.` };\r\n }\r\n\r\n const props: PrimitiveArrayPropertyProps = {\r\n ...property.toJSON(),\r\n ...results,\r\n };\r\n return this.context.editor.entities.createEnumerationArrayPropertyFromProps(classKey, property.name, type, props);\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class PrimitiveArraPropertyMerger extends ArrayPropertyMerger <PrimitiveArrayProperty> {\r\n public override async mergeAttributes(property: PrimitiveArrayProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean> {\r\n const results = await super.mergeAttributes(property, attributeName, attributeNewValue, attributeOldValue);\r\n if (results === true || this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n switch (attributeName) {\r\n case \"primitiveType\": {\r\n return { errorMessage: `Changing the property '${property.name}' typeName is not supported.`};\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public override async createFromProps(classKey: SchemaItemKey, property: PrimitiveArrayProperty): Promise<PropertyEditResults> {\r\n const results = await super.getPropertyProps(property);\r\n if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n return results;\r\n }\r\n\r\n const props: PrimitiveArrayPropertyProps = {\r\n ...property.toJSON(),\r\n ...results,\r\n };\r\n return this.context.editor.entities.createPrimitiveArrayPropertyFromProps(classKey, property.name, property.primitiveType, props);\r\n }\r\n}\r\n"]}
@@ -1,16 +0,0 @@
1
- import { SchemaItemKey } from "@itwin/ecschema-metadata";
2
- import { PropertyEditResults, SchemaItemEditResults } from "../Editing/Editor";
3
- import { PropertyChanges } from "../Validation/SchemaChanges";
4
- import { SchemaMergeContext } from "./SchemaMerger";
5
- /**
6
- * @internal
7
- */
8
- export declare class ClassPropertyMerger {
9
- protected readonly context: SchemaMergeContext;
10
- constructor(context: SchemaMergeContext);
11
- private getPropertyMerger;
12
- protected isPropertyEditResults(obj: any): obj is PropertyEditResults;
13
- private mergeAttributeValueChanges;
14
- static mergeChanges(context: SchemaMergeContext, classKey: SchemaItemKey, propertyChanges: Iterable<PropertyChanges>): Promise<SchemaItemEditResults>;
15
- }
16
- //# sourceMappingURL=ClassPropertyMerger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassPropertyMerger.d.ts","sourceRoot":"","sources":["../../../src/Merging/ClassPropertyMerger.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2C,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAClG,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAc,eAAe,EAAuB,MAAM,6BAA6B,CAAC;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAOpD;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,CAAC;gBAEnC,OAAO,EAAE,kBAAkB;IAIvC,OAAO,CAAC,iBAAiB;IAsBzB,SAAS,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,mBAAmB;YAIvD,0BAA0B;WAepB,YAAY,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAmCnK"}
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClassPropertyMerger = void 0;
4
- /*---------------------------------------------------------------------------------------------
5
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
- * See LICENSE.md in the project root for license terms and full copyright notice.
7
- *--------------------------------------------------------------------------------------------*/
8
- const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
9
- const SchemaChanges_1 = require("../Validation/SchemaChanges");
10
- const StructPropertyMerger_1 = require("./StructPropertyMerger");
11
- const ArrayPropertyMerger_1 = require("./ArrayPropertyMerger");
12
- const PrimitiveOrEnumPropertyMerger_1 = require("./PrimitiveOrEnumPropertyMerger");
13
- const CustomAttributeMerger_1 = require("./CustomAttributeMerger");
14
- /**
15
- * @internal
16
- */
17
- class ClassPropertyMerger {
18
- constructor(context) {
19
- this.context = context;
20
- }
21
- getPropertyMerger(property) {
22
- if (property.isEnumeration()) {
23
- if (property.isArray()) {
24
- return new ArrayPropertyMerger_1.EnumerationArrayPropertyMerger(this.context);
25
- }
26
- return new PrimitiveOrEnumPropertyMerger_1.EnumerationPropertyMerger(this.context);
27
- }
28
- if (property.isPrimitive()) {
29
- if (property.isArray()) {
30
- return new ArrayPropertyMerger_1.PrimitiveArraPropertyMerger(this.context);
31
- }
32
- return new PrimitiveOrEnumPropertyMerger_1.PrimitivePropertyMerger(this.context);
33
- }
34
- if (property.isStruct()) {
35
- if (property.isArray()) {
36
- return new ArrayPropertyMerger_1.StructArrayPropertyMerger(this.context);
37
- }
38
- return new StructPropertyMerger_1.StructPropertyMerger(this.context);
39
- }
40
- throw new Error(`Unsupported Property Type: ${(0, ecschema_metadata_1.propertyTypeToString)(property.propertyType)}`);
41
- }
42
- isPropertyEditResults(obj) {
43
- return typeof obj === "object" && "errorMessage" in obj;
44
- }
45
- async mergeAttributeValueChanges(targetProperty, propertyValueChanges) {
46
- if (propertyValueChanges.length === 0)
47
- return;
48
- const merger = this.getPropertyMerger(targetProperty);
49
- for (const change of propertyValueChanges) {
50
- const [attributeName, attributeNewValue, attributeOldValue] = change.diagnostic.messageArgs;
51
- const results = await merger.mergeAttributes(targetProperty, attributeName, attributeNewValue, attributeOldValue);
52
- if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {
53
- throw new Error(results.errorMessage);
54
- }
55
- }
56
- }
57
- static async mergeChanges(context, classKey, propertyChanges) {
58
- const merger = new this(context);
59
- for (const change of propertyChanges) {
60
- const targetItem = await context.targetSchema.lookupItem(classKey);
61
- if (targetItem === undefined) {
62
- return { errorMessage: `'${classKey.name}' class could not be located in the merged schema.` };
63
- }
64
- if (change.propertyMissing?.changeType === SchemaChanges_1.ChangeType.Missing) {
65
- const sourceProperty = change.propertyMissing.diagnostic.ecDefinition;
66
- if (await targetItem.getProperty(change.ecTypeName) !== undefined) {
67
- return { errorMessage: `Merged schema already contains a class '${classKey.name}' property '${change.ecTypeName}'.` };
68
- }
69
- const propertyMerger = merger.getPropertyMerger(sourceProperty);
70
- const results = await propertyMerger.createFromProps(classKey, sourceProperty);
71
- if (results.errorMessage !== undefined) {
72
- return { errorMessage: results.errorMessage };
73
- }
74
- }
75
- else {
76
- const targetProperty = (await targetItem.getProperty(change.ecTypeName));
77
- await merger.mergeAttributeValueChanges(targetProperty, change.propertyValueChanges);
78
- }
79
- const mergeResults = await (0, CustomAttributeMerger_1.mergeCustomAttributes)(merger.context, change.customAttributeChanges.values(), async (ca) => {
80
- return merger.context.editor.entities.addCustomAttributeToProperty(classKey, change.ecTypeName, ca);
81
- });
82
- if (mergeResults.errorMessage !== undefined) {
83
- return { errorMessage: mergeResults.errorMessage };
84
- }
85
- }
86
- return { itemKey: classKey };
87
- }
88
- }
89
- exports.ClassPropertyMerger = ClassPropertyMerger;
90
- //# sourceMappingURL=ClassPropertyMerger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClassPropertyMerger.js","sourceRoot":"","sources":["../../../src/Merging/ClassPropertyMerger.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 { ECClass, Property, propertyTypeToString, SchemaItemKey } from \"@itwin/ecschema-metadata\";\r\nimport { PropertyEditResults, SchemaItemEditResults } from \"../Editing/Editor\";\r\nimport { ChangeType, PropertyChanges, PropertyValueChange } from \"../Validation/SchemaChanges\";\r\nimport { SchemaMergeContext } from \"./SchemaMerger\";\r\nimport { StructPropertyMerger } from \"./StructPropertyMerger\";\r\nimport { EnumerationArrayPropertyMerger, PrimitiveArraPropertyMerger, StructArrayPropertyMerger } from \"./ArrayPropertyMerger\";\r\nimport { AnyPropertyMerger } from \"./AnyPropertyMerger\";\r\nimport { EnumerationPropertyMerger, PrimitivePropertyMerger } from \"./PrimitiveOrEnumPropertyMerger\";\r\nimport { mergeCustomAttributes } from \"./CustomAttributeMerger\";\r\n\r\n/**\r\n * @internal\r\n */\r\nexport class ClassPropertyMerger {\r\n protected readonly context: SchemaMergeContext;\r\n\r\n constructor(context: SchemaMergeContext) {\r\n this.context = context;\r\n }\r\n\r\n private getPropertyMerger(property: Property): AnyPropertyMerger<Property> {\r\n if (property.isEnumeration()) {\r\n if (property.isArray()) {\r\n return new EnumerationArrayPropertyMerger(this.context);\r\n }\r\n return new EnumerationPropertyMerger(this.context);\r\n }\r\n if (property.isPrimitive()) {\r\n if (property.isArray()) {\r\n return new PrimitiveArraPropertyMerger(this.context);\r\n }\r\n return new PrimitivePropertyMerger(this.context);\r\n }\r\n if (property.isStruct()) {\r\n if (property.isArray()) {\r\n return new StructArrayPropertyMerger(this.context);\r\n }\r\n return new StructPropertyMerger(this.context);\r\n }\r\n throw new Error(`Unsupported Property Type: ${propertyTypeToString(property.propertyType)}`);\r\n }\r\n\r\n protected isPropertyEditResults(obj: any): obj is PropertyEditResults {\r\n return typeof obj === \"object\" && \"errorMessage\" in obj;\r\n }\r\n\r\n private async mergeAttributeValueChanges(targetProperty: Property, propertyValueChanges: PropertyValueChange[]) {\r\n if (propertyValueChanges.length === 0)\r\n return;\r\n\r\n const merger = this.getPropertyMerger(targetProperty);\r\n\r\n for (const change of propertyValueChanges) {\r\n const [attributeName, attributeNewValue, attributeOldValue] = change.diagnostic.messageArgs!;\r\n const results = await merger.mergeAttributes(targetProperty, attributeName, attributeNewValue, attributeOldValue);\r\n if (this.isPropertyEditResults(results) && results.errorMessage !== undefined) {\r\n throw new Error(results.errorMessage);\r\n }\r\n }\r\n }\r\n\r\n public static async mergeChanges(context: SchemaMergeContext, classKey: SchemaItemKey, propertyChanges: Iterable<PropertyChanges>): Promise<SchemaItemEditResults> {\r\n const merger = new this(context);\r\n\r\n for (const change of propertyChanges) {\r\n const targetItem = await context.targetSchema.lookupItem<ECClass>(classKey);\r\n if (targetItem === undefined) {\r\n return { errorMessage: `'${classKey.name}' class could not be located in the merged schema.`};\r\n }\r\n\r\n if (change.propertyMissing?.changeType === ChangeType.Missing) {\r\n const sourceProperty = change.propertyMissing.diagnostic.ecDefinition as unknown as Property;\r\n if (await targetItem.getProperty(change.ecTypeName) !== undefined) {\r\n return { errorMessage: `Merged schema already contains a class '${classKey.name}' property '${change.ecTypeName}'.`};\r\n }\r\n\r\n const propertyMerger = merger.getPropertyMerger(sourceProperty);\r\n const results = await propertyMerger.createFromProps(classKey, sourceProperty);\r\n if (results.errorMessage !== undefined) {\r\n return { errorMessage: results.errorMessage};\r\n }\r\n } else {\r\n const targetProperty = (await targetItem.getProperty(change.ecTypeName))!;\r\n await merger.mergeAttributeValueChanges(targetProperty, change.propertyValueChanges);\r\n }\r\n\r\n const mergeResults = await mergeCustomAttributes(merger.context, change.customAttributeChanges.values(), async (ca) => {\r\n return merger.context.editor.entities.addCustomAttributeToProperty(classKey, change.ecTypeName, ca);\r\n });\r\n\r\n if (mergeResults.errorMessage !== undefined) {\r\n return { errorMessage: mergeResults.errorMessage};\r\n }\r\n }\r\n return { itemKey: classKey };\r\n }\r\n}\r\n"]}
@@ -1,24 +0,0 @@
1
- import { EnumerationProperty, PrimitiveOrEnumPropertyBase, PrimitiveProperty, SchemaItemKey } from "@itwin/ecschema-metadata";
2
- import { AnyPropertyMerger } from "./AnyPropertyMerger";
3
- import { PropertyEditResults } from "../Editing/Editor";
4
- /**
5
- * @internal
6
- */
7
- declare abstract class PrimitiveOrEnumPropertyMerger<TPrimitiveOrEnumPropertyBase extends PrimitiveOrEnumPropertyBase> extends AnyPropertyMerger<TPrimitiveOrEnumPropertyBase> {
8
- mergeAttributes(property: TPrimitiveOrEnumPropertyBase, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
9
- }
10
- /**
11
- * @internal
12
- */
13
- export declare class PrimitivePropertyMerger extends PrimitiveOrEnumPropertyMerger<PrimitiveProperty> {
14
- createFromProps(classKey: SchemaItemKey, property: PrimitiveProperty): Promise<PropertyEditResults>;
15
- }
16
- /**
17
- * @internal
18
- */
19
- export declare class EnumerationPropertyMerger extends PrimitiveOrEnumPropertyMerger<EnumerationProperty> {
20
- mergeAttributes(property: EnumerationProperty, attributeName: string, attributeNewValue: any, attributeOldValue: any): Promise<PropertyEditResults | boolean>;
21
- createFromProps(classKey: SchemaItemKey, property: EnumerationProperty): Promise<PropertyEditResults>;
22
- }
23
- export {};
24
- //# sourceMappingURL=PrimitiveOrEnumPropertyMerger.d.ts.map