@itwin/ecschema-editing 4.6.0-dev.9 → 4.6.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 (135) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/lib/cjs/Differencing/SchemaConflicts.d.ts +14 -0
  3. package/lib/cjs/Differencing/SchemaConflicts.d.ts.map +1 -1
  4. package/lib/cjs/Differencing/SchemaConflicts.js +15 -2
  5. package/lib/cjs/Differencing/SchemaConflicts.js.map +1 -1
  6. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.d.ts.map +1 -1
  7. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js +0 -52
  8. package/lib/cjs/Differencing/SchemaDiagnosticVisitor.js.map +1 -1
  9. package/lib/cjs/Differencing/SchemaDifference.d.ts +2 -2
  10. package/lib/cjs/Differencing/SchemaDifference.d.ts.map +1 -1
  11. package/lib/cjs/Differencing/SchemaDifference.js +3 -3
  12. package/lib/cjs/Differencing/SchemaDifference.js.map +1 -1
  13. package/lib/cjs/Editing/Constants.js.map +1 -1
  14. package/lib/cjs/Editing/CustomAttributes.d.ts +1 -1
  15. package/lib/cjs/Editing/CustomAttributes.d.ts.map +1 -1
  16. package/lib/cjs/Editing/CustomAttributes.js +2 -2
  17. package/lib/cjs/Editing/CustomAttributes.js.map +1 -1
  18. package/lib/cjs/Editing/ECClasses.d.ts +29 -23
  19. package/lib/cjs/Editing/ECClasses.d.ts.map +1 -1
  20. package/lib/cjs/Editing/ECClasses.js +51 -95
  21. package/lib/cjs/Editing/ECClasses.js.map +1 -1
  22. package/lib/cjs/Editing/Editor.js.map +1 -1
  23. package/lib/cjs/Editing/Entities.d.ts +6 -7
  24. package/lib/cjs/Editing/Entities.d.ts.map +1 -1
  25. package/lib/cjs/Editing/Entities.js +7 -27
  26. package/lib/cjs/Editing/Entities.js.map +1 -1
  27. package/lib/cjs/Editing/Enumerations.js.map +1 -1
  28. package/lib/cjs/Editing/Formats.js.map +1 -1
  29. package/lib/cjs/Editing/InvertedUnits.js.map +1 -1
  30. package/lib/cjs/Editing/KindOfQuantities.js.map +1 -1
  31. package/lib/cjs/Editing/Mixins.d.ts +6 -2
  32. package/lib/cjs/Editing/Mixins.d.ts.map +1 -1
  33. package/lib/cjs/Editing/Mixins.js +7 -22
  34. package/lib/cjs/Editing/Mixins.js.map +1 -1
  35. package/lib/cjs/Editing/Mutable/MutableArrayProperty.js.map +1 -1
  36. package/lib/cjs/Editing/Mutable/MutableCAClass.js.map +1 -1
  37. package/lib/cjs/Editing/Mutable/MutableClass.js.map +1 -1
  38. package/lib/cjs/Editing/Mutable/MutableConstant.js.map +1 -1
  39. package/lib/cjs/Editing/Mutable/MutableEntityClass.js +2 -2
  40. package/lib/cjs/Editing/Mutable/MutableEntityClass.js.map +1 -1
  41. package/lib/cjs/Editing/Mutable/MutableEnumeration.js.map +1 -1
  42. package/lib/cjs/Editing/Mutable/MutableFormat.js.map +1 -1
  43. package/lib/cjs/Editing/Mutable/MutableInvertedUnit.js.map +1 -1
  44. package/lib/cjs/Editing/Mutable/MutableKindOfQuantity.js.map +1 -1
  45. package/lib/cjs/Editing/Mutable/MutableMixin.js.map +1 -1
  46. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.d.ts +8 -0
  47. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.d.ts.map +1 -0
  48. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js +16 -0
  49. package/lib/cjs/Editing/Mutable/MutableNavigationProperty.js.map +1 -0
  50. package/lib/cjs/Editing/Mutable/MutablePhenomenon.js.map +1 -1
  51. package/lib/cjs/Editing/Mutable/MutablePrimitiveOrEnumProperty.js.map +1 -1
  52. package/lib/cjs/Editing/Mutable/MutableProperty.js.map +1 -1
  53. package/lib/cjs/Editing/Mutable/MutablePropertyCategory.js.map +1 -1
  54. package/lib/cjs/Editing/Mutable/MutableRelationshipClass.js.map +1 -1
  55. package/lib/cjs/Editing/Mutable/MutableSchema.js.map +1 -1
  56. package/lib/cjs/Editing/Mutable/MutableStructProperty.d.ts +8 -0
  57. package/lib/cjs/Editing/Mutable/MutableStructProperty.d.ts.map +1 -0
  58. package/lib/cjs/Editing/Mutable/MutableStructProperty.js +16 -0
  59. package/lib/cjs/Editing/Mutable/MutableStructProperty.js.map +1 -0
  60. package/lib/cjs/Editing/Mutable/MutableUnit.js.map +1 -1
  61. package/lib/cjs/Editing/Mutable/MutableUnitSystem.js.map +1 -1
  62. package/lib/cjs/Editing/Phenomena.js.map +1 -1
  63. package/lib/cjs/Editing/Properties.d.ts +201 -0
  64. package/lib/cjs/Editing/Properties.d.ts.map +1 -0
  65. package/lib/cjs/Editing/Properties.js +349 -0
  66. package/lib/cjs/Editing/Properties.js.map +1 -0
  67. package/lib/cjs/Editing/PropertyCategories.js.map +1 -1
  68. package/lib/cjs/Editing/RelationshipClasses.d.ts +12 -1
  69. package/lib/cjs/Editing/RelationshipClasses.d.ts.map +1 -1
  70. package/lib/cjs/Editing/RelationshipClasses.js +26 -3
  71. package/lib/cjs/Editing/RelationshipClasses.js.map +1 -1
  72. package/lib/cjs/Editing/SchemaItems.js.map +1 -1
  73. package/lib/cjs/Editing/Structs.d.ts +1 -1
  74. package/lib/cjs/Editing/Structs.d.ts.map +1 -1
  75. package/lib/cjs/Editing/Structs.js +2 -2
  76. package/lib/cjs/Editing/Structs.js.map +1 -1
  77. package/lib/cjs/Editing/UnitSystems.js.map +1 -1
  78. package/lib/cjs/Editing/Units.js.map +1 -1
  79. package/lib/cjs/Merging/CAClassMerger.js.map +1 -1
  80. package/lib/cjs/Merging/ClassMerger.js +7 -16
  81. package/lib/cjs/Merging/ClassMerger.js.map +1 -1
  82. package/lib/cjs/Merging/ConstantMerger.js.map +1 -1
  83. package/lib/cjs/Merging/CustomAttributeMerger.d.ts.map +1 -1
  84. package/lib/cjs/Merging/CustomAttributeMerger.js +6 -1
  85. package/lib/cjs/Merging/CustomAttributeMerger.js.map +1 -1
  86. package/lib/cjs/Merging/EntityClassMerger.js.map +1 -1
  87. package/lib/cjs/Merging/EnumerationMerger.js.map +1 -1
  88. package/lib/cjs/Merging/KindOfQuantityMerger.js.map +1 -1
  89. package/lib/cjs/Merging/MixinMerger.js.map +1 -1
  90. package/lib/cjs/Merging/PhenomenonMerger.js.map +1 -1
  91. package/lib/cjs/Merging/PropertyCategoryMerger.js.map +1 -1
  92. package/lib/cjs/Merging/PropertyMerger.d.ts.map +1 -1
  93. package/lib/cjs/Merging/PropertyMerger.js +54 -23
  94. package/lib/cjs/Merging/PropertyMerger.js.map +1 -1
  95. package/lib/cjs/Merging/RelationshipClassMerger.js.map +1 -1
  96. package/lib/cjs/Merging/SchemaItemMerger.js.map +1 -1
  97. package/lib/cjs/Merging/SchemaMerger.d.ts +1 -1
  98. package/lib/cjs/Merging/SchemaMerger.d.ts.map +1 -1
  99. package/lib/cjs/Merging/SchemaMerger.js +12 -8
  100. package/lib/cjs/Merging/SchemaMerger.js.map +1 -1
  101. package/lib/cjs/Merging/SchemaReferenceMerger.js.map +1 -1
  102. package/lib/cjs/Merging/UnitSystemMerger.js.map +1 -1
  103. package/lib/cjs/Validation/Diagnostic.d.ts +2 -2
  104. package/lib/cjs/Validation/Diagnostic.d.ts.map +1 -1
  105. package/lib/cjs/Validation/Diagnostic.js +4 -4
  106. package/lib/cjs/Validation/Diagnostic.js.map +1 -1
  107. package/lib/cjs/Validation/DiagnosticReporter.js.map +1 -1
  108. package/lib/cjs/Validation/ECRules.d.ts +35 -35
  109. package/lib/cjs/Validation/ECRules.d.ts.map +1 -1
  110. package/lib/cjs/Validation/ECRules.js.map +1 -1
  111. package/lib/cjs/Validation/LoggingDiagnosticReporter.js.map +1 -1
  112. package/lib/cjs/Validation/RuleSuppressionSet.js.map +1 -1
  113. package/lib/cjs/Validation/Rules.js.map +1 -1
  114. package/lib/cjs/Validation/SchemaChanges.d.ts +38 -6
  115. package/lib/cjs/Validation/SchemaChanges.d.ts.map +1 -1
  116. package/lib/cjs/Validation/SchemaChanges.js +97 -27
  117. package/lib/cjs/Validation/SchemaChanges.js.map +1 -1
  118. package/lib/cjs/Validation/SchemaCompareDiagnostics.js.map +1 -1
  119. package/lib/cjs/Validation/SchemaCompareReporter.js.map +1 -1
  120. package/lib/cjs/Validation/SchemaCompareResultDelegate.js.map +1 -1
  121. package/lib/cjs/Validation/SchemaCompareVisitor.js +4 -3
  122. package/lib/cjs/Validation/SchemaCompareVisitor.js.map +1 -1
  123. package/lib/cjs/Validation/SchemaComparer.d.ts +1 -0
  124. package/lib/cjs/Validation/SchemaComparer.d.ts.map +1 -1
  125. package/lib/cjs/Validation/SchemaComparer.js +238 -260
  126. package/lib/cjs/Validation/SchemaComparer.js.map +1 -1
  127. package/lib/cjs/Validation/SchemaValidater.js.map +1 -1
  128. package/lib/cjs/Validation/SchemaValidationVisitor.js.map +1 -1
  129. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  130. package/lib/cjs/ecschema-editing.d.ts +2 -0
  131. package/lib/cjs/ecschema-editing.d.ts.map +1 -1
  132. package/lib/cjs/ecschema-editing.js +2 -0
  133. package/lib/cjs/ecschema-editing.js.map +1 -1
  134. package/package.json +11 -11
  135. package/public/locales/en/ECSchemaEditing.json +26 -26
@@ -2,7 +2,7 @@
2
2
  * @module Validation
3
3
  */
4
4
  import { AnyClass, AnyProperty, CustomAttribute, CustomAttributeContainerProps, EntityClass, Enumeration, RelationshipClass, RelationshipConstraint, Schema } from "@itwin/ecschema-metadata";
5
- import { ClassDiagnostic, CustomAttributeContainerDiagnostic, PropertyDiagnostic, RelationshipConstraintDiagnostic, SchemaDiagnostic, SchemaItemDiagnostic } from "./Diagnostic";
5
+ import { ClassDiagnostic, CustomAttributeContainerDiagnostic, DiagnosticType, PropertyDiagnostic, RelationshipConstraintDiagnostic, SchemaDiagnostic, SchemaItemDiagnostic } from "./Diagnostic";
6
6
  import { IRuleSet } from "./Rules";
7
7
  /**
8
8
  * The unique diagnostic codes for ECObjects rules.
@@ -62,13 +62,13 @@ export declare const Diagnostics: {
62
62
  readonly code: string;
63
63
  readonly messageText: string;
64
64
  readonly schema: Schema;
65
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
65
+ readonly diagnosticType: DiagnosticType;
66
66
  ecDefinition: Schema;
67
67
  messageArgs?: [string, string] | undefined;
68
68
  category: import("./Diagnostic").DiagnosticCategory;
69
69
  };
70
70
  code: string;
71
- diagnosticType: import("./Diagnostic").DiagnosticType;
71
+ diagnosticType: DiagnosticType;
72
72
  };
73
73
  /** EC-002: Required message parameters: schema name, reference schema alias, first schema reference name, second schema reference name. */
74
74
  SchemaRefAliasMustBeUnique: {
@@ -76,13 +76,13 @@ export declare const Diagnostics: {
76
76
  readonly code: string;
77
77
  readonly messageText: string;
78
78
  readonly schema: Schema;
79
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
79
+ readonly diagnosticType: DiagnosticType;
80
80
  ecDefinition: Schema;
81
81
  messageArgs?: [string, string, string, string] | undefined;
82
82
  category: import("./Diagnostic").DiagnosticCategory;
83
83
  };
84
84
  code: string;
85
- diagnosticType: import("./Diagnostic").DiagnosticType;
85
+ diagnosticType: DiagnosticType;
86
86
  };
87
87
  /** EC-003: Required message parameters: schema name, cycle text */
88
88
  ReferenceCyclesNotAllowed: {
@@ -90,13 +90,13 @@ export declare const Diagnostics: {
90
90
  readonly code: string;
91
91
  readonly messageText: string;
92
92
  readonly schema: Schema;
93
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
93
+ readonly diagnosticType: DiagnosticType;
94
94
  ecDefinition: Schema;
95
95
  messageArgs?: [string, string] | undefined;
96
96
  category: import("./Diagnostic").DiagnosticCategory;
97
97
  };
98
98
  code: string;
99
- diagnosticType: import("./Diagnostic").DiagnosticType;
99
+ diagnosticType: DiagnosticType;
100
100
  };
