@itwin/presentation-hierarchies 2.0.0-alpha.15 → 2.0.0-alpha.17

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 (424) hide show
  1. package/CHANGELOG.md +74 -0
  2. package/README.md +6 -17
  3. package/lib/hierarchies/HierarchyErrors.d.ts.map +1 -0
  4. package/lib/hierarchies/HierarchyErrors.js.map +1 -0
  5. package/lib/hierarchies/HierarchyMerge.d.ts.map +1 -0
  6. package/lib/hierarchies/HierarchyMerge.js.map +1 -0
  7. package/lib/hierarchies/HierarchyNode.d.ts.map +1 -0
  8. package/lib/hierarchies/HierarchyNode.js.map +1 -0
  9. package/lib/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -0
  10. package/lib/hierarchies/HierarchyNodeIdentifier.js.map +1 -0
  11. package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeKey.d.ts +4 -4
  12. package/lib/hierarchies/HierarchyNodeKey.d.ts.map +1 -0
  13. package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeKey.js +5 -5
  14. package/lib/hierarchies/HierarchyNodeKey.js.map +1 -0
  15. package/lib/hierarchies/HierarchyProvider.d.ts.map +1 -0
  16. package/lib/hierarchies/HierarchyProvider.js.map +1 -0
  17. package/lib/hierarchies/HierarchySearch.d.ts.map +1 -0
  18. package/lib/hierarchies/HierarchySearch.js.map +1 -0
  19. package/lib/hierarchies/Logging.d.ts.map +1 -0
  20. package/lib/hierarchies/Logging.js.map +1 -0
  21. package/lib/hierarchies/imodel/HierarchyCache.d.ts.map +1 -0
  22. package/lib/hierarchies/imodel/HierarchyCache.js.map +1 -0
  23. package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyDefinition.d.ts +3 -34
  24. package/lib/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -0
  25. package/lib/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -0
  26. package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyNode.d.ts +2 -2
  27. package/lib/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -0
  28. package/lib/hierarchies/imodel/IModelHierarchyNode.js.map +1 -0
  29. package/lib/{cjs/hierarchies → hierarchies}/imodel/IModelHierarchyProvider.d.ts +20 -2
  30. package/lib/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -0
  31. package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyProvider.js +27 -21
  32. package/lib/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -0
  33. package/lib/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -0
  34. package/lib/{esm/hierarchies → hierarchies}/imodel/LimitingECSqlQueryExecutor.js +6 -2
  35. package/lib/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -0
  36. package/lib/{esm/hierarchies → hierarchies}/imodel/NodeSelectQueryFactory.d.ts +8 -7
  37. package/lib/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -0
  38. package/lib/{esm/hierarchies → hierarchies}/imodel/NodeSelectQueryFactory.js +16 -11
  39. package/lib/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -0
  40. package/lib/{esm/hierarchies → hierarchies}/imodel/PredicateBasedHierarchyDefinition.d.ts +2 -2
  41. package/lib/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -0
  42. package/lib/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -0
  43. package/lib/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  44. package/lib/{esm/hierarchies → hierarchies}/imodel/SearchHierarchyDefinition.js +3 -4
  45. package/lib/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  46. package/lib/{esm/hierarchies → hierarchies}/imodel/TreeNodesReader.d.ts +1 -1
  47. package/lib/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -0
  48. package/lib/{esm/hierarchies → hierarchies}/imodel/TreeNodesReader.js +2 -5
  49. package/lib/hierarchies/imodel/TreeNodesReader.js.map +1 -0
  50. package/lib/{esm/hierarchies → hierarchies}/imodel/Utils.d.ts +1 -0
  51. package/lib/hierarchies/imodel/Utils.d.ts.map +1 -0
  52. package/lib/{esm/hierarchies → hierarchies}/imodel/Utils.js +1 -0
  53. package/lib/hierarchies/imodel/Utils.js.map +1 -0
  54. package/lib/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -0
  55. package/lib/hierarchies/imodel/operators/DetermineChildren.js.map +1 -0
  56. package/lib/hierarchies/imodel/operators/Grouping.d.ts.map +1 -0
  57. package/lib/hierarchies/imodel/operators/Grouping.js.map +1 -0
  58. package/lib/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -0
  59. package/lib/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -0
  60. package/lib/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -0
  61. package/lib/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -0
  62. package/lib/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -0
  63. package/lib/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -0
  64. package/lib/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -0
  65. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/BaseClassGrouping.js +4 -4
  66. package/lib/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -0
  67. package/lib/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -0
  68. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/ClassGrouping.js +3 -3
  69. package/lib/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -0
  70. package/lib/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -0
  71. package/lib/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -0
  72. package/lib/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -0
  73. package/lib/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -0
  74. package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/PropertiesGrouping.d.ts +1 -1
  75. package/lib/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -0
  76. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/PropertiesGrouping.js +10 -9
  77. package/lib/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -0
  78. package/lib/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -0
  79. package/lib/hierarchies/imodel/operators/grouping/Shared.js.map +1 -0
  80. package/lib/hierarchies/internal/Common.d.ts.map +1 -0
  81. package/lib/hierarchies/internal/Common.js.map +1 -0
  82. package/lib/hierarchies/internal/DisposePolyfill.d.ts.map +1 -0
  83. package/lib/hierarchies/internal/DisposePolyfill.js.map +1 -0
  84. package/lib/hierarchies/internal/EachValueFrom.d.ts.map +1 -0
  85. package/lib/hierarchies/internal/EachValueFrom.js.map +1 -0
  86. package/lib/hierarchies/internal/LoggingUtils.d.ts.map +1 -0
  87. package/lib/hierarchies/internal/LoggingUtils.js.map +1 -0
  88. package/lib/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -0
  89. package/lib/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -0
  90. package/lib/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -0
  91. package/lib/hierarchies/internal/SubscriptionScheduler.js.map +1 -0
  92. package/lib/hierarchies/internal/operators/Partition.d.ts.map +1 -0
  93. package/lib/hierarchies/internal/operators/Partition.js.map +1 -0
  94. package/lib/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -0
  95. package/lib/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -0
  96. package/lib/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -0
  97. package/lib/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -0
  98. package/lib/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -0
  99. package/lib/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -0
  100. package/lib/hierarchies/internal/operators/Sorting.d.ts.map +1 -0
  101. package/lib/hierarchies/internal/operators/Sorting.js.map +1 -0
  102. package/lib/hierarchies/internal/operators/TapOnce.d.ts.map +1 -0
  103. package/lib/hierarchies/internal/operators/TapOnce.js.map +1 -0
  104. package/lib/{esm/presentation-hierarchies.d.ts → presentation-hierarchies.d.ts} +0 -2
  105. package/lib/presentation-hierarchies.d.ts.map +1 -0
  106. package/lib/{esm/presentation-hierarchies.js → presentation-hierarchies.js} +0 -1
  107. package/lib/presentation-hierarchies.js.map +1 -0
  108. package/package.json +19 -21
  109. package/lib/cjs/hierarchies/HierarchyErrors.d.ts.map +0 -1
  110. package/lib/cjs/hierarchies/HierarchyErrors.js +0 -20
  111. package/lib/cjs/hierarchies/HierarchyErrors.js.map +0 -1
  112. package/lib/cjs/hierarchies/HierarchyMerge.d.ts.map +0 -1
  113. package/lib/cjs/hierarchies/HierarchyMerge.js +0 -43
  114. package/lib/cjs/hierarchies/HierarchyMerge.js.map +0 -1
  115. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +0 -1
  116. package/lib/cjs/hierarchies/HierarchyNode.js +0 -82
  117. package/lib/cjs/hierarchies/HierarchyNode.js.map +0 -1
  118. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +0 -1
  119. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js +0 -52
  120. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +0 -1
  121. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts +0 -162
  122. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +0 -1
  123. package/lib/cjs/hierarchies/HierarchyNodeKey.js +0 -166
  124. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +0 -1
  125. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +0 -1
  126. package/lib/cjs/hierarchies/HierarchyProvider.js +0 -64
  127. package/lib/cjs/hierarchies/HierarchyProvider.js.map +0 -1
  128. package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +0 -1
  129. package/lib/cjs/hierarchies/HierarchySearch.js +0 -468
  130. package/lib/cjs/hierarchies/HierarchySearch.js.map +0 -1
  131. package/lib/cjs/hierarchies/Logging.d.ts.map +0 -1
  132. package/lib/cjs/hierarchies/Logging.js +0 -27
  133. package/lib/cjs/hierarchies/Logging.js.map +0 -1
  134. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +0 -1
  135. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +0 -81
  136. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +0 -1
  137. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +0 -175
  138. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +0 -1
  139. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js +0 -21
  140. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +0 -1
  141. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts +0 -234
  142. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +0 -1
  143. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js +0 -29
  144. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +0 -1
  145. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +0 -1
  146. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +0 -651
  147. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +0 -1
  148. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +0 -1
  149. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +0 -122
  150. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +0 -1
  151. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +0 -230
  152. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +0 -1
  153. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +0 -624
  154. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +0 -1
  155. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +0 -140
  156. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +0 -1
  157. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +0 -94
  158. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +0 -1
  159. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +0 -1
  160. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js +0 -268
  161. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +0 -1
  162. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +0 -35
  163. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +0 -1
  164. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +0 -51
  165. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +0 -1
  166. package/lib/cjs/hierarchies/imodel/Utils.d.ts +0 -4
  167. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +0 -1
  168. package/lib/cjs/hierarchies/imodel/Utils.js +0 -71
  169. package/lib/cjs/hierarchies/imodel/Utils.js.map +0 -1
  170. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +0 -1
  171. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +0 -40
  172. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +0 -1
  173. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +0 -1
  174. package/lib/cjs/hierarchies/imodel/operators/Grouping.js +0 -176
  175. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +0 -1
  176. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +0 -1
  177. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +0 -75
  178. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +0 -1
  179. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +0 -1
  180. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +0 -84
  181. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +0 -1
  182. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +0 -1
  183. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js +0 -26
  184. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +0 -1
  185. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +0 -1
  186. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +0 -113
  187. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +0 -1
  188. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +0 -1
  189. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +0 -54
  190. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +0 -1
  191. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +0 -1
  192. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +0 -49
  193. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +0 -1
  194. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +0 -1
  195. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +0 -52
  196. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +0 -1
  197. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +0 -1
  198. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +0 -310
  199. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +0 -1
  200. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +0 -1
  201. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js +0 -31
  202. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +0 -1
  203. package/lib/cjs/hierarchies/internal/Common.d.ts.map +0 -1
  204. package/lib/cjs/hierarchies/internal/Common.js +0 -91
  205. package/lib/cjs/hierarchies/internal/Common.js.map +0 -1
  206. package/lib/cjs/hierarchies/internal/DisposePolyfill.d.ts +0 -1
  207. package/lib/cjs/hierarchies/internal/DisposePolyfill.d.ts.map +0 -1
  208. package/lib/cjs/hierarchies/internal/DisposePolyfill.js +0 -11
  209. package/lib/cjs/hierarchies/internal/DisposePolyfill.js.map +0 -1
  210. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +0 -1
  211. package/lib/cjs/hierarchies/internal/EachValueFrom.js +0 -111
  212. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +0 -1
  213. package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts.map +0 -1
  214. package/lib/cjs/hierarchies/internal/LoggingUtils.js +0 -37
  215. package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +0 -1
  216. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +0 -1
  217. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +0 -28
  218. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +0 -1
  219. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +0 -1
  220. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +0 -54
  221. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +0 -1
  222. package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +0 -1
  223. package/lib/cjs/hierarchies/internal/operators/Partition.js +0 -60
  224. package/lib/cjs/hierarchies/internal/operators/Partition.js.map +0 -1
  225. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +0 -1
  226. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js +0 -50
  227. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +0 -1
  228. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +0 -1
  229. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js +0 -24
  230. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js.map +0 -1
  231. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +0 -1
  232. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js +0 -23
  233. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js.map +0 -1
  234. package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +0 -1
  235. package/lib/cjs/hierarchies/internal/operators/Sorting.js +0 -25
  236. package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +0 -1
  237. package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts.map +0 -1
  238. package/lib/cjs/hierarchies/internal/operators/TapOnce.js +0 -19
  239. package/lib/cjs/hierarchies/internal/operators/TapOnce.js.map +0 -1
  240. package/lib/cjs/package.json +0 -1
  241. package/lib/cjs/presentation-hierarchies.d.ts +0 -26
  242. package/lib/cjs/presentation-hierarchies.d.ts.map +0 -1
  243. package/lib/cjs/presentation-hierarchies.js +0 -43
  244. package/lib/cjs/presentation-hierarchies.js.map +0 -1
  245. package/lib/esm/hierarchies/HierarchyErrors.d.ts +0 -9
  246. package/lib/esm/hierarchies/HierarchyErrors.d.ts.map +0 -1
  247. package/lib/esm/hierarchies/HierarchyErrors.js.map +0 -1
  248. package/lib/esm/hierarchies/HierarchyMerge.d.ts +0 -19
  249. package/lib/esm/hierarchies/HierarchyMerge.d.ts.map +0 -1
  250. package/lib/esm/hierarchies/HierarchyMerge.js.map +0 -1
  251. package/lib/esm/hierarchies/HierarchyNode.d.ts +0 -149
  252. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +0 -1
  253. package/lib/esm/hierarchies/HierarchyNode.js.map +0 -1
  254. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +0 -31
  255. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +0 -1
  256. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +0 -1
  257. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +0 -1
  258. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +0 -1
  259. package/lib/esm/hierarchies/HierarchyProvider.d.ts +0 -134
  260. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +0 -1
  261. package/lib/esm/hierarchies/HierarchyProvider.js.map +0 -1
  262. package/lib/esm/hierarchies/HierarchySearch.d.ts +0 -297
  263. package/lib/esm/hierarchies/HierarchySearch.d.ts.map +0 -1
  264. package/lib/esm/hierarchies/HierarchySearch.js.map +0 -1
  265. package/lib/esm/hierarchies/Logging.d.ts +0 -13
  266. package/lib/esm/hierarchies/Logging.d.ts.map +0 -1
  267. package/lib/esm/hierarchies/Logging.js.map +0 -1
  268. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +0 -18
  269. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +0 -1
  270. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +0 -1
  271. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +0 -1
  272. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +0 -1
  273. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +0 -1
  274. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +0 -1
  275. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +0 -120
  276. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +0 -1
  277. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +0 -1
  278. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +0 -21
  279. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +0 -1
  280. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +0 -1
  281. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +0 -1
  282. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +0 -1
  283. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +0 -1
  284. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +0 -1
  285. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts +0 -35
  286. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +0 -1
  287. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +0 -1
  288. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +0 -1
  289. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +0 -1
  290. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +0 -1
  291. package/lib/esm/hierarchies/imodel/Utils.js.map +0 -1
  292. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +0 -11
  293. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +0 -1
  294. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +0 -1
  295. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +0 -26
  296. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +0 -1
  297. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +0 -1
  298. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +0 -11
  299. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +0 -1
  300. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +0 -1
  301. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +0 -11
  302. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +0 -1
  303. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +0 -1
  304. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +0 -4
  305. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +0 -1
  306. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +0 -1
  307. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +0 -11
  308. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +0 -1
  309. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +0 -1
  310. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +0 -7
  311. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +0 -1
  312. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +0 -1
  313. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +0 -4
  314. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +0 -1
  315. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +0 -1
  316. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +0 -5
  317. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +0 -1
  318. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +0 -1
  319. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +0 -32
  320. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +0 -1
  321. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +0 -1
  322. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts +0 -5
  323. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +0 -1
  324. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +0 -1
  325. package/lib/esm/hierarchies/internal/Common.d.ts +0 -61
  326. package/lib/esm/hierarchies/internal/Common.d.ts.map +0 -1
  327. package/lib/esm/hierarchies/internal/Common.js.map +0 -1
  328. package/lib/esm/hierarchies/internal/DisposePolyfill.d.ts.map +0 -1
  329. package/lib/esm/hierarchies/internal/DisposePolyfill.js.map +0 -1
  330. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts +0 -12
  331. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +0 -1
  332. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +0 -1
  333. package/lib/esm/hierarchies/internal/LoggingUtils.d.ts +0 -12
  334. package/lib/esm/hierarchies/internal/LoggingUtils.d.ts.map +0 -1
  335. package/lib/esm/hierarchies/internal/LoggingUtils.js.map +0 -1
  336. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts +0 -75
  337. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +0 -1
  338. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +0 -1
  339. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts +0 -17
  340. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +0 -1
  341. package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +0 -1
  342. package/lib/esm/hierarchies/internal/operators/Partition.d.ts +0 -7
  343. package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +0 -1
  344. package/lib/esm/hierarchies/internal/operators/Partition.js.map +0 -1
  345. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts +0 -22
  346. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +0 -1
  347. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +0 -1
  348. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts +0 -7
  349. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +0 -1
  350. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js.map +0 -1
  351. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +0 -9
  352. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +0 -1
  353. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js.map +0 -1
  354. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts +0 -13
  355. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +0 -1
  356. package/lib/esm/hierarchies/internal/operators/Sorting.js.map +0 -1
  357. package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts +0 -4
  358. package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts.map +0 -1
  359. package/lib/esm/hierarchies/internal/operators/TapOnce.js.map +0 -1
  360. package/lib/esm/presentation-hierarchies.d.ts.map +0 -1
  361. package/lib/esm/presentation-hierarchies.js.map +0 -1
  362. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyErrors.d.ts +0 -0
  363. /package/lib/{esm/hierarchies → hierarchies}/HierarchyErrors.js +0 -0
  364. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyMerge.d.ts +0 -0
  365. /package/lib/{esm/hierarchies → hierarchies}/HierarchyMerge.js +0 -0
  366. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyNode.d.ts +0 -0
  367. /package/lib/{esm/hierarchies → hierarchies}/HierarchyNode.js +0 -0
  368. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyNodeIdentifier.d.ts +0 -0
  369. /package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeIdentifier.js +0 -0
  370. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyProvider.d.ts +0 -0
  371. /package/lib/{esm/hierarchies → hierarchies}/HierarchyProvider.js +0 -0
  372. /package/lib/{cjs/hierarchies → hierarchies}/HierarchySearch.d.ts +0 -0
  373. /package/lib/{esm/hierarchies → hierarchies}/HierarchySearch.js +0 -0
  374. /package/lib/{cjs/hierarchies → hierarchies}/Logging.d.ts +0 -0
  375. /package/lib/{esm/hierarchies → hierarchies}/Logging.js +0 -0
  376. /package/lib/{cjs/hierarchies → hierarchies}/imodel/HierarchyCache.d.ts +0 -0
  377. /package/lib/{esm/hierarchies → hierarchies}/imodel/HierarchyCache.js +0 -0
  378. /package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyDefinition.js +0 -0
  379. /package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyNode.js +0 -0
  380. /package/lib/{cjs/hierarchies → hierarchies}/imodel/LimitingECSqlQueryExecutor.d.ts +0 -0
  381. /package/lib/{esm/hierarchies → hierarchies}/imodel/PredicateBasedHierarchyDefinition.js +0 -0
  382. /package/lib/{cjs/hierarchies → hierarchies}/imodel/SearchHierarchyDefinition.d.ts +0 -0
  383. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/DetermineChildren.d.ts +0 -0
  384. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/DetermineChildren.js +0 -0
  385. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/Grouping.d.ts +0 -0
  386. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/Grouping.js +0 -0
  387. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/HideIfNoChildren.d.ts +0 -0
  388. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/HideIfNoChildren.js +0 -0
  389. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/HideNodesInHierarchy.d.ts +0 -0
  390. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/HideNodesInHierarchy.js +0 -0
  391. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/AutoExpand.d.ts +0 -0
  392. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/AutoExpand.js +0 -0
  393. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/BaseClassGrouping.d.ts +0 -0
  394. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/ClassGrouping.d.ts +0 -0
  395. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/GroupHiding.d.ts +0 -0
  396. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/GroupHiding.js +0 -0
  397. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/LabelGrouping.d.ts +0 -0
  398. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/LabelGrouping.js +0 -0
  399. /package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/Shared.d.ts +0 -0
  400. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/Shared.js +0 -0
  401. /package/lib/{cjs/hierarchies → hierarchies}/internal/Common.d.ts +0 -0
  402. /package/lib/{esm/hierarchies → hierarchies}/internal/Common.js +0 -0
  403. /package/lib/{esm/hierarchies → hierarchies}/internal/DisposePolyfill.d.ts +0 -0
  404. /package/lib/{esm/hierarchies → hierarchies}/internal/DisposePolyfill.js +0 -0
  405. /package/lib/{cjs/hierarchies → hierarchies}/internal/EachValueFrom.d.ts +0 -0
  406. /package/lib/{esm/hierarchies → hierarchies}/internal/EachValueFrom.js +0 -0
  407. /package/lib/{cjs/hierarchies → hierarchies}/internal/LoggingUtils.d.ts +0 -0
  408. /package/lib/{esm/hierarchies → hierarchies}/internal/LoggingUtils.js +0 -0
  409. /package/lib/{cjs/hierarchies → hierarchies}/internal/RxjsHierarchyDefinition.d.ts +0 -0
  410. /package/lib/{esm/hierarchies → hierarchies}/internal/RxjsHierarchyDefinition.js +0 -0
  411. /package/lib/{cjs/hierarchies → hierarchies}/internal/SubscriptionScheduler.d.ts +0 -0
  412. /package/lib/{esm/hierarchies → hierarchies}/internal/SubscriptionScheduler.js +0 -0
  413. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/Partition.d.ts +0 -0
  414. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/Partition.js +0 -0
  415. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/ReduceToMergeMap.d.ts +0 -0
  416. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ReduceToMergeMap.js +0 -0
  417. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/ReleaseMainThread.d.ts +0 -0
  418. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ReleaseMainThread.js +0 -0
  419. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/ShareReplayWithErrors.d.ts +0 -0
  420. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ShareReplayWithErrors.js +0 -0
  421. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/Sorting.d.ts +0 -0
  422. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/Sorting.js +0 -0
  423. /package/lib/{cjs/hierarchies → hierarchies}/internal/operators/TapOnce.d.ts +0 -0
  424. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/TapOnce.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { GenericInstanceFilter } from "@itwin/core-common";
