@itwin/ecschema-metadata 5.0.0-dev.9 → 5.0.0-dev.92

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 (302) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/Constants.d.ts +8 -0
  3. package/lib/cjs/Constants.d.ts.map +1 -1
  4. package/lib/cjs/Constants.js +30 -21
  5. package/lib/cjs/Constants.js.map +1 -1
  6. package/lib/cjs/Context.d.ts +83 -34
  7. package/lib/cjs/Context.d.ts.map +1 -1
  8. package/lib/cjs/Context.js +73 -23
  9. package/lib/cjs/Context.js.map +1 -1
  10. package/lib/cjs/DelayedPromise.js +6 -4
  11. package/lib/cjs/DelayedPromise.js.map +1 -1
  12. package/lib/cjs/Deserialization/AbstractParser.js +1 -0
  13. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  14. package/lib/cjs/Deserialization/Helper.d.ts +3 -3
  15. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  16. package/lib/cjs/Deserialization/Helper.js +8 -0
  17. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  18. package/lib/cjs/Deserialization/JsonParser.js +3 -0
  19. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  20. package/lib/cjs/Deserialization/JsonProps.d.ts +14 -0
  21. package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
  22. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  23. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  24. package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
  25. package/lib/cjs/Deserialization/XmlParser.js +11 -3
  26. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  27. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  28. package/lib/cjs/Deserialization/XmlSerializationUtils.js +2 -6
  29. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  30. package/lib/cjs/ECName.js +1 -0
  31. package/lib/cjs/ECName.js.map +1 -1
  32. package/lib/cjs/ECObjects.d.ts +21 -1
  33. package/lib/cjs/ECObjects.d.ts.map +1 -1
  34. package/lib/cjs/ECObjects.js +33 -2
  35. package/lib/cjs/ECObjects.js.map +1 -1
  36. package/lib/cjs/Exception.js +1 -0
  37. package/lib/cjs/Exception.js.map +1 -1
  38. package/lib/cjs/Interfaces.d.ts +10 -3
  39. package/lib/cjs/Interfaces.d.ts.map +1 -1
  40. package/lib/cjs/Interfaces.js.map +1 -1
  41. package/lib/cjs/Metadata/Class.d.ts +75 -16
  42. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  43. package/lib/cjs/Metadata/Class.js +168 -46
  44. package/lib/cjs/Metadata/Class.js.map +1 -1
  45. package/lib/cjs/Metadata/Constant.d.ts +14 -1
  46. package/lib/cjs/Metadata/Constant.d.ts.map +1 -1
  47. package/lib/cjs/Metadata/Constant.js +27 -2
  48. package/lib/cjs/Metadata/Constant.js.map +1 -1
  49. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  50. package/lib/cjs/Metadata/CustomAttributeClass.d.ts +16 -4
  51. package/lib/cjs/Metadata/CustomAttributeClass.d.ts.map +1 -1
  52. package/lib/cjs/Metadata/CustomAttributeClass.js +22 -4
  53. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  54. package/lib/cjs/Metadata/EntityClass.d.ts +20 -8
  55. package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
  56. package/lib/cjs/Metadata/EntityClass.js +42 -22
  57. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  58. package/lib/cjs/Metadata/Enumeration.d.ts +14 -1
  59. package/lib/cjs/Metadata/Enumeration.d.ts.map +1 -1
  60. package/lib/cjs/Metadata/Enumeration.js +22 -1
  61. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  62. package/lib/cjs/Metadata/Format.d.ts +41 -1
  63. package/lib/cjs/Metadata/Format.d.ts.map +1 -1
  64. package/lib/cjs/Metadata/Format.js +68 -3
  65. package/lib/cjs/Metadata/Format.js.map +1 -1
  66. package/lib/cjs/Metadata/InvertedUnit.d.ts +8 -3
  67. package/lib/cjs/Metadata/InvertedUnit.d.ts.map +1 -1
  68. package/lib/cjs/Metadata/InvertedUnit.js +17 -6
  69. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  70. package/lib/cjs/Metadata/KindOfQuantity.d.ts +14 -3
  71. package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
  72. package/lib/cjs/Metadata/KindOfQuantity.js +43 -18
  73. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  74. package/lib/cjs/Metadata/Mixin.d.ts +15 -1
  75. package/lib/cjs/Metadata/Mixin.d.ts.map +1 -1
  76. package/lib/cjs/Metadata/Mixin.js +23 -2
  77. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  78. package/lib/cjs/Metadata/OverrideFormat.js +9 -0
  79. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  80. package/lib/cjs/Metadata/Phenomenon.d.ts +14 -1
  81. package/lib/cjs/Metadata/Phenomenon.d.ts.map +1 -1
  82. package/lib/cjs/Metadata/Phenomenon.js +22 -1
  83. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  84. package/lib/cjs/Metadata/Property.d.ts +5 -1
  85. package/lib/cjs/Metadata/Property.d.ts.map +1 -1
  86. package/lib/cjs/Metadata/Property.js +83 -28
  87. package/lib/cjs/Metadata/Property.js.map +1 -1
  88. package/lib/cjs/Metadata/PropertyCategory.d.ts +14 -1
  89. package/lib/cjs/Metadata/PropertyCategory.d.ts.map +1 -1
  90. package/lib/cjs/Metadata/PropertyCategory.js +21 -1
  91. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  92. package/lib/cjs/Metadata/RelationshipClass.d.ts +15 -2
  93. package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
  94. package/lib/cjs/Metadata/RelationshipClass.js +47 -10
  95. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  96. package/lib/cjs/Metadata/Schema.d.ts +117 -13
  97. package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
  98. package/lib/cjs/Metadata/Schema.js +148 -70
  99. package/lib/cjs/Metadata/Schema.js.map +1 -1
  100. package/lib/cjs/Metadata/SchemaItem.d.ts +11 -2
  101. package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
  102. package/lib/cjs/Metadata/SchemaItem.js +12 -2
  103. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  104. package/lib/cjs/Metadata/Unit.d.ts +8 -1
  105. package/lib/cjs/Metadata/Unit.d.ts.map +1 -1
  106. package/lib/cjs/Metadata/Unit.js +21 -3
  107. package/lib/cjs/Metadata/Unit.js.map +1 -1
  108. package/lib/cjs/Metadata/UnitSystem.d.ts +14 -3
  109. package/lib/cjs/Metadata/UnitSystem.d.ts.map +1 -1
  110. package/lib/cjs/Metadata/UnitSystem.js +21 -3
  111. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  112. package/lib/cjs/PropertyTypes.js.map +1 -1
  113. package/lib/cjs/SchemaJsonLocater.d.ts +3 -3
  114. package/lib/cjs/SchemaJsonLocater.d.ts.map +1 -1
  115. package/lib/cjs/SchemaJsonLocater.js +3 -3
  116. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  117. package/lib/cjs/SchemaKey.d.ts +7 -1
  118. package/lib/cjs/SchemaKey.d.ts.map +1 -1
  119. package/lib/cjs/SchemaKey.js +13 -3
  120. package/lib/cjs/SchemaKey.js.map +1 -1
  121. package/lib/cjs/SchemaLoader.d.ts +2 -2
  122. package/lib/cjs/SchemaLoader.d.ts.map +1 -1
  123. package/lib/cjs/SchemaLoader.js +1 -0
  124. package/lib/cjs/SchemaLoader.js.map +1 -1
  125. package/lib/cjs/SchemaPartVisitorDelegate.js +1 -0
  126. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  127. package/lib/cjs/UnitConversion/Graph.js +69 -65
  128. package/lib/cjs/UnitConversion/Graph.js.map +1 -1
  129. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  130. package/lib/cjs/UnitConversion/UnitConversion.d.ts +1 -1
  131. package/lib/cjs/UnitConversion/UnitConversion.d.ts.map +1 -1
  132. package/lib/cjs/UnitConversion/UnitConversion.js +9 -7
  133. package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
  134. package/lib/cjs/UnitConversion/UnitConverter.js +2 -0
  135. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  136. package/lib/cjs/UnitConversion/UnitTree.d.ts +2 -0
  137. package/lib/cjs/UnitConversion/UnitTree.d.ts.map +1 -1
  138. package/lib/cjs/UnitConversion/UnitTree.js +11 -1
  139. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  140. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  141. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +8 -9
  142. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  143. package/lib/cjs/Validation/SchemaWalker.d.ts +1 -1
  144. package/lib/cjs/Validation/SchemaWalker.d.ts.map +1 -1
  145. package/lib/cjs/Validation/SchemaWalker.js +6 -4
  146. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  147. package/lib/cjs/ecschema-metadata.d.ts +1 -1
  148. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  149. package/lib/cjs/ecschema-metadata.js.map +1 -1
  150. package/lib/cjs/utils/SchemaGraph.js +2 -3
  151. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  152. package/lib/esm/Constants.d.ts +8 -0
  153. package/lib/esm/Constants.d.ts.map +1 -1
  154. package/lib/esm/Constants.js +29 -20
  155. package/lib/esm/Constants.js.map +1 -1
  156. package/lib/esm/Context.d.ts +83 -34
  157. package/lib/esm/Context.d.ts.map +1 -1
  158. package/lib/esm/Context.js +71 -21
  159. package/lib/esm/Context.js.map +1 -1
  160. package/lib/esm/DelayedPromise.js +6 -4
  161. package/lib/esm/DelayedPromise.js.map +1 -1
  162. package/lib/esm/Deserialization/AbstractParser.js +1 -0
  163. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  164. package/lib/esm/Deserialization/Helper.d.ts +3 -3
  165. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  166. package/lib/esm/Deserialization/Helper.js +8 -0
  167. package/lib/esm/Deserialization/Helper.js.map +1 -1
  168. package/lib/esm/Deserialization/JsonParser.js +3 -0
  169. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  170. package/lib/esm/Deserialization/JsonProps.d.ts +14 -0
  171. package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
  172. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  173. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  174. package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
  175. package/lib/esm/Deserialization/XmlParser.js +11 -3
  176. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  177. package/lib/esm/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  178. package/lib/esm/Deserialization/XmlSerializationUtils.js +2 -6
  179. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  180. package/lib/esm/ECName.js +1 -0
  181. package/lib/esm/ECName.js.map +1 -1
  182. package/lib/esm/ECObjects.d.ts +21 -1
  183. package/lib/esm/ECObjects.d.ts.map +1 -1
  184. package/lib/esm/ECObjects.js +31 -1
  185. package/lib/esm/ECObjects.js.map +1 -1
  186. package/lib/esm/Exception.js +1 -0
  187. package/lib/esm/Exception.js.map +1 -1
  188. package/lib/esm/Interfaces.d.ts +10 -3
  189. package/lib/esm/Interfaces.d.ts.map +1 -1
  190. package/lib/esm/Interfaces.js.map +1 -1
  191. package/lib/esm/Metadata/Class.d.ts +75 -16
  192. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  193. package/lib/esm/Metadata/Class.js +169 -47
  194. package/lib/esm/Metadata/Class.js.map +1 -1
  195. package/lib/esm/Metadata/Constant.d.ts +14 -1
  196. package/lib/esm/Metadata/Constant.d.ts.map +1 -1
  197. package/lib/esm/Metadata/Constant.js +27 -2
  198. package/lib/esm/Metadata/Constant.js.map +1 -1
  199. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  200. package/lib/esm/Metadata/CustomAttributeClass.d.ts +16 -4
  201. package/lib/esm/Metadata/CustomAttributeClass.d.ts.map +1 -1
  202. package/lib/esm/Metadata/CustomAttributeClass.js +22 -4
  203. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  204. package/lib/esm/Metadata/EntityClass.d.ts +20 -8
  205. package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
  206. package/lib/esm/Metadata/EntityClass.js +42 -22
  207. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  208. package/lib/esm/Metadata/Enumeration.d.ts +14 -1
  209. package/lib/esm/Metadata/Enumeration.d.ts.map +1 -1
  210. package/lib/esm/Metadata/Enumeration.js +22 -1
  211. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  212. package/lib/esm/Metadata/Format.d.ts +41 -1
  213. package/lib/esm/Metadata/Format.d.ts.map +1 -1
  214. package/lib/esm/Metadata/Format.js +68 -3
  215. package/lib/esm/Metadata/Format.js.map +1 -1
  216. package/lib/esm/Metadata/InvertedUnit.d.ts +8 -3
  217. package/lib/esm/Metadata/InvertedUnit.d.ts.map +1 -1
  218. package/lib/esm/Metadata/InvertedUnit.js +17 -6
  219. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  220. package/lib/esm/Metadata/KindOfQuantity.d.ts +14 -3
  221. package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
  222. package/lib/esm/Metadata/KindOfQuantity.js +43 -18
  223. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  224. package/lib/esm/Metadata/Mixin.d.ts +15 -1
  225. package/lib/esm/Metadata/Mixin.d.ts.map +1 -1
  226. package/lib/esm/Metadata/Mixin.js +24 -3
  227. package/lib/esm/Metadata/Mixin.js.map +1 -1
  228. package/lib/esm/Metadata/OverrideFormat.js +9 -0
  229. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  230. package/lib/esm/Metadata/Phenomenon.d.ts +14 -1
  231. package/lib/esm/Metadata/Phenomenon.d.ts.map +1 -1
  232. package/lib/esm/Metadata/Phenomenon.js +22 -1
  233. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  234. package/lib/esm/Metadata/Property.d.ts +5 -1
  235. package/lib/esm/Metadata/Property.d.ts.map +1 -1
  236. package/lib/esm/Metadata/Property.js +84 -29
  237. package/lib/esm/Metadata/Property.js.map +1 -1
  238. package/lib/esm/Metadata/PropertyCategory.d.ts +14 -1
  239. package/lib/esm/Metadata/PropertyCategory.d.ts.map +1 -1
  240. package/lib/esm/Metadata/PropertyCategory.js +21 -1
  241. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  242. package/lib/esm/Metadata/RelationshipClass.d.ts +15 -2
  243. package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
  244. package/lib/esm/Metadata/RelationshipClass.js +48 -11
  245. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  246. package/lib/esm/Metadata/Schema.d.ts +117 -13
  247. package/lib/esm/Metadata/Schema.d.ts.map +1 -1
  248. package/lib/esm/Metadata/Schema.js +148 -70
  249. package/lib/esm/Metadata/Schema.js.map +1 -1
  250. package/lib/esm/Metadata/SchemaItem.d.ts +11 -2
  251. package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
  252. package/lib/esm/Metadata/SchemaItem.js +13 -3
  253. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  254. package/lib/esm/Metadata/Unit.d.ts +8 -1
  255. package/lib/esm/Metadata/Unit.d.ts.map +1 -1
  256. package/lib/esm/Metadata/Unit.js +21 -3
  257. package/lib/esm/Metadata/Unit.js.map +1 -1
  258. package/lib/esm/Metadata/UnitSystem.d.ts +14 -3
  259. package/lib/esm/Metadata/UnitSystem.d.ts.map +1 -1
  260. package/lib/esm/Metadata/UnitSystem.js +21 -3
  261. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  262. package/lib/esm/PropertyTypes.js.map +1 -1
  263. package/lib/esm/SchemaJsonLocater.d.ts +3 -3
  264. package/lib/esm/SchemaJsonLocater.d.ts.map +1 -1
  265. package/lib/esm/SchemaJsonLocater.js +3 -3
  266. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  267. package/lib/esm/SchemaKey.d.ts +7 -1
  268. package/lib/esm/SchemaKey.d.ts.map +1 -1
  269. package/lib/esm/SchemaKey.js +13 -3
  270. package/lib/esm/SchemaKey.js.map +1 -1
  271. package/lib/esm/SchemaLoader.d.ts +2 -2
  272. package/lib/esm/SchemaLoader.d.ts.map +1 -1
  273. package/lib/esm/SchemaLoader.js +1 -0
  274. package/lib/esm/SchemaLoader.js.map +1 -1
  275. package/lib/esm/SchemaPartVisitorDelegate.js +1 -0
  276. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  277. package/lib/esm/UnitConversion/Graph.js +69 -65
  278. package/lib/esm/UnitConversion/Graph.js.map +1 -1
  279. package/lib/esm/UnitConversion/Parser.js.map +1 -1
  280. package/lib/esm/UnitConversion/UnitConversion.d.ts +1 -1
  281. package/lib/esm/UnitConversion/UnitConversion.d.ts.map +1 -1
  282. package/lib/esm/UnitConversion/UnitConversion.js +9 -7
  283. package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
  284. package/lib/esm/UnitConversion/UnitConverter.js +2 -0
  285. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  286. package/lib/esm/UnitConversion/UnitTree.d.ts +2 -0
  287. package/lib/esm/UnitConversion/UnitTree.d.ts.map +1 -1
  288. package/lib/esm/UnitConversion/UnitTree.js +11 -1
  289. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  290. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  291. package/lib/esm/UnitProvider/SchemaUnitProvider.js +8 -9
  292. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  293. package/lib/esm/Validation/SchemaWalker.d.ts +1 -1
  294. package/lib/esm/Validation/SchemaWalker.d.ts.map +1 -1
  295. package/lib/esm/Validation/SchemaWalker.js +6 -4
  296. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  297. package/lib/esm/ecschema-metadata.d.ts +1 -1
  298. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  299. package/lib/esm/ecschema-metadata.js.map +1 -1
  300. package/lib/esm/utils/SchemaGraph.js +2 -3
  301. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  302. package/package.json +14 -14
