@itwin/ecschema-metadata 5.0.0-dev.11 → 5.0.0-dev.111

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 (342) hide show
  1. package/CHANGELOG.md +73 -1
  2. package/lib/cjs/Constants.d.ts +8 -0
  3. package/lib/cjs/Constants.d.ts.map +1 -1
  4. package/lib/cjs/Constants.js +30 -21
  5. package/lib/cjs/Constants.js.map +1 -1
  6. package/lib/cjs/Context.d.ts +85 -36
  7. package/lib/cjs/Context.d.ts.map +1 -1
  8. package/lib/cjs/Context.js +79 -29
  9. package/lib/cjs/Context.js.map +1 -1
  10. package/lib/cjs/DelayedPromise.d.ts +9 -8
  11. package/lib/cjs/DelayedPromise.d.ts.map +1 -1
  12. package/lib/cjs/DelayedPromise.js +8 -6
  13. package/lib/cjs/DelayedPromise.js.map +1 -1
  14. package/lib/cjs/Deserialization/AbstractParser.js +1 -0
  15. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  16. package/lib/cjs/Deserialization/Helper.d.ts +3 -3
  17. package/lib/cjs/Deserialization/Helper.d.ts.map +1 -1
  18. package/lib/cjs/Deserialization/Helper.js +35 -26
  19. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  20. package/lib/cjs/Deserialization/JsonParser.js +153 -150
  21. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  22. package/lib/cjs/Deserialization/JsonProps.d.ts +47 -33
  23. package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
  24. package/lib/cjs/Deserialization/JsonProps.js +3 -3
  25. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  26. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  27. package/lib/cjs/Deserialization/XmlParser.d.ts.map +1 -1
  28. package/lib/cjs/Deserialization/XmlParser.js +60 -52
  29. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  30. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts +0 -5
  31. package/lib/cjs/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  32. package/lib/cjs/Deserialization/XmlSerializationUtils.js +8 -17
  33. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  34. package/lib/cjs/ECName.d.ts +2 -2
  35. package/lib/cjs/ECName.js +5 -4
  36. package/lib/cjs/ECName.js.map +1 -1
  37. package/lib/cjs/ECObjects.d.ts +41 -9
  38. package/lib/cjs/ECObjects.d.ts.map +1 -1
  39. package/lib/cjs/ECObjects.js +78 -24
  40. package/lib/cjs/ECObjects.js.map +1 -1
  41. package/lib/cjs/Exception.d.ts +4 -4
  42. package/lib/cjs/Exception.d.ts.map +1 -1
  43. package/lib/cjs/Exception.js +61 -60
  44. package/lib/cjs/Exception.js.map +1 -1
  45. package/lib/cjs/Interfaces.d.ts +35 -32
  46. package/lib/cjs/Interfaces.d.ts.map +1 -1
  47. package/lib/cjs/Interfaces.js.map +1 -1
  48. package/lib/cjs/Metadata/Class.d.ts +179 -32
  49. package/lib/cjs/Metadata/Class.d.ts.map +1 -1
  50. package/lib/cjs/Metadata/Class.js +290 -88
  51. package/lib/cjs/Metadata/Class.js.map +1 -1
  52. package/lib/cjs/Metadata/Constant.d.ts +26 -10
  53. package/lib/cjs/Metadata/Constant.d.ts.map +1 -1
  54. package/lib/cjs/Metadata/Constant.js +38 -10
  55. package/lib/cjs/Metadata/Constant.js.map +1 -1
  56. package/lib/cjs/Metadata/CustomAttribute.d.ts +2 -2
  57. package/lib/cjs/Metadata/CustomAttribute.d.ts.map +1 -1
  58. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  59. package/lib/cjs/Metadata/CustomAttributeClass.d.ts +21 -7
  60. package/lib/cjs/Metadata/CustomAttributeClass.d.ts.map +1 -1
  61. package/lib/cjs/Metadata/CustomAttributeClass.js +28 -8
  62. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  63. package/lib/cjs/Metadata/EntityClass.d.ts +40 -11
  64. package/lib/cjs/Metadata/EntityClass.d.ts.map +1 -1
  65. package/lib/cjs/Metadata/EntityClass.js +72 -34
  66. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  67. package/lib/cjs/Metadata/Enumeration.d.ts +30 -10
  68. package/lib/cjs/Metadata/Enumeration.d.ts.map +1 -1
  69. package/lib/cjs/Metadata/Enumeration.js +41 -13
  70. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  71. package/lib/cjs/Metadata/Format.d.ts +65 -17
  72. package/lib/cjs/Metadata/Format.d.ts.map +1 -1
  73. package/lib/cjs/Metadata/Format.js +107 -22
  74. package/lib/cjs/Metadata/Format.js.map +1 -1
  75. package/lib/cjs/Metadata/InvertedUnit.d.ts +19 -10
  76. package/lib/cjs/Metadata/InvertedUnit.d.ts.map +1 -1
  77. package/lib/cjs/Metadata/InvertedUnit.js +32 -15
  78. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  79. package/lib/cjs/Metadata/KindOfQuantity.d.ts +38 -18
  80. package/lib/cjs/Metadata/KindOfQuantity.d.ts.map +1 -1
  81. package/lib/cjs/Metadata/KindOfQuantity.js +90 -40
  82. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  83. package/lib/cjs/Metadata/Mixin.d.ts +31 -4
  84. package/lib/cjs/Metadata/Mixin.d.ts.map +1 -1
  85. package/lib/cjs/Metadata/Mixin.js +42 -8
  86. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  87. package/lib/cjs/Metadata/OverrideFormat.d.ts +12 -12
  88. package/lib/cjs/Metadata/OverrideFormat.d.ts.map +1 -1
  89. package/lib/cjs/Metadata/OverrideFormat.js +36 -19
  90. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  91. package/lib/cjs/Metadata/Phenomenon.d.ts +24 -3
  92. package/lib/cjs/Metadata/Phenomenon.d.ts.map +1 -1
  93. package/lib/cjs/Metadata/Phenomenon.js +32 -3
  94. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  95. package/lib/cjs/Metadata/Property.d.ts +47 -25
  96. package/lib/cjs/Metadata/Property.d.ts.map +1 -1
  97. package/lib/cjs/Metadata/Property.js +128 -49
  98. package/lib/cjs/Metadata/Property.js.map +1 -1
  99. package/lib/cjs/Metadata/PropertyCategory.d.ts +20 -4
  100. package/lib/cjs/Metadata/PropertyCategory.d.ts.map +1 -1
  101. package/lib/cjs/Metadata/PropertyCategory.js +31 -4
  102. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  103. package/lib/cjs/Metadata/RelationshipClass.d.ts +63 -27
  104. package/lib/cjs/Metadata/RelationshipClass.d.ts.map +1 -1
  105. package/lib/cjs/Metadata/RelationshipClass.js +100 -43
  106. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  107. package/lib/cjs/Metadata/Schema.d.ts +167 -41
  108. package/lib/cjs/Metadata/Schema.d.ts.map +1 -1
  109. package/lib/cjs/Metadata/Schema.js +211 -111
  110. package/lib/cjs/Metadata/Schema.js.map +1 -1
  111. package/lib/cjs/Metadata/SchemaItem.d.ts +19 -19
  112. package/lib/cjs/Metadata/SchemaItem.d.ts.map +1 -1
  113. package/lib/cjs/Metadata/SchemaItem.js +23 -21
  114. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  115. package/lib/cjs/Metadata/Unit.d.ts +24 -21
  116. package/lib/cjs/Metadata/Unit.d.ts.map +1 -1
  117. package/lib/cjs/Metadata/Unit.js +40 -24
  118. package/lib/cjs/Metadata/Unit.js.map +1 -1
  119. package/lib/cjs/Metadata/UnitSystem.d.ts +17 -4
  120. package/lib/cjs/Metadata/UnitSystem.d.ts.map +1 -1
  121. package/lib/cjs/Metadata/UnitSystem.js +24 -4
  122. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  123. package/lib/cjs/PropertyTypes.d.ts +11 -11
  124. package/lib/cjs/PropertyTypes.d.ts.map +1 -1
  125. package/lib/cjs/PropertyTypes.js +28 -20
  126. package/lib/cjs/PropertyTypes.js.map +1 -1
  127. package/lib/cjs/SchemaFormatsProvider.d.ts +39 -0
  128. package/lib/cjs/SchemaFormatsProvider.d.ts.map +1 -0
  129. package/lib/cjs/SchemaFormatsProvider.js +146 -0
  130. package/lib/cjs/SchemaFormatsProvider.js.map +1 -0
  131. package/lib/cjs/SchemaJsonLocater.d.ts +8 -8
  132. package/lib/cjs/SchemaJsonLocater.d.ts.map +1 -1
  133. package/lib/cjs/SchemaJsonLocater.js +7 -7
  134. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  135. package/lib/cjs/SchemaKey.d.ts +13 -7
  136. package/lib/cjs/SchemaKey.d.ts.map +1 -1
  137. package/lib/cjs/SchemaKey.js +22 -12
  138. package/lib/cjs/SchemaKey.js.map +1 -1
  139. package/lib/cjs/SchemaLoader.d.ts +5 -5
  140. package/lib/cjs/SchemaLoader.d.ts.map +1 -1
  141. package/lib/cjs/SchemaLoader.js +5 -4
  142. package/lib/cjs/SchemaLoader.js.map +1 -1
  143. package/lib/cjs/SchemaPartVisitorDelegate.d.ts +2 -2
  144. package/lib/cjs/SchemaPartVisitorDelegate.js +2 -1
  145. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  146. package/lib/cjs/UnitConversion/Graph.js +69 -65
  147. package/lib/cjs/UnitConversion/Graph.js.map +1 -1
  148. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  149. package/lib/cjs/UnitConversion/UnitConversion.d.ts +1 -1
  150. package/lib/cjs/UnitConversion/UnitConversion.d.ts.map +1 -1
  151. package/lib/cjs/UnitConversion/UnitConversion.js +9 -7
  152. package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
  153. package/lib/cjs/UnitConversion/UnitConverter.js +2 -0
  154. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  155. package/lib/cjs/UnitConversion/UnitTree.d.ts +2 -0
  156. package/lib/cjs/UnitConversion/UnitTree.d.ts.map +1 -1
  157. package/lib/cjs/UnitConversion/UnitTree.js +11 -1
  158. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  159. package/lib/cjs/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  160. package/lib/cjs/UnitProvider/SchemaUnitProvider.js +8 -9
  161. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  162. package/lib/cjs/Validation/SchemaWalker.d.ts +1 -1
  163. package/lib/cjs/Validation/SchemaWalker.d.ts.map +1 -1
  164. package/lib/cjs/Validation/SchemaWalker.js +6 -4
  165. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  166. package/lib/cjs/ecschema-metadata.d.ts +1 -0
  167. package/lib/cjs/ecschema-metadata.d.ts.map +1 -1
  168. package/lib/cjs/ecschema-metadata.js +1 -0
  169. package/lib/cjs/ecschema-metadata.js.map +1 -1
  170. package/lib/cjs/utils/SchemaGraph.js +5 -6
  171. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  172. package/lib/esm/Constants.d.ts +8 -0
  173. package/lib/esm/Constants.d.ts.map +1 -1
  174. package/lib/esm/Constants.js +29 -20
  175. package/lib/esm/Constants.js.map +1 -1
  176. package/lib/esm/Context.d.ts +85 -36
  177. package/lib/esm/Context.d.ts.map +1 -1
  178. package/lib/esm/Context.js +78 -28
  179. package/lib/esm/Context.js.map +1 -1
  180. package/lib/esm/DelayedPromise.d.ts +9 -8
  181. package/lib/esm/DelayedPromise.d.ts.map +1 -1
  182. package/lib/esm/DelayedPromise.js +8 -6
  183. package/lib/esm/DelayedPromise.js.map +1 -1
  184. package/lib/esm/Deserialization/AbstractParser.js +1 -0
  185. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  186. package/lib/esm/Deserialization/Helper.d.ts +3 -3
  187. package/lib/esm/Deserialization/Helper.d.ts.map +1 -1
  188. package/lib/esm/Deserialization/Helper.js +36 -27
  189. package/lib/esm/Deserialization/Helper.js.map +1 -1
  190. package/lib/esm/Deserialization/JsonParser.js +154 -151
  191. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  192. package/lib/esm/Deserialization/JsonProps.d.ts +47 -33
  193. package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
  194. package/lib/esm/Deserialization/JsonProps.js +3 -3
  195. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  196. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  197. package/lib/esm/Deserialization/XmlParser.d.ts.map +1 -1
  198. package/lib/esm/Deserialization/XmlParser.js +61 -53
  199. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  200. package/lib/esm/Deserialization/XmlSerializationUtils.d.ts +0 -5
  201. package/lib/esm/Deserialization/XmlSerializationUtils.d.ts.map +1 -1
  202. package/lib/esm/Deserialization/XmlSerializationUtils.js +9 -18
  203. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  204. package/lib/esm/ECName.d.ts +2 -2
  205. package/lib/esm/ECName.js +6 -5
  206. package/lib/esm/ECName.js.map +1 -1
  207. package/lib/esm/ECObjects.d.ts +41 -9
  208. package/lib/esm/ECObjects.d.ts.map +1 -1
  209. package/lib/esm/ECObjects.js +77 -24
  210. package/lib/esm/ECObjects.js.map +1 -1
  211. package/lib/esm/Exception.d.ts +4 -4
  212. package/lib/esm/Exception.d.ts.map +1 -1
  213. package/lib/esm/Exception.js +59 -58
  214. package/lib/esm/Exception.js.map +1 -1
  215. package/lib/esm/Interfaces.d.ts +35 -32
  216. package/lib/esm/Interfaces.d.ts.map +1 -1
  217. package/lib/esm/Interfaces.js.map +1 -1
  218. package/lib/esm/Metadata/Class.d.ts +179 -32
  219. package/lib/esm/Metadata/Class.d.ts.map +1 -1
  220. package/lib/esm/Metadata/Class.js +292 -90
  221. package/lib/esm/Metadata/Class.js.map +1 -1
  222. package/lib/esm/Metadata/Constant.d.ts +26 -10
  223. package/lib/esm/Metadata/Constant.d.ts.map +1 -1
  224. package/lib/esm/Metadata/Constant.js +39 -11
  225. package/lib/esm/Metadata/Constant.js.map +1 -1
  226. package/lib/esm/Metadata/CustomAttribute.d.ts +2 -2
  227. package/lib/esm/Metadata/CustomAttribute.d.ts.map +1 -1
  228. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  229. package/lib/esm/Metadata/CustomAttributeClass.d.ts +21 -7
  230. package/lib/esm/Metadata/CustomAttributeClass.d.ts.map +1 -1
  231. package/lib/esm/Metadata/CustomAttributeClass.js +29 -9
  232. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  233. package/lib/esm/Metadata/EntityClass.d.ts +40 -11
  234. package/lib/esm/Metadata/EntityClass.d.ts.map +1 -1
  235. package/lib/esm/Metadata/EntityClass.js +73 -35
  236. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  237. package/lib/esm/Metadata/Enumeration.d.ts +30 -10
  238. package/lib/esm/Metadata/Enumeration.d.ts.map +1 -1
  239. package/lib/esm/Metadata/Enumeration.js +42 -14
  240. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  241. package/lib/esm/Metadata/Format.d.ts +65 -17
  242. package/lib/esm/Metadata/Format.d.ts.map +1 -1
  243. package/lib/esm/Metadata/Format.js +108 -23
  244. package/lib/esm/Metadata/Format.js.map +1 -1
  245. package/lib/esm/Metadata/InvertedUnit.d.ts +19 -10
  246. package/lib/esm/Metadata/InvertedUnit.d.ts.map +1 -1
  247. package/lib/esm/Metadata/InvertedUnit.js +33 -16
  248. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  249. package/lib/esm/Metadata/KindOfQuantity.d.ts +38 -18
  250. package/lib/esm/Metadata/KindOfQuantity.d.ts.map +1 -1
  251. package/lib/esm/Metadata/KindOfQuantity.js +91 -41
  252. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  253. package/lib/esm/Metadata/Mixin.d.ts +31 -4
  254. package/lib/esm/Metadata/Mixin.d.ts.map +1 -1
  255. package/lib/esm/Metadata/Mixin.js +44 -10
  256. package/lib/esm/Metadata/Mixin.js.map +1 -1
  257. package/lib/esm/Metadata/OverrideFormat.d.ts +12 -12
  258. package/lib/esm/Metadata/OverrideFormat.d.ts.map +1 -1
  259. package/lib/esm/Metadata/OverrideFormat.js +37 -20
  260. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  261. package/lib/esm/Metadata/Phenomenon.d.ts +24 -3
  262. package/lib/esm/Metadata/Phenomenon.d.ts.map +1 -1
  263. package/lib/esm/Metadata/Phenomenon.js +33 -4
  264. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  265. package/lib/esm/Metadata/Property.d.ts +47 -25
  266. package/lib/esm/Metadata/Property.d.ts.map +1 -1
  267. package/lib/esm/Metadata/Property.js +130 -51
  268. package/lib/esm/Metadata/Property.js.map +1 -1
  269. package/lib/esm/Metadata/PropertyCategory.d.ts +20 -4
  270. package/lib/esm/Metadata/PropertyCategory.d.ts.map +1 -1
  271. package/lib/esm/Metadata/PropertyCategory.js +31 -4
  272. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  273. package/lib/esm/Metadata/RelationshipClass.d.ts +63 -27
  274. package/lib/esm/Metadata/RelationshipClass.d.ts.map +1 -1
  275. package/lib/esm/Metadata/RelationshipClass.js +102 -45
  276. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  277. package/lib/esm/Metadata/Schema.d.ts +167 -41
  278. package/lib/esm/Metadata/Schema.d.ts.map +1 -1
  279. package/lib/esm/Metadata/Schema.js +212 -112
  280. package/lib/esm/Metadata/Schema.js.map +1 -1
  281. package/lib/esm/Metadata/SchemaItem.d.ts +19 -19
  282. package/lib/esm/Metadata/SchemaItem.d.ts.map +1 -1
  283. package/lib/esm/Metadata/SchemaItem.js +25 -23
  284. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  285. package/lib/esm/Metadata/Unit.d.ts +24 -21
  286. package/lib/esm/Metadata/Unit.d.ts.map +1 -1
  287. package/lib/esm/Metadata/Unit.js +41 -25
  288. package/lib/esm/Metadata/Unit.js.map +1 -1
  289. package/lib/esm/Metadata/UnitSystem.d.ts +17 -4
  290. package/lib/esm/Metadata/UnitSystem.d.ts.map +1 -1
  291. package/lib/esm/Metadata/UnitSystem.js +24 -4
  292. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  293. package/lib/esm/PropertyTypes.d.ts +11 -11
  294. package/lib/esm/PropertyTypes.d.ts.map +1 -1
  295. package/lib/esm/PropertyTypes.js +29 -21
  296. package/lib/esm/PropertyTypes.js.map +1 -1
  297. package/lib/esm/SchemaFormatsProvider.d.ts +39 -0
  298. package/lib/esm/SchemaFormatsProvider.d.ts.map +1 -0
  299. package/lib/esm/SchemaFormatsProvider.js +142 -0
  300. package/lib/esm/SchemaFormatsProvider.js.map +1 -0
  301. package/lib/esm/SchemaJsonLocater.d.ts +8 -8
  302. package/lib/esm/SchemaJsonLocater.d.ts.map +1 -1
  303. package/lib/esm/SchemaJsonLocater.js +7 -7
  304. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  305. package/lib/esm/SchemaKey.d.ts +13 -7
  306. package/lib/esm/SchemaKey.d.ts.map +1 -1
  307. package/lib/esm/SchemaKey.js +23 -13
  308. package/lib/esm/SchemaKey.js.map +1 -1
  309. package/lib/esm/SchemaLoader.d.ts +5 -5
  310. package/lib/esm/SchemaLoader.d.ts.map +1 -1
  311. package/lib/esm/SchemaLoader.js +6 -5
  312. package/lib/esm/SchemaLoader.js.map +1 -1
  313. package/lib/esm/SchemaPartVisitorDelegate.d.ts +2 -2
  314. package/lib/esm/SchemaPartVisitorDelegate.js +2 -1
  315. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  316. package/lib/esm/UnitConversion/Graph.js +69 -65
  317. package/lib/esm/UnitConversion/Graph.js.map +1 -1
  318. package/lib/esm/UnitConversion/Parser.js.map +1 -1
  319. package/lib/esm/UnitConversion/UnitConversion.d.ts +1 -1
  320. package/lib/esm/UnitConversion/UnitConversion.d.ts.map +1 -1
  321. package/lib/esm/UnitConversion/UnitConversion.js +9 -7
  322. package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
  323. package/lib/esm/UnitConversion/UnitConverter.js +2 -0
  324. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  325. package/lib/esm/UnitConversion/UnitTree.d.ts +2 -0
  326. package/lib/esm/UnitConversion/UnitTree.d.ts.map +1 -1
  327. package/lib/esm/UnitConversion/UnitTree.js +11 -1
  328. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  329. package/lib/esm/UnitProvider/SchemaUnitProvider.d.ts.map +1 -1
  330. package/lib/esm/UnitProvider/SchemaUnitProvider.js +8 -9
  331. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  332. package/lib/esm/Validation/SchemaWalker.d.ts +1 -1
  333. package/lib/esm/Validation/SchemaWalker.d.ts.map +1 -1
  334. package/lib/esm/Validation/SchemaWalker.js +6 -4
  335. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  336. package/lib/esm/ecschema-metadata.d.ts +1 -0
  337. package/lib/esm/ecschema-metadata.d.ts.map +1 -1
  338. package/lib/esm/ecschema-metadata.js +1 -0
  339. package/lib/esm/ecschema-metadata.js.map +1 -1
  340. package/lib/esm/utils/SchemaGraph.js +6 -7
  341. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  342. package/package.json +16 -14
