@itwin/presentation-hierarchies 2.0.0-alpha.1 → 2.0.0-alpha.11

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 (294) hide show
  1. package/CHANGELOG.md +356 -8
  2. package/README.md +4 -22
  3. package/lib/cjs/hierarchies/HierarchyMerge.d.ts +19 -0
  4. package/lib/cjs/hierarchies/HierarchyMerge.d.ts.map +1 -0
  5. package/lib/cjs/hierarchies/HierarchyMerge.js +43 -0
  6. package/lib/cjs/hierarchies/HierarchyMerge.js.map +1 -0
  7. package/lib/cjs/hierarchies/HierarchyNode.d.ts +17 -26
  8. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
  9. package/lib/cjs/hierarchies/HierarchyNode.js +1 -21
  10. package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
  11. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts +1 -1
  12. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  13. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  14. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  15. package/lib/cjs/hierarchies/HierarchyNodeKey.js +8 -8
  16. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
  17. package/lib/cjs/hierarchies/HierarchyProvider.d.ts +58 -33
  18. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
  19. package/lib/cjs/hierarchies/HierarchyProvider.js +46 -30
  20. package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
  21. package/lib/cjs/hierarchies/HierarchySearch.d.ts +169 -0
  22. package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +1 -0
  23. package/lib/cjs/hierarchies/HierarchySearch.js +259 -0
  24. package/lib/cjs/hierarchies/HierarchySearch.js.map +1 -0
  25. package/lib/cjs/hierarchies/Logging.d.ts +1 -1
  26. package/lib/cjs/hierarchies/Logging.d.ts.map +1 -1
  27. package/lib/cjs/hierarchies/Logging.js.map +1 -1
  28. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  29. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  30. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +3 -3
  31. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
  32. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +30 -9
  33. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  34. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  35. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts +3 -3
  36. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  37. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  38. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +50 -15
  39. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  40. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +203 -76
  41. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  42. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +1 -1
  43. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
  44. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  45. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +5 -5
  46. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  47. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +102 -43
  48. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  49. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +4 -4
  50. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  51. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  52. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts +35 -0
  53. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  54. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js +285 -0
  55. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  56. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +9 -11
  57. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  58. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +15 -6
  59. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  60. package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -1
  61. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
  62. package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
  63. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts +2 -2
  64. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  65. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  66. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts +5 -5
  67. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  68. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
  69. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  70. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  71. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +1 -0
  72. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  73. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  74. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  75. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  76. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  77. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  78. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  79. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +4 -4
  80. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  81. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +6 -5
  82. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  83. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +4 -4
  84. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  85. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +4 -3
  86. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  87. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  88. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  89. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  90. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  91. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  92. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  93. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +4 -4
  94. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  95. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +22 -17
  96. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  97. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  98. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  99. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  100. package/lib/cjs/hierarchies/internal/Common.d.ts +5 -2
  101. package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
  102. package/lib/cjs/hierarchies/internal/Common.js +12 -1
  103. package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
  104. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts +1 -1
  105. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  106. package/lib/cjs/hierarchies/internal/EachValueFrom.js +3 -0
  107. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
  108. package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts +1 -1
  109. package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts.map +1 -1
  110. package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +1 -1
  111. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts +19 -8
  112. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
  113. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +6 -5
  114. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
  115. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts +1 -1
  116. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
  117. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
  118. package/lib/cjs/hierarchies/internal/operators/Partition.d.ts +2 -1
  119. package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +1 -1
  120. package/lib/cjs/hierarchies/internal/operators/Partition.js.map +1 -1
  121. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts +1 -1
  122. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
  123. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
  124. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts +1 -1
  125. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
  126. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -1
  127. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +1 -1
  128. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -1
  129. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -1
  130. package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts +1 -1
  131. package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
  132. package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -1
  133. package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts +1 -1
  134. package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts.map +1 -1
  135. package/lib/cjs/hierarchies/internal/operators/TapOnce.js.map +1 -1
  136. package/lib/cjs/presentation-hierarchies.d.ts +22 -11
  137. package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
  138. package/lib/cjs/presentation-hierarchies.js +8 -6
  139. package/lib/cjs/presentation-hierarchies.js.map +1 -1
  140. package/lib/esm/hierarchies/HierarchyMerge.d.ts +19 -0
  141. package/lib/esm/hierarchies/HierarchyMerge.d.ts.map +1 -0
  142. package/lib/esm/hierarchies/HierarchyMerge.js +40 -0
  143. package/lib/esm/hierarchies/HierarchyMerge.js.map +1 -0
  144. package/lib/esm/hierarchies/HierarchyNode.d.ts +17 -26
  145. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
  146. package/lib/esm/hierarchies/HierarchyNode.js +1 -21
  147. package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
  148. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +1 -1
  149. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  150. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  151. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  152. package/lib/esm/hierarchies/HierarchyNodeKey.js +9 -9
  153. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
  154. package/lib/esm/hierarchies/HierarchyProvider.d.ts +58 -33
  155. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
  156. package/lib/esm/hierarchies/HierarchyProvider.js +45 -29
  157. package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
  158. package/lib/esm/hierarchies/HierarchySearch.d.ts +169 -0
  159. package/lib/esm/hierarchies/HierarchySearch.d.ts.map +1 -0
  160. package/lib/esm/hierarchies/HierarchySearch.js +254 -0
  161. package/lib/esm/hierarchies/HierarchySearch.js.map +1 -0
  162. package/lib/esm/hierarchies/Logging.d.ts +1 -1
  163. package/lib/esm/hierarchies/Logging.d.ts.map +1 -1
  164. package/lib/esm/hierarchies/Logging.js.map +1 -1
  165. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  166. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  167. package/lib/esm/hierarchies/imodel/HierarchyCache.js +3 -3
  168. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
  169. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +30 -9
  170. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  171. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  172. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts +3 -3
  173. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  174. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  175. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +50 -15
  176. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  177. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +204 -78
  178. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  179. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +1 -1
  180. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
  181. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +1 -1
  182. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  183. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +5 -5
  184. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  185. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +104 -45
  186. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  187. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +4 -4
  188. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  189. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  190. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts +35 -0
  191. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  192. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js +279 -0
  193. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  194. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts +9 -11
  195. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  196. package/lib/esm/hierarchies/imodel/TreeNodesReader.js +13 -5
  197. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  198. package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -1
  199. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
  200. package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
  201. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +2 -2
  202. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  203. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  204. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +5 -5
  205. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  206. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
  207. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  208. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  209. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +1 -0
  210. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  211. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  212. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  213. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  214. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  215. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  216. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  217. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +4 -4
  218. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  219. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +7 -6
  220. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  221. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +4 -4
  222. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  223. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +5 -4
  224. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  225. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  226. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  227. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  228. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  229. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  230. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  231. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +4 -4
  232. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  233. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +23 -18
  234. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  235. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  236. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  237. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  238. package/lib/esm/hierarchies/internal/Common.d.ts +5 -2
  239. package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
  240. package/lib/esm/hierarchies/internal/Common.js +11 -1
  241. package/lib/esm/hierarchies/internal/Common.js.map +1 -1
  242. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts +1 -1
  243. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  244. package/lib/esm/hierarchies/internal/EachValueFrom.js +3 -0
  245. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
  246. package/lib/esm/hierarchies/internal/LoggingUtils.d.ts +1 -1
  247. package/lib/esm/hierarchies/internal/LoggingUtils.d.ts.map +1 -1
  248. package/lib/esm/hierarchies/internal/LoggingUtils.js.map +1 -1
  249. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts +19 -8
  250. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
  251. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js +7 -6
  252. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
  253. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts +1 -1
  254. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
  255. package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
  256. package/lib/esm/hierarchies/internal/operators/Partition.d.ts +2 -1
  257. package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +1 -1
  258. package/lib/esm/hierarchies/internal/operators/Partition.js.map +1 -1
  259. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts +1 -1
  260. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
  261. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
  262. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts +1 -1
  263. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
  264. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -1
  265. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +1 -1
  266. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -1
  267. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -1
  268. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts +1 -1
  269. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
  270. package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -1
  271. package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts +1 -1
  272. package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts.map +1 -1
  273. package/lib/esm/hierarchies/internal/operators/TapOnce.js.map +1 -1
  274. package/lib/esm/presentation-hierarchies.d.ts +22 -11
  275. package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
  276. package/lib/esm/presentation-hierarchies.js +7 -6
  277. package/lib/esm/presentation-hierarchies.js.map +1 -1
  278. package/package.json +19 -19
  279. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts +0 -110
  280. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  281. package/lib/cjs/hierarchies/HierarchyFiltering.js +0 -215
  282. package/lib/cjs/hierarchies/HierarchyFiltering.js.map +0 -1
  283. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
  284. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  285. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -274
  286. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
  287. package/lib/esm/hierarchies/HierarchyFiltering.d.ts +0 -110
  288. package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  289. package/lib/esm/hierarchies/HierarchyFiltering.js +0 -210
  290. package/lib/esm/hierarchies/HierarchyFiltering.js.map +0 -1
  291. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
  292. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  293. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -268
  294. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