@@ -2,7 +2,7 @@
2
2
  * @module Metadata
3
3
  */
4
4
  import { ClassProps } from "../Deserialization/JsonProps";
5
- import { ECClassModifier, PrimitiveType, SchemaItemType } from "../ECObjects";
5
+ import { ECClassModifier, PrimitiveType, SchemaItemType, SupportedSchemaItemType } from "../ECObjects";
6
6
  import { AnyClass, LazyLoadedECClass } from "../Interfaces";
7
7
  import { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet } from "./CustomAttribute";
8
8
  import { Enumeration } from "./Enumeration";
@@ -14,17 +14,29 @@ import { SchemaItem } from "./SchemaItem";
14
14
  * @beta
15
15
  */
16
16
  export declare abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {
17
+ static get schemaItemType(): SupportedSchemaItemType;
17
18
  protected _modifier: ECClassModifier;
18
19
  protected _baseClass?: LazyLoadedECClass;
20
+ protected _derivedClasses?: Map<string, LazyLoadedECClass>;
19
21
  protected _properties?: Map<string, Property>;
20
22
  private _customAttributes?;
21
23
  private _mergedPropertyCache?;
22
24
  get modifier(): ECClassModifier;
23
- get baseClass(): LazyLoadedECClass | undefined;
24
- set baseClass(baseClass: LazyLoadedECClass | undefined);
25
- get properties(): IterableIterator<Property> | undefined;
26
25
  get customAttributes(): CustomAttributeSet | undefined;
27
26
  constructor(schema: Schema, name: string, modifier?: ECClassModifier);
27
+ /**
28
+ * Gets the base class if it exists, otherwise returns undefined.
29
+ */
30
+ get baseClass(): LazyLoadedECClass | undefined;
31
+ /**
32
+ * Sets the base class of the ECClass. Pass undefined to 'remove' the base class.
33
+ */
34
+ protected setBaseClass(baseClass: LazyLoadedECClass | undefined): Promise<void>;
35
+ /**
36
+ * Gets the derived classes belonging to this class.
37
+ * @returns An array of ECClasses or undefined if no derived classes exist.
38
+ */
39
+ getDerivedClasses(): Promise<ECClass[] | undefined>;
28
40
  /**
29
41
  * Convenience method for adding an already loaded ECProperty used by create*Property methods.
30
42
  * @param prop The property to add.
@@ -137,23 +149,35 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
137
149
  * Iterates (recursively) over all base classes and mixins, in "property override" order.
138
150
  * This is essentially a depth-first traversal through the inheritance tree.
139
151
  */
140
- getAllBaseClasses(): AsyncIterableIterator<ECClass>;
152
+ getAllBaseClasses(): AsyncIterable<ECClass>;
141
153
  getAllBaseClassesSync(): Iterable<AnyClass>;
142
- protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean): void;
143
- protected buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): Promise<void>;
144
- protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches?: boolean): void;
154
+ protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Iterable<Property>, overwriteExisting: boolean): void;
155
+ protected buildPropertyCache(result: Property[], existingValues?: Map<string, number>): Promise<void>;
156
+ protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>): void;
145
157
  /**
146
- * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
158
+ * Clears all caches on this object. This is called implicitly for this class,
159
+ * but needs to be called if derived classes have changed.
160
+ * @internal
161
+ */
162
+ cleanCache(): void;
163
+ /**
164
+ * Returns the properties on this class and its base classes.
147
165
  * Since this is an expensive operation, results will be cached after first call.
148
- * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
166
+ * @param excludeInherited If true, only properties defined directly on this class will be returned. Defaults to false.
167
+ * @returns An array of properties, empty array if none exist.
149
168
  */
