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

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 (298) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/Constants.js +20 -20
  3. package/lib/cjs/Constants.js.map +1 -1
  4. package/lib/cjs/Context.d.ts +83 -34
  5. package/lib/cjs/Context.d.ts.map +1 -1
  6. package/lib/cjs/Context.js +73 -23
  7. package/lib/cjs/Context.js.map +1 -1
  8. package/lib/cjs/DelayedPromise.js +6 -4
  9. package/lib/cjs/DelayedPromise.js.map +1 -1
  10. package/lib/cjs/Deserialization/AbstractParser.js +1 -0
  11. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  12. package/lib/cjs/Deserialization/Helper.d.ts +3 -3
  13. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  14. package/lib/cjs/Deserialization/Helper.js +8 -0
  15. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  16. package/lib/cjs/Deserialization/JsonParser.js +3 -0
  17. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  18. package/lib/cjs/Deserialization/JsonProps.d.ts +3 -0
  19. package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
  20. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  21. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  22. package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
  23. package/lib/cjs/Deserialization/XmlParser.js +11 -3
  24. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  25. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  26. package/lib/cjs/Deserialization/XmlSerializationUtils.js +2 -6
  27. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  28. package/lib/cjs/ECName.js +1 -0
  29. package/lib/cjs/ECName.js.map +1 -1
  30. package/lib/cjs/ECObjects.d.ts +21 -1
  31. package/lib/cjs/ECObjects.d.ts.map +1 -1
  32. package/lib/cjs/ECObjects.js +33 -2
  33. package/lib/cjs/ECObjects.js.map +1 -1
  34. package/lib/cjs/Exception.js +1 -0
  35. package/lib/cjs/Exception.js.map +1 -1
  36. package/lib/cjs/Interfaces.d.ts +10 -3
  37. package/lib/cjs/Interfaces.d.ts.map +1 -1
  38. package/lib/cjs/Interfaces.js.map +1 -1
  39. package/lib/cjs/Metadata/Class.d.ts +75 -16
  40. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  41. package/lib/cjs/Metadata/Class.js +168 -46
  42. package/lib/cjs/Metadata/Class.js.map +1 -1
  43. package/lib/cjs/Metadata/Constant.d.ts +14 -1
  44. package/lib/cjs/Metadata/Constant.d.ts.map +1 -1
  45. package/lib/cjs/Metadata/Constant.js +27 -2
  46. package/lib/cjs/Metadata/Constant.js.map +1 -1
  47. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  48. package/lib/cjs/Metadata/CustomAttributeClass.d.ts +16 -4
  49. package/lib/cjs/Metadata/CustomAttributeClass.d.ts.map +1 -1
  50. package/lib/cjs/Metadata/CustomAttributeClass.js +22 -4
  51. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  52. package/lib/cjs/Metadata/EntityClass.d.ts +20 -8
  53. package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
  54. package/lib/cjs/Metadata/EntityClass.js +42 -22
  55. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  56. package/lib/cjs/Metadata/Enumeration.d.ts +14 -1
  57. package/lib/cjs/Metadata/Enumeration.d.ts.map +1 -1
  58. package/lib/cjs/Metadata/Enumeration.js +22 -1
  59. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  60. package/lib/cjs/Metadata/Format.d.ts +41 -1
  61. package/lib/cjs/Metadata/Format.d.ts.map +1 -1
  62. package/lib/cjs/Metadata/Format.js +68 -3
  63. package/lib/cjs/Metadata/Format.js.map +1 -1
  64. package/lib/cjs/Metadata/InvertedUnit.d.ts +8 -3
  65. package/lib/cjs/Metadata/InvertedUnit.d.ts.map +1 -1
  66. package/lib/cjs/Metadata/InvertedUnit.js +17 -6
  67. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  68. package/lib/cjs/Metadata/KindOfQuantity.d.ts +14 -3
  69. package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
  70. package/lib/cjs/Metadata/KindOfQuantity.js +43 -18
  71. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  72. package/lib/cjs/Metadata/Mixin.d.ts +15 -1
  73. package/lib/cjs/Metadata/Mixin.d.ts.map +1 -1
  74. package/lib/cjs/Metadata/Mixin.js +23 -2
  75. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  76. package/lib/cjs/Metadata/OverrideFormat.js +9 -0
  77. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  78. package/lib/cjs/Metadata/Phenomenon.d.ts +14 -1
  79. package/lib/cjs/Metadata/Phenomenon.d.ts.map +1 -1
  80. package/lib/cjs/Metadata/Phenomenon.js +22 -1
  81. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  82. package/lib/cjs/Metadata/Property.d.ts +5 -1
  83. package/lib/cjs/Metadata/Property.d.ts.map +1 -1
  84. package/lib/cjs/Metadata/Property.js +83 -28
  85. package/lib/cjs/Metadata/Property.js.map +1 -1
  86. package/lib/cjs/Metadata/PropertyCategory.d.ts +14 -1
  87. package/lib/cjs/Metadata/PropertyCategory.d.ts.map +1 -1
  88. package/lib/cjs/Metadata/PropertyCategory.js +21 -1
  89. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  90. package/lib/cjs/Metadata/RelationshipClass.d.ts +15 -2
  91. package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
  92. package/lib/cjs/Metadata/RelationshipClass.js +47 -10
  93. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  94. package/lib/cjs/Metadata/Schema.d.ts +116 -11
  95. package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
  96. package/lib/cjs/Metadata/Schema.js +135 -33
  97. package/lib/cjs/Metadata/Schema.js.map +1 -1
  98. package/lib/cjs/Metadata/SchemaItem.d.ts +11 -2
  99. package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
  100. package/lib/cjs/Metadata/SchemaItem.js +10 -0
  101. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  102. package/lib/cjs/Metadata/Unit.d.ts +8 -1
  103. package/lib/cjs/Metadata/Unit.d.ts.map +1 -1
  104. package/lib/cjs/Metadata/Unit.js +21 -3
  105. package/lib/cjs/Metadata/Unit.js.map +1 -1
  106. package/lib/cjs/Metadata/UnitSystem.d.ts +14 -3
  107. package/lib/cjs/Metadata/UnitSystem.d.ts.map +1 -1
  108. package/lib/cjs/Metadata/UnitSystem.js +21 -3
  109. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  110. package/lib/cjs/PropertyTypes.js.map +1 -1
  111. package/lib/cjs/SchemaJsonLocater.d.ts +3 -3
  112. package/lib/cjs/SchemaJsonLocater.d.ts.map +1 -1
  113. package/lib/cjs/SchemaJsonLocater.js +3 -3
  114. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  115. package/lib/cjs/SchemaKey.d.ts +7 -1
  116. package/lib/cjs/SchemaKey.d.ts.map +1 -1
  117. package/lib/cjs/SchemaKey.js +13 -3
  118. package/lib/cjs/SchemaKey.js.map +1 -1
  119. package/lib/cjs/SchemaLoader.d.ts +2 -2
  120. package/lib/cjs/SchemaLoader.d.ts.map +1 -1
  121. package/lib/cjs/SchemaLoader.js +1 -0
  122. package/lib/cjs/SchemaLoader.js.map +1 -1
  123. package/lib/cjs/SchemaPartVisitorDelegate.js +1 -0
  124. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  125. package/lib/cjs/UnitConversion/Graph.js +69 -65
  126. package/lib/cjs/UnitConversion/Graph.js.map +1 -1
  127. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  128. package/lib/cjs/UnitConversion/UnitConversion.d.ts +1 -1
  129. package/lib/cjs/UnitConversion/UnitConversion.d.ts.map +1 -1
  130. package/lib/cjs/UnitConversion/UnitConversion.js +9 -7
  131. package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
  132. package/lib/cjs/UnitConversion/UnitConverter.js +2 -0
  133. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  134. package/lib/cjs/UnitConversion/UnitTree.d.ts +2 -0
  135. package/lib/cjs/UnitConversion/UnitTree.d.ts.map +1 -1
  136. package/lib/cjs/UnitConversion/UnitTree.js +11 -1
  137. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  138. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  139. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +8 -9
  140. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  141. package/lib/cjs/Validation/SchemaWalker.d.ts +1 -1
  142. package/lib/cjs/Validation/SchemaWalker.d.ts.map +1 -1
  143. package/lib/cjs/Validation/SchemaWalker.js +6 -4
  144. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  145. package/lib/cjs/ecschema-metadata.d.ts +1 -1
  146. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  147. package/lib/cjs/ecschema-metadata.js.map +1 -1
  148. package/lib/cjs/utils/SchemaGraph.js +2 -3
  149. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  150. package/lib/esm/Constants.js +20 -20
  151. package/lib/esm/Constants.js.map +1 -1
  152. package/lib/esm/Context.d.ts +83 -34
  153. package/lib/esm/Context.d.ts.map +1 -1
  154. package/lib/esm/Context.js +71 -21
  155. package/lib/esm/Context.js.map +1 -1
  156. package/lib/esm/DelayedPromise.js +6 -4
  157. package/lib/esm/DelayedPromise.js.map +1 -1
  158. package/lib/esm/Deserialization/AbstractParser.js +1 -0
  159. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  160. package/lib/esm/Deserialization/Helper.d.ts +3 -3
  161. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  162. package/lib/esm/Deserialization/Helper.js +8 -0
  163. package/lib/esm/Deserialization/Helper.js.map +1 -1
  164. package/lib/esm/Deserialization/JsonParser.js +3 -0
  165. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  166. package/lib/esm/Deserialization/JsonProps.d.ts +3 -0
  167. package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
  168. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  169. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  170. package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
  171. package/lib/esm/Deserialization/XmlParser.js +11 -3
  172. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  173. package/lib/esm/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  174. package/lib/esm/Deserialization/XmlSerializationUtils.js +2 -6
  175. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  176. package/lib/esm/ECName.js +1 -0
  177. package/lib/esm/ECName.js.map +1 -1
  178. package/lib/esm/ECObjects.d.ts +21 -1
  179. package/lib/esm/ECObjects.d.ts.map +1 -1
  180. package/lib/esm/ECObjects.js +31 -1
  181. package/lib/esm/ECObjects.js.map +1 -1
  182. package/lib/esm/Exception.js +1 -0
  183. package/lib/esm/Exception.js.map +1 -1
  184. package/lib/esm/Interfaces.d.ts +10 -3
  185. package/lib/esm/Interfaces.d.ts.map +1 -1
  186. package/lib/esm/Interfaces.js.map +1 -1
  187. package/lib/esm/Metadata/Class.d.ts +75 -16
  188. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  189. package/lib/esm/Metadata/Class.js +169 -47
  190. package/lib/esm/Metadata/Class.js.map +1 -1
  191. package/lib/esm/Metadata/Constant.d.ts +14 -1
  192. package/lib/esm/Metadata/Constant.d.ts.map +1 -1
  193. package/lib/esm/Metadata/Constant.js +27 -2
  194. package/lib/esm/Metadata/Constant.js.map +1 -1
  195. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  196. package/lib/esm/Metadata/CustomAttributeClass.d.ts +16 -4
  197. package/lib/esm/Metadata/CustomAttributeClass.d.ts.map +1 -1
  198. package/lib/esm/Metadata/CustomAttributeClass.js +22 -4
  199. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  200. package/lib/esm/Metadata/EntityClass.d.ts +20 -8
  201. package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
  202. package/lib/esm/Metadata/EntityClass.js +42 -22
  203. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  204. package/lib/esm/Metadata/Enumeration.d.ts +14 -1
  205. package/lib/esm/Metadata/Enumeration.d.ts.map +1 -1
  206. package/lib/esm/Metadata/Enumeration.js +22 -1
  207. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  208. package/lib/esm/Metadata/Format.d.ts +41 -1
  209. package/lib/esm/Metadata/Format.d.ts.map +1 -1
  210. package/lib/esm/Metadata/Format.js +68 -3
  211. package/lib/esm/Metadata/Format.js.map +1 -1
  212. package/lib/esm/Metadata/InvertedUnit.d.ts +8 -3
  213. package/lib/esm/Metadata/InvertedUnit.d.ts.map +1 -1
  214. package/lib/esm/Metadata/InvertedUnit.js +17 -6
  215. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  216. package/lib/esm/Metadata/KindOfQuantity.d.ts +14 -3
  217. package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
  218. package/lib/esm/Metadata/KindOfQuantity.js +43 -18
  219. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  220. package/lib/esm/Metadata/Mixin.d.ts +15 -1
  221. package/lib/esm/Metadata/Mixin.d.ts.map +1 -1
  222. package/lib/esm/Metadata/Mixin.js +24 -3
  223. package/lib/esm/Metadata/Mixin.js.map +1 -1
  224. package/lib/esm/Metadata/OverrideFormat.js +9 -0
  225. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  226. package/lib/esm/Metadata/Phenomenon.d.ts +14 -1
  227. package/lib/esm/Metadata/Phenomenon.d.ts.map +1 -1
  228. package/lib/esm/Metadata/Phenomenon.js +22 -1
  229. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  230. package/lib/esm/Metadata/Property.d.ts +5 -1
  231. package/lib/esm/Metadata/Property.d.ts.map +1 -1
  232. package/lib/esm/Metadata/Property.js +84 -29
  233. package/lib/esm/Metadata/Property.js.map +1 -1
  234. package/lib/esm/Metadata/PropertyCategory.d.ts +14 -1
  235. package/lib/esm/Metadata/PropertyCategory.d.ts.map +1 -1
  236. package/lib/esm/Metadata/PropertyCategory.js +21 -1
  237. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  238. package/lib/esm/Metadata/RelationshipClass.d.ts +15 -2
  239. package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
  240. package/lib/esm/Metadata/RelationshipClass.js +48 -11
  241. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  242. package/lib/esm/Metadata/Schema.d.ts +116 -11
  243. package/lib/esm/Metadata/Schema.d.ts.map +1 -1
  244. package/lib/esm/Metadata/Schema.js +135 -33
  245. package/lib/esm/Metadata/Schema.js.map +1 -1
  246. package/lib/esm/Metadata/SchemaItem.d.ts +11 -2
  247. package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
  248. package/lib/esm/Metadata/SchemaItem.js +11 -1
  249. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  250. package/lib/esm/Metadata/Unit.d.ts +8 -1
  251. package/lib/esm/Metadata/Unit.d.ts.map +1 -1
  252. package/lib/esm/Metadata/Unit.js +21 -3
  253. package/lib/esm/Metadata/Unit.js.map +1 -1
  254. package/lib/esm/Metadata/UnitSystem.d.ts +14 -3
  255. package/lib/esm/Metadata/UnitSystem.d.ts.map +1 -1
  256. package/lib/esm/Metadata/UnitSystem.js +21 -3
  257. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  258. package/lib/esm/PropertyTypes.js.map +1 -1
  259. package/lib/esm/SchemaJsonLocater.d.ts +3 -3
  260. package/lib/esm/SchemaJsonLocater.d.ts.map +1 -1
  261. package/lib/esm/SchemaJsonLocater.js +3 -3
  262. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  263. package/lib/esm/SchemaKey.d.ts +7 -1
  264. package/lib/esm/SchemaKey.d.ts.map +1 -1
  265. package/lib/esm/SchemaKey.js +13 -3
  266. package/lib/esm/SchemaKey.js.map +1 -1
  267. package/lib/esm/SchemaLoader.d.ts +2 -2
  268. package/lib/esm/SchemaLoader.d.ts.map +1 -1
  269. package/lib/esm/SchemaLoader.js +1 -0
  270. package/lib/esm/SchemaLoader.js.map +1 -1
  271. package/lib/esm/SchemaPartVisitorDelegate.js +1 -0
  272. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  273. package/lib/esm/UnitConversion/Graph.js +69 -65
  274. package/lib/esm/UnitConversion/Graph.js.map +1 -1
  275. package/lib/esm/UnitConversion/Parser.js.map +1 -1
  276. package/lib/esm/UnitConversion/UnitConversion.d.ts +1 -1
  277. package/lib/esm/UnitConversion/UnitConversion.d.ts.map +1 -1
  278. package/lib/esm/UnitConversion/UnitConversion.js +9 -7
  279. package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
  280. package/lib/esm/UnitConversion/UnitConverter.js +2 -0
  281. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  282. package/lib/esm/UnitConversion/UnitTree.d.ts +2 -0
  283. package/lib/esm/UnitConversion/UnitTree.d.ts.map +1 -1
  284. package/lib/esm/UnitConversion/UnitTree.js +11 -1
  285. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  286. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  287. package/lib/esm/UnitProvider/SchemaUnitProvider.js +8 -9
  288. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  289. package/lib/esm/Validation/SchemaWalker.d.ts +1 -1
  290. package/lib/esm/Validation/SchemaWalker.d.ts.map +1 -1
  291. package/lib/esm/Validation/SchemaWalker.js +6 -4
  292. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  293. package/lib/esm/ecschema-metadata.d.ts +1 -1
  294. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  295. package/lib/esm/ecschema-metadata.js.map +1 -1
  296. package/lib/esm/utils/SchemaGraph.js +2 -3
  297. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  298. package/package.json +14 -14
