@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
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Metadata
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SchemaFormatsProvider = void 0;
11
+ const Context_1 = require("./Context");
12
+ const SchemaKey_1 = require("./SchemaKey");
13
+ const SchemaItem_1 = require("./Metadata/SchemaItem");
14
+ const Format_1 = require("./Metadata/Format");
15
+ const core_bentley_1 = require("@itwin/core-bentley");
16
+ const KindOfQuantity_1 = require("./Metadata/KindOfQuantity");
17
+ const OverrideFormat_1 = require("./Metadata/OverrideFormat");
18
+ /**
19
+ * Provides default formats and kind of quantities from a given SchemaContext or SchemaLocater.
20
+ * @beta
21
+ */
22
+ class SchemaFormatsProvider {
23
+ _context;
24
+ _unitSystem;
25
+ _formatsRetrieved = new Set();
26
+ onFormatsChanged = new core_bentley_1.BeEvent();
27
+ /**
28
+ *
29
+ * @param contextOrLocater The SchemaContext or a different ISchemaLocater implementation used to retrieve the schema. The SchemaContext
30
+ * class implements the ISchemaLocater interface. If the provided locater is not a SchemaContext instance a new SchemaContext will be
31
+ * created and the locater will be added.
32
+ * @param unitSystem Used to lookup a default format through a schema specific algorithm, when the format retrieved is associated with a KindOfQuantity.
33
+ */
34
+ constructor(contextOrLocater, unitSystem) {
35
+ if (contextOrLocater instanceof Context_1.SchemaContext) {
36
+ this._context = contextOrLocater;
37
+ }
38
+ else {
39
+ this._context = new Context_1.SchemaContext();
40
+ this._context.addLocater(contextOrLocater);
41
+ }
42
+ this._unitSystem = unitSystem;
43
+ }
44
+ get context() { return this._context; }
45
+ get unitSystem() { return this._unitSystem; }
46
+ set unitSystem(unitSystem) {
47
+ this._unitSystem = unitSystem;
48
+ this.clear();
49
+ }
50
+ clear() {
51
+ const formatsChanged = Array.from(this._formatsRetrieved);
52
+ this._formatsRetrieved.clear();
53
+ this.onFormatsChanged.raiseEvent({ formatsChanged });
54
+ }
55
+ async getKindOfQuantityFormatFromSchema(itemKey) {
56
+ const kindOfQuantity = await this._context.getSchemaItem(itemKey, KindOfQuantity_1.KindOfQuantity);
57
+ if (!kindOfQuantity) {
58
+ return undefined;
59
+ }
60
+ // Find the first presentation format that matches the provided unit system.
61
+ const unitSystemGroupNames = getUnitSystemGroupNames(this._unitSystem);
62
+ const presentationFormats = kindOfQuantity.presentationFormats;
63
+ for (const system of unitSystemGroupNames) {
64
+ for (const lazyFormat of presentationFormats) {
65
+ const format = await lazyFormat;
66
+ const unit = await (format.units && format.units[0][0]);
67
+ if (!unit) {
68
+ continue;
69
+ }
70
+ const currentUnitSystem = unit.unitSystem;
71
+ if (currentUnitSystem && currentUnitSystem.name.toUpperCase() === system) {
72
+ this._formatsRetrieved.add(itemKey.fullName);
73
+ return (0, OverrideFormat_1.getFormatProps)(format);
74
+ }
75
+ }
76
+ }
77
+ // If no matching presentation format was found, use persistence unit format if it matches unit system.
78
+ const persistenceUnit = await kindOfQuantity.persistenceUnit;
79
+ const persistenceUnitSystem = await persistenceUnit?.unitSystem;
80
+ if (persistenceUnitSystem && unitSystemGroupNames.includes(persistenceUnitSystem.name.toUpperCase())) {
81
+ this._formatsRetrieved.add(itemKey.fullName);
82
+ return getPersistenceUnitFormatProps(persistenceUnit);
83
+ }
84
+ const defaultFormat = kindOfQuantity.defaultPresentationFormat;
85
+ if (!defaultFormat) {
86
+ return undefined;
87
+ }
88
+ this._formatsRetrieved.add(itemKey.fullName);
89
+ return (0, OverrideFormat_1.getFormatProps)(await defaultFormat);
90
+ }
91
+ /**
92
+ * Retrieves a Format from a SchemaContext. If the format is part of a KindOfQuantity, the first presentation format in the KindOfQuantity that matches the current unit system will be retrieved.
93
+ * If no presentation format matches the current unit system, the persistence unit format will be retrieved if it matches the current unit system.
94
+ * Else, the default presentation format will be retrieved.
95
+ * @param name The full name of the Format or KindOfQuantity.
96
+ * @returns
97
+ */
98
+ async getFormat(name) {
99
+ const [schemaName, schemaItemName] = SchemaItem_1.SchemaItem.parseFullName(name);
100
+ const schemaKey = new SchemaKey_1.SchemaKey(schemaName);
101
+ const schema = await this._context.getSchema(schemaKey);
102
+ if (!schema) {
103
+ return undefined;
104
+ }
105
+ const itemKey = new SchemaKey_1.SchemaItemKey(schemaItemName, schema.schemaKey);
106
+ if (schema.name === "Formats") {
107
+ const format = await this._context.getSchemaItem(itemKey, Format_1.Format);
108
+ if (!format) {
109
+ return undefined;
110
+ }
111
+ return format.toJSON(true);
112
+ }
113
+ return this.getKindOfQuantityFormatFromSchema(itemKey);
114
+ }
115
+ }
116
+ exports.SchemaFormatsProvider = SchemaFormatsProvider;
117
+ function getUnitSystemGroupNames(unitSystem) {
118
+ switch (unitSystem) {
119
+ case "imperial":
120
+ return ["IMPERIAL", "USCUSTOM", "INTERNATIONAL", "FINANCE"];
121
+ case "metric":
122
+ return ["SI", "METRIC", "INTERNATIONAL", "FINANCE"];
123
+ case "usCustomary":
124
+ return ["USCUSTOM", "INTERNATIONAL", "FINANCE"];
125
+ case "usSurvey":
126
+ return ["USSURVEY", "USCUSTOM", "INTERNATIONAL", "FINANCE"];
127
+ }
128
+ return [];
129
+ }
130
+ function getPersistenceUnitFormatProps(persistenceUnit) {
131
+ // Same as Format "DefaultRealU" in Formats ecschema
132
+ return {
133
+ formatTraits: ["keepSingleZero", "keepDecimalPoint", "showUnitLabel"],
134
+ precision: 6,
135
+ type: "Decimal",
136
+ composite: {
137
+ units: [
138
+ {
139
+ name: persistenceUnit.fullName,
140
+ label: persistenceUnit.label,
141
+ },
142
+ ],
143
+ },
144
+ };
145
+ }
146
+ //# sourceMappingURL=SchemaFormatsProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaFormatsProvider.js","sourceRoot":"","sources":["../../src/SchemaFormatsProvider.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 { ISchemaLocater, SchemaContext } from \"./Context\";\nimport { SchemaItemKey, SchemaKey } from \"./SchemaKey\";\nimport { SchemaItem } from \"./Metadata/SchemaItem\";\nimport { Format } from \"./Metadata/Format\";\nimport { SchemaItemFormatProps } from \"./Deserialization/JsonProps\";\nimport { BeEvent } from \"@itwin/core-bentley\";\nimport { KindOfQuantity } from \"./Metadata/KindOfQuantity\";\nimport { getFormatProps } from \"./Metadata/OverrideFormat\";\nimport { FormatProps, FormatsChangedArgs, FormatsProvider, UnitSystemKey } from \"@itwin/core-quantity\";\nimport { Unit } from \"./Metadata/Unit\";\nimport { InvertedUnit } from \"./Metadata/InvertedUnit\";\n\n/**\n * Provides default formats and kind of quantities from a given SchemaContext or SchemaLocater.\n * @beta\n */\nexport class SchemaFormatsProvider implements FormatsProvider {\n private _context: SchemaContext;\n private _unitSystem: UnitSystemKey;\n private _formatsRetrieved: Set<string> = new Set();\n public onFormatsChanged = new BeEvent<(args: FormatsChangedArgs) => void>();\n /**\n *\n * @param contextOrLocater The SchemaContext or a different ISchemaLocater implementation used to retrieve the schema. The SchemaContext\n * class implements the ISchemaLocater interface. If the provided locater is not a SchemaContext instance a new SchemaContext will be\n * created and the locater will be added.\n * @param unitSystem Used to lookup a default format through a schema specific algorithm, when the format retrieved is associated with a KindOfQuantity.\n */\n constructor(contextOrLocater: ISchemaLocater, unitSystem: UnitSystemKey) {\n if (contextOrLocater instanceof SchemaContext) {\n this._context = contextOrLocater;\n } else {\n this._context = new SchemaContext();\n this._context.addLocater(contextOrLocater);\n }\n this._unitSystem = unitSystem;\n }\n\n public get context() { return this._context; }\n public get unitSystem() { return this._unitSystem; }\n\n public set unitSystem(unitSystem: UnitSystemKey) {\n this._unitSystem = unitSystem;\n this.clear();\n }\n\n private clear(): void {\n const formatsChanged = Array.from(this._formatsRetrieved);\n this._formatsRetrieved.clear();\n this.onFormatsChanged.raiseEvent({ formatsChanged });\n }\n\n private async getKindOfQuantityFormatFromSchema(itemKey: SchemaItemKey): Promise<SchemaItemFormatProps | undefined> {\n const kindOfQuantity = await this._context.getSchemaItem(itemKey, KindOfQuantity);\n\n if (!kindOfQuantity) {\n return undefined;\n }\n\n // Find the first presentation format that matches the provided unit system.\n const unitSystemGroupNames = getUnitSystemGroupNames(this._unitSystem);\n const presentationFormats = kindOfQuantity.presentationFormats;\n for (const system of unitSystemGroupNames) {\n for (const lazyFormat of presentationFormats) {\n const format = await lazyFormat;\n const unit = await (format.units && format.units[0][0]);\n if (!unit) {\n continue;\n }\n const currentUnitSystem = unit.unitSystem;\n if (currentUnitSystem && currentUnitSystem.name.toUpperCase() === system) {\n this._formatsRetrieved.add(itemKey.fullName);\n return getFormatProps(format);\n }\n }\n }\n\n // If no matching presentation format was found, use persistence unit format if it matches unit system.\n const persistenceUnit = await kindOfQuantity.persistenceUnit;\n const persistenceUnitSystem = await persistenceUnit?.unitSystem;\n if (persistenceUnitSystem && unitSystemGroupNames.includes(persistenceUnitSystem.name.toUpperCase())) {\n this._formatsRetrieved.add(itemKey.fullName);\n return getPersistenceUnitFormatProps(persistenceUnit!);\n }\n\n const defaultFormat = kindOfQuantity.defaultPresentationFormat;\n if (!defaultFormat) {\n return undefined;\n }\n this._formatsRetrieved.add(itemKey.fullName);\n return getFormatProps(await defaultFormat);\n }\n\n\n /**\n * Retrieves a Format from a SchemaContext. If the format is part of a KindOfQuantity, the first presentation format in the KindOfQuantity that matches the current unit system will be retrieved.\n * If no presentation format matches the current unit system, the persistence unit format will be retrieved if it matches the current unit system.\n * Else, the default presentation format will be retrieved.\n * @param name The full name of the Format or KindOfQuantity.\n * @returns\n */\n public async getFormat(name: string): Promise<SchemaItemFormatProps | undefined> {\n const [schemaName, schemaItemName] = SchemaItem.parseFullName(name);\n const schemaKey = new SchemaKey(schemaName);\n const schema = await this._context.getSchema(schemaKey);\n if (!schema) {\n return undefined;\n }\n const itemKey = new SchemaItemKey(schemaItemName, schema.schemaKey);\n\n if (schema.name === \"Formats\") {\n const format = await this._context.getSchemaItem(itemKey, Format);\n if (!format) {\n return undefined;\n }\n return format.toJSON(true);\n }\n return this.getKindOfQuantityFormatFromSchema(itemKey);\n }\n}\n\nfunction getUnitSystemGroupNames(unitSystem?: UnitSystemKey) {\n switch (unitSystem) {\n case \"imperial\":\n return [\"IMPERIAL\", \"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"];\n case \"metric\":\n return [\"SI\", \"METRIC\", \"INTERNATIONAL\", \"FINANCE\"];\n case \"usCustomary\":\n return [\"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"];\n case \"usSurvey\":\n return [\"USSURVEY\", \"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"];\n }\n return [];\n}\n\nfunction getPersistenceUnitFormatProps(persistenceUnit: Unit | InvertedUnit): FormatProps {\n // Same as Format \"DefaultRealU\" in Formats ecschema\n return {\n formatTraits: [\"keepSingleZero\", \"keepDecimalPoint\", \"showUnitLabel\"],\n precision: 6,\n type: \"Decimal\",\n composite: {\n units: [\n {\n name: persistenceUnit.fullName,\n label: persistenceUnit.label,\n },\n ],\n },\n };\n}"]}
@@ -7,13 +7,13 @@ import { SchemaKey } from "./SchemaKey";
7
7
  /**
8
8
  * Gets the full schema Json for the input schema name or undefined if not found
9
9
  * @throws [Error] if the schema is found but json cannot be returned
10
- * @beta
10
+ * @public @preview
11
11
  */