150
- getPropertiesSync(resetCache?: boolean): Property[];
169
+ getPropertiesSync(excludeInherited?: boolean): Iterable<Property>;
151
170
  /**
152
- * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
171
+ * Quick way to check whether this class has any local properties without having to use the iterable
172
+ */
173
+ get hasLocalProperties(): boolean;
174
+ /**
175
+ * Returns the properties on this class and its base classes.
153
176
  * Since this is an expensive operation, results will be cached after first call.
154
- * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
177
+ * @param excludeInherited If true, only properties defined directly on this class will be returned.
178
+ * @returns An array of properties, empty array if none exist.
155
179
  */
156
- getProperties(resetCache?: boolean): Promise<Property[]>;
180
+ getProperties(excludeInherited?: boolean): Promise<Iterable<Property>>;
157
181
  /**
158
182
  * Retrieve all custom attributes in the current class and its bases
159
183
  * This is the async version of getCustomAttributesSync()
@@ -199,14 +223,48 @@ export declare abstract class ECClass extends SchemaItem implements CustomAttrib
199
223
  * @param modifier
200
224
  */
201
225
  protected setModifier(modifier: ECClassModifier): void;
226
+ /**
227
+ * Adds an ECClass to the derived class collection. This method is only intended to update the local
228
+ * cache of derived classes. For adding a class to the hierarchy, use the baseClass setter method.
229
+ * @param prop The property to add.
230
+ * @return The property that was added.
231
+ */
232
+ private addDerivedClass;
233
+ /**
234
+ * Removes an ECClass from the derived class collection. This method is only intended to update the local
235
+ * cache of derived classes. For updating the class hierarchy, use the baseClass setter method.
236
+ * @param prop The property to add.
237
+ * @return The property that was added.
238
+ */
239
+ private removeDerivedClass;
202
240
  }