@@ -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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.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 Metadata\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\r\nimport { ClassProps } from \"../Deserialization/JsonProps\";\r\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\r\nimport { classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { AnyClass, LazyLoadedECClass } from \"../Interfaces\";\r\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\r\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\r\nimport { Enumeration } from \"./Enumeration\";\r\nimport {\r\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\r\n} from \"./Property\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\r\n\r\n/**\r\n * A common abstract class for all of the ECClass types.\r\n * @beta\r\n */\r\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\r\n protected _modifier: ECClassModifier;\r\n protected _baseClass?: LazyLoadedECClass;\r\n protected _properties?: Map<string, Property>;\r\n private _customAttributes?: Map<string, CustomAttribute>;\r\n private _mergedPropertyCache?: Property[];\r\n\r\n public get modifier() { return this._modifier; }\r\n public get baseClass(): LazyLoadedECClass | undefined { return this._baseClass; }\r\n public set baseClass(baseClass: LazyLoadedECClass | undefined) { this._baseClass = baseClass; }\r\n public get properties(): IterableIterator<Property> | undefined { return this._properties?.values(); }\r\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\r\n\r\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\r\n super(schema, name);\r\n\r\n if (modifier)\r\n this._modifier = modifier;\r\n else\r\n this._modifier = ECClassModifier.None;\r\n }\r\n\r\n /**\r\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\r\n * @param prop The property to add.\r\n * @return The property that was added.\r\n */\r\n protected addProperty<T extends Property>(prop: T): T {\r\n if (!this._properties)\r\n this._properties = new Map<string, Property>();\r\n\r\n this._properties.set(prop.name.toUpperCase(), prop);\r\n return prop;\r\n }\r\n\r\n /**\r\n * Deletes a property from within this class.\r\n * @param name The property name to delete, lookup is case-insensitive\r\n * @alpha\r\n */\r\n protected async deleteProperty(name: string): Promise<void> {\r\n if (this._properties) {\r\n const property = await this.getProperty(name);\r\n if (property)\r\n this._properties.delete(name.toUpperCase());\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a property from within this class.\r\n * @param name The property name to delete, lookup is case-insensitive\r\n * @alpha\r\n */\r\n protected deletePropertySync(name: string): void {\r\n if (this._properties) {\r\n const property = this.getPropertySync(name);\r\n if (property)\r\n this._properties.delete(name.toUpperCase());\r\n }\r\n }\r\n\r\n public getBaseClassSync(): ECClass | undefined {\r\n if (!this.baseClass) {\r\n return undefined;\r\n }\r\n\r\n return this.schema.lookupItemSync<ECClass>(this.baseClass);\r\n }\r\n\r\n /**\r\n * Searches, case-insensitive, for a local ECProperty with the name provided.\r\n * @param name\r\n */\r\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\r\n if (this._properties) {\r\n const upperKey = name.toUpperCase();\r\n const property = this._properties.get(upperKey);\r\n if (property)\r\n return property;\r\n }\r\n\r\n if (!includeInherited) {\r\n return undefined;\r\n }\r\n\r\n return this.getInheritedProperty(name);\r\n }\r\n\r\n /**\r\n * Searches, case-insensitive, for a local ECProperty with the name provided.\r\n * @param name\r\n */\r\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\r\n if (this._properties) {\r\n const upperKey = name.toUpperCase();\r\n const property = this._properties.get(upperKey);\r\n if (property)\r\n return property;\r\n }\r\n\r\n if (!includeInherited) {\r\n return undefined;\r\n }\r\n\r\n return this.getInheritedPropertySync(name);\r\n }\r\n\r\n /**\r\n * Searches the base class, if one exists, for the property with the name provided.\r\n * @param name The name of the inherited property to find.\r\n */\r\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\r\n if (this.baseClass) {\r\n const baseClassObj = await this.baseClass;\r\n return baseClassObj.getProperty(name, true);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Searches the base class, if one exists, for the property with the name provided.\r\n * @param name The name of the inherited property to find.\r\n */\r\n public getInheritedPropertySync(name: string): Property | undefined {\r\n const baseClassObj = this.getBaseClassSync();\r\n if (baseClassObj)\r\n return baseClassObj.getPropertySync(name, true);\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Creates a PrimitiveECProperty.\r\n * @param name The name of property to create.\r\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\r\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\r\n */\r\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\r\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\r\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\r\n if (await this.getProperty(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\r\n if (typeof (propType) === \"number\")\r\n return this.addProperty(new PrimitiveProperty(this, name, propType));\r\n\r\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\r\n }\r\n\r\n /**\r\n * Creates a PrimitiveECProperty.\r\n * @param name The name of property to create.\r\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\r\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\r\n */\r\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\r\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\r\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\r\n if (this.getPropertySync(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\r\n if (typeof (propType) === \"number\")\r\n return this.addProperty(new PrimitiveProperty(this, name, propType));\r\n\r\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\r\n }\r\n\r\n /**\r\n * Creates a PrimitiveArrayECProperty.\r\n * @param name The name of property to create.\r\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\r\n */\r\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\r\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\r\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\r\n if (await this.getProperty(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\r\n if (typeof (propType) === \"number\")\r\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\r\n\r\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\r\n }\r\n\r\n /**\r\n * Creates a PrimitiveArrayECProperty.\r\n * @param name The name of property to create.\r\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\r\n */\r\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\r\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\r\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\r\n if (this.getPropertySync(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\r\n if (typeof (propType) === \"number\")\r\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\r\n\r\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\r\n }\r\n\r\n /**\r\n *\r\n * @param name The name of property to create.\r\n * @param structType The struct type of property to create.\r\n */\r\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\r\n if (await this.getProperty(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\r\n }\r\n\r\n /**\r\n *\r\n * @param name The name of property to create.\r\n * @param structType The struct type of property to create.\r\n */\r\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\r\n if (this.getPropertySync(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\r\n }\r\n\r\n /**\r\n *\r\n * @param name\r\n * @param type\r\n */\r\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\r\n if (await this.getProperty(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\r\n }\r\n\r\n /**\r\n *\r\n * @param name\r\n * @param type\r\n */\r\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\r\n if (this.getPropertySync(name))\r\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\r\n\r\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\r\n }\r\n\r\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\r\n let correctType: StructClass | undefined;\r\n if (typeof (structType) === \"string\") {\r\n correctType = await schema.lookupItem<StructClass>(structType);\r\n } else\r\n correctType = structType;\r\n\r\n if (!correctType)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\r\n\r\n return correctType;\r\n }\r\n\r\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\r\n let correctType: StructClass | undefined;\r\n if (typeof (structType) === \"string\") {\r\n correctType = schema.lookupItemSync<StructClass>(structType);\r\n } else\r\n correctType = structType;\r\n\r\n if (!correctType)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\r\n\r\n return correctType;\r\n }\r\n\r\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\r\n if (primitiveType === undefined)\r\n return PrimitiveType.Integer;\r\n\r\n if (typeof (primitiveType) === \"string\") {\r\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\r\n if (!resolvedType) {\r\n resolvedType = await schema.lookupItem<Enumeration>(primitiveType);\r\n }\r\n\r\n if (resolvedType === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\r\n\r\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\r\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\r\n\r\n return resolvedType;\r\n }\r\n\r\n return primitiveType;\r\n }\r\n\r\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\r\n if (primitiveType === undefined)\r\n return PrimitiveType.Integer;\r\n\r\n if (typeof (primitiveType) === \"string\") {\r\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\r\n if (!resolvedType) {\r\n resolvedType = schema.lookupItemSync<Enumeration>(primitiveType);\r\n }\r\n\r\n if (resolvedType === undefined)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\r\n\r\n return resolvedType;\r\n }\r\n\r\n return primitiveType;\r\n }\r\n\r\n /**\r\n * Save this Classes properties to an object for serializing to JSON.\r\n * @param standalone Serialization includes only this object (as opposed to the full schema).\r\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\r\n */\r\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\r\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\r\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\r\n schemaJson.modifier = classModifierToString(this.modifier);\r\n if (this.baseClass !== undefined)\r\n schemaJson.baseClass = this.baseClass.fullName;\r\n if (this._properties !== undefined && this._properties.size > 0)\r\n schemaJson.properties = [...this.properties!].map((prop) => prop.toJSON());\r\n\r\n const customAttributes = serializeCustomAttributes(this.customAttributes);\r\n if (customAttributes !== undefined)\r\n schemaJson.customAttributes = customAttributes;\r\n return schemaJson as ClassProps;\r\n }\r\n\r\n /** @internal */\r\n public override async toXml(schemaXml: Document): Promise<Element> {\r\n const itemElement = await super.toXml(schemaXml);\r\n\r\n if (undefined !== this.modifier)\r\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\r\n\r\n if (undefined !== this.baseClass) {\r\n const baseClass = await this.baseClass;\r\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\r\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\r\n baseClassElement.textContent = baseClassName;\r\n itemElement.appendChild(baseClassElement);\r\n }\r\n\r\n if (undefined !== this.properties) {\r\n for (const prop of this.properties) {\r\n const propXml = await prop.toXml(schemaXml);\r\n itemElement.appendChild(propXml);\r\n }\r\n }\r\n\r\n if (this._customAttributes) {\r\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\r\n for (const [name, attribute] of this._customAttributes) {\r\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\r\n caContainerElement.appendChild(caElement);\r\n }\r\n itemElement.appendChild(caContainerElement);\r\n }\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(classProps: ClassProps) {\r\n super.fromJSONSync(classProps);\r\n\r\n if (undefined !== classProps.modifier) {\r\n const modifier = parseClassModifier(classProps.modifier);\r\n if (undefined === modifier) {\r\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion} as ECSpecVersion))\r\n this._modifier = ECClassModifier.None;\r\n else\r\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\r\n } else {\r\n this._modifier = modifier;\r\n }\r\n }\r\n\r\n if (undefined !== classProps.baseClass) {\r\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\r\n if (!ecClassSchemaItemKey)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\r\n this._baseClass = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\r\n async () => {\r\n const baseClass = await this.schema.lookupItem<ECClass>(ecClassSchemaItemKey);\r\n if (undefined === baseClass)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\r\n return baseClass;\r\n });\r\n }\r\n }\r\n\r\n public override async fromJSON(classProps: ClassProps): Promise<void> {\r\n this.fromJSONSync(classProps);\r\n }\r\n\r\n protected addCustomAttribute(customAttribute: CustomAttribute) {\r\n if (!this._customAttributes)\r\n this._customAttributes = new Map<string, CustomAttribute>();\r\n\r\n this._customAttributes.set(customAttribute.className, customAttribute);\r\n }\r\n\r\n /**\r\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\r\n * This is essentially a depth-first traversal through the inheritance tree.\r\n */\r\n public async *getAllBaseClasses(): AsyncIterableIterator<ECClass> {\r\n const baseClasses: ECClass[] = [this];\r\n const addBaseClasses = async (ecClass: AnyClass) => {\r\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\r\n for (let i = (ecClass).mixins.length - 1; i >= 0; i--) {\r\n baseClasses.push(await (ecClass).mixins[i]);\r\n }\r\n }\r\n\r\n if (ecClass.baseClass)\r\n baseClasses.push(await ecClass.baseClass);\r\n };\r\n\r\n while (baseClasses.length > 0) {\r\n const baseClass = baseClasses.pop() as AnyClass;\r\n await addBaseClasses(baseClass);\r\n if (baseClass !== this)\r\n yield baseClass as ECClass;\r\n }\r\n }\r\n\r\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\r\n const baseClasses: ECClass[] = [this];\r\n const addBaseClasses = (ecClass: AnyClass) => {\r\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\r\n for (const m of Array.from(ecClass.getMixinsSync()).reverse()) {\r\n baseClasses.push(m);\r\n }\r\n }\r\n\r\n const baseClass = ecClass.getBaseClassSync();\r\n if (baseClass)\r\n baseClasses.push(baseClass);\r\n };\r\n\r\n while (baseClasses.length > 0) {\r\n const baseClass = baseClasses.pop() as AnyClass;\r\n addBaseClasses(baseClass);\r\n if (baseClass !== this)\r\n yield baseClass;\r\n }\r\n }\r\n\r\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Property[], overwriteExisting: boolean) {\r\n for (const property of propertiesToMerge) {\r\n const upperCaseName = property.name.toUpperCase();\r\n const existing = existingValues.get(upperCaseName);\r\n if (existing !== undefined) {\r\n if (overwriteExisting) {\r\n target[existing] = property;\r\n }\r\n } else {\r\n existingValues.set(upperCaseName, target.length);\r\n target.push(property);\r\n }\r\n }\r\n }\r\n\r\n protected async buildPropertyCache(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): Promise<void> {\r\n if (!existingValues) {\r\n existingValues = new Map<string, number>();\r\n }\r\n\r\n if (this.baseClass) {\r\n ECClass.mergeProperties(result, existingValues, await (await this.baseClass).getProperties(resetBaseCaches), false);\r\n }\r\n\r\n if (!this.properties)\r\n return;\r\n\r\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\r\n }\r\n\r\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>, resetBaseCaches: boolean = false): void {\r\n if (!existingValues) {\r\n existingValues = new Map<string, number>();\r\n }\r\n\r\n const baseClass = this.getBaseClassSync();\r\n if (baseClass) {\r\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(resetBaseCaches), false);\r\n }\r\n\r\n if (!this.properties)\r\n return;\r\n\r\n ECClass.mergeProperties(result, existingValues, [...this.properties], true);\r\n }\r\n\r\n /**\r\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\r\n * Since this is an expensive operation, results will be cached after first call.\r\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\r\n */\r\n public getPropertiesSync(resetCache: boolean = false): Property[] {\r\n if (!this._mergedPropertyCache || resetCache) {\r\n this._mergedPropertyCache = [];\r\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined, resetCache);\r\n }\r\n\r\n return this._mergedPropertyCache;\r\n }\r\n\r\n /**\r\n * Iterates all properties, including the ones merged from base classes and mixins. To obtain only local properties, use the 'properties' field.\r\n * Since this is an expensive operation, results will be cached after first call.\r\n * @param resetCache if true, any previously cached results will be dropped and cache will be rebuilt\r\n */\r\n public async getProperties(resetCache: boolean = false): Promise<Property[]> {\r\n if (!this._mergedPropertyCache || resetCache) {\r\n this._mergedPropertyCache = [];\r\n await this.buildPropertyCache(this._mergedPropertyCache, undefined, resetCache);\r\n }\r\n\r\n return this._mergedPropertyCache;\r\n }\r\n\r\n /**\r\n * Retrieve all custom attributes in the current class and its bases\r\n * This is the async version of getCustomAttributesSync()\r\n */\r\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\r\n return this.getCustomAttributesSync();\r\n }\r\n\r\n /**\r\n * Retrieve all custom attributes in the current class and its bases.\r\n */\r\n public getCustomAttributesSync(): CustomAttributeSet {\r\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\r\n if (undefined === customAttributes) {\r\n customAttributes = new Map<string, CustomAttribute>();\r\n }\r\n\r\n this.traverseBaseClassesSync((ecClass: ECClass) => {\r\n if (undefined === ecClass.customAttributes)\r\n return false;\r\n\r\n for (const [className, customAttribute] of ecClass.customAttributes) {\r\n if (customAttributes.has(className))\r\n continue;\r\n customAttributes.set(className, customAttribute);\r\n }\r\n\r\n return false;\r\n });\r\n\r\n return customAttributes;\r\n }\r\n\r\n /**\r\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\r\n * function for each base class encountered.\r\n * @param callback The function to call for each base class in the hierarchy.\r\n * @param arg An argument that will be passed as the second parameter to the callback function.\r\n */\r\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\r\n for await (const baseClass of this.getAllBaseClasses()) {\r\n if (callback(baseClass, arg))\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\r\n * function for each base class encountered.\r\n * @param callback The function to call for each base class in the hierarchy.\r\n * @param arg An argument that will be passed as the second parameter to the callback function.\r\n */\r\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\r\n const baseClasses = this.getAllBaseClassesSync();\r\n if (!baseClasses)\r\n return false;\r\n\r\n for (const baseClass of baseClasses) {\r\n if (callback(baseClass, arg))\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Indicates if the targetClass is of this type.\r\n * @param targetClass The ECClass or ECClass name to check.\r\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\r\n */\r\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\r\n public async is(targetClass: ECClass): Promise<boolean>;\r\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\r\n if (schemaName !== undefined) {\r\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\r\n\r\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\r\n if (SchemaItem.equalByKey(this, key))\r\n return true;\r\n\r\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\r\n } else {\r\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\r\n\r\n if (SchemaItem.equalByKey(this, targetClass))\r\n return true;\r\n\r\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\r\n }\r\n }\r\n\r\n /**\r\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\r\n * @param targetClass The class to check.\r\n */\r\n public isSync(targetClass: ECClass): boolean {\r\n if (SchemaItem.equalByKey(this, targetClass))\r\n return true;\r\n\r\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static isECClass(object: any): object is ECClass {\r\n if (!SchemaItem.isSchemaItem(object))\r\n return false;\r\n\r\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\r\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\r\n }\r\n\r\n /**\r\n * @alpha\r\n * A setter method for the ECClass modifier, used specifically for schema editing.\r\n * @param modifier\r\n */\r\n protected setModifier(modifier: ECClassModifier) {\r\n this._modifier = modifier;\r\n }\r\n}\r\n\r\n/**\r\n * A Typescript class representation of an ECStructClass.\r\n * @beta\r\n */\r\nexport class StructClass extends ECClass {\r\n public override readonly schemaItemType!: SchemaItemType.StructClass;\r\n\r\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\r\n super(schema, name, modifier);\r\n this.schemaItemType = SchemaItemType.StructClass;\r\n }\r\n}\r\n\r\n/**\r\n * @internal\r\n * An abstract class used for schema editing.\r\n */\r\nexport abstract class MutableStructClass extends StructClass {\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n\r\n/**\r\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\r\n * @internal\r\n */\r\nexport abstract class MutableClass extends ECClass {\r\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\r\n public abstract override setModifier(modifier: ECClassModifier): void;\r\n public abstract override setName(name: string): void;\r\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\r\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\r\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\r\n\r\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\r\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\r\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\r\n\r\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\r\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\r\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\r\n\r\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\r\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\r\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\r\n\r\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\r\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\r\n\r\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\r\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\r\n\r\n public abstract override deleteProperty(name: string): Promise<void>;\r\n public abstract override deletePropertySync(name: string): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"Class.js","sourceRoot":"","sources":["../../../src/Metadata/Class.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 Metadata\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { DelayedPromiseWithProps } from \"../DelayedPromise\";\nimport { ClassProps } from \"../Deserialization/JsonProps\";\nimport { XmlSerializationUtils } from \"../Deserialization/XmlSerializationUtils\";\nimport { AbstractSchemaItemType, classModifierToString, ECClassModifier, parseClassModifier, parsePrimitiveType, PrimitiveType, SchemaItemType, SupportedSchemaItemType } from \"../ECObjects\";\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\nimport { AnyClass, HasMixins, LazyLoadedECClass } from \"../Interfaces\";\nimport { SchemaItemKey, SchemaKey } from \"../SchemaKey\";\nimport { CustomAttribute, CustomAttributeContainerProps, CustomAttributeSet, serializeCustomAttributes } from \"./CustomAttribute\";\nimport { Enumeration } from \"./Enumeration\";\nimport {\n EnumerationArrayProperty, EnumerationProperty, PrimitiveArrayProperty, PrimitiveProperty, Property, StructArrayProperty, StructProperty,\n} from \"./Property\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\nimport { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\n\n/**\n * A common abstract class for all of the ECClass types.\n * @beta\n */\nexport abstract class ECClass extends SchemaItem implements CustomAttributeContainerProps {\n public static override get schemaItemType(): SupportedSchemaItemType { return AbstractSchemaItemType.Class; } // need this so getItem(\"name\", ECClass) in schema works\n protected _modifier: ECClassModifier;\n protected _baseClass?: LazyLoadedECClass;\n protected _derivedClasses?: Map<string, LazyLoadedECClass>;\n protected _properties?: Map<string, Property>;\n private _customAttributes?: Map<string, CustomAttribute>;\n private _mergedPropertyCache?: Property[];\n\n public get modifier() { return this._modifier; }\n public get customAttributes(): CustomAttributeSet | undefined { return this._customAttributes; }\n\n constructor(schema: Schema, name: string, modifier?: ECClassModifier) {\n super(schema, name);\n\n if (modifier)\n this._modifier = modifier;\n else\n this._modifier = ECClassModifier.None;\n }\n\n /**\n * Gets the base class if it exists, otherwise returns undefined.\n */\n public get baseClass(): LazyLoadedECClass | undefined {\n return this._baseClass;\n }\n\n /**\n * Sets the base class of the ECClass. Pass undefined to 'remove' the base class.\n */\n protected async setBaseClass(baseClass: LazyLoadedECClass | undefined) {\n const oldBaseClass = this._baseClass;\n this._baseClass = baseClass;\n\n if (baseClass)\n this.addDerivedClass(await baseClass, this);\n else if (oldBaseClass)\n this.removeDerivedClass(await oldBaseClass, this);\n }\n\n /**\n * Gets the derived classes belonging to this class.\n * @returns An array of ECClasses or undefined if no derived classes exist.\n */\n public async getDerivedClasses(): Promise<ECClass [] | undefined> {\n if (!this._derivedClasses || this._derivedClasses.size === 0)\n return undefined;\n\n return Array.from(await Promise.all(this._derivedClasses.values()));\n }\n\n /**\n * Convenience method for adding an already loaded ECProperty used by create*Property methods.\n * @param prop The property to add.\n * @return The property that was added.\n */\n protected addProperty<T extends Property>(prop: T): T {\n if (!this._properties)\n this._properties = new Map<string, Property>();\n\n this._properties.set(prop.name.toUpperCase(), prop);\n this.cleanCache();\n return prop;\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected async deleteProperty(name: string): Promise<void> {\n if (this._properties) {\n const property = await this.getProperty(name);\n if (property) {\n this._properties.delete(name.toUpperCase());\n this.cleanCache();\n }\n }\n }\n\n /**\n * Deletes a property from within this class.\n * @param name The property name to delete, lookup is case-insensitive\n * @alpha\n */\n protected deletePropertySync(name: string): void {\n if (this._properties) {\n const property = this.getPropertySync(name);\n if (property) {\n this._properties.delete(name.toUpperCase());\n this.cleanCache();\n }\n }\n }\n\n public getBaseClassSync(): ECClass | undefined {\n if (!this.baseClass) {\n return undefined;\n }\n\n return this.schema.lookupItemSync(this.baseClass, ECClass);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public async getProperty(name: string, includeInherited: boolean = false): Promise<Property | undefined> {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedProperty(name);\n }\n\n /**\n * Searches, case-insensitive, for a local ECProperty with the name provided.\n * @param name\n */\n public getPropertySync(name: string, includeInherited: boolean = false): Property | undefined {\n if (this._properties) {\n const upperKey = name.toUpperCase();\n const property = this._properties.get(upperKey);\n if (property)\n return property;\n }\n\n if (!includeInherited) {\n return undefined;\n }\n\n return this.getInheritedPropertySync(name);\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public async getInheritedProperty(name: string): Promise<Property | undefined> {\n if (this.baseClass) {\n const baseClassObj = await this.baseClass;\n return baseClassObj.getProperty(name, true);\n }\n\n return undefined;\n }\n\n /**\n * Searches the base class, if one exists, for the property with the name provided.\n * @param name The name of the inherited property to find.\n */\n public getInheritedPropertySync(name: string): Property | undefined {\n const baseClassObj = this.getBaseClassSync();\n if (baseClassObj)\n return baseClassObj.getPropertySync(name, true);\n\n return undefined;\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected async createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n protected async createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n * @throws ECObjectsStatus DuplicateProperty: thrown if a property with the same name already exists in the class.\n */\n protected createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n protected createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n protected createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveProperty(this, name, propType));\n\n return this.addProperty(new EnumerationProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected async createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n protected async createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = await this.loadPrimitiveType(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n * Creates a PrimitiveArrayECProperty.\n * @param name The name of property to create.\n * @param primitiveType The primitive type of property to create. If not provided the default is PrimitiveType.Integer\n */\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n protected createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n const propType = this.loadPrimitiveTypeSync(primitiveType, this.schema);\n if (typeof (propType) === \"number\")\n return this.addProperty(new PrimitiveArrayProperty(this, name, propType));\n\n return this.addProperty(new EnumerationArrayProperty(this, name, new DelayedPromiseWithProps(propType.key, async () => propType)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected async createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name The name of property to create.\n * @param structType The struct type of property to create.\n */\n protected createStructPropertySync(name: string, structType: string | StructClass): StructProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected async createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty> {\n if (await this.getProperty(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, await this.loadStructType(structType, this.schema)));\n }\n\n /**\n *\n * @param name\n * @param type\n */\n protected createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty {\n if (this.getPropertySync(name))\n throw new ECObjectsError(ECObjectsStatus.DuplicateProperty, `An ECProperty with the name ${name} already exists in the class ${this.name}.`);\n\n return this.addProperty(new StructArrayProperty(this, name, this.loadStructTypeSync(structType, this.schema)));\n }\n\n protected async loadStructType(structType: string | StructClass | undefined, schema: Schema): Promise<StructClass> {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = await schema.lookupItem(structType, StructClass);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected loadStructTypeSync(structType: string | StructClass | undefined, schema: Schema): StructClass {\n let correctType: StructClass | undefined;\n if (typeof (structType) === \"string\") {\n correctType = schema.lookupItemSync(structType, StructClass);\n } else\n correctType = structType;\n\n if (!correctType)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided Struct type, ${structType}, is not a valid StructClass.`);\n\n return correctType;\n }\n\n protected async loadPrimitiveType(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): Promise<PrimitiveType | Enumeration> {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = await schema.lookupItem(primitiveType, Enumeration);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n // If resolvedType is a SchemaItem, make sure it is an Enumeration- if not, throw an error\n if (typeof (resolvedType) !== \"number\" && resolvedType.schemaItemType !== SchemaItemType.Enumeration)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n protected loadPrimitiveTypeSync(primitiveType: string | PrimitiveType | Enumeration | undefined, schema: Schema): PrimitiveType | Enumeration {\n if (primitiveType === undefined)\n return PrimitiveType.Integer;\n\n if (typeof (primitiveType) === \"string\") {\n let resolvedType: (PrimitiveType | Enumeration | undefined) = parsePrimitiveType(primitiveType);\n if (!resolvedType) {\n resolvedType = schema.lookupItemSync(primitiveType, Enumeration);\n }\n\n if (resolvedType === undefined)\n throw new ECObjectsError(ECObjectsStatus.InvalidType, `The provided primitive type, ${primitiveType}, is not a valid PrimitiveType or Enumeration.`);\n\n return resolvedType;\n }\n\n return primitiveType;\n }\n\n /**\n * Save this Classes properties to an object for serializing to JSON.\n * @param standalone Serialization includes only this object (as opposed to the full schema).\n * @param includeSchemaVersion Include the Schema's version information in the serialized object.\n */\n public override toJSON(standalone: boolean = false, includeSchemaVersion: boolean = false): ClassProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n const isMixin = SchemaItemType.Mixin === this.schemaItemType;\n const isRelationship = SchemaItemType.RelationshipClass === this.schemaItemType;\n if (!isMixin && (ECClassModifier.None !== this.modifier || isRelationship))\n schemaJson.modifier = classModifierToString(this.modifier);\n if (this.baseClass !== undefined)\n schemaJson.baseClass = this.baseClass.fullName;\n if (this._properties !== undefined && this._properties.size > 0)\n schemaJson.properties = [...this._properties.values()].map((prop) => prop.toJSON());\n\n const customAttributes = serializeCustomAttributes(this.customAttributes);\n if (customAttributes !== undefined)\n schemaJson.customAttributes = customAttributes;\n return schemaJson as ClassProps;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n\n if (undefined !== this.modifier)\n itemElement.setAttribute(\"modifier\", classModifierToString(this.modifier));\n\n if (undefined !== this.baseClass) {\n const baseClass = await this.baseClass;\n const baseClassElement = schemaXml.createElement(\"BaseClass\");\n const baseClassName = XmlSerializationUtils.createXmlTypedName(this.schema, baseClass.schema, baseClass.name);\n baseClassElement.textContent = baseClassName;\n itemElement.appendChild(baseClassElement);\n }\n\n if (undefined !== this._properties) {\n for (const prop of this._properties.values()) {\n const propXml = await prop.toXml(schemaXml);\n itemElement.appendChild(propXml);\n }\n }\n\n if (this._customAttributes) {\n const caContainerElement = schemaXml.createElement(\"ECCustomAttributes\");\n for (const [name, attribute] of this._customAttributes) {\n const caElement = await XmlSerializationUtils.writeCustomAttribute(name, attribute, schemaXml, this.schema);\n caContainerElement.appendChild(caElement);\n }\n itemElement.appendChild(caContainerElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(classProps: ClassProps) {\n super.fromJSONSync(classProps);\n\n if (undefined !== classProps.modifier) {\n const modifier = parseClassModifier(classProps.modifier);\n if (undefined === modifier) {\n if (SchemaReadHelper.isECSpecVersionNewer({ readVersion: classProps.originalECSpecMajorVersion, writeVersion: classProps.originalECSpecMinorVersion } as ECSpecVersion))\n this._modifier = ECClassModifier.None;\n else\n throw new ECObjectsError(ECObjectsStatus.InvalidModifier, `The string '${classProps.modifier}' is not a valid ECClassModifier.`);\n } else {\n this._modifier = modifier;\n }\n }\n\n if (undefined !== classProps.baseClass) {\n const ecClassSchemaItemKey = this.schema.getSchemaItemKey(classProps.baseClass);\n if (!ecClassSchemaItemKey)\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n\n const baseClass = this.schema.lookupItemSync(ecClassSchemaItemKey);\n\n let lazyBase: LazyLoadedECClass;\n if (!baseClass) {\n lazyBase = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n const baseItem = await this.schema.lookupItem(ecClassSchemaItemKey);\n if (undefined === baseItem || !ECClass.isECClass(baseItem))\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `Unable to locate the baseClass ${classProps.baseClass}.`);\n return baseItem;\n });\n } else {\n lazyBase = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(ecClassSchemaItemKey,\n async () => {\n return baseClass as ECClass;\n });\n }\n\n this._baseClass = lazyBase;\n\n if (!baseClass)\n return;\n\n this.addDerivedClass(baseClass as ECClass, this);\n }\n }\n\n public override async fromJSON(classProps: ClassProps): Promise<void> {\n this.fromJSONSync(classProps);\n }\n\n protected addCustomAttribute(customAttribute: CustomAttribute) {\n if (!this._customAttributes)\n this._customAttributes = new Map<string, CustomAttribute>();\n\n this._customAttributes.set(customAttribute.className, customAttribute);\n }\n\n /**\n * Iterates (recursively) over all base classes and mixins, in \"property override\" order.\n * This is essentially a depth-first traversal through the inheritance tree.\n */\n public async *getAllBaseClasses(): AsyncIterable<ECClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = async (ecClass: AnyClass) => {\n if (SchemaItemType.EntityClass === ecClass.schemaItemType) {\n for (let i = (ecClass as HasMixins).mixins.length - 1; i >= 0; i--) {\n baseClasses.push(await (ecClass as HasMixins).mixins[i]);\n }\n }\n\n if (ecClass.baseClass)\n baseClasses.push(await ecClass.baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n await addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass as ECClass;\n }\n }\n\n public *getAllBaseClassesSync(): Iterable<AnyClass> {\n const baseClasses: ECClass[] = [this];\n const addBaseClasses = (ecClass: AnyClass) => {\n if (ecClass.schemaItemType === SchemaItemType.EntityClass) { // cannot use EntityClass typeguard because of circular reference\n for (const m of Array.from((ecClass as HasMixins).getMixinsSync()).reverse()) {\n baseClasses.push(m);\n }\n }\n\n const baseClass = ecClass.getBaseClassSync();\n if (baseClass)\n baseClasses.push(baseClass);\n };\n\n while (baseClasses.length > 0) {\n const baseClass = baseClasses.pop() as AnyClass;\n addBaseClasses(baseClass);\n if (baseClass !== this)\n yield baseClass;\n }\n }\n\n protected static mergeProperties(target: Property[], existingValues: Map<string, number>, propertiesToMerge: Iterable<Property>, overwriteExisting: boolean) {\n for (const property of propertiesToMerge) {\n const upperCaseName = property.name.toUpperCase();\n const existing = existingValues.get(upperCaseName);\n if (existing !== undefined) {\n if (overwriteExisting) {\n target[existing] = property;\n }\n } else {\n existingValues.set(upperCaseName, target.length);\n target.push(property);\n }\n }\n }\n\n protected async buildPropertyCache(result: Property[], existingValues?: Map<string, number>): Promise<void> {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n if (this.baseClass) {\n const baseClass = await this.baseClass;\n if(baseClass) {\n ECClass.mergeProperties(result, existingValues, await baseClass.getProperties(), false);\n }\n }\n\n if (!this._properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this._properties.values()], true);\n }\n\n protected buildPropertyCacheSync(result: Property[], existingValues?: Map<string, number>): void {\n if (!existingValues) {\n existingValues = new Map<string, number>();\n }\n\n const baseClass = this.getBaseClassSync();\n if (baseClass) {\n ECClass.mergeProperties(result, existingValues, baseClass.getPropertiesSync(), false);\n }\n\n if (!this._properties)\n return;\n\n ECClass.mergeProperties(result, existingValues, [...this._properties.values()], true);\n }\n\n /**\n * Clears all caches on this object. This is called implicitly for this class,\n * but needs to be called if derived classes have changed.\n * @internal\n */\n public cleanCache() {\n this._mergedPropertyCache = undefined;\n }\n\n /**\n * Returns the properties on this class and its base classes.\n * Since this is an expensive operation, results will be cached after first call.\n * @param excludeInherited If true, only properties defined directly on this class will be returned. Defaults to false.\n * @returns An array of properties, empty array if none exist.\n */\n public getPropertiesSync(excludeInherited?: boolean): Iterable<Property> {\n if(excludeInherited) {\n return this._properties && this._properties.size > 0 ? this._properties.values() : [];\n }\n\n if (!this._mergedPropertyCache) {\n this._mergedPropertyCache = [];\n this.buildPropertyCacheSync(this._mergedPropertyCache, undefined);\n }\n\n return this._mergedPropertyCache;\n }\n\n /**\n * Quick way to check whether this class has any local properties without having to use the iterable\n */\n public get hasLocalProperties(): boolean {\n return this._properties !== undefined && this._properties.size > 0;\n }\n\n /**\n * Returns the properties on this class and its base classes.\n * Since this is an expensive operation, results will be cached after first call.\n * @param excludeInherited If true, only properties defined directly on this class will be returned.\n * @returns An array of properties, empty array if none exist.\n */\n public async getProperties(excludeInherited?: boolean): Promise<Iterable<Property>> {\n // At the moment we do not lazy load properties, so this is the same as getPropertiesSync\n return this.getPropertiesSync(excludeInherited);\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases\n * This is the async version of getCustomAttributesSync()\n */\n public async getCustomAttributes(): Promise<CustomAttributeSet> {\n return this.getCustomAttributesSync();\n }\n\n /**\n * Retrieve all custom attributes in the current class and its bases.\n */\n public getCustomAttributesSync(): CustomAttributeSet {\n let customAttributes: Map<string, CustomAttribute> | undefined = this._customAttributes;\n if (undefined === customAttributes) {\n customAttributes = new Map<string, CustomAttribute>();\n }\n\n this.traverseBaseClassesSync((ecClass: ECClass) => {\n if (undefined === ecClass.customAttributes)\n return false;\n\n for (const [className, customAttribute] of ecClass.customAttributes) {\n if (customAttributes.has(className))\n continue;\n customAttributes.set(className, customAttribute);\n }\n\n return false;\n });\n\n return customAttributes;\n }\n\n /**\n * Asynchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public async traverseBaseClasses(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): Promise<boolean> {\n for await (const baseClass of this.getAllBaseClasses()) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Synchronously traverses through the inheritance tree, using depth-first traversal, calling the given callback\n * function for each base class encountered.\n * @param callback The function to call for each base class in the hierarchy.\n * @param arg An argument that will be passed as the second parameter to the callback function.\n */\n public traverseBaseClassesSync(callback: (ecClass: ECClass, arg?: any) => boolean, arg?: any): boolean {\n const baseClasses = this.getAllBaseClassesSync();\n if (!baseClasses)\n return false;\n\n for (const baseClass of baseClasses) {\n if (callback(baseClass, arg))\n return true;\n }\n\n return false;\n }\n\n /**\n * Indicates if the targetClass is of this type.\n * @param targetClass The ECClass or ECClass name to check.\n * @param schemaName The schema name. Required if targetClass is the ECClass name.\n */\n public async is(targetClass: string, schemaName: string): Promise<boolean>;\n public async is(targetClass: ECClass): Promise<boolean>;\n public async is(targetClass: ECClass | string, schemaName?: string): Promise<boolean> {\n if (schemaName !== undefined) {\n assert(typeof (targetClass) === \"string\", \"Expected targetClass of type string because schemaName was specified\");\n\n const key = new SchemaItemKey(targetClass, new SchemaKey(schemaName));\n if (SchemaItem.equalByKey(this, key))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), key);\n } else {\n assert(ECClass.isECClass(targetClass), \"Expected targetClass to be of type ECClass\");\n\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClasses((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n }\n\n /**\n * A synchronous version of the [[ECClass.is]], indicating if the targetClass is of this type.\n * @param targetClass The class to check.\n */\n public isSync(targetClass: ECClass): boolean {\n if (SchemaItem.equalByKey(this, targetClass))\n return true;\n\n return this.traverseBaseClassesSync((thisSchemaItem, thatSchemaItemOrKey) => SchemaItem.equalByKey(thisSchemaItem, thatSchemaItemOrKey), targetClass);\n }\n\n /**\n * @internal\n */\n public static isECClass(object: any): object is ECClass {\n if (!SchemaItem.isSchemaItem(object))\n return false;\n\n return object.schemaItemType === SchemaItemType.EntityClass || object.schemaItemType === SchemaItemType.Mixin || object.schemaItemType === SchemaItemType.RelationshipClass ||\n object.schemaItemType === SchemaItemType.StructClass || object.schemaItemType === SchemaItemType.CustomAttributeClass;\n }\n\n /**\n * @alpha\n * A setter method for the ECClass modifier, used specifically for schema editing.\n * @param modifier\n */\n protected setModifier(modifier: ECClassModifier) {\n this._modifier = modifier;\n }\n\n /**\n * Adds an ECClass to the derived class collection. This method is only intended to update the local\n * cache of derived classes. For adding a class to the hierarchy, use the baseClass setter method.\n * @param prop The property to add.\n * @return The property that was added.\n */\n private addDerivedClass(baseClass: ECClass, derivedClass: ECClass) {\n if (!baseClass._derivedClasses)\n baseClass._derivedClasses = new Map<string, LazyLoadedECClass>();\n\n if (baseClass._derivedClasses.has(derivedClass.fullName))\n return;\n\n if (derivedClass.isSync(baseClass)) {\n const promise = new DelayedPromiseWithProps<SchemaItemKey, ECClass>(derivedClass.key, async () => derivedClass);\n baseClass._derivedClasses.set(derivedClass.fullName, promise);\n }\n }\n\n /**\n * Removes an ECClass from the derived class collection. This method is only intended to update the local\n * cache of derived classes. For updating the class hierarchy, use the baseClass setter method.\n * @param prop The property to add.\n * @return The property that was added.\n */\n private removeDerivedClass(baseClass: ECClass, derivedClass: ECClass) {\n if (!baseClass._derivedClasses)\n return;\n\n if (!baseClass._derivedClasses.has(derivedClass.fullName))\n return;\n\n baseClass._derivedClasses.delete(derivedClass.fullName);\n }\n}\n\n/**\n * A Typescript class representation of an ECStructClass.\n * @beta\n */\nexport class StructClass extends ECClass {\n /**\n * Get the type of item represented by this instance\n * @beta\n */\n public override readonly schemaItemType = StructClass.schemaItemType;\n\n /**\n * Get the type of item represented by this class\n * @beta\n */\n public static override get schemaItemType() { return SchemaItemType.StructClass; }\n /**\n * Type guard to check if the SchemaItem is of type StructClass.\n * @param item The SchemaItem to check.\n * @returns True if the item is a StructClass, false otherwise.\n */\n public static isStructClass(item?: SchemaItem): item is StructClass {\n if (item && item.schemaItemType === SchemaItemType.StructClass)\n return true;\n\n return false;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type StructClass.\n * @param item The SchemaItem to check.\n * @returns The item cast to StructClass if it is a StructClass, undefined otherwise.\n */\n public static assertIsStructClass(item?: SchemaItem): asserts item is StructClass {\n if (!this.isStructClass(item))\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.StructClass}' (StructClass)`);\n }\n}\n\n/**\n * @internal\n * An abstract class used for schema editing.\n */\nexport abstract class MutableStructClass extends StructClass {\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n\n/**\n * Hackish approach that works like a \"friend class\" so we can access protected members without making them public.\n * @internal\n */\nexport abstract class MutableClass extends ECClass {\n public abstract override setBaseClass(baseClass: LazyLoadedECClass | undefined): Promise<void>;\n public abstract override addCustomAttribute(customAttribute: CustomAttribute): void;\n public abstract override setModifier(modifier: ECClassModifier): void;\n public abstract override setName(name: string): void;\n public abstract override createPrimitiveProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType: Enumeration): Promise<EnumerationProperty>;\n public abstract override createPrimitiveProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitivePropertySync(name: string, primitiveType: PrimitiveType): PrimitiveProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType: Enumeration): EnumerationProperty;\n public abstract override createPrimitivePropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: PrimitiveType): Promise<PrimitiveArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType: Enumeration): Promise<EnumerationArrayProperty>;\n public abstract override createPrimitiveArrayProperty(name: string, primitiveType?: string | PrimitiveType | Enumeration): Promise<Property>;\n\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: PrimitiveType): PrimitiveArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType: Enumeration): EnumerationArrayProperty;\n public abstract override createPrimitiveArrayPropertySync(name: string, primitiveType?: string | PrimitiveType | Enumeration): Property;\n\n public abstract override createStructProperty(name: string, structType: string | StructClass): Promise<StructProperty>;\n public abstract override createStructPropertySync(name: string, structType: string | StructClass): StructProperty;\n\n public abstract override createStructArrayProperty(name: string, structType: string | StructClass): Promise<StructArrayProperty>;\n public abstract override createStructArrayPropertySync(name: string, structType: string | StructClass): StructArrayProperty;\n\n public abstract override deleteProperty(name: string): Promise<void>;\n public abstract override deletePropertySync(name: string): void;\n}\n"]}