@itwin/presentation-hierarchies 1.1.0 → 1.2.1

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 (249) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/lib/cjs/hierarchies/HierarchyErrors.d.ts +1 -1
  3. package/lib/cjs/hierarchies/HierarchyErrors.js +1 -1
  4. package/lib/cjs/hierarchies/HierarchyErrors.js.map +1 -1
  5. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts +12 -11
  6. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +1 -1
  7. package/lib/cjs/hierarchies/HierarchyFiltering.js +16 -21
  8. package/lib/cjs/hierarchies/HierarchyFiltering.js.map +1 -1
  9. package/lib/cjs/hierarchies/HierarchyNode.d.ts +10 -10
  10. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
  11. package/lib/cjs/hierarchies/HierarchyNode.js +13 -13
  12. package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
  13. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts +4 -4
  14. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  15. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js +1 -1
  16. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  17. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts +13 -13
  18. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  19. package/lib/cjs/hierarchies/HierarchyNodeKey.js +1 -1
  20. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
  21. package/lib/cjs/hierarchies/HierarchyProvider.d.ts +6 -6
  22. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
  23. package/lib/cjs/hierarchies/HierarchyProvider.js +6 -6
  24. package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
  25. package/lib/cjs/hierarchies/Logging.d.ts +2 -2
  26. package/lib/cjs/hierarchies/Logging.js +3 -3
  27. package/lib/cjs/hierarchies/Logging.js.map +1 -1
  28. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +5 -17
  29. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
  30. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +66 -54
  31. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
  32. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  33. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  34. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +2 -2
  35. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
  36. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +13 -13
  37. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  38. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js +1 -1
  39. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  40. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts +23 -23
  41. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  42. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js +5 -5
  43. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  44. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +8 -8
  45. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  46. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +88 -87
  47. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  48. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +2 -2
  49. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +17 -14
  50. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  51. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +16 -16
  52. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  53. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +2 -2
  54. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  55. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +10 -10
  56. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  57. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +5 -10
  58. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  59. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +4 -4
  60. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  61. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +1 -2
  62. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  63. package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -1
  64. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
  65. package/lib/cjs/hierarchies/imodel/Utils.js +2 -2
  66. package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
  67. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts +1 -1
  68. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  69. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +8 -8
  70. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  71. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts +3 -3
  72. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  73. package/lib/cjs/hierarchies/imodel/operators/Grouping.js +42 -42
  74. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
  75. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  76. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  77. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +16 -16
  78. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  79. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  80. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  81. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +25 -25
  82. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  83. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  84. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  85. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js +2 -2
  86. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  87. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +3 -3
  88. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  89. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +3 -3
  90. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  91. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +3 -3
  92. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  93. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +2 -2
  94. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  95. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  96. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  97. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +2 -2
  98. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  99. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  100. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  101. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -2
  102. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  103. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +3 -3
  104. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  105. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +13 -18
  106. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  107. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  108. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  109. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  110. package/lib/cjs/hierarchies/internal/Common.d.ts +1 -1
  111. package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
  112. package/lib/cjs/hierarchies/internal/Common.js +2 -1
  113. package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
  114. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  115. package/lib/cjs/hierarchies/internal/EachValueFrom.js +3 -0
  116. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
  117. package/lib/cjs/hierarchies/internal/LoggingUtils.js +2 -2
  118. package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +1 -1
  119. package/lib/cjs/hierarchies/internal/operators/Sorting.js +2 -2
  120. package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -1
  121. package/lib/cjs/package.json +1 -0
  122. package/lib/cjs/presentation-hierarchies.d.ts +13 -13
  123. package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
  124. package/lib/cjs/presentation-hierarchies.js +29 -29
  125. package/lib/cjs/presentation-hierarchies.js.map +1 -1
  126. package/lib/esm/hierarchies/HierarchyErrors.d.ts +1 -1
  127. package/lib/esm/hierarchies/HierarchyErrors.js +1 -1
  128. package/lib/esm/hierarchies/HierarchyErrors.js.map +1 -1
  129. package/lib/esm/hierarchies/HierarchyFiltering.d.ts +12 -11
  130. package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +1 -1
  131. package/lib/esm/hierarchies/HierarchyFiltering.js +16 -21
  132. package/lib/esm/hierarchies/HierarchyFiltering.js.map +1 -1
  133. package/lib/esm/hierarchies/HierarchyNode.d.ts +10 -10
  134. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
  135. package/lib/esm/hierarchies/HierarchyNode.js +3 -3
  136. package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
  137. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +4 -4
  138. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  139. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js +1 -1
  140. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  141. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts +13 -13
  142. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  143. package/lib/esm/hierarchies/HierarchyNodeKey.js +1 -1
  144. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
  145. package/lib/esm/hierarchies/HierarchyProvider.d.ts +6 -6
  146. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
  147. package/lib/esm/hierarchies/HierarchyProvider.js +3 -3
  148. package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
  149. package/lib/esm/hierarchies/Logging.d.ts +2 -2
  150. package/lib/esm/hierarchies/Logging.js +3 -3
  151. package/lib/esm/hierarchies/Logging.js.map +1 -1
  152. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +5 -17
  153. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
  154. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +52 -40
  155. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
  156. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  157. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  158. package/lib/esm/hierarchies/imodel/HierarchyCache.js +1 -1
  159. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
  160. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +13 -13
  161. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  162. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js +1 -1
  163. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  164. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts +23 -23
  165. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  166. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js +2 -2
  167. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  168. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +8 -8
  169. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  170. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +41 -40
  171. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  172. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +2 -2
  173. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +11 -8
  174. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  175. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +16 -16
  176. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  177. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +2 -2
  178. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  179. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +10 -10
  180. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  181. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +5 -10
  182. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  183. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts +4 -4
  184. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  185. package/lib/esm/hierarchies/imodel/TreeNodesReader.js +1 -2
  186. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  187. package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -1
  188. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
  189. package/lib/esm/hierarchies/imodel/Utils.js +1 -1
  190. package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
  191. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +1 -1
  192. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  193. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js +6 -6
  194. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  195. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +3 -3
  196. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  197. package/lib/esm/hierarchies/imodel/operators/Grouping.js +22 -22
  198. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
  199. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  200. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  201. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +10 -10
  202. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  203. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  204. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  205. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js +14 -14
  206. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  207. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  208. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  209. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js +1 -1
  210. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  211. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +3 -3
  212. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  213. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +2 -2
  214. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  215. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +3 -3
  216. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  217. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +1 -1
  218. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  219. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  220. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  221. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -1
  222. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  223. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  224. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  225. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js +1 -1
  226. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  227. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +3 -3
  228. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  229. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +9 -14
  230. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  231. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  232. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  233. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  234. package/lib/esm/hierarchies/internal/Common.d.ts +1 -1
  235. package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
  236. package/lib/esm/hierarchies/internal/Common.js +2 -1
  237. package/lib/esm/hierarchies/internal/Common.js.map +1 -1
  238. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  239. package/lib/esm/hierarchies/internal/EachValueFrom.js +3 -0
  240. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
  241. package/lib/esm/hierarchies/internal/LoggingUtils.js +1 -1
  242. package/lib/esm/hierarchies/internal/LoggingUtils.js.map +1 -1
  243. package/lib/esm/hierarchies/internal/operators/Sorting.js +1 -1
  244. package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -1
  245. package/lib/esm/presentation-hierarchies.d.ts +13 -13
  246. package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
  247. package/lib/esm/presentation-hierarchies.js +13 -13
  248. package/lib/esm/presentation-hierarchies.js.map +1 -1
  249. package/package.json +21 -13