@@ -1,268 +0,0 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- import { defer, filter, from, map, merge, mergeAll, mergeMap, of, toArray } from "rxjs";
6
- import { createHierarchyFilteringHelper } from "../HierarchyFiltering.js";
7
- import { HierarchyNodeIdentifier } from "../HierarchyNodeIdentifier.js";
8
- import { HierarchyNodesDefinition, } from "../imodel/IModelHierarchyDefinition.js";
9
- import { ProcessedHierarchyNode } from "../imodel/IModelHierarchyNode.js";
10
- import { NodeSelectClauseColumnNames } from "../imodel/NodeSelectQueryFactory.js";
11
- import { defaultNodesParser } from "../imodel/TreeNodesReader.js";
12
- import { partition } from "../internal/operators/Partition.js";
13
- /** @internal */
14
- export class FilteringHierarchyDefinition {
15
- _imodelAccess;
16
- _source;
17
- _nodeIdentifierPaths;
18
- _nodesParser;
19
- constructor(props) {
20
- this._imodelAccess = props.imodelAccess;
21
- this._source = props.source;
22
- this._nodeIdentifierPaths = props.nodeIdentifierPaths;
23
- this._nodesParser = props.nodesParser ?? this._source.parseNode ?? ((row) => of(defaultNodesParser(row)));
24
- }
25
- get preProcessNode() {
26
- return (node) => {
27
- return (this._source.preProcessNode ? this._source.preProcessNode(node) : of(node)).pipe(filter((processedNode) => {
28
- if (processedNode.processingParams?.hideInHierarchy && processedNode.filtering?.isFilterTarget && !processedNode.filtering.hasFilterTargetAncestor) {
29
- // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another filter target
30
- return false;
31
- }
32
- return true;
33
- }));
34
- };
35
- }
36
- shouldExpandGroupingNode(node) {
37
- for (const child of node.children) {
38
- /* c8 ignore next 3 */
39
- if (!child.filtering) {
40
- continue;
41
- }
42
- if (child.filtering.isFilterTarget) {
43
- const childAutoExpand = child.filtering.filterTargetOptions?.autoExpand;
44
- // If child is a filter target and is has no `autoExpand` flag, then it's always to be expanded.
45
- if (childAutoExpand === true) {
46
- return true;
47
- }
48
- // If it's not an object and not `true`, then it's falsy - continue looking
49
- if (typeof childAutoExpand !== "object") {
50
- continue;
51
- }
52
- // If grouping node's child has `autoExpandUntil` flag,
53
- // auto-expand the grouping node only if it's depth is lower than that of the grouping node in associated with the target.
54
- const nodeDepth = node.parentKeys.length;
55
- const filterTargetDepth = childAutoExpand.depth;
56
- if (nodeDepth < filterTargetDepth) {
57
- return true;
58
- }
59
- }
60
- if (!child.filtering.filteredChildrenIdentifierPaths) {
61
- /* c8 ignore next */
62
- continue;
63
- }
64
- for (const path of child.filtering.filteredChildrenIdentifierPaths) {
65
- if ("path" in path && path.options?.autoExpand) {
66
- return true;
67
- }
68
- }
69
- }
70
- return false;
71
- }
72
- get postProcessNode() {
73
- return (node) => {
74
- return (this._source.postProcessNode ? this._source.postProcessNode(node) : of(node)).pipe(map((processedNode) => {
75
- // instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing
76
- if (ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {
77
- Object.assign(processedNode, { autoExpand: true });
78
- }
79
- return processedNode;
80
- }));
81
- };
82
- }
83
- get parseNode() {
84
- return (row, parentNode) => {
85
- return this._nodesParser(row).pipe(mergeMap((parsedNode) => {
86
- if (!row[ECSQL_COLUMN_NAME_FilterECInstanceId] || !row[ECSQL_COLUMN_NAME_FilterClassName]) {
87
- return of(parsedNode);
88
- }
89
- const rowInstanceKey = { className: row[ECSQL_COLUMN_NAME_FilterClassName], id: row[ECSQL_COLUMN_NAME_FilterECInstanceId] };
90
- const filteringHelper = createHierarchyFilteringHelper(this._nodeIdentifierPaths, parentNode);
91
- const nodeExtraPropsPossiblyPromise = filteringHelper.createChildNodePropsAsync({
92
- pathMatcher: (identifier) => {
93
- if (identifier.id !== rowInstanceKey.id) {
94
- return false;
95
- }
96
- if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {
97
- return false;
98
- }
99
- if (identifier.imodelKey && identifier.imodelKey !== this._imodelAccess.imodelKey) {
100
- return false;
101
- }
102
- if (identifier.className === rowInstanceKey.className) {
103
- return true;
104
- }
105
- return Promise.all([
106
- this._imodelAccess.classDerivesFrom(identifier.className, rowInstanceKey.className),
107
- this._imodelAccess.classDerivesFrom(rowInstanceKey.className, identifier.className),
108
- ]).then(([isDerivedFrom, isDerivedTo]) => isDerivedFrom || isDerivedTo);
109
- },
110
- });
111
- return (nodeExtraPropsPossiblyPromise instanceof Promise ? from(nodeExtraPropsPossiblyPromise) : of(nodeExtraPropsPossiblyPromise)).pipe(map((nodeExtraProps) => {
112
- if (nodeExtraProps?.autoExpand) {
113
- parsedNode.autoExpand = true;
114
- }
115
- if (nodeExtraProps?.filtering) {
116
- parsedNode.filtering = nodeExtraProps.filtering;
117
- }
118
- return parsedNode;
119
- }));
120
- }));
121
- };
122
- }
123
- defineHierarchyLevel(props) {
124
- const sourceDefinitions = this._source.defineHierarchyLevel(props);
125
- const filteringHelper = createHierarchyFilteringHelper(this._nodeIdentifierPaths, props.parentNode);
126
- const childNodeFilteringIdentifiers = filteringHelper.getChildNodeFilteringIdentifiers();
127
- if (!childNodeFilteringIdentifiers) {
128
- return sourceDefinitions;
129
- }
130
- const [genericNodeDefinitions, instanceNodeDefinitions] = partition(sourceDefinitions.pipe(mergeAll()), HierarchyNodesDefinition.isGenericNode);
131
- return merge(genericNodeDefinitions.pipe(map((definition) => {
132
- if (filteringHelper.hasFilterTargetAncestor ||
133
- childNodeFilteringIdentifiers.some((identifier) => HierarchyNodeIdentifier.isGenericNodeIdentifier(identifier) &&
134
- (!identifier.source || identifier.source === this._imodelAccess.imodelKey) &&
135
- identifier.id === definition.node.key)) {
136
- return {
137
- ...definition,
138
- node: {
139
- ...definition.node,
140
- ...filteringHelper.createChildNodeProps({ pathMatcher: ({ id }) => id === definition.node.key }),
141
- },
142
- };
143
- }
144
- return undefined;
145
- }), filter((def) => !!def)), instanceNodeDefinitions.pipe(mergeMap((definition) => {
146
- if (filteringHelper.hasFilterTargetAncestor) {
147
- // if we have a filter target ancestor, we don't need to filter the definitions - we use all of them
148
- return of(applyECInstanceIdsSelector(definition));
149
- }
150
- return defer(async () => {
151
- const imodelAccess = this._imodelAccess;
152
- const matches = new Map();
153
- async function getEntries(x) {
154
- let entries = matches.get(x.id);
155
- if (!entries) {
156
- entries = [];
157
- matches.set(x.id, entries);
158
- }
159
- // make sure that we don't have path identifiers that only differ by class name, where
160
- // class names are in the same class hierarchy, e.g.:
161
- // [{ className: "bis.Element", id: "0x1" }, { className: "bis.Subject", id: "0x1" }]
162
- // are actually the same instance, so we only need to keep one of them, or otherwise the query will
163
- // duplicate it
164
- for (const entry of entries) {
165
- if (entry.className === x.className ||
166
- (await imodelAccess.classDerivesFrom(entry.className, x.className)) ||
167
- (await imodelAccess.classDerivesFrom(x.className, entry.className))) {
168
- return undefined;
169
- }
170
- }
171
- return entries;
172
- }
173
- for (const id of childNodeFilteringIdentifiers) {
174
- // take only identifiers that match the definition by type, source and class
175
- if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {
176
- continue;
177
- }
178
- if (id.imodelKey && id.imodelKey !== imodelAccess.imodelKey) {
179
- continue;
180
- }
181
- if (id.className !== definition.fullClassName &&
182
- !(await Promise.all([
183
- imodelAccess.classDerivesFrom(id.className, definition.fullClassName),
184
- imodelAccess.classDerivesFrom(definition.fullClassName, id.className),
185
- ]).then(([isDerivedFrom, isDerivedTo]) => isDerivedFrom || isDerivedTo))) {
186
- continue;
187
- }
188
- const entriesTargetForPathIdentifier = await getEntries(id);
189
- if (entriesTargetForPathIdentifier) {
190
- entriesTargetForPathIdentifier.push(id);
191
- }
192
- }
193
- return Array.from(matches.values()).flat();
194
- }).pipe(
195
- // only take definitions that have matching path identifiers
196
- filter((pathIdentifiers) => pathIdentifiers.length > 0),
197
- // for each definition that we're going to use, apply query-level filter
198
- map((pathIdentifiers) => applyECInstanceIdsFilter(definition, pathIdentifiers)));
199
- }))).pipe(toArray());
200
- }
201
- }
202
- /** @internal */
203
- // eslint-disable-next-line @typescript-eslint/naming-convention
204
- export const ECSQL_COLUMN_NAME_FilterECInstanceId = "FilterECInstanceId";
205
- /** @internal */
206
- // eslint-disable-next-line @typescript-eslint/naming-convention
207
- export const ECSQL_COLUMN_NAME_FilterClassName = "FilterClassName";
208
- function getClassECInstanceIds(filteredInstanceKeys) {
209
- const classNameECInstanceIds = new Map();
210
- for (const key of filteredInstanceKeys) {
211
- const entry = classNameECInstanceIds.get(key.className);
212
- if (entry === undefined) {
213
- classNameECInstanceIds.set(key.className, [key.id]);
214
- continue;
215
- }
216
- entry.push(key.id);
217
- }
218
- return classNameECInstanceIds;
219
- }
220
- /** @internal */
221
- export function applyECInstanceIdsFilter(def, filteredInstanceKeys) {
222
- const instanceIdsByClass = getClassECInstanceIds(filteredInstanceKeys);
223
- return {
224
- ...def,
225
- query: {
226
- ...def.query,
227
- ctes: [
228
- ...(def.query.ctes ?? []),
229
- `FilteringInfo(ECInstanceId, FilterClassName) AS (
230
- ${Array.from(instanceIdsByClass)
231
- .map(([className, ecInstanceIds]) => `
232
- SELECT ECInstanceId, '${className}' AS FilterClassName
233
- FROM ${className}
234
- WHERE ECInstanceId IN (${ecInstanceIds.join(", ")})
235
- `)
236
- .join(" UNION ALL ")}
237
- )`,
238
- ],
239
- ecsql: `
240
- SELECT
241
- [q].*,
242
- IdToHex([f].[ECInstanceId]) AS [${ECSQL_COLUMN_NAME_FilterECInstanceId}],
243
- [f].[FilterClassName] AS [${ECSQL_COLUMN_NAME_FilterClassName}]
244
- FROM (
245
- ${def.query.ecsql}
246
- ) [q]
247
- JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]
248
- `,
249
- },
250
- };
251
- }
252
- /** @internal */
253
- export function applyECInstanceIdsSelector(def) {
254
- return {
255
- ...def,
256
- query: {
257
- ...def.query,
258
- ecsql: `
259
- SELECT
260
- [q].*,
261
- IdToHex([q].[ECInstanceId]) AS [${ECSQL_COLUMN_NAME_FilterECInstanceId}],
262
- [q].[${NodeSelectClauseColumnNames.FullClassName}] AS [${ECSQL_COLUMN_NAME_FilterClassName}]
263
- FROM (${def.query.ecsql}) [q]
264
- `,
265
- },
266
- };
267
- }
268
- //# sourceMappingURL=FilteringHierarchyDefinition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"FilteringHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/FilteringHierarchyDefinition.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 { defer, filter, from, map, merge, mergeAll, mergeMap, Observable, of, toArray } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { createHierarchyFilteringHelper, HierarchyFilteringPath } from \"../HierarchyFiltering.js\";\nimport { HierarchyNodeIdentifier } from \"../HierarchyNodeIdentifier.js\";\nimport { IModelInstanceKey } from \"../HierarchyNodeKey.js\";\nimport {\n DefineHierarchyLevelProps,\n GenericHierarchyNodeDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n InstanceNodesQueryDefinition,\n} from \"../imodel/IModelHierarchyDefinition.js\";\nimport { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode } from \"../imodel/IModelHierarchyNode.js\";\nimport { NodeSelectClauseColumnNames } from \"../imodel/NodeSelectQueryFactory.js\";\nimport { defaultNodesParser } from \"../imodel/TreeNodesReader.js\";\nimport { partition } from \"../internal/operators/Partition.js\";\nimport { RxjsHierarchyDefinition, RxjsNodeParser, RxjsNodePostProcessor, RxjsNodePreProcessor } from \"../internal/RxjsHierarchyDefinition.js\";\n\ninterface FilteringHierarchyDefinitionProps {\n imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n source: RxjsHierarchyDefinition;\n nodeIdentifierPaths: HierarchyFilteringPath[];\n nodesParser?: RxjsNodeParser;\n}\n\n/** @internal */\nexport class FilteringHierarchyDefinition implements RxjsHierarchyDefinition {\n private _imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n private _source: RxjsHierarchyDefinition;\n private _nodeIdentifierPaths: HierarchyFilteringPath[];\n private _nodesParser: RxjsNodeParser;\n\n public constructor(props: FilteringHierarchyDefinitionProps) {\n this._imodelAccess = props.imodelAccess;\n this._source = props.source;\n this._nodeIdentifierPaths = props.nodeIdentifierPaths;\n this._nodesParser = props.nodesParser ?? this._source.parseNode ?? ((row) => of(defaultNodesParser(row)));\n }\n\n public get preProcessNode(): RxjsNodePreProcessor {\n return (node) => {\n return (this._source.preProcessNode ? this._source.preProcessNode(node) : of(node)).pipe(\n filter((processedNode) => {\n if (processedNode.processingParams?.hideInHierarchy && processedNode.filtering?.isFilterTarget && !processedNode.filtering.hasFilterTargetAncestor) {\n // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another filter target\n return false;\n }\n return true;\n }),\n );\n };\n }\n\n private shouldExpandGroupingNode(node: ProcessedGroupingHierarchyNode) {\n for (const child of node.children) {\n /* c8 ignore next 3 */\n if (!child.filtering) {\n continue;\n }\n\n if (child.filtering.isFilterTarget) {\n const childAutoExpand = child.filtering.filterTargetOptions?.autoExpand;\n\n // If child is a filter target and is has no `autoExpand` flag, then it's always to be expanded.\n if (childAutoExpand === true) {\n return true;\n }\n\n // If it's not an object and not `true`, then it's falsy - continue looking\n if (typeof childAutoExpand !== \"object\") {\n continue;\n }\n\n // If grouping node's child has `autoExpandUntil` flag,\n // auto-expand the grouping node only if it's depth is lower than that of the grouping node in associated with the target.\n const nodeDepth = node.parentKeys.length;\n const filterTargetDepth = childAutoExpand.depth;\n if (nodeDepth < filterTargetDepth) {\n return true;\n }\n }\n\n if (!child.filtering.filteredChildrenIdentifierPaths) {\n /* c8 ignore next */\n continue;\n }\n\n for (const path of child.filtering.filteredChildrenIdentifierPaths) {\n if (\"path\" in path && path.options?.autoExpand) {\n return true;\n }\n }\n }\n return false;\n }\n\n public get postProcessNode(): RxjsNodePostProcessor {\n return (node) => {\n return (this._source.postProcessNode ? this._source.postProcessNode(node) : of(node)).pipe(\n map((processedNode) => {\n // instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing\n if (ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {\n Object.assign(processedNode, { autoExpand: true });\n }\n return processedNode;\n }),\n );\n };\n }\n\n public get parseNode(): RxjsNodeParser {\n return (row, parentNode) => {\n return this._nodesParser(row).pipe(\n mergeMap((parsedNode) => {\n if (!row[ECSQL_COLUMN_NAME_FilterECInstanceId] || !row[ECSQL_COLUMN_NAME_FilterClassName]) {\n return of(parsedNode);\n }\n const rowInstanceKey = { className: row[ECSQL_COLUMN_NAME_FilterClassName], id: row[ECSQL_COLUMN_NAME_FilterECInstanceId] };\n const filteringHelper = createHierarchyFilteringHelper(this._nodeIdentifierPaths, parentNode);\n const nodeExtraPropsPossiblyPromise = filteringHelper.createChildNodePropsAsync({\n pathMatcher: (identifier): boolean | Promise<boolean> => {\n if (identifier.id !== rowInstanceKey.id) {\n return false;\n }\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {\n return false;\n }\n if (identifier.imodelKey && identifier.imodelKey !== this._imodelAccess.imodelKey) {\n return false;\n }\n if (identifier.className === rowInstanceKey.className) {\n return true;\n }\n return Promise.all([\n this._imodelAccess.classDerivesFrom(identifier.className, rowInstanceKey.className),\n this._imodelAccess.classDerivesFrom(rowInstanceKey.className, identifier.className),\n ]).then(([isDerivedFrom, isDerivedTo]) => isDerivedFrom || isDerivedTo);\n },\n });\n return (nodeExtraPropsPossiblyPromise instanceof Promise ? from(nodeExtraPropsPossiblyPromise) : of(nodeExtraPropsPossiblyPromise)).pipe(\n map((nodeExtraProps) => {\n if (nodeExtraProps?.autoExpand) {\n parsedNode.autoExpand = true;\n }\n if (nodeExtraProps?.filtering) {\n parsedNode.filtering = nodeExtraProps.filtering;\n }\n return parsedNode;\n }),\n );\n }),\n );\n };\n }\n\n public defineHierarchyLevel(props: DefineHierarchyLevelProps): Observable<HierarchyLevelDefinition> {\n const sourceDefinitions = this._source.defineHierarchyLevel(props);\n\n const filteringHelper = createHierarchyFilteringHelper(this._nodeIdentifierPaths, props.parentNode);\n const childNodeFilteringIdentifiers = filteringHelper.getChildNodeFilteringIdentifiers();\n if (!childNodeFilteringIdentifiers) {\n return sourceDefinitions;\n }\n\n const [genericNodeDefinitions, instanceNodeDefinitions] = partition(sourceDefinitions.pipe(mergeAll()), HierarchyNodesDefinition.isGenericNode);\n return merge(\n genericNodeDefinitions.pipe(\n map((definition) => {\n if (\n filteringHelper.hasFilterTargetAncestor ||\n childNodeFilteringIdentifiers.some(\n (identifier) =>\n HierarchyNodeIdentifier.isGenericNodeIdentifier(identifier) &&\n (!identifier.source || identifier.source === this._imodelAccess.imodelKey) &&\n identifier.id === definition.node.key,\n )\n ) {\n return {\n ...definition,\n node: {\n ...definition.node,\n ...filteringHelper.createChildNodeProps({ pathMatcher: ({ id }) => id === definition.node.key }),\n },\n };\n }\n return undefined;\n }),\n filter((def): def is GenericHierarchyNodeDefinition => !!def),\n ),\n\n instanceNodeDefinitions.pipe(\n mergeMap((definition) => {\n if (filteringHelper.hasFilterTargetAncestor) {\n // if we have a filter target ancestor, we don't need to filter the definitions - we use all of them\n return of(applyECInstanceIdsSelector(definition));\n }\n return defer(async () => {\n const imodelAccess = this._imodelAccess;\n const matches = new Map<Id64String, IModelInstanceKey[]>();\n async function getEntries(x: IModelInstanceKey) {\n let entries = matches.get(x.id);\n if (!entries) {\n entries = [];\n matches.set(x.id, entries);\n }\n // make sure that we don't have path identifiers that only differ by class name, where\n // class names are in the same class hierarchy, e.g.:\n // [{ className: \"bis.Element\", id: \"0x1\" }, { className: \"bis.Subject\", id: \"0x1\" }]\n // are actually the same instance, so we only need to keep one of them, or otherwise the query will\n // duplicate it\n for (const entry of entries) {\n if (\n entry.className === x.className ||\n (await imodelAccess.classDerivesFrom(entry.className, x.className)) ||\n (await imodelAccess.classDerivesFrom(x.className, entry.className))\n ) {\n return undefined;\n }\n }\n return entries;\n }\n for (const id of childNodeFilteringIdentifiers) {\n // take only identifiers that match the definition by type, source and class\n if (!HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {\n continue;\n }\n if (id.imodelKey && id.imodelKey !== imodelAccess.imodelKey) {\n continue;\n }\n if (\n id.className !== definition.fullClassName &&\n !(await Promise.all([\n imodelAccess.classDerivesFrom(id.className, definition.fullClassName),\n imodelAccess.classDerivesFrom(definition.fullClassName, id.className),\n ]).then(([isDerivedFrom, isDerivedTo]) => isDerivedFrom || isDerivedTo))\n ) {\n continue;\n }\n const entriesTargetForPathIdentifier = await getEntries(id);\n if (entriesTargetForPathIdentifier) {\n entriesTargetForPathIdentifier.push(id);\n }\n }\n return Array.from(matches.values()).flat();\n }).pipe(\n // only take definitions that have matching path identifiers\n filter((pathIdentifiers) => pathIdentifiers.length > 0),\n\n // for each definition that we're going to use, apply query-level filter\n map((pathIdentifiers) => applyECInstanceIdsFilter(definition, pathIdentifiers)),\n );\n }),\n ),\n ).pipe(toArray());\n }\n}\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilterECInstanceId = \"FilterECInstanceId\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilterClassName = \"FilterClassName\";\n\nfunction getClassECInstanceIds(filteredInstanceKeys: InstanceKey[]) {\n const classNameECInstanceIds = new Map<string, Id64String[]>();\n for (const key of filteredInstanceKeys) {\n const entry = classNameECInstanceIds.get(key.className);\n if (entry === undefined) {\n classNameECInstanceIds.set(key.className, [key.id]);\n continue;\n }\n entry.push(key.id);\n }\n return classNameECInstanceIds;\n}\n\n/** @internal */\nexport function applyECInstanceIdsFilter(def: InstanceNodesQueryDefinition, filteredInstanceKeys: InstanceKey[]): InstanceNodesQueryDefinition {\n const instanceIdsByClass = getClassECInstanceIds(filteredInstanceKeys);\n return {\n ...def,\n query: {\n ...def.query,\n ctes: [\n ...(def.query.ctes ?? []),\n `FilteringInfo(ECInstanceId, FilterClassName) AS (\n ${Array.from(instanceIdsByClass)\n .map(\n ([className, ecInstanceIds]) => `\n SELECT ECInstanceId, '${className}' AS FilterClassName\n FROM ${className}\n WHERE ECInstanceId IN (${ecInstanceIds.join(\", \")})\n `,\n )\n .join(\" UNION ALL \")}\n )`,\n ],\n ecsql: `\n SELECT\n [q].*,\n IdToHex([f].[ECInstanceId]) AS [${ECSQL_COLUMN_NAME_FilterECInstanceId}],\n [f].[FilterClassName] AS [${ECSQL_COLUMN_NAME_FilterClassName}]\n FROM (\n ${def.query.ecsql}\n ) [q]\n JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]\n `,\n },\n };\n}\n\n/** @internal */\nexport function applyECInstanceIdsSelector(def: InstanceNodesQueryDefinition): InstanceNodesQueryDefinition {\n return {\n ...def,\n query: {\n ...def.query,\n ecsql: `\n SELECT\n [q].*,\n IdToHex([q].[ECInstanceId]) AS [${ECSQL_COLUMN_NAME_FilterECInstanceId}],\n [q].[${NodeSelectClauseColumnNames.FullClassName}] AS [${ECSQL_COLUMN_NAME_FilterClassName}]\n FROM (${def.query.ecsql}) [q]\n `,\n },\n };\n}\n"]}