@@ -15,15 +15,21 @@ const ECName_1 = require("../ECName");
15
15
  const SchemaItem_1 = require("./SchemaItem");
16
16
  /**
17
17
  * A Typescript class representation of an ECEnumeration.
18
- * @beta
18
+ * @public @preview
19
19
  */
20
20
  class Enumeration extends SchemaItem_1.SchemaItem {
21
+ schemaItemType = Enumeration.schemaItemType;
22
+ /** @internal */
23
+ static get schemaItemType() { return ECObjects_1.SchemaItemType.Enumeration; }
24
+ _type;
25
+ _isStrict;
26
+ _enumerators;
21
27
  get enumerators() { return this._enumerators; }
22
28
  get type() { return this._type; }
23
29
  get isStrict() { return this._isStrict; }
30
+ /** @internal */
24
31
  constructor(schema, name, primitiveType) {
25
32
  super(schema, name);
26
- this.schemaItemType = ECObjects_1.SchemaItemType.Enumeration;
27
33
  this._type = primitiveType;
28
34
  this._isStrict = true;
29
35
  this._enumerators = [];
@@ -49,9 +55,9 @@ class Enumeration extends SchemaItem_1.SchemaItem {
49
55
  findDuplicateEnumerators(name, value) {
50
56
  this._enumerators.forEach((element) => {
51
57
  if (element.name.toLowerCase() === name.toLowerCase())
52
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with name '${name}'.`);
58
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with name '${name}'.`);
53
59
  if (element.value === value)
54
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with value '${value}'.`);
60
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with value '${value}'.`);
55
61
  });
56
62
  }
57
63
  /**
@@ -61,23 +67,25 @@ class Enumeration extends SchemaItem_1.SchemaItem {
61
67
  * @param label A localized display label that is used instead of the name in a GUI.
62
68
  * @param description A localized description for the enumerator.
63
69
  * @return AnyEnumerator object
70
+ * @internal
64
71
  */
65
72
  createEnumerator(name, value, label, description) {
66
73
  if (this.isInt && typeof (value) === "string") // throws if backing type is int and value is string
67
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'integer' and an enumerator with value of type 'string'.`);
74
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'integer' and an enumerator with value of type 'string'.`);
68
75
  if (!this.isInt && typeof (value) === "number") // also throws if backing type is string and value is number
69
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'string' and an enumerator with value of type 'integer'.`);
76
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'string' and an enumerator with value of type 'integer'.`);
70
77
  this.findDuplicateEnumerators(name, value); // check for duplicates; throw if there are any