2
- import type { EC, ECClassHierarchyInspector, ECSchemaProvider, ECSqlQueryDef, IInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared";
2
+ import type { EC, ECClassHierarchyInspector, ECSchemaProvider, ECSqlQueryDef } from "@itwin/presentation-shared";
3
3
  import type { NonGroupingHierarchyNode, ParentHierarchyNode } from "../HierarchyNode.js";
4
4
  import type { ProcessedGenericHierarchyNode, ProcessedHierarchyNode, ProcessedInstanceHierarchyNode, SourceGenericHierarchyNode, SourceInstanceHierarchyNode } from "./IModelHierarchyNode.js";
5
5
  import type { LimitingECSqlQueryExecutor } from "./LimitingECSqlQueryExecutor.js";
@@ -22,7 +22,7 @@ export interface InstanceNodesQueryDefinition {
22
22
  * points to a base class of multiple different classes of instances returned by the query, however
23
23
  * the more specific this class is, the more efficient hierarchy building process is.
24
24
  */
25
- fullClassName: EC.FullClassName;
25
+ fullClassName: EC.FullClassNameDotNotation;
26
26
  /**
27
27
  * An ECSQL query that selects nodes from an iModel. `SELECT` clause of the query is expected
28
28
  * to be built using `NodeSelectQueryFactory.createSelectClause`.
@@ -95,7 +95,7 @@ export type HierarchyDefinitionParentNode = Omit<NonGroupingHierarchyNode, "chil
95
95
  * Props for `HierarchyDefinition.defineHierarchyLevel`.
96
96
  * @public
97
97
  */
98
- export interface DefineHierarchyLevelProps {
98
+ export interface DefineHierarchyLevelProps extends Pick<NodesQueryClauseFactory, "createSelectClause" | "createFilterClauses"> {
99
99
  /** The iModel for which the hierarchy definition is being requested for. */
100
100
  imodelAccess: LimitingECSqlQueryExecutor & ECSchemaProvider & ECClassHierarchyInspector & {
101
101
  imodelKey: string;
@@ -104,37 +104,6 @@ export interface DefineHierarchyLevelProps {
104
104
  parentNode: HierarchyDefinitionParentNode | undefined;
105
105
  /** Optional hierarchy level filter. */
106
106
  instanceFilter?: GenericInstanceFilter;
107
- /**
108
- * A factory for creating ECSQL select clauses for instance labels. Created using
109
- * `createIModelInstanceLabelSelectClauseFactory` from `@itwin/presentation-shared` and scoped
110
- * to the iModel identified by `imodelAccess`.
111
- *
112
- * Example:
113
- * ```ts
114
- * const labelClause = await instanceLabelSelectClauseFactory.createSelectClause({ classAlias: "this", className: "SomeSchema.SomeClass" });
115
- * ```
116
- *
117
- * Using this factory is optional — consumers may create their own `IInstanceLabelSelectClauseFactory`
118
- * and use it instead, or just define instance label select clauses manually without a factory.
119
- */
120
- instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;
121
- /**
122
- * A factory for creating ECSQL select clauses for hierarchy nodes. Created using
123
- * `createNodesQueryClauseFactory` and scoped to the iModel identified by `imodelAccess`.
124
- *
125
- * Example:
126
- * ```ts
127
- * const selectClause = await nodeSelectClauseFactory.createSelectClause({
128
- * ecClassId: { selector: "this.ECClassId" },
129
- * ecInstanceId: { selector: "this.ECInstanceId" },
130
- * nodeLabel: { selector: "this.UserLabel" },
131
- * });
132
- * ```
133
- *
134
- * While using this factory is optional, and consumers may create their own `NodesQueryClauseFactory`,
135
- * it's strongly recommended to use it to ensure the select clause format is consistent with the parser.
136
- */
137
- nodeSelectClauseFactory: NodesQueryClauseFactory;
138
107
  }
139
108
  /**
140
109
  * An interface for a factory that knows how define a hierarchy based on a given parent node.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyDefinition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyDefinition.js","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyDefinition.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AA+ChG,cAAc;AACd,2DAA2D;AAC3D,MAAM,KAAW,wBAAwB,CAOxC;AAPD,WAAiB,wBAAwB;IACvC,SAAgB,aAAa,CAAC,GAA6B;QACzD,OAAO,CAAC,CAAE,GAAsC,CAAC,IAAI,CAAC;IACxD,CAAC;IAFe,yBAAA,aAAa,gBAE5B,CAAA;IACD,SAAgB,oBAAoB,CAAC,GAA6B;QAChE,OAAO,CAAC,CAAE,GAAoC,CAAC,KAAK,CAAC;IACvD,CAAC;IAFe,yBAAA,oBAAoB,uBAEnC,CAAA;AACH,CAAC,EAPgB,wBAAwB,KAAxB,wBAAwB,QAOxC","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 type { GenericInstanceFilter } from \"@itwin/core-common\";\nimport type { EC, ECClassHierarchyInspector, ECSchemaProvider, ECSqlQueryDef } from \"@itwin/presentation-shared\";\nimport type { NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport type {\n ProcessedGenericHierarchyNode,\n ProcessedHierarchyNode,\n ProcessedInstanceHierarchyNode,\n SourceGenericHierarchyNode,\n SourceInstanceHierarchyNode,\n} from \"./IModelHierarchyNode.js\";\nimport type { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport type { NodesQueryClauseFactory } from \"./NodeSelectQueryFactory.js\";\n\n/**\n * A nodes definition that returns a single generic node.\n * @public\n */\nexport interface GenericHierarchyNodeDefinition {\n /** The node to be created in the hierarchy level */\n node: SourceGenericHierarchyNode;\n}\n\n/**\n * A nodes definition that returns an ECSQL query for selecting nodes from an iModel.\n * @public\n */\nexport interface InstanceNodesQueryDefinition {\n /**\n * Full name of the class whose instances are going to be returned. It's okay if the attribute\n * points to a base class of multiple different classes of instances returned by the query, however\n * the more specific this class is, the more efficient hierarchy building process is.\n */\n fullClassName: EC.FullClassNameDotNotation;\n /**\n * An ECSQL query that selects nodes from an iModel. `SELECT` clause of the query is expected\n * to be built using `NodeSelectQueryFactory.createSelectClause`.\n */\n query: ECSqlQueryDef;\n}\n\n/**\n * A definition of nodes included in a hierarchy level.\n * @public\n */\nexport type HierarchyNodesDefinition = GenericHierarchyNodeDefinition | InstanceNodesQueryDefinition;\n/** @public */\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport namespace HierarchyNodesDefinition {\n export function isGenericNode(def: HierarchyNodesDefinition): def is GenericHierarchyNodeDefinition {\n return !!(def as GenericHierarchyNodeDefinition).node;\n }\n export function isInstanceNodesQuery(def: HierarchyNodesDefinition): def is InstanceNodesQueryDefinition {\n return !!(def as InstanceNodesQueryDefinition).query;\n }\n}\n\n/**\n * A definition of a hierarchy level, which may consist of multiple node definitions.\n * @public\n */\nexport type HierarchyLevelDefinition = HierarchyNodesDefinition[];\n\n/**\n * A type for a function that parses a `SourceInstanceHierarchyNode` from provided ECSQL `row` object.\n * @public\n */\nexport type NodeParser = (props: {\n /** The ECSQL row object to parse. Keys & value types depend on the executed query. */\n row: { [columnName: string]: any };\n\n /** The parent node whose child node is being parsed. */\n parentNode?: HierarchyDefinitionParentNode;\n\n /** The key of iModel which is used to run the query. */\n imodelKey: string;\n}) => SourceInstanceHierarchyNode | Promise<SourceInstanceHierarchyNode>;\n\n/**\n * A type for a function that pre-processes given node. Unless the function decides not to make any modifications,\n * it should return a new - modified - node, rather than modifying the given one. Returning `undefined` omits the node\n * from the hierarchy.\n *\n * @public\n */\nexport type NodePreProcessor = <TNode extends ProcessedGenericHierarchyNode | ProcessedInstanceHierarchyNode>(props: {\n /** Node to be pre-processed. */\n node: TNode;\n\n /** The parent node whose child node is being pre-processed. */\n parentNode?: ParentHierarchyNode;\n}) => Promise<TNode | undefined>;\n\n/**\n * A type for a function that post-processes given node. Unless the function decides not to make any modifications,\n * it should return a new - modified - node, rather than modifying the given one.\n *\n * @public\n */\nexport type NodePostProcessor = (props: {\n /** Node to be post-processed. */\n node: ProcessedHierarchyNode;\n\n /** The parent node whose child node is being post-processed. */\n parentNode?: ParentHierarchyNode;\n}) => Promise<ProcessedHierarchyNode>;\n\n/**\n * A type of node that can be passed to `HierarchyDefinition.defineHierarchyLevel`. This basically means\n * a `HierarchyNode` that:\n * - knows nothing about its children,\n * - is either an instances node (key is of `InstancesNodeKey` type) or a generic node (key is of `GenericNodeKey` type).\n * @public\n */\nexport type HierarchyDefinitionParentNode = Omit<NonGroupingHierarchyNode, \"children\">;\n\n/**\n * Props for `HierarchyDefinition.defineHierarchyLevel`.\n * @public\n */\nexport interface DefineHierarchyLevelProps extends Pick<\n NodesQueryClauseFactory,\n \"createSelectClause\" | \"createFilterClauses\"\n> {\n /** The iModel for which the hierarchy definition is being requested for. */\n imodelAccess: LimitingECSqlQueryExecutor & ECSchemaProvider & ECClassHierarchyInspector & { imodelKey: string };\n\n /** Parent node to get children for. Pass `undefined` to get root nodes. */\n parentNode: HierarchyDefinitionParentNode | undefined;\n\n /** Optional hierarchy level filter. */\n instanceFilter?: GenericInstanceFilter;\n}\n\n/**\n * An interface for a factory that knows how define a hierarchy based on a given parent node.\n * @public\n */\nexport interface HierarchyDefinition {\n /**\n * An optional function for parsing ECInstance node from ECSQL row.\n *\n * Should be used in situations when the `HierarchyDefinition` implementation\n * introduces additional ECSQL columns into the select clause and wants to assign additional\n * data to the nodes it produces.\n *\n * Defaults to a function that parses all `HierarchyNode` attributes from a query, whose SELECT\n * clause is created using `NodeSelectQueryFactory.createSelectClause`.\n */\n parseNode?: NodeParser;\n\n /**\n * An optional function for pre-processing nodes.\n *\n * Pre-processing happens immediately after the nodes are loaded based on `HierarchyLevelDefinition`\n * returned by this `HierarchyDefinition` and before their processing (hiding, grouping, sorting, etc.) starts.\n * The step allows assigning nodes additional data or excluding them from the hierarchy based on some attributes.\n */\n preProcessNode?: NodePreProcessor;\n\n /**\n * An optional function for post-processing nodes.\n *\n * Post-processing happens after the loaded nodes go through all the merging, hiding and grouping\n * steps, but before sorting them. This step allows `HierarchyDefinition` implementations to assign additional data\n * to nodes after they're processed. This is especially true for grouping nodes as they're only created during\n * processing.\n */\n postProcessNode?: NodePostProcessor;\n\n /** A function to create a hierarchy level definition for given parent node. */\n defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition>;\n}\n"]}
@@ -80,7 +80,7 @@ interface HierarchyNodeBaseClassGroupingParams extends HierarchyNodeGroupingPara
80
80
  *
81
81
  * Full class name format: `SchemaName.ClassName`.
82
82
  */
83
- fullClassNames: EC.FullClassName[];
83
+ fullClassNames: EC.FullClassNameDotNotation[];
84
84
  }
85
85
  /**
86
86
  * A data structure that represents properties grouping.
@@ -93,7 +93,7 @@ export interface HierarchyNodePropertiesGroupingParams extends HierarchyNodeGrou
93
93
  *
94
94
  * Full class name format: `SchemaName.ClassName`.
95
95
  */
96
- propertiesClassName: EC.FullClassName;
96
+ propertiesClassName: EC.FullClassNameDotNotation;
97
97
  /**
98
98
  * Property grouping option that determines whether to group nodes whose grouping value is not set or is set to an empty string.
99
99
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyNode.d.ts","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyNode.js","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyNode.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAkO1D,cAAc;AACd,2DAA2D;AAC3D,MAAM,KAAW,sBAAsB,CAatC;AAbD,WAAiB,sBAAsB;IACrC,sDAAsD;IACtD,SAAgB,SAAS,CAAC,IAA4B;QACpD,OAAO,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC;IAFe,uBAAA,SAAS,YAExB,CAAA;IACD,iEAAiE;IACjE,SAAgB,eAAe,CAAC,IAA4B;QAC1D,OAAO,gBAAgB,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,CAAC;IAFe,uBAAA,eAAe,kBAE9B,CAAA;IACD,uDAAuD;IACvD,SAAgB,cAAc,CAAC,IAA4B;QACzD,OAAO,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAFe,uBAAA,cAAc,iBAE7B,CAAA;AACH,CAAC,EAbgB,sBAAsB,KAAtB,sBAAsB,QAatC","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 { HierarchyNodeKey } from \"../HierarchyNodeKey.js\";\n\nimport type { ConcatenatedValue, EC, InstanceKey, OmitOverUnion, PrimitiveValue } from \"@itwin/presentation-shared\";\nimport type { GroupingHierarchyNode, NonGroupingHierarchyNode } from \"../HierarchyNode.js\";\nimport type { GenericNodeKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\n\n/**\n * Base processing parameters that apply to every node.\n * @public\n */\ninterface HierarchyNodeProcessingParamsBase {\n /** Indicates if this node should be hidden if it has no child nodes. */\n hideIfNoChildren?: boolean;\n /** Indicates that this node should always be hidden and its children should be loaded in its place. */\n hideInHierarchy?: boolean;\n}\n\n/**\n * A data structure for defining nodes' grouping requirements.\n * @public\n */\ninterface HierarchyNodeGroupingParams {\n byLabel?: HierarchyNodeLabelGroupingParams;\n byClass?: boolean | HierarchyNodeGroupingParamsBase;\n byBaseClasses?: HierarchyNodeBaseClassGroupingParams;\n byProperties?: HierarchyNodePropertiesGroupingParams;\n}\n\n/**\n * A data structure for defining params specifically used for label grouping.\n * @public\n */\ninterface HierarchyNodeLabelGroupingBaseParams {\n /** Label grouping option that determines whether to group nodes or to merge them. Defaults to \"group\".*/\n action?: \"group\" | \"merge\";\n /** Value that needs to match in order for nodes to be grouped or merged.*/\n groupId?: string;\n}\n\n/**\n * A data structure for defining label merging.\n * @public\n */\ninterface HierarchyNodeLabelGroupingMergeParams extends HierarchyNodeLabelGroupingBaseParams {\n action: \"merge\";\n}\n\n/**\n * A data structure for defining label grouping with additional parameters.\n * @public\n */\ninterface HierarchyNodeLabelGroupingGroupParams\n extends HierarchyNodeLabelGroupingBaseParams, HierarchyNodeGroupingParamsBase {\n action?: \"group\";\n}\n\n/**\n * A data structure for defining possible label grouping types.\n * @public\n */\nexport type HierarchyNodeLabelGroupingParams =\n | boolean\n | HierarchyNodeLabelGroupingMergeParams\n | HierarchyNodeLabelGroupingGroupParams;\n\n/**\n * Grouping parameters that are shared across all types of groupings.\n * @public\n */\nexport interface HierarchyNodeGroupingParamsBase {\n /** Hiding option that determines whether to hide group nodes which have no siblings at the same hierarchy level. */\n hideIfNoSiblings?: boolean;\n /** Hiding option that determines whether to hide group nodes which have only one node as its children. */\n hideIfOneGroupedNode?: boolean;\n /** Option which auto expands grouping nodes' children when it has single child or always. */\n autoExpand?: HierarchyNodeAutoExpandProp;\n}\n\n/**\n * Defines possible values for `BaseGroupingParams.autoExpand` attribute:\n * - `single-child` - set the grouping node to auto-expand if it groups a single node.\n * - `always` - always set the grouping node to auto-expand.\n * @public\n */\nexport type HierarchyNodeAutoExpandProp = \"single-child\" | \"always\";\n\n/**\n * A data structure that represents base class grouping.\n * @public\n */\ninterface HierarchyNodeBaseClassGroupingParams extends HierarchyNodeGroupingParamsBase {\n /**\n * Full names of classes, which should be 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 fullClassNames: EC.FullClassNameDotNotation[];\n}\n\n/**\n * A data structure that represents properties grouping.\n * @public\n */\nexport interface HierarchyNodePropertiesGroupingParams extends HierarchyNodeGroupingParamsBase {\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: EC.FullClassNameDotNotation;\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;\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;\n /**\n * Properties of the specified class, by which the nodes should be grouped. Each provided group definition results in a\n * grouping hierarchy level.\n *\n * Example usage:\n * ```ts\n * propertyGroups: [\n * {\n * propertyName: \"type\",\n * propertyValue: \"Wall\"\n * },\n * {\n * propertyName: \"length\",\n * propertyValue: 15,\n * ranges: [\n * { fromValue: 1, toValue: 10, rangeLabel: \"Small\" },\n * { fromValue: 11, toValue: 20, rangeLabel: \"Medium\" }\n * ]\n * },\n * ]\n * ```\n */\n propertyGroups: HierarchyNodePropertyGroup[];\n}\n\n/**\n * A data structure that represents specific properties' grouping params.\n * @public\n */\nexport interface HierarchyNodePropertyGroup {\n /** A string indicating the name of the property to group by. */\n propertyName: string;\n /** Value of the property, which will be used to group the node. */\n propertyValue?: PrimitiveValue | ConcatenatedValue;\n /** Ranges are used to group nodes by numeric properties which are within specified bounds. */\n ranges?: HierarchyNodePropertyValueRange[];\n}\n\n/**\n * A data structure that represents boundaries for a value.\n * @public\n */\nexport interface HierarchyNodePropertyValueRange {\n /** Defines the lower bound of the range. */\n fromValue: number;\n /** Defines the upper bound of the range. */\n toValue: number;\n /** Defines the range label. Will be used as `PropertyValueRangeGroupingNode` node's display label. */\n rangeLabel?: string;\n}\n\n/**\n * Processing parameters that apply to instance nodes.\n * @public\n */\nexport interface InstanceHierarchyNodeProcessingParams extends HierarchyNodeProcessingParamsBase {\n grouping?: HierarchyNodeGroupingParams;\n}\n\n/**\n * A generic (not based on data in an iModel) node that has processing parameters.\n * @public\n */\nexport type ProcessedGenericHierarchyNode = Omit<NonGroupingHierarchyNode, \"key\" | \"children\"> & {\n key: GenericNodeKey;\n children?: boolean;\n processingParams?: HierarchyNodeProcessingParamsBase;\n};\n\n/**\n * An instances' (based on data in an iModel) node that has processing parameters.\n * @public\n */\nexport type ProcessedInstanceHierarchyNode = Omit<NonGroupingHierarchyNode, \"key\" | \"children\"> & {\n key: InstancesNodeKey;\n children?: boolean;\n processingParams?: InstanceHierarchyNodeProcessingParams;\n};\n\n/**\n * A grouping node that groups either instance nodes or other grouping nodes.\n * @public\n */\nexport type ProcessedGroupingHierarchyNode = Omit<GroupingHierarchyNode, \"children\"> & {\n children: Array<ProcessedGroupingHierarchyNode | ProcessedInstanceHierarchyNode>;\n};\n\n/**\n * A `HierarchyNode` that may have processing parameters defining whether it should be hidden under some conditions,\n * how it should be grouped, sorted, etc.\n *\n * Type guards under `HierarchyNode` namespace can be used to differentiate between different sub-types of\n * `ProcessedHierarchyNode`.\n *\n * @public\n */\nexport type ProcessedHierarchyNode =\n | ProcessedGenericHierarchyNode\n | ProcessedInstanceHierarchyNode\n | ProcessedGroupingHierarchyNode;\n\n/** @public */\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport namespace ProcessedHierarchyNode {\n /** Checks whether the given node is a generic node */\n export function isGeneric(node: ProcessedHierarchyNode): node is ProcessedGenericHierarchyNode {\n return HierarchyNodeKey.isGeneric(node.key);\n }\n /** Checks whether the given node is an ECInstances-based node */\n export function isInstancesNode(node: ProcessedHierarchyNode): node is ProcessedInstanceHierarchyNode {\n return HierarchyNodeKey.isInstances(node.key);\n }\n /** Checks whether the given node is a grouping node */\n export function isGroupingNode(node: ProcessedHierarchyNode): node is ProcessedGroupingHierarchyNode {\n return HierarchyNodeKey.isGrouping(node.key);\n }\n}\n\n/**\n * A `ProcessedHierarchyNode` that has an unformatted label in a form of `ConcatenatedValue`. Generally this is\n * returned by hierarchy definitions as a generic node or when the node is just parsed from query results.\n * @public\n */\nexport type SourceHierarchyNode<TBase = SourceGenericHierarchyNode | SourceInstanceHierarchyNode> = OmitOverUnion<\n TBase,\n \"label\" | \"parentKeys\"\n> & { label: string | ConcatenatedValue };\n\n/**\n * A kind of `ProcessedGenericHierarchyNode` that has unformatted label and doesn't know about its ancestors.\n * @public\n */\nexport type SourceGenericHierarchyNode = SourceHierarchyNode<\n Omit<ProcessedGenericHierarchyNode, \"key\"> & { key: string }\n>;\n\n/**\n * A kind of `ProcessedInstanceHierarchyNode` that has unformatted label and doesn't know about its ancestors.\n * @public\n */\nexport type SourceInstanceHierarchyNode = SourceHierarchyNode<\n Omit<ProcessedInstanceHierarchyNode, \"key\"> & {\n key: Omit<InstancesNodeKey, \"instanceKeys\"> & { instanceKeys: InstanceKey[] };\n }\n>;\n"]}
@@ -1,6 +1,6 @@
1
1
  import "../internal/DisposePolyfill.js";
2
2
  import { HierarchySearchTree } from "../HierarchySearch.js";
3
- import type { ECClassHierarchyInspector, ECSchemaProvider, Event, IPrimitiveValueFormatter } from "@itwin/presentation-shared";
3
+ import type { ECClassHierarchyInspector, ECSchemaProvider, Event, IInstanceLabelSelectClauseFactory, IPrimitiveValueFormatter } from "@itwin/presentation-shared";
4
4
  import type { HierarchyProvider } from "../HierarchyProvider.js";
5
5
  import type { HierarchyDefinition } from "./IModelHierarchyDefinition.js";
6
6
  import type { LimitingECSqlQueryExecutor } from "./LimitingECSqlQueryExecutor.js";
@@ -72,6 +72,15 @@ interface IModelHierarchyProviderProps {
72
72
  /** A list of search trees that define paths from root to search target nodes. */
73
73
  paths: HierarchySearchTree[];
74
74
  };
75
+ /**
76
+ * A factory for creating ECSQL select clauses for instance labels. The clause is injected into
77
+ * hierarchy node queries to select labels for instance-based nodes.
78
+ *
79
+ * Defaults to the result of `createIModelInstanceLabelSelectClauseFactory` called with the provided `imodelAccess`.
80
+ *
81
+ * @see `IInstanceLabelSelectClauseFactory`
82
+ */
83
+ instanceLabelSelectClauseFactory?: IInstanceLabelSelectClauseFactory;
75
84
  }