203
241
  /**
204
242
  * A Typescript class representation of an ECStructClass.
205
243
  * @beta
206
244
  */
207
245
  export declare class StructClass extends ECClass {
208
- readonly schemaItemType: SchemaItemType.StructClass;
209
- constructor(schema: Schema, name: string, modifier?: ECClassModifier);
246
+ /**
247
+ * Get the type of item represented by this instance
248
+ * @beta
249
+ */
250
+ readonly schemaItemType: SchemaItemType;
251
+ /**
252
+ * Get the type of item represented by this class
253
+ * @beta
254
+ */
255
+ static get schemaItemType(): SchemaItemType;
256
+ /**
257
+ * Type guard to check if the SchemaItem is of type StructClass.
258
+ * @param item The SchemaItem to check.
259
+ * @returns True if the item is a StructClass, false otherwise.
260
+ */
261
+ static isStructClass(item?: SchemaItem): item is StructClass;
262
+ /**
263
+ * Type assertion to check if the SchemaItem is of type StructClass.
264
+ * @param item The SchemaItem to check.
265
+ * @returns The item cast to StructClass if it is a StructClass, undefined otherwise.
266
+ */
267
+ static assertIsStructClass(item?: SchemaItem): asserts item is StructClass;
210
268
  }
211
269
  /**
212
270
  * @internal
@@ -220,6 +278,7 @@ export declare abstract class MutableStructClass extends StructClass {
220
278
  * @internal
221
279
  */