101
101
  /** EC-100: Required message parameters: childClass.FullName, baseClass.FullName */
102
102
  BaseClassIsSealed: {
@@ -104,12 +104,12 @@ export declare const Diagnostics: {
104
104
  readonly code: string;
105
105
  readonly messageText: string;
106
106
  readonly schema: Schema;
107
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
107
+ readonly diagnosticType: DiagnosticType;
108
108
  ecDefinition: AnyClass;
109
109
  messageArgs?: [string, string] | undefined;
110
110
  category: import("./Diagnostic").DiagnosticCategory;
111
111
  };
112
- diagnosticType: import("./Diagnostic").DiagnosticType;
112
+ diagnosticType: DiagnosticType;
113
113
  };
114
114
  /** EC-101: Required message parameters: childClass.FullName, baseClass.FullName, baseClass.schemaItemType */
115
115
  BaseClassIsOfDifferentType: {
@@ -117,12 +117,12 @@ export declare const Diagnostics: {
117
117
  readonly code: string;
118
118
  readonly messageText: string;
119
119
  readonly schema: Schema;
120
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
120
+ readonly diagnosticType: DiagnosticType;
121
121
  ecDefinition: AnyClass;
122
122
  messageArgs?: [string, string, string] | undefined;
123
123
  category: import("./Diagnostic").DiagnosticCategory;
124
124
  };
125
- diagnosticType: import("./Diagnostic").DiagnosticType;
125
+ diagnosticType: DiagnosticType;
126
126
  };
127
127
  /** **DEPRECATED** EC-102: Required message parameters: childClass.FullName, baseClass.FullName */
128
128
  AbstractClassWithNonAbstractBase: {
@@ -130,12 +130,12 @@ export declare const Diagnostics: {
130
130
  readonly code: string;
131
131
  readonly messageText: string;
132
132
  readonly schema: Schema;
133
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
133
+ readonly diagnosticType: DiagnosticType;
134
134
  ecDefinition: AnyClass;
135
135
  messageArgs?: [string, string] | undefined;
136
136
  category: import("./Diagnostic").DiagnosticCategory;
137
137
  };
138
- diagnosticType: import("./Diagnostic").DiagnosticType;
138
+ diagnosticType: DiagnosticType;
139
139
  };
140
140
  /** EC-500: Required message parameters: CustomAttribute container name and CustomAttributeClass name. */