76
85
  /**
77
86
  * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given the iModel and
@@ -84,7 +93,7 @@ export declare function createIModelHierarchyProvider(props: IModelHierarchyProv
84
93
  * Props for `createMergedIModelHierarchyProvider`.
85
94
  * @alpha
86
95
  */
87
- interface MergedIModelHierarchyProviderProps extends Omit<IModelHierarchyProviderProps, "imodelAccess" | "imodelChanged"> {
96
+ interface MergedIModelHierarchyProviderProps extends Omit<IModelHierarchyProviderProps, "imodelAccess" | "imodelChanged" | "instanceLabelSelectClauseFactory"> {
88
97
  /**
89
98
  * A list of iModels to create merged hierarchy for.
90
99
  *
@@ -105,6 +114,15 @@ interface MergedIModelHierarchyProviderProps extends Omit<IModelHierarchyProvide
105
114
  * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.
106
115
  */
107
116
  imodelChanged?: Event<() => void>;
117
+ /**
118
+ * A factory for creating ECSQL select clauses for instance labels. The clause is injected into
119
+ * hierarchy node queries to select labels for instance-based nodes.
120
+ *
121
+ * Defaults to the result of `createIModelInstanceLabelSelectClauseFactory` called with the provided `imodelAccess`.
122
+ *
123
+ * @see `IInstanceLabelSelectClauseFactory`
124
+ */
125
+ instanceLabelSelectClauseFactory?: IInstanceLabelSelectClauseFactory;
108
126
  }>;
109
127
  }