12
12
  export type SchemaPropsGetter = (schemaName: string) => SchemaProps | undefined;
13
13
  /**
14
- * A ISchemaLocater implementation for locating and retrieving EC Schema objects using a function
14
+ * An ISchemaLocater implementation for locating and retrieving EC Schema objects using a function
15
15
  * that returns the Schema Json for a given schema name
16
- * @beta
16
+ * @public @preview
17
17
  */
18
18
  export declare class SchemaJsonLocater implements ISchemaLocater {
19
19
  private _getSchema;
@@ -22,21 +22,21 @@ export declare class SchemaJsonLocater implements ISchemaLocater {
22
22
  * @param schemaKey The [SchemaKey] that identifies the schema.
23
23
  * @param matchType The [SchemaMatchType] to used for comparing schema versions.
24
24
  * @param context The [SchemaContext] used to facilitate schema location.
25
- * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.
25
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.
26
26
  */
27
- getSchema<T extends Schema>(schemaKey: Readonly<SchemaKey>, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined>;
27
+ getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined>;
28
28
  /**
29
29
  * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.
30
30
  * @param schemaKey The SchemaKey describing the schema to get from the cache.
31
31
  * @param matchType The match type to use when locating the schema
32
32
  */
33
- getSchemaInfo(schemaKey: Readonly<SchemaKey>, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined>;
33
+ getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined>;
34
34
  /** Get a schema by [SchemaKey] synchronously.
35
35
  * @param schemaKey The [SchemaKey] that identifies the schema.
36
- * * @param matchType The [SchemaMatchType] to used for comparing schema versions.
36
+ * @param matchType The [SchemaMatchType] to used for comparing schema versions.
37
37
  * @param context The [SchemaContext] used to facilitate schema location.
38
38
  * @throws [Error]($ecschema-metadata) if the schema exists, but cannot be loaded.
39
39
  */
40
- getSchemaSync<T extends Schema>(schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, context: SchemaContext): T | undefined;
40
+ getSchemaSync(schemaKey: SchemaKey, _matchType: SchemaMatchType, context: SchemaContext): Schema | undefined;
41
41
  }
42
42
  //# sourceMappingURL=SchemaJsonLocater.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaJsonLocater.d.ts","sourceRoot":"","sources":["../../src/SchemaJsonLocater.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAEhF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACnC,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,iBAAiB;IAExD;;;;;OAKG;IACU,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAKpJ;;;;OAIG;IACU,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAY/I;;;;;OAKG;IACI,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,CAAC,GAAG,SAAS;CAS3I"}
1
+ {"version":3,"file":"SchemaJsonLocater.d.ts","sourceRoot":"","sources":["../../src/SchemaJsonLocater.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;AAEhF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,cAAc;IACnC,OAAO,CAAC,UAAU;gBAAV,UAAU,EAAE,iBAAiB;IAExD;;;;;OAKG;IACU,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAK7H;;;;OAIG;IACU,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAYrI;;;;;OAKG;IACI,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS;CAOpH"}
@@ -8,11 +8,12 @@ exports.SchemaJsonLocater = void 0;
8
8
  const Context_1 = require("./Context");
9
9
  const Schema_1 = require("./Metadata/Schema");
10
10
  /**
11
- * A ISchemaLocater implementation for locating and retrieving EC Schema objects using a function
11
+ * An ISchemaLocater implementation for locating and retrieving EC Schema objects using a function
12
12
  * that returns the Schema Json for a given schema name
13
- * @beta
13
+ * @public @preview
14
14
  */
15
15
  class SchemaJsonLocater {
16
+ _getSchema;
16
17
  constructor(_getSchema) {
17
18
  this._getSchema = _getSchema;
18
19
  }
@@ -20,11 +21,11 @@ class SchemaJsonLocater {
20
21
  * @param schemaKey The [SchemaKey] that identifies the schema.
21
22
  * @param matchType The [SchemaMatchType] to used for comparing schema versions.
22
23
  * @param context The [SchemaContext] used to facilitate schema location.
23
- * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.
24
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.
24
25
  */
25
26
  async getSchema(schemaKey, matchType, context) {
26
27
  await this.getSchemaInfo(schemaKey, matchType, context);
27
- return await context.getCachedSchema(schemaKey, matchType);
28
+ return context.getCachedSchema(schemaKey, matchType);
28
29
  }
29
30
  /**
30
31
  * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.
@@ -42,7 +43,7 @@ class SchemaJsonLocater {
42
43
  }
43
44
  /** Get a schema by [SchemaKey] synchronously.
44
45
  * @param schemaKey The [SchemaKey] that identifies the schema.
45
- * * @param matchType The [SchemaMatchType] to used for comparing schema versions.
46
+ * @param matchType The [SchemaMatchType] to used for comparing schema versions.
46
47
  * @param context The [SchemaContext] used to facilitate schema location.
47
48
  * @throws [Error]($ecschema-metadata) if the schema exists, but cannot be loaded.
48
49
  */
@@ -50,8 +51,7 @@ class SchemaJsonLocater {
50
51
  const schemaProps = this._getSchema(schemaKey.name);
51
52
  if (!schemaProps)
52
53
  return undefined;
53
- context = context ? context : new Context_1.SchemaContext();
54
- return Schema_1.Schema.fromJsonSync(schemaProps, context);
54
+ return Schema_1.Schema.fromJsonSync(schemaProps, context || new Context_1.SchemaContext());
55
55
  }
56
56
  }
57
57
  exports.SchemaJsonLocater = SchemaJsonLocater;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaJsonLocater.js","sourceRoot":"","sources":["../../src/SchemaJsonLocater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,uCAA0D;AAI1D,8CAA2C;AAU3C;;;;GAIG;AACH,MAAa,iBAAiB;IAC5B,YAA2B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAI,CAAC;IAE7D;;;;;OAKG;IACI,KAAK,CAAC,SAAS,CAAmB,SAA8B,EAAE,SAA0B,EAAE,OAAsB;QACzH,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAM,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,SAA8B,EAAE,SAA0B,EAAE,OAAsB;QAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW;YACd,OAAO,SAAS,CAAC;QAEnB,MAAM,UAAU,GAAG,MAAM,eAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;YAChF,OAAO,UAAU,CAAC;QAEpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAmB,SAA8B,EAAE,UAA2B,EAAE,OAAsB;QACxH,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW;YACd,OAAO,SAAS,CAAC;QAEnB,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,uBAAa,EAAE,CAAC;QAClD,OAAO,eAAM,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAM,CAAC;IACxD,CAAC;CAEF;AA9CD,8CA8CC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { ISchemaLocater, SchemaContext } from \"./Context\";\r\nimport { SchemaProps } from \"./Deserialization/JsonProps\";\r\nimport { SchemaMatchType } from \"./ECObjects\";\r\nimport { SchemaInfo } from \"./Interfaces\";\r\nimport { Schema } from \"./Metadata/Schema\";\r\nimport { SchemaKey } from \"./SchemaKey\";\r\n\r\n/**\r\n * Gets the full schema Json for the input schema name or undefined if not found\r\n * @throws [Error] if the schema is found but json cannot be returned\r\n * @beta\r\n */\r\nexport type SchemaPropsGetter = (schemaName: string) => SchemaProps | undefined;\r\n\r\n/**\r\n * A ISchemaLocater implementation for locating and retrieving EC Schema objects using a function\r\n * that returns the Schema Json for a given schema name\r\n * @beta\r\n */\r\nexport class SchemaJsonLocater implements ISchemaLocater {\r\n public constructor(private _getSchema: SchemaPropsGetter) { }\r\n\r\n /** Get a schema by [SchemaKey]\r\n * @param schemaKey The [SchemaKey] that identifies the schema.\r\n * @param matchType The [SchemaMatchType] to used for comparing schema versions.\r\n * @param context The [SchemaContext] used to facilitate schema location.\r\n * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.\r\n */\r\n public async getSchema<T extends Schema>(schemaKey: Readonly<SchemaKey>, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined> {\r\n await this.getSchemaInfo(schemaKey, matchType, context);\r\n return await context.getCachedSchema(schemaKey, matchType) as T;\r\n }\r\n\r\n /**\r\n * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.\r\n * @param schemaKey The SchemaKey describing the schema to get from the cache.\r\n * @param matchType The match type to use when locating the schema\r\n */\r\n public async getSchemaInfo(schemaKey: Readonly<SchemaKey>, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n const schemaProps = this._getSchema(schemaKey.name);\r\n if (!schemaProps)\r\n return undefined;\r\n\r\n const schemaInfo = await Schema.startLoadingFromJson(schemaProps, context);\r\n if (schemaInfo !== undefined && schemaInfo.schemaKey.matches(schemaKey, matchType))\r\n return schemaInfo;\r\n\r\n return undefined;\r\n }\r\n\r\n /** Get a schema by [SchemaKey] synchronously.\r\n * @param schemaKey The [SchemaKey] that identifies the schema.\r\n * * @param matchType The [SchemaMatchType] to used for comparing schema versions.\r\n * @param context The [SchemaContext] used to facilitate schema location.\r\n * @throws [Error]($ecschema-metadata) if the schema exists, but cannot be loaded.\r\n */\r\n public getSchemaSync<T extends Schema>(schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, context: SchemaContext): T | undefined {\r\n const schemaProps = this._getSchema(schemaKey.name);\r\n if (!schemaProps)\r\n return undefined;\r\n\r\n context = context ? context : new SchemaContext();\r\n return Schema.fromJsonSync(schemaProps, context) as T;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaJsonLocater.js","sourceRoot":"","sources":["../../src/SchemaJsonLocater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,uCAA0D;AAI1D,8CAA2C;AAU3C;;;;GAIG;AACH,MAAa,iBAAiB;IACD;IAA3B,YAA2B,UAA6B;QAA7B,eAAU,GAAV,UAAU,CAAmB;IAAI,CAAC;IAE7D;;;;;OAKG;IACI,KAAK,CAAC,SAAS,CAAC,SAAoB,EAAE,SAA0B,EAAE,OAAsB;QAC7F,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACxD,OAAO,OAAO,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,SAA0B,EAAE,OAAsB;QACjG,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW;YACd,OAAO,SAAS,CAAC;QAEnB,MAAM,UAAU,GAAG,MAAM,eAAM,CAAC,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3E,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC;YAChF,OAAO,UAAU,CAAC;QAEpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,SAAoB,EAAE,UAA2B,EAAE,OAAsB;QAC5F,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW;YACd,OAAO,SAAS,CAAC;QAEnB,OAAO,eAAM,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,IAAI,IAAI,uBAAa,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF;AA5CD,8CA4CC","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\nimport { ISchemaLocater, SchemaContext } from \"./Context\";\nimport { SchemaProps } from \"./Deserialization/JsonProps\";\nimport { SchemaMatchType } from \"./ECObjects\";\nimport { SchemaInfo } from \"./Interfaces\";\nimport { Schema } from \"./Metadata/Schema\";\nimport { SchemaKey } from \"./SchemaKey\";\n\n/**\n * Gets the full schema Json for the input schema name or undefined if not found\n * @throws [Error] if the schema is found but json cannot be returned\n * @public @preview\n */\nexport type SchemaPropsGetter = (schemaName: string) => SchemaProps | undefined;\n\n/**\n * An ISchemaLocater implementation for locating and retrieving EC Schema objects using a function\n * that returns the Schema Json for a given schema name\n * @public @preview\n */\nexport class SchemaJsonLocater implements ISchemaLocater {\n public constructor(private _getSchema: SchemaPropsGetter) { }\n\n /** Get a schema by [SchemaKey]\n * @param schemaKey The [SchemaKey] that identifies the schema.\n * @param matchType The [SchemaMatchType] to used for comparing schema versions.\n * @param context The [SchemaContext] used to facilitate schema location.\n * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.\n */\n public async getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined> {\n await this.getSchemaInfo(schemaKey, matchType, context);\n return context.getCachedSchema(schemaKey, matchType);\n }\n\n /**\n * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.\n * @param schemaKey The SchemaKey describing the schema to get from the cache.\n * @param matchType The match type to use when locating the schema\n */\n public async getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\n const schemaProps = this._getSchema(schemaKey.name);\n if (!schemaProps)\n return undefined;\n\n const schemaInfo = await Schema.startLoadingFromJson(schemaProps, context);\n if (schemaInfo !== undefined && schemaInfo.schemaKey.matches(schemaKey, matchType))\n return schemaInfo;\n\n return undefined;\n }\n\n /** Get a schema by [SchemaKey] synchronously.\n * @param schemaKey The [SchemaKey] that identifies the schema.\n * @param matchType The [SchemaMatchType] to used for comparing schema versions.\n * @param context The [SchemaContext] used to facilitate schema location.\n * @throws [Error]($ecschema-metadata) if the schema exists, but cannot be loaded.\n */\n public getSchemaSync(schemaKey: SchemaKey, _matchType: SchemaMatchType, context: SchemaContext): Schema | undefined {\n const schemaProps = this._getSchema(schemaKey.name);\n if (!schemaProps)\n return undefined;\n\n return Schema.fromJsonSync(schemaProps, context || new SchemaContext());\n }\n}\n"]}
@@ -4,14 +4,20 @@
4
4
  import { SchemaKeyProps } from "./Deserialization/JsonProps";
5
5
  import { SchemaMatchType } from "./ECObjects";
6
6
  /**
7
- * @beta
7
+ * @public @preview
8
8
  */
9
9
  export declare class ECVersion {
10
10
  private _read;
11
11
  private _write;
12
12
  private _minor;
13
13
  /**
14
- * The constructor will throw an ECObjectsError if any of the parameters below are above the threshold.
14
+ * Using a version with all zero is invalid
15
+ * for a schema, but it can be used to indicate
16
+ * "no version has been specified" when locating things
17
+ */
18
+ static readonly NO_VERSION: ECVersion;
19
+ /**
20
+ * The constructor will throw an ECSchemaError if any of the parameters below are above the threshold.
15
21
  * @param read Can support up to 999.
16
22
  * @param write Can support up to 999.
17
23
  * @param minor Can support up to 9999999.
@@ -41,11 +47,11 @@ export declare class ECVersion {
41
47
  }
42
48
  /**
43
49
  * The SchemaKey contains a Schemas name and version.
44
- * @beta
50
+ * @public @preview
45
51
  */
46
52
  export declare class SchemaKey {
47
53
  private _name;
48
- protected _version: ECVersion;
54
+ private _version;
49
55
  constructor(name: string, version: ECVersion);
50
56
  constructor(name: string, readVersion?: number, writeVersion?: number, minorVersion?: number);
51
57
  get version(): ECVersion;
@@ -76,7 +82,7 @@ export declare class SchemaKey {
76
82
  * @param rhs The SchemaKey to compare with
77
83
  * @param matchType The match type to use for comparison.
78
84
  */
79
- matches(rhs: Readonly<SchemaKey>, matchType?: SchemaMatchType): boolean;
85
+ matches(rhs: SchemaKey, matchType?: SchemaMatchType): boolean;
80
86
  /**
81
87
  * Deserializes a SchemaKeyProps JSON object into a SchemaKey object.
82
88
  * @param props SchemaKeyProps
@@ -90,11 +96,11 @@ export declare class SchemaKey {
90
96
  }
91
97
  /**
92
98
  * The SchemaItemKey contains a SchemaItem's name and SchemaKey.
93
- * @beta
99
+ * @public @preview
94
100
  */
95
101
  export declare class SchemaItemKey {
96
102
  private _name;
97
- protected _schemaKey: SchemaKey;
103
+ private _schemaKey;
98
104
  constructor(name: string, schema: SchemaKey);
99
105
  get schemaKey(): SchemaKey;
100
106
  get name(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaKey.d.ts","sourceRoot":"","sources":["../../src/SchemaKey.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;;;OAMG;gBACS,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAYzD,IAAW,IAAI,WAAyB;IACxC,IAAW,KAAK,WAA0B;IAC1C,IAAW,KAAK,WAA0B;IAE1C;;;;OAIG;IACI,QAAQ,CAAC,SAAS,GAAE,OAAc,GAAG,MAAM;IAWlD;;;OAGG;WACW,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS;IAc1D;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM;CASvC;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;gBAIlB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;gBAChC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAS5F,IAAW,OAAO,cAA4B;IAC9C,IAAW,IAAI,WAA8B;IAC7C,IAAW,WAAW,WAAgC;IACtD,IAAW,YAAY,WAAiC;IACxD,IAAW,YAAY,WAAiC;IAExD;;;;OAIG;IACI,QAAQ,CAAC,SAAS,GAAE,OAAc;WAE3B,WAAW,CAAC,QAAQ,EAAE,MAAM;IAY1C;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO;IAUlE;;;;OAIG;IACI,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM;IAI/C;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAE,eAAuC,GAAG,OAAO;IA2BrG;;;;OAIG;WACW,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IAIxD;;OAEG;IACI,MAAM,IAAI,cAAc;CAQhC;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC;gBAEpB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAK3C,IAAW,SAAS,cAA8B;IAClD,IAAW,IAAI,WAA8B;IAE7C,IAAW,UAAU,WAAkC;IAEvD,2DAA2D;IAC3D,IAAW,QAAQ,WAAgD;IAEnE;;;OAGG;IAEI,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAUpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAK9C"}
1
+ {"version":3,"file":"SchemaKey.d.ts","sourceRoot":"","sources":["../../src/SchemaKey.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAI9C;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,MAAM,CAAa;IAE3B;;;;OAIG;IACH,gBAAuB,UAAU,YAA0B;IAE3D;;;;;;OAMG;gBACS,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAYzD,IAAW,IAAI,WAAyB;IACxC,IAAW,KAAK,WAA0B;IAC1C,IAAW,KAAK,WAA0B;IAE1C;;;;OAIG;IACI,QAAQ,CAAC,SAAS,GAAE,OAAc,GAAG,MAAM;IAWlD;;;OAGG;WACW,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS;IAc1D;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM;CASvC;AAED;;;GAGG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAY;gBAIhB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;gBAChC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;IAS5F,IAAW,OAAO,cAA4B;IAC9C,IAAW,IAAI,WAA8B;IAC7C,IAAW,WAAW,WAAgC;IACtD,IAAW,YAAY,WAAiC;IACxD,IAAW,YAAY,WAAiC;IAExD;;;;OAIG;IACI,QAAQ,CAAC,SAAS,GAAE,OAAc;WAE3B,WAAW,CAAC,QAAQ,EAAE,MAAM;IAY1C;;;OAGG;IACI,aAAa,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO;IAUlE;;;;OAIG;IACI,gBAAgB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM;IAI/C;;;;OAIG;IACI,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,GAAE,eAAuC,GAAG,OAAO;IA2B3F;;;;OAIG;WACW,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS;IAIxD;;OAEG;IACI,MAAM,IAAI,cAAc;CAQhC;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAY;gBAElB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS;IAK3C,IAAW,SAAS,cAA8B;IAClD,IAAW,IAAI,WAA8B;IAE7C,IAAW,UAAU,WAAkC;IAEvD,2DAA2D;IAC3D,IAAW,QAAQ,WAAgD;IAEnE;;;OAGG;IAEI,OAAO,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO;IAUpC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAK9C"}
@@ -12,20 +12,26 @@ const ECObjects_1 = require("./ECObjects");
12
12
  const Exception_1 = require("./Exception");
13
13
  const ECName_1 = require("./ECName");
14
14
  /**
15
- * @beta
15
+ * @public @preview
16
16
  */
17
17
  class ECVersion {
18
+ _read = 0;
19
+ _write = 0;
20
+ _minor = 0;
18
21
  /**
19
- * The constructor will throw an ECObjectsError if any of the parameters below are above the threshold.
22
+ * Using a version with all zero is invalid
23
+ * for a schema, but it can be used to indicate
24
+ * "no version has been specified" when locating things
25
+ */
26
+ static NO_VERSION = new ECVersion(0, 0, 0);
27
+ /**
28
+ * The constructor will throw an ECSchemaError if any of the parameters below are above the threshold.
20
29
  * @param read Can support up to 999.
21
30
  * @param write Can support up to 999.
22
31
  * @param minor Can support up to 9999999.
23
32
  *
24
33
  */
25
34
  constructor(read, write, minor) {
26
- this._read = 0;
27
- this._write = 0;
28
- this._minor = 0;
29
35
  if (undefined !== read)
30
36
  this._read = read;
31
37
  if (undefined !== write)
@@ -33,7 +39,7 @@ class ECVersion {
33
39
  if (undefined !== minor)
34
40
  this._minor = minor;
35
41
  if (this._read > 999 || this._read < 0 || this._write > 999 || this._write < 0 || this._minor > 9999999 || this._minor < 0)
36
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECVersion);
42
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECVersion);
37
43
  }
38
44
  get read() { return this._read; }
39
45
  get write() { return this._write; }
@@ -58,11 +64,11 @@ class ECVersion {
58
64
  static fromString(versionString) {
59
65
  const [read, write, minor] = versionString.split(".");
60
66
  if (!read)
61
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);
67
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);
62
68
  if (!write)
63
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECVersion, `The write version is missing from version string, ${versionString}`);
69
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECVersion, `The write version is missing from version string, ${versionString}`);
64
70
  if (!minor)
65
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);
71
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);
66
72
  return new ECVersion(+read, +write, +minor);
67
73
  }
68
74
  /**
@@ -81,9 +87,11 @@ class ECVersion {
81
87
  exports.ECVersion = ECVersion;
82
88
  /**
83
89
  * The SchemaKey contains a Schemas name and version.
84
- * @beta
90
+ * @public @preview
85
91
  */
86
92
  class SchemaKey {
93
+ _name;
94
+ _version;
87
95
  constructor(name, readOrVersion, writeVersion, minorVersion) {
88
96
  this._name = new ECName_1.ECName(name);
89
97
  if (readOrVersion !== undefined && typeof (readOrVersion) !== "number")
@@ -105,7 +113,7 @@ class SchemaKey {
105
113
  static parseString(fullName) {
106
114
  const keyPieces = fullName.split(".");
107
115
  if (keyPieces.length !== 4)
108
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.InvalidECName);
116
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.InvalidECName);
109
117
  const schemaName = keyPieces[0];
110
118
  const readVer = Number(keyPieces[1]);
111
119
  const writeVer = Number(keyPieces[2]);
@@ -182,9 +190,11 @@ class SchemaKey {
182
190
  exports.SchemaKey = SchemaKey;
183
191
  /**
184
192
  * The SchemaItemKey contains a SchemaItem's name and SchemaKey.
185
- * @beta
193
+ * @public @preview
186
194
  */
187
195
  class SchemaItemKey {
196
+ _name;
197
+ _schemaKey;
188
198
  constructor(name, schema) {
189
199
  this._name = new ECName_1.ECName(name);
190
200
  this._schemaKey = schema;
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaKey.js","sourceRoot":"","sources":["../../src/SchemaKey.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 { SchemaKeyProps } from \"./Deserialization/JsonProps\";\r\nimport { SchemaMatchType } from \"./ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"./Exception\";\r\nimport { ECName } from \"./ECName\";\r\n\r\n/**\r\n * @beta\r\n */\r\nexport class ECVersion {\r\n private _read: number = 0;\r\n private _write: number = 0;\r\n private _minor: number = 0;\r\n\r\n /**\r\n * The constructor will throw an ECObjectsError if any of the parameters below are above the threshold.\r\n * @param read Can support up to 999.\r\n * @param write Can support up to 999.\r\n * @param minor Can support up to 9999999.\r\n *\r\n */\r\n constructor(read?: number, write?: number, minor?: number) {\r\n if (undefined !== read)\r\n this._read = read;\r\n if (undefined !== write)\r\n this._write = write;\r\n if (undefined !== minor)\r\n this._minor = minor;\r\n\r\n if (this._read > 999 || this._read < 0 || this._write > 999 || this._write < 0 || this._minor > 9999999 || this._minor < 0)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion);\r\n }\r\n\r\n public get read() { return this._read; }\r\n public get write() { return this._write; }\r\n public get minor() { return this._minor; }\r\n\r\n /**\r\n * Creates a string, in the format 'RR.ww.mm', representing this ECVersion.\r\n * @note The default is to pad with zeroes.\r\n * @param padZeroes If true, the returned string will strictly follow `RR.ww.mm` and add leading zeroes if necessary.\r\n */\r\n public toString(padZeroes: boolean = true): string {\r\n if (!padZeroes)\r\n return `${this.read}.${this.write}.${this.minor}`;\r\n\r\n const padWithZeroes = (num: number) => {\r\n return (num < 10 ? \"0\" : \"\") + num;\r\n };\r\n\r\n return `${padWithZeroes(this.read)}.${padWithZeroes(this.write)}.${padWithZeroes(this.minor)}`;\r\n }\r\n\r\n /**\r\n * Given a valid version string the\r\n * @param versionString A valid version string of the format, 'RR.ww.mm'.\r\n */\r\n public static fromString(versionString: string): ECVersion {\r\n const [read, write, minor] = versionString.split(\".\");\r\n if (!read)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);\r\n\r\n if (!write)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The write version is missing from version string, ${versionString}`);\r\n\r\n if (!minor)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);\r\n\r\n return new ECVersion(+read, +write, +minor);\r\n }\r\n\r\n /**\r\n * Compares two schema versions.\r\n * @param rhs The schema to compare.\r\n * @return A negative number if this schema version is less than the given version, a positive number if greater, and 0 if are equivalent.\r\n */\r\n public compare(rhv: ECVersion): number {\r\n if (this.read !== rhv.read)\r\n return this.read - rhv.read;\r\n\r\n if (this.write !== rhv.write)\r\n return this.write - rhv.write;\r\n\r\n return this.minor - rhv.minor;\r\n }\r\n}\r\n\r\n/**\r\n * The SchemaKey contains a Schemas name and version.\r\n * @beta\r\n */\r\nexport class SchemaKey {\r\n private _name: ECName;\r\n protected _version: ECVersion;\r\n // public checksum: number;\r\n // TODO: need to add a checksum\r\n\r\n constructor(name: string, version: ECVersion);\r\n constructor(name: string, readVersion?: number, writeVersion?: number, minorVersion?: number);\r\n constructor(name: string, readOrVersion?: number | ECVersion, writeVersion?: number, minorVersion?: number) {\r\n this._name = new ECName(name);\r\n if (readOrVersion !== undefined && typeof (readOrVersion) !== \"number\")\r\n this._version = readOrVersion;\r\n else\r\n this._version = new ECVersion(readOrVersion, writeVersion, minorVersion);\r\n }\r\n\r\n public get version() { return this._version; }\r\n public get name() { return this._name.name; }\r\n public get readVersion() { return this.version.read; }\r\n public get writeVersion() { return this.version.write; }\r\n public get minorVersion() { return this.version.minor; }\r\n\r\n /**\r\n * Creates a string, in the format 'RR.ww.mm', representing this SchemaKey.\r\n * @note The default is to pad the full name with zeroes.\r\n * @param padZeroes If true, the returned string will strictly follow `Name.RR.ww.mm` and add leading zeroes if necessary.\r\n */\r\n public toString(padZeroes: boolean = true) { return `${this.name}.${this.version.toString(padZeroes)}`; }\r\n\r\n public static parseString(fullName: string) {\r\n const keyPieces = fullName.split(\".\");\r\n if (keyPieces.length !== 4)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECName);\r\n\r\n const schemaName = keyPieces[0];\r\n const readVer = Number(keyPieces[1]);\r\n const writeVer = Number(keyPieces[2]);\r\n const minorVer = Number(keyPieces[3]);\r\n return new SchemaKey(schemaName, new ECVersion(readVer, writeVer, minorVer));\r\n }\r\n\r\n /**\r\n * Compares two schema names, case-insensitive.\r\n * @return True if they match; otherwise, false.\r\n */\r\n public compareByName(rhs: SchemaKey | string | undefined): boolean {\r\n if (undefined === rhs)\r\n return false;\r\n\r\n if (typeof (rhs) === \"string\")\r\n return rhs.toLowerCase() === this.name.toLowerCase();\r\n\r\n return rhs.name.toLowerCase() === this.name.toLowerCase();\r\n }\r\n\r\n /**\r\n * Compares two schema versions.\r\n * @param rhs The schema to compare.\r\n * @return A negative number if this schema version is less than the given version, a positive number if greater, and 0 if are equivalent.\r\n */\r\n public compareByVersion(rhs: SchemaKey): number {\r\n return this.version.compare(rhs.version);\r\n }\r\n\r\n /**\r\n *\r\n * @param rhs The SchemaKey to compare with\r\n * @param matchType The match type to use for comparison.\r\n */\r\n public matches(rhs: Readonly<SchemaKey>, matchType: SchemaMatchType = SchemaMatchType.Exact): boolean {\r\n switch (matchType) {\r\n case SchemaMatchType.Identical:\r\n case SchemaMatchType.Exact:\r\n return this.compareByName(rhs.name) && this.readVersion === rhs.readVersion &&\r\n this.writeVersion === rhs.writeVersion && this.minorVersion === rhs.minorVersion;\r\n case SchemaMatchType.LatestReadCompatible:\r\n if (!this.compareByName(rhs.name))\r\n return false;\r\n\r\n if (rhs.readVersion !== this.readVersion)\r\n return false;\r\n\r\n if (this.writeVersion === rhs.writeVersion)\r\n return this.minorVersion >= rhs.minorVersion;\r\n\r\n return this.writeVersion > rhs.writeVersion;\r\n case SchemaMatchType.LatestWriteCompatible:\r\n return this.compareByName(rhs.name) && this.readVersion === rhs.readVersion &&\r\n this.writeVersion === rhs.writeVersion && this.minorVersion >= rhs.minorVersion;\r\n case SchemaMatchType.Latest:\r\n return this.compareByName(rhs.name);\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Deserializes a SchemaKeyProps JSON object into a SchemaKey object.\r\n * @param props SchemaKeyProps\r\n * @returns A SchemaKey object.\r\n */\r\n public static fromJSON(props: SchemaKeyProps): SchemaKey {\r\n return new SchemaKey(props.name, props.read, props.write, props.minor);\r\n }\r\n\r\n /**\r\n * Save this SchemaKey's properties to an object for serializing to JSON.\r\n */\r\n public toJSON(): SchemaKeyProps {\r\n return {\r\n name: this.name,\r\n read: this.readVersion,\r\n write: this.writeVersion,\r\n minor: this.minorVersion,\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * The SchemaItemKey contains a SchemaItem's name and SchemaKey.\r\n * @beta\r\n */\r\nexport class SchemaItemKey {\r\n private _name: ECName;\r\n protected _schemaKey: SchemaKey;\r\n\r\n constructor(name: string, schema: SchemaKey) {\r\n this._name = new ECName(name);\r\n this._schemaKey = schema;\r\n }\r\n\r\n public get schemaKey() { return this._schemaKey; }\r\n public get name() { return this._name.name; }\r\n\r\n public get schemaName() { return this.schemaKey.name; }\r\n\r\n /** Returns the name in the format, {schemaName}.{name}. */\r\n public get fullName() { return `${this.schemaName}.${this.name}`; }\r\n\r\n /**\r\n * Checks whether this SchemaItemKey matches the one provided.\r\n * @param rhs The SchemaItemKey to compare to this.\r\n */\r\n // TODO: Need to add a match type\r\n public matches(rhs: SchemaItemKey): boolean {\r\n if (rhs.name !== this.name)\r\n return false;\r\n\r\n if (!rhs.schemaKey.matches(this.schemaKey, SchemaMatchType.Latest))\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public matchesFullName(name: string): boolean {\r\n const schemaVersion = this.schemaKey.version.toString().replace(/\\./g, \"\\\\.\");\r\n const fullNameRegex = new RegExp(`^${this.schemaName}(\\\\.${schemaVersion})?[.:]${this.name}$`, \"i\");\r\n return fullNameRegex.test(name);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaKey.js","sourceRoot":"","sources":["../../src/SchemaKey.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 { SchemaKeyProps } from \"./Deserialization/JsonProps\";\nimport { SchemaMatchType } from \"./ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"./Exception\";\nimport { ECName } from \"./ECName\";\n\n/**\n * @public @preview\n */\nexport class ECVersion {\n private _read: number = 0;\n private _write: number = 0;\n private _minor: number = 0;\n\n /**\n * Using a version with all zero is invalid\n * for a schema, but it can be used to indicate\n * \"no version has been specified\" when locating things\n */\n public static readonly NO_VERSION = new ECVersion(0, 0, 0);\n\n /**\n * The constructor will throw an ECSchemaError if any of the parameters below are above the threshold.\n * @param read Can support up to 999.\n * @param write Can support up to 999.\n * @param minor Can support up to 9999999.\n *\n */\n constructor(read?: number, write?: number, minor?: number) {\n if (undefined !== read)\n this._read = read;\n if (undefined !== write)\n this._write = write;\n if (undefined !== minor)\n this._minor = minor;\n\n if (this._read > 999 || this._read < 0 || this._write > 999 || this._write < 0 || this._minor > 9999999 || this._minor < 0)\n throw new ECSchemaError(ECSchemaStatus.InvalidECVersion);\n }\n\n public get read() { return this._read; }\n public get write() { return this._write; }\n public get minor() { return this._minor; }\n\n /**\n * Creates a string, in the format 'RR.ww.mm', representing this ECVersion.\n * @note The default is to pad with zeroes.\n * @param padZeroes If true, the returned string will strictly follow `RR.ww.mm` and add leading zeroes if necessary.\n */\n public toString(padZeroes: boolean = true): string {\n if (!padZeroes)\n return `${this.read}.${this.write}.${this.minor}`;\n\n const padWithZeroes = (num: number) => {\n return (num < 10 ? \"0\" : \"\") + num;\n };\n\n return `${padWithZeroes(this.read)}.${padWithZeroes(this.write)}.${padWithZeroes(this.minor)}`;\n }\n\n /**\n * Given a valid version string the\n * @param versionString A valid version string of the format, 'RR.ww.mm'.\n */\n public static fromString(versionString: string): ECVersion {\n const [read, write, minor] = versionString.split(\".\");\n if (!read)\n throw new ECSchemaError(ECSchemaStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);\n\n if (!write)\n throw new ECSchemaError(ECSchemaStatus.InvalidECVersion, `The write version is missing from version string, ${versionString}`);\n\n if (!minor)\n throw new ECSchemaError(ECSchemaStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);\n\n return new ECVersion(+read, +write, +minor);\n }\n\n /**\n * Compares two schema versions.\n * @param rhs The schema to compare.\n * @return A negative number if this schema version is less than the given version, a positive number if greater, and 0 if are equivalent.\n */\n public compare(rhv: ECVersion): number {\n if (this.read !== rhv.read)\n return this.read - rhv.read;\n\n if (this.write !== rhv.write)\n return this.write - rhv.write;\n\n return this.minor - rhv.minor;\n }\n}\n\n/**\n * The SchemaKey contains a Schemas name and version.\n * @public @preview\n */\nexport class SchemaKey {\n private _name: ECName;\n private _version: ECVersion;\n // public checksum: number;\n // TODO: need to add a checksum\n\n constructor(name: string, version: ECVersion);\n constructor(name: string, readVersion?: number, writeVersion?: number, minorVersion?: number);\n constructor(name: string, readOrVersion?: number | ECVersion, writeVersion?: number, minorVersion?: number) {\n this._name = new ECName(name);\n if (readOrVersion !== undefined && typeof (readOrVersion) !== \"number\")\n this._version = readOrVersion;\n else\n this._version = new ECVersion(readOrVersion, writeVersion, minorVersion);\n }\n\n public get version() { return this._version; }\n public get name() { return this._name.name; }\n public get readVersion() { return this.version.read; }\n public get writeVersion() { return this.version.write; }\n public get minorVersion() { return this.version.minor; }\n\n /**\n * Creates a string, in the format 'RR.ww.mm', representing this SchemaKey.\n * @note The default is to pad the full name with zeroes.\n * @param padZeroes If true, the returned string will strictly follow `Name.RR.ww.mm` and add leading zeroes if necessary.\n */\n public toString(padZeroes: boolean = true) { return `${this.name}.${this.version.toString(padZeroes)}`; }\n\n public static parseString(fullName: string) {\n const keyPieces = fullName.split(\".\");\n if (keyPieces.length !== 4)\n throw new ECSchemaError(ECSchemaStatus.InvalidECName);\n\n const schemaName = keyPieces[0];\n const readVer = Number(keyPieces[1]);\n const writeVer = Number(keyPieces[2]);\n const minorVer = Number(keyPieces[3]);\n return new SchemaKey(schemaName, new ECVersion(readVer, writeVer, minorVer));\n }\n\n /**\n * Compares two schema names, case-insensitive.\n * @return True if they match; otherwise, false.\n */\n public compareByName(rhs: SchemaKey | string | undefined): boolean {\n if (undefined === rhs)\n return false;\n\n if (typeof (rhs) === \"string\")\n return rhs.toLowerCase() === this.name.toLowerCase();\n\n return rhs.name.toLowerCase() === this.name.toLowerCase();\n }\n\n /**\n * Compares two schema versions.\n * @param rhs The schema to compare.\n * @return A negative number if this schema version is less than the given version, a positive number if greater, and 0 if are equivalent.\n */\n public compareByVersion(rhs: SchemaKey): number {\n return this.version.compare(rhs.version);\n }\n\n /**\n *\n * @param rhs The SchemaKey to compare with\n * @param matchType The match type to use for comparison.\n */\n public matches(rhs: SchemaKey, matchType: SchemaMatchType = SchemaMatchType.Exact): boolean {\n switch (matchType) {\n case SchemaMatchType.Identical:\n case SchemaMatchType.Exact:\n return this.compareByName(rhs.name) && this.readVersion === rhs.readVersion &&\n this.writeVersion === rhs.writeVersion && this.minorVersion === rhs.minorVersion;\n case SchemaMatchType.LatestReadCompatible:\n if (!this.compareByName(rhs.name))\n return false;\n\n if (rhs.readVersion !== this.readVersion)\n return false;\n\n if (this.writeVersion === rhs.writeVersion)\n return this.minorVersion >= rhs.minorVersion;\n\n return this.writeVersion > rhs.writeVersion;\n case SchemaMatchType.LatestWriteCompatible:\n return this.compareByName(rhs.name) && this.readVersion === rhs.readVersion &&\n this.writeVersion === rhs.writeVersion && this.minorVersion >= rhs.minorVersion;\n case SchemaMatchType.Latest:\n return this.compareByName(rhs.name);\n default:\n return false;\n }\n }\n\n /**\n * Deserializes a SchemaKeyProps JSON object into a SchemaKey object.\n * @param props SchemaKeyProps\n * @returns A SchemaKey object.\n */\n public static fromJSON(props: SchemaKeyProps): SchemaKey {\n return new SchemaKey(props.name, props.read, props.write, props.minor);\n }\n\n /**\n * Save this SchemaKey's properties to an object for serializing to JSON.\n */\n public toJSON(): SchemaKeyProps {\n return {\n name: this.name,\n read: this.readVersion,\n write: this.writeVersion,\n minor: this.minorVersion,\n };\n }\n}\n\n/**\n * The SchemaItemKey contains a SchemaItem's name and SchemaKey.\n * @public @preview\n */\nexport class SchemaItemKey {\n private _name: ECName;\n private _schemaKey: SchemaKey;\n\n constructor(name: string, schema: SchemaKey) {\n this._name = new ECName(name);\n this._schemaKey = schema;\n }\n\n public get schemaKey() { return this._schemaKey; }\n public get name() { return this._name.name; }\n\n public get schemaName() { return this.schemaKey.name; }\n\n /** Returns the name in the format, {schemaName}.{name}. */\n public get fullName() { return `${this.schemaName}.${this.name}`; }\n\n /**\n * Checks whether this SchemaItemKey matches the one provided.\n * @param rhs The SchemaItemKey to compare to this.\n */\n // TODO: Need to add a match type\n public matches(rhs: SchemaItemKey): boolean {\n if (rhs.name !== this.name)\n return false;\n\n if (!rhs.schemaKey.matches(this.schemaKey, SchemaMatchType.Latest))\n return false;\n\n return true;\n }\n\n public matchesFullName(name: string): boolean {\n const schemaVersion = this.schemaKey.version.toString().replace(/\\./g, \"\\\\.\");\n const fullNameRegex = new RegExp(`^${this.schemaName}(\\\\.${schemaVersion})?[.:]${this.name}$`, \"i\");\n return fullNameRegex.test(name);\n }\n}\n"]}
@@ -11,21 +11,21 @@ import { SchemaPropsGetter } from "./SchemaJsonLocater";
11
11
  * ```ts
12
12
  * [[include:IModelSchemas.loadFromDb]]
13
13
  * ```
14
- * @beta
14
+ * @beta Is this concept needed no that backend and frontend will have contexts cached on the iModel?
15
15
  */
16
16
  export declare class SchemaLoader {
17
17
  private _context;
18
18
  constructor(getSchema: SchemaPropsGetter);
19
19
  /** Get a schema by name
20
20
  * @param schemaName a string with the name of the schema to load.
21
- * @throws [ECObjectsError]($ecschema-metadata) if the schema is not found or cannot be loaded.
21
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema is not found or cannot be loaded.
22
22
  */
23
- getSchema<T extends Schema>(schemaName: string): T;
23
+ getSchema(schemaName: string): Schema;
24
24
  /** Attempts to get a schema by name
25
25
  * @param schemaName a string with the name of the schema to load.
26
- * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.
26
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.
27
27
  */
28
- tryGetSchema<T extends Schema>(schemaName: string): T | undefined;
28
+ tryGetSchema(schemaName: string): Schema | undefined;
29
29
  /** Gets the SchemaContext used by the loader. */
30
30
  get context(): SchemaContext;
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaLoader.d.ts","sourceRoot":"","sources":["../../src/SchemaLoader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG3E;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAgB;gBAEb,SAAS,EAAE,iBAAiB;IAM/C;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC;IAQzD;;;OAGG;IACI,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAOxE,iDAAiD;IACjD,IAAW,OAAO,IAAI,aAAa,CAElC;CACF"}
1
+ {"version":3,"file":"SchemaLoader.d.ts","sourceRoot":"","sources":["../../src/SchemaLoader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG3E;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAgB;gBAEb,SAAS,EAAE,iBAAiB;IAM/C;;;OAGG;IACI,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;IAQ5C;;;OAGG;IACI,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAO3D,iDAAiD;IACjD,IAAW,OAAO,IAAI,aAAa,CAElC;CACF"}
@@ -20,9 +20,10 @@ const SchemaKey_1 = require("./SchemaKey");
20
20
  * ```ts
21
21
  * [[include:IModelSchemas.loadFromDb]]
22
22
  * ```
23
- * @beta
23
+ * @beta Is this concept needed no that backend and frontend will have contexts cached on the iModel?
24
24
  */
25
25
  class SchemaLoader {
26
+ _context;
26
27
  constructor(getSchema) {
27
28
  this._context = new Context_1.SchemaContext();
28
29
  const locater = new SchemaJsonLocater_1.SchemaJsonLocater(getSchema);
@@ -30,17 +31,17 @@ class SchemaLoader {
30
31
  }
31
32
  /** Get a schema by name
32
33
  * @param schemaName a string with the name of the schema to load.
33
- * @throws [ECObjectsError]($ecschema-metadata) if the schema is not found or cannot be loaded.
34
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema is not found or cannot be loaded.
34
35
  */
35
36
  getSchema(schemaName) {
36
37
  const schema = this.tryGetSchema(schemaName);
37
38
  if (!schema)
38
- throw new Exception_1.ECObjectsError(Exception_1.ECObjectsStatus.UnableToLocateSchema, `reading schema=${schemaName}`);
39
+ throw new Exception_1.ECSchemaError(Exception_1.ECSchemaStatus.UnableToLocateSchema, `reading schema=${schemaName}`);
39
40
  return schema;
40
41
  }
41
42
  /** Attempts to get a schema by name
42
43
  * @param schemaName a string with the name of the schema to load.
43
- * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.
44
+ * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.
44
45
  */
45
46
  tryGetSchema(schemaName) {
46
47
  // SchemaKey version is not used when locating schema in an iModel, so the version is arbitrary.
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaLoader.js","sourceRoot":"","sources":["../../src/SchemaLoader.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,uCAA0C;AAC1C,2CAA8C;AAC9C,2CAA8D;AAE9D,2DAA2E;AAC3E,2CAAmD;AAEnD;;;;;;;;;;;GAWG;AACH,MAAa,YAAY;IAGvB,YAAmB,SAA4B;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,qCAAiB,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,SAAS,CAAmB,UAAkB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,0BAAc,CAAC,2BAAe,CAAC,oBAAoB,EAAE,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAEjG,OAAO,MAAW,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,YAAY,CAAmB,UAAkB;QACtD,gGAAgG;QAChG,MAAM,GAAG,GAAG,IAAI,qBAAS,CAAC,UAAU,EAAE,IAAI,qBAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,2BAAe,CAAC,MAAM,CAAC,CAAC;QACxE,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,iDAAiD;IACjD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AApCD,oCAoCC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { SchemaContext } from \"./Context\";\r\nimport { SchemaMatchType } from \"./ECObjects\";\r\nimport { ECObjectsError, ECObjectsStatus } from \"./Exception\";\r\nimport { Schema } from \"./Metadata/Schema\";\r\nimport { SchemaJsonLocater, SchemaPropsGetter } from \"./SchemaJsonLocater\";\r\nimport { ECVersion, SchemaKey } from \"./SchemaKey\";\r\n\r\n/**\r\n * A utility class for loading EC Schema objects using a function that returns schema json for a given schema name.\r\n * Loaded schemas are held in memory within a schema context managed by SchemaLoader.\r\n * The SchemaLoader object should be held in memory if multiple calls to [[getSchema]] or [[tryGetSchema]]\r\n * is a possibility, thereby avoiding unnecessary schema retrievals from the function.\r\n *\r\n * ** Example **\r\n * ```ts\r\n * [[include:IModelSchemas.loadFromDb]]\r\n * ```\r\n * @beta\r\n */\r\nexport class SchemaLoader {\r\n private _context: SchemaContext;\r\n\r\n public constructor(getSchema: SchemaPropsGetter) {\r\n this._context = new SchemaContext();\r\n const locater = new SchemaJsonLocater(getSchema);\r\n this._context.addLocater(locater);\r\n }\r\n\r\n /** Get a schema by name\r\n * @param schemaName a string with the name of the schema to load.\r\n * @throws [ECObjectsError]($ecschema-metadata) if the schema is not found or cannot be loaded.\r\n */\r\n public getSchema<T extends Schema>(schemaName: string): T {\r\n const schema = this.tryGetSchema(schemaName);\r\n if (!schema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `reading schema=${schemaName}`);\r\n\r\n return schema as T;\r\n }\r\n\r\n /** Attempts to get a schema by name\r\n * @param schemaName a string with the name of the schema to load.\r\n * @throws [ECObjectsError]($ecschema-metadata) if the schema exists, but cannot be loaded.\r\n */\r\n public tryGetSchema<T extends Schema>(schemaName: string): T | undefined {\r\n // SchemaKey version is not used when locating schema in an iModel, so the version is arbitrary.\r\n const key = new SchemaKey(schemaName, new ECVersion(1, 0, 0));\r\n const schema = this._context.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema as T;\r\n }\r\n\r\n /** Gets the SchemaContext used by the loader. */\r\n public get context(): SchemaContext {\r\n return this._context;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"SchemaLoader.js","sourceRoot":"","sources":["../../src/SchemaLoader.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,uCAA0C;AAC1C,2CAA8C;AAC9C,2CAA4D;AAE5D,2DAA2E;AAC3E,2CAAmD;AAEnD;;;;;;;;;;;GAWG;AACH,MAAa,YAAY;IACf,QAAQ,CAAgB;IAEhC,YAAmB,SAA4B;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,uBAAa,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI,qCAAiB,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,UAAkB;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,yBAAa,CAAC,0BAAc,CAAC,oBAAoB,EAAE,kBAAkB,UAAU,EAAE,CAAC,CAAC;QAE/F,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,UAAkB;QACpC,gGAAgG;QAChG,MAAM,GAAG,GAAG,IAAI,qBAAS,CAAC,UAAU,EAAE,IAAI,qBAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,2BAAe,CAAC,MAAM,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iDAAiD;IACjD,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AApCD,oCAoCC","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\nimport { SchemaContext } from \"./Context\";\nimport { SchemaMatchType } from \"./ECObjects\";\nimport { ECSchemaError, ECSchemaStatus } from \"./Exception\";\nimport { Schema } from \"./Metadata/Schema\";\nimport { SchemaJsonLocater, SchemaPropsGetter } from \"./SchemaJsonLocater\";\nimport { ECVersion, SchemaKey } from \"./SchemaKey\";\n\n/**\n * A utility class for loading EC Schema objects using a function that returns schema json for a given schema name.\n * Loaded schemas are held in memory within a schema context managed by SchemaLoader.\n * The SchemaLoader object should be held in memory if multiple calls to [[getSchema]] or [[tryGetSchema]]\n * is a possibility, thereby avoiding unnecessary schema retrievals from the function.\n *\n * ** Example **\n * ```ts\n * [[include:IModelSchemas.loadFromDb]]\n * ```\n * @beta Is this concept needed no that backend and frontend will have contexts cached on the iModel?\n */\nexport class SchemaLoader {\n private _context: SchemaContext;\n\n public constructor(getSchema: SchemaPropsGetter) {\n this._context = new SchemaContext();\n const locater = new SchemaJsonLocater(getSchema);\n this._context.addLocater(locater);\n }\n\n /** Get a schema by name\n * @param schemaName a string with the name of the schema to load.\n * @throws [ECSchemaError]($ecschema-metadata) if the schema is not found or cannot be loaded.\n */\n public getSchema(schemaName: string): Schema {\n const schema = this.tryGetSchema(schemaName);\n if (!schema)\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `reading schema=${schemaName}`);\n\n return schema;\n }\n\n /** Attempts to get a schema by name\n * @param schemaName a string with the name of the schema to load.\n * @throws [ECSchemaError]($ecschema-metadata) if the schema exists, but cannot be loaded.\n */\n public tryGetSchema(schemaName: string): Schema | undefined {\n // SchemaKey version is not used when locating schema in an iModel, so the version is arbitrary.\n const key = new SchemaKey(schemaName, new ECVersion(1, 0, 0));\n const schema = this._context.getSchemaSync(key, SchemaMatchType.Latest);\n return schema;\n }\n\n /** Gets the SchemaContext used by the loader. */\n public get context(): SchemaContext {\n return this._context;\n }\n}\n"]}