141
141
  CustomAttributeNotOfConcreteClass: {
@@ -143,7 +143,7 @@ export declare const Diagnostics: {
143
143
  readonly code: string;
144
144
  readonly messageText: string;
145
145
  readonly schema: Schema;
146
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
146
+ readonly diagnosticType: DiagnosticType;
147
147
  ecDefinition: CustomAttributeContainerProps;
148
148
  messageArgs?: [string, string] | undefined;
149
149
  category: import("./Diagnostic").DiagnosticCategory;
@@ -155,7 +155,7 @@ export declare const Diagnostics: {
155
155
  readonly code: string;
156
156
  readonly messageText: string;
157
157
  readonly schema: Schema;
158
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
158
+ readonly diagnosticType: DiagnosticType;
159
159
  ecDefinition: CustomAttributeContainerProps;
160
160
  messageArgs?: [string, string] | undefined;
161
161
  category: import("./Diagnostic").DiagnosticCategory;
@@ -167,7 +167,7 @@ export declare const Diagnostics: {
167
167
  readonly code: string;
168
168
  readonly messageText: string;
169
169
  readonly schema: Schema;
170
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
170
+ readonly diagnosticType: DiagnosticType;
171
171
  ecDefinition: CustomAttributeContainerProps;
172
172
  messageArgs?: [string, string] | undefined;
173
173
  category: import("./Diagnostic").DiagnosticCategory;
@@ -179,12 +179,12 @@ export declare const Diagnostics: {
179
179
  readonly code: string;
180
180
  readonly messageText: string;
181
181
  readonly schema: Schema;
182
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
182
+ readonly diagnosticType: DiagnosticType;
183
183
  ecDefinition: Enumeration;
184
184
  messageArgs?: [string] | undefined;
185
185
  category: import("./Diagnostic").DiagnosticCategory;
186
186
  };
187
- diagnosticType: import("./Diagnostic").DiagnosticType;
187
+ diagnosticType: DiagnosticType;
188
188
  };
189
189
  /** EC-1100: Required message parameters: mixin class fullName, class fullName, applies to constraint class fullName */
190
190
  MixinAppliedToClassMustDeriveFromConstraint: {
@@ -192,12 +192,12 @@ export declare const Diagnostics: {
192
192
  readonly code: string;
193
193
  readonly messageText: string;
194
194
  readonly schema: Schema;
195
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
195
+ readonly diagnosticType: DiagnosticType;
196
196
  ecDefinition: EntityClass;
197
197
  messageArgs?: [string, string, string] | undefined;
198
198
  category: import("./Diagnostic").DiagnosticCategory;
199
199
  };
200
- diagnosticType: import("./Diagnostic").DiagnosticType;
200
+ diagnosticType: DiagnosticType;
201
201
  };
202
202
  /** EC-1300: Required message parameters: childClass.FullName, property name, baseClass.FullName, base value type, child value type */
203
203
  IncompatibleValueTypePropertyOverride: {
@@ -205,7 +205,7 @@ export declare const Diagnostics: {
205
205
  readonly code: string;
206
206
  readonly messageText: string;
207
207
  readonly schema: Schema;
208
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
208
+ readonly diagnosticType: DiagnosticType;
209
209
  ecDefinition: AnyProperty;
210
210
  messageArgs?: [string, string, string, string, string] | undefined;
211
211
  category: import("./Diagnostic").DiagnosticCategory;
@@ -218,7 +218,7 @@ export declare const Diagnostics: {
218
218
  readonly code: string;
219
219
  readonly messageText: string;
220
220
  readonly schema: Schema;
221
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
221
+ readonly diagnosticType: DiagnosticType;
222
222
  ecDefinition: AnyProperty;
223
223
  messageArgs?: [string, string, string, string, string] | undefined;
224
224
  category: import("./Diagnostic").DiagnosticCategory;
@@ -231,7 +231,7 @@ export declare const Diagnostics: {
231
231
  readonly code: string;
232
232
  readonly messageText: string;
233
233
  readonly schema: Schema;
234
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
234
+ readonly diagnosticType: DiagnosticType;
235
235
  ecDefinition: AnyProperty;
236
236
  messageArgs?: [string, string, string, string, string, string, string] | undefined;
237
237
  category: import("./Diagnostic").DiagnosticCategory;
@@ -244,7 +244,7 @@ export declare const Diagnostics: {
244
244
  readonly code: string;
245
245
  readonly messageText: string;
246
246
  readonly schema: Schema;
247
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
247
+ readonly diagnosticType: DiagnosticType;
248
248
  ecDefinition: AnyProperty;
249
249
  messageArgs?: [string, string] | undefined;
250
250
  category: import("./Diagnostic").DiagnosticCategory;
@@ -257,7 +257,7 @@ export declare const Diagnostics: {
257
257
  readonly code: string;
258
258
  readonly messageText: string;
259
259
  readonly schema: Schema;
260
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
260
+ readonly diagnosticType: DiagnosticType;
261
261
  ecDefinition: AnyProperty;
262
262
  messageArgs?: [string, string, string] | undefined;
263
263
  category: import("./Diagnostic").DiagnosticCategory;
@@ -270,7 +270,7 @@ export declare const Diagnostics: {
270
270
  readonly code: string;
271
271
  readonly messageText: string;
272
272
  readonly schema: Schema;
273
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
273
+ readonly diagnosticType: DiagnosticType;
274
274
  ecDefinition: AnyProperty;
275
275
  messageArgs?: [string, string] | undefined;
276
276
  category: import("./Diagnostic").DiagnosticCategory;
@@ -283,7 +283,7 @@ export declare const Diagnostics: {
283
283
  readonly code: string;
284
284
  readonly messageText: string;
285
285
  readonly schema: Schema;
286
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
286
+ readonly diagnosticType: DiagnosticType;
287
287
  ecDefinition: AnyProperty;
288
288
  messageArgs?: [string, string, string, string] | undefined;
289
289
  category: import("./Diagnostic").DiagnosticCategory;
@@ -296,12 +296,12 @@ export declare const Diagnostics: {
296
296
  readonly code: string;
297
297
  readonly messageText: string;
298
298
  readonly schema: Schema;
299
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
299
+ readonly diagnosticType: DiagnosticType;
300
300
  ecDefinition: RelationshipClass;
301
301
  messageArgs?: [string, string, string, string] | undefined;
302
302
  category: import("./Diagnostic").DiagnosticCategory;
303
303
  };
304
- diagnosticType: import("./Diagnostic").DiagnosticType;
304
+ diagnosticType: DiagnosticType;
305
305
  };
306
306
  /** EC-1501: Required message parameters: constraint class name, relationship end (source/target), relationship name, base relationship name */
307
307
  DerivedConstraintsMustNarrowBaseConstraints: {
@@ -309,12 +309,12 @@ export declare const Diagnostics: {
309
309
  readonly code: string;
310
310
  readonly messageText: string;
311
311
  readonly schema: Schema;
312
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
312
+ readonly diagnosticType: DiagnosticType;
313
313
  ecDefinition: RelationshipClass;
314
314
  messageArgs?: [string, string, string, string] | undefined;
315
315
  category: import("./Diagnostic").DiagnosticCategory;
316
316
  };
317
- diagnosticType: import("./Diagnostic").DiagnosticType;
317
+ diagnosticType: DiagnosticType;
318
318
  };
319
319
  /** EC-1502: Required message parameters: constraint class name, relationship end (source/target), relationship name, abstract constraint class name */
320
320
  ConstraintClassesDeriveFromAbstractConstraint: {
@@ -322,12 +322,12 @@ export declare const Diagnostics: {
322
322
  readonly code: string;
323
323
  readonly messageText: string;
324
324
  readonly schema: Schema;
325
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
325
+ readonly diagnosticType: DiagnosticType;
326
326
  ecDefinition: RelationshipClass;
327
327
  messageArgs?: [string, string, string, string] | undefined;
328
328
  category: import("./Diagnostic").DiagnosticCategory;
329
329
  };
330
- diagnosticType: import("./Diagnostic").DiagnosticType;
330
+ diagnosticType: DiagnosticType;
331
331
  };
332
332
  /** EC-1600: Required message parameters: relationship end (source/target), relationship name */
333
333
  AtLeastOneConstraintClassDefined: {
@@ -335,7 +335,7 @@ export declare const Diagnostics: {
335
335
  readonly code: string;
336
336
  readonly messageText: string;
337
337
  readonly schema: Schema;
338
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
338
+ readonly diagnosticType: DiagnosticType;
339
339
  ecDefinition: RelationshipConstraint;
340
340
  messageArgs?: [string, string] | undefined;
341
341
  category: import("./Diagnostic").DiagnosticCategory;
@@ -347,7 +347,7 @@ export declare const Diagnostics: {
347
347
  readonly code: string;
348
348
  readonly messageText: string;
349
349
  readonly schema: Schema;
350
- readonly diagnosticType: import("./Diagnostic").DiagnosticType;
350
+ readonly diagnosticType: DiagnosticType;
351
351
  ecDefinition: RelationshipConstraint;
352
352
  messageArgs?: [string, string] | undefined;
353
353
  category: import("./Diagnostic").DiagnosticCategory;
@@ -1 +1 @@
1
- {"version":3,"file":"ECRules.d.ts","sourceRoot":"","sources":["../../../src/Validation/ECRules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ECRules.d.ts","sourceRoot":"","sources":["../../../src/Validation/ECRules.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE,6BAA6B,EAClD,WAAW,EAAE,WAAW,EACjC,iBAAiB,EAAE,sBAAsB,EAA4B,MAAM,EAEtF,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,eAAe,EAC4F,kCAAkC,EAE7I,cAAc,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,oBAAoB,EAC7G,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;CA+B3B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW;IACtB,+EAA+E;;;;;;;;;;;;;;IAI/E,2IAA2I;;;;;;;;;;;;;;IAI3I,mEAAmE;;;;;;;;;;;;;;IAInE,mFAAmF;;;;;;;;;;;;;IAInF,6GAA6G;;;;;;;;;;;;;IAI7G,kGAAkG;;;;;;;;;;;;;IAIlG,yGAAyG;;;;;;;;;;;;IAIzG,wIAAwI;;;;;;;;;;;;IAIxI,yGAAyG;;;;;;;;;;;;IAIzG,4DAA4D;;;;;;;;;;;;;IAI5D,uHAAuH;;;;;;;;;;;;;IAIvH,sIAAsI;;;;;;;;;;;;;IAItI,4IAA4I;;;;;;;;;;;;;IAI5I,iNAAiN;;;;;;;;;;;;;IAIjN,gGAAgG;;;;;;;;;;;;;IAIhG,gGAAgG;;;;;;;;;;;;;IAIhG,gGAAgG;;;;;;;;;;;;;IAIhG,wGAAwG;;;;;;;;;;;;;IAIxG,wJAAwJ;;;;;;;;;;;;;IAIxJ,+IAA+I;;;;;;;;;;;;;IAI/I,uJAAuJ;;;;;;;;;;;;;IAIvJ,gGAAgG;;;;;;;;;;;;IAIhG,gGAAgG;;;;;;;;;;;;CAGjG,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,QAkCvB,CAAC;AAIF;;;;GAIG;AACH,wBAAuB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAEtG;AAED;;;;GAIG;AACH,wBAAiB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,CAuB/F;AACD;;;GAGG;AACH,wBAAuB,iBAAiB,CAAC,OAAO,EAAE,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAUjG;AAED;;;GAGG;AACH,wBAAuB,0BAA0B,CAAC,OAAO,EAAE,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,CAAC,CAW1G;AAED;;;EAGE;AACF,wBAAuB,qCAAqC,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAgC5H;AAED;;;GAGG;AACH,wBAAuB,gCAAgC,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAqBvH;AAED;;;GAGG;AACH,wBAAuB,gCAAgC,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CA6CvH;AAED;;;GAGG;AACH,wBAAuB,0BAA0B,CAAC,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CA6DjH;AAED;;;GAGG;AACH,wBAAuB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CAIrI;AAED;;;GAGG;AACH,wBAAuB,2CAA2C,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CAY5J;AAED;;;GAGG;AACH,wBAAuB,2CAA2C,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CAY5J;AAED;;;GAGG;AACH,wBAAuB,6CAA6C,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CAO9J;AAED;;;GAGG;AACH,wBAAuB,8BAA8B,CAAC,UAAU,EAAE,sBAAsB,GAAG,aAAa,CAAC,gCAAgC,CAAC,GAAG,EAAE,CAAC,CAAC,CAGhJ;AAED;;;GAGG;AACH,wBAAuB,gCAAgC,CAAC,UAAU,EAAE,sBAAsB,GAAG,aAAa,CAAC,gCAAgC,CAAC,GAAG,EAAE,CAAC,CAAC,CAKlJ;AAED;;;GAGG;AACH,wBAAuB,kDAAkD,CAAC,UAAU,EAAE,sBAAsB,GAAG,aAAa,CAAC,gCAAgC,CAAC,GAAG,EAAE,CAAC,CAAC,CAWpK;AAaD;;;GAGG;AACH,wBAAuB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAMnI;AAED;;;GAGG;AACH,wBAAuB,2CAA2C,CAAC,WAAW,EAAE,WAAW,GAAG,aAAa,CAAC,oBAAoB,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAWpJ;AAED;;;GAGG;AACH,wBAAuB,+BAA+B,CAAC,SAAS,EAAE,6BAA6B,EAAE,eAAe,EAAE,eAAe,GAAG,aAAa,CAAC,kCAAkC,CAAC,GAAG,EAAE,CAAC,CAAC,CAI3L"}
@@ -1 +1 @@
1
- {"version":3,"file":"ECRules.js","sourceRoot":"","sources":["../../../src/Validation/ECRules.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 Validation\r\n */\r\n\r\nimport {\r\n AnyClass, AnyProperty, CustomAttribute, CustomAttributeContainerProps, ECClass, ECClassModifier,\r\n ECStringConstants, EntityClass, Enumeration, PrimitiveProperty, PrimitiveType, primitiveTypeToString,\r\n Property, RelationshipClass, RelationshipConstraint, RelationshipMultiplicity, Schema, SchemaGraph, SchemaItemType,\r\n StrengthDirection, strengthDirectionToString,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport {\r\n ClassDiagnostic, createClassDiagnosticClass, createCustomAttributeContainerDiagnosticClass, createPropertyDiagnosticClass,\r\n createRelationshipConstraintDiagnosticClass, createSchemaDiagnosticClass, createSchemaItemDiagnosticClass, CustomAttributeContainerDiagnostic,\r\n PropertyDiagnostic, RelationshipConstraintDiagnostic, SchemaDiagnostic, SchemaItemDiagnostic,\r\n} from \"./Diagnostic\";\r\nimport { IRuleSet } from \"./Rules\";\r\n\r\nconst ruleSetName = \"ECObjects\";\r\n\r\nfunction getCode(code: number): string {\r\n return `${ruleSetName}-${code}`;\r\n}\r\n\r\n/**\r\n * The unique diagnostic codes for ECObjects rules.\r\n *\r\n * To provide meaning to code values, with anticipation\r\n * of future rules for all current EC Types, the following\r\n * value ranges should be used:\r\n *\r\n * - Schema: 000-099\r\n * - Class: 100-199\r\n * - Constant: 200-299\r\n * - CustomAttribute 300-399\r\n * - CustomAttributeClass: 400-499\r\n * - CustomAttributeContainer: 500-599\r\n * - EntityClass: 600-699\r\n * - Enumeration: 700-799\r\n * - Format: 800-899\r\n * - InvertedUnit: 900-999\r\n * - KindOfQuantity: 1000-1099\r\n * - Mixin: 1100-1199\r\n * - Phenomenon: 1200-1299\r\n * - Property: 1300-1399\r\n * - PropertyCategory: 1400-1499\r\n * - RelationshipClass: 1500-1599\r\n * - RelationshipConstraint: 1600-1699\r\n * - StructClass: 1700-1799\r\n * - Unit: 1800-1899\r\n * - UnitSystem: 1900-1999\r\n * @beta\r\n */\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\nexport const DiagnosticCodes = {\r\n // Class Rule Codes (100-199)\r\n BaseClassIsSealed: getCode(100),\r\n BaseClassOfDifferentType: getCode(101),\r\n // EC-102 has been deprecated. Leaving the code here to prevent re-use.\r\n AbstractClassWithNonAbstractBase: getCode(102),\r\n\r\n // CA Container Rule Codes (500-599)\r\n CustomAttributeNotOfConcreteClass: getCode(500),\r\n CustomAttributeSchemaMustBeReferenced: getCode(501),\r\n CustomAttributeClassNotFound: getCode(502),\r\n\r\n // Enumeration Rule Codes (700-799)\r\n EnumerationTypeUnsupported: getCode(700),\r\n\r\n // Mixin Rule Codes (1100-1199)\r\n MixinAppliedToClassMustDeriveFromConstraint: getCode(1100),\r\n\r\n // Property Rule Codes (1300-1399)\r\n IncompatibleValueTypePropertyOverride: getCode(1300),\r\n IncompatibleTypePropertyOverride: getCode(1301),\r\n IncompatibleUnitPropertyOverride: getCode(1302),\r\n\r\n // Relationship Rule Codes (1500-1599)\r\n AbstractConstraintMustNarrowBaseConstraints: getCode(1500),\r\n DerivedConstraintsMustNarrowBaseConstraints: getCode(1501),\r\n ConstraintClassesDeriveFromAbstractConstraint: getCode(1502),\r\n\r\n // Relationship Constraint Rule Codes (1600-1699)\r\n AtLeastOneConstraintClassDefined: getCode(1600),\r\n AbstractConstraintMustExistWithMultipleConstraints: getCode(1601),\r\n};\r\n\r\n/**\r\n * The list of [[IDiagnostic]] implementation classes used by the EC rule implementations.\r\n * @beta\r\n */\r\nexport const Diagnostics = {\r\n /** EC-001: Required message parameters: schema name, referenced schema name */\r\n SupplementalSchemasCannotBeReferenced: createSchemaDiagnosticClass<[string, string]>(getCode(1),\r\n \"Referenced schema '{1}' of schema '{0}' is a supplemental schema. Supplemental schemas are not allowed to be referenced.\"),\r\n\r\n /** EC-002: Required message parameters: schema name, reference schema alias, first schema reference name, second schema reference name. */\r\n SchemaRefAliasMustBeUnique: createSchemaDiagnosticClass<[string, string, string, string]>(getCode(2),\r\n \"Schema '{0}' has multiple schema references ({2}, {3}) with the same alias '{1}', which is not allowed.\"),\r\n\r\n /** EC-003: Required message parameters: schema name, cycle text */\r\n ReferenceCyclesNotAllowed: createSchemaDiagnosticClass<[string, string]>(getCode(3),\r\n \"Schema '{0}' has reference cycles: {1}\"),\r\n\r\n /** EC-100: Required message parameters: childClass.FullName, baseClass.FullName */\r\n BaseClassIsSealed: createClassDiagnosticClass<[string, string]>(DiagnosticCodes.BaseClassIsSealed,\r\n \"Class '{0}' cannot derive from sealed base class '{1}'.\"),\r\n\r\n /** EC-101: Required message parameters: childClass.FullName, baseClass.FullName, baseClass.schemaItemType */\r\n BaseClassIsOfDifferentType: createClassDiagnosticClass<[string, string, string]>(DiagnosticCodes.BaseClassOfDifferentType,\r\n \"Class '{0}' cannot derive from base class '{1}' of type '{2}'.\"),\r\n\r\n /** **DEPRECATED** EC-102: Required message parameters: childClass.FullName, baseClass.FullName */\r\n AbstractClassWithNonAbstractBase: createClassDiagnosticClass<[string, string]>(DiagnosticCodes.AbstractClassWithNonAbstractBase,\r\n \"Abstract Class '{0}' cannot derive from base class '{1}' because it is not an abstract class.\"),\r\n\r\n /** EC-500: Required message parameters: CustomAttribute container name and CustomAttributeClass name. */\r\n CustomAttributeNotOfConcreteClass: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeNotOfConcreteClass,\r\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' which is not a concrete class.\"),\r\n\r\n /** EC-501: Required message parameters: CustomAttribute container name, CustomAttributeClass name, CustomAttributeClass Schema name. */\r\n CustomAttributeSchemaMustBeReferenced: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeSchemaMustBeReferenced,\r\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' whose schema is not referenced by the container's Schema.\"),\r\n\r\n /** EC-502: Required message parameters: CustomAttribute container name and CustomAttributeClass name. */\r\n CustomAttributeClassNotFound: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeClassNotFound,\r\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' which cannot be found.\"),\r\n\r\n /** EC-700: Required message parameters: Enumeration name */\r\n EnumerationTypeUnsupported: createSchemaItemDiagnosticClass<Enumeration, [string]>(DiagnosticCodes.EnumerationTypeUnsupported,\r\n \"Enumeration '{0}' has invalid primitive type.\"),\r\n\r\n /** EC-1100: Required message parameters: mixin class fullName, class fullName, applies to constraint class fullName */\r\n MixinAppliedToClassMustDeriveFromConstraint: createSchemaItemDiagnosticClass<EntityClass, [string, string, string]>(DiagnosticCodes.MixinAppliedToClassMustDeriveFromConstraint,\r\n \"Mixin '{0}' cannot be applied to the class '{1}' because it does not satisfy the applies to constraint '{2}'.\"),\r\n\r\n /** EC-1300: Required message parameters: childClass.FullName, property name, baseClass.FullName, base value type, child value type */\r\n IncompatibleValueTypePropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string]>(DiagnosticCodes.IncompatibleValueTypePropertyOverride,\r\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with a value type of {3} which is incompatible with the value type of {4}.\"),\r\n\r\n /** EC-1301: Required message parameters: childClass.FullName, property name, baseClass.FullName, base property type, child property type */\r\n IncompatibleTypePropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string]>(DiagnosticCodes.IncompatibleTypePropertyOverride,\r\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with a type of {3} which is incompatible with the type of {4}.\"),\r\n\r\n /** EC-1302: Required message parameters: childClass.Name, property name, baseClass.Name, baseClass Koq name, baseClass Koq persistence unit name, child class Koq persistence unit name, child class Koq name */\r\n IncompatibleUnitPropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string, string, string]>(DiagnosticCodes.IncompatibleUnitPropertyOverride,\r\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with KindOfQuantity '{3}' with persistence unit '{4}' which is not the same as the persistence unit '{5}' of the provided KindOfQuantity '{6}'.\"),\r\n\r\n /** EC-1303: Required message parameters: property.fullName, navigation relationship.fullName */\r\n NavigationRelationshipMustBeRoot: createPropertyDiagnosticClass<[string, string]>(getCode(1303),\r\n \"The referenced relationship '{1}', used in NavigationProperty '{0}' is not the root relationship.\"),\r\n\r\n /** EC-1304: Required message parameters: property.fullName, navigation relationship.fullName */\r\n NavigationTargetMustHaveSingularMultiplicity: createPropertyDiagnosticClass<[string, string, string]>(getCode(1304),\r\n \"NavigationProperty '{0}' uses the relationship '{1}' that cannot be traversed in the '{2}' direction due to a max multiplicity greater than 1.\"),\r\n\r\n /** EC-1305: Required message parameters: property.fullName, navigation relationship.fullName */\r\n NavigationRelationshipAbstractConstraintEntityOrMixin: createPropertyDiagnosticClass<[string, string]>(getCode(1305),\r\n \"The NavigationProperty '{0}', using the relationship '{1}', points to a RelationshipClass, which is not allowed. NavigationProperties must point to an EntityClass or Mixin.\"),\r\n\r\n /** EC-1306: Required message parameters: class name, property name, navigation relationship.fullName */\r\n NavigationClassMustBeAConstraintClassOfRelationship: createPropertyDiagnosticClass<[string, string, string, string]>(getCode(1306),\r\n \"The class '{0}' of NavigationProperty '{1}' is not supported by the {3} constraint of the referenced relationship '{2}'.\"),\r\n\r\n /** EC-1500: Required message parameters: abstract constraint class name, relationship end (source/target), relationship name, base relationship name */\r\n AbstractConstraintMustNarrowBaseConstraints: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.AbstractConstraintMustNarrowBaseConstraints,\r\n \"The abstract constraint class '{0}' on the {1}-Constraint of '{2}' is not supported by the base class constraint in '{3}'.\"),\r\n\r\n /** EC-1501: Required message parameters: constraint class name, relationship end (source/target), relationship name, base relationship name */\r\n DerivedConstraintsMustNarrowBaseConstraints: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.DerivedConstraintsMustNarrowBaseConstraints,\r\n \"The constraint class '{0}' on the {1}-Constraint of '{2}' is not supported by the base class constraint in '{3}'.\"),\r\n\r\n /** EC-1502: Required message parameters: constraint class name, relationship end (source/target), relationship name, abstract constraint class name */\r\n ConstraintClassesDeriveFromAbstractConstraint: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.ConstraintClassesDeriveFromAbstractConstraint,\r\n \"The constraint class '{0}' on the {1}-Constraint of '{2}' is not derived from the abstract constraint class '{3}'.\"),\r\n\r\n /** EC-1600: Required message parameters: relationship end (source/target), relationship name */\r\n AtLeastOneConstraintClassDefined: createRelationshipConstraintDiagnosticClass<[string, string]>(DiagnosticCodes.AtLeastOneConstraintClassDefined,\r\n \"The {0}-Constraint of '{1}' does not contain any constraint classes.\"),\r\n\r\n /** EC-1601: Required message parameters: relationship end (source/target), relationship name */\r\n AbstractConstraintMustExistWithMultipleConstraints: createRelationshipConstraintDiagnosticClass<[string, string]>(DiagnosticCodes.AbstractConstraintMustExistWithMultipleConstraints,\r\n \"The {0}-Constraint of '{1}' has multiple constraint classes which requires an abstract constraint to be defined.\"),\r\n};\r\n\r\n/**\r\n * All schema validation rules that fall under the category of ECObjects.\r\n * @beta\r\n */\r\nexport const ECRuleSet: IRuleSet = {\r\n name: ruleSetName,\r\n\r\n schemaRules: [\r\n validateSchemaReferences,\r\n ],\r\n classRules: [\r\n baseClassIsSealed,\r\n baseClassIsOfDifferentType,\r\n ],\r\n propertyRules: [\r\n incompatibleValueTypePropertyOverride,\r\n incompatibleTypePropertyOverride,\r\n incompatibleUnitPropertyOverride,\r\n validateNavigationProperty,\r\n ],\r\n relationshipRules: [\r\n abstractConstraintMustNarrowBaseConstraints,\r\n constraintClassesDeriveFromAbstractConstraint,\r\n derivedConstraintsMustNarrowBaseConstraints,\r\n ],\r\n relationshipConstraintRules: [\r\n atLeastOneConstraintClassDefined,\r\n abstractConstraintMustExistWithMultipleConstraints,\r\n ],\r\n enumerationRules: [\r\n enumerationTypeUnsupported,\r\n ],\r\n entityClassRules: [\r\n mixinAppliedToClassMustDeriveFromConstraint,\r\n ],\r\n customAttributeInstanceRules: [\r\n validateCustomAttributeInstance,\r\n ],\r\n};\r\n\r\n/* eslint-enable @typescript-eslint/naming-convention */\r\n\r\n/**\r\n * Validates schema references against multiple EC rules.\r\n * @param schema The schema to validate.\r\n * @internal\r\n */\r\nexport async function* validateSchemaReferences(schema: Schema): AsyncIterable<SchemaDiagnostic<any[]>> {\r\n yield* validateSchemaReferencesSync(schema);\r\n}\r\n\r\n/**\r\n * Validates schema references against multiple EC rules.\r\n * @param schema The schema to validate.\r\n * @internal\r\n */\r\nexport function* validateSchemaReferencesSync(schema: Schema): Iterable<SchemaDiagnostic<any[]>> {\r\n const aliases = new Map();\r\n for (const schemaRef of schema.references) {\r\n if (schemaRef.customAttributes && schemaRef.customAttributes.has(\"CoreCustomAttributes.SupplementalSchema\"))\r\n yield new Diagnostics.SupplementalSchemasCannotBeReferenced(schema, [schema.name, schemaRef.name]);\r\n\r\n if (schema.schemaKey.matches(schemaRef.schemaKey))\r\n yield new Diagnostics.ReferenceCyclesNotAllowed(schema, [schema.name, `${schema.name} --> ${schemaRef.name}`]);\r\n\r\n if (aliases.has(schemaRef.alias)) {\r\n const currentRef = aliases.get(schemaRef.alias);\r\n yield new Diagnostics.SchemaRefAliasMustBeUnique(schema, [schema.name, schemaRef.alias, currentRef.name, schemaRef.name]);\r\n } else {\r\n aliases.set(schemaRef.alias, schemaRef);\r\n }\r\n }\r\n\r\n const graph = SchemaGraph.generateGraphSync(schema);\r\n const cycles = graph.detectCycles();\r\n if (cycles) {\r\n const result = cycles.map((cycle) => `${cycle.schema.schemaKey.name} --> ${cycle.refSchema.schemaKey.name}`).join(\", \");\r\n yield new Diagnostics.ReferenceCyclesNotAllowed(schema, [schema.name, result]);\r\n }\r\n}\r\n/**\r\n * EC Rule: Sealed classes cannot be a base class.\r\n * @internal\r\n */\r\nexport async function* baseClassIsSealed(ecClass: AnyClass): AsyncIterable<ClassDiagnostic<any[]>> {\r\n if (!ecClass.baseClass)\r\n return;\r\n\r\n const baseClass = await ecClass.baseClass;\r\n // return if rule passed\r\n if (baseClass.modifier !== ECClassModifier.Sealed)\r\n return;\r\n\r\n yield new Diagnostics.BaseClassIsSealed(ecClass, [ecClass.fullName, baseClass.fullName]);\r\n}\r\n\r\n/**\r\n * EC Rule: Base and child class must be of the same type (i.e. Entity, Mixin, Relationship, etc.)\r\n * @internal\r\n */\r\nexport async function* baseClassIsOfDifferentType(ecClass: AnyClass): AsyncIterable<ClassDiagnostic<any[]>> {\r\n if (!ecClass.baseClass)\r\n return;\r\n\r\n const baseClass = await ecClass.baseClass;\r\n // return if rule passed\r\n if (baseClass.schemaItemType === ecClass.schemaItemType)\r\n return;\r\n\r\n const itemType = baseClass.schemaItemType;\r\n yield new Diagnostics.BaseClassIsOfDifferentType(ecClass, [ecClass.fullName, baseClass.fullName, itemType]);\r\n}\r\n\r\n/**\r\n * EC Rule: When overriding a class primitive property, the child and base property must be of the same type (string, number, etc...).\r\n * @internal\r\n*/\r\nexport async function* incompatibleValueTypePropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\r\n if (!property.class.baseClass)\r\n return;\r\n\r\n const primitiveType = getPrimitiveType(property);\r\n if (!primitiveType)\r\n return;\r\n\r\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\r\n const baseProperty = await baseClass.getProperty(property.name);\r\n if (!baseProperty)\r\n return;\r\n\r\n // Other rules will catch this if false, but we need to make sure\r\n // types match for this rule to be valid.\r\n if (!propertyTypesMatch(property, baseProperty))\r\n return;\r\n\r\n const baseType = getPrimitiveType(baseProperty);\r\n\r\n // Return if rule passed\r\n if (!baseType || primitiveType === baseType)\r\n return;\r\n\r\n return new Diagnostics.IncompatibleValueTypePropertyOverride(property, [property.class.fullName, property.name, baseClass.fullName, primitiveTypeToString(baseType), primitiveTypeToString(primitiveType!)]);\r\n }\r\n\r\n for await (const baseClass of property.class.getAllBaseClasses()) {\r\n const result = await callback(baseClass);\r\n if (result)\r\n yield result;\r\n }\r\n}\r\n\r\n/**\r\n * EC Rule: When overriding a class property, the child and base property must be of the same property type (primitive, struct, enumeration, etc...).\r\n * @internal\r\n */\r\nexport async function* incompatibleTypePropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\r\n if (!property.class.baseClass)\r\n return;\r\n\r\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\r\n const baseProperty = await baseClass.getProperty(property.name);\r\n if (!baseProperty)\r\n return;\r\n\r\n // Return if rule passed\r\n if (propertyTypesMatch(property, baseProperty))\r\n return;\r\n\r\n return new Diagnostics.IncompatibleTypePropertyOverride(property, [property.class.fullName, property.name, baseClass.fullName, baseProperty.constructor.name, property.constructor.name]);\r\n }\r\n\r\n for await (const baseClass of property.class.getAllBaseClasses()) {\r\n const result = await callback(baseClass);\r\n if (result)\r\n yield result;\r\n }\r\n}\r\n\r\n/**\r\n * EC Rule: When overriding a kindOfQuantity property, the child and base property units must be the same.\r\n * @internal\r\n */\r\nexport async function* incompatibleUnitPropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\r\n if (!property.kindOfQuantity || !property.class.baseClass)\r\n return;\r\n\r\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\r\n const baseProperty = await baseClass.getProperty(property.name);\r\n if (!baseProperty || !baseProperty.kindOfQuantity)\r\n return;\r\n\r\n // Other rules will catch this if false, but we need to make sure\r\n // types match for this rule to be valid.\r\n if (!propertyTypesMatch(property, baseProperty))\r\n return;\r\n\r\n const koq = await property.kindOfQuantity;\r\n const baseKoq = await baseProperty.kindOfQuantity;\r\n if (!koq || !baseKoq)\r\n return;\r\n\r\n const unit = await koq.persistenceUnit;\r\n const baseUnit = await baseKoq.persistenceUnit;\r\n\r\n if (!unit || !baseUnit)\r\n return;\r\n\r\n // return if rule passed\r\n if (unit.key.matches(baseUnit.key))\r\n return;\r\n\r\n return new Diagnostics.IncompatibleUnitPropertyOverride(property, [\r\n property.class.fullName,\r\n property.name,\r\n baseClass.fullName,\r\n baseKoq.fullName,\r\n baseUnit.fullName,\r\n unit.fullName,\r\n koq.fullName,\r\n ]);\r\n }\r\n\r\n for await (const baseClass of property.class.getAllBaseClasses()) {\r\n const result = await callback(baseClass);\r\n if (result)\r\n yield result;\r\n }\r\n}\r\n\r\n/**\r\n * Validates Navigation Properties. EC Rules: 1303, 1304\r\n * @internal\r\n */\r\nexport async function* validateNavigationProperty(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\r\n if (!property.isNavigation())\r\n return;\r\n\r\n const navProp = property;\r\n const relationship = await navProp.relationshipClass;\r\n\r\n if (relationship.baseClass)\r\n yield new Diagnostics.NavigationRelationshipMustBeRoot(property, [property.fullName, relationship.fullName]);\r\n\r\n let thisConstraint: RelationshipConstraint;\r\n let thatConstraint: RelationshipConstraint;\r\n let navigationClassSide: string;\r\n if (navProp.direction === StrengthDirection.Forward) {\r\n thisConstraint = relationship.source;\r\n thatConstraint = relationship.target;\r\n navigationClassSide = \"source\";\r\n } else {\r\n thisConstraint = relationship.target;\r\n thatConstraint = relationship.source;\r\n navigationClassSide = \"target\";\r\n }\r\n\r\n const thatAbstractConstraint = await thatConstraint.abstractConstraint;\r\n if (thatAbstractConstraint && thatAbstractConstraint.schemaItemType === SchemaItemType.RelationshipClass) {\r\n yield new Diagnostics.NavigationRelationshipAbstractConstraintEntityOrMixin(property, [property.fullName, relationship.fullName]);\r\n }\r\n\r\n const isClassSupported = async (ecClass: ECClass, propertyName: string, constraintName: string): Promise<boolean> => {\r\n if (constraintName === ecClass.fullName && undefined !== await ecClass.getProperty(propertyName))\r\n return true;\r\n\r\n const inheritedProp = await ecClass.getInheritedProperty(propertyName);\r\n if (inheritedProp && constraintName === inheritedProp.class.fullName)\r\n return true;\r\n\r\n const baseClass = await ecClass.baseClass;\r\n if (!baseClass)\r\n return false;\r\n\r\n return isClassSupported(baseClass, propertyName, constraintName);\r\n };\r\n\r\n let classSupported = false;\r\n if (thisConstraint.constraintClasses) {\r\n for (const constraintClass of thisConstraint.constraintClasses) {\r\n classSupported = await isClassSupported(property.class, property.name, constraintClass.fullName);\r\n if (classSupported)\r\n break;\r\n }\r\n }\r\n\r\n if (!classSupported)\r\n yield new Diagnostics.NavigationClassMustBeAConstraintClassOfRelationship(property, [property.class.name, property.name, relationship.fullName, navigationClassSide]);\r\n\r\n if (thatConstraint.multiplicity === RelationshipMultiplicity.oneMany || thatConstraint.multiplicity === RelationshipMultiplicity.zeroMany) {\r\n const direction = strengthDirectionToString(navProp.direction);\r\n yield new Diagnostics.NavigationTargetMustHaveSingularMultiplicity(property, [property.fullName, relationship.fullName, direction]);\r\n }\r\n\r\n return;\r\n}\r\n\r\n/**\r\n * Validates a Relationship class and yields EC-1500, EC-1501, and EC-1502 rule violations.\r\n * @internal\r\n */\r\nexport async function* validateRelationship(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\r\n yield* abstractConstraintMustNarrowBaseConstraints(ecClass);\r\n yield* derivedConstraintsMustNarrowBaseConstraints(ecClass);\r\n yield* constraintClassesDeriveFromAbstractConstraint(ecClass);\r\n}\r\n\r\n/**\r\n * EC Rule: When overriding a RelationshipClass, the derived abstract constraint must narrow the base constraint classes.\r\n * @internal\r\n */\r\nexport async function* abstractConstraintMustNarrowBaseConstraints(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\r\n if (!ecClass.baseClass)\r\n return;\r\n\r\n const baseRelationship = await ecClass.baseClass as RelationshipClass;\r\n\r\n const sourceResult = await applyAbstractConstraintMustNarrowBaseConstraints(ecClass, ecClass.source, baseRelationship);\r\n if (sourceResult)\r\n yield sourceResult;\r\n const targetResult = await applyAbstractConstraintMustNarrowBaseConstraints(ecClass, ecClass.target, baseRelationship);\r\n if (targetResult)\r\n yield targetResult;\r\n}\r\n\r\n/**\r\n * EC Rule: When overriding a RelationshipClass, derived constraint classes must narrow base constraint classes.\r\n * @internal\r\n */\r\nexport async function* derivedConstraintsMustNarrowBaseConstraints(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\r\n if (!ecClass.baseClass)\r\n return;\r\n\r\n const baseRelationship = await ecClass.baseClass as RelationshipClass;\r\n\r\n const sourceResult = await applyDerivedConstraintsMustNarrowBaseConstraints(ecClass, ecClass.source, baseRelationship);\r\n if (sourceResult)\r\n yield sourceResult;\r\n const targetResult = await applyDerivedConstraintsMustNarrowBaseConstraints(ecClass, ecClass.target, baseRelationship);\r\n if (targetResult)\r\n yield targetResult;\r\n}\r\n\r\n/**\r\n * EC Rule: All constraint classes must have a common base class specified in the abstract constraint.\r\n * @internal\r\n */\r\nexport async function* constraintClassesDeriveFromAbstractConstraint(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\r\n const sourceResult = await applyConstraintClassesDeriveFromAbstractConstraint(ecClass, ecClass.source);\r\n if (sourceResult)\r\n yield sourceResult;\r\n const targetResult = await applyConstraintClassesDeriveFromAbstractConstraint(ecClass, ecClass.target);\r\n if (targetResult)\r\n yield targetResult;\r\n}\r\n\r\n/**\r\n * Validates a RelationshipConstraint and yields EC-1600 and EC-1601 rule violations.\r\n * @internal\r\n */\r\nexport async function* validateRelationshipConstraint(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\r\n yield* atLeastOneConstraintClassDefined(constraint);\r\n yield* abstractConstraintMustExistWithMultipleConstraints(constraint);\r\n}\r\n\r\n/**\r\n * EC Rule: At least on concrete constraint class must be defined in the list of constraint classes.\r\n * @internal\r\n */\r\nexport async function* atLeastOneConstraintClassDefined(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\r\n if (!constraint.constraintClasses || constraint.constraintClasses.length === 0) {\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n yield new Diagnostics.AtLeastOneConstraintClassDefined(constraint, [constraintType, constraint.relationshipClass.fullName]);\r\n }\r\n}\r\n\r\n/**\r\n * EC Rule: If multiple constraints exist, an abstract constraint must be defined.\r\n * @internal\r\n */\r\nexport async function* abstractConstraintMustExistWithMultipleConstraints(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\r\n if (!constraint.constraintClasses || constraint.constraintClasses.length <= 1) {\r\n return;\r\n }\r\n\r\n const abstractConstraint = await getAbstractConstraint(constraint);\r\n if (abstractConstraint)\r\n return;\r\n\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n yield new Diagnostics.AbstractConstraintMustExistWithMultipleConstraints(constraint, [constraintType, constraint.relationshipClass.fullName]);\r\n}\r\n\r\nfunction propertyTypesMatch(propertyA: Property, propertyB: Property) {\r\n return propertyA.constructor.name === propertyB.constructor.name;\r\n}\r\n\r\nfunction getPrimitiveType(property: Property): PrimitiveType | undefined {\r\n if (property.isPrimitive())\r\n return (property as PrimitiveProperty).primitiveType;\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * EC Rule: Enumeration type must be a string or integer\r\n * @internal\r\n */\r\nexport async function* enumerationTypeUnsupported(enumeration: Enumeration): AsyncIterable<SchemaItemDiagnostic<Enumeration, any[]>> {\r\n const type = enumeration.type;\r\n if (type === PrimitiveType.Integer || type === PrimitiveType.String)\r\n return;\r\n\r\n yield new Diagnostics.EnumerationTypeUnsupported(enumeration, [enumeration.fullName]);\r\n}\r\n\r\n/**\r\n * EC Rule: Mixin applied to class must derived from the Mixin appliesTo constraint.\r\n * @internal\r\n */\r\nexport async function* mixinAppliedToClassMustDeriveFromConstraint(entityClass: EntityClass): AsyncIterable<SchemaItemDiagnostic<EntityClass, any[]>> {\r\n for (const lazyMixin of entityClass.mixins) {\r\n const mixin = await lazyMixin;\r\n if (!mixin.appliesTo)\r\n continue;\r\n\r\n if (!await entityClass.is(await mixin.appliesTo))\r\n yield new Diagnostics.MixinAppliedToClassMustDeriveFromConstraint(entityClass, [mixin.fullName, entityClass.fullName, mixin.appliesTo.fullName]);\r\n }\r\n\r\n return;\r\n}\r\n\r\n/**\r\n * Validates a custom attribute instance and yields EC-500, EC-501, and EC-502 rule violations.\r\n * @internal\r\n */\r\nexport async function* validateCustomAttributeInstance(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\r\n yield* customAttributeNotOfConcreteClass(container, customAttribute);\r\n yield* customAttributeSchemaMustBeReferenced(container, customAttribute);\r\n yield* customAttributeClassMustExist(container, customAttribute);\r\n}\r\n\r\n/** EC Rule: CustomAttribute instance must be of a concrete CustomAttributeClass. */\r\nasync function* customAttributeNotOfConcreteClass(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\r\n const schema = container.schema;\r\n const caClass = await schema.lookupItem(customAttribute.className) as ECClass;\r\n if (!caClass)\r\n return;\r\n\r\n if (caClass.modifier !== ECClassModifier.Abstract)\r\n return;\r\n\r\n yield new Diagnostics.CustomAttributeNotOfConcreteClass(container, [container.fullName, caClass.fullName]);\r\n}\r\n\r\n/** EC Rule: CustomAttribute Schema must be referenced by the container's Schema. */\r\nasync function* customAttributeSchemaMustBeReferenced(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\r\n const schema = container.schema;\r\n const nameParts = customAttribute.className.split(\".\");\r\n if (nameParts.length === 1 || nameParts[0] === schema.name)\r\n return;\r\n\r\n if (schema.references.some((s) => s.name === nameParts[0]))\r\n return;\r\n\r\n yield new Diagnostics.CustomAttributeSchemaMustBeReferenced(container, [container.fullName, customAttribute.className]);\r\n}\r\n\r\n/** EC Rule: CustomAttribute instance class must exist. */\r\nasync function* customAttributeClassMustExist(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\r\n const schema = container.schema;\r\n const caClass = await schema.lookupItem(customAttribute.className) as ECClass;\r\n if (!caClass)\r\n yield new Diagnostics.CustomAttributeClassNotFound(container, [container.fullName, customAttribute.className]);\r\n}\r\n\r\nasync function applyAbstractConstraintMustNarrowBaseConstraints(ecClass: RelationshipClass, constraint: RelationshipConstraint, baseRelationship: RelationshipClass): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\r\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\r\n const abstractConstraint = await constraint.abstractConstraint;\r\n if (!abstractConstraint)\r\n return;\r\n\r\n if (await baseConstraint.supportsClass(abstractConstraint))\r\n return;\r\n\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n return new Diagnostics.AbstractConstraintMustNarrowBaseConstraints(ecClass, [abstractConstraint.fullName, constraintType, constraint.relationshipClass.fullName, baseRelationship.fullName]);\r\n}\r\n\r\nasync function applyDerivedConstraintsMustNarrowBaseConstraints(ecClass: RelationshipClass, constraint: RelationshipConstraint, baseRelationship: RelationshipClass): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\r\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\r\n\r\n if (!constraint.constraintClasses)\r\n return;\r\n\r\n for (const classPromise of constraint.constraintClasses) {\r\n const constraintClass = await classPromise;\r\n\r\n if (await baseConstraint.supportsClass(constraintClass))\r\n continue;\r\n\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n return new Diagnostics.DerivedConstraintsMustNarrowBaseConstraints(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, baseRelationship.fullName]);\r\n }\r\n\r\n return;\r\n}\r\n\r\nasync function applyConstraintClassesDeriveFromAbstractConstraint(ecClass: RelationshipClass, constraint: RelationshipConstraint): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\r\n const abstractConstraint = await getAbstractConstraint(constraint);\r\n if (!abstractConstraint)\r\n return;\r\n\r\n if (!constraint.constraintClasses)\r\n return;\r\n\r\n for (const classPromise of constraint.constraintClasses) {\r\n const constraintClass = await classPromise;\r\n\r\n if (constraintClass.schemaItemType === SchemaItemType.Mixin && abstractConstraint.schemaItemType === SchemaItemType.EntityClass) {\r\n if (!await (constraintClass).applicableTo(abstractConstraint as EntityClass)) {\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n return new Diagnostics.ConstraintClassesDeriveFromAbstractConstraint(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, abstractConstraint.fullName]);\r\n }\r\n continue;\r\n }\r\n\r\n if (!await constraintClass.is(abstractConstraint)) {\r\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\r\n return new Diagnostics.ConstraintClassesDeriveFromAbstractConstraint(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, abstractConstraint.fullName]);\r\n }\r\n }\r\n\r\n return;\r\n}\r\n\r\nasync function getAbstractConstraint(constraint: RelationshipConstraint): Promise<ECClass | undefined> {\r\n const abstractConstraint = await constraint.abstractConstraint;\r\n if (abstractConstraint)\r\n return abstractConstraint;\r\n\r\n const baseRelationship = await constraint.relationshipClass.baseClass as RelationshipClass;\r\n if (!baseRelationship)\r\n return;\r\n\r\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\r\n\r\n return getAbstractConstraint(baseConstraint);\r\n}\r\n"]}
1
+ {"version":3,"file":"ECRules.js","sourceRoot":"","sources":["../../../src/Validation/ECRules.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Validation\n */\n\nimport {\n AnyClass, AnyProperty, CustomAttribute, CustomAttributeContainerProps, ECClass, ECClassModifier,\n ECStringConstants, EntityClass, Enumeration, PrimitiveProperty, PrimitiveType, primitiveTypeToString,\n Property, RelationshipClass, RelationshipConstraint, RelationshipMultiplicity, Schema, SchemaGraph, SchemaItemType,\n StrengthDirection, strengthDirectionToString,\n} from \"@itwin/ecschema-metadata\";\nimport {\n ClassDiagnostic, createClassDiagnosticClass, createCustomAttributeContainerDiagnosticClass, createPropertyDiagnosticClass,\n createRelationshipConstraintDiagnosticClass, createSchemaDiagnosticClass, createSchemaItemDiagnosticClass, CustomAttributeContainerDiagnostic,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DiagnosticType, PropertyDiagnostic, RelationshipConstraintDiagnostic, SchemaDiagnostic, SchemaItemDiagnostic,\n} from \"./Diagnostic\";\nimport { IRuleSet } from \"./Rules\";\n\nconst ruleSetName = \"ECObjects\";\n\nfunction getCode(code: number): string {\n return `${ruleSetName}-${code}`;\n}\n\n/**\n * The unique diagnostic codes for ECObjects rules.\n *\n * To provide meaning to code values, with anticipation\n * of future rules for all current EC Types, the following\n * value ranges should be used:\n *\n * - Schema: 000-099\n * - Class: 100-199\n * - Constant: 200-299\n * - CustomAttribute 300-399\n * - CustomAttributeClass: 400-499\n * - CustomAttributeContainer: 500-599\n * - EntityClass: 600-699\n * - Enumeration: 700-799\n * - Format: 800-899\n * - InvertedUnit: 900-999\n * - KindOfQuantity: 1000-1099\n * - Mixin: 1100-1199\n * - Phenomenon: 1200-1299\n * - Property: 1300-1399\n * - PropertyCategory: 1400-1499\n * - RelationshipClass: 1500-1599\n * - RelationshipConstraint: 1600-1699\n * - StructClass: 1700-1799\n * - Unit: 1800-1899\n * - UnitSystem: 1900-1999\n * @beta\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport const DiagnosticCodes = {\n // Class Rule Codes (100-199)\n BaseClassIsSealed: getCode(100),\n BaseClassOfDifferentType: getCode(101),\n // EC-102 has been deprecated. Leaving the code here to prevent re-use.\n AbstractClassWithNonAbstractBase: getCode(102),\n\n // CA Container Rule Codes (500-599)\n CustomAttributeNotOfConcreteClass: getCode(500),\n CustomAttributeSchemaMustBeReferenced: getCode(501),\n CustomAttributeClassNotFound: getCode(502),\n\n // Enumeration Rule Codes (700-799)\n EnumerationTypeUnsupported: getCode(700),\n\n // Mixin Rule Codes (1100-1199)\n MixinAppliedToClassMustDeriveFromConstraint: getCode(1100),\n\n // Property Rule Codes (1300-1399)\n IncompatibleValueTypePropertyOverride: getCode(1300),\n IncompatibleTypePropertyOverride: getCode(1301),\n IncompatibleUnitPropertyOverride: getCode(1302),\n\n // Relationship Rule Codes (1500-1599)\n AbstractConstraintMustNarrowBaseConstraints: getCode(1500),\n DerivedConstraintsMustNarrowBaseConstraints: getCode(1501),\n ConstraintClassesDeriveFromAbstractConstraint: getCode(1502),\n\n // Relationship Constraint Rule Codes (1600-1699)\n AtLeastOneConstraintClassDefined: getCode(1600),\n AbstractConstraintMustExistWithMultipleConstraints: getCode(1601),\n};\n\n/**\n * The list of [[IDiagnostic]] implementation classes used by the EC rule implementations.\n * @beta\n */\nexport const Diagnostics = {\n /** EC-001: Required message parameters: schema name, referenced schema name */\n SupplementalSchemasCannotBeReferenced: createSchemaDiagnosticClass<[string, string]>(getCode(1),\n \"Referenced schema '{1}' of schema '{0}' is a supplemental schema. Supplemental schemas are not allowed to be referenced.\"),\n\n /** EC-002: Required message parameters: schema name, reference schema alias, first schema reference name, second schema reference name. */\n SchemaRefAliasMustBeUnique: createSchemaDiagnosticClass<[string, string, string, string]>(getCode(2),\n \"Schema '{0}' has multiple schema references ({2}, {3}) with the same alias '{1}', which is not allowed.\"),\n\n /** EC-003: Required message parameters: schema name, cycle text */\n ReferenceCyclesNotAllowed: createSchemaDiagnosticClass<[string, string]>(getCode(3),\n \"Schema '{0}' has reference cycles: {1}\"),\n\n /** EC-100: Required message parameters: childClass.FullName, baseClass.FullName */\n BaseClassIsSealed: createClassDiagnosticClass<[string, string]>(DiagnosticCodes.BaseClassIsSealed,\n \"Class '{0}' cannot derive from sealed base class '{1}'.\"),\n\n /** EC-101: Required message parameters: childClass.FullName, baseClass.FullName, baseClass.schemaItemType */\n BaseClassIsOfDifferentType: createClassDiagnosticClass<[string, string, string]>(DiagnosticCodes.BaseClassOfDifferentType,\n \"Class '{0}' cannot derive from base class '{1}' of type '{2}'.\"),\n\n /** **DEPRECATED** EC-102: Required message parameters: childClass.FullName, baseClass.FullName */\n AbstractClassWithNonAbstractBase: createClassDiagnosticClass<[string, string]>(DiagnosticCodes.AbstractClassWithNonAbstractBase,\n \"Abstract Class '{0}' cannot derive from base class '{1}' because it is not an abstract class.\"),\n\n /** EC-500: Required message parameters: CustomAttribute container name and CustomAttributeClass name. */\n CustomAttributeNotOfConcreteClass: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeNotOfConcreteClass,\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' which is not a concrete class.\"),\n\n /** EC-501: Required message parameters: CustomAttribute container name, CustomAttributeClass name, CustomAttributeClass Schema name. */\n CustomAttributeSchemaMustBeReferenced: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeSchemaMustBeReferenced,\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' whose schema is not referenced by the container's Schema.\"),\n\n /** EC-502: Required message parameters: CustomAttribute container name and CustomAttributeClass name. */\n CustomAttributeClassNotFound: createCustomAttributeContainerDiagnosticClass<[string, string]>(DiagnosticCodes.CustomAttributeClassNotFound,\n \"The CustomAttribute container '{0}' has a CustomAttribute with the class '{1}' which cannot be found.\"),\n\n /** EC-700: Required message parameters: Enumeration name */\n EnumerationTypeUnsupported: createSchemaItemDiagnosticClass<Enumeration, [string]>(DiagnosticCodes.EnumerationTypeUnsupported,\n \"Enumeration '{0}' has invalid primitive type.\"),\n\n /** EC-1100: Required message parameters: mixin class fullName, class fullName, applies to constraint class fullName */\n MixinAppliedToClassMustDeriveFromConstraint: createSchemaItemDiagnosticClass<EntityClass, [string, string, string]>(DiagnosticCodes.MixinAppliedToClassMustDeriveFromConstraint,\n \"Mixin '{0}' cannot be applied to the class '{1}' because it does not satisfy the applies to constraint '{2}'.\"),\n\n /** EC-1300: Required message parameters: childClass.FullName, property name, baseClass.FullName, base value type, child value type */\n IncompatibleValueTypePropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string]>(DiagnosticCodes.IncompatibleValueTypePropertyOverride,\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with a value type of {3} which is incompatible with the value type of {4}.\"),\n\n /** EC-1301: Required message parameters: childClass.FullName, property name, baseClass.FullName, base property type, child property type */\n IncompatibleTypePropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string]>(DiagnosticCodes.IncompatibleTypePropertyOverride,\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with a type of {3} which is incompatible with the type of {4}.\"),\n\n /** EC-1302: Required message parameters: childClass.Name, property name, baseClass.Name, baseClass Koq name, baseClass Koq persistence unit name, child class Koq persistence unit name, child class Koq name */\n IncompatibleUnitPropertyOverride: createPropertyDiagnosticClass<[string, string, string, string, string, string, string]>(DiagnosticCodes.IncompatibleUnitPropertyOverride,\n \"The ECProperty '{0}.{1}' has a base property '{2}.{1}' with KindOfQuantity '{3}' with persistence unit '{4}' which is not the same as the persistence unit '{5}' of the provided KindOfQuantity '{6}'.\"),\n\n /** EC-1303: Required message parameters: property.fullName, navigation relationship.fullName */\n NavigationRelationshipMustBeRoot: createPropertyDiagnosticClass<[string, string]>(getCode(1303),\n \"The referenced relationship '{1}', used in NavigationProperty '{0}' is not the root relationship.\"),\n\n /** EC-1304: Required message parameters: property.fullName, navigation relationship.fullName */\n NavigationTargetMustHaveSingularMultiplicity: createPropertyDiagnosticClass<[string, string, string]>(getCode(1304),\n \"NavigationProperty '{0}' uses the relationship '{1}' that cannot be traversed in the '{2}' direction due to a max multiplicity greater than 1.\"),\n\n /** EC-1305: Required message parameters: property.fullName, navigation relationship.fullName */\n NavigationRelationshipAbstractConstraintEntityOrMixin: createPropertyDiagnosticClass<[string, string]>(getCode(1305),\n \"The NavigationProperty '{0}', using the relationship '{1}', points to a RelationshipClass, which is not allowed. NavigationProperties must point to an EntityClass or Mixin.\"),\n\n /** EC-1306: Required message parameters: class name, property name, navigation relationship.fullName */\n NavigationClassMustBeAConstraintClassOfRelationship: createPropertyDiagnosticClass<[string, string, string, string]>(getCode(1306),\n \"The class '{0}' of NavigationProperty '{1}' is not supported by the {3} constraint of the referenced relationship '{2}'.\"),\n\n /** EC-1500: Required message parameters: abstract constraint class name, relationship end (source/target), relationship name, base relationship name */\n AbstractConstraintMustNarrowBaseConstraints: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.AbstractConstraintMustNarrowBaseConstraints,\n \"The abstract constraint class '{0}' on the {1}-Constraint of '{2}' is not supported by the base class constraint in '{3}'.\"),\n\n /** EC-1501: Required message parameters: constraint class name, relationship end (source/target), relationship name, base relationship name */\n DerivedConstraintsMustNarrowBaseConstraints: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.DerivedConstraintsMustNarrowBaseConstraints,\n \"The constraint class '{0}' on the {1}-Constraint of '{2}' is not supported by the base class constraint in '{3}'.\"),\n\n /** EC-1502: Required message parameters: constraint class name, relationship end (source/target), relationship name, abstract constraint class name */\n ConstraintClassesDeriveFromAbstractConstraint: createSchemaItemDiagnosticClass<RelationshipClass, [string, string, string, string]>(DiagnosticCodes.ConstraintClassesDeriveFromAbstractConstraint,\n \"The constraint class '{0}' on the {1}-Constraint of '{2}' is not derived from the abstract constraint class '{3}'.\"),\n\n /** EC-1600: Required message parameters: relationship end (source/target), relationship name */\n AtLeastOneConstraintClassDefined: createRelationshipConstraintDiagnosticClass<[string, string]>(DiagnosticCodes.AtLeastOneConstraintClassDefined,\n \"The {0}-Constraint of '{1}' does not contain any constraint classes.\"),\n\n /** EC-1601: Required message parameters: relationship end (source/target), relationship name */\n AbstractConstraintMustExistWithMultipleConstraints: createRelationshipConstraintDiagnosticClass<[string, string]>(DiagnosticCodes.AbstractConstraintMustExistWithMultipleConstraints,\n \"The {0}-Constraint of '{1}' has multiple constraint classes which requires an abstract constraint to be defined.\"),\n};\n\n/**\n * All schema validation rules that fall under the category of ECObjects.\n * @beta\n */\nexport const ECRuleSet: IRuleSet = {\n name: ruleSetName,\n\n schemaRules: [\n validateSchemaReferences,\n ],\n classRules: [\n baseClassIsSealed,\n baseClassIsOfDifferentType,\n ],\n propertyRules: [\n incompatibleValueTypePropertyOverride,\n incompatibleTypePropertyOverride,\n incompatibleUnitPropertyOverride,\n validateNavigationProperty,\n ],\n relationshipRules: [\n abstractConstraintMustNarrowBaseConstraints,\n constraintClassesDeriveFromAbstractConstraint,\n derivedConstraintsMustNarrowBaseConstraints,\n ],\n relationshipConstraintRules: [\n atLeastOneConstraintClassDefined,\n abstractConstraintMustExistWithMultipleConstraints,\n ],\n enumerationRules: [\n enumerationTypeUnsupported,\n ],\n entityClassRules: [\n mixinAppliedToClassMustDeriveFromConstraint,\n ],\n customAttributeInstanceRules: [\n validateCustomAttributeInstance,\n ],\n};\n\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/**\n * Validates schema references against multiple EC rules.\n * @param schema The schema to validate.\n * @internal\n */\nexport async function* validateSchemaReferences(schema: Schema): AsyncIterable<SchemaDiagnostic<any[]>> {\n yield* validateSchemaReferencesSync(schema);\n}\n\n/**\n * Validates schema references against multiple EC rules.\n * @param schema The schema to validate.\n * @internal\n */\nexport function* validateSchemaReferencesSync(schema: Schema): Iterable<SchemaDiagnostic<any[]>> {\n const aliases = new Map();\n for (const schemaRef of schema.references) {\n if (schemaRef.customAttributes && schemaRef.customAttributes.has(\"CoreCustomAttributes.SupplementalSchema\"))\n yield new Diagnostics.SupplementalSchemasCannotBeReferenced(schema, [schema.name, schemaRef.name]);\n\n if (schema.schemaKey.matches(schemaRef.schemaKey))\n yield new Diagnostics.ReferenceCyclesNotAllowed(schema, [schema.name, `${schema.name} --> ${schemaRef.name}`]);\n\n if (aliases.has(schemaRef.alias)) {\n const currentRef = aliases.get(schemaRef.alias);\n yield new Diagnostics.SchemaRefAliasMustBeUnique(schema, [schema.name, schemaRef.alias, currentRef.name, schemaRef.name]);\n } else {\n aliases.set(schemaRef.alias, schemaRef);\n }\n }\n\n const graph = SchemaGraph.generateGraphSync(schema);\n const cycles = graph.detectCycles();\n if (cycles) {\n const result = cycles.map((cycle) => `${cycle.schema.schemaKey.name} --> ${cycle.refSchema.schemaKey.name}`).join(\", \");\n yield new Diagnostics.ReferenceCyclesNotAllowed(schema, [schema.name, result]);\n }\n}\n/**\n * EC Rule: Sealed classes cannot be a base class.\n * @internal\n */\nexport async function* baseClassIsSealed(ecClass: AnyClass): AsyncIterable<ClassDiagnostic<any[]>> {\n if (!ecClass.baseClass)\n return;\n\n const baseClass = await ecClass.baseClass;\n // return if rule passed\n if (baseClass.modifier !== ECClassModifier.Sealed)\n return;\n\n yield new Diagnostics.BaseClassIsSealed(ecClass, [ecClass.fullName, baseClass.fullName]);\n}\n\n/**\n * EC Rule: Base and child class must be of the same type (i.e. Entity, Mixin, Relationship, etc.)\n * @internal\n */\nexport async function* baseClassIsOfDifferentType(ecClass: AnyClass): AsyncIterable<ClassDiagnostic<any[]>> {\n if (!ecClass.baseClass)\n return;\n\n const baseClass = await ecClass.baseClass;\n // return if rule passed\n if (baseClass.schemaItemType === ecClass.schemaItemType)\n return;\n\n const itemType = baseClass.schemaItemType;\n yield new Diagnostics.BaseClassIsOfDifferentType(ecClass, [ecClass.fullName, baseClass.fullName, itemType]);\n}\n\n/**\n * EC Rule: When overriding a class primitive property, the child and base property must be of the same type (string, number, etc...).\n * @internal\n*/\nexport async function* incompatibleValueTypePropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\n if (!property.class.baseClass)\n return;\n\n const primitiveType = getPrimitiveType(property);\n if (!primitiveType)\n return;\n\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\n const baseProperty = await baseClass.getProperty(property.name);\n if (!baseProperty)\n return;\n\n // Other rules will catch this if false, but we need to make sure\n // types match for this rule to be valid.\n if (!propertyTypesMatch(property, baseProperty))\n return;\n\n const baseType = getPrimitiveType(baseProperty);\n\n // Return if rule passed\n if (!baseType || primitiveType === baseType)\n return;\n\n return new Diagnostics.IncompatibleValueTypePropertyOverride(property, [property.class.fullName, property.name, baseClass.fullName, primitiveTypeToString(baseType), primitiveTypeToString(primitiveType!)]);\n }\n\n for await (const baseClass of property.class.getAllBaseClasses()) {\n const result = await callback(baseClass);\n if (result)\n yield result;\n }\n}\n\n/**\n * EC Rule: When overriding a class property, the child and base property must be of the same property type (primitive, struct, enumeration, etc...).\n * @internal\n */\nexport async function* incompatibleTypePropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\n if (!property.class.baseClass)\n return;\n\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\n const baseProperty = await baseClass.getProperty(property.name);\n if (!baseProperty)\n return;\n\n // Return if rule passed\n if (propertyTypesMatch(property, baseProperty))\n return;\n\n return new Diagnostics.IncompatibleTypePropertyOverride(property, [property.class.fullName, property.name, baseClass.fullName, baseProperty.constructor.name, property.constructor.name]);\n }\n\n for await (const baseClass of property.class.getAllBaseClasses()) {\n const result = await callback(baseClass);\n if (result)\n yield result;\n }\n}\n\n/**\n * EC Rule: When overriding a kindOfQuantity property, the child and base property units must be the same.\n * @internal\n */\nexport async function* incompatibleUnitPropertyOverride(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\n if (!property.kindOfQuantity || !property.class.baseClass)\n return;\n\n async function callback(baseClass: ECClass): Promise<PropertyDiagnostic<any[]> | undefined> {\n const baseProperty = await baseClass.getProperty(property.name);\n if (!baseProperty || !baseProperty.kindOfQuantity)\n return;\n\n // Other rules will catch this if false, but we need to make sure\n // types match for this rule to be valid.\n if (!propertyTypesMatch(property, baseProperty))\n return;\n\n const koq = await property.kindOfQuantity;\n const baseKoq = await baseProperty.kindOfQuantity;\n if (!koq || !baseKoq)\n return;\n\n const unit = await koq.persistenceUnit;\n const baseUnit = await baseKoq.persistenceUnit;\n\n if (!unit || !baseUnit)\n return;\n\n // return if rule passed\n if (unit.key.matches(baseUnit.key))\n return;\n\n return new Diagnostics.IncompatibleUnitPropertyOverride(property, [\n property.class.fullName,\n property.name,\n baseClass.fullName,\n baseKoq.fullName,\n baseUnit.fullName,\n unit.fullName,\n koq.fullName,\n ]);\n }\n\n for await (const baseClass of property.class.getAllBaseClasses()) {\n const result = await callback(baseClass);\n if (result)\n yield result;\n }\n}\n\n/**\n * Validates Navigation Properties. EC Rules: 1303, 1304\n * @internal\n */\nexport async function* validateNavigationProperty(property: AnyProperty): AsyncIterable<PropertyDiagnostic<any[]>> {\n if (!property.isNavigation())\n return;\n\n const navProp = property;\n const relationship = await navProp.relationshipClass;\n\n if (relationship.baseClass)\n yield new Diagnostics.NavigationRelationshipMustBeRoot(property, [property.fullName, relationship.fullName]);\n\n let thisConstraint: RelationshipConstraint;\n let thatConstraint: RelationshipConstraint;\n let navigationClassSide: string;\n if (navProp.direction === StrengthDirection.Forward) {\n thisConstraint = relationship.source;\n thatConstraint = relationship.target;\n navigationClassSide = \"source\";\n } else {\n thisConstraint = relationship.target;\n thatConstraint = relationship.source;\n navigationClassSide = \"target\";\n }\n\n const thatAbstractConstraint = await thatConstraint.abstractConstraint;\n if (thatAbstractConstraint && thatAbstractConstraint.schemaItemType === SchemaItemType.RelationshipClass) {\n yield new Diagnostics.NavigationRelationshipAbstractConstraintEntityOrMixin(property, [property.fullName, relationship.fullName]);\n }\n\n const isClassSupported = async (ecClass: ECClass, propertyName: string, constraintName: string): Promise<boolean> => {\n if (constraintName === ecClass.fullName && undefined !== await ecClass.getProperty(propertyName))\n return true;\n\n const inheritedProp = await ecClass.getInheritedProperty(propertyName);\n if (inheritedProp && constraintName === inheritedProp.class.fullName)\n return true;\n\n const baseClass = await ecClass.baseClass;\n if (!baseClass)\n return false;\n\n return isClassSupported(baseClass, propertyName, constraintName);\n };\n\n let classSupported = false;\n if (thisConstraint.constraintClasses) {\n for (const constraintClass of thisConstraint.constraintClasses) {\n classSupported = await isClassSupported(property.class, property.name, constraintClass.fullName);\n if (classSupported)\n break;\n }\n }\n\n if (!classSupported)\n yield new Diagnostics.NavigationClassMustBeAConstraintClassOfRelationship(property, [property.class.name, property.name, relationship.fullName, navigationClassSide]);\n\n if (thatConstraint.multiplicity === RelationshipMultiplicity.oneMany || thatConstraint.multiplicity === RelationshipMultiplicity.zeroMany) {\n const direction = strengthDirectionToString(navProp.direction);\n yield new Diagnostics.NavigationTargetMustHaveSingularMultiplicity(property, [property.fullName, relationship.fullName, direction]);\n }\n\n return;\n}\n\n/**\n * Validates a Relationship class and yields EC-1500, EC-1501, and EC-1502 rule violations.\n * @internal\n */\nexport async function* validateRelationship(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\n yield* abstractConstraintMustNarrowBaseConstraints(ecClass);\n yield* derivedConstraintsMustNarrowBaseConstraints(ecClass);\n yield* constraintClassesDeriveFromAbstractConstraint(ecClass);\n}\n\n/**\n * EC Rule: When overriding a RelationshipClass, the derived abstract constraint must narrow the base constraint classes.\n * @internal\n */\nexport async function* abstractConstraintMustNarrowBaseConstraints(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\n if (!ecClass.baseClass)\n return;\n\n const baseRelationship = await ecClass.baseClass as RelationshipClass;\n\n const sourceResult = await applyAbstractConstraintMustNarrowBaseConstraints(ecClass, ecClass.source, baseRelationship);\n if (sourceResult)\n yield sourceResult;\n const targetResult = await applyAbstractConstraintMustNarrowBaseConstraints(ecClass, ecClass.target, baseRelationship);\n if (targetResult)\n yield targetResult;\n}\n\n/**\n * EC Rule: When overriding a RelationshipClass, derived constraint classes must narrow base constraint classes.\n * @internal\n */\nexport async function* derivedConstraintsMustNarrowBaseConstraints(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\n if (!ecClass.baseClass)\n return;\n\n const baseRelationship = await ecClass.baseClass as RelationshipClass;\n\n const sourceResult = await applyDerivedConstraintsMustNarrowBaseConstraints(ecClass, ecClass.source, baseRelationship);\n if (sourceResult)\n yield sourceResult;\n const targetResult = await applyDerivedConstraintsMustNarrowBaseConstraints(ecClass, ecClass.target, baseRelationship);\n if (targetResult)\n yield targetResult;\n}\n\n/**\n * EC Rule: All constraint classes must have a common base class specified in the abstract constraint.\n * @internal\n */\nexport async function* constraintClassesDeriveFromAbstractConstraint(ecClass: RelationshipClass): AsyncIterable<SchemaItemDiagnostic<RelationshipClass, any[]>> {\n const sourceResult = await applyConstraintClassesDeriveFromAbstractConstraint(ecClass, ecClass.source);\n if (sourceResult)\n yield sourceResult;\n const targetResult = await applyConstraintClassesDeriveFromAbstractConstraint(ecClass, ecClass.target);\n if (targetResult)\n yield targetResult;\n}\n\n/**\n * Validates a RelationshipConstraint and yields EC-1600 and EC-1601 rule violations.\n * @internal\n */\nexport async function* validateRelationshipConstraint(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\n yield* atLeastOneConstraintClassDefined(constraint);\n yield* abstractConstraintMustExistWithMultipleConstraints(constraint);\n}\n\n/**\n * EC Rule: At least on concrete constraint class must be defined in the list of constraint classes.\n * @internal\n */\nexport async function* atLeastOneConstraintClassDefined(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\n if (!constraint.constraintClasses || constraint.constraintClasses.length === 0) {\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n yield new Diagnostics.AtLeastOneConstraintClassDefined(constraint, [constraintType, constraint.relationshipClass.fullName]);\n }\n}\n\n/**\n * EC Rule: If multiple constraints exist, an abstract constraint must be defined.\n * @internal\n */\nexport async function* abstractConstraintMustExistWithMultipleConstraints(constraint: RelationshipConstraint): AsyncIterable<RelationshipConstraintDiagnostic<any[]>> {\n if (!constraint.constraintClasses || constraint.constraintClasses.length <= 1) {\n return;\n }\n\n const abstractConstraint = await getAbstractConstraint(constraint);\n if (abstractConstraint)\n return;\n\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n yield new Diagnostics.AbstractConstraintMustExistWithMultipleConstraints(constraint, [constraintType, constraint.relationshipClass.fullName]);\n}\n\nfunction propertyTypesMatch(propertyA: Property, propertyB: Property) {\n return propertyA.constructor.name === propertyB.constructor.name;\n}\n\nfunction getPrimitiveType(property: Property): PrimitiveType | undefined {\n if (property.isPrimitive())\n return (property as PrimitiveProperty).primitiveType;\n\n return undefined;\n}\n\n/**\n * EC Rule: Enumeration type must be a string or integer\n * @internal\n */\nexport async function* enumerationTypeUnsupported(enumeration: Enumeration): AsyncIterable<SchemaItemDiagnostic<Enumeration, any[]>> {\n const type = enumeration.type;\n if (type === PrimitiveType.Integer || type === PrimitiveType.String)\n return;\n\n yield new Diagnostics.EnumerationTypeUnsupported(enumeration, [enumeration.fullName]);\n}\n\n/**\n * EC Rule: Mixin applied to class must derived from the Mixin appliesTo constraint.\n * @internal\n */\nexport async function* mixinAppliedToClassMustDeriveFromConstraint(entityClass: EntityClass): AsyncIterable<SchemaItemDiagnostic<EntityClass, any[]>> {\n for (const lazyMixin of entityClass.mixins) {\n const mixin = await lazyMixin;\n if (!mixin.appliesTo)\n continue;\n\n if (!await entityClass.is(await mixin.appliesTo))\n yield new Diagnostics.MixinAppliedToClassMustDeriveFromConstraint(entityClass, [mixin.fullName, entityClass.fullName, mixin.appliesTo.fullName]);\n }\n\n return;\n}\n\n/**\n * Validates a custom attribute instance and yields EC-500, EC-501, and EC-502 rule violations.\n * @internal\n */\nexport async function* validateCustomAttributeInstance(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\n yield* customAttributeNotOfConcreteClass(container, customAttribute);\n yield* customAttributeSchemaMustBeReferenced(container, customAttribute);\n yield* customAttributeClassMustExist(container, customAttribute);\n}\n\n/** EC Rule: CustomAttribute instance must be of a concrete CustomAttributeClass. */\nasync function* customAttributeNotOfConcreteClass(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\n const schema = container.schema;\n const caClass = await schema.lookupItem(customAttribute.className) as ECClass;\n if (!caClass)\n return;\n\n if (caClass.modifier !== ECClassModifier.Abstract)\n return;\n\n yield new Diagnostics.CustomAttributeNotOfConcreteClass(container, [container.fullName, caClass.fullName]);\n}\n\n/** EC Rule: CustomAttribute Schema must be referenced by the container's Schema. */\nasync function* customAttributeSchemaMustBeReferenced(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\n const schema = container.schema;\n const nameParts = customAttribute.className.split(\".\");\n if (nameParts.length === 1 || nameParts[0] === schema.name)\n return;\n\n if (schema.references.some((s) => s.name === nameParts[0]))\n return;\n\n yield new Diagnostics.CustomAttributeSchemaMustBeReferenced(container, [container.fullName, customAttribute.className]);\n}\n\n/** EC Rule: CustomAttribute instance class must exist. */\nasync function* customAttributeClassMustExist(container: CustomAttributeContainerProps, customAttribute: CustomAttribute): AsyncIterable<CustomAttributeContainerDiagnostic<any[]>> {\n const schema = container.schema;\n const caClass = await schema.lookupItem(customAttribute.className) as ECClass;\n if (!caClass)\n yield new Diagnostics.CustomAttributeClassNotFound(container, [container.fullName, customAttribute.className]);\n}\n\nasync function applyAbstractConstraintMustNarrowBaseConstraints(ecClass: RelationshipClass, constraint: RelationshipConstraint, baseRelationship: RelationshipClass): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\n const abstractConstraint = await constraint.abstractConstraint;\n if (!abstractConstraint)\n return;\n\n if (await baseConstraint.supportsClass(abstractConstraint))\n return;\n\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n return new Diagnostics.AbstractConstraintMustNarrowBaseConstraints(ecClass, [abstractConstraint.fullName, constraintType, constraint.relationshipClass.fullName, baseRelationship.fullName]);\n}\n\nasync function applyDerivedConstraintsMustNarrowBaseConstraints(ecClass: RelationshipClass, constraint: RelationshipConstraint, baseRelationship: RelationshipClass): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\n\n if (!constraint.constraintClasses)\n return;\n\n for (const classPromise of constraint.constraintClasses) {\n const constraintClass = await classPromise;\n\n if (await baseConstraint.supportsClass(constraintClass))\n continue;\n\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n return new Diagnostics.DerivedConstraintsMustNarrowBaseConstraints(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, baseRelationship.fullName]);\n }\n\n return;\n}\n\nasync function applyConstraintClassesDeriveFromAbstractConstraint(ecClass: RelationshipClass, constraint: RelationshipConstraint): Promise<SchemaItemDiagnostic<RelationshipClass, any[]> | undefined> {\n const abstractConstraint = await getAbstractConstraint(constraint);\n if (!abstractConstraint)\n return;\n\n if (!constraint.constraintClasses)\n return;\n\n for (const classPromise of constraint.constraintClasses) {\n const constraintClass = await classPromise;\n\n if (constraintClass.schemaItemType === SchemaItemType.Mixin && abstractConstraint.schemaItemType === SchemaItemType.EntityClass) {\n if (!await (constraintClass).applicableTo(abstractConstraint as EntityClass)) {\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n return new Diagnostics.ConstraintClassesDeriveFromAbstractConstraint(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, abstractConstraint.fullName]);\n }\n continue;\n }\n\n if (!await constraintClass.is(abstractConstraint)) {\n const constraintType = constraint.isSource ? ECStringConstants.RELATIONSHIP_END_SOURCE : ECStringConstants.RELATIONSHIP_END_TARGET;\n return new Diagnostics.ConstraintClassesDeriveFromAbstractConstraint(ecClass, [constraintClass.fullName, constraintType, constraint.relationshipClass.fullName, abstractConstraint.fullName]);\n }\n }\n\n return;\n}\n\nasync function getAbstractConstraint(constraint: RelationshipConstraint): Promise<ECClass | undefined> {\n const abstractConstraint = await constraint.abstractConstraint;\n if (abstractConstraint)\n return abstractConstraint;\n\n const baseRelationship = await constraint.relationshipClass.baseClass as RelationshipClass;\n if (!baseRelationship)\n return;\n\n const baseConstraint = constraint.isSource ? baseRelationship.source : baseRelationship.target;\n\n return getAbstractConstraint(baseConstraint);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LoggingDiagnosticReporter.js","sourceRoot":"","sources":["../../../src/Validation/LoggingDiagnosticReporter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAC7C,6CAAiE;AACjE,6DAAgE;AAEhE,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,6CAAwB;IAC9D,gBAAgB,CAAC,UAAyB,EAAE,WAAmB;QACpE,QAAQ,UAAU,CAAC,QAAQ,EAAE;YAC3B,KAAK,+BAAkB,CAAC,KAAK;gBAC3B,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrF,OAAO;YACT,KAAK,+BAAkB,CAAC,OAAO;gBAC7B,qBAAM,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvF,OAAO;YACT,KAAK,+BAAkB,CAAC,OAAO,CAAC;YAChC,KAAK,+BAAkB,CAAC,UAAU;gBAChC,qBAAM,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpF,OAAO;YACT;gBACE,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;SACxF;IACH,CAAC;IAEO,cAAc,CAAC,UAAyB;QAC9C,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC;IACnL,CAAC;CACF;AArBD,8DAqBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Diagnostic\r\n */\r\n\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { AnyDiagnostic, DiagnosticCategory } from \"./Diagnostic\";\r\nimport { FormatDiagnosticReporter } from \"./DiagnosticReporter\";\r\n\r\nconst loggingCategory = \"ecschema-metadata\";\r\n\r\n/**\r\n * An [[IDiagnosticReporter]] for logging [[IDiagnostic]] objects.\r\n * @beta\r\n */\r\nexport class LoggingDiagnosticReporter extends FormatDiagnosticReporter {\r\n public reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string) {\r\n switch (diagnostic.category) {\r\n case DiagnosticCategory.Error:\r\n Logger.logError(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\r\n return;\r\n case DiagnosticCategory.Warning:\r\n Logger.logWarning(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\r\n return;\r\n case DiagnosticCategory.Message:\r\n case DiagnosticCategory.Suggestion:\r\n Logger.logInfo(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\r\n return;\r\n default:\r\n Logger.logTrace(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\r\n }\r\n }\r\n\r\n private getLogMetaData(diagnostic: AnyDiagnostic) {\r\n return { ...diagnostic, ...{ code: diagnostic.code, category: diagnostic.category, diagnosticType: diagnostic.diagnosticType, messageText: undefined, messageArgs: undefined } };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LoggingDiagnosticReporter.js","sourceRoot":"","sources":["../../../src/Validation/LoggingDiagnosticReporter.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA6C;AAC7C,6CAAiE;AACjE,6DAAgE;AAEhE,MAAM,eAAe,GAAG,mBAAmB,CAAC;AAE5C;;;GAGG;AACH,MAAa,yBAA0B,SAAQ,6CAAwB;IAC9D,gBAAgB,CAAC,UAAyB,EAAE,WAAmB;QACpE,QAAQ,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC5B,KAAK,+BAAkB,CAAC,KAAK;gBAC3B,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACrF,OAAO;YACT,KAAK,+BAAkB,CAAC,OAAO;gBAC7B,qBAAM,CAAC,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACvF,OAAO;YACT,KAAK,+BAAkB,CAAC,OAAO,CAAC;YAChC,KAAK,+BAAkB,CAAC,UAAU;gBAChC,qBAAM,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBACpF,OAAO;YACT;gBACE,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,UAAyB;QAC9C,OAAO,EAAE,GAAG,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,CAAC;IACnL,CAAC;CACF;AArBD,8DAqBC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Diagnostic\n */\n\nimport { Logger } from \"@itwin/core-bentley\";\nimport { AnyDiagnostic, DiagnosticCategory } from \"./Diagnostic\";\nimport { FormatDiagnosticReporter } from \"./DiagnosticReporter\";\n\nconst loggingCategory = \"ecschema-metadata\";\n\n/**\n * An [[IDiagnosticReporter]] for logging [[IDiagnostic]] objects.\n * @beta\n */\nexport class LoggingDiagnosticReporter extends FormatDiagnosticReporter {\n public reportDiagnostic(diagnostic: AnyDiagnostic, messageText: string) {\n switch (diagnostic.category) {\n case DiagnosticCategory.Error:\n Logger.logError(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\n return;\n case DiagnosticCategory.Warning:\n Logger.logWarning(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\n return;\n case DiagnosticCategory.Message:\n case DiagnosticCategory.Suggestion:\n Logger.logInfo(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\n return;\n default:\n Logger.logTrace(loggingCategory, messageText, () => this.getLogMetaData(diagnostic));\n }\n }\n\n private getLogMetaData(diagnostic: AnyDiagnostic) {\n return { ...diagnostic, ...{ code: diagnostic.code, category: diagnostic.category, diagnosticType: diagnostic.diagnosticType, messageText: undefined, messageArgs: undefined } };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RuleSuppressionSet.js","sourceRoot":"","sources":["../../../src/Validation/RuleSuppressionSet.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","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 Validation\r\n */\r\n\r\nimport { AnyClass, AnyECType, AnyProperty, Constant, CustomAttribute, CustomAttributeClass,\r\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, Phenomenon,\r\n PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem, StructClass, Unit,\r\n UnitSystem } from \"@itwin/ecschema-metadata\";\r\nimport { AnyDiagnostic } from \"./Diagnostic\";\r\n\r\n/**\r\n * Interface used for all rule suppressions used during schema validation.\r\n * Just telling us whether a rule is suppressed or not.\r\n * @beta\r\n */\r\nexport type ISuppressionRule<T extends AnyECType, U = {}> = (diagnostic: AnyDiagnostic, ecDefinition: T, ...args: U[]) => Promise<boolean>;\r\n\r\n/** @beta */\r\nexport type BaseSuppressionRule<T extends AnyECType, U extends AnyECType> = ISuppressionRule<T, U>;\r\n\r\n/** @internal */\r\nexport type AnyRuleSuppressionMap = IRuleSuppressionMap<AnyECType>;\r\n\r\n/**\r\n * Interface used to represent elements of a rule suppression\r\n * @beta\r\n */\r\nexport interface IRuleSuppressionMap<T extends AnyECType, U = {}> {\r\n ruleCode: string;\r\n rule: ISuppressionRule<T, U>;\r\n}\r\n\r\n/**\r\n * Interface used to represent elements of a rule suppression\r\n * @beta\r\n */\r\nexport interface BaseRuleSuppressionMap<T extends AnyECType, U extends AnyECType> {\r\n ruleCode: string;\r\n rule: BaseSuppressionRule<T, U>;\r\n}\r\n\r\n/**\r\n * Interface used to represent logical collection of [[ISuppressionRule]] instances.\r\n * @beta\r\n */\r\nexport interface IRuleSuppressionSet {\r\n name: string;\r\n schemaRuleSuppressions?: Array<IRuleSuppressionMap<Schema>>;\r\n schemaItemRuleSuppressions?: Array<IRuleSuppressionMap<SchemaItem>>;\r\n classRuleSuppressions?: Array<IRuleSuppressionMap<AnyClass>>;\r\n propertyRuleSuppressions?: Array<IRuleSuppressionMap<AnyProperty>>;\r\n entityRuleSuppressions?: Array<IRuleSuppressionMap<EntityClass>>;\r\n structRuleSuppressions?: Array<IRuleSuppressionMap<StructClass>>;\r\n mixinRuleSuppressions?: Array<IRuleSuppressionMap<Mixin>>;\r\n relationshipRuleSuppressions?: Array<IRuleSuppressionMap<RelationshipClass>>;\r\n relationshipConstraintRuleSuppressions?: Array<IRuleSuppressionMap<RelationshipConstraint>>;\r\n customAttributeRuleSuppressions?: Array<IRuleSuppressionMap<CustomAttributeClass>>;\r\n customAttributeContainerSuppressions?: Array<IRuleSuppressionMap<CustomAttributeContainerProps>>;\r\n customAttributeInstanceSuppressions?: Array<BaseRuleSuppressionMap<CustomAttributeContainerProps, CustomAttribute>>;\r\n enumerationRuleSuppressions?: Array<IRuleSuppressionMap<Enumeration>>;\r\n koqRuleSuppressions?: Array<IRuleSuppressionMap<KindOfQuantity>>;\r\n propertyCategoryRuleSuppressions?: Array<IRuleSuppressionMap<PropertyCategory>>;\r\n formatRuleSuppressions?: Array<IRuleSuppressionMap<Format>>;\r\n unitRuleSuppressions?: Array<IRuleSuppressionMap<Unit>>;\r\n invertedUnitRuleSuppressions?: Array<IRuleSuppressionMap<InvertedUnit>>;\r\n unitSystemRuleSuppressions?: Array<IRuleSuppressionMap<UnitSystem>>;\r\n phenomenonRuleSuppressions?: Array<IRuleSuppressionMap<Phenomenon>>;\r\n constantRuleSuppressions?: Array<IRuleSuppressionMap<Constant>>;\r\n}\r\n"]}
1
+ {"version":3,"file":"RuleSuppressionSet.js","sourceRoot":"","sources":["../../../src/Validation/RuleSuppressionSet.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Validation\n */\n\nimport { AnyClass, AnyECType, AnyProperty, Constant, CustomAttribute, CustomAttributeClass,\n CustomAttributeContainerProps, EntityClass, Enumeration, Format, InvertedUnit, KindOfQuantity, Mixin, Phenomenon,\n PropertyCategory, RelationshipClass, RelationshipConstraint, Schema, SchemaItem, StructClass, Unit,\n UnitSystem } from \"@itwin/ecschema-metadata\";\nimport { AnyDiagnostic } from \"./Diagnostic\";\n\n/**\n * Interface used for all rule suppressions used during schema validation.\n * Just telling us whether a rule is suppressed or not.\n * @beta\n */\nexport type ISuppressionRule<T extends AnyECType, U = {}> = (diagnostic: AnyDiagnostic, ecDefinition: T, ...args: U[]) => Promise<boolean>;\n\n/** @beta */\nexport type BaseSuppressionRule<T extends AnyECType, U extends AnyECType> = ISuppressionRule<T, U>;\n\n/** @internal */\nexport type AnyRuleSuppressionMap = IRuleSuppressionMap<AnyECType>;\n\n/**\n * Interface used to represent elements of a rule suppression\n * @beta\n */\nexport interface IRuleSuppressionMap<T extends AnyECType, U = {}> {\n ruleCode: string;\n rule: ISuppressionRule<T, U>;\n}\n\n/**\n * Interface used to represent elements of a rule suppression\n * @beta\n */\nexport interface BaseRuleSuppressionMap<T extends AnyECType, U extends AnyECType> {\n ruleCode: string;\n rule: BaseSuppressionRule<T, U>;\n}\n\n/**\n * Interface used to represent logical collection of [[ISuppressionRule]] instances.\n * @beta\n */\nexport interface IRuleSuppressionSet {\n name: string;\n schemaRuleSuppressions?: Array<IRuleSuppressionMap<Schema>>;\n schemaItemRuleSuppressions?: Array<IRuleSuppressionMap<SchemaItem>>;\n classRuleSuppressions?: Array<IRuleSuppressionMap<AnyClass>>;\n propertyRuleSuppressions?: Array<IRuleSuppressionMap<AnyProperty>>;\n entityRuleSuppressions?: Array<IRuleSuppressionMap<EntityClass>>;\n structRuleSuppressions?: Array<IRuleSuppressionMap<StructClass>>;\n mixinRuleSuppressions?: Array<IRuleSuppressionMap<Mixin>>;\n relationshipRuleSuppressions?: Array<IRuleSuppressionMap<RelationshipClass>>;\n relationshipConstraintRuleSuppressions?: Array<IRuleSuppressionMap<RelationshipConstraint>>;\n customAttributeRuleSuppressions?: Array<IRuleSuppressionMap<CustomAttributeClass>>;\n customAttributeContainerSuppressions?: Array<IRuleSuppressionMap<CustomAttributeContainerProps>>;\n customAttributeInstanceSuppressions?: Array<BaseRuleSuppressionMap<CustomAttributeContainerProps, CustomAttribute>>;\n enumerationRuleSuppressions?: Array<IRuleSuppressionMap<Enumeration>>;\n koqRuleSuppressions?: Array<IRuleSuppressionMap<KindOfQuantity>>;\n propertyCategoryRuleSuppressions?: Array<IRuleSuppressionMap<PropertyCategory>>;\n formatRuleSuppressions?: Array<IRuleSuppressionMap<Format>>;\n unitRuleSuppressions?: Array<IRuleSuppressionMap<Unit>>;\n invertedUnitRuleSuppressions?: Array<IRuleSuppressionMap<InvertedUnit>>;\n unitSystemRuleSuppressions?: Array<IRuleSuppressionMap<UnitSystem>>;\n phenomenonRuleSuppressions?: Array<IRuleSuppressionMap<Phenomenon>>;\n constantRuleSuppressions?: Array<IRuleSuppressionMap<Constant>>;\n}\n"]}