110
128
  /**
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyProvider.d.ts","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC;AAkCxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA6B5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,gBAAgB,EAEhB,KAAK,EAEL,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAA0B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAUlF;;;GAGG;AACH,UAAU,uCAAuC;IAC/C;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAc;AACd,KAAK,YAAY,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,yBAAyB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH;;;GAGG;AACH,UAAU,4BAA4B;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,iFAAiF;QACjF,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;IAEF;;;;;;;OAOG;IACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,4BAA4B,GAAG,iBAAiB,GAAG,UAAU,CAMjH;AAED;;;GAGG;AACH,UAAU,kCAAmC,SAAQ,IAAI,CACvD,4BAA4B,EAC5B,cAAc,GAAG,eAAe,GAAG,kCAAkC,CACtE;IACC;;;;;OAKG;IACH,OAAO,EAAE,KAAK,CAAC;QACb;;;;;;WAMG;QACH,YAAY,EAAE,YAAY,CAAC;QAE3B;;;WAGG;QACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAElC;;;;;;;WAOG;QACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;KACtE,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,kCAAkC,GACxC,iBAAiB,GAAG,UAAU,CAEhC"}
@@ -28,6 +28,7 @@ import { createHideIfNoChildrenOperator } from "./operators/HideIfNoChildren.js"
28
28
  import { createHideNodesInHierarchyOperator } from "./operators/HideNodesInHierarchy.js";
29
29
  import { SearchHierarchyDefinition } from "./SearchHierarchyDefinition.js";
30
30
  import { readNodes } from "./TreeNodesReader.js";
31
+ import { ECSQL_PREFIX } from "./Utils.js";
31
32
  const LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.IModelHierarchyProvider`;
32
33
  const LOGGING_NAMESPACE_INTERNAL = `${BASE_LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;
33
34
  const LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;
@@ -40,8 +41,11 @@ const DEFAULT_QUERY_CACHE_SIZE = 1;
40
41
  * @public
41
42
  */