71
78
  if (!ECName_1.ECName.validate(name))
72
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECName, `The Enumeration ${this.name} has an enumerator with an invalid 'name' attribute. ${name} is not a valid ECName.`);
79
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECName, `The Enumeration ${this.name} has an enumerator with an invalid 'name' attribute. ${name} is not a valid ECName.`);
73
80
  return { name, value, label, description };
74
81
  }
75
82
  /**
76
83
  * Adds enumerator to list of enumerators on this Enumeration
77
84
  * @param enumerator The enumerator to add
85
+ * @internal
78
86
  */
79
87
  addEnumerator(enumerator) {
80
- this.enumerators.push(enumerator);
88
+ this._enumerators.push(enumerator);
81
89
  }
82
90
  /**
83
91
  * Save this Enumeration's properties to an object for serializing to JSON.
@@ -130,19 +138,19 @@ class Enumeration extends SchemaItem_1.SchemaItem {
130
138
  if (Helper_1.SchemaReadHelper.isECSpecVersionNewer({ readVersion: enumerationProps.originalECSpecMajorVersion, writeVersion: enumerationProps.originalECSpecMinorVersion }))
131
139
  this._type = ECObjects_1.PrimitiveType.String;
132
140
  else
133
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has an invalid 'type' attribute. It should be either "int" or "string".`);
141
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has an invalid 'type' attribute. It should be either "int" or "string".`);
134
142
  }
135
143
  }
136
144
  else {
137
145
  const primitiveTypePattern = (this.isInt) ? /int/i : /string/i;
138
146
  if (!primitiveTypePattern.test(enumerationProps.type))
139
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has an incompatible type. It must be "${(this.isInt) ? "int" : "string"}", not "${(this.isInt) ? "string" : "int"}".`);
147
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has an incompatible type. It must be "${(this.isInt) ? "int" : "string"}", not "${(this.isInt) ? "string" : "int"}".`);
140
148
  }
141
149
  this._isStrict = enumerationProps.isStrict;
142
150
  if (undefined !== enumerationProps.enumerators) {
143
151
  enumerationProps.enumerators.forEach((enumerator) => {
144
152
  // Creates a new enumerator (with the specified name, value, label and description- label and description are optional) and adds to the list of enumerators.
145
- // Throws ECObjectsError if there are duplicate names or values present in the enumeration
153
+ // Throws ECSchemaError if there are duplicate names or values present in the enumeration
146
154
  this.addEnumerator(this.createEnumerator(enumerator.name, enumerator.value, enumerator.label, enumerator.description));
147
155
  });
148
156
  }
@@ -151,15 +159,35 @@ class Enumeration extends SchemaItem_1.SchemaItem {
151
159
  this.fromJSONSync(enumerationProps);
152
160
  }
153
161
  /**
154
- * @alpha Used in schema editing.
162
+ * @internal
155
163
  */