222
280
  export declare abstract class MutableClass extends ECClass {
281
+ abstract setBaseClass(baseClass: LazyLoadedECClass | undefined): Promise<void>;
223
282
  abstract addCustomAttribute(customAttribute: CustomAttribute): void;
224
283
  abstract setModifier(modifier: ECClassModifier): void;
225
284
  abstract setName(name: string): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Class.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Class.ts"],"names":[],"mappings":"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"}
@@ -8,10 +8,11 @@
8
8
  import { assert } from "@itwin/core-bentley";
9
9
  import { DelayedPromiseWithProps } from "../DelayedPromise";
10
10
  import { XmlSerializationUtils } from "../Deserialization/XmlSerializationUtils";
11
- import { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from "../ECObjects";
11
+ import { AbstractSchemaItemType, classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from "../ECObjects";
12
12
  import { ECObjectsError, ECObjectsStatus } from "../Exception";
13
13
  import { SchemaItemKey, SchemaKey } from "../SchemaKey";
14
14
  import { serializeCustomAttributes } from "./CustomAttribute";
15
+ import { Enumeration } from "./Enumeration";
15
16
  import { EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, StructArrayProperty, StructProperty, } from "./Property";
16
17
  import { SchemaItem } from "./SchemaItem";
17
18
  import { SchemaReadHelper } from "../Deserialization/Helper";
@@ -20,10 +21,14 @@ import { SchemaReadHelper } from "../Deserialization/Helper";
20
21
  * @beta
21
22
  */
22
23
  export class ECClass extends SchemaItem {
24
+ static get schemaItemType() { return AbstractSchemaItemType.Class; } // need this so getItem("name", ECClass) in schema works
25
+ _modifier;
26
+ _baseClass;
27
+ _derivedClasses;
28
+ _properties;
29
+ _customAttributes;
30
+ _mergedPropertyCache;
23
31
  get modifier() { return this._modifier; }
24
- get baseClass() { return this._baseClass; }
25
- set baseClass(baseClass) { this._baseClass = baseClass; }
26
- get properties() { return this._properties?.values(); }
27
32
  get customAttributes() { return this._customAttributes; }
28
33
  constructor(schema, name, modifier) {
29
34
  super(schema, name);
@@ -32,6 +37,32 @@ export class ECClass extends SchemaItem {
32
37
  else
33
38
  this._modifier = ECClassModifier.None;
34
39
  }
40
+ /**
41
+ * Gets the base class if it exists, otherwise returns undefined.
42
+ */
43
+ get baseClass() {
44
+ return this._baseClass;
45
+ }
46
+ /**
47
+ * Sets the base class of the ECClass. Pass undefined to 'remove' the base class.
48
+ */
49
+ async setBaseClass(baseClass) {
50
+ const oldBaseClass = this._baseClass;
51
+ this._baseClass = baseClass;
52
+ if (baseClass)
53
+ this.addDerivedClass(await baseClass, this);
54
+ else if (oldBaseClass)
55
+ this.removeDerivedClass(await oldBaseClass, this);
56
+ }
57
+ /**
58
+ * Gets the derived classes belonging to this class.
59
+ * @returns An array of ECClasses or undefined if no derived classes exist.
60
+ */
61
+ async getDerivedClasses() {
62
+ if (!this._derivedClasses || this._derivedClasses.size === 0)
63
+ return undefined;
64
+ return Array.from(await Promise.all(this._derivedClasses.values()));
65
+ }
35
66
  /**
36
67
  * Convenience method for adding an already loaded ECProperty used by create*Property methods.
37
68
  * @param prop The property to add.
@@ -41,6 +72,7 @@ export class ECClass extends SchemaItem {
41
72
  if (!this._properties)
42
73
  this._properties = new Map();
43
74
  this._properties.set(prop.name.toUpperCase(), prop);
75
+ this.cleanCache();
44
76
  return prop;
45
77
  }
46
78
  /**
@@ -51,8 +83,10 @@ export class ECClass extends SchemaItem {
51
83
  async deleteProperty(name) {
52
84
  if (this._properties) {
53
85
  const property = await this.getProperty(name);
54
- if (property)
86
+ if (property) {
55
87
  this._properties.delete(name.toUpperCase());
88
+ this.cleanCache();
89
+ }
56
90
  }
57
91
  }
58
92
  /**
@@ -63,15 +97,17 @@ export class ECClass extends SchemaItem {
63
97
  deletePropertySync(name) {
64
98
  if (this._properties) {
65
99
  const property = this.getPropertySync(name);
66
- if (property)
100
+ if (property) {
67
101
  this._properties.delete(name.toUpperCase());
102
+ this.cleanCache();
103
+ }
68
104
  }
69
105
  }
70
106
  getBaseClassSync() {
71
107
  if (!this.baseClass) {
72
108
  return undefined;
73
109
  }
74
- return this.schema.lookupItemSync(this.baseClass);
110
+ return this.schema.lookupItemSync(this.baseClass, ECClass);
75
111
  }
76
112
  /**
77
113
  * Searches, case-insensitive, for a local ECProperty with the name provided.
@@ -201,7 +237,7 @@ export class ECClass extends SchemaItem {
201
237
  async loadStructType(structType, schema) {
202
238
  let correctType;
203
239
  if (typeof (structType) === "string") {
204
- correctType = await schema.lookupItem(structType);
240
+ correctType = await schema.lookupItem(structType, StructClass);
205
241
  }
206
242
  else
207
243
  correctType = structType;
@@ -212,7 +248,7 @@ export class ECClass extends SchemaItem {
212
248
  loadStructTypeSync(structType, schema) {
213
249
  let correctType;
214
250
  if (typeof (structType) === "string") {
215
- correctType = schema.lookupItemSync(structType);
251
+ correctType = schema.lookupItemSync(structType, StructClass);
216
252
  }
217
253
  else
218
254
  correctType = structType;
@@ -226,7 +262,7 @@ export class ECClass extends SchemaItem {
226
262
  if (typeof (primitiveType) === "string") {
227
263
  let resolvedType = parsePrimitiveType(primitiveType);
228
264
  if (!resolvedType) {
229
- resolvedType = await schema.lookupItem(primitiveType);
265
+ resolvedType = await schema.lookupItem(primitiveType, Enumeration);
230
266
  }
231
267
  if (resolvedType === undefined)
232
268
  throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);
@@ -243,7 +279,7 @@ export class ECClass extends SchemaItem {
243
279
  if (typeof (primitiveType) === "string") {
244
280
  let resolvedType = parsePrimitiveType(primitiveType);
245
281
  if (!resolvedType) {
246
- resolvedType = schema.lookupItemSync(primitiveType);
282
+ resolvedType = schema.lookupItemSync(primitiveType, Enumeration);
247
283
  }
248
284
  if (resolvedType === undefined)
249
285
  throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);
@@ -265,7 +301,7 @@ export class ECClass extends SchemaItem {
265
301
  if (this.baseClass !== undefined)
266
302
  schemaJson.baseClass = this.baseClass.fullName;
267
303
  if (this._properties !== undefined && this._properties.size > 0)
268
- schemaJson.properties = [...this.properties].map((prop) => prop.toJSON());
304
+ schemaJson.properties = [...this._properties.values()].map((prop) => prop.toJSON());
269
305
  const customAttributes = serializeCustomAttributes(this.customAttributes);
270
306
  if (customAttributes !== undefined)
271
307
  schemaJson.customAttributes = customAttributes;
@@ -283,8 +319,8 @@ export class ECClass extends SchemaItem {
283
319
  baseClassElement.textContent = baseClassName;
284
320
  itemElement.appendChild(baseClassElement);
285
321
  }
286
- if (undefined !== this.properties) {
287
- for (const prop of this.properties) {
322
+ if (undefined !== this._properties) {
323
+ for (const prop of this._properties.values()) {
288
324
  const propXml = await prop.toXml(schemaXml);
289
325
  itemElement.appendChild(propXml);
290
326
  }
@@ -317,12 +353,25 @@ export class ECClass extends SchemaItem {
317
353
  const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);
318
354
  if (!ecClassSchemaItemKey)
319
355
  throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);
320
- this._baseClass = new DelayedPromiseWithProps(ecClassSchemaItemKey, async () => {
321
- const baseClass = await this.schema.lookupItem(ecClassSchemaItemKey);
322
- if (undefined === baseClass)
323
- throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);
324
- return baseClass;
325
- });
356
+ const baseClass = this.schema.lookupItemSync(ecClassSchemaItemKey);
357
+ let lazyBase;
358
+ if (!baseClass) {
359
+ lazyBase = new DelayedPromiseWithProps(ecClassSchemaItemKey, async () => {
360
+ const baseItem = await this.schema.lookupItem(ecClassSchemaItemKey);
361
+ if (undefined === baseItem || !ECClass.isECClass(baseItem))
362
+ throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);
363
+ return baseItem;
364
+ });
365
+ }
366
+ else {
367
+ lazyBase = new DelayedPromiseWithProps(ecClassSchemaItemKey, async () => {
368
+ return baseClass;
369
+ });
370
+ }
371
+ this._baseClass = lazyBase;
372
+ if (!baseClass)
373
+ return;
374
+ this.addDerivedClass(baseClass, this);
326
375
  }
327
376
  }
328
377
  async fromJSON(classProps) {
@@ -341,8 +390,8 @@ export class ECClass extends SchemaItem {
341
390
  const baseClasses = [this];
342
391
  const addBaseClasses = async (ecClass) => {
343
392
  if (SchemaItemType.EntityClass === ecClass.schemaItemType) {
344
- for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {
345
- baseClasses.push(await (ecClass).mixins[i]);
393
+ for (let i = ecClass.mixins.length - 1; i >= 0; i--) {
394
+ baseClasses.push(await ecClass.mixins[i]);
346
395
  }
347
396
  }
348
397
  if (ecClass.baseClass)
@@ -358,7 +407,7 @@ export class ECClass extends SchemaItem {
358
407
  *getAllBaseClassesSync() {
359
408
  const baseClasses = [this];
360
409
  const addBaseClasses = (ecClass) => {
361
- if (SchemaItemType.EntityClass === ecClass.schemaItemType) {
410
+ if (ecClass.schemaItemType === SchemaItemType.EntityClass) { // cannot use EntityClass typeguard because of circular reference
362
411
  for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {
363
412
  baseClasses.push(m);
364
413
  }
@@ -389,52 +438,71 @@ export class ECClass extends SchemaItem {
389
438
  }
390
439
  }
391
440
  }
392
- async buildPropertyCache(result, existingValues, resetBaseCaches = false) {
441
+ async buildPropertyCache(result, existingValues) {
393
442
  if (!existingValues) {
394
443
  existingValues = new Map();
395
444
  }
396
445
  if (this.baseClass) {
397
- ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);
446
+ const baseClass = await this.baseClass;
447
+ if (baseClass) {
448
+ ECClass.mergeProperties(result, existingValues, await baseClass.getProperties(), false);
449
+ }
398
450
  }
399
- if (!this.properties)
451
+ if (!this._properties)
400
452
  return;
401
- ECClass.mergeProperties(result, existingValues, [...this.properties], true);
453
+ ECClass.mergeProperties(result, existingValues, [...this._properties.values()], true);
402
454
  }
403
- buildPropertyCacheSync(result, existingValues, resetBaseCaches = false) {
455
+ buildPropertyCacheSync(result, existingValues) {
404
456
  if (!existingValues) {
405
457
  existingValues = new Map();
406
458
  }
407
459
  const baseClass = this.getBaseClassSync();
408
460
  if (baseClass) {
409
- ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);
461
+ ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(), false);
410
462
  }
411
- if (!this.properties)
463
+ if (!this._properties)
412
464
  return;
413
- ECClass.mergeProperties(result, existingValues, [...this.properties], true);
465
+ ECClass.mergeProperties(result, existingValues, [...this._properties.values()], true);
414
466
  }
415
467
  /**
416
- * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
468
+ * Clears all caches on this object. This is called implicitly for this class,
469
+ * but needs to be called if derived classes have changed.
470
+ * @internal
471
+ */
472
+ cleanCache() {
473
+ this._mergedPropertyCache = undefined;
474
+ }
475
+ /**
476
+ * Returns the properties on this class and its base classes.
417
477
  * Since this is an expensive operation, results will be cached after first call.
418
- * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
478
+ * @param excludeInherited If true, only properties defined directly on this class will be returned. Defaults to false.
479
+ * @returns An array of properties, empty array if none exist.
419
480
  */
420
- getPropertiesSync(resetCache = false) {
421
- if (!this._mergedPropertyCache || resetCache) {
481
+ getPropertiesSync(excludeInherited) {
482
+ if (excludeInherited) {
483
+ return this._properties && this._properties.size > 0 ? this._properties.values() : [];
484
+ }
485
+ if (!this._mergedPropertyCache) {
422
486
  this._mergedPropertyCache = [];
423
- this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);
487
+ this.buildPropertyCacheSync(this._mergedPropertyCache, undefined);
424
488
  }
425
489
  return this._mergedPropertyCache;
426
490
  }
427
491
  /**
428
- * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.
492
+ * Quick way to check whether this class has any local properties without having to use the iterable
493
+ */
494
+ get hasLocalProperties() {
495
+ return this._properties !== undefined && this._properties.size > 0;
496
+ }
497
+ /**
498
+ * Returns the properties on this class and its base classes.
429
499
  * Since this is an expensive operation, results will be cached after first call.
430
- * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt
500
+ * @param excludeInherited If true, only properties defined directly on this class will be returned.
501
+ * @returns An array of properties, empty array if none exist.
431
502
  */
432
- async getProperties(resetCache = false) {
433
- if (!this._mergedPropertyCache || resetCache) {
434
- this._mergedPropertyCache = [];
435
- await this.buildPropertyCache(this._mergedPropertyCache, undefined, resetCache);
436
- }
437
- return this._mergedPropertyCache;
503
+ async getProperties(excludeInherited) {
504
+ // At the moment we do not lazy load properties, so this is the same as getPropertiesSync
505
+ return this.getPropertiesSync(excludeInherited);
438
506
  }
439
507
  /**
440
508
  * Retrieve all custom attributes in the current class and its bases
@@ -533,15 +601,69 @@ export class ECClass extends SchemaItem {
533
601
  setModifier(modifier) {
534
602
  this._modifier = modifier;
535
603
  }
604
+ /**
605
+ * Adds an ECClass to the derived class collection. This method is only intended to update the local
606
+ * cache of derived classes. For adding a class to the hierarchy, use the baseClass setter method.
607
+ * @param prop The property to add.
608
+ * @return The property that was added.
609
+ */
610
+ addDerivedClass(baseClass, derivedClass) {
611
+ if (!baseClass._derivedClasses)
612
+ baseClass._derivedClasses = new Map();
613
+ if (baseClass._derivedClasses.has(derivedClass.fullName))
614
+ return;
615
+ if (derivedClass.isSync(baseClass)) {
616
+ const promise = new DelayedPromiseWithProps(derivedClass.key, async () => derivedClass);
617
+ baseClass._derivedClasses.set(derivedClass.fullName, promise);
618
+ }
619
+ }
620
+ /**
621
+ * Removes an ECClass from the derived class collection. This method is only intended to update the local
622
+ * cache of derived classes. For updating the class hierarchy, use the baseClass setter method.
623
+ * @param prop The property to add.
624
+ * @return The property that was added.
625
+ */
626
+ removeDerivedClass(baseClass, derivedClass) {
627
+ if (!baseClass._derivedClasses)
628
+ return;
629
+ if (!baseClass._derivedClasses.has(derivedClass.fullName))
630
+ return;
631
+ baseClass._derivedClasses.delete(derivedClass.fullName);
632
+ }
536
633
  }
537
634
  /**
538
635
  * A Typescript class representation of an ECStructClass.
539
636
  * @beta
540
637
  */
541
638
  export class StructClass extends ECClass {
542
- constructor(schema, name, modifier) {
543
- super(schema, name, modifier);
544
- this.schemaItemType = SchemaItemType.StructClass;
639
+ /**
640
+ * Get the type of item represented by this instance
641
+ * @beta
642
+ */
643
+ schemaItemType = StructClass.schemaItemType;
644
+ /**
645
+ * Get the type of item represented by this class
646
+ * @beta
647
+ */
648
+ static get schemaItemType() { return SchemaItemType.StructClass; }
649
+ /**
650
+ * Type guard to check if the SchemaItem is of type StructClass.
651
+ * @param item The SchemaItem to check.
652
+ * @returns True if the item is a StructClass, false otherwise.
653
+ */
654
+ static isStructClass(item) {
655
+ if (item && item.schemaItemType === SchemaItemType.StructClass)
656
+ return true;
657
+ return false;
658
+ }
659
+ /**
660
+ * Type assertion to check if the SchemaItem is of type StructClass.
661
+ * @param item The SchemaItem to check.
662
+ * @returns The item cast to StructClass if it is a StructClass, undefined otherwise.
663
+ */
664
+ static assertIsStructClass(item) {
665
+ if (!this.isStructClass(item))
666
+ throw new ECObjectsError(ECObjectsStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.StructClass}' (StructClass)`);
545
667
  }
546
668
  }
547
669
  /**