42
43
  export function createIModelHierarchyProvider(props) {
43
- const { imodelAccess, imodelChanged, ...restProps } = props;
44
- return createMergedIModelHierarchyProvider({ ...restProps, imodels: [{ imodelAccess, imodelChanged }] });
44
+ const { imodelAccess, imodelChanged, instanceLabelSelectClauseFactory, ...restProps } = props;
45
+ return createMergedIModelHierarchyProvider({
46
+ ...restProps,
47
+ imodels: [{ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }],
48
+ });
45
49
  }
46
50
  /**
47
51
  * Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel
@@ -76,10 +80,12 @@ class IModelHierarchyProviderImpl {
76
80
  this.#componentId = Guid.createValue();
77
81
  this.#componentName = "IModelHierarchyProviderImpl";
78
82
  this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;
79
- this._imodels = props.imodels.map(({ imodelAccess, imodelChanged }) => {
80
- const instanceLabelSelectClauseFactory = createIModelInstanceLabelSelectClauseFactory({ imodelAccess });
83
+ this._imodels = props.imodels.map(({ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }) => {
84
+ if (!instanceLabelSelectClauseFactory) {
85
+ instanceLabelSelectClauseFactory = createIModelInstanceLabelSelectClauseFactory({ imodelAccess });
86
+ }
81
87
  const nodeSelectClauseFactory = createNodesQueryClauseFactory({ imodelAccess, instanceLabelSelectClauseFactory });
82
- return { imodelAccess, imodelChanged, instanceLabelSelectClauseFactory, nodeSelectClauseFactory };
88
+ return { imodelAccess, imodelChanged, nodeSelectClauseFactory };
83
89
  });
84
90
  this._hierarchyChanged = new BeEvent();
85
91
  this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(props.hierarchyDefinition);
@@ -176,7 +182,7 @@ class IModelHierarchyProviderImpl {
176
182
  category: LOGGING_NAMESPACE_PERFORMANCE,
177
183
  message: () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,
178
184
  });
179
- return from(this._imodels).pipe(mergeMap(({ imodelAccess, instanceLabelSelectClauseFactory, nodeSelectClauseFactory }, imodelAccessIndex) => {
185
+ return from(this._imodels).pipe(mergeMap(({ imodelAccess, nodeSelectClauseFactory }, imodelAccessIndex) => {
180
186
  let parentNode = props.parentNode;
181
187
  if (parentNode &&
182
188
  HierarchyNode.isGeneric(parentNode) &&
@@ -200,10 +206,12 @@ class IModelHierarchyProviderImpl {
200
206
  return this._activeHierarchyDefinition
201
207
  .defineHierarchyLevel({
202
208
  ...defineHierarchyLevelProps,
209
+ createSelectClause: async (selectClauseProps) => nodeSelectClauseFactory.createSelectClause(selectClauseProps),
210
+ /* v8 ignore start */
211
+ createFilterClauses: async (filterClausesProps) => nodeSelectClauseFactory.createFilterClauses(filterClausesProps),
212
+ /* v8 ignore stop */
203
213
  parentNode,
204
214
  imodelAccess,
205
- instanceLabelSelectClauseFactory,
206
- nodeSelectClauseFactory,
207
215
  })