156
164
  setIsStrict(isStrict) {
157
165
  this._isStrict = isStrict;
158
166
  }
167
+ /**
168
+ * Type guard to check if the SchemaItem is of type Enumeration.
169
+ * @param item The SchemaItem to check.
170
+ * @returns True if the item is an Enumeration, false otherwise.
171
+ */
172
+ static isEnumeration(item) {
173
+ return item?.schemaItemType === ECObjects_1.SchemaItemType.Enumeration;
174
+ }
175
+ /**
176
+ * Type assertion to check if the SchemaItem is of type Enumeration.
177
+ * @param item The SchemaItem to check.
178
+ * @returns The item cast to Enumeration if it is an Enumeration, undefined otherwise.
179
+ * @internal
180
+ */
181
+ static assertIsEnumeration(item) {
182
+ if (!this.isEnumeration(item))
183
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidSchemaItemType, `Expected '${ECObjects_1.SchemaItemType.Enumeration}' (Enumeration)`);
184
+ }
159
185
  }
160
186
  exports.Enumeration = Enumeration;
161
- /** @internal
187
+ /**
162
188
  * An abstract class used for schema editing.
189
+ *
190
+ * @internal
163
191
  */
164
192
  class MutableEnumeration extends Enumeration {
165
193
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Enumeration.js","sourceRoot":"","sources":["../../../src/Metadata/Enumeration.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 { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\r\nimport { EnumerationProps, EnumeratorProps } from \"../Deserialization/JsonProps\";\r\nimport { PrimitiveType, primitiveTypeToString, SchemaItemType } from \"../ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"../Exception\";\r\nimport { ECName } from \"../ECName\";\r\nimport { Schema } from \"./Schema\";\r\nimport { SchemaItem } from \"./SchemaItem\";\r\n\r\n/** @beta */\r\nexport interface Enumerator<T> {\r\n readonly name: string;\r\n readonly value: T;\r\n readonly label?: string;\r\n readonly description?: string;\r\n}\r\n\r\n/** @beta */\r\nexport type AnyEnumerator = Enumerator<string | number>;\r\n\r\n/**\r\n * A Typescript class representation of an ECEnumeration.\r\n * @beta\r\n */\r\nexport class Enumeration extends SchemaItem {\r\n public override readonly schemaItemType!: SchemaItemType.Enumeration;\r\n protected _type?: PrimitiveType.Integer | PrimitiveType.String;\r\n protected _isStrict: boolean;\r\n protected _enumerators: AnyEnumerator[];\r\n\r\n public get enumerators() { return this._enumerators; }\r\n public get type() { return this._type; }\r\n public get isStrict() { return this._isStrict; }\r\n\r\n constructor(schema: Schema, name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String) {\r\n super(schema, name);\r\n this.schemaItemType = SchemaItemType.Enumeration;\r\n this._type = primitiveType;\r\n this._isStrict = true;\r\n this._enumerators = [];\r\n }\r\n\r\n public get isInt(): boolean { return this._type === PrimitiveType.Integer; }\r\n public get isString(): boolean { return this._type === PrimitiveType.String; }\r\n\r\n /**\r\n * Gets an enumerator that matches the name provided.\r\n * @param name The ECName of the Enumerator to find.\r\n */\r\n public getEnumeratorByName(name: string): AnyEnumerator | undefined {\r\n return this.enumerators.find((item) => item.name.toLowerCase() === name.toLowerCase());\r\n }\r\n\r\n /**\r\n * Gets an enumerator that matches the value provided.\r\n * @param value The value of the Enumerator to find.\r\n */\r\n public getEnumerator(value: string): Enumerator<string> | undefined;\r\n public getEnumerator(value: number): Enumerator<number> | undefined;\r\n public getEnumerator(value: string | number): AnyEnumerator | undefined {\r\n return this.enumerators.find((item) => item.value === value);\r\n }\r\n\r\n /**\r\n * Checks whether there already exists an enumerator with this name or this value\r\n * @param name The name of the enumerator we are trying to create\r\n * @param value The value of the enumerator we are trying to create\r\n * @internal\r\n */\r\n private findDuplicateEnumerators(name: string, value: string | number) {\r\n this._enumerators.forEach((element: AnyEnumerator) => { // Name and value must be unique within the ECEnumerations\r\n if (element.name.toLowerCase() === name.toLowerCase())\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with name '${name}'.`);\r\n if (element.value === value)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with value '${value}'.`);\r\n });\r\n }\r\n\r\n /**\r\n * Creates an Enumerator with the provided name and value as well as optional parameters label and description\r\n * @param name The name of the enumerator\r\n * @param value The value of the enumerator. The type of this value is dependent on the backing type of the this Enumeration.\r\n * @param label A localized display label that is used instead of the name in a GUI.\r\n * @param description A localized description for the enumerator.\r\n * @return AnyEnumerator object\r\n */\r\n public createEnumerator(name: string, value: string | number, label?: string, description?: string): AnyEnumerator {\r\n if (this.isInt && typeof (value) === \"string\") // throws if backing type is int and value is string\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'integer' and an enumerator with value of type 'string'.`);\r\n if (!this.isInt && typeof (value) === \"number\") // also throws if backing type is string and value is number\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'string' and an enumerator with value of type 'integer'.`);\r\n this.findDuplicateEnumerators(name, value); // check for duplicates; throw if there are any\r\n if (!ECName.validate(name))\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECName, `The Enumeration ${this.name} has an enumerator with an invalid 'name' attribute. ${name} is not a valid ECName.`);\r\n return { name, value, label, description };\r\n }\r\n\r\n /**\r\n * Adds enumerator to list of enumerators on this Enumeration\r\n * @param enumerator The enumerator to add\r\n */\r\n protected addEnumerator(enumerator: AnyEnumerator) {\r\n this.enumerators.push(enumerator);\r\n }\r\n\r\n /**\r\n * Save this Enumeration's 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): EnumerationProps {\r\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\r\n schemaJson.type = (this.isInt) ? \"int\" : \"string\";\r\n schemaJson.isStrict = this.isStrict;\r\n schemaJson.enumerators = this._enumerators.map(({ name, label, value, description }) => {\r\n const enumJson: any = { name, value };\r\n if (undefined !== label)\r\n enumJson.label = label;\r\n if (undefined !== description)\r\n enumJson.description = description;\r\n return enumJson;\r\n });\r\n return schemaJson;\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 if (undefined !== this.type)\r\n itemElement.setAttribute(\"backingTypeName\", primitiveTypeToString(this.type));\r\n itemElement.setAttribute(\"isStrict\", String(this.isStrict));\r\n\r\n for (const enumerator of this.enumerators) {\r\n const enumElement = schemaXml.createElement(\"ECEnumerator\");\r\n enumElement.setAttribute(\"name\", enumerator.name);\r\n const enumValue = typeof enumerator.value === \"string\" ? enumerator.value : enumerator.value.toString();\r\n enumElement.setAttribute(\"value\", enumValue);\r\n if (undefined !== enumerator.label)\r\n enumElement.setAttribute(\"displayLabel\", enumerator.label);\r\n if (undefined !== enumerator.description)\r\n enumElement.setAttribute(\"description\", enumerator.description);\r\n itemElement.appendChild(enumElement);\r\n }\r\n\r\n return itemElement;\r\n }\r\n\r\n public override fromJSONSync(enumerationProps: EnumerationProps) {\r\n super.fromJSONSync(enumerationProps);\r\n if (undefined === this._type) {\r\n if (/int/i.test(enumerationProps.type)) {\r\n this._type = PrimitiveType.Integer;\r\n } else if (/string/i.test(enumerationProps.type)) {\r\n this._type = PrimitiveType.String;\r\n } else {\r\n if (SchemaReadHelper.isECSpecVersionNewer({readVersion: enumerationProps.originalECSpecMajorVersion, writeVersion: enumerationProps.originalECSpecMinorVersion} as ECSpecVersion))\r\n this._type = PrimitiveType.String;\r\n else\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has an invalid 'type' attribute. It should be either \"int\" or \"string\".`);\r\n }\r\n } else {\r\n const primitiveTypePattern = (this.isInt) ? /int/i : /string/i;\r\n if (!primitiveTypePattern.test(enumerationProps.type))\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECJson, `The Enumeration ${this.name} has an incompatible type. It must be \"${(this.isInt) ? \"int\" : \"string\"}\", not \"${(this.isInt) ? \"string\" : \"int\"}\".`);\r\n }\r\n this._isStrict = enumerationProps.isStrict;\r\n\r\n if (undefined !== enumerationProps.enumerators) {\r\n enumerationProps.enumerators.forEach((enumerator: EnumeratorProps) => {\r\n // Creates a new enumerator (with the specified name, value, label and description- label and description are optional) and adds to the list of enumerators.\r\n // Throws ECObjectsError if there are duplicate names or values present in the enumeration\r\n this.addEnumerator(this.createEnumerator(enumerator.name, enumerator.value, enumerator.label, enumerator.description));\r\n });\r\n }\r\n }\r\n\r\n public override async fromJSON(enumerationProps: EnumerationProps) {\r\n this.fromJSONSync(enumerationProps);\r\n }\r\n\r\n /**\r\n * @alpha Used in schema editing.\r\n */\r\n protected setIsStrict(isStrict: boolean) {\r\n this._isStrict = isStrict;\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 MutableEnumeration extends Enumeration {\r\n public abstract override addEnumerator(enumerator: AnyEnumerator): void;\r\n public abstract override setIsStrict(isStrict: boolean): void;\r\n public abstract override setDisplayLabel(displayLabel: string): void;\r\n}\r\n"]}
1
+ {"version":3,"file":"Enumeration.js","sourceRoot":"","sources":["../../../src/Metadata/Enumeration.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 { ECSpecVersion, SchemaReadHelper } from \"../Deserialization/Helper\";\nimport { EnumerationProps, EnumeratorProps } from \"../Deserialization/JsonProps\";\nimport { PrimitiveType, primitiveTypeToString, SchemaItemType } from \"../ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\nimport { ECName } from \"../ECName\";\nimport { Schema } from \"./Schema\";\nimport { SchemaItem } from \"./SchemaItem\";\n\n/** @public @preview */\nexport interface Enumerator<T> {\n readonly name: string;\n readonly value: T;\n readonly label?: string;\n readonly description?: string;\n}\n\n/** @public @preview */\nexport type AnyEnumerator = Enumerator<string | number>;\n\n/**\n * A Typescript class representation of an ECEnumeration.\n * @public @preview\n */\nexport class Enumeration extends SchemaItem {\n public override readonly schemaItemType = Enumeration.schemaItemType;\n /** @internal */\n public static override get schemaItemType() { return SchemaItemType.Enumeration; }\n private _type?: PrimitiveType.Integer | PrimitiveType.String;\n private _isStrict: boolean;\n private _enumerators: AnyEnumerator[];\n\n public get enumerators(): ReadonlyArray<AnyEnumerator> { return this._enumerators; }\n public get type() { return this._type; }\n public get isStrict() { return this._isStrict; }\n\n /** @internal */\n constructor(schema: Schema, name: string, primitiveType?: PrimitiveType.Integer | PrimitiveType.String) {\n super(schema, name);\n this._type = primitiveType;\n this._isStrict = true;\n this._enumerators = [];\n }\n\n public get isInt(): boolean { return this._type === PrimitiveType.Integer; }\n public get isString(): boolean { return this._type === PrimitiveType.String; }\n\n /**\n * Gets an enumerator that matches the name provided.\n * @param name The ECName of the Enumerator to find.\n */\n public getEnumeratorByName(name: string): AnyEnumerator | undefined {\n return this.enumerators.find((item) => item.name.toLowerCase() === name.toLowerCase());\n }\n\n /**\n * Gets an enumerator that matches the value provided.\n * @param value The value of the Enumerator to find.\n */\n public getEnumerator(value: string): Enumerator<string> | undefined;\n public getEnumerator(value: number): Enumerator<number> | undefined;\n public getEnumerator(value: string | number): AnyEnumerator | undefined {\n return this.enumerators.find((item) => item.value === value);\n }\n\n /**\n * Checks whether there already exists an enumerator with this name or this value\n * @param name The name of the enumerator we are trying to create\n * @param value The value of the enumerator we are trying to create\n * @internal\n */\n private findDuplicateEnumerators(name: string, value: string | number) {\n this._enumerators.forEach((element: AnyEnumerator) => { // Name and value must be unique within the ECEnumerations\n if (element.name.toLowerCase() === name.toLowerCase())\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with name '${name}'.`);\n if (element.value === value)\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a duplicate Enumerator with value '${value}'.`);\n });\n }\n\n /**\n * Creates an Enumerator with the provided name and value as well as optional parameters label and description\n * @param name The name of the enumerator\n * @param value The value of the enumerator. The type of this value is dependent on the backing type of the this Enumeration.\n * @param label A localized display label that is used instead of the name in a GUI.\n * @param description A localized description for the enumerator.\n * @return AnyEnumerator object\n * @internal\n */\n public createEnumerator(name: string, value: string | number, label?: string, description?: string): AnyEnumerator {\n if (this.isInt && typeof (value) === \"string\") // throws if backing type is int and value is string\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'integer' and an enumerator with value of type 'string'.`);\n if (!this.isInt && typeof (value) === \"number\") // also throws if backing type is string and value is number\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has a backing type 'string' and an enumerator with value of type 'integer'.`);\n this.findDuplicateEnumerators(name, value); // check for duplicates; throw if there are any\n if (!ECName.validate(name))\n throw new ECSchemaError(ECSchemaStatus.InvalidECName, `The Enumeration ${this.name} has an enumerator with an invalid 'name' attribute. ${name} is not a valid ECName.`);\n return { name, value, label, description };\n }\n\n /**\n * Adds enumerator to list of enumerators on this Enumeration\n * @param enumerator The enumerator to add\n * @internal\n */\n protected addEnumerator(enumerator: AnyEnumerator) {\n this._enumerators.push(enumerator);\n }\n\n /**\n * Save this Enumeration's 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): EnumerationProps {\n const schemaJson = super.toJSON(standalone, includeSchemaVersion) as any;\n schemaJson.type = (this.isInt) ? \"int\" : \"string\";\n schemaJson.isStrict = this.isStrict;\n schemaJson.enumerators = this._enumerators.map(({ name, label, value, description }) => {\n const enumJson: any = { name, value };\n if (undefined !== label)\n enumJson.label = label;\n if (undefined !== description)\n enumJson.description = description;\n return enumJson;\n });\n return schemaJson;\n }\n\n /** @internal */\n public override async toXml(schemaXml: Document): Promise<Element> {\n const itemElement = await super.toXml(schemaXml);\n if (undefined !== this.type)\n itemElement.setAttribute(\"backingTypeName\", primitiveTypeToString(this.type));\n itemElement.setAttribute(\"isStrict\", String(this.isStrict));\n\n for (const enumerator of this.enumerators) {\n const enumElement = schemaXml.createElement(\"ECEnumerator\");\n enumElement.setAttribute(\"name\", enumerator.name);\n const enumValue = typeof enumerator.value === \"string\" ? enumerator.value : enumerator.value.toString();\n enumElement.setAttribute(\"value\", enumValue);\n if (undefined !== enumerator.label)\n enumElement.setAttribute(\"displayLabel\", enumerator.label);\n if (undefined !== enumerator.description)\n enumElement.setAttribute(\"description\", enumerator.description);\n itemElement.appendChild(enumElement);\n }\n\n return itemElement;\n }\n\n public override fromJSONSync(enumerationProps: EnumerationProps) {\n super.fromJSONSync(enumerationProps);\n if (undefined === this._type) {\n if (/int/i.test(enumerationProps.type)) {\n this._type = PrimitiveType.Integer;\n } else if (/string/i.test(enumerationProps.type)) {\n this._type = PrimitiveType.String;\n } else {\n if (SchemaReadHelper.isECSpecVersionNewer({ readVersion: enumerationProps.originalECSpecMajorVersion, writeVersion: enumerationProps.originalECSpecMinorVersion } as ECSpecVersion))\n this._type = PrimitiveType.String;\n else\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has an invalid 'type' attribute. It should be either \"int\" or \"string\".`);\n }\n } else {\n const primitiveTypePattern = (this.isInt) ? /int/i : /string/i;\n if (!primitiveTypePattern.test(enumerationProps.type))\n throw new ECSchemaError(ECSchemaStatus.InvalidECJson, `The Enumeration ${this.name} has an incompatible type. It must be \"${(this.isInt) ? \"int\" : \"string\"}\", not \"${(this.isInt) ? \"string\" : \"int\"}\".`);\n }\n this._isStrict = enumerationProps.isStrict;\n\n if (undefined !== enumerationProps.enumerators) {\n enumerationProps.enumerators.forEach((enumerator: EnumeratorProps) => {\n // Creates a new enumerator (with the specified name, value, label and description- label and description are optional) and adds to the list of enumerators.\n // Throws ECSchemaError if there are duplicate names or values present in the enumeration\n this.addEnumerator(this.createEnumerator(enumerator.name, enumerator.value, enumerator.label, enumerator.description));\n });\n }\n }\n\n public override async fromJSON(enumerationProps: EnumerationProps) {\n this.fromJSONSync(enumerationProps);\n }\n\n /**\n * @internal\n */\n protected setIsStrict(isStrict: boolean) {\n this._isStrict = isStrict;\n }\n\n /**\n * Type guard to check if the SchemaItem is of type Enumeration.\n * @param item The SchemaItem to check.\n * @returns True if the item is an Enumeration, false otherwise.\n */\n public static isEnumeration(item?: SchemaItem): item is Enumeration {\n return item?.schemaItemType === SchemaItemType.Enumeration;\n }\n\n /**\n * Type assertion to check if the SchemaItem is of type Enumeration.\n * @param item The SchemaItem to check.\n * @returns The item cast to Enumeration if it is an Enumeration, undefined otherwise.\n * @internal\n */\n public static assertIsEnumeration(item?: SchemaItem): asserts item is Enumeration {\n if (!this.isEnumeration(item))\n throw new ECSchemaError(ECSchemaStatus.InvalidSchemaItemType, `Expected '${SchemaItemType.Enumeration}' (Enumeration)`);\n }\n}\n\n/**\n * An abstract class used for schema editing.\n *\n * @internal\n */\nexport abstract class MutableEnumeration extends Enumeration {\n public abstract override addEnumerator(enumerator: AnyEnumerator): void;\n public abstract override setIsStrict(isStrict: boolean): void;\n public abstract override setDisplayLabel(displayLabel: string): void;\n}\n"]}
@@ -3,18 +3,20 @@
3
3
  */