@@ -1 +1 @@
1
- {"version":3,"file":"NodeSelectQueryFactory.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/NodeSelectQueryFactory.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\nimport { assert, Id64String } from \"@itwin/core-bentley\";\nimport {\n GenericInstanceFilter,\n GenericInstanceFilterRelationshipStep,\n GenericInstanceFilterRule,\n GenericInstanceFilterRuleGroup,\n GenericInstanceFilterRuleGroupOperator,\n GenericInstanceFilterRuleOperator,\n GenericInstanceFilterRuleValue,\n} from \"@itwin/core-common\";\nimport {\n EC,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSql,\n getClass,\n IInstanceLabelSelectClauseFactory,\n parseFullClassName,\n PrimitiveValue,\n} from \"@itwin/presentation-shared\";\nimport { HierarchyNodeAutoExpandProp } from \"./IModelHierarchyNode\";\n\n/**\n * Column names of the SELECT clause created by `NodeSelectClauseFactory`. Order of the names matches the order of columns\n * created by the factory.\n *\n * @beta\n */\nexport enum NodeSelectClauseColumnNames {\n /** Full class name of the instance the node represents. Type: `string` in format `{schema name}:{class name}`. */\n FullClassName = \"FullClassName\",\n /** ECInstance ID of the instance the node represents. Type: `Id64String`. */\n ECInstanceId = \"ECInstanceId\",\n /** Display label. Type: `string`. */\n DisplayLabel = \"DisplayLabel\",\n /**\n * A flag indicating if the node has children. Type: `boolean`. Values:\n * - `false` - node never has children.\n * - `true` - node always has children.\n * - NULL - unknown, needs to be determined by requesting children for the node.\n */\n HasChildren = \"HasChildren\",\n /** A flag indicating that a node should be hidden if it has no children. Type: `boolean`. */\n HideIfNoChildren = \"HideIfNoChildren\",\n /** A flag indicating that a node should be hidden and its children should be displayed instead. Type: `boolean`. */\n HideNodeInHierarchy = \"HideNodeInHierarchy\",\n /** A serialized JSON object for providing grouping information. */\n Grouping = \"Grouping\",\n /** A serialized JSON object for associating a node with additional data. */\n ExtendedData = \"ExtendedData\",\n /** A flag indicating the node should be auto-expanded when it's loaded. */\n AutoExpand = \"AutoExpand\",\n /** A flag indicating the node supports child hierarchy level filtering. */\n SupportsFiltering = \"SupportsFiltering\",\n}\n\n/**\n * A data structure for defining an ECSQL value selector.\n * @beta\n */\ninterface ECSqlValueSelector {\n selector: string;\n}\n\n/**\n * Props for `NodeSelectClauseFactory.createSelectClause`.\n * @beta\n */\ninterface NodeSelectClauseProps {\n ecClassId: ECSqlValueSelector;\n ecInstanceId: ECSqlValueSelector;\n nodeLabel: string | ECSqlValueSelector;\n extendedData?: {\n [key: string]: Id64String | string | number | boolean | ECSqlValueSelector;\n };\n autoExpand?: boolean | ECSqlValueSelector;\n supportsFiltering?: boolean | ECSqlValueSelector;\n hasChildren?: boolean | ECSqlValueSelector;\n hideNodeInHierarchy?: boolean | ECSqlValueSelector;\n hideIfNoChildren?: boolean | ECSqlValueSelector;\n grouping?: ECSqlSelectClauseGroupingParams;\n}\n\n/**\n * A data structure for defining nodes' grouping requirements.\n * @beta\n */\ninterface ECSqlSelectClauseGroupingParams {\n byLabel?: ECSqlSelectClauseLabelGroupingParams;\n byClass?: boolean | ECSqlSelectClauseGroupingParamsBase | ECSqlValueSelector;\n byBaseClasses?: ECSqlSelectClauseBaseClassGroupingParams;\n byProperties?: ECSqlSelectClausePropertiesGroupingParams;\n}\n\n/**\n * A data structure for defining label grouping params.\n * @beta\n */\ninterface ECSqlSelectClauseLabelGroupingBaseParams {\n /** Label grouping option that determines whether to group nodes or to merge them. Defaults to \"group\".*/\n action?: \"group\" | \"merge\";\n /** Id that needs to match for nodes to be grouped or merged.*/\n groupId?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining label merging.\n * @beta\n */\ninterface ECSqlSelectClauseLabelGroupingMergeParams extends ECSqlSelectClauseLabelGroupingBaseParams {\n action: \"merge\";\n}\n\n/**\n * A data structure for defining label grouping.\n * @beta\n */\ninterface ECSqlSelectClauseLabelGroupingGroupParams extends ECSqlSelectClauseLabelGroupingBaseParams, ECSqlSelectClauseGroupingParamsBase {\n action?: \"group\";\n}\n\n/**\n * A data structure for defining possible label grouping types.\n * @beta\n */\ntype ECSqlSelectClauseLabelGroupingParams =\n | boolean\n | ECSqlValueSelector\n | ECSqlSelectClauseLabelGroupingMergeParams\n | ECSqlSelectClauseLabelGroupingGroupParams;\n\n/**\n * A data structure for defining base grouping parameters shared across all types of grouping.\n * @beta\n */\ninterface ECSqlSelectClauseGroupingParamsBase {\n hideIfNoSiblings?: boolean | ECSqlValueSelector;\n hideIfOneGroupedNode?: boolean | ECSqlValueSelector;\n autoExpand?: HierarchyNodeAutoExpandProp | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining properties grouping.\n * @beta\n */\ninterface ECSqlSelectClausePropertiesGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n /**\n * Full name of a class whose properties are used to group the node. Only has effect if the node\n * represents an instance of that class.\n *\n * Full class name format: `SchemaName.ClassName`.\n */\n propertiesClassName: string;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value is not set or is set to an empty string.\n *\n * Label of the created grouping node will be `Not Specified`.\n */\n createGroupForUnspecifiedValues?: boolean | ECSqlValueSelector;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value doesn't fit within any of the provided\n * ranges, or is not a numeric value.\n *\n * Label of the created grouping node will be `Other`.\n */\n createGroupForOutOfRangeValues?: boolean | ECSqlValueSelector;\n /**\n * Properties of the specified class, by which the nodes should be grouped.\n *\n * Example usage:\n * ```ts\n * propertyGroups: [\n * {\n * propertyName: \"type\",\n * propertyClassAlias: \"this\"\n * },\n * {\n * propertyName: \"length\",\n * propertyClassAlias: \"x\",\n * ranges: [\n * { fromValue: 1, toValue: 10, rangeLabel: \"Small\" },\n * { fromValue: 11, toValue: 20, rangeLabel: \"Medium\" }\n * ]\n * },\n * ]\n * ```\n */\n propertyGroups: ECSqlSelectClausePropertyGroup[];\n}\n\n/**\n * A data structure for defining specific properties' grouping params.\n * @beta\n */\ninterface ECSqlSelectClausePropertyGroup {\n /** A string indicating the name of the property to group by. */\n propertyName: string;\n /** Alias to of the class containing the property. Used to select the property value. */\n propertyClassAlias: string;\n /** Ranges are used to group nodes by numeric properties which are within specified bounds. */\n ranges?: ECSqlSelectClausePropertyValueRange[];\n}\n\n/**\n * A data structure for defining boundaries for a value.\n * @beta\n */\ninterface ECSqlSelectClausePropertyValueRange {\n /** Defines the lower bound of the range. */\n fromValue: number | ECSqlValueSelector;\n /** Defines the upper bound of the range. */\n toValue: number | ECSqlValueSelector;\n /** Defines the range label. Will be used as grouping node's display label. */\n rangeLabel?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining base class grouping.\n * @beta\n */\ninterface ECSqlSelectClauseBaseClassGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n fullClassNames: string[] | ECSqlValueSelector[];\n}\n\n/**\n * An interface of a factory that knows how to create nodes' select ECSQL query.\n * @beta\n */\nexport interface NodesQueryClauseFactory {\n /** Create a SELECT clause in a format understood by nodes query parser used by `HierarchyProvider`. */\n createSelectClause(props: NodeSelectClauseProps): Promise<string>;\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the given `GenericInstanceFilter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter: GenericInstanceFilter | undefined;\n }): Promise<{ from: string; where: string; joins: string }>;\n}\n\n/**\n * Creates an instance of `NodeSelectQueryFactory`.\n * @beta\n */\nexport function createNodesQueryClauseFactory(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n}): NodesQueryClauseFactory {\n return new NodeSelectQueryFactory(props);\n}\n\n/** A factory for creating a nodes' select ECSQL query. */\nclass NodeSelectQueryFactory {\n private _imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n private _instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n\n public constructor(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n }) {\n this._imodelAccess = props.imodelAccess;\n this._instanceLabelSelectClauseFactory = props.instanceLabelSelectClauseFactory;\n }\n\n /** Create a SELECT clause in a format understood by results reader of the library. */\n public async createSelectClause(props: NodeSelectClauseProps) {\n // note: the columns order must match the order in `NodeSelectClauseColumnNames`\n return `\n ec_ClassName(${props.ecClassId.selector}) AS ${NodeSelectClauseColumnNames.FullClassName},\n ${props.ecInstanceId.selector} AS ${NodeSelectClauseColumnNames.ECInstanceId},\n ${createECSqlValueSelector(props.nodeLabel)} AS ${NodeSelectClauseColumnNames.DisplayLabel},\n CAST(${createECSqlValueSelector(props.hasChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HasChildren},\n CAST(${createECSqlValueSelector(props.hideIfNoChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideIfNoChildren},\n CAST(${createECSqlValueSelector(props.hideNodeInHierarchy)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideNodeInHierarchy},\n ${props.grouping ? await createGroupingSelector(props.grouping, this._imodelAccess, this._instanceLabelSelectClauseFactory) : \"CAST(NULL AS TEXT)\"} AS ${NodeSelectClauseColumnNames.Grouping},\n ${\n props.extendedData\n ? `json_object(${Object.entries(props.extendedData)\n .map(([key, value]) => `'${key}', ${createECSqlValueSelector(value)}`)\n .join(\", \")})`\n : \"CAST(NULL AS TEXT)\"\n } AS ${NodeSelectClauseColumnNames.ExtendedData},\n CAST(${createECSqlValueSelector(props.autoExpand)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.AutoExpand},\n CAST(${createECSqlValueSelector(props.supportsFiltering)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.SupportsFiltering}\n `;\n }\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the `filter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n public async createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter: GenericInstanceFilter | undefined;\n }): Promise<{ from: string; where: string; joins: string }> {\n const { contentClass, filter } = props;\n if (!filter) {\n // undefined filter means we don't want any filtering to be applied\n return { from: contentClass.fullName, joins: \"\", where: \"\" };\n }\n\n const from = await specializeContentClass({\n classHierarchyInspector: this._imodelAccess,\n contentClassName: contentClass.fullName,\n filterClassNames: filter.propertyClassNames,\n });\n if (!from) {\n // filter class doesn't intersect with content class - make sure the query returns nothing by returning a `FALSE` WHERE clause\n return { from: contentClass.fullName, joins: \"\", where: \"FALSE\" };\n }\n\n /**\n * TODO:\n * There may be similar related instance paths, e.g.:\n * - A -> B -> C,\n * - A -> B -> D.\n * At this moment we're handling each path individually which means A and B would get joined twice. We could look into\n * creating a join tree first, e.g.\n * C\n * /\n * A -> B\n * \\\n * D\n */\n const joins = await Promise.all(\n filter.relatedInstances.map(async (rel, i) =>\n ECSql.createRelationshipPathJoinClause({\n schemaProvider: this._imodelAccess,\n path: assignRelationshipPathAliases(rel.path, i, contentClass.alias, rel.alias),\n }),\n ),\n );\n\n const whereConditions = new Array<string>();\n if (filter.filteredClassNames && filter.filteredClassNames.length > 0) {\n whereConditions.push(\n `${ECSql.createRawPropertyValueSelector(contentClass.alias, \"ECClassId\")} IS (\n ${filter.filteredClassNames\n .map(parseFullClassName)\n .map(({ schemaName, className }) => `[${schemaName}].[${className}]`)\n .join(\", \")}\n )`,\n );\n }\n const classAliasMap = new Map<string, string>([[contentClass.alias, from]]);\n filter.relatedInstances.forEach(({ path, alias }) => path.length > 0 && classAliasMap.set(alias, path[path.length - 1].targetClassName));\n const propertiesFilter = await createWhereClause(\n contentClass.alias,\n async (alias) => {\n const aliasClassName = classAliasMap.get(alias);\n return aliasClassName ? getClass(this._imodelAccess, aliasClassName) : undefined;\n },\n filter.rules,\n );\n if (propertiesFilter) {\n whereConditions.push(propertiesFilter);\n }\n\n return {\n from,\n joins: joins.join(\"\\n\"),\n where: whereConditions.join(\" AND \"),\n };\n }\n}\n\nfunction createECSqlValueSelector(input: undefined | PrimitiveValue | ECSqlValueSelector) {\n if (input === undefined) {\n return \"NULL\";\n }\n if (isSelector(input)) {\n return input.selector;\n }\n return ECSql.createRawPrimitiveValueSelector(input);\n}\n\nfunction isSelector(x: any): x is ECSqlValueSelector {\n return !!x.selector;\n}\n\nasync function createGroupingSelector(\n grouping: ECSqlSelectClauseGroupingParams,\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n): Promise<string> {\n const groupingSelectors = new Array<{ key: string; selector: string }>();\n\n grouping.byLabel &&\n groupingSelectors.push({\n key: \"byLabel\",\n selector:\n typeof grouping.byLabel === \"boolean\" || isSelector(grouping.byLabel)\n ? createECSqlValueSelector(grouping.byLabel)\n : serializeJsonObject(createLabelGroupingBaseParamsSelectors(grouping.byLabel)),\n });\n\n grouping.byClass &&\n groupingSelectors.push({\n key: \"byClass\",\n selector:\n typeof grouping.byClass === \"boolean\" || isSelector(grouping.byClass)\n ? createECSqlValueSelector(grouping.byClass)\n : serializeJsonObject(createBaseGroupingParamSelectors(grouping.byClass)),\n });\n\n grouping.byBaseClasses &&\n groupingSelectors.push({\n key: \"byBaseClasses\",\n selector: serializeJsonObject([\n {\n key: \"fullClassNames\",\n selector: `json_array(${grouping.byBaseClasses.fullClassNames.map((className) => createECSqlValueSelector(className)).join(\", \")})`,\n },\n ...createBaseGroupingParamSelectors(grouping.byBaseClasses),\n ]),\n });\n\n if (grouping.byProperties) {\n const propertyClass = await getClass(imodelAccess, grouping.byProperties.propertiesClassName);\n groupingSelectors.push({\n key: \"byProperties\",\n selector: serializeJsonObject([\n {\n key: \"propertiesClassName\",\n selector: `${createECSqlValueSelector(grouping.byProperties.propertiesClassName)}`,\n },\n {\n key: \"propertyGroups\",\n selector: `json_array(${(\n await Promise.all(\n grouping.byProperties.propertyGroups.map(async (propertyGroup) =>\n serializeJsonObject(await createPropertyGroupSelectors(propertyGroup, propertyClass, instanceLabelSelectClauseFactory)),\n ),\n )\n ).join(\", \")})`,\n },\n ...(grouping.byProperties.createGroupForOutOfRangeValues !== undefined\n ? [\n {\n key: \"createGroupForOutOfRangeValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForOutOfRangeValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...(grouping.byProperties.createGroupForUnspecifiedValues !== undefined\n ? [\n {\n key: \"createGroupForUnspecifiedValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForUnspecifiedValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...createBaseGroupingParamSelectors(grouping.byProperties),\n ]),\n });\n }\n\n return serializeJsonObject(groupingSelectors);\n}\n\nfunction createLabelGroupingBaseParamsSelectors(byLabel: ECSqlSelectClauseLabelGroupingMergeParams | ECSqlSelectClauseLabelGroupingGroupParams) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (byLabel.action !== undefined) {\n selectors.push({\n key: \"action\",\n selector: `${createECSqlValueSelector(byLabel.action)}`,\n });\n }\n if (byLabel.groupId !== undefined) {\n selectors.push({\n key: \"groupId\",\n selector: createECSqlValueSelector(byLabel.groupId),\n });\n }\n if (byLabel.action !== \"merge\") {\n selectors.push(...createBaseGroupingParamSelectors(byLabel));\n }\n\n return selectors;\n}\n\nasync function createPropertyGroupSelectors(\n propertyGroup: ECSqlSelectClausePropertyGroup,\n propertyClass: EC.Class,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n) {\n const selectors = new Array<{ key: string; selector: string }>();\n selectors.push({\n key: \"propertyName\",\n selector: `${createECSqlValueSelector(propertyGroup.propertyName)}`,\n });\n\n const property = await propertyClass.getProperty(propertyGroup.propertyName);\n if (!property) {\n throw new Error(`Property \"${propertyGroup.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n\n if (property.isNavigation()) {\n const relationshipClass = await property.relationshipClass;\n const abstractConstraint =\n property.direction === \"Forward\" ? await relationshipClass.target.abstractConstraint : await relationshipClass.source.abstractConstraint;\n if (!abstractConstraint) {\n throw new Error(`Could not determine class name for navigation property with direction \"${property.direction}\".`);\n }\n\n const fullName = abstractConstraint.fullName;\n const targetAlias = \"target\";\n selectors.push({\n key: \"propertyValue\",\n selector: `(\n SELECT ${await instanceLabelSelectClauseFactory.createSelectClause({ className: fullName, classAlias: targetAlias })}\n FROM ${fullName} AS ${targetAlias}\n WHERE [${targetAlias}].[ECInstanceId] = [${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}].[Id]\n )`,\n });\n } else {\n selectors.push({\n key: \"propertyValue\",\n selector: `[${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}]`,\n });\n }\n\n if (propertyGroup.ranges) {\n selectors.push(createRangeParamSelectors(propertyGroup.ranges));\n }\n\n return selectors;\n}\n\nfunction createRangeParamSelectors(ranges: ECSqlSelectClausePropertyValueRange[]) {\n return {\n key: \"ranges\",\n selector: `json_array(${ranges\n .map((range) =>\n serializeJsonObject([\n {\n key: \"fromValue\",\n selector: createECSqlValueSelector(range.fromValue),\n },\n {\n key: \"toValue\",\n selector: createECSqlValueSelector(range.toValue),\n },\n ...(range.rangeLabel\n ? [\n {\n key: \"rangeLabel\",\n selector: `${createECSqlValueSelector(range.rangeLabel)}`,\n },\n ]\n : []),\n ]),\n )\n .join(\", \")})`,\n };\n}\n\nfunction createBaseGroupingParamSelectors(params: ECSqlSelectClauseGroupingParamsBase) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (params.hideIfNoSiblings !== undefined) {\n selectors.push({\n key: \"hideIfNoSiblings\",\n selector: createECSqlValueSelector(params.hideIfNoSiblings),\n });\n }\n if (params.hideIfOneGroupedNode !== undefined) {\n selectors.push({\n key: \"hideIfOneGroupedNode\",\n selector: createECSqlValueSelector(params.hideIfOneGroupedNode),\n });\n }\n if (params.autoExpand !== undefined) {\n selectors.push({\n key: \"autoExpand\",\n selector: createECSqlValueSelector(params.autoExpand),\n });\n }\n return selectors;\n}\n\nfunction serializeJsonObject(selectors: Array<{ key: string; selector: string }>): string {\n return `json_object(${selectors.map(({ key, selector }) => `'${key}', ${selector}`).join(\", \")})`;\n}\n\nasync function createWhereClause(\n contentClassAlias: string,\n classLoader: (alias: string) => Promise<EC.Class | undefined>,\n rule: GenericInstanceFilterRule | GenericInstanceFilterRuleGroup,\n): Promise<string | undefined> {\n if (GenericInstanceFilter.isFilterRuleGroup(rule)) {\n const clause = (await Promise.all(rule.rules.map(async (r) => createWhereClause(contentClassAlias, classLoader, r))))\n .filter((c) => !!c)\n .join(` ${getECSqlLogicalOperator(rule.operator)} `);\n return clause ? (rule.operator === \"or\" ? `(${clause})` : clause) : undefined;\n }\n const sourceAlias = rule.sourceAlias ? rule.sourceAlias : contentClassAlias;\n const propertyValueSelector = ECSql.createRawPropertyValueSelector(sourceAlias, rule.propertyName);\n if (isUnaryRuleOperator(rule.operator)) {\n switch (rule.operator) {\n case \"is-true\":\n return propertyValueSelector;\n case \"is-false\":\n return `NOT ${propertyValueSelector}`;\n case \"is-null\":\n return `${propertyValueSelector} IS NULL`;\n case \"is-not-null\":\n return `${propertyValueSelector} IS NOT NULL`;\n }\n }\n const ecsqlOperator = getECSqlComparisonOperator(rule.operator);\n if (rule.value === undefined) {\n throw new Error(`Rule \"${rule.propertyName}\" ${ecsqlOperator} is missing value.`);\n }\n\n const value = rule.value.rawValue;\n\n if (rule.operator === \"like\" && typeof value === \"string\") {\n const escapedValue = value.replace(/[%_\\\\]/g, \"\\\\$&\");\n return `${propertyValueSelector} ${ecsqlOperator} '%${escapedValue}%' ESCAPE '\\\\'`;\n }\n const propertyClass = await classLoader(sourceAlias);\n if (!propertyClass) {\n throw new Error(`Class with alias \"${sourceAlias}\" not found.`);\n }\n const property = await propertyClass.getProperty(rule.propertyName);\n if (!property) {\n throw new Error(`Property \"${rule.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n if (property.isNavigation()) {\n assert(rule.value !== undefined && GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector}.[Id] ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value.id)}`;\n }\n if (property.isEnumeration()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n if (property.isPrimitive()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n switch (property.primitiveType) {\n case \"Point2d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint2d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Point3d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint3d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[z]`, \"is-equal\", value.z)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Double\": {\n assert(typeof value === \"number\");\n if (rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\") {\n return `${createFloatingPointEqualityClause(propertyValueSelector, rule.operator, value)}`;\n }\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n default: {\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n }\n }\n throw new Error(\"Struct and array properties are not supported for filtering\");\n}\n\nfunction createFloatingPointEqualityClause(valueSelector: string, operator: \"is-equal\" | \"is-not-equal\", value: number) {\n const [from, to] = getFloatingPointValueRange(value);\n return `${valueSelector} ${operator === \"is-not-equal\" ? \"NOT \" : \"\"} BETWEEN ${from} AND ${to}`;\n}\n\nfunction getFloatingPointValueRange(value: number): [number, number] {\n return [value - Number.EPSILON, value + Number.EPSILON];\n}\n\nfunction getECSqlLogicalOperator(op: GenericInstanceFilterRuleGroupOperator) {\n switch (op) {\n case \"and\":\n return \"AND\";\n case \"or\":\n return \"OR\";\n }\n}\n\nfunction isUnaryRuleOperator(\n op: GenericInstanceFilterRuleOperator,\n): op is Extract<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\"> {\n return op === \"is-true\" || op === \"is-false\" || op === \"is-null\" || op === \"is-not-null\";\n}\n\nfunction getECSqlComparisonOperator(op: Exclude<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\">) {\n switch (op) {\n case \"is-equal\":\n return `=`;\n case \"is-not-equal\":\n return `<>`;\n case \"greater\":\n return `>`;\n case \"greater-or-equal\":\n return `>=`;\n case \"less\":\n return `<`;\n case \"less-or-equal\":\n return `<=`;\n case \"like\":\n return `LIKE`;\n }\n}\n\ntype JoinRelationshipPath = Parameters<typeof ECSql.createRelationshipPathJoinClause>[0][\"path\"];\nfunction assignRelationshipPathAliases(\n path: GenericInstanceFilterRelationshipStep[],\n pathIndex: number,\n sourceAlias: string,\n targetAlias: string,\n): JoinRelationshipPath {\n function createAlias(fullClassName: string, index: number) {\n return `rel_${pathIndex}_${fullClassName.replaceAll(/[\\.:]/g, \"_\")}_${index}`;\n }\n const result: JoinRelationshipPath = [];\n path.forEach((step, i) => {\n result.push({\n targetClassName: step.targetClassName,\n relationshipName: step.relationshipClassName,\n sourceClassName: step.sourceClassName,\n relationshipReverse: !step.isForwardRelationship,\n sourceAlias: i === 0 ? sourceAlias : result[i - 1].targetAlias,\n relationshipAlias: createAlias(step.relationshipClassName, i),\n targetAlias: i === path.length - 1 ? targetAlias : createAlias(step.targetClassName, i),\n joinType: \"inner\",\n });\n });\n return result;\n}\n\ninterface SpecializeContentClassProps {\n classHierarchyInspector: ECClassHierarchyInspector;\n contentClassName: string;\n filterClassNames: string[];\n}\nasync function specializeContentClass(props: SpecializeContentClassProps): Promise<string | undefined> {\n const filterClass = await getSpecializedPropertyClass(props.classHierarchyInspector, props.filterClassNames);\n if (!filterClass) {\n return props.contentClassName;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(filterClass, props.contentClassName)) {\n return filterClass;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(props.contentClassName, filterClass)) {\n return props.contentClassName;\n }\n return undefined;\n}\n\nasync function getSpecializedPropertyClass(classHierarchyInspector: ECClassHierarchyInspector, classes: string[]): Promise<string | undefined> {\n if (classes.length === 0) {\n return undefined;\n }\n const [currClassName, ...restClasses] = classes;\n let resolvedClassName = currClassName;\n for (const propClassName of restClasses) {\n if (await classHierarchyInspector.classDerivesFrom(propClassName, resolvedClassName)) {\n resolvedClassName = propClassName;\n }\n }\n return resolvedClassName;\n}\n"]}
1
+ {"version":3,"file":"NodeSelectQueryFactory.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/NodeSelectQueryFactory.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\nimport { assert, Id64String } from \"@itwin/core-bentley\";\nimport {\n GenericInstanceFilter,\n GenericInstanceFilterRelationshipStep,\n GenericInstanceFilterRule,\n GenericInstanceFilterRuleGroup,\n GenericInstanceFilterRuleGroupOperator,\n GenericInstanceFilterRuleOperator,\n GenericInstanceFilterRuleValue,\n} from \"@itwin/core-common\";\nimport {\n EC,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSql,\n getClass,\n IInstanceLabelSelectClauseFactory,\n parseFullClassName,\n PrimitiveValue,\n} from \"@itwin/presentation-shared\";\nimport { HierarchyNodeAutoExpandProp } from \"./IModelHierarchyNode.js\";\n\n/**\n * Column names of the SELECT clause created by `NodeSelectClauseFactory`. Order of the names matches the order of columns\n * created by the factory.\n *\n * @public\n */\nexport enum NodeSelectClauseColumnNames {\n /** Full class name of the instance the node represents. Type: `string` in format `{schema name}:{class name}`. */\n FullClassName = \"FullClassName\",\n /** ECInstance ID of the instance the node represents. Type: `Id64String`. */\n ECInstanceId = \"ECInstanceId\",\n /** Display label. Type: `string`. */\n DisplayLabel = \"DisplayLabel\",\n /**\n * A flag indicating if the node has children. Type: `boolean`. Values:\n * - `false` - node never has children.\n * - `true` - node always has children.\n * - NULL - unknown, needs to be determined by requesting children for the node.\n */\n HasChildren = \"HasChildren\",\n /** A flag indicating that a node should be hidden if it has no children. Type: `boolean`. */\n HideIfNoChildren = \"HideIfNoChildren\",\n /** A flag indicating that a node should be hidden and its children should be displayed instead. Type: `boolean`. */\n HideNodeInHierarchy = \"HideNodeInHierarchy\",\n /** A serialized JSON object for providing grouping information. */\n Grouping = \"Grouping\",\n /** A serialized JSON object for associating a node with additional data. */\n ExtendedData = \"ExtendedData\",\n /** A flag indicating the node should be auto-expanded when it's loaded. */\n AutoExpand = \"AutoExpand\",\n /** A flag indicating the node supports child hierarchy level filtering. */\n SupportsFiltering = \"SupportsFiltering\",\n}\n\n/**\n * A data structure for defining an ECSQL value selector.\n * @public\n */\ninterface ECSqlValueSelector {\n selector: string;\n}\n\n/**\n * Props for `NodeSelectClauseFactory.createSelectClause`.\n * @public\n */\ninterface NodeSelectClauseProps {\n ecClassId: ECSqlValueSelector;\n ecInstanceId: ECSqlValueSelector;\n nodeLabel: string | ECSqlValueSelector;\n extendedData?: {\n [key: string]: Id64String | string | number | boolean | ECSqlValueSelector;\n };\n autoExpand?: boolean | ECSqlValueSelector;\n supportsFiltering?: boolean | ECSqlValueSelector;\n hasChildren?: boolean | ECSqlValueSelector;\n hideNodeInHierarchy?: boolean | ECSqlValueSelector;\n hideIfNoChildren?: boolean | ECSqlValueSelector;\n grouping?: ECSqlSelectClauseGroupingParams;\n}\n\n/**\n * A data structure for defining nodes' grouping requirements.\n * @public\n */\ninterface ECSqlSelectClauseGroupingParams {\n byLabel?: ECSqlSelectClauseLabelGroupingParams;\n byClass?: boolean | ECSqlSelectClauseGroupingParamsBase | ECSqlValueSelector;\n byBaseClasses?: ECSqlSelectClauseBaseClassGroupingParams;\n byProperties?: ECSqlSelectClausePropertiesGroupingParams;\n}\n\n/**\n * A data structure for defining label grouping params.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingBaseParams {\n /** Label grouping option that determines whether to group nodes or to merge them. Defaults to \"group\".*/\n action?: \"group\" | \"merge\";\n /** Id that needs to match for nodes to be grouped or merged.*/\n groupId?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining label merging.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingMergeParams extends ECSqlSelectClauseLabelGroupingBaseParams {\n action: \"merge\";\n}\n\n/**\n * A data structure for defining label grouping.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingGroupParams extends ECSqlSelectClauseLabelGroupingBaseParams, ECSqlSelectClauseGroupingParamsBase {\n action?: \"group\";\n}\n\n/**\n * A data structure for defining possible label grouping types.\n * @public\n */\ntype ECSqlSelectClauseLabelGroupingParams =\n | boolean\n | ECSqlValueSelector\n | ECSqlSelectClauseLabelGroupingMergeParams\n | ECSqlSelectClauseLabelGroupingGroupParams;\n\n/**\n * A data structure for defining base grouping parameters shared across all types of grouping.\n * @public\n */\ninterface ECSqlSelectClauseGroupingParamsBase {\n hideIfNoSiblings?: boolean | ECSqlValueSelector;\n hideIfOneGroupedNode?: boolean | ECSqlValueSelector;\n autoExpand?: HierarchyNodeAutoExpandProp | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining properties grouping.\n * @public\n */\ninterface ECSqlSelectClausePropertiesGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n /**\n * Full name of a class whose properties are used to group the node. Only has effect if the node\n * represents an instance of that class.\n *\n * Full class name format: `SchemaName.ClassName`.\n */\n propertiesClassName: string;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value is not set or is set to an empty string.\n *\n * Label of the created grouping node will be `Not Specified`.\n */\n createGroupForUnspecifiedValues?: boolean | ECSqlValueSelector;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value doesn't fit within any of the provided\n * ranges, or is not a numeric value.\n *\n * Label of the created grouping node will be `Other`.\n */\n createGroupForOutOfRangeValues?: boolean | ECSqlValueSelector;\n /**\n * Properties of the specified class, by which the nodes should be grouped.\n *\n * Example usage:\n * ```ts\n * propertyGroups: [\n * {\n * propertyName: \"type\",\n * propertyClassAlias: \"this\"\n * },\n * {\n * propertyName: \"length\",\n * propertyClassAlias: \"x\",\n * ranges: [\n * { fromValue: 1, toValue: 10, rangeLabel: \"Small\" },\n * { fromValue: 11, toValue: 20, rangeLabel: \"Medium\" }\n * ]\n * },\n * ]\n * ```\n */\n propertyGroups: ECSqlSelectClausePropertyGroup[];\n}\n\n/**\n * A data structure for defining specific properties' grouping params.\n * @public\n */\ninterface ECSqlSelectClausePropertyGroup {\n /** A string indicating the name of the property to group by. */\n propertyName: string;\n /** Alias to of the class containing the property. Used to select the property value. */\n propertyClassAlias: string;\n /** Ranges are used to group nodes by numeric properties which are within specified bounds. */\n ranges?: ECSqlSelectClausePropertyValueRange[];\n}\n\n/**\n * A data structure for defining boundaries for a value.\n * @public\n */\ninterface ECSqlSelectClausePropertyValueRange {\n /** Defines the lower bound of the range. */\n fromValue: number | ECSqlValueSelector;\n /** Defines the upper bound of the range. */\n toValue: number | ECSqlValueSelector;\n /** Defines the range label. Will be used as grouping node's display label. */\n rangeLabel?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining base class grouping.\n * @public\n */\ninterface ECSqlSelectClauseBaseClassGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n fullClassNames: string[] | ECSqlValueSelector[];\n}\n\n/**\n * An interface of a factory that knows how to create nodes' select ECSQL query.\n * @public\n */\nexport interface NodesQueryClauseFactory {\n /** Create a SELECT clause in a format understood by nodes query parser used by `HierarchyProvider`. */\n createSelectClause(props: NodeSelectClauseProps): Promise<string>;\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the given `GenericInstanceFilter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter: GenericInstanceFilter | undefined;\n }): Promise<{ from: string; where: string; joins: string }>;\n}\n\n/**\n * Creates an instance of `NodeSelectQueryFactory`.\n * @public\n */\nexport function createNodesQueryClauseFactory(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n}): NodesQueryClauseFactory {\n return new NodeSelectQueryFactory(props);\n}\n\n/** A factory for creating a nodes' select ECSQL query. */\nclass NodeSelectQueryFactory {\n private _imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n private _instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n\n public constructor(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n }) {\n this._imodelAccess = props.imodelAccess;\n this._instanceLabelSelectClauseFactory = props.instanceLabelSelectClauseFactory;\n }\n\n /** Create a SELECT clause in a format understood by results reader of the library. */\n public async createSelectClause(props: NodeSelectClauseProps) {\n // note: the columns order must match the order in `NodeSelectClauseColumnNames`\n return `\n ec_ClassName(${props.ecClassId.selector}) AS ${NodeSelectClauseColumnNames.FullClassName},\n ${props.ecInstanceId.selector} AS ${NodeSelectClauseColumnNames.ECInstanceId},\n ${createECSqlValueSelector(props.nodeLabel)} AS ${NodeSelectClauseColumnNames.DisplayLabel},\n CAST(${createECSqlValueSelector(props.hasChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HasChildren},\n CAST(${createECSqlValueSelector(props.hideIfNoChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideIfNoChildren},\n CAST(${createECSqlValueSelector(props.hideNodeInHierarchy)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideNodeInHierarchy},\n ${props.grouping ? await createGroupingSelector(props.grouping, this._imodelAccess, this._instanceLabelSelectClauseFactory) : \"CAST(NULL AS TEXT)\"} AS ${NodeSelectClauseColumnNames.Grouping},\n ${\n props.extendedData\n ? `json_object(${Object.entries(props.extendedData)\n .map(([key, value]) => `'${key}', ${createECSqlValueSelector(value)}`)\n .join(\", \")})`\n : \"CAST(NULL AS TEXT)\"\n } AS ${NodeSelectClauseColumnNames.ExtendedData},\n CAST(${createECSqlValueSelector(props.autoExpand)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.AutoExpand},\n CAST(${createECSqlValueSelector(props.supportsFiltering)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.SupportsFiltering}\n `;\n }\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the `filter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n public async createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter: GenericInstanceFilter | undefined;\n }): Promise<{ from: string; where: string; joins: string }> {\n const { contentClass, filter } = props;\n if (!filter) {\n // undefined filter means we don't want any filtering to be applied\n return { from: contentClass.fullName, joins: \"\", where: \"\" };\n }\n\n const from = await specializeContentClass({\n classHierarchyInspector: this._imodelAccess,\n contentClassName: contentClass.fullName,\n filterClassNames: filter.propertyClassNames,\n });\n if (!from) {\n // filter class doesn't intersect with content class - make sure the query returns nothing by returning a `FALSE` WHERE clause\n return { from: contentClass.fullName, joins: \"\", where: \"FALSE\" };\n }\n\n /**\n * TODO:\n * There may be similar related instance paths, e.g.:\n * - A -> B -> C,\n * - A -> B -> D.\n * At this moment we're handling each path individually which means A and B would get joined twice. We could look into\n * creating a join tree first, e.g.\n * C\n * /\n * A -> B\n * \\\n * D\n */\n const joins = await Promise.all(\n filter.relatedInstances.map(async (rel, i) =>\n ECSql.createRelationshipPathJoinClause({\n schemaProvider: this._imodelAccess,\n path: assignRelationshipPathAliases(rel.path, i, contentClass.alias, rel.alias),\n }),\n ),\n );\n\n const whereConditions = new Array<string>();\n if (filter.filteredClassNames && filter.filteredClassNames.length > 0) {\n whereConditions.push(\n `${ECSql.createRawPropertyValueSelector(contentClass.alias, \"ECClassId\")} IS (\n ${filter.filteredClassNames\n .map(parseFullClassName)\n .map(({ schemaName, className }) => `[${schemaName}].[${className}]`)\n .join(\", \")}\n )`,\n );\n }\n const classAliasMap = new Map<string, string>([[contentClass.alias, from]]);\n filter.relatedInstances.forEach(({ path, alias }) => path.length > 0 && classAliasMap.set(alias, path[path.length - 1].targetClassName));\n const propertiesFilter = await createWhereClause(\n contentClass.alias,\n async (alias) => {\n const aliasClassName = classAliasMap.get(alias);\n return aliasClassName ? getClass(this._imodelAccess, aliasClassName) : undefined;\n },\n filter.rules,\n );\n if (propertiesFilter) {\n whereConditions.push(propertiesFilter);\n }\n\n return {\n from,\n joins: joins.join(\"\\n\"),\n where: whereConditions.join(\" AND \"),\n };\n }\n}\n\nfunction createECSqlValueSelector(input: undefined | PrimitiveValue | ECSqlValueSelector) {\n if (input === undefined) {\n return \"NULL\";\n }\n if (isSelector(input)) {\n return input.selector;\n }\n return ECSql.createRawPrimitiveValueSelector(input);\n}\n\nfunction isSelector(x: any): x is ECSqlValueSelector {\n return !!x.selector;\n}\n\nasync function createGroupingSelector(\n grouping: ECSqlSelectClauseGroupingParams,\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n): Promise<string> {\n const groupingSelectors = new Array<{ key: string; selector: string }>();\n\n grouping.byLabel &&\n groupingSelectors.push({\n key: \"byLabel\",\n selector:\n typeof grouping.byLabel === \"boolean\" || isSelector(grouping.byLabel)\n ? createECSqlValueSelector(grouping.byLabel)\n : serializeJsonObject(createLabelGroupingBaseParamsSelectors(grouping.byLabel)),\n });\n\n grouping.byClass &&\n groupingSelectors.push({\n key: \"byClass\",\n selector:\n typeof grouping.byClass === \"boolean\" || isSelector(grouping.byClass)\n ? createECSqlValueSelector(grouping.byClass)\n : serializeJsonObject(createBaseGroupingParamSelectors(grouping.byClass)),\n });\n\n grouping.byBaseClasses &&\n groupingSelectors.push({\n key: \"byBaseClasses\",\n selector: serializeJsonObject([\n {\n key: \"fullClassNames\",\n selector: `json_array(${grouping.byBaseClasses.fullClassNames.map((className) => createECSqlValueSelector(className)).join(\", \")})`,\n },\n ...createBaseGroupingParamSelectors(grouping.byBaseClasses),\n ]),\n });\n\n if (grouping.byProperties) {\n const propertyClass = await getClass(imodelAccess, grouping.byProperties.propertiesClassName);\n groupingSelectors.push({\n key: \"byProperties\",\n selector: serializeJsonObject([\n {\n key: \"propertiesClassName\",\n selector: `${createECSqlValueSelector(grouping.byProperties.propertiesClassName)}`,\n },\n {\n key: \"propertyGroups\",\n selector: `json_array(${(\n await Promise.all(\n grouping.byProperties.propertyGroups.map(async (propertyGroup) =>\n serializeJsonObject(await createPropertyGroupSelectors(propertyGroup, propertyClass, instanceLabelSelectClauseFactory)),\n ),\n )\n ).join(\", \")})`,\n },\n ...(grouping.byProperties.createGroupForOutOfRangeValues !== undefined\n ? [\n {\n key: \"createGroupForOutOfRangeValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForOutOfRangeValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...(grouping.byProperties.createGroupForUnspecifiedValues !== undefined\n ? [\n {\n key: \"createGroupForUnspecifiedValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForUnspecifiedValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...createBaseGroupingParamSelectors(grouping.byProperties),\n ]),\n });\n }\n\n return serializeJsonObject(groupingSelectors);\n}\n\nfunction createLabelGroupingBaseParamsSelectors(byLabel: ECSqlSelectClauseLabelGroupingMergeParams | ECSqlSelectClauseLabelGroupingGroupParams) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (byLabel.action !== undefined) {\n selectors.push({\n key: \"action\",\n selector: `${createECSqlValueSelector(byLabel.action)}`,\n });\n }\n if (byLabel.groupId !== undefined) {\n selectors.push({\n key: \"groupId\",\n selector: createECSqlValueSelector(byLabel.groupId),\n });\n }\n if (byLabel.action !== \"merge\") {\n selectors.push(...createBaseGroupingParamSelectors(byLabel));\n }\n\n return selectors;\n}\n\nasync function createPropertyGroupSelectors(\n propertyGroup: ECSqlSelectClausePropertyGroup,\n propertyClass: EC.Class,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n) {\n const selectors = new Array<{ key: string; selector: string }>();\n selectors.push({\n key: \"propertyName\",\n selector: `${createECSqlValueSelector(propertyGroup.propertyName)}`,\n });\n\n const property = await propertyClass.getProperty(propertyGroup.propertyName);\n if (!property) {\n throw new Error(`Property \"${propertyGroup.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n\n if (property.isNavigation()) {\n const relationshipClass = await property.relationshipClass;\n const abstractConstraint =\n property.direction === \"Forward\" ? await relationshipClass.target.abstractConstraint : await relationshipClass.source.abstractConstraint;\n if (!abstractConstraint) {\n throw new Error(`Could not determine class name for navigation property with direction \"${property.direction}\".`);\n }\n\n const fullName = abstractConstraint.fullName;\n const targetAlias = \"target\";\n selectors.push({\n key: \"propertyValue\",\n selector: `(\n SELECT ${await instanceLabelSelectClauseFactory.createSelectClause({ className: fullName, classAlias: targetAlias })}\n FROM ${fullName} AS ${targetAlias}\n WHERE [${targetAlias}].[ECInstanceId] = [${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}].[Id]\n )`,\n });\n } else {\n selectors.push({\n key: \"propertyValue\",\n selector: `[${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}]`,\n });\n }\n\n if (propertyGroup.ranges) {\n selectors.push(createRangeParamSelectors(propertyGroup.ranges));\n }\n\n return selectors;\n}\n\nfunction createRangeParamSelectors(ranges: ECSqlSelectClausePropertyValueRange[]) {\n return {\n key: \"ranges\",\n selector: `json_array(${ranges\n .map((range) =>\n serializeJsonObject([\n {\n key: \"fromValue\",\n selector: createECSqlValueSelector(range.fromValue),\n },\n {\n key: \"toValue\",\n selector: createECSqlValueSelector(range.toValue),\n },\n ...(range.rangeLabel\n ? [\n {\n key: \"rangeLabel\",\n selector: `${createECSqlValueSelector(range.rangeLabel)}`,\n },\n ]\n : []),\n ]),\n )\n .join(\", \")})`,\n };\n}\n\nfunction createBaseGroupingParamSelectors(params: ECSqlSelectClauseGroupingParamsBase) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (params.hideIfNoSiblings !== undefined) {\n selectors.push({\n key: \"hideIfNoSiblings\",\n selector: createECSqlValueSelector(params.hideIfNoSiblings),\n });\n }\n if (params.hideIfOneGroupedNode !== undefined) {\n selectors.push({\n key: \"hideIfOneGroupedNode\",\n selector: createECSqlValueSelector(params.hideIfOneGroupedNode),\n });\n }\n if (params.autoExpand !== undefined) {\n selectors.push({\n key: \"autoExpand\",\n selector: createECSqlValueSelector(params.autoExpand),\n });\n }\n return selectors;\n}\n\nfunction serializeJsonObject(selectors: Array<{ key: string; selector: string }>): string {\n return `json_object(${selectors.map(({ key, selector }) => `'${key}', ${selector}`).join(\", \")})`;\n}\n\nasync function createWhereClause(\n contentClassAlias: string,\n classLoader: (alias: string) => Promise<EC.Class | undefined>,\n rule: GenericInstanceFilterRule | GenericInstanceFilterRuleGroup,\n): Promise<string | undefined> {\n if (GenericInstanceFilter.isFilterRuleGroup(rule)) {\n const clause = (await Promise.all(rule.rules.map(async (r) => createWhereClause(contentClassAlias, classLoader, r))))\n .filter((c) => !!c)\n .join(` ${getECSqlLogicalOperator(rule.operator)} `);\n return clause ? (rule.operator === \"or\" ? `(${clause})` : clause) : undefined;\n }\n const sourceAlias = rule.sourceAlias ? rule.sourceAlias : contentClassAlias;\n const propertyValueSelector = ECSql.createRawPropertyValueSelector(sourceAlias, rule.propertyName);\n if (isUnaryRuleOperator(rule.operator)) {\n switch (rule.operator) {\n case \"is-true\":\n return propertyValueSelector;\n case \"is-false\":\n return `NOT ${propertyValueSelector}`;\n case \"is-null\":\n return `${propertyValueSelector} IS NULL`;\n case \"is-not-null\":\n return `${propertyValueSelector} IS NOT NULL`;\n }\n }\n const ecsqlOperator = getECSqlComparisonOperator(rule.operator);\n if (rule.value === undefined) {\n throw new Error(`Rule \"${rule.propertyName}\" ${ecsqlOperator} is missing value.`);\n }\n\n const value = rule.value.rawValue;\n\n if (rule.operator === \"like\" && typeof value === \"string\") {\n const escapedValue = value.replace(/[%_\\\\]/g, \"\\\\$&\");\n return `${propertyValueSelector} ${ecsqlOperator} '%${escapedValue}%' ESCAPE '\\\\'`;\n }\n const propertyClass = await classLoader(sourceAlias);\n if (!propertyClass) {\n throw new Error(`Class with alias \"${sourceAlias}\" not found.`);\n }\n const property = await propertyClass.getProperty(rule.propertyName);\n if (!property) {\n throw new Error(`Property \"${rule.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n if (property.isNavigation()) {\n assert(rule.value !== undefined && GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector}.[Id] ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value.id)}`;\n }\n if (property.isEnumeration()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n if (property.isPrimitive()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n switch (property.primitiveType) {\n case \"Point2d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint2d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Point3d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint3d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[z]`, \"is-equal\", value.z)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Double\": {\n assert(typeof value === \"number\");\n if (rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\") {\n return `${createFloatingPointEqualityClause(propertyValueSelector, rule.operator, value)}`;\n }\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n default: {\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n }\n }\n throw new Error(\"Struct and array properties are not supported for filtering\");\n}\n\nfunction createFloatingPointEqualityClause(valueSelector: string, operator: \"is-equal\" | \"is-not-equal\", value: number) {\n const [from, to] = getFloatingPointValueRange(value);\n return `${valueSelector} ${operator === \"is-not-equal\" ? \"NOT \" : \"\"} BETWEEN ${from} AND ${to}`;\n}\n\nfunction getFloatingPointValueRange(value: number): [number, number] {\n return [value - Number.EPSILON, value + Number.EPSILON];\n}\n\nfunction getECSqlLogicalOperator(op: GenericInstanceFilterRuleGroupOperator) {\n switch (op) {\n case \"and\":\n return \"AND\";\n case \"or\":\n return \"OR\";\n }\n}\n\nfunction isUnaryRuleOperator(\n op: GenericInstanceFilterRuleOperator,\n): op is Extract<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\"> {\n return op === \"is-true\" || op === \"is-false\" || op === \"is-null\" || op === \"is-not-null\";\n}\n\nfunction getECSqlComparisonOperator(op: Exclude<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\">) {\n switch (op) {\n case \"is-equal\":\n return `=`;\n case \"is-not-equal\":\n return `<>`;\n case \"greater\":\n return `>`;\n case \"greater-or-equal\":\n return `>=`;\n case \"less\":\n return `<`;\n case \"less-or-equal\":\n return `<=`;\n case \"like\":\n return `LIKE`;\n }\n}\n\ntype JoinRelationshipPath = Parameters<typeof ECSql.createRelationshipPathJoinClause>[0][\"path\"];\nfunction assignRelationshipPathAliases(\n path: GenericInstanceFilterRelationshipStep[],\n pathIndex: number,\n sourceAlias: string,\n targetAlias: string,\n): JoinRelationshipPath {\n function createAlias(fullClassName: string, index: number) {\n return `rel_${pathIndex}_${fullClassName.replaceAll(/[\\.:]/g, \"_\")}_${index}`;\n }\n const result: JoinRelationshipPath = [];\n path.forEach((step, i) => {\n result.push({\n targetClassName: step.targetClassName,\n relationshipName: step.relationshipClassName,\n sourceClassName: step.sourceClassName,\n relationshipReverse: !step.isForwardRelationship,\n sourceAlias: i === 0 ? sourceAlias : result[i - 1].targetAlias,\n relationshipAlias: createAlias(step.relationshipClassName, i),\n targetAlias: i === path.length - 1 ? targetAlias : createAlias(step.targetClassName, i),\n joinType: \"inner\",\n });\n });\n return result;\n}\n\ninterface SpecializeContentClassProps {\n classHierarchyInspector: ECClassHierarchyInspector;\n contentClassName: string;\n filterClassNames: string[];\n}\nasync function specializeContentClass(props: SpecializeContentClassProps): Promise<string | undefined> {\n const filterClass = await getSpecializedPropertyClass(props.classHierarchyInspector, props.filterClassNames);\n if (!filterClass) {\n return props.contentClassName;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(filterClass, props.contentClassName)) {\n return filterClass;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(props.contentClassName, filterClass)) {\n return props.contentClassName;\n }\n return undefined;\n}\n\nasync function getSpecializedPropertyClass(classHierarchyInspector: ECClassHierarchyInspector, classes: string[]): Promise<string | undefined> {\n if (classes.length === 0) {\n return undefined;\n }\n const [currClassName, ...restClasses] = classes;\n let resolvedClassName = currClassName;\n for (const propClassName of restClasses) {\n if (await classHierarchyInspector.classDerivesFrom(propClassName, resolvedClassName)) {\n resolvedClassName = propClassName;\n }\n }\n return resolvedClassName;\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import { Id64String } from "@itwin/core-bentley";
2
2
  import { ECClassHierarchyInspector } from "@itwin/presentation-shared";
3
- import { GenericNodeKey, InstancesNodeKey } from "../HierarchyNodeKey";
4
- import { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyDefinitionParentNode, HierarchyLevelDefinition } from "./IModelHierarchyDefinition";
3
+ import { GenericNodeKey, InstancesNodeKey } from "../HierarchyNodeKey.js";
4
+ import { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyDefinitionParentNode, HierarchyLevelDefinition } from "./IModelHierarchyDefinition.js";
5
5
  /**
6
6
  * Props for defining child hierarchy level for specific parent instance node.
7
7
  * @see `createPredicateBasedHierarchyDefinition`
8
- * @beta
8
+ * @public
9
9
  */
10
10
  export type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode"> & {
11
11
  /** The parent instance node. */
@@ -34,7 +34,7 @@ export type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLev
34
34
  /**
35
35
  * A definition of a hierarchy level that should be used for specific parent instance nodes.
36
36
  * @see `createPredicateBasedHierarchyDefinition`
37
- * @beta
37
+ * @public
38
38
  */
39
39
  interface InstancesNodeChildHierarchyLevelDefinition {
40
40
  /**
@@ -74,7 +74,7 @@ interface InstancesNodeChildHierarchyLevelDefinition {
74
74
  /**
75
75
  * Props for defining child hierarchy level for specific generic parent node.
76
76
  * @see `createPredicateBasedHierarchyDefinition`
77
- * @beta
77
+ * @public
78
78
  */
79
79
  export type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode"> & {
80
80
  /** The parent generic node. */
@@ -85,7 +85,7 @@ export type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLeve
85
85
  /**
86
86
  * A definition of a hierarchy level for that should be used for specific generic parent nodes.
87
87
  * @see `createPredicateBasedHierarchyDefinition`
88
- * @beta
88
+ * @public
89
89
  */
90
90
  interface GenericNodeChildHierarchyLevelDefinition {
91
91
  /**
@@ -101,18 +101,18 @@ interface GenericNodeChildHierarchyLevelDefinition {
101
101
  /**
102
102
  * A hierarchy level definition associated with specific parent instance or generic node. *
103
103
  * @see `createPredicateBasedHierarchyDefinition`
104
- * @beta
104
+ * @public
105
105
  */
106
106
  type PredicateBasedHierarchyLevelDefinition = InstancesNodeChildHierarchyLevelDefinition | GenericNodeChildHierarchyLevelDefinition;
107
107
  /**
108
108
  * Props for defining root hierarchy level.
109
109
  * @see `createPredicateBasedHierarchyDefinition`
110
- * @beta
110
+ * @public
111
111
  */
112
112
  export type DefineRootHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode">;
113
113
  /**
114
114
  * Props for `createPredicateBasedHierarchyDefinition`.
115
- * @beta
115
+ * @public
116
116
  */
117
117
  interface PredicateBasedHierarchyDefinitionProps {
118
118
  /** Access to ECClass hierarchy in the iModel */
@@ -133,7 +133,7 @@ interface PredicateBasedHierarchyDefinitionProps {
133
133
  * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy
134
134
  * level definitions, that are used when the predicate passes.
135
135
  *
136
- * @beta
136
+ * @public
137
137
  */
138
138
  export declare function createPredicateBasedHierarchyDefinition(props: PredicateBasedHierarchyDefinitionProps): HierarchyDefinition;
139
139
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"PredicateBasedHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAe,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEtJ;;;;GAIG;AACH,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACvG,gCAAgC;IAChC,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAEnF;;;;;;;OAOG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;;;;;OAOG;IACH,qBAAqB,EAAE,UAAU,EAAE,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,UAAU,0CAA0C;IAClD;;;;;;;;;OASG;IACH,4BAA4B,EAAE,MAAM,GAAG,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,0CAA0C,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE7G;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACtG,+BAA+B;IAC/B,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,cAAc,CAAA;KAAE,CAAC;CAClF,CAAC;AAEF;;;;GAIG;AACH,UAAU,wCAAwC;IAChD;;;OAGG;IACH,0BAA0B,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,yCAAyC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7G;AAED;;;;GAIG;AACH,KAAK,sCAAsC,GAAG,0CAA0C,GAAG,wCAAwC,CAAC;AAEpI;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;AAE1F;;;GAGG;AACH,UAAU,sCAAsC;IAC9C,gDAAgD;IAChD,uBAAuB,EAAE,yBAAyB,CAAC;IAEnD,kCAAkC;IAClC,SAAS,EAAE;QACT,4DAA4D;QAC5D,SAAS,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEvF;;;WAGG;QACH,UAAU,EAAE,sCAAsC,EAAE,CAAC;KACtD,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,sCAAsC,GAAG,mBAAmB,CAE1H"}
1
+ {"version":3,"file":"PredicateBasedHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAe,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAEzJ;;;;GAIG;AACH,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACvG,gCAAgC;IAChC,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAEnF;;;;;;;OAOG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;;;;;OAOG;IACH,qBAAqB,EAAE,UAAU,EAAE,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,UAAU,0CAA0C;IAClD;;;;;;;;;OASG;IACH,4BAA4B,EAAE,MAAM,GAAG,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,0CAA0C,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE7G;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACtG,+BAA+B;IAC/B,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,cAAc,CAAA;KAAE,CAAC;CAClF,CAAC;AAEF;;;;GAIG;AACH,UAAU,wCAAwC;IAChD;;;OAGG;IACH,0BAA0B,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,yCAAyC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7G;AAED;;;;GAIG;AACH,KAAK,sCAAsC,GAAG,0CAA0C,GAAG,wCAAwC,CAAC;AAEpI;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;AAE1F;;;GAGG;AACH,UAAU,sCAAsC;IAC9C,gDAAgD;IAChD,uBAAuB,EAAE,yBAAyB,CAAC;IAEnD,kCAAkC;IAClC,SAAS,EAAE;QACT,4DAA4D;QAC5D,SAAS,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEvF;;;WAGG;QACH,UAAU,EAAE,sCAAsC,EAAE,CAAC;KACtD,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,sCAAsC,GAAG,mBAAmB,CAE1H"}
@@ -6,13 +6,13 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createPredicateBasedHierarchyDefinition = createPredicateBasedHierarchyDefinition;
8
8
  const rxjs_1 = require("rxjs");
9
- const HierarchyNode_1 = require("../HierarchyNode");
9
+ const HierarchyNode_js_1 = require("../HierarchyNode.js");
10
10
  /**
11
11
  * Creates an instance of `HierarchyDefinition` that uses a somewhat declarative approach to define the
12
12
  * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy
13
13
  * level definitions, that are used when the predicate passes.
14
14
  *
15
- * @beta
15
+ * @public
16
16
  */
17
17
  function createPredicateBasedHierarchyDefinition(props) {
18
18
  return new PredicateBasedHierarchyDefinition(props);
@@ -28,10 +28,7 @@ class PredicateBasedHierarchyDefinition {
28
28
  */
29
29
  async defineHierarchyLevel(props) {
30
30
  const { parentNode } = props;
31
- if (!parentNode) {
32
- return this._props.hierarchy.rootNodes(props);
33
- }
34
- if (HierarchyNode_1.HierarchyNode.isGeneric(parentNode)) {
31
+ if (parentNode && HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode)) {
35
32
  return (0, rxjs_1.firstValueFrom)((0, rxjs_1.from)(this._props.hierarchy.childNodes).pipe((0, rxjs_1.filter)(isGenericNodeChildHierarchyLevelDefinition), (0, rxjs_1.mergeMap)(async (def) => {
36
33
  if (await def.parentGenericNodePredicate(parentNode.key)) {
37
34
  return def.definitions({ ...props, parentNode });
@@ -39,8 +36,7 @@ class PredicateBasedHierarchyDefinition {
39
36
  return [];
40
37
  }), (0, rxjs_1.mergeAll)(), (0, rxjs_1.toArray)()));
41
38
  }
42
- // istanbul ignore else
43
- if (HierarchyNode_1.HierarchyNode.isInstancesNode(parentNode)) {
39
+ if (parentNode && HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode)) {
44
40
  const instancesParentNodeDefs = this._props.hierarchy.childNodes.filter(isInstancesNodeChildHierarchyLevelDefinition);
45
41
  return (0, rxjs_1.firstValueFrom)((0, rxjs_1.from)(groupInstanceIdsByClass(parentNode.key.instanceKeys).entries()).pipe((0, rxjs_1.mergeMap)(async ([parentNodeClassName, parentNodeInstanceIds]) => createHierarchyLevelDefinitions(this._props.classHierarchyInspector, instancesParentNodeDefs, {
46
42
  ...props,
@@ -49,8 +45,7 @@ class PredicateBasedHierarchyDefinition {
49
45
  parentNode,
50
46
  })), (0, rxjs_1.mergeAll)(), (0, rxjs_1.toArray)()));
51
47
  }
52
- // istanbul ignore next
53
- return [];
48
+ return this._props.hierarchy.rootNodes(props);
54
49
  }
55
50
  }
56
51
  async function createHierarchyLevelDefinitions(classHierarchy, defs, requestProps) {
@@ -1 +1 @@
1
- {"version":3,"file":"PredicateBasedHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.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\nimport { concatMap, filter, firstValueFrom, from, mergeAll, mergeMap, toArray } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { HierarchyNode } from \"../HierarchyNode\";\nimport { GenericNodeKey, InstancesNodeKey } from \"../HierarchyNodeKey\";\nimport { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyDefinitionParentNode, HierarchyLevelDefinition } from \"./IModelHierarchyDefinition\";\n\n/**\n * Props for defining child hierarchy level for specific parent instance node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\nexport type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent instance node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: InstancesNodeKey };\n\n /**\n * Full name of the parent instance node class.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeClassName: string;\n\n /**\n * ECInstanceIds of the parent instance node.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeInstanceIds: Id64String[];\n};\n\n/**\n * A definition of a hierarchy level that should be used for specific parent instance nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\ninterface InstancesNodeChildHierarchyLevelDefinition {\n /**\n * A predicate for matching the parent instances node. This can be either a string or a predicate function:\n *\n * - The string version should specify full name of the parent instance node's class to match against when\n * checking if this hierarchy level should be used for specific parent instance node. The check is polymorphic,\n * so `BisCore.Element` class would match `BisCore.GeometricElement`, `BisCore.Category` and all other element classes.\n *\n * - The function version should return a boolean indicating whether this hierarchy level definition should be used\n * for the given parent node.\n */\n parentInstancesNodePredicate: string | ((parentNodeKey: InstancesNodeKey) => Promise<boolean>);\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * If set to true, and node matches at least one of the previous definitions, this definition will not be applied.\n *\n * For example:\n * ```ts\n * {\n * parentInstancesNodePredicate: \"BisCore.GeometricElement3d\",\n * definitions: () => ...,\n * },\n * // This will apply to all elements, that are not `BisCore.GeometricElement3d`\n * {\n * parentInstancesNodePredicate: \"BisCore.Element\",\n * onlyIfNotHandled: true,\n * definitions: () => ...,\n * }\n * ```\n */\n onlyIfNotHandled?: boolean;\n}\n\n/**\n * Props for defining child hierarchy level for specific generic parent node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\nexport type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent generic node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: GenericNodeKey };\n};\n\n/**\n * A definition of a hierarchy level for that should be used for specific generic parent nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\ninterface GenericNodeChildHierarchyLevelDefinition {\n /**\n * A function that indicates whether this hierarchy level definition should be used for\n * specific parent generic node.\n */\n parentGenericNodePredicate: (parentNodeKey: GenericNodeKey) => Promise<boolean>;\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineGenericNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n}\n\n/**\n * A hierarchy level definition associated with specific parent instance or generic node. *\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\ntype PredicateBasedHierarchyLevelDefinition = InstancesNodeChildHierarchyLevelDefinition | GenericNodeChildHierarchyLevelDefinition;\n\n/**\n * Props for defining root hierarchy level.\n * @see `createPredicateBasedHierarchyDefinition`\n * @beta\n */\nexport type DefineRootHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\">;\n\n/**\n * Props for `createPredicateBasedHierarchyDefinition`.\n * @beta\n */\ninterface PredicateBasedHierarchyDefinitionProps {\n /** Access to ECClass hierarchy in the iModel */\n classHierarchyInspector: ECClassHierarchyInspector;\n\n /** Hierarchy level definitions */\n hierarchy: {\n /** Called to create the root hierarchy level definition. */\n rootNodes: (props: DefineRootHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * A list of child hierarchy level definitions. The list is first filtered based on\n * the parent node and then is used to create child hierarchy level definitions.\n */\n childNodes: PredicateBasedHierarchyLevelDefinition[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyDefinition` that uses a somewhat declarative approach to define the\n * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy\n * level definitions, that are used when the predicate passes.\n *\n * @beta\n */\nexport function createPredicateBasedHierarchyDefinition(props: PredicateBasedHierarchyDefinitionProps): HierarchyDefinition {\n return new PredicateBasedHierarchyDefinition(props);\n}\n\nclass PredicateBasedHierarchyDefinition implements HierarchyDefinition {\n public constructor(private _props: PredicateBasedHierarchyDefinitionProps) {}\n\n /**\n * Create hierarchy level definitions for specific hierarchy level.\n * @param parentNode Parent node to create children definitions for.\n */\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const { parentNode } = props;\n if (!parentNode) {\n return this._props.hierarchy.rootNodes(props);\n }\n\n if (HierarchyNode.isGeneric(parentNode)) {\n return firstValueFrom(\n from(this._props.hierarchy.childNodes).pipe(\n filter(isGenericNodeChildHierarchyLevelDefinition),\n mergeMap(async (def) => {\n if (await def.parentGenericNodePredicate(parentNode.key)) {\n return def.definitions({ ...props, parentNode });\n }\n return [];\n }),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n // istanbul ignore else\n if (HierarchyNode.isInstancesNode(parentNode)) {\n const instancesParentNodeDefs = this._props.hierarchy.childNodes.filter(isInstancesNodeChildHierarchyLevelDefinition);\n return firstValueFrom(\n from(groupInstanceIdsByClass(parentNode.key.instanceKeys).entries()).pipe(\n mergeMap(async ([parentNodeClassName, parentNodeInstanceIds]) =>\n createHierarchyLevelDefinitions(this._props.classHierarchyInspector, instancesParentNodeDefs, {\n ...props,\n parentNodeClassName,\n parentNodeInstanceIds,\n parentNode,\n }),\n ),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n // istanbul ignore next\n return [];\n }\n}\n\nasync function createHierarchyLevelDefinitions(\n classHierarchy: ECClassHierarchyInspector,\n defs: InstancesNodeChildHierarchyLevelDefinition[],\n requestProps: DefineInstanceNodeChildHierarchyLevelProps,\n) {\n return from(defs).pipe(\n mergeMap(async (def, idx) => {\n if (\n typeof def.parentInstancesNodePredicate === \"string\" &&\n (await classHierarchy.classDerivesFrom(requestProps.parentNodeClassName, def.parentInstancesNodePredicate))\n ) {\n return { def, idx };\n }\n if (typeof def.parentInstancesNodePredicate === \"function\" && (await def.parentInstancesNodePredicate(requestProps.parentNode.key))) {\n return { def, idx };\n }\n return undefined;\n }),\n filter((x): x is Exclude<typeof x, undefined> => !!x),\n toArray(),\n concatMap((x) => x.sort((a, b) => a.idx - b.idx).map(({ def }) => def)),\n filter((def, idx) => !def.onlyIfNotHandled || idx === 0),\n mergeMap(async (def) => def.definitions(requestProps)),\n mergeAll(),\n );\n}\n\nfunction groupInstanceIdsByClass(instanceKeys: InstanceKey[]) {\n const instanceIdsByClass = new Map<string, Id64String[]>();\n instanceKeys.forEach((key) => {\n let instanceIds = instanceIdsByClass.get(key.className);\n if (!instanceIds) {\n instanceIds = [];\n instanceIdsByClass.set(key.className, instanceIds);\n }\n instanceIds.push(key.id);\n });\n return instanceIdsByClass;\n}\n\nfunction isGenericNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is GenericNodeChildHierarchyLevelDefinition {\n return !!(def as GenericNodeChildHierarchyLevelDefinition).parentGenericNodePredicate;\n}\n\nfunction isInstancesNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is InstancesNodeChildHierarchyLevelDefinition {\n return !!(def as InstancesNodeChildHierarchyLevelDefinition).parentInstancesNodePredicate;\n}\n"]}
1
+ {"version":3,"file":"PredicateBasedHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAwJhG,0FAEC;AAxJD,+BAA4F;AAG5F,0DAAoD;AA4IpD;;;;;;GAMG;AACH,SAAgB,uCAAuC,CAAC,KAA6C;IACnG,OAAO,IAAI,iCAAiC,CAAC,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,iCAAiC;IACV;IAA3B,YAA2B,MAA8C;QAA9C,WAAM,GAAN,MAAM,CAAwC;IAAG,CAAC;IAE7E;;;OAGG;IACI,KAAK,CAAC,oBAAoB,CAAC,KAAgC;QAChE,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QAE7B,IAAI,UAAU,IAAI,gCAAa,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,OAAO,IAAA,qBAAc,EACnB,IAAA,WAAI,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CACzC,IAAA,aAAM,EAAC,0CAA0C,CAAC,EAClD,IAAA,eAAQ,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACrB,IAAI,MAAM,GAAG,CAAC,0BAA0B,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzD,OAAO,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBACnD,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,EACF,IAAA,eAAQ,GAAE,EACV,IAAA,cAAO,GAAE,CACV,CACF,CAAC;QACJ,CAAC;QAED,IAAI,UAAU,IAAI,gCAAa,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5D,MAAM,uBAAuB,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACtH,OAAO,IAAA,qBAAc,EACnB,IAAA,WAAI,EAAC,uBAAuB,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CACvE,IAAA,eAAQ,EAAC,KAAK,EAAE,CAAC,mBAAmB,EAAE,qBAAqB,CAAC,EAAE,EAAE,CAC9D,+BAA+B,CAAC,IAAI,CAAC,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE;gBAC5F,GAAG,KAAK;gBACR,mBAAmB;gBACnB,qBAAqB;gBACrB,UAAU;aACX,CAAC,CACH,EACD,IAAA,eAAQ,GAAE,EACV,IAAA,cAAO,GAAE,CACV,CACF,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CACF;AAED,KAAK,UAAU,+BAA+B,CAC5C,cAAyC,EACzC,IAAkD,EAClD,YAAwD;IAExD,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,CAAC,IAAI,CACpB,IAAA,eAAQ,EAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1B,IACE,OAAO,GAAG,CAAC,4BAA4B,KAAK,QAAQ;YACpD,CAAC,MAAM,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,mBAAmB,EAAE,GAAG,CAAC,4BAA4B,CAAC,CAAC,EAC3G,CAAC;YACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,OAAO,GAAG,CAAC,4BAA4B,KAAK,UAAU,IAAI,CAAC,MAAM,GAAG,CAAC,4BAA4B,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACpI,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,EACF,IAAA,aAAM,EAAC,CAAC,CAAC,EAAqC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EACrD,IAAA,cAAO,GAAE,EACT,IAAA,gBAAS,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EACvE,IAAA,aAAM,EAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,KAAK,CAAC,CAAC,EACxD,IAAA,eAAQ,EAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,EACtD,IAAA,eAAQ,GAAE,CACX,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,YAA2B;IAC1D,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC3D,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,IAAI,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,WAAW,GAAG,EAAE,CAAC;YACjB,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QACD,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,0CAA0C,CAAC,GAA2C;IAC7F,OAAO,CAAC,CAAE,GAAgD,CAAC,0BAA0B,CAAC;AACxF,CAAC;AAED,SAAS,4CAA4C,CAAC,GAA2C;IAC/F,OAAO,CAAC,CAAE,GAAkD,CAAC,4BAA4B,CAAC;AAC5F,CAAC","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 { concatMap, filter, firstValueFrom, from, mergeAll, mergeMap, toArray } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { HierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyDefinitionParentNode, HierarchyLevelDefinition } from \"./IModelHierarchyDefinition.js\";\n\n/**\n * Props for defining child hierarchy level for specific parent instance node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent instance node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: InstancesNodeKey };\n\n /**\n * Full name of the parent instance node class.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeClassName: string;\n\n /**\n * ECInstanceIds of the parent instance node.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeInstanceIds: Id64String[];\n};\n\n/**\n * A definition of a hierarchy level that should be used for specific parent instance nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ninterface InstancesNodeChildHierarchyLevelDefinition {\n /**\n * A predicate for matching the parent instances node. This can be either a string or a predicate function:\n *\n * - The string version should specify full name of the parent instance node's class to match against when\n * checking if this hierarchy level should be used for specific parent instance node. The check is polymorphic,\n * so `BisCore.Element` class would match `BisCore.GeometricElement`, `BisCore.Category` and all other element classes.\n *\n * - The function version should return a boolean indicating whether this hierarchy level definition should be used\n * for the given parent node.\n */\n parentInstancesNodePredicate: string | ((parentNodeKey: InstancesNodeKey) => Promise<boolean>);\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * If set to true, and node matches at least one of the previous definitions, this definition will not be applied.\n *\n * For example:\n * ```ts\n * {\n * parentInstancesNodePredicate: \"BisCore.GeometricElement3d\",\n * definitions: () => ...,\n * },\n * // This will apply to all elements, that are not `BisCore.GeometricElement3d`\n * {\n * parentInstancesNodePredicate: \"BisCore.Element\",\n * onlyIfNotHandled: true,\n * definitions: () => ...,\n * }\n * ```\n */\n onlyIfNotHandled?: boolean;\n}\n\n/**\n * Props for defining child hierarchy level for specific generic parent node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent generic node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: GenericNodeKey };\n};\n\n/**\n * A definition of a hierarchy level for that should be used for specific generic parent nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ninterface GenericNodeChildHierarchyLevelDefinition {\n /**\n * A function that indicates whether this hierarchy level definition should be used for\n * specific parent generic node.\n */\n parentGenericNodePredicate: (parentNodeKey: GenericNodeKey) => Promise<boolean>;\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineGenericNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n}\n\n/**\n * A hierarchy level definition associated with specific parent instance or generic node. *\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ntype PredicateBasedHierarchyLevelDefinition = InstancesNodeChildHierarchyLevelDefinition | GenericNodeChildHierarchyLevelDefinition;\n\n/**\n * Props for defining root hierarchy level.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineRootHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\">;\n\n/**\n * Props for `createPredicateBasedHierarchyDefinition`.\n * @public\n */\ninterface PredicateBasedHierarchyDefinitionProps {\n /** Access to ECClass hierarchy in the iModel */\n classHierarchyInspector: ECClassHierarchyInspector;\n\n /** Hierarchy level definitions */\n hierarchy: {\n /** Called to create the root hierarchy level definition. */\n rootNodes: (props: DefineRootHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * A list of child hierarchy level definitions. The list is first filtered based on\n * the parent node and then is used to create child hierarchy level definitions.\n */\n childNodes: PredicateBasedHierarchyLevelDefinition[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyDefinition` that uses a somewhat declarative approach to define the\n * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy\n * level definitions, that are used when the predicate passes.\n *\n * @public\n */\nexport function createPredicateBasedHierarchyDefinition(props: PredicateBasedHierarchyDefinitionProps): HierarchyDefinition {\n return new PredicateBasedHierarchyDefinition(props);\n}\n\nclass PredicateBasedHierarchyDefinition implements HierarchyDefinition {\n public constructor(private _props: PredicateBasedHierarchyDefinitionProps) {}\n\n /**\n * Create hierarchy level definitions for specific hierarchy level.\n * @param parentNode Parent node to create children definitions for.\n */\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const { parentNode } = props;\n\n if (parentNode && HierarchyNode.isGeneric(parentNode)) {\n return firstValueFrom(\n from(this._props.hierarchy.childNodes).pipe(\n filter(isGenericNodeChildHierarchyLevelDefinition),\n mergeMap(async (def) => {\n if (await def.parentGenericNodePredicate(parentNode.key)) {\n return def.definitions({ ...props, parentNode });\n }\n return [];\n }),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {\n const instancesParentNodeDefs = this._props.hierarchy.childNodes.filter(isInstancesNodeChildHierarchyLevelDefinition);\n return firstValueFrom(\n from(groupInstanceIdsByClass(parentNode.key.instanceKeys).entries()).pipe(\n mergeMap(async ([parentNodeClassName, parentNodeInstanceIds]) =>\n createHierarchyLevelDefinitions(this._props.classHierarchyInspector, instancesParentNodeDefs, {\n ...props,\n parentNodeClassName,\n parentNodeInstanceIds,\n parentNode,\n }),\n ),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n return this._props.hierarchy.rootNodes(props);\n }\n}\n\nasync function createHierarchyLevelDefinitions(\n classHierarchy: ECClassHierarchyInspector,\n defs: InstancesNodeChildHierarchyLevelDefinition[],\n requestProps: DefineInstanceNodeChildHierarchyLevelProps,\n) {\n return from(defs).pipe(\n mergeMap(async (def, idx) => {\n if (\n typeof def.parentInstancesNodePredicate === \"string\" &&\n (await classHierarchy.classDerivesFrom(requestProps.parentNodeClassName, def.parentInstancesNodePredicate))\n ) {\n return { def, idx };\n }\n if (typeof def.parentInstancesNodePredicate === \"function\" && (await def.parentInstancesNodePredicate(requestProps.parentNode.key))) {\n return { def, idx };\n }\n return undefined;\n }),\n filter((x): x is Exclude<typeof x, undefined> => !!x),\n toArray(),\n concatMap((x) => x.sort((a, b) => a.idx - b.idx).map(({ def }) => def)),\n filter((def, idx) => !def.onlyIfNotHandled || idx === 0),\n mergeMap(async (def) => def.definitions(requestProps)),\n mergeAll(),\n );\n}\n\nfunction groupInstanceIdsByClass(instanceKeys: InstanceKey[]) {\n const instanceIdsByClass = new Map<string, Id64String[]>();\n instanceKeys.forEach((key) => {\n let instanceIds = instanceIdsByClass.get(key.className);\n if (!instanceIds) {\n instanceIds = [];\n instanceIdsByClass.set(key.className, instanceIds);\n }\n instanceIds.push(key.id);\n });\n return instanceIdsByClass;\n}\n\nfunction isGenericNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is GenericNodeChildHierarchyLevelDefinition {\n return !!(def as GenericNodeChildHierarchyLevelDefinition).parentGenericNodePredicate;\n}\n\nfunction isInstancesNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is InstancesNodeChildHierarchyLevelDefinition {\n return !!(def as InstancesNodeChildHierarchyLevelDefinition).parentInstancesNodePredicate;\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { Id64String } from "@itwin/core-bentley";
3
3
  import { ECSqlQueryDef } from "@itwin/presentation-shared";
4
- import { NodeParser } from "./IModelHierarchyDefinition";
5
- import { SourceInstanceHierarchyNode } from "./IModelHierarchyNode";
6
- import { LimitingECSqlQueryExecutor } from "./LimitingECSqlQueryExecutor";
7
- import { NodeSelectClauseColumnNames } from "./NodeSelectQueryFactory";
4
+ import { NodeParser } from "./IModelHierarchyDefinition.js";
5
+ import { SourceInstanceHierarchyNode } from "./IModelHierarchyNode.js";
6
+ import { LimitingECSqlQueryExecutor } from "./LimitingECSqlQueryExecutor.js";
7
+ import { NodeSelectClauseColumnNames } from "./NodeSelectQueryFactory.js";
8
8
  interface ReadNodesProps {
9
9
  queryExecutor: LimitingECSqlQueryExecutor;
10
10
  query: ECSqlQueryDef;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodesReader.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAyC,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAC3G,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,UAAU,cAAc;IACtB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAcxF;AAED;;;GAGG;AAEH,MAAM,WAAW,MAAM;IACrB,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IACvD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACnD,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IACpD,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC;IACzD,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;IAC5D,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAChD,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IACnD,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC;CAC3D;AAGD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,2BAA2B,CAoBlG"}
1
+ {"version":3,"file":"TreeNodesReader.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAyC,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E,UAAU,cAAc;IACtB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,2BAA2B,CAAC,CAcxF;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IACvD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACnD,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IACpD,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC;IACzD,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;IAC5D,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAChD,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IACnD,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC;CAC3D;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,2BAA2B,CAoBlG"}
@@ -8,7 +8,7 @@ exports.readNodes = readNodes;
8
8
  exports.defaultNodesParser = defaultNodesParser;
9
9
  const rxjs_1 = require("rxjs");
10
10
  const presentation_shared_1 = require("@itwin/presentation-shared");
11
- const NodeSelectQueryFactory_1 = require("./NodeSelectQueryFactory");
11
+ const NodeSelectQueryFactory_js_1 = require("./NodeSelectQueryFactory.js");
12
12
  /** @internal */
13
13
  function readNodes(props) {
14
14
  const { queryExecutor, query, limit } = props;
@@ -22,7 +22,6 @@ function readNodes(props) {
22
22
  return node instanceof Promise ? (0, rxjs_1.from)(node) : (0, rxjs_1.of)(node);
23
23
  }));
24
24
  }
25
- /* eslint-enable @typescript-eslint/naming-convention */
26
25
  /** @internal */
27
26
  function defaultNodesParser(row) {
28
27
  const typedRow = row;
@@ -1 +1 @@
1
- {"version":3,"file":"TreeNodesReader.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAkBhG,8BAcC;AAsBD,gDAoBC;AAxED,+BAAsD;AAEtD,oEAA+E;AAI/E,qEAAuE;AASvE,gBAAgB;AAChB,SAAgB,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,kBAAkB,CAAC;IACnD,MAAM,MAAM,GAAmE;QAC7E,SAAS,EAAE,oBAAoB;QAC/B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjD,CAAC;IAEF,OAAO,IAAA,WAAI,EAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAC9D,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,IAAI,YAAY,OAAO,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAmBD,wDAAwD;AAExD,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,GAAkC;IACnE,MAAM,QAAQ,GAAG,GAAa,CAAC;IAC/B,MAAM,gBAAgB,GAA0C;QAC9D,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;IACF,OAAO;QACL,+HAA+H;QAC/H,KAAK,EAAE,IAAA,wCAAkB,EAAC,QAAQ,CAAC,YAAY,CAAC;QAChD,GAAG,EAAE;YACH,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;SACnG;QACD,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;AACJ,CAAC","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 { from, mergeMap, Observable, of } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECSqlQueryDef, parseInstanceLabel } from \"@itwin/presentation-shared\";\nimport { NodeParser } from \"./IModelHierarchyDefinition\";\nimport { InstanceHierarchyNodeProcessingParams, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor\";\nimport { NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory\";\n\ninterface ReadNodesProps {\n queryExecutor: LimitingECSqlQueryExecutor;\n query: ECSqlQueryDef;\n limit?: number | \"unbounded\";\n parser?: NodeParser;\n}\n\n/** @internal */\nexport function readNodes(props: ReadNodesProps): Observable<SourceInstanceHierarchyNode> {\n const { queryExecutor, query, limit } = props;\n const parser = props?.parser ?? defaultNodesParser;\n const config: Parameters<LimitingECSqlQueryExecutor[\"createQueryReader\"]>[1] = {\n rowFormat: \"ECSqlPropertyNames\",\n ...(limit !== undefined ? { limit } : undefined),\n };\n\n return from(queryExecutor.createQueryReader(query, config)).pipe(\n mergeMap((row) => {\n const node = parser(row);\n return node instanceof Promise ? from(node) : of(node);\n }),\n );\n}\n\n/**\n * The interface should contain a member for each `NodeSelectClauseColumnNames` value.\n * @internal\n */\n/* eslint-disable @typescript-eslint/naming-convention */\nexport interface RowDef {\n [NodeSelectClauseColumnNames.FullClassName]: string;\n [NodeSelectClauseColumnNames.ECInstanceId]: Id64String;\n [NodeSelectClauseColumnNames.DisplayLabel]: string;\n [NodeSelectClauseColumnNames.HasChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideIfNoChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideNodeInHierarchy]?: boolean;\n [NodeSelectClauseColumnNames.Grouping]?: string;\n [NodeSelectClauseColumnNames.ExtendedData]?: string;\n [NodeSelectClauseColumnNames.AutoExpand]?: boolean;\n [NodeSelectClauseColumnNames.SupportsFiltering]?: boolean;\n}\n/* eslint-enable @typescript-eslint/naming-convention */\n\n/** @internal */\nexport function defaultNodesParser(row: { [columnName: string]: any }): SourceInstanceHierarchyNode {\n const typedRow = row as RowDef;\n const processingParams: InstanceHierarchyNodeProcessingParams = {\n ...(typedRow.HideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(typedRow.HideNodeInHierarchy ? { hideInHierarchy: true } : undefined),\n ...(typedRow.Grouping ? { grouping: JSON.parse(typedRow.Grouping) } : undefined),\n };\n return {\n // don't format the label here - we're going to do that at node pre-processing step to handle both - instance and generic nodes\n label: parseInstanceLabel(typedRow.DisplayLabel),\n key: {\n type: \"instances\",\n instanceKeys: [{ className: typedRow.FullClassName.replace(\":\", \".\"), id: typedRow.ECInstanceId }],\n },\n ...(typedRow.HasChildren !== undefined ? { children: !!typedRow.HasChildren } : undefined),\n ...(typedRow.AutoExpand ? { autoExpand: true } : undefined),\n ...(typedRow.SupportsFiltering ? { supportsFiltering: true } : undefined),\n ...(typedRow.ExtendedData ? { extendedData: JSON.parse(typedRow.ExtendedData) } : undefined),\n ...(Object.keys(processingParams).length > 0 ? { processingParams } : undefined),\n };\n}\n"]}
1
+ {"version":3,"file":"TreeNodesReader.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;AAkBhG,8BAcC;AAoBD,gDAoBC;AAtED,+BAAsD;AAEtD,oEAA+E;AAI/E,2EAA0E;AAS1E,gBAAgB;AAChB,SAAgB,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,kBAAkB,CAAC;IACnD,MAAM,MAAM,GAAmE;QAC7E,SAAS,EAAE,oBAAoB;QAC/B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjD,CAAC;IAEF,OAAO,IAAA,WAAI,EAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAC9D,IAAA,eAAQ,EAAC,CAAC,GAAG,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,IAAI,YAAY,OAAO,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;IACzD,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAmBD,gBAAgB;AAChB,SAAgB,kBAAkB,CAAC,GAAkC;IACnE,MAAM,QAAQ,GAAG,GAAa,CAAC;IAC/B,MAAM,gBAAgB,GAA0C;QAC9D,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;IACF,OAAO;QACL,+HAA+H;QAC/H,KAAK,EAAE,IAAA,wCAAkB,EAAC,QAAQ,CAAC,YAAY,CAAC;QAChD,GAAG,EAAE;YACH,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;SACnG;QACD,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;AACJ,CAAC","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 { from, mergeMap, Observable, of } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECSqlQueryDef, parseInstanceLabel } from \"@itwin/presentation-shared\";\nimport { NodeParser } from \"./IModelHierarchyDefinition.js\";\nimport { InstanceHierarchyNodeProcessingParams, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport { NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory.js\";\n\ninterface ReadNodesProps {\n queryExecutor: LimitingECSqlQueryExecutor;\n query: ECSqlQueryDef;\n limit?: number | \"unbounded\";\n parser?: NodeParser;\n}\n\n/** @internal */\nexport function readNodes(props: ReadNodesProps): Observable<SourceInstanceHierarchyNode> {\n const { queryExecutor, query, limit } = props;\n const parser = props?.parser ?? defaultNodesParser;\n const config: Parameters<LimitingECSqlQueryExecutor[\"createQueryReader\"]>[1] = {\n rowFormat: \"ECSqlPropertyNames\",\n ...(limit !== undefined ? { limit } : undefined),\n };\n\n return from(queryExecutor.createQueryReader(query, config)).pipe(\n mergeMap((row) => {\n const node = parser(row);\n return node instanceof Promise ? from(node) : of(node);\n }),\n );\n}\n\n/**\n * The interface should contain a member for each `NodeSelectClauseColumnNames` value.\n * @internal\n */\nexport interface RowDef {\n [NodeSelectClauseColumnNames.FullClassName]: string;\n [NodeSelectClauseColumnNames.ECInstanceId]: Id64String;\n [NodeSelectClauseColumnNames.DisplayLabel]: string;\n [NodeSelectClauseColumnNames.HasChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideIfNoChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideNodeInHierarchy]?: boolean;\n [NodeSelectClauseColumnNames.Grouping]?: string;\n [NodeSelectClauseColumnNames.ExtendedData]?: string;\n [NodeSelectClauseColumnNames.AutoExpand]?: boolean;\n [NodeSelectClauseColumnNames.SupportsFiltering]?: boolean;\n}\n\n/** @internal */\nexport function defaultNodesParser(row: { [columnName: string]: any }): SourceInstanceHierarchyNode {\n const typedRow = row as RowDef;\n const processingParams: InstanceHierarchyNodeProcessingParams = {\n ...(typedRow.HideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(typedRow.HideNodeInHierarchy ? { hideInHierarchy: true } : undefined),\n ...(typedRow.Grouping ? { grouping: JSON.parse(typedRow.Grouping) } : undefined),\n };\n return {\n // don't format the label here - we're going to do that at node pre-processing step to handle both - instance and generic nodes\n label: parseInstanceLabel(typedRow.DisplayLabel),\n key: {\n type: \"instances\",\n instanceKeys: [{ className: typedRow.FullClassName.replace(\":\", \".\"), id: typedRow.ECInstanceId }],\n },\n ...(typedRow.HasChildren !== undefined ? { children: !!typedRow.HasChildren } : undefined),\n ...(typedRow.AutoExpand ? { autoExpand: true } : undefined),\n ...(typedRow.SupportsFiltering ? { supportsFiltering: true } : undefined),\n ...(typedRow.ExtendedData ? { extendedData: JSON.parse(typedRow.ExtendedData) } : undefined),\n ...(Object.keys(processingParams).length > 0 ? { processingParams } : undefined),\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { ProcessedInstanceHierarchyNode } from "./IModelHierarchyNode";
1
+ import { ProcessedInstanceHierarchyNode } from "./IModelHierarchyNode.js";
2
2
  /** @internal */
3
3
  export declare function mergeInstanceNodes(lhs: ProcessedInstanceHierarchyNode, rhs: ProcessedInstanceHierarchyNode): ProcessedInstanceHierarchyNode;
4
4
  //# sourceMappingURL=Utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2E,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAwChJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,EAAE,GAAG,EAAE,8BAA8B,GAAG,8BAA8B,CAkB3I"}
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2E,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAwCnJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,EAAE,GAAG,EAAE,8BAA8B,GAAG,8BAA8B,CAkB3I"}
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.mergeInstanceNodes = mergeInstanceNodes;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
- const HierarchyNodeKey_1 = require("../HierarchyNodeKey");
9
+ const HierarchyNodeKey_js_1 = require("../HierarchyNodeKey.js");
10
10
  function mergeNodeHandlingParams(lhs, rhs) {
11
11
  if (!lhs && !rhs) {
12
12
  return undefined;
@@ -29,7 +29,7 @@ function mergeByLabelParams(lhs, rhs) {
29
29
  function mergeParentNodeKeys(lhsKeys, rhsKeys) {
30
30
  const res = new Array();
31
31
  for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {
32
- if (!HierarchyNodeKey_1.HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {
32
+ if (!HierarchyNodeKey_js_1.HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {
33
33
  break;
34
34
  }
35
35
  res.push(lhsKeys[i]);
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey\";\nimport { HierarchyNodeLabelGroupingParams, InstanceHierarchyNodeProcessingParams, ProcessedInstanceHierarchyNode } from \"./IModelHierarchyNode\";\n\nfunction mergeNodeHandlingParams(\n lhs: InstanceHierarchyNodeProcessingParams | undefined,\n rhs: InstanceHierarchyNodeProcessingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (!lhs && !rhs) {\n return undefined;\n }\n const params = {\n ...(lhs?.hideIfNoChildren || rhs?.hideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(lhs?.hideInHierarchy || rhs?.hideInHierarchy ? { hideInHierarchy: true } : undefined),\n ...mergeByLabelParams(lhs?.grouping?.byLabel, rhs?.grouping?.byLabel),\n };\n return Object.keys(params).length > 0 ? params : undefined;\n}\n\nfunction mergeByLabelParams(\n lhs: HierarchyNodeLabelGroupingParams | undefined,\n rhs: HierarchyNodeLabelGroupingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (lhs && typeof lhs === \"object\" && lhs.action === \"merge\" && rhs && typeof rhs === \"object\" && rhs.action === \"merge\" && lhs.groupId === rhs.groupId) {\n return {\n grouping: { byLabel: lhs },\n };\n }\n return undefined;\n}\n\nfunction mergeParentNodeKeys(lhsKeys: HierarchyNodeKey[], rhsKeys: HierarchyNodeKey[]): HierarchyNodeKey[] {\n const res = new Array<HierarchyNodeKey>();\n for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {\n if (!HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {\n break;\n }\n res.push(lhsKeys[i]);\n }\n return res;\n}\n\n/** @internal */\nexport function mergeInstanceNodes(lhs: ProcessedInstanceHierarchyNode, rhs: ProcessedInstanceHierarchyNode): ProcessedInstanceHierarchyNode {\n assert(typeof lhs.key === typeof rhs.key);\n const mergedProcessingParams = mergeNodeHandlingParams(lhs.processingParams, rhs.processingParams);\n const mergedChildren = lhs.children === true || rhs.children === true ? true : lhs.children === false && rhs.children === false ? false : undefined;\n const mergedNode: ProcessedInstanceHierarchyNode = {\n ...lhs,\n ...rhs,\n label: lhs.label,\n key: { type: \"instances\", instanceKeys: [...lhs.key.instanceKeys, ...rhs.key.instanceKeys] },\n parentKeys: mergeParentNodeKeys(lhs.parentKeys, rhs.parentKeys),\n };\n // Remove specific properties or change their values based on lhs and rhs nodes\n mergedChildren !== undefined ? (mergedNode.children = mergedChildren) : delete mergedNode.children;\n mergedProcessingParams ? (mergedNode.processingParams = mergedProcessingParams) : delete mergedNode.processingParams;\n lhs.autoExpand || rhs.autoExpand ? (mergedNode.autoExpand = true) : delete mergedNode.autoExpand;\n lhs.extendedData || rhs.extendedData ? (mergedNode.extendedData = { ...lhs.extendedData, ...rhs.extendedData }) : delete mergedNode.extendedData;\n lhs.supportsFiltering && rhs.supportsFiltering ? (mergedNode.supportsFiltering = true) : delete mergedNode.supportsFiltering;\n return mergedNode;\n}\n"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey.js\";\nimport { HierarchyNodeLabelGroupingParams, InstanceHierarchyNodeProcessingParams, ProcessedInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\n\nfunction mergeNodeHandlingParams(\n lhs: InstanceHierarchyNodeProcessingParams | undefined,\n rhs: InstanceHierarchyNodeProcessingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (!lhs && !rhs) {\n return undefined;\n }\n const params = {\n ...(lhs?.hideIfNoChildren || rhs?.hideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(lhs?.hideInHierarchy || rhs?.hideInHierarchy ? { hideInHierarchy: true } : undefined),\n ...mergeByLabelParams(lhs?.grouping?.byLabel, rhs?.grouping?.byLabel),\n };\n return Object.keys(params).length > 0 ? params : undefined;\n}\n\nfunction mergeByLabelParams(\n lhs: HierarchyNodeLabelGroupingParams | undefined,\n rhs: HierarchyNodeLabelGroupingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (lhs && typeof lhs === \"object\" && lhs.action === \"merge\" && rhs && typeof rhs === \"object\" && rhs.action === \"merge\" && lhs.groupId === rhs.groupId) {\n return {\n grouping: { byLabel: lhs },\n };\n }\n return undefined;\n}\n\nfunction mergeParentNodeKeys(lhsKeys: HierarchyNodeKey[], rhsKeys: HierarchyNodeKey[]): HierarchyNodeKey[] {\n const res = new Array<HierarchyNodeKey>();\n for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {\n if (!HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {\n break;\n }\n res.push(lhsKeys[i]);\n }\n return res;\n}\n\n/** @internal */\nexport function mergeInstanceNodes(lhs: ProcessedInstanceHierarchyNode, rhs: ProcessedInstanceHierarchyNode): ProcessedInstanceHierarchyNode {\n assert(typeof lhs.key === typeof rhs.key);\n const mergedProcessingParams = mergeNodeHandlingParams(lhs.processingParams, rhs.processingParams);\n const mergedChildren = lhs.children === true || rhs.children === true ? true : lhs.children === false && rhs.children === false ? false : undefined;\n const mergedNode: ProcessedInstanceHierarchyNode = {\n ...lhs,\n ...rhs,\n label: lhs.label,\n key: { type: \"instances\", instanceKeys: [...lhs.key.instanceKeys, ...rhs.key.instanceKeys] },\n parentKeys: mergeParentNodeKeys(lhs.parentKeys, rhs.parentKeys),\n };\n // Remove specific properties or change their values based on lhs and rhs nodes\n mergedChildren !== undefined ? (mergedNode.children = mergedChildren) : delete mergedNode.children;\n mergedProcessingParams ? (mergedNode.processingParams = mergedProcessingParams) : delete mergedNode.processingParams;\n lhs.autoExpand || rhs.autoExpand ? (mergedNode.autoExpand = true) : delete mergedNode.autoExpand;\n lhs.extendedData || rhs.extendedData ? (mergedNode.extendedData = { ...lhs.extendedData, ...rhs.extendedData }) : delete mergedNode.extendedData;\n lhs.supportsFiltering && rhs.supportsFiltering ? (mergedNode.supportsFiltering = true) : delete mergedNode.supportsFiltering;\n return mergedNode;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { Observable } from "rxjs";
2
- import { ProcessedHierarchyNode } from "../IModelHierarchyNode";
2
+ import { ProcessedHierarchyNode } from "../IModelHierarchyNode.js";
3
3
  /** @internal */
4
4
  export declare const LOGGING_NAMESPACE: string;
5
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DetermineChildren.d.ts","sourceRoot":"","sources":["../../../../../src/hierarchies/imodel/operators/DetermineChildren.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AAItD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,QAA4E,CAAC;AAE3G;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,UAAU,CAAC,OAAO,CAAC,WACrF,UAAU,CAAC,sBAAsB,CAAC,KAAG,UAAU,CAAC,sBAAsB,CAAC,CAmBhG"}
1
+ {"version":3,"file":"DetermineChildren.d.ts","sourceRoot":"","sources":["../../../../../src/hierarchies/imodel/operators/DetermineChildren.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AAItD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,QAA4E,CAAC;AAE3G;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,UAAU,CAAC,OAAO,CAAC,WACrF,UAAU,CAAC,sBAAsB,CAAC,KAAG,UAAU,CAAC,sBAAsB,CAAC,CAmBhG"}