208
216
  .pipe(mergeAll(), map(
209
217
  /* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */
@@ -525,34 +533,32 @@ function createInstanceKeysFilteredQuery(query, targetInstanceKeys) {
525
533
  if (!targetInstanceKeys || !targetInstanceKeys.length) {
526
534
  return query;
527
535
  }
528
- const MAX_ALLOWED_BINDINGS = 1000;
529
- // TODO: MISSING_COVERAGE
530
- /* v8 ignore else -- @preserve */
531
- if (targetInstanceKeys.length < MAX_ALLOWED_BINDINGS) {
536
+ if (Array.isArray(query.bindings)) {
532
537
  return {
533
538
  ...query,
534
539
  ecsql: `
535
540
  SELECT *
536
541
  FROM (${query.ecsql}) q
537
- WHERE q.ECInstanceId IN (${targetInstanceKeys.map(() => "?").join(",")})
542
+ JOIN IdSet(?) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
543
+ ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
538
544
  `,
539
- bindings: [
540
- ...(query.bindings ?? []),
541
- ...targetInstanceKeys.map((k) => ({ type: "id", value: k.id })),
542
- ],
545
+ bindings: [...query.bindings, { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
543
546
  };
544
547
  }
545
- /* v8 ignore start */
548
+ const ecsqlVarTargetInstanceKeys = `${ECSQL_PREFIX}targetInstanceKeys`;
546
549
  return {
547
550
  ...query,
548
551
  ecsql: `
549
552
  SELECT *
550
553
  FROM (${query.ecsql}) q
551
- WHERE InVirtualSet(?, q.ECInstanceId)
554
+ JOIN IdSet(:${ecsqlVarTargetInstanceKeys}) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
555
+ ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
552
556
  `,
553
- bindings: [...(query.bindings ?? []), { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
557
+ bindings: {
558
+ ...query.bindings,
559
+ [ecsqlVarTargetInstanceKeys]: { type: "idset", value: targetInstanceKeys.map((k) => k.id) },
560
+ },
554
561
  };
555
- /* v8 ignore stop */
556
562
  }
557
563
  // TODO: MISSING_COVERAGE
558
564
  /* v8 ignore start */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelHierarchyProvider.js","sourceRoot":"","sources":["../../../src/hierarchies/imodel/IModelHierarchyProvider.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 \"../internal/DisposePolyfill.js\";\n\nimport {\n catchError,\n concat,\n defaultIfEmpty,\n EMPTY,\n filter,\n finalize,\n from,\n fromEventPattern,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n of,\n reduce,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, BeEvent, Guid, StopWatch } from \"@itwin/core-bentley\";\nimport {\n createDefaultValueFormatter,\n createIModelInstanceLabelSelectClauseFactory,\n formatConcatenatedValue,\n InstanceKey,\n normalizeFullClassName,\n} from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport { HierarchyNode } from \"../HierarchyNode.js\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey.js\";\nimport { HierarchySearchTree } from \"../HierarchySearch.js\";\nimport {\n LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE,\n LOGGING_NAMESPACE_INTERNAL as BASE_LOGGING_NAMESPACE_INTERNAL,\n LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE,\n createNodeIdentifierForLogging,\n hasChildren,\n} from \"../internal/Common.js\";\nimport { eachValueFrom } from \"../internal/EachValueFrom.js\";\nimport { doLog, log } from \"../internal/LoggingUtils.js\";\nimport { partition } from \"../internal/operators/Partition.js\";\nimport { reduceToMergeMapList } from \"../internal/operators/ReduceToMergeMap.js\";\nimport { shareReplayWithErrors } from \"../internal/operators/ShareReplayWithErrors.js\";\nimport { sortNodesByLabelOperator } from \"../internal/operators/Sorting.js\";\nimport { getRxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { SubscriptionScheduler } from \"../internal/SubscriptionScheduler.js\";\nimport { HierarchyCache } from \"./HierarchyCache.js\";\nimport { HierarchyNodesDefinition } from \"./IModelHierarchyDefinition.js\";\nimport { createNodesQueryClauseFactory, NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory.js\";\nimport { createDetermineChildrenOperator } from \"./operators/DetermineChildren.js\";\nimport { createGroupingOperator } from \"./operators/Grouping.js\";\nimport { createHideIfNoChildrenOperator } from \"./operators/HideIfNoChildren.js\";\nimport { createHideNodesInHierarchyOperator } from \"./operators/HideNodesInHierarchy.js\";\nimport { SearchHierarchyDefinition } from \"./SearchHierarchyDefinition.js\";\nimport { readNodes } from \"./TreeNodesReader.js\";\nimport { ECSQL_PREFIX } from \"./Utils.js\";\n\nimport type { Observable, ObservableInput, ObservedValueOf } from \"rxjs\";\nimport type { GuidString } from \"@itwin/core-bentley\";\nimport type {\n ConcatenatedValue,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlQueryDef,\n Event,\n EventArgs,\n IInstanceLabelSelectClauseFactory,\n IPrimitiveValueFormatter,\n} from \"@itwin/presentation-shared\";\nimport type { NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport type { GenericNodeKey, IModelInstanceKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport type { GetHierarchyNodesProps, HierarchyProvider } from \"../HierarchyProvider.js\";\nimport type { RxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport type {\n DefineHierarchyLevelProps,\n GenericHierarchyNodeDefinition,\n HierarchyDefinition,\n InstanceNodesQueryDefinition,\n} from \"./IModelHierarchyDefinition.js\";\nimport type {\n ProcessedGroupingHierarchyNode,\n ProcessedHierarchyNode,\n SourceGenericHierarchyNode,\n SourceInstanceHierarchyNode,\n} from \"./IModelHierarchyNode.js\";\nimport type { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport type { NodesQueryClauseFactory } from \"./NodeSelectQueryFactory.js\";\n\nconst LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_INTERNAL = `${BASE_LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;\n\nconst DEFAULT_QUERY_CONCURRENCY = 10;\nconst DEFAULT_QUERY_CACHE_SIZE = 1;\n\n/**\n * Defines the strings used by hierarchy provider.\n * @public\n */\ninterface IModelHierarchyProviderLocalizedStrings {\n /**\n * A string for \"Unspecified\". Used for labels of property grouping nodes\n * that group by an empty value.\n */\n unspecified: string;\n\n /**\n * A string for \"Other\". Used for label of a range property grouping node that\n * groups values which don't fit into any other range.\n */\n other: string;\n}\n\n/** @public */\ntype IModelAccess = ECSchemaProvider & LimitingECSqlQueryExecutor & ECClassHierarchyInspector & { imodelKey: string };\n\n/**\n * Props for `createIModelHierarchyProvider`.\n * @public\n */\ninterface IModelHierarchyProviderProps {\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n\n /**\n * A function that returns a hierarchy definition, describing how the hierarchy that the provider should be create. The\n * function is called once during the provider's construction.\n */\n hierarchyDefinition: HierarchyDefinition;\n\n /** Maximum number of queries that the provider attempts to execute in parallel. Defaults to `10`. */\n queryConcurrency?: number;\n\n /**\n * The amount of queries whose results are stored in-memory for quick retrieval. Defaults to `1`,\n * which means only results of the last run query are cached.\n */\n queryCacheSize?: number;\n\n /** A set of localized strings to use. Defaults to English strings. */\n localizedStrings?: Partial<IModelHierarchyProviderLocalizedStrings>;\n\n /**\n * A values formatter for formatting node labels. Defaults to the\n * result of `createDefaultValueFormatter` called with default parameters. May be overridden\n * by calling `setFormatter` on the provider instance.\n */\n formatter?: IPrimitiveValueFormatter;\n\n /**\n * Props for searching the hierarchy.\n *\n * Note: this just provides a quick way to set the search when creating a new hierarchy provider, but the\n * search can be changed at any time by calling `setHierarchySearch` on the provider instance.\n */\n search?: {\n /** A list of search trees that define paths from root to search target nodes. */\n paths: HierarchySearchTree[];\n };\n\n /**\n * A factory for creating ECSQL select clauses for instance labels. The clause is injected into\n * hierarchy node queries to select labels for instance-based nodes.\n *\n * Defaults to the result of `createIModelInstanceLabelSelectClauseFactory` called with the provided `imodelAccess`.\n *\n * @see `IInstanceLabelSelectClauseFactory`\n */\n instanceLabelSelectClauseFactory?: IInstanceLabelSelectClauseFactory;\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given the iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & Disposable {\n const { imodelAccess, imodelChanged, instanceLabelSelectClauseFactory, ...restProps } = props;\n return createMergedIModelHierarchyProvider({\n ...restProps,\n imodels: [{ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }],\n });\n}\n\n/**\n * Props for `createMergedIModelHierarchyProvider`.\n * @alpha\n */\ninterface MergedIModelHierarchyProviderProps extends Omit<\n IModelHierarchyProviderProps,\n \"imodelAccess\" | \"imodelChanged\" | \"instanceLabelSelectClauseFactory\"\n> {\n /**\n * A list of iModels to create merged hierarchy for.\n *\n * **Warning:** These **must** all be different versions of the same iModel, ordered from the earliest to the\n * latest version. Not obeying this rule may result in undefined behavior.\n */\n imodels: Array<{\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n\n /**\n * A factory for creating ECSQL select clauses for instance labels. The clause is injected into\n * hierarchy node queries to select labels for instance-based nodes.\n *\n * Defaults to the result of `createIModelInstanceLabelSelectClauseFactory` called with the provided `imodelAccess`.\n *\n * @see `IInstanceLabelSelectClauseFactory`\n */\n instanceLabelSelectClauseFactory?: IInstanceLabelSelectClauseFactory;\n }>;\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel\n * and a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * **Warning:** This is an experimental API that **should not be used in production**.\n *\n * @alpha\n */\nexport function createMergedIModelHierarchyProvider(\n props: MergedIModelHierarchyProviderProps,\n): HierarchyProvider & Disposable {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: { requestId: string };\n}\n\ntype WithSourceNameOverride<T> = T & { sourceName?: string };\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodels: Array<\n MergedIModelHierarchyProviderProps[\"imodels\"][number] & { nodeSelectClauseFactory: NodesQueryClauseFactory }\n >;\n private _hierarchyChanged: BeEvent<(args: EventArgs<HierarchyProvider[\"hierarchyChanged\"]>) => void>;\n private _valuesFormatter: IPrimitiveValueFormatter;\n private _sourceHierarchyDefinition: RxjsHierarchyDefinition;\n private _activeHierarchyDefinition: RxjsHierarchyDefinition;\n private _localizedStrings: IModelHierarchyProviderLocalizedStrings;\n private _queryConcurrency: number;\n private _querySchedulers: Map<string, SubscriptionScheduler>;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n #componentId: GuidString;\n #componentName: string;\n #sourceName: string;\n\n public constructor(props: WithSourceNameOverride<MergedIModelHierarchyProviderProps>) {\n if (props.imodels.length === 0) {\n throw new Error(`Creating an iModel hierarchy provider requires at least one iModel.`);\n }\n\n this.#componentId = Guid.createValue();\n this.#componentName = \"IModelHierarchyProviderImpl\";\n this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;\n this._imodels = props.imodels.map(({ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }) => {\n if (!instanceLabelSelectClauseFactory) {\n instanceLabelSelectClauseFactory = createIModelInstanceLabelSelectClauseFactory({ imodelAccess });\n }\n const nodeSelectClauseFactory = createNodesQueryClauseFactory({ imodelAccess, instanceLabelSelectClauseFactory });\n return { imodelAccess, imodelChanged, nodeSelectClauseFactory };\n });\n this._hierarchyChanged = new BeEvent();\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(\n props.hierarchyDefinition,\n );\n this._valuesFormatter = props.formatter ?? createDefaultValueFormatter();\n this._localizedStrings = { other: \"Other\", unspecified: \"Not specified\", ...props.localizedStrings };\n this._queryConcurrency = props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY;\n this._querySchedulers = new Map();\n this.setHierarchySearch(props.search);\n\n const queryCacheSize = props.queryCacheSize ?? DEFAULT_QUERY_CACHE_SIZE;\n if (queryCacheSize !== 0) {\n this._nodesCache = new HierarchyCache({\n // we divide the size by 2, because each variation also counts as a query that we cache\n size: Math.ceil(queryCacheSize / 2),\n variationsCount: 1,\n });\n }\n\n const imodelChangeSubscription = from(this._imodels)\n .pipe(\n mergeMap(({ imodelAccess, imodelChanged }) =>\n imodelChanged\n ? fromEventPattern(\n (handler) => imodelChanged.addListener(handler),\n (handler) => imodelChanged.removeListener(handler),\n () => imodelAccess,\n )\n : EMPTY,\n ),\n )\n .subscribe(({ imodelKey }) => {\n this.invalidateHierarchyCache(`Data source changed: \"${imodelKey}\"`);\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({});\n });\n this._unsubscribe = () => {\n imodelChangeSubscription.unsubscribe();\n };\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* v8 ignore next -- @preserve */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public get hierarchyChanged() {\n return this._hierarchyChanged;\n }\n\n private getQueryScheduler(imodelKey: string) {\n let scheduler = this._querySchedulers.get(imodelKey);\n if (!scheduler) {\n scheduler = new SubscriptionScheduler(this._queryConcurrency);\n this._querySchedulers.set(imodelKey, scheduler);\n }\n return scheduler;\n }\n\n private getPrimaryIModelAccess() {\n return this._imodels[this._imodels.length - 1].imodelAccess;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n /* v8 ignore next -- @preserve */\n doLog({\n category: `${LOGGING_NAMESPACE}.Events`,\n message: () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),\n });\n this._nodesCache?.clear();\n }\n\n /**\n * Sets `HierarchyProvider` values formatter that formats nodes' labels. If provided `undefined`, then defaults to the\n * result of `createDefaultValueFormatter` called with default parameters.\n */\n public setFormatter(formatter: IPrimitiveValueFormatter | undefined) {\n this._valuesFormatter = formatter ?? createDefaultValueFormatter();\n this._hierarchyChanged.raiseEvent({ formatterChange: { newFormatter: this._valuesFormatter } });\n }\n\n public setHierarchySearch(props: IModelHierarchyProviderProps[\"search\"]) {\n if (!props) {\n if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition;\n this.invalidateHierarchyCache(\"Hierarchy search reset\");\n }\n this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: undefined } });\n return;\n }\n this._activeHierarchyDefinition = new SearchHierarchyDefinition({\n imodelAccess: this.getPrimaryIModelAccess(),\n source: this._sourceHierarchyDefinition,\n sourceName: this.#sourceName,\n targetPaths: props.paths,\n });\n this.invalidateHierarchyCache(\"Hierarchy search set\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: props } });\n }\n\n private onGroupingNodeCreated(groupingNode: ProcessedGroupingHierarchyNode, props: GetHierarchyNodesProps) {\n this._nodesCache?.set(\n { ...props, parentNode: groupingNode },\n { observable: from(groupingNode.children), processingStatus: \"pre-processed\" },\n );\n }\n\n private createHierarchyLevelDefinitionsObservable(\n props: Omit<DefineHierarchyLevelProps, \"imodelAccess\" | \"createSelectClause\" | \"createFilterClauses\"> &\n RequestContextProp,\n ): Observable<\n { imodelAccess: IModelAccess; imodelAccessIndex: number } & (\n | { hierarchyNodesDefinition: GenericHierarchyNodeDefinition }\n | { hierarchyNodesDefinition: InstanceNodesQueryDefinition }\n )\n > {\n const { requestContext, ...defineHierarchyLevelProps } = props;\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n\n return from(this._imodels).pipe(\n mergeMap(({ imodelAccess, nodeSelectClauseFactory }, imodelAccessIndex) => {\n let parentNode = props.parentNode;\n if (\n parentNode &&\n HierarchyNode.isGeneric(parentNode) &&\n parentNode.key.source &&\n parentNode.key.source !== this.#sourceName\n ) {\n return EMPTY;\n }\n if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {\n parentNode = {\n ...parentNode,\n key: {\n ...parentNode.key,\n instanceKeys: parentNode.key.instanceKeys.filter(\n (ik) => !ik.imodelKey || ik.imodelKey === imodelAccess.imodelKey,\n ),\n },\n };\n assert(HierarchyNodeKey.isInstances(parentNode.key));\n if (parentNode.key.instanceKeys.length === 0) {\n return EMPTY;\n }\n }\n return this._activeHierarchyDefinition\n .defineHierarchyLevel({\n ...defineHierarchyLevelProps,\n createSelectClause: async (selectClauseProps) =>\n nodeSelectClauseFactory.createSelectClause(selectClauseProps),\n /* v8 ignore start */\n createFilterClauses: async (filterClausesProps) =>\n nodeSelectClauseFactory.createFilterClauses(filterClausesProps),\n /* v8 ignore stop */\n parentNode,\n imodelAccess,\n })\n .pipe(\n mergeAll(),\n map(\n /* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */\n (hierarchyNodesDefinition) =>\n ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition }) as ObservedValueOf<\n ReturnType<typeof this.createHierarchyLevelDefinitionsObservable>\n >,\n ),\n );\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createSourceNodesObservable(\n props: Omit<DefineHierarchyLevelProps, \"imodelAccess\" | \"createSelectClause\" | \"createFilterClauses\"> & {\n hierarchyLevelSizeLimit?: number | \"unbounded\";\n targetInstanceKeys?: InstanceKey[];\n } & RequestContextProp,\n ): SourceNodesObservable {\n const createSourceNodesFromDefinition = (\n imodelAccess: IModelAccess,\n def: GenericHierarchyNodeDefinition | InstanceNodesQueryDefinition,\n ): Observable<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({ ...def.node, key: { type: \"generic\" as const, id: def.node.key, source: this.#sourceName } });\n }\n const query = createInstanceKeysFilteredQuery(def.query, props.targetInstanceKeys);\n return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n readNodes({\n queryExecutor: imodelAccess,\n query,\n limit: props.hierarchyLevelSizeLimit,\n parser: this._activeHierarchyDefinition.parseNode\n ? ({ row }) =>\n this._activeHierarchyDefinition.parseNode!({\n row,\n parentNode: props.parentNode,\n imodelKey: imodelAccess.imodelKey,\n })\n : undefined,\n }).pipe(\n map((node) => ({\n ...node,\n key: {\n ...node.key,\n instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: imodelAccess.imodelKey })),\n },\n })),\n ),\n );\n };\n\n const definitions = this.createHierarchyLevelDefinitionsObservable(props);\n let sourceNodes: Observable<SourceHierarchyNode>;\n if (this._imodels.length === 1) {\n sourceNodes = definitions.pipe(\n mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) =>\n createSourceNodesFromDefinition(imodelAccess, def),\n ),\n );\n } else {\n sourceNodes = definitions.pipe(\n mergeMap(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) =>\n createSourceNodesFromDefinition(imodelAccess, def).pipe(\n map((node: SourceHierarchyNode) => ({ imodelAccess, imodelAccessIndex, node })),\n ),\n ),\n mergeNodes,\n map(({ node }) => node),\n );\n }\n\n return sourceNodes.pipe(\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Read all child nodes ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n shareReplayWithErrors(),\n );\n }\n\n private createPreProcessedNodesObservable(\n queryNodesObservable: SourceNodesObservable,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return queryNodesObservable.pipe(\n // we're going to be mutating the nodes, but don't want to mutate the original one, so just clone it here once\n map((node) => ({ ...node })),\n // set parent node keys on the source node\n map((node) => Object.assign(node, { parentKeys: createParentNodeKeysList(props.parentNode) })),\n // format `ConcatenatedValue` labels into string labels\n mergeMap((node) => applyLabelsFormatting(node, this._valuesFormatter)),\n // we have `ProcessedHierarchyNode` from here\n // let consumers step-in\n preProcessNodes(this._activeHierarchyDefinition, props.parentNode),\n // process hiding\n createHideIfNoChildrenOperator(\n (n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes,\n ),\n createHideNodesInHierarchyOperator(\n // note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)\n (n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes,\n false,\n ),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createProcessedNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return preprocessedNodesObservable.pipe(\n createGroupingOperator(\n this.getPrimaryIModelAccess(),\n props.parentNode,\n this._valuesFormatter,\n this._localizedStrings,\n undefined,\n (gn) => this.onGroupingNodeCreated(gn, props),\n ),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished grouping child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createFinalizedNodesObservable(\n processedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<HierarchyNode> {\n return processedNodesObservable.pipe(\n createDetermineChildrenOperator(\n (n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes,\n ),\n postProcessNodes(this._activeHierarchyDefinition, props.parentNode),\n sortNodesByLabelOperator,\n map((n): HierarchyNode => {\n if (\"processingParams\" in n) {\n delete n.processingParams;\n }\n return { ...n, children: hasChildren(n) };\n }),\n takeUntil(this._dispose),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished finalizing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createHasNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n possiblyKnownChildrenObservable: SourceNodesObservable | undefined,\n props: RequestContextProp,\n ): Observable<boolean> {\n const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;\n return concat(\n (possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))),\n preprocessedNodesObservable,\n ).pipe(\n /* v8 ignore next -- @preserve */\n log({\n category: loggingCategory,\n message: (n) =>\n `[${props.requestContext.requestId}] Node before mapping to 'true': ${createNodeIdentifierForLogging(n)}`,\n }),\n take(1),\n map(() => true),\n defaultIfEmpty(false),\n catchError((e: Error) => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,\n });\n if (e instanceof RowsLimitExceededError) {\n return of(true);\n }\n throw e;\n }),\n /* v8 ignore next -- @preserve */\n log({ category: loggingCategory, message: (r) => `[${props.requestContext.requestId}] Result: ${r}` }),\n );\n }\n\n private getCachedObservableEntry(props: GetHierarchyNodesProps & RequestContextProp): HierarchyCacheEntry {\n const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;\n const { parentNode, ...restProps } = props;\n const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);\n if (cached) {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${props.requestContext.requestId}] Found query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return cached;\n }\n\n // if we don't find an entry for a grouping node, we load its instances by getting a query and applying\n // a search based on grouped instance keys\n let targetInstanceKeys: InstanceKey[] | undefined;\n let parentNonGroupingNode: ParentHierarchyNode<NonGroupingHierarchyNode> | undefined;\n if (parentNode) {\n if (HierarchyNode.isGroupingNode(parentNode)) {\n parentNonGroupingNode = parentNode.nonGroupingAncestor;\n targetInstanceKeys = parentNode.groupedInstanceKeys;\n } else {\n // not sure why type checker doesn't pick this up\n assert(HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n parentNonGroupingNode = parentNode;\n }\n }\n\n const nonGroupingNodeChildrenRequestProps = {\n ...restProps,\n parentNode: parentNonGroupingNode,\n ...(targetInstanceKeys ? { targetInstanceKeys } : undefined),\n };\n const value = {\n observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps),\n processingStatus: \"none\" as const,\n };\n this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return value;\n }\n\n private getChildNodesObservables(\n props: GetHierarchyNodesProps & { hierarchyLevelSizeLimit?: number | \"unbounded\" } & RequestContextProp,\n ) {\n const entry = this.getCachedObservableEntry(props);\n switch (entry.processingStatus) {\n case \"none\": {\n const pre = this.createPreProcessedNodesObservable(entry.observable, props);\n const post = this.createProcessedNodesObservable(pre, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(pre, entry.observable, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n case \"pre-processed\": {\n const post = this.createProcessedNodesObservable(entry.observable, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(entry.observable, undefined, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n }\n }\n\n /**\n * Creates and runs a query based on provided props, then processes retrieved nodes and returns them.\n */\n public getNodes(props: GetHierarchyNodesProps): AsyncIterableIterator<HierarchyNode> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodes`;\n const timer = new StopWatch(undefined, true);\n let error: any;\n let nodesCount = 0;\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${requestContext.requestId}] Requesting child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n return eachValueFrom(\n this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe(\n tap(() => ++nodesCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n error\n ? `[${requestContext.requestId}] Error creating child nodes for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n\n private getNodeInstanceKeysObs(\n props: Omit<GetHierarchyNodesProps, \"ignoreCache\"> & RequestContextProp,\n ): Observable<InstanceKey> {\n const { parentNode, instanceFilter, hierarchyLevelSizeLimit = \"unbounded\", requestContext } = props;\n if (parentNode && HierarchyNode.isGroupingNode(parentNode)) {\n return from(parentNode.groupedInstanceKeys);\n }\n assert(!parentNode || HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n\n // split the definitions based on whether they're for generic nodes or for instance nodes\n const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({\n parentNode,\n instanceFilter,\n requestContext,\n });\n const [instanceDefs, genericDefs] = partition(\n hierarchyLevelDefinitions,\n (\n x,\n ): x is Omit<ObservedValueOf<typeof hierarchyLevelDefinitions>, \"hierarchyNodesDefinition\"> & {\n hierarchyNodesDefinition: InstanceNodesQueryDefinition;\n } => HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition),\n );\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) =>\n this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n of(def.query).pipe(\n mergeMap(async (query) => {\n const ecsql = `\n SELECT\n ${NodeSelectClauseColumnNames.FullClassName},\n ${NodeSelectClauseColumnNames.ECInstanceId},\n ${NodeSelectClauseColumnNames.HideNodeInHierarchy}\n FROM (\n ${query.ecsql}\n )\n `;\n const reader = imodelAccess.createQueryReader(\n { ...query, ecsql },\n {\n rowFormat: \"Indexes\",\n limit: hierarchyLevelSizeLimit,\n restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${Guid.createValue()}`,\n },\n );\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: imodelAccess.imodelKey,\n } satisfies IModelInstanceKey,\n hide: !!row[2],\n })),\n );\n }),\n mergeAll(),\n ),\n ),\n ),\n );\n // split the instance keys observable based on whether they should be hidden or not\n const [visibleNodeInstanceKeys, hiddenNodeInstanceKeys] = partition(instanceKeys, ({ hide }) => !hide);\n\n // hidden items' handling:\n // - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,\n // - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`\n const hiddenParentNodes = merge(\n genericDefs.pipe(\n filter(({ hierarchyNodesDefinition }) => !!hierarchyNodesDefinition.node.processingParams?.hideInHierarchy),\n map(\n ({ hierarchyNodesDefinition }): GenericNodeKey => ({\n type: \"generic\",\n id: hierarchyNodesDefinition.node.key,\n source: this.#sourceName,\n }),\n ),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, keys]) => ({\n type: \"instances\",\n instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),\n })),\n ),\n ),\n ).pipe(map((key) => ({ key, parentKeys: [], label: \"\" })));\n\n // merge visible instance keys from this level & the ones we get recursively requesting from deeper levels\n return merge(\n visibleNodeInstanceKeys.pipe(map(({ key }) => key)),\n hiddenParentNodes.pipe(\n mergeMap((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext })),\n ),\n ).pipe(takeUntil(this._dispose));\n }\n\n /**\n * Creates an iterator for all child hierarchy level instance keys, taking into account any hidden hierarchy levels\n * that there may be under the given parent node.\n */\n public getNodeInstanceKeys(props: Omit<GetHierarchyNodesProps, \"ignoreCache\">): AsyncIterableIterator<InstanceKey> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;\n const timer = new StopWatch(undefined, true);\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${requestContext.requestId}] Requesting keys for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let error: any;\n let keysCount = 0;\n return eachValueFrom(\n this.getNodeInstanceKeysObs({ ...props, requestContext }).pipe(\n tap(() => ++keysCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n error\n ? `[${requestContext.requestId}] Error creating node instance keys for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n}\n\ntype SourceHierarchyNode =\n | SourceInstanceHierarchyNode\n | (Omit<SourceGenericHierarchyNode, \"key\"> & { key: GenericNodeKey });\ntype SourceNodesObservable = Observable<SourceHierarchyNode>;\ntype ProcessedNodesObservable = Observable<ProcessedHierarchyNode>;\ntype HierarchyCacheEntry =\n | { observable: SourceNodesObservable; processingStatus: \"none\" }\n | { observable: ProcessedNodesObservable; processingStatus: \"pre-processed\" };\n\nfunction preProcessNodes(hierarchyFactory: RxjsHierarchyDefinition, parentNode: ParentHierarchyNode | undefined) {\n return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode, parentNode) : identity;\n}\n\nfunction postProcessNodes(hierarchyFactory: RxjsHierarchyDefinition, parentNode: ParentHierarchyNode | undefined) {\n return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode, parentNode) : identity;\n}\n\nfunction processNodes<TNode>(\n processor: (props: { node: TNode; parentNode?: ParentHierarchyNode }) => Observable<TNode>,\n parentNode: ParentHierarchyNode | undefined,\n) {\n return (nodes: Observable<TNode>) => nodes.pipe(mergeMap((node) => processor({ node, parentNode })));\n}\n\nfunction applyLabelsFormatting<TNode extends { label: string | ConcatenatedValue }>(\n node: TNode,\n valueFormatter: IPrimitiveValueFormatter,\n): Observable<TNode & { label: string }> {\n return from(formatConcatenatedValue({ value: node.label, valueFormatter })).pipe(\n map((label) => ({ ...node, label })),\n );\n}\n\nfunction createParentNodeKeysList(parentNode: ParentHierarchyNode | undefined) {\n if (!parentNode) {\n return [];\n }\n return [...parentNode.parentKeys, parentNode.key];\n}\n\nfunction createInstanceKeysFilteredQuery(\n query: ECSqlQueryDef,\n targetInstanceKeys: InstanceKey[] | undefined,\n): ECSqlQueryDef {\n if (!targetInstanceKeys || !targetInstanceKeys.length) {\n return query;\n }\n\n if (Array.isArray(query.bindings)) {\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n JOIN IdSet(?) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId\n ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\n `,\n bindings: [...query.bindings, { type: \"idset\", value: targetInstanceKeys.map((k) => k.id) }],\n };\n }\n const ecsqlVarTargetInstanceKeys = `${ECSQL_PREFIX}targetInstanceKeys`;\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n JOIN IdSet(:${ecsqlVarTargetInstanceKeys}) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId\n ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES\n `,\n bindings: {\n ...query.bindings,\n [ecsqlVarTargetInstanceKeys]: { type: \"idset\", value: targetInstanceKeys.map((k) => k.id) },\n },\n };\n}\n\ninterface MergeNodesInput {\n imodelAccess: IModelAccess;\n imodelAccessIndex: number;\n node: SourceHierarchyNode;\n}\n// TODO: MISSING_COVERAGE\n/* v8 ignore start */\nfunction mergeNodes(source: ObservableInput<MergeNodesInput>) {\n return from(source).pipe(\n reduce((acc, input) => {\n for (let i = 0; i < acc.length; ++i) {\n if (input.imodelAccess === acc[i].imodelAccess) {\n // don't attempt to merge nodes if they come from the same provider\n continue;\n }\n\n // the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass\n // the node with higher `imodelAccessIndex` first\n const candidates =\n input.imodelAccessIndex > acc[i].imodelAccessIndex\n ? {\n imodelAccess: input.imodelAccess,\n imodelAccessIndex: input.imodelAccessIndex,\n primary: input.node,\n secondary: acc[i].node,\n }\n : {\n imodelAccess: acc[i].imodelAccess,\n imodelAccessIndex: acc[i].imodelAccessIndex,\n primary: acc[i].node,\n secondary: input.node,\n };\n const merged = tryMergeNodes(candidates.primary, candidates.secondary);\n if (merged) {\n acc[i] = {\n node: merged,\n imodelAccess: candidates.imodelAccess,\n imodelAccessIndex: candidates.imodelAccessIndex,\n };\n return acc;\n }\n }\n acc.push(input);\n return acc;\n }, new Array<MergeNodesInput>()),\n mergeAll(),\n );\n}\nfunction mergeSearchAttribute(\n primary: SourceHierarchyNode[\"search\"],\n secondary: SourceHierarchyNode[\"search\"],\n): SourceHierarchyNode[\"search\"] {\n if (!primary) {\n return secondary;\n }\n if (!secondary) {\n return primary;\n }\n\n const hasSearchTargetAncestor = primary.hasSearchTargetAncestor || secondary.hasSearchTargetAncestor;\n const isSearchTarget = primary.isSearchTarget || secondary.isSearchTarget;\n const searchOptions = HierarchySearchTree.mergeOptions(primary.options, secondary.options);\n\n const childrenTargetPathsBuilder = HierarchySearchTree.createBuilder();\n primary.childrenTargetPaths?.forEach((tree) => childrenTargetPathsBuilder.accept({ tree }));\n secondary.childrenTargetPaths?.forEach((tree) => childrenTargetPathsBuilder.accept({ tree }));\n const childrenTargetPaths = childrenTargetPathsBuilder.getTree();\n\n return {\n ...(hasSearchTargetAncestor ? { hasSearchTargetAncestor } : undefined),\n ...(childrenTargetPaths.length ? { childrenTargetPaths } : undefined),\n ...(isSearchTarget ? { isSearchTarget } : undefined),\n ...(searchOptions ? { options: searchOptions } : undefined),\n };\n}\nfunction mergeBaseNodeAttributes(\n primary: Omit<SourceHierarchyNode, \"key\" | \"label\" | \"extendedData\" | \"processingParams\">,\n secondary: Omit<SourceHierarchyNode, \"key\" | \"label\" | \"extendedData\" | \"processingParams\">,\n) {\n const search = mergeSearchAttribute(primary.search, secondary.search);\n return {\n ...(primary.autoExpand || secondary.autoExpand ? { autoExpand: true } : undefined),\n ...(primary.children && secondary.children ? { children: true } : undefined),\n ...(primary.supportsFiltering || secondary.supportsFiltering ? { supportsFiltering: true } : undefined),\n ...(search ? { search } : undefined),\n };\n}\nfunction tryMergeInstanceNodes(\n primary: SourceHierarchyNode,\n secondary: SourceHierarchyNode,\n): SourceHierarchyNode | undefined {\n if (\n HierarchyNode.isInstancesNode(primary) &&\n HierarchyNode.isInstancesNode(secondary) &&\n primary.key.instanceKeys.some((lhsKey) =>\n secondary.key.instanceKeys.some((rhsKey) => InstanceKey.equals(lhsKey, rhsKey)),\n )\n ) {\n return {\n ...primary,\n key: { type: \"instances\", instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys) },\n ...mergeBaseNodeAttributes(primary, secondary),\n };\n }\n return undefined;\n}\nfunction tryMergeGenericNodes(\n primary: SourceHierarchyNode,\n secondary: SourceHierarchyNode,\n): SourceHierarchyNode | undefined {\n if (HierarchyNode.isGeneric(primary) && HierarchyNode.isGeneric(secondary) && primary.key.id === secondary.key.id) {\n return { ...primary, ...mergeBaseNodeAttributes(primary, secondary) };\n }\n return undefined;\n}\nfunction tryMergeNodes(primary: SourceHierarchyNode, secondary: SourceHierarchyNode): SourceHierarchyNode | undefined {\n return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;\n}\n/* v8 ignore stop */\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LimitingECSqlQueryExecutor.d.ts","sourceRoot":"","sources":["../../../src/hierarchies/imodel/LimitingECSqlQueryExecutor.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EAExB,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,iBAAiB,CACf,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,uBAAuB,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,GAClE,UAAU,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,kBAAkB,EAChC,YAAY,EAAE,MAAM,GAAG,WAAW,GACjC,0BAA0B,CA+C5B"}
@@ -103,14 +103,18 @@ function createQueryLogger(query, firstStepWarningThreshold = 3000, allRowsWarni
103
103
  /* v8 ignore start */
104
104
  function createQueryLogMessage(query) {
105
105
  const ctes = query.ctes?.map((cte) => ` ${trimWhitespace(cte)}`).join(", \n");
106
- const bindings = query.bindings?.map((b) => JSON.stringify(b.value)).join(", ");
106
+ const bindings = query.bindings
107
+ ? Array.isArray(query.bindings)
108
+ ? `[${query.bindings.map((b) => JSON.stringify(b.value)).join(", ")}]`
109
+ : JSON.stringify(query.bindings)
110
+ : undefined;
107
111
  let output = "{\n";
108
112
  if (ctes) {
109
113
  output += ` ctes: [ \n${ctes} \n], \n`;
110
114
  }
111
115
  output += ` ecsql: ${trimWhitespace(query.ecsql)}, \n`;
112
116
  if (bindings) {
113
- output += ` bindings: [${bindings}], \n`;
117
+ output += ` bindings: ${bindings}, \n`;
114
118
  }
115
119
  output += "}";
116
120
  return output;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LimitingECSqlQueryExecutor.js","sourceRoot":"","sources":["../../../src/hierarchies/imodel/LimitingECSqlQueryExecutor.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 { Guid, StopWatch } from \"@itwin/core-bentley\";\nimport { createMainThreadReleaseOnTimePassedHandler, trimWhitespace } from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport {\n LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE,\n LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE,\n} from \"../internal/Common.js\";\nimport { doLog } from \"../internal/LoggingUtils.js\";\n\nimport type {\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n} from \"@itwin/presentation-shared\";\n\n/**\n * An interface for something that knows how to create a limiting ECSQL query reader.\n * @public\n */\nexport interface LimitingECSqlQueryExecutor {\n /**\n * Creates a query reader for given query, but makes sure it doesn't return more than the configured\n * limit of rows.\n * @throws `RowsLimitExceededError` when the query returns more than configured limit of rows.\n */\n createQueryReader(\n query: ECSqlQueryDef,\n config?: ECSqlQueryReaderOptions & { limit?: number | \"unbounded\" },\n ): ReturnType<ECSqlQueryExecutor[\"createQueryReader\"]>;\n}\n\n/**\n * Creates an `LimitingECSqlQueryExecutor` that throws `RowsLimitExceededError` if the query exceeds given amount of rows.\n * @public\n */\nexport function createLimitingECSqlQueryExecutor(\n baseExecutor: ECSqlQueryExecutor,\n defaultLimit: number | \"unbounded\",\n): LimitingECSqlQueryExecutor {\n return {\n async *createQueryReader(\n query: ECSqlQueryDef,\n config?: ECSqlQueryReaderOptions & { limit?: number | \"unbounded\" },\n ) {\n const { limit: configLimit, ...restConfig } = config ?? {};\n const limit = configLimit ?? defaultLimit;\n const queryLogger = createQueryLogger(query);\n const releaseMainThread = createMainThreadReleaseOnTimePassedHandler();\n\n // handle \"unbounded\" case without a buffer\n const reader = baseExecutor.createQueryReader({ ...query, ecsql: addLimit(query.ecsql, limit) }, restConfig);\n if (limit === \"unbounded\") {\n try {\n for await (const row of reader) {\n await releaseMainThread();\n queryLogger.onStep();\n yield row;\n }\n } finally {\n queryLogger.onComplete();\n }\n return;\n }\n\n // avoid streaming until we know the number of rows is okay\n const buffer: ECSqlQueryRow[] = [];\n try {\n for await (const row of reader) {\n await releaseMainThread();\n queryLogger.onStep();\n buffer.push(row);\n if (buffer.length > limit) {\n throw new RowsLimitExceededError(limit);\n }\n }\n } finally {\n queryLogger.onComplete();\n }\n\n for (const row of buffer) {\n await releaseMainThread();\n yield row;\n }\n },\n };\n}\n\nfunction addLimit(ecsql: string, limit: number | \"unbounded\") {\n if (limit === \"unbounded\") {\n return ecsql;\n }\n return `\n SELECT *\n FROM (${ecsql})\n LIMIT ${limit + 1}\n `;\n}\n\nconst LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.Queries`;\nconst LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.Queries`;\nfunction createQueryLogger(query: ECSqlQueryDef, firstStepWarningThreshold = 3000, allRowsWarningThreshold = 5000) {\n const queryId = Guid.createValue();\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE,\n message: () => `Executing query [${queryId}]: ${createQueryLogMessage(query)}`,\n });\n\n let firstStep = true;\n let rowsCount = 0;\n const timer = new StopWatch(undefined, true);\n return {\n onStep() {\n if (firstStep) {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n severity: timer.current.milliseconds >= firstStepWarningThreshold ? \"warning\" : \"trace\",\n message: () => `[${queryId}] First step took ${timer.currentSeconds} s.`,\n });\n firstStep = false;\n }\n ++rowsCount;\n },\n onComplete() {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n severity: timer.current.milliseconds >= allRowsWarningThreshold ? \"warning\" : \"trace\",\n message: () => `[${queryId}] Query took ${timer.currentSeconds} s. for ${rowsCount} rows.`,\n });\n },\n };\n}\n\n/* v8 ignore start */\nfunction createQueryLogMessage(query: ECSqlQueryDef): string {\n const ctes = query.ctes?.map((cte) => ` ${trimWhitespace(cte)}`).join(\", \\n\");\n const bindings = query.bindings\n ? Array.isArray(query.bindings)\n ? `[${query.bindings.map((b) => JSON.stringify(b.value)).join(\", \")}]`\n : JSON.stringify(query.bindings)\n : undefined;\n let output = \"{\\n\";\n if (ctes) {\n output += ` ctes: [ \\n${ctes} \\n], \\n`;\n }\n output += ` ecsql: ${trimWhitespace(query.ecsql)}, \\n`;\n if (bindings) {\n output += ` bindings: ${bindings}, \\n`;\n }\n output += \"}\";\n return output;\n}\n/* v8 ignore stop */\n"]}
@@ -1,6 +1,6 @@
1
1
  import { GenericInstanceFilter } from "@itwin/core-common";
2
2
  import type { Id64String } from "@itwin/core-bentley";
3
- import type { EC, ECClassHierarchyInspector, ECSchemaProvider, IInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared";
3
+ import type { EC, ECClassHierarchyInspector, ECSchemaProvider, IInstanceLabelSelectClauseFactory, Props } from "@itwin/presentation-shared";
4
4
  import type { HierarchyNodeAutoExpandProp } from "./IModelHierarchyNode.js";
5
5
  /**
6
6
  * Column names of the SELECT clause created by `NodeSelectClauseFactory`. Order of the names matches the order of columns
@@ -9,7 +9,7 @@ import type { HierarchyNodeAutoExpandProp } from "./IModelHierarchyNode.js";
9
9
  * @public
10
10
  */
11
11
  export declare enum NodeSelectClauseColumnNames {
12
- /** Full class name of the instance the node represents. Type: `string` in format `{schema name}:{class name}`. */
12
+ /** Full class name of the instance the node represents. Type: `string` in format `{schema name}.{class name}`. */
13
13
  FullClassName = "FullClassName",
14
14
  /** ECInstance ID of the instance the node represents. Type: `Id64String`. */
15
15
  ECInstanceId = "ECInstanceId",
@@ -49,7 +49,9 @@ interface ECSqlValueSelector {
49
49
  interface NodeSelectClauseProps {
50
50
  ecClassId: ECSqlValueSelector;
51
51
  ecInstanceId: ECSqlValueSelector;
52
- nodeLabel: string | ECSqlValueSelector;
52
+ nodeLabel: string | ECSqlValueSelector | {
53
+ of: Props<IInstanceLabelSelectClauseFactory["createSelectClause"]>;
54
+ };
53
55
  extendedData?: {
54
56
  [key: string]: Id64String | string | number | boolean | ECSqlValueSelector;
55
57
  };
@@ -119,7 +121,7 @@ interface ECSqlSelectClausePropertiesGroupingParams extends ECSqlSelectClauseGro
119
121
  *
120
122
  * Full class name format: `SchemaName.ClassName`.
121
123
  */
122
- propertiesClassName: EC.FullClassName;
124
+ propertiesClassName: EC.FullClassNameDotNotation;
123
125
  /**
124
126
  * Property grouping option that determines whether to group nodes whose grouping value is not set or is set to an empty string.
125
127
  *
@@ -185,7 +187,7 @@ interface ECSqlSelectClausePropertyValueRange {
185
187
  * @public
186
188
  */
187
189
  interface ECSqlSelectClauseBaseClassGroupingParams extends ECSqlSelectClauseGroupingParamsBase {
188
- fullClassNames: EC.FullClassName[] | ECSqlValueSelector[];
190
+ fullClassNames: EC.FullClassNameDotNotation[] | ECSqlValueSelector[];
189
191
  }
190
192
  /**
191
193
  * An interface of a factory that knows how to create nodes' select ECSQL query.
@@ -208,7 +210,7 @@ export interface NodesQueryClauseFactory {
208
210
  */
209
211
  createFilterClauses(props: {
210
212
  contentClass: {
211
- fullName: EC.FullClassName;
213
+ fullName: EC.FullClassNameDotNotation;
212
214
  alias: string;
213
215
  };
214
216
  filter?: GenericInstanceFilter;
@@ -220,7 +222,6 @@ export interface NodesQueryClauseFactory {
220
222
  }
221
223
  /**
222
224
  * Creates an instance of `NodeSelectQueryFactory`.
223
- * @public
224
225
  */
225
226
  export declare function createNodesQueryClauseFactory(props: {
226
227
  imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeSelectQueryFactory.d.ts","sourceRoot":"","sources":["../../../src/hierarchies/imodel/NodeSelectQueryFactory.ts"],"names":[],"mappings":"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"}