4
4
  import { SchemaItemFormatProps } from "../Deserialization/JsonProps";
5
5
  import { SchemaItemType } from "../ECObjects";
6
- import { BaseFormat, DecimalPrecision, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from "@itwin/core-quantity";
7
- import { InvertedUnit } from "./InvertedUnit";
6
+ import { DecimalPrecision, FormatTraits, FormatType, FractionalPrecision, ScientificType, ShowSignOption } from "@itwin/core-quantity";
8
7
  import { Schema } from "./Schema";
9
8
  import { SchemaItem } from "./SchemaItem";
10
- import { Unit } from "./Unit";
9
+ import { LazyLoadedInvertedUnit, LazyLoadedUnit } from "../Interfaces";
11
10
  /**
12
- * @beta
11
+ * @public @preview
13
12
  */
14
13
  export declare class Format extends SchemaItem {
15
- readonly schemaItemType: SchemaItemType.Format;
16
- protected _base: BaseFormat;
17
- protected _units?: Array<[Unit | InvertedUnit, string | undefined]>;
14
+ readonly schemaItemType: SchemaItemType;
15
+ /** @internal */
16
+ static get schemaItemType(): SchemaItemType;
17
+ private _base;
18
+ private _units?;
19
+ /** @internal */
18
20
  constructor(schema: Schema, name: string);
19
21
  get roundFactor(): number;
20
22
  get type(): FormatType;
@@ -30,15 +32,21 @@ export declare class Format extends SchemaItem {
30
32
  get formatTraits(): FormatTraits;
31
33
  get spacer(): string | undefined;
32
34
  get includeZero(): boolean | undefined;
33
- get units(): Array<[Unit | InvertedUnit, string | undefined]> | undefined;
35
+ get units(): ReadonlyArray<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]> | undefined;
34
36
  private parseFormatTraits;
35
37
  hasFormatTrait(formatTrait: FormatTraits): boolean;
36
38
  /**
37
39
  * Adds a Unit, or InvertedUnit, with an optional label override.
38
40
  * @param unit The Unit, or InvertedUnit, to add to this Format.
39
41
  * @param label A label that overrides the label defined within the Unit when a value is formatted.
42
+ * @internal
43
+ */
44
+ protected addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;
45
+ /**
46
+ *
47
+ * @param precision
48
+ * @internal
40
49
  */
41
- protected addUnit(unit: Unit | InvertedUnit, label?: string): void;
42
50
  protected setPrecision(precision: number): void;
43
51
  private typecheck;
44
52
  fromJSONSync(formatProps: SchemaItemFormatProps): void;
@@ -52,40 +60,80 @@ export declare class Format extends SchemaItem {
52
60
  /** @internal */
53
61
  toXml(schemaXml: Document): Promise<Element>;
54
62
  /**
55
- * @alpha Used in schema editing.
63
+ * @internal
56
64
  */
57
65
  protected setFormatType(formatType: FormatType): void;
58
66
  /**
59
- * @alpha Used in schema editing.
67
+ * @internal
60
68
  */
61
69
  protected setRoundFactor(roundFactor: number): void;
62
70
  /**
63
- * @alpha Used in schema editing.
71
+ * @internal
64
72
  */
65
73
  protected setShowSignOption(signOption: ShowSignOption): void;
66
74
  /**
67
- * @alpha Used in schema editing.
75
+ * @internal
68
76
  */
69
77
  protected setDecimalSeparator(separator: string): void;
70
78
  /**
71
- * @alpha Used in schema editing.
79
+ * @internal
72
80
  */
73
81
  protected setThousandSeparator(separator: string): void;
74
82
  /**
75
- * @alpha Used in schema editing.
83
+ * @internal
76
84
  */
77
85
  protected setUomSeparator(separator: string): void;
78
86
  /**
79
- * @alpha Used in schema editing.
87
+ * @internal
80
88
  */
81
89
  protected setStationSeparator(separator: string): void;
90
+ /**
91
+ * @internal
92
+ */
93
+ protected setStationOffsetSize(stationOffsetSize: number): void;
94
+ /**
95
+ * @internal
96
+ */
97
+ protected setScientificType(scientificType: ScientificType): void;
98
+ /**
99
+ * @internal
100
+ */
101
+ protected setMinWidth(minWidth: number): void;
102
+ /**
103
+ * @internal
104
+ */
105
+ protected setSpacer(spacer: string): void;
106
+ /**
107
+ * @internal
108
+ */
109
+ protected setIncludeZero(includeZero: boolean): void;
110
+ /**
111
+ * @internal
112
+ */
113
+ protected setFormatTraits(formatTraits: FormatTraits): void;
114
+ /**
115
+ * @internal
116
+ */
117
+ protected setUnits(units: Array<[LazyLoadedUnit | LazyLoadedInvertedUnit, string | undefined]>): void;
118
+ /** Type guard to check if the SchemaItem is of type Format.
119
+ * @param item The SchemaItem to check.
120
+ * @returns True if the item is a Format, false otherwise.
121
+ */
122
+ static isFormat(item?: SchemaItem): item is Format;
123
+ /**
124
+ * Type assertion to check if the SchemaItem is of type Format.
125
+ * @param item The SchemaItem to check.
126
+ * @returns The item cast to Format if it is a Format, undefined otherwise.
127
+ * @internal
128
+ */
129
+ static assertIsFormat(item?: SchemaItem): asserts item is Format;
82
130
  }
83
131
  /**
84
132
  * @internal
85
133
  * An abstract class used for schema editing.
86
134
  */
87
135
  export declare abstract class MutableFormat extends Format {
88
- abstract addUnit(unit: Unit | InvertedUnit, label?: string): void;
136
+ abstract addUnit(unit: LazyLoadedUnit | LazyLoadedInvertedUnit, label?: string): void;
89
137
  abstract setPrecision(precision: number): void;
90
138
  abstract setFormatType(formatType: FormatType): void;
91
139
  abstract setRoundFactor(roundFactor: number): void;
@@ -1 +1 @@
1
- {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Format.d.ts","sourceRoot":"","sources":["../../../src/Metadata/Format.ts"],"names":[],"mappings":"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"}
@@ -12,14 +12,22 @@ const XmlSerializationUtils_1 = require("../Deserialization/XmlSerializationUtil
12
12
  const ECObjects_1 = require("../ECObjects");
13
13
  const Exception_1 = require("../Exception");
14
14
  const core_quantity_1 = require("@itwin/core-quantity");
15
+ const InvertedUnit_1 = require("./InvertedUnit");
15
16
  const SchemaItem_1 = require("./SchemaItem");
17
+ const Unit_1 = require("./Unit");
18
+ const DelayedPromise_1 = require("../DelayedPromise");
16
19
  /**
17
- * @beta
20
+ * @public @preview
18
21
  */
19
22
  class Format extends SchemaItem_1.SchemaItem {
23
+ schemaItemType = Format.schemaItemType;
24
+ /** @internal */
25
+ static get schemaItemType() { return ECObjects_1.SchemaItemType.Format; }
26
+ _base;
27
+ _units;
28
+ /** @internal */
20
29
  constructor(schema, name) {
21
30
  super(schema, name);
22
- this.schemaItemType = ECObjects_1.SchemaItemType.Format;
23
31
  this._base = new core_quantity_1.BaseFormat(name);
24
32
  }
25
33
  get roundFactor() { return this._base.roundFactor; }
@@ -36,7 +44,9 @@ class Format extends SchemaItem_1.SchemaItem {
36
44
  get formatTraits() { return this._base.formatTraits; }
37
45
  get spacer() { return this._base.spacer; }
38
46
  get includeZero() { return this._base.includeZero; }
39
- get units() { return this._units; }
47
+ get units() {
48
+ return this._units;
49
+ }
40
50
  parseFormatTraits(formatTraitsFromJson) {
41
51
  return this._base.parseFormatTraits(formatTraitsFromJson);
42
52
  }
@@ -47,6 +57,7 @@ class Format extends SchemaItem_1.SchemaItem {
47
57
  * Adds a Unit, or InvertedUnit, with an optional label override.
48
58
  * @param unit The Unit, or InvertedUnit, to add to this Format.
49
59
  * @param label A label that overrides the label defined within the Unit when a value is formatted.
60
+ * @internal
50
61
  */
51
62
  addUnit(unit, label) {
52
63
  if (undefined === this._units)
@@ -54,11 +65,16 @@ class Format extends SchemaItem_1.SchemaItem {
54
65
  else { // Validate that a duplicate is not added.
55
66
  for (const existingUnit of this._units) {
56
67
  if (unit.fullName.toLowerCase() === existingUnit[0].fullName.toLowerCase())
57
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has duplicate units, '${unit.fullName}'.`); // TODO: Validation - this should be a validation error not a hard failure.
68
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has duplicate units, '${unit.fullName}'.`); // TODO: Validation - this should be a validation error not a hard failure.
58
69
  }
59
70
  }
60
71
  this._units.push([unit, label]);
61
72
  }
73
+ /**
74
+ *
75
+ * @param precision
76
+ * @internal
77
+ */
62
78
  setPrecision(precision) { this._base.precision = precision; }
63
79
  typecheck(formatProps) {
64
80
  this._base.loadFormatProperties(formatProps);
@@ -67,12 +83,12 @@ class Format extends SchemaItem_1.SchemaItem {
67
83
  this._base.includeZero = formatProps.composite.includeZero;
68
84
  if (undefined !== formatProps.composite.spacer) {
69
85
  if (formatProps.composite.spacer.length > 1)
70
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has a composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);
86
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has a composite with an invalid 'spacer' attribute. It should be an empty or one character string.`);
71
87
  this._base.spacer = formatProps.composite.spacer;
72
88
  }
73
89
  // Composite requires 1-4 units
74
90
  if (formatProps.composite.units.length <= 0 || formatProps.composite.units.length > 4)
75
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);
91
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, `The Format ${this.fullName} has an invalid 'Composite' attribute. It should have 1-4 units.`);
76
92
  }
77
93
  }
78
94
  fromJSONSync(formatProps) {
@@ -83,9 +99,12 @@ class Format extends SchemaItem_1.SchemaItem {
83
99
  // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation
84
100
  for (const unit of formatProps.composite.units) {
85
101
  const newUnit = this.schema.lookupItemSync(unit.name);
86
- if (undefined === newUnit)
87
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, ``);
88
- this.addUnit(newUnit, unit.label);
102
+ if (undefined === newUnit || (!Unit_1.Unit.isUnit(newUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit)))
103
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, ``);
104
+ if (Unit_1.Unit.isUnit(newUnit))
105
+ this.addUnit(new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);
106
+ else if (InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit))
107
+ this.addUnit(new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);
89
108
  }
90
109
  }
91
110
  async fromJSON(formatProps) {
@@ -96,9 +115,12 @@ class Format extends SchemaItem_1.SchemaItem {
96
115
  // Units are separated from the rest of the deserialization because of the need to have separate sync and async implementation
97
116
  for (const unit of formatProps.composite.units) {
98
117
  const newUnit = await this.schema.lookupItem(unit.name);
99
- if (undefined === newUnit)
100
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECJson, ``);
101
- this.addUnit(newUnit, unit.label);
118
+ if (undefined === newUnit || (!Unit_1.Unit.isUnit(newUnit) && !InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit)))
119
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECJson, ``);
120
+ if (Unit_1.Unit.isUnit(newUnit))
121
+ this.addUnit(new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);
122
+ else if (InvertedUnit_1.InvertedUnit.isInvertedUnit(newUnit))
123
+ this.addUnit(new DelayedPromise_1.DelayedPromiseWithProps(newUnit.key, async () => newUnit), unit.label);
102
124
  }
103
125
  }
104
126
  /**
@@ -177,60 +199,123 @@ class Format extends SchemaItem_1.SchemaItem {
177
199
  compositeElement.setAttribute("spacer", this.spacer);
178
200
  if (undefined !== this.includeZero)
179
201
  compositeElement.setAttribute("includeZero", this.includeZero.toString());
180
- this.units.forEach(([unit, label]) => {
202
+ for (const [unit, label] of this.units) {
203
+ const resolvedUnit = await unit;
181
204
  const unitElement = schemaXml.createElement("Unit");
182
205
  if (undefined !== label)
183
206
  unitElement.setAttribute("label", label);
184
- const unitName = XmlSerializationUtils_1.XmlSerializationUtils.createXmlTypedName(this.schema, unit.schema, unit.name);
207
+ const unitName = XmlSerializationUtils_1.XmlSerializationUtils.createXmlTypedName(this.schema, resolvedUnit.schema, resolvedUnit.name);
185
208
  unitElement.textContent = unitName;
186
209
  compositeElement.appendChild(unitElement);
187
- });
210
+ }
211
+ ;
188
212
  itemElement.appendChild(compositeElement);
189
213
  }
190
214
  return itemElement;
191
215
  }
192
216
  /**
193
- * @alpha Used in schema editing.
217
+ * @internal
194
218
  */
195
219
  setFormatType(formatType) {
196
220
  this._base.type = formatType;
197
221
  }
198
222
  /**
199
- * @alpha Used in schema editing.
223
+ * @internal
200
224
  */
201
225
  setRoundFactor(roundFactor) {
202
226
  this._base.roundFactor = roundFactor;
203
227
  }
204
228
  /**
205
- * @alpha Used in schema editing.
229
+ * @internal
206
230
  */
207
231
  setShowSignOption(signOption) {
208
232
  this._base.showSignOption = signOption;
209
233
  }
210
234
  /**
211
- * @alpha Used in schema editing.
235
+ * @internal
212
236
  */
213
237
  setDecimalSeparator(separator) {
214
238
  this._base.decimalSeparator = separator;
215
239
  }
216
240
  /**
217
- * @alpha Used in schema editing.
241
+ * @internal
218
242
  */
219
243
  setThousandSeparator(separator) {
220
244
  this._base.thousandSeparator = separator;
221
245
  }
222
246
  /**
223
- * @alpha Used in schema editing.
247
+ * @internal
224
248
  */
225
249
  setUomSeparator(separator) {
226
250
  this._base.uomSeparator = separator;
227
251
  }
228
252
  /**
229
- * @alpha Used in schema editing.
253
+ * @internal
230
254
  */
231
255
  setStationSeparator(separator) {
232
256
  this._base.stationSeparator = separator;
233
257
  }
258
+ /**
259
+ * @internal
260
+ */
261
+ setStationOffsetSize(stationOffsetSize) {
262
+ this._base.stationOffsetSize = stationOffsetSize;
263
+ }
264
+ /**
265
+ * @internal
266
+ */
267
+ setScientificType(scientificType) {
268
+ this._base.scientificType = scientificType;
269
+ }
270
+ /**
271
+ * @internal
272
+ */
273
+ setMinWidth(minWidth) {
274
+ this._base.minWidth = minWidth;
275
+ }
276
+ /**
277
+ * @internal
278
+ */
279
+ setSpacer(spacer) {
280
+ this._base.spacer = spacer;
281
+ }
282
+ /**
283
+ * @internal
284
+ */
285
+ setIncludeZero(includeZero) {
286
+ this._base.includeZero = includeZero;
287
+ }
288
+ /**
289
+ * @internal
290
+ */
291
+ setFormatTraits(formatTraits) {
292
+ this._base.formatTraits = formatTraits;
293
+ }
294
+ /**
295
+ * @internal
296
+ */
297
+ setUnits(units) {
298
+ this._units = units;
299
+ }
300
+ /** Type guard to check if the SchemaItem is of type Format.
301
+ * @param item The SchemaItem to check.
302
+ * @returns True if the item is a Format, false otherwise.
303
+ */
304
+ static isFormat(item) {
305
+ if (item && item.schemaItemType === ECObjects_1.SchemaItemType.Format)
306
+ return true;
307
+ return false;
308
+ }
309
+ /**
310
+ * Type assertion to check if the SchemaItem is of type Format.
311
+ * @param item The SchemaItem to check.
312
+ * @returns The item cast to Format if it is a Format, undefined otherwise.
313
+ * @internal
314
+ */
315
+ static assertIsFormat(item) {
316
+ if (!this.isFormat(item))
317
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidSchemaItemType, `Expected '${ECObjects_1.SchemaItemType.Format}' (Format)`);
318
+ }
234
319
  }
235
320
  exports.Format = Format;
236
321
  /**