@itwin/presentation-hierarchies 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (427) hide show
  1. package/CHANGELOG.md +929 -12
  2. package/README.md +20 -50
  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 +19 -0
  6. package/lib/hierarchies/HierarchyMerge.d.ts.map +1 -0
  7. package/lib/{esm/hierarchies/HierarchyProvider.js → hierarchies/HierarchyMerge.js} +5 -6
  8. package/lib/hierarchies/HierarchyMerge.js.map +1 -0
  9. package/lib/{esm/hierarchies → hierarchies}/HierarchyNode.d.ts +21 -28
  10. package/lib/hierarchies/HierarchyNode.d.ts.map +1 -0
  11. package/lib/{esm/hierarchies → hierarchies}/HierarchyNode.js +19 -21
  12. package/lib/hierarchies/HierarchyNode.js.map +1 -0
  13. package/lib/{cjs/hierarchies → hierarchies}/HierarchyNodeIdentifier.d.ts +3 -1
  14. package/lib/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -0
  15. package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeIdentifier.js +23 -6
  16. package/lib/hierarchies/HierarchyNodeIdentifier.js.map +1 -0
  17. package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeKey.d.ts +5 -4
  18. package/lib/hierarchies/HierarchyNodeKey.d.ts.map +1 -0
  19. package/lib/{esm/hierarchies → hierarchies}/HierarchyNodeKey.js +1 -1
  20. package/lib/hierarchies/HierarchyNodeKey.js.map +1 -0
  21. package/lib/{esm/hierarchies → hierarchies}/HierarchyProvider.d.ts +59 -34
  22. package/lib/hierarchies/HierarchyProvider.d.ts.map +1 -0
  23. package/lib/hierarchies/HierarchyProvider.js +61 -0
  24. package/lib/hierarchies/HierarchyProvider.js.map +1 -0
  25. package/lib/hierarchies/HierarchySearch.d.ts +297 -0
  26. package/lib/hierarchies/HierarchySearch.d.ts.map +1 -0
  27. package/lib/hierarchies/HierarchySearch.js +464 -0
  28. package/lib/hierarchies/HierarchySearch.js.map +1 -0
  29. package/lib/{cjs/hierarchies → hierarchies}/Logging.d.ts +1 -1
  30. package/lib/hierarchies/Logging.d.ts.map +1 -0
  31. package/lib/{esm/hierarchies → hierarchies}/Logging.js +1 -1
  32. package/lib/hierarchies/Logging.js.map +1 -0
  33. package/lib/{cjs/hierarchies → hierarchies}/imodel/HierarchyCache.d.ts +1 -1
  34. package/lib/hierarchies/imodel/HierarchyCache.d.ts.map +1 -0
  35. package/lib/{esm/hierarchies → hierarchies}/imodel/HierarchyCache.js +4 -7
  36. package/lib/hierarchies/imodel/HierarchyCache.js.map +1 -0
  37. package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyDefinition.d.ts +34 -11
  38. package/lib/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -0
  39. package/lib/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -0
  40. package/lib/{cjs/hierarchies → hierarchies}/imodel/IModelHierarchyNode.d.ts +5 -5
  41. package/lib/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -0
  42. package/lib/hierarchies/imodel/IModelHierarchyNode.js.map +1 -0
  43. package/lib/hierarchies/imodel/IModelHierarchyProvider.d.ts +136 -0
  44. package/lib/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -0
  45. package/lib/hierarchies/imodel/IModelHierarchyProvider.js +656 -0
  46. package/lib/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -0
  47. package/lib/{esm/hierarchies → hierarchies}/imodel/LimitingECSqlQueryExecutor.d.ts +1 -1
  48. package/lib/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -0
  49. package/lib/{esm/hierarchies → hierarchies}/imodel/LimitingECSqlQueryExecutor.js +14 -11
  50. package/lib/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -0
  51. package/lib/{esm/hierarchies → hierarchies}/imodel/NodeSelectQueryFactory.d.ts +17 -12
  52. package/lib/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -0
  53. package/lib/{esm/hierarchies → hierarchies}/imodel/NodeSelectQueryFactory.js +214 -139
  54. package/lib/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -0
  55. package/lib/{cjs/hierarchies → hierarchies}/imodel/PredicateBasedHierarchyDefinition.d.ts +7 -7
  56. package/lib/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -0
  57. package/lib/{esm/hierarchies → hierarchies}/imodel/PredicateBasedHierarchyDefinition.js +3 -2
  58. package/lib/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -0
  59. package/lib/hierarchies/imodel/SearchHierarchyDefinition.d.ts +35 -0
  60. package/lib/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  61. package/lib/hierarchies/imodel/SearchHierarchyDefinition.js +261 -0
  62. package/lib/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  63. package/lib/{esm/hierarchies → hierarchies}/imodel/TreeNodesReader.d.ts +10 -12
  64. package/lib/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -0
  65. package/lib/{esm/hierarchies → hierarchies}/imodel/TreeNodesReader.js +12 -9
  66. package/lib/hierarchies/imodel/TreeNodesReader.js.map +1 -0
  67. package/lib/{cjs/hierarchies → hierarchies}/imodel/Utils.d.ts +2 -1
  68. package/lib/hierarchies/imodel/Utils.d.ts.map +1 -0
  69. package/lib/{esm/hierarchies → hierarchies}/imodel/Utils.js +20 -7
  70. package/lib/hierarchies/imodel/Utils.js.map +1 -0
  71. package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/DetermineChildren.d.ts +2 -2
  72. package/lib/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -0
  73. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/DetermineChildren.js +11 -5
  74. package/lib/hierarchies/imodel/operators/DetermineChildren.js.map +1 -0
  75. package/lib/hierarchies/imodel/operators/Grouping.d.ts +26 -0
  76. package/lib/hierarchies/imodel/operators/Grouping.d.ts.map +1 -0
  77. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/Grouping.js +33 -19
  78. package/lib/hierarchies/imodel/operators/Grouping.js.map +1 -0
  79. package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/HideIfNoChildren.d.ts +1 -1
  80. package/lib/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -0
  81. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/HideIfNoChildren.js +33 -10
  82. package/lib/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -0
  83. package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  84. package/lib/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -0
  85. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/HideNodesInHierarchy.js +31 -15
  86. package/lib/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -0
  87. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  88. package/lib/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -0
  89. package/lib/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -0
  90. package/lib/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +11 -0
  91. package/lib/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -0
  92. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/BaseClassGrouping.js +10 -12
  93. package/lib/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -0
  94. package/lib/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +7 -0
  95. package/lib/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -0
  96. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/ClassGrouping.js +8 -11
  97. package/lib/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -0
  98. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  99. package/lib/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -0
  100. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/GroupHiding.js +1 -5
  101. package/lib/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -0
  102. package/lib/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +5 -0
  103. package/lib/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -0
  104. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/LabelGrouping.js +2 -10
  105. package/lib/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -0
  106. package/lib/{cjs/hierarchies → hierarchies}/imodel/operators/grouping/PropertiesGrouping.d.ts +7 -7
  107. package/lib/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -0
  108. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/PropertiesGrouping.js +46 -37
  109. package/lib/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -0
  110. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/Shared.d.ts +2 -2
  111. package/lib/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -0
  112. package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/Shared.js +3 -1
  113. package/lib/hierarchies/imodel/operators/grouping/Shared.js.map +1 -0
  114. package/lib/{esm/hierarchies → hierarchies}/internal/Common.d.ts +5 -2
  115. package/lib/hierarchies/internal/Common.d.ts.map +1 -0
  116. package/lib/{esm/hierarchies → hierarchies}/internal/Common.js +13 -3
  117. package/lib/hierarchies/internal/Common.js.map +1 -0
  118. package/lib/hierarchies/internal/DisposePolyfill.d.ts.map +1 -0
  119. package/lib/hierarchies/internal/DisposePolyfill.js.map +1 -0
  120. package/lib/{esm/hierarchies → hierarchies}/internal/LoggingUtils.d.ts +1 -1
  121. package/lib/hierarchies/internal/LoggingUtils.d.ts.map +1 -0
  122. package/lib/hierarchies/internal/LoggingUtils.js.map +1 -0
  123. package/lib/{esm/hierarchies → hierarchies}/internal/RxjsHierarchyDefinition.d.ts +19 -8
  124. package/lib/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -0
  125. package/lib/{esm/hierarchies → hierarchies}/internal/RxjsHierarchyDefinition.js +9 -6
  126. package/lib/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -0
  127. package/lib/{cjs/hierarchies → hierarchies}/internal/SubscriptionScheduler.d.ts +1 -1
  128. package/lib/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -0
  129. package/lib/{esm/hierarchies → hierarchies}/internal/SubscriptionScheduler.js +1 -4
  130. package/lib/hierarchies/internal/SubscriptionScheduler.js.map +1 -0
  131. package/lib/{cjs/hierarchies → hierarchies}/internal/operators/Partition.d.ts +2 -1
  132. package/lib/hierarchies/internal/operators/Partition.d.ts.map +1 -0
  133. package/lib/hierarchies/internal/operators/Partition.js.map +1 -0
  134. package/lib/{esm/hierarchies → hierarchies}/internal/operators/ReduceToMergeMap.d.ts +3 -3
  135. package/lib/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -0
  136. package/lib/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -0
  137. package/lib/{cjs/hierarchies → hierarchies}/internal/operators/ReleaseMainThread.d.ts +1 -1
  138. package/lib/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -0
  139. package/lib/hierarchies/internal/operators/ReleaseMainThread.js.map +1 -0
  140. package/lib/{cjs/hierarchies → hierarchies}/internal/operators/ShareReplayWithErrors.d.ts +1 -1
  141. package/lib/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +1 -0
  142. package/lib/hierarchies/internal/operators/ShareReplayWithErrors.js.map +1 -0
  143. package/lib/{cjs/hierarchies → hierarchies}/internal/operators/Sorting.d.ts +1 -1
  144. package/lib/hierarchies/internal/operators/Sorting.d.ts.map +1 -0
  145. package/lib/hierarchies/internal/operators/Sorting.js.map +1 -0
  146. package/lib/{esm/hierarchies → hierarchies}/internal/operators/TapOnce.d.ts +1 -1
  147. package/lib/hierarchies/internal/operators/TapOnce.d.ts.map +1 -0
  148. package/lib/hierarchies/internal/operators/TapOnce.js.map +1 -0
  149. package/lib/presentation-hierarchies.d.ts +24 -0
  150. package/lib/presentation-hierarchies.d.ts.map +1 -0
  151. package/lib/{esm/presentation-hierarchies.js → presentation-hierarchies.js} +7 -7
  152. package/lib/presentation-hierarchies.js.map +1 -0
  153. package/package.json +29 -39
  154. package/lib/cjs/hierarchies/HierarchyErrors.d.ts.map +0 -1
  155. package/lib/cjs/hierarchies/HierarchyErrors.js +0 -20
  156. package/lib/cjs/hierarchies/HierarchyErrors.js.map +0 -1
  157. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts +0 -133
  158. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  159. package/lib/cjs/hierarchies/HierarchyFiltering.js +0 -232
  160. package/lib/cjs/hierarchies/HierarchyFiltering.js.map +0 -1
  161. package/lib/cjs/hierarchies/HierarchyNode.d.ts +0 -156
  162. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +0 -1
  163. package/lib/cjs/hierarchies/HierarchyNode.js +0 -84
  164. package/lib/cjs/hierarchies/HierarchyNode.js.map +0 -1
  165. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +0 -1
  166. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js +0 -35
  167. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +0 -1
  168. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts +0 -161
  169. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +0 -1
  170. package/lib/cjs/hierarchies/HierarchyNodeKey.js +0 -166
  171. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +0 -1
  172. package/lib/cjs/hierarchies/HierarchyProvider.d.ts +0 -109
  173. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +0 -1
  174. package/lib/cjs/hierarchies/HierarchyProvider.js +0 -44
  175. package/lib/cjs/hierarchies/HierarchyProvider.js.map +0 -1
  176. package/lib/cjs/hierarchies/Logging.d.ts.map +0 -1
  177. package/lib/cjs/hierarchies/Logging.js +0 -27
  178. package/lib/cjs/hierarchies/Logging.js.map +0 -1
  179. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
  180. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  181. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -283
  182. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
  183. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +0 -1
  184. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +0 -84
  185. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +0 -1
  186. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +0 -121
  187. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +0 -1
  188. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js +0 -21
  189. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +0 -1
  190. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +0 -1
  191. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js +0 -29
  192. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +0 -1
  193. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +0 -80
  194. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +0 -1
  195. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +0 -449
  196. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +0 -1
  197. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +0 -21
  198. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +0 -1
  199. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +0 -123
  200. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +0 -1
  201. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +0 -230
  202. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +0 -1
  203. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +0 -591
  204. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +0 -1
  205. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +0 -1
  206. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +0 -93
  207. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +0 -1
  208. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +0 -37
  209. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +0 -1
  210. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +0 -44
  211. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +0 -1
  212. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +0 -1
  213. package/lib/cjs/hierarchies/imodel/Utils.js +0 -59
  214. package/lib/cjs/hierarchies/imodel/Utils.js.map +0 -1
  215. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +0 -1
  216. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +0 -34
  217. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +0 -1
  218. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts +0 -26
  219. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +0 -1
  220. package/lib/cjs/hierarchies/imodel/operators/Grouping.js +0 -162
  221. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +0 -1
  222. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +0 -1
  223. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +0 -52
  224. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +0 -1
  225. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +0 -1
  226. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +0 -68
  227. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +0 -1
  228. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +0 -4
  229. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +0 -1
  230. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js +0 -26
  231. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +0 -1
  232. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +0 -11
  233. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +0 -1
  234. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +0 -114
  235. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +0 -1
  236. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +0 -7
  237. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +0 -1
  238. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +0 -55
  239. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +0 -1
  240. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +0 -4
  241. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +0 -1
  242. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +0 -53
  243. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +0 -1
  244. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +0 -5
  245. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +0 -1
  246. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +0 -60
  247. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +0 -1
  248. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +0 -1
  249. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +0 -309
  250. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +0 -1
  251. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts +0 -5
  252. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +0 -1
  253. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js +0 -29
  254. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +0 -1
  255. package/lib/cjs/hierarchies/internal/Common.d.ts +0 -58
  256. package/lib/cjs/hierarchies/internal/Common.d.ts.map +0 -1
  257. package/lib/cjs/hierarchies/internal/Common.js +0 -80
  258. package/lib/cjs/hierarchies/internal/Common.js.map +0 -1
  259. package/lib/cjs/hierarchies/internal/DisposePolyfill.d.ts +0 -1
  260. package/lib/cjs/hierarchies/internal/DisposePolyfill.d.ts.map +0 -1
  261. package/lib/cjs/hierarchies/internal/DisposePolyfill.js +0 -11
  262. package/lib/cjs/hierarchies/internal/DisposePolyfill.js.map +0 -1
  263. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts +0 -12
  264. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +0 -1
  265. package/lib/cjs/hierarchies/internal/EachValueFrom.js +0 -110
  266. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +0 -1
  267. package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts +0 -12
  268. package/lib/cjs/hierarchies/internal/LoggingUtils.d.ts.map +0 -1
  269. package/lib/cjs/hierarchies/internal/LoggingUtils.js +0 -37
  270. package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +0 -1
  271. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts +0 -64
  272. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +0 -1
  273. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +0 -25
  274. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +0 -1
  275. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +0 -1
  276. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +0 -57
  277. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +0 -1
  278. package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +0 -1
  279. package/lib/cjs/hierarchies/internal/operators/Partition.js +0 -60
  280. package/lib/cjs/hierarchies/internal/operators/Partition.js.map +0 -1
  281. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts +0 -22
  282. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +0 -1
  283. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js +0 -50
  284. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +0 -1
  285. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +0 -1
  286. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js +0 -24
  287. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.js.map +0 -1
  288. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +0 -1
  289. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js +0 -23
  290. package/lib/cjs/hierarchies/internal/operators/ShareReplayWithErrors.js.map +0 -1
  291. package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +0 -1
  292. package/lib/cjs/hierarchies/internal/operators/Sorting.js +0 -25
  293. package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +0 -1
  294. package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts +0 -4
  295. package/lib/cjs/hierarchies/internal/operators/TapOnce.d.ts.map +0 -1
  296. package/lib/cjs/hierarchies/internal/operators/TapOnce.js +0 -19
  297. package/lib/cjs/hierarchies/internal/operators/TapOnce.js.map +0 -1
  298. package/lib/cjs/package.json +0 -1
  299. package/lib/cjs/presentation-hierarchies.d.ts +0 -15
  300. package/lib/cjs/presentation-hierarchies.d.ts.map +0 -1
  301. package/lib/cjs/presentation-hierarchies.js +0 -40
  302. package/lib/cjs/presentation-hierarchies.js.map +0 -1
  303. package/lib/esm/hierarchies/HierarchyErrors.d.ts +0 -9
  304. package/lib/esm/hierarchies/HierarchyErrors.d.ts.map +0 -1
  305. package/lib/esm/hierarchies/HierarchyErrors.js.map +0 -1
  306. package/lib/esm/hierarchies/HierarchyFiltering.d.ts +0 -133
  307. package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  308. package/lib/esm/hierarchies/HierarchyFiltering.js +0 -227
  309. package/lib/esm/hierarchies/HierarchyFiltering.js.map +0 -1
  310. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +0 -1
  311. package/lib/esm/hierarchies/HierarchyNode.js.map +0 -1
  312. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +0 -29
  313. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +0 -1
  314. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +0 -1
  315. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +0 -1
  316. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +0 -1
  317. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +0 -1
  318. package/lib/esm/hierarchies/HierarchyProvider.js.map +0 -1
  319. package/lib/esm/hierarchies/Logging.d.ts +0 -13
  320. package/lib/esm/hierarchies/Logging.d.ts.map +0 -1
  321. package/lib/esm/hierarchies/Logging.js.map +0 -1
  322. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +0 -36
  323. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  324. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +0 -277
  325. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
  326. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +0 -18
  327. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +0 -1
  328. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +0 -1
  329. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +0 -1
  330. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +0 -1
  331. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts +0 -234
  332. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +0 -1
  333. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +0 -1
  334. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +0 -80
  335. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +0 -1
  336. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +0 -446
  337. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +0 -1
  338. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +0 -1
  339. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +0 -1
  340. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +0 -1
  341. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +0 -1
  342. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +0 -140
  343. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +0 -1
  344. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +0 -1
  345. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +0 -1
  346. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +0 -1
  347. package/lib/esm/hierarchies/imodel/Utils.d.ts +0 -4
  348. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +0 -1
  349. package/lib/esm/hierarchies/imodel/Utils.js.map +0 -1
  350. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +0 -11
  351. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +0 -1
  352. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +0 -1
  353. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +0 -26
  354. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +0 -1
  355. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +0 -1
  356. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +0 -11
  357. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +0 -1
  358. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +0 -1
  359. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +0 -11
  360. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +0 -1
  361. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +0 -1
  362. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +0 -1
  363. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +0 -1
  364. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +0 -11
  365. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +0 -1
  366. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +0 -1
  367. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +0 -7
  368. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +0 -1
  369. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +0 -1
  370. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +0 -1
  371. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +0 -1
  372. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +0 -5
  373. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +0 -1
  374. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +0 -1
  375. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +0 -32
  376. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +0 -1
  377. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +0 -1
  378. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +0 -1
  379. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +0 -1
  380. package/lib/esm/hierarchies/internal/Common.d.ts.map +0 -1
  381. package/lib/esm/hierarchies/internal/Common.js.map +0 -1
  382. package/lib/esm/hierarchies/internal/DisposePolyfill.d.ts.map +0 -1
  383. package/lib/esm/hierarchies/internal/DisposePolyfill.js.map +0 -1
  384. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts +0 -12
  385. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +0 -1
  386. package/lib/esm/hierarchies/internal/EachValueFrom.js +0 -107
  387. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +0 -1
  388. package/lib/esm/hierarchies/internal/LoggingUtils.d.ts.map +0 -1
  389. package/lib/esm/hierarchies/internal/LoggingUtils.js.map +0 -1
  390. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +0 -1
  391. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +0 -1
  392. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts +0 -17
  393. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +0 -1
  394. package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +0 -1
  395. package/lib/esm/hierarchies/internal/operators/Partition.d.ts +0 -6
  396. package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +0 -1
  397. package/lib/esm/hierarchies/internal/operators/Partition.js.map +0 -1
  398. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +0 -1
  399. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +0 -1
  400. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts +0 -7
  401. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +0 -1
  402. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.js.map +0 -1
  403. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts +0 -9
  404. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.d.ts.map +0 -1
  405. package/lib/esm/hierarchies/internal/operators/ShareReplayWithErrors.js.map +0 -1
  406. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts +0 -13
  407. package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +0 -1
  408. package/lib/esm/hierarchies/internal/operators/Sorting.js.map +0 -1
  409. package/lib/esm/hierarchies/internal/operators/TapOnce.d.ts.map +0 -1
  410. package/lib/esm/hierarchies/internal/operators/TapOnce.js.map +0 -1
  411. package/lib/esm/presentation-hierarchies.d.ts +0 -15
  412. package/lib/esm/presentation-hierarchies.d.ts.map +0 -1
  413. package/lib/esm/presentation-hierarchies.js.map +0 -1
  414. /package/lib/{cjs/hierarchies → hierarchies}/HierarchyErrors.d.ts +0 -0
  415. /package/lib/{esm/hierarchies → hierarchies}/HierarchyErrors.js +0 -0
  416. /package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyDefinition.js +0 -0
  417. /package/lib/{esm/hierarchies → hierarchies}/imodel/IModelHierarchyNode.js +0 -0
  418. /package/lib/{esm/hierarchies → hierarchies}/imodel/operators/grouping/AutoExpand.js +0 -0
  419. /package/lib/{esm/hierarchies → hierarchies}/internal/DisposePolyfill.d.ts +0 -0
  420. /package/lib/{esm/hierarchies → hierarchies}/internal/DisposePolyfill.js +0 -0
  421. /package/lib/{esm/hierarchies → hierarchies}/internal/LoggingUtils.js +0 -0
  422. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/Partition.js +0 -0
  423. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ReduceToMergeMap.js +0 -0
  424. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ReleaseMainThread.js +0 -0
  425. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/ShareReplayWithErrors.js +0 -0
  426. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/Sorting.js +0 -0
  427. /package/lib/{esm/hierarchies → hierarchies}/internal/operators/TapOnce.js +0 -0
@@ -1 +0,0 @@
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\";\nimport {\n catchError,\n concat,\n defaultIfEmpty,\n EMPTY,\n filter,\n finalize,\n from,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n Observable,\n ObservableInput,\n of,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, BeEvent, Guid, StopWatch } from \"@itwin/core-bentley\";\nimport {\n ConcatenatedValue,\n createDefaultValueFormatter,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryDef,\n Event,\n EventArgs,\n formatConcatenatedValue,\n InstanceKey,\n IPrimitiveValueFormatter,\n normalizeFullClassName,\n} from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport { HierarchyFilteringPath } from \"../HierarchyFiltering.js\";\nimport { HierarchyNode, NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, HierarchyNodeKey, IModelInstanceKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport { GetHierarchyNodesProps, HierarchyProvider } from \"../HierarchyProvider.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, RxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { SubscriptionScheduler } from \"../internal/SubscriptionScheduler.js\";\nimport { FilteringHierarchyDefinition } from \"./FilteringHierarchyDefinition.js\";\nimport { HierarchyCache } from \"./HierarchyCache.js\";\nimport { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyNodesDefinition } from \"./IModelHierarchyDefinition.js\";\nimport { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode, SourceGenericHierarchyNode, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport { 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 { readNodes } from \"./TreeNodesReader.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 /** An event that is raised when iModel data, that may affect the hierarchy, changes. */\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 * 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 /** Props for filtering the hierarchy. */\n filtering?: {\n /** A list of node identifiers from root to target node. */\n paths: HierarchyFilteringPath[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & {\n /** @deprecated in 1.4. Use `[Symbol.dispose]` instead. */\n dispose: () => void;\n [Symbol.dispose]: () => void;\n} {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: {\n requestId: string;\n };\n}\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodelAccess: IModelAccess;\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 _queryScheduler: SubscriptionScheduler;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n\n public constructor(props: IModelHierarchyProviderProps) {\n this._imodelAccess = props.imodelAccess;\n this._hierarchyChanged = new BeEvent();\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(props.hierarchyDefinition);\n this._valuesFormatter = props?.formatter ?? createDefaultValueFormatter();\n this._localizedStrings = { other: \"Other\", unspecified: \"Not specified\", ...props?.localizedStrings };\n this._queryScheduler = new SubscriptionScheduler(props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY);\n this.setHierarchyFilter(props.filtering);\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 this._unsubscribe = props.imodelChanged?.addListener(() => {\n this.invalidateHierarchyCache(\"Data source changed\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent();\n });\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* c8 ignore next 3 */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public get hierarchyChanged() {\n return this._hierarchyChanged;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n doLog({\n category: `${LOGGING_NAMESPACE}.Events`,\n message: /* c8 ignore next */ () => (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 setHierarchyFilter(props: IModelHierarchyProviderProps[\"filtering\"]) {\n if (!props) {\n if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition;\n this.invalidateHierarchyCache(\"Hierarchy filter reset\");\n }\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: undefined } });\n return;\n }\n this._activeHierarchyDefinition = new FilteringHierarchyDefinition({\n imodelAccess: this._imodelAccess,\n source: this._sourceHierarchyDefinition,\n nodeIdentifierPaths: props.paths,\n });\n this.invalidateHierarchyCache(\"Hierarchy filter set\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: props } });\n }\n\n private onGroupingNodeCreated(groupingNode: ProcessedGroupingHierarchyNode, props: GetHierarchyNodesProps) {\n this._nodesCache?.set({ ...props, parentNode: groupingNode }, { observable: from(groupingNode.children), processingStatus: \"pre-processed\" });\n }\n\n private createHierarchyLevelDefinitionsObservable(props: DefineHierarchyLevelProps & RequestContextProp): Observable<HierarchyNodesDefinition> {\n const { requestContext, ...defineHierarchyLevelProps } = props;\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let parentNode = props.parentNode;\n if (parentNode && HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this._imodelAccess.imodelKey) {\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((ik) => !ik.imodelKey || ik.imodelKey === this._imodelAccess.imodelKey),\n },\n };\n assert(HierarchyNodeKey.isInstances(parentNode.key));\n if (parentNode.key.instanceKeys.length === 0) {\n return EMPTY;\n }\n }\n return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode }).pipe(\n mergeAll(),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n );\n }\n\n private createSourceNodesObservable(\n props: DefineHierarchyLevelProps & { hierarchyLevelSizeLimit?: number | \"unbounded\"; filteredInstanceKeys?: InstanceKey[] } & RequestContextProp,\n ): SourceNodesObservable {\n // pipe definitions to nodes and put \"share replay\" on it\n return this.createHierarchyLevelDefinitionsObservable(props).pipe(\n mergeMap((def): ObservableInput<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({ ...def.node, key: { type: \"generic\", id: def.node.key, source: this._imodelAccess.imodelKey } });\n }\n return this._queryScheduler.scheduleSubscription(\n of(def.query).pipe(\n map((query) => filterQueryByInstanceKeys(query, props.filteredInstanceKeys)),\n mergeMap((query) =>\n readNodes({\n queryExecutor: this._imodelAccess,\n query,\n limit: props.hierarchyLevelSizeLimit,\n parser: this._activeHierarchyDefinition.parseNode ? (row) => this._activeHierarchyDefinition.parseNode!(row, props.parentNode) : undefined,\n }),\n ),\n map((node) => ({\n ...node,\n key: { ...node.key, instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: this._imodelAccess.imodelKey })) },\n })),\n ),\n );\n }),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () => `[${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 preProcessNodes(this._activeHierarchyDefinition),\n // process hiding\n createHideIfNoChildrenOperator((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes),\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 doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\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(this._imodelAccess, props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) =>\n this.onGroupingNodeCreated(gn, props),\n ),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\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) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes),\n postProcessNodes(this._activeHierarchyDefinition),\n sortNodesByLabelOperator,\n map((n): HierarchyNode => {\n if (\"processingParams\" in n) {\n delete n.processingParams;\n }\n return Object.assign(n, {\n children: hasChildren(n),\n });\n }),\n takeUntil(this._dispose),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\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((possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))), preprocessedNodesObservable).pipe(\n log({\n category: loggingCategory,\n message: /* c8 ignore next */ (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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${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 log({ category: loggingCategory, message: /* c8 ignore next */ (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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\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 filter based on grouped instance keys\n let filteredInstanceKeys: InstanceKey[] | undefined;\n let parentNonGroupingNode: ParentHierarchyNode<NonGroupingHierarchyNode> | undefined;\n if (parentNode) {\n if (HierarchyNode.isGroupingNode(parentNode)) {\n parentNonGroupingNode = parentNode.nonGroupingAncestor;\n filteredInstanceKeys = 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 ...(filteredInstanceKeys ? { filteredInstanceKeys } : undefined),\n };\n const value = { observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps), processingStatus: \"none\" as const };\n this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return value;\n }\n\n private getChildNodesObservables(props: GetHierarchyNodesProps & { hierarchyLevelSizeLimit?: number | \"unbounded\" } & RequestContextProp) {\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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\n /* c8 ignore next 3 */ 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(props: Omit<GetHierarchyNodesProps, \"ignoreCache\"> & RequestContextProp): 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 const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });\n\n // split the definitions based on whether they're for generic nodes or for instance nodes\n const [genericDefs, instanceDefs] = partition(hierarchyLevelDefinitions, HierarchyNodesDefinition.isGenericNode);\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap((def) =>\n this._queryScheduler.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 = this._imodelAccess.createQueryReader({ ...query, ecsql }, { rowFormat: \"Indexes\", limit: hierarchyLevelSizeLimit });\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: this._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((def) => !!def.node.processingParams?.hideInHierarchy),\n map(\n (def): GenericNodeKey => ({\n type: \"generic\",\n id: def.node.key,\n source: this._imodelAccess.imodelKey,\n }),\n ),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key.id,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, ids]) => ({\n type: \"instances\",\n instanceKeys: ids.map((id) => ({ className, id, imodelKey: this._imodelAccess.imodelKey })),\n })),\n ),\n ),\n ).pipe(\n map((key) => ({\n key,\n parentKeys: [],\n label: \"\",\n })),\n );\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(mergeMap((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext }))),\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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${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 doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\n /* c8 ignore next 3 */ 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 = SourceInstanceHierarchyNode | (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) {\n return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode) : identity;\n}\n\nfunction postProcessNodes(hierarchyFactory: RxjsHierarchyDefinition) {\n return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode) : identity;\n}\n\nfunction processNodes<TNode>(processor: (node: TNode) => Observable<TNode>) {\n return (nodes: Observable<TNode>) => nodes.pipe(mergeMap(processor));\n}\n\nfunction applyLabelsFormatting<TNode extends { label: string | ConcatenatedValue }>(\n node: TNode,\n valueFormatter: IPrimitiveValueFormatter,\n): Observable<TNode & { label: string }> {\n return from(\n formatConcatenatedValue({\n value: node.label,\n valueFormatter,\n }),\n ).pipe(\n map((label) => ({\n ...node,\n label,\n })),\n );\n}\n\nfunction createParentNodeKeysList(parentNode: ParentHierarchyNode | undefined) {\n if (!parentNode) {\n return [];\n }\n return [...parentNode.parentKeys, parentNode.key];\n}\n\nfunction filterQueryByInstanceKeys(query: ECSqlQueryDef, filteredInstanceKeys: InstanceKey[] | undefined): ECSqlQueryDef {\n if (!filteredInstanceKeys || !filteredInstanceKeys.length) {\n return query;\n }\n const MAX_ALLOWED_BINDINGS = 1000;\n if (filteredInstanceKeys.length < MAX_ALLOWED_BINDINGS) {\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE q.ECInstanceId IN (${filteredInstanceKeys.map(() => \"?\").join(\",\")})\n `,\n bindings: [...(query.bindings ?? []), ...filteredInstanceKeys.map((k): ECSqlBinding => ({ type: \"id\", value: k.id }))],\n };\n }\n /* c8 ignore start */\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE InVirtualSet(?, q.ECInstanceId)\n `,\n bindings: [...(query.bindings ?? []), { type: \"idset\", value: filteredInstanceKeys.map((k) => k.id) }],\n };\n /* c8 ignore end */\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"LimitingECSqlQueryExecutor.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/LimitingECSqlQueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EAGxB,MAAM,4BAA4B,CAAC;AAKpC;;;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,CAAC,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,0BAA0B,CA4CjJ"}
@@ -1 +0,0 @@
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 {\n createMainThreadReleaseOnTimePassedHandler,\n ECSqlQueryDef,\n ECSqlQueryExecutor,\n ECSqlQueryReaderOptions,\n ECSqlQueryRow,\n trimWhitespace,\n} from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport { LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE, LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE } from \"../internal/Common.js\";\nimport { doLog } from \"../internal/LoggingUtils.js\";\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(baseExecutor: ECSqlQueryExecutor, defaultLimit: number | \"unbounded\"): LimitingECSqlQueryExecutor {\n return {\n async *createQueryReader(query: ECSqlQueryDef, config?: ECSqlQueryReaderOptions & { limit?: number | \"unbounded\" }) {\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 doLog({\n category: LOGGING_NAMESPACE,\n message: /* c8 ignore next */ () => `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 /* c8 ignore start */\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 /* c8 ignore end */\n firstStep = false;\n }\n ++rowsCount;\n },\n onComplete() {\n /* c8 ignore start */\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 /* c8 ignore end */\n },\n };\n}\n\n/* c8 ignore start */\nfunction createQueryLogMessage(query: ECSqlQueryDef): string {\n const ctes = query.ctes?.map((cte) => ` ${trimWhitespace(cte)}`).join(\", \\n\");\n const bindings = query.bindings?.map((b) => JSON.stringify(b.value)).join(\", \");\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/* c8 ignore end */\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeSelectQueryFactory.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/NodeSelectQueryFactory.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NodeSelectQueryFactory.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/NodeSelectQueryFactory.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assert, Id64String } from \"@itwin/core-bentley\";\nimport {\n GenericInstanceFilter,\n GenericInstanceFilterRelationshipStep,\n GenericInstanceFilterRule,\n GenericInstanceFilterRuleGroup,\n GenericInstanceFilterRuleGroupOperator,\n GenericInstanceFilterRuleOperator,\n GenericInstanceFilterRuleValue,\n} from \"@itwin/core-common\";\nimport {\n EC,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSql,\n getClass,\n IInstanceLabelSelectClauseFactory,\n parseFullClassName,\n PrimitiveValue,\n Props,\n} from \"@itwin/presentation-shared\";\nimport { HierarchyNodeAutoExpandProp } from \"./IModelHierarchyNode.js\";\n\n/**\n * Column names of the SELECT clause created by `NodeSelectClauseFactory`. Order of the names matches the order of columns\n * created by the factory.\n *\n * @public\n */\nexport enum NodeSelectClauseColumnNames {\n /** Full class name of the instance the node represents. Type: `string` in format `{schema name}:{class name}`. */\n FullClassName = \"FullClassName\",\n /** ECInstance ID of the instance the node represents. Type: `Id64String`. */\n ECInstanceId = \"ECInstanceId\",\n /** Display label. Type: `string`. */\n DisplayLabel = \"DisplayLabel\",\n /**\n * A flag indicating if the node has children. Type: `boolean`. Values:\n * - `false` - node never has children.\n * - `true` - node always has children.\n * - NULL - unknown, needs to be determined by requesting children for the node.\n */\n HasChildren = \"HasChildren\",\n /** A flag indicating that a node should be hidden if it has no children. Type: `boolean`. */\n HideIfNoChildren = \"HideIfNoChildren\",\n /** A flag indicating that a node should be hidden and its children should be displayed instead. Type: `boolean`. */\n HideNodeInHierarchy = \"HideNodeInHierarchy\",\n /** A serialized JSON object for providing grouping information. */\n Grouping = \"Grouping\",\n /** A serialized JSON object for associating a node with additional data. */\n ExtendedData = \"ExtendedData\",\n /** A flag indicating the node should be auto-expanded when it's loaded. */\n AutoExpand = \"AutoExpand\",\n /** A flag indicating the node supports child hierarchy level filtering. */\n SupportsFiltering = \"SupportsFiltering\",\n}\n\n/**\n * A data structure for defining an ECSQL value selector.\n * @public\n */\ninterface ECSqlValueSelector {\n selector: string;\n}\n\n/**\n * Props for `NodeSelectClauseFactory.createSelectClause`.\n * @public\n */\ninterface NodeSelectClauseProps {\n ecClassId: ECSqlValueSelector;\n ecInstanceId: ECSqlValueSelector;\n nodeLabel: string | ECSqlValueSelector;\n extendedData?: {\n [key: string]: Id64String | string | number | boolean | ECSqlValueSelector;\n };\n autoExpand?: boolean | ECSqlValueSelector;\n supportsFiltering?: boolean | ECSqlValueSelector;\n hasChildren?: boolean | ECSqlValueSelector;\n hideNodeInHierarchy?: boolean | ECSqlValueSelector;\n hideIfNoChildren?: boolean | ECSqlValueSelector;\n grouping?: ECSqlSelectClauseGroupingParams;\n}\n\n/**\n * A data structure for defining nodes' grouping requirements.\n * @public\n */\ninterface ECSqlSelectClauseGroupingParams {\n byLabel?: ECSqlSelectClauseLabelGroupingParams;\n byClass?: boolean | ECSqlSelectClauseGroupingParamsBase | ECSqlValueSelector;\n byBaseClasses?: ECSqlSelectClauseBaseClassGroupingParams;\n byProperties?: ECSqlSelectClausePropertiesGroupingParams;\n}\n\n/**\n * A data structure for defining label grouping params.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingBaseParams {\n /** Label grouping option that determines whether to group nodes or to merge them. Defaults to \"group\".*/\n action?: \"group\" | \"merge\";\n /** Id that needs to match for nodes to be grouped or merged.*/\n groupId?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining label merging.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingMergeParams extends ECSqlSelectClauseLabelGroupingBaseParams {\n action: \"merge\";\n}\n\n/**\n * A data structure for defining label grouping.\n * @public\n */\ninterface ECSqlSelectClauseLabelGroupingGroupParams extends ECSqlSelectClauseLabelGroupingBaseParams, ECSqlSelectClauseGroupingParamsBase {\n action?: \"group\";\n}\n\n/**\n * A data structure for defining possible label grouping types.\n * @public\n */\ntype ECSqlSelectClauseLabelGroupingParams =\n | boolean\n | ECSqlValueSelector\n | ECSqlSelectClauseLabelGroupingMergeParams\n | ECSqlSelectClauseLabelGroupingGroupParams;\n\n/**\n * A data structure for defining base grouping parameters shared across all types of grouping.\n * @public\n */\ninterface ECSqlSelectClauseGroupingParamsBase {\n hideIfNoSiblings?: boolean | ECSqlValueSelector;\n hideIfOneGroupedNode?: boolean | ECSqlValueSelector;\n autoExpand?: HierarchyNodeAutoExpandProp | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining properties grouping.\n * @public\n */\ninterface ECSqlSelectClausePropertiesGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n /**\n * Full name of a class whose properties are used to group the node. Only has effect if the node\n * represents an instance of that class.\n *\n * Full class name format: `SchemaName.ClassName`.\n */\n propertiesClassName: string;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value is not set or is set to an empty string.\n *\n * Label of the created grouping node will be `Not Specified`.\n */\n createGroupForUnspecifiedValues?: boolean | ECSqlValueSelector;\n /**\n * Property grouping option that determines whether to group nodes whose grouping value doesn't fit within any of the provided\n * ranges, or is not a numeric value.\n *\n * Label of the created grouping node will be `Other`.\n */\n createGroupForOutOfRangeValues?: boolean | ECSqlValueSelector;\n /**\n * Properties of the specified class, by which the nodes should be grouped.\n *\n * Example usage:\n * ```ts\n * propertyGroups: [\n * {\n * propertyName: \"type\",\n * propertyClassAlias: \"this\"\n * },\n * {\n * propertyName: \"length\",\n * propertyClassAlias: \"x\",\n * ranges: [\n * { fromValue: 1, toValue: 10, rangeLabel: \"Small\" },\n * { fromValue: 11, toValue: 20, rangeLabel: \"Medium\" }\n * ]\n * },\n * ]\n * ```\n */\n propertyGroups: ECSqlSelectClausePropertyGroup[];\n}\n\n/**\n * A data structure for defining specific properties' grouping params.\n * @public\n */\ninterface ECSqlSelectClausePropertyGroup {\n /** A string indicating the name of the property to group by. */\n propertyName: string;\n /** Alias to of the class containing the property. Used to select the property value. */\n propertyClassAlias: string;\n /** Ranges are used to group nodes by numeric properties which are within specified bounds. */\n ranges?: ECSqlSelectClausePropertyValueRange[];\n}\n\n/**\n * A data structure for defining boundaries for a value.\n * @public\n */\ninterface ECSqlSelectClausePropertyValueRange {\n /** Defines the lower bound of the range. */\n fromValue: number | ECSqlValueSelector;\n /** Defines the upper bound of the range. */\n toValue: number | ECSqlValueSelector;\n /** Defines the range label. Will be used as grouping node's display label. */\n rangeLabel?: string | ECSqlValueSelector;\n}\n\n/**\n * A data structure for defining base class grouping.\n * @public\n */\ninterface ECSqlSelectClauseBaseClassGroupingParams extends ECSqlSelectClauseGroupingParamsBase {\n fullClassNames: string[] | ECSqlValueSelector[];\n}\n\n/**\n * An interface of a factory that knows how to create nodes' select ECSQL query.\n * @public\n */\nexport interface NodesQueryClauseFactory {\n /** Create a SELECT clause in a format understood by nodes query parser used by `HierarchyProvider`. */\n createSelectClause(props: NodeSelectClauseProps): Promise<string>;\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the given `GenericInstanceFilter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter?: GenericInstanceFilter;\n }): Promise<{ from: string; where: string; joins: string }>;\n}\n\n/**\n * Creates an instance of `NodeSelectQueryFactory`.\n * @public\n */\nexport function createNodesQueryClauseFactory(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n}): NodesQueryClauseFactory {\n return new NodeSelectQueryFactory(props);\n}\n\n/** A factory for creating a nodes' select ECSQL query. */\nclass NodeSelectQueryFactory {\n private _imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n private _instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n\n public constructor(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory;\n }) {\n this._imodelAccess = props.imodelAccess;\n this._instanceLabelSelectClauseFactory = props.instanceLabelSelectClauseFactory;\n }\n\n /** Create a SELECT clause in a format understood by results reader of the library. */\n public async createSelectClause(props: NodeSelectClauseProps) {\n // note: the columns order must match the order in `NodeSelectClauseColumnNames`\n return `\n ec_ClassName(${props.ecClassId.selector}) AS ${NodeSelectClauseColumnNames.FullClassName},\n ${props.ecInstanceId.selector} AS ${NodeSelectClauseColumnNames.ECInstanceId},\n ${createECSqlValueSelector(props.nodeLabel)} AS ${NodeSelectClauseColumnNames.DisplayLabel},\n CAST(${createECSqlValueSelector(props.hasChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HasChildren},\n CAST(${createECSqlValueSelector(props.hideIfNoChildren)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideIfNoChildren},\n CAST(${createECSqlValueSelector(props.hideNodeInHierarchy)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.HideNodeInHierarchy},\n ${props.grouping ? await createGroupingSelector(props.grouping, this._imodelAccess, this._instanceLabelSelectClauseFactory) : \"CAST(NULL AS TEXT)\"} AS ${NodeSelectClauseColumnNames.Grouping},\n ${\n props.extendedData\n ? `json_object(${Object.entries(props.extendedData)\n .map(([key, value]) => `'${key}', ${createECSqlValueSelector(value)}`)\n .join(\", \")})`\n : \"CAST(NULL AS TEXT)\"\n } AS ${NodeSelectClauseColumnNames.ExtendedData},\n CAST(${createECSqlValueSelector(props.autoExpand)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.AutoExpand},\n CAST(${createECSqlValueSelector(props.supportsFiltering)} AS BOOLEAN) AS ${NodeSelectClauseColumnNames.SupportsFiltering}\n `;\n }\n\n /**\n * Creates the necessary ECSQL snippets to create an instance filter described by the `filter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\n public async createFilterClauses(props: {\n contentClass: { fullName: string; alias: string };\n filter?: GenericInstanceFilter;\n }): Promise<{ from: string; where: string; joins: string }> {\n const { contentClass, filter } = props;\n const { from, joins, where } = filter\n ? await createInstanceFilterClauses({ imodelAccess: this._imodelAccess, contentClass, filter })\n : {\n from: contentClass.fullName,\n joins: [],\n where: [],\n };\n\n const fromClass = await getClass(this._imodelAccess, from);\n const hiddenClasses = await getHiddenClassesTree(fromClass);\n const hiddenClassesWhereClause = createWhereClauseForHiddenClasses(hiddenClasses, contentClass.alias);\n hiddenClassesWhereClause.hideClause && where.push(hiddenClassesWhereClause.hideClause);\n assert(!hiddenClassesWhereClause.showClause, \"`showClause` is expected to always be empty here\");\n\n return {\n from,\n joins: joins.join(\"\\n\"),\n where: where.join(\" AND \"),\n };\n }\n}\n\n/**\n * Creates the necessary ECSQL snippets to create an instance filter described by the `filter` argument.\n * - `from` is set to either the `contentClass.fullName` or one of `filter.propertyClassNames`, depending on which is more specific.\n * - `joins` is set to a number of `JOIN` clauses required to join all relationships described by `filter.relatedInstances`.\n * - `where` is set to a `WHERE` clause (without the `WHERE` keyword) that filters instances by classes on\n * `filter.filterClassNames` and by properties as described by `filter.rules`.\n *\n * Special cases:\n * - If `filter` is `undefined`, `joins` and `where` are set to empty strings and `from` is set to `contentClass.fullName`.\n * - If the provided content class doesn't intersect with the property class in provided filter, a special result\n * is returned to make sure the resulting query is valid and doesn't return anything.\n */\nasync function createInstanceFilterClauses(props: {\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector;\n contentClass: { fullName: string; alias: string };\n filter: GenericInstanceFilter;\n}): Promise<{ from: string; where: string[]; joins: string[] }> {\n const { imodelAccess, contentClass, filter } = props;\n\n const from = await specializeContentClass({\n classHierarchyInspector: imodelAccess,\n contentClassName: contentClass.fullName,\n filterClassNames: filter.propertyClassNames,\n });\n if (!from) {\n // filter class doesn't intersect with content class - make sure the query returns nothing by returning a `FALSE` WHERE clause\n return { from: contentClass.fullName, joins: [], where: [\"FALSE\"] };\n }\n\n /**\n * TODO:\n * There may be similar related instance paths, e.g.:\n * - A -> B -> C,\n * - A -> B -> D.\n * At this moment we're handling each path individually which means A and B would get joined twice. We could look into\n * creating a join tree first, e.g.\n * C\n * /\n * A -> B\n * \\\n * D\n */\n const joins = await Promise.all(\n filter.relatedInstances.map(async (rel, i) =>\n ECSql.createRelationshipPathJoinClause({\n schemaProvider: imodelAccess,\n path: assignRelationshipPathAliases(rel.path, i, contentClass.alias, rel.alias),\n }),\n ),\n );\n\n const where = new Array<string>();\n if (filter.filteredClassNames && filter.filteredClassNames.length > 0) {\n where.push(\n `${ECSql.createRawPropertyValueSelector(contentClass.alias, \"ECClassId\")} IS (\n ${filter.filteredClassNames\n .map(parseFullClassName)\n .map(({ schemaName, className }) => `[${schemaName}].[${className}]`)\n .join(\", \")}\n )`,\n );\n }\n const classAliasMap = new Map<string, string>([[contentClass.alias, from]]);\n filter.relatedInstances.forEach(({ path, alias }) => path.length > 0 && classAliasMap.set(alias, path[path.length - 1].targetClassName));\n const propertiesFilter = await createWhereClause(\n contentClass.alias,\n async (alias) => {\n const aliasClassName = classAliasMap.get(alias);\n return aliasClassName ? getClass(imodelAccess, aliasClassName) : undefined;\n },\n filter.rules,\n );\n if (propertiesFilter) {\n where.push(propertiesFilter);\n }\n\n return { from, joins, where };\n}\n\nfunction createECSqlValueSelector(input: undefined | PrimitiveValue | ECSqlValueSelector) {\n if (input === undefined) {\n return \"NULL\";\n }\n if (isSelector(input)) {\n return input.selector;\n }\n return ECSql.createRawPrimitiveValueSelector(input);\n}\n\nfunction isSelector(x: any): x is ECSqlValueSelector {\n return !!x.selector;\n}\n\nasync function createGroupingSelector(\n grouping: ECSqlSelectClauseGroupingParams,\n imodelAccess: ECSchemaProvider & ECClassHierarchyInspector,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n): Promise<string> {\n const groupingSelectors = new Array<{ key: string; selector: string }>();\n\n grouping.byLabel &&\n groupingSelectors.push({\n key: \"byLabel\",\n selector:\n typeof grouping.byLabel === \"boolean\" || isSelector(grouping.byLabel)\n ? createECSqlValueSelector(grouping.byLabel)\n : serializeJsonObject(createLabelGroupingBaseParamsSelectors(grouping.byLabel)),\n });\n\n grouping.byClass &&\n groupingSelectors.push({\n key: \"byClass\",\n selector:\n typeof grouping.byClass === \"boolean\" || isSelector(grouping.byClass)\n ? createECSqlValueSelector(grouping.byClass)\n : serializeJsonObject(createBaseGroupingParamSelectors(grouping.byClass)),\n });\n\n grouping.byBaseClasses &&\n groupingSelectors.push({\n key: \"byBaseClasses\",\n selector: serializeJsonObject([\n {\n key: \"fullClassNames\",\n selector: `json_array(${grouping.byBaseClasses.fullClassNames.map((className) => createECSqlValueSelector(className)).join(\", \")})`,\n },\n ...createBaseGroupingParamSelectors(grouping.byBaseClasses),\n ]),\n });\n\n if (grouping.byProperties) {\n const propertyClass = await getClass(imodelAccess, grouping.byProperties.propertiesClassName);\n groupingSelectors.push({\n key: \"byProperties\",\n selector: serializeJsonObject([\n {\n key: \"propertiesClassName\",\n selector: `${createECSqlValueSelector(grouping.byProperties.propertiesClassName)}`,\n },\n {\n key: \"propertyGroups\",\n selector: `json_array(${(\n await Promise.all(\n grouping.byProperties.propertyGroups.map(async (propertyGroup) =>\n serializeJsonObject(await createPropertyGroupSelectors(propertyGroup, propertyClass, instanceLabelSelectClauseFactory)),\n ),\n )\n ).join(\", \")})`,\n },\n ...(grouping.byProperties.createGroupForOutOfRangeValues !== undefined\n ? [\n {\n key: \"createGroupForOutOfRangeValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForOutOfRangeValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...(grouping.byProperties.createGroupForUnspecifiedValues !== undefined\n ? [\n {\n key: \"createGroupForUnspecifiedValues\",\n selector: `CAST(${createECSqlValueSelector(grouping.byProperties.createGroupForUnspecifiedValues)} AS BOOLEAN)`,\n },\n ]\n : []),\n ...createBaseGroupingParamSelectors(grouping.byProperties),\n ]),\n });\n }\n\n return serializeJsonObject(groupingSelectors);\n}\n\nfunction createLabelGroupingBaseParamsSelectors(byLabel: ECSqlSelectClauseLabelGroupingMergeParams | ECSqlSelectClauseLabelGroupingGroupParams) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (byLabel.action !== undefined) {\n selectors.push({\n key: \"action\",\n selector: `${createECSqlValueSelector(byLabel.action)}`,\n });\n }\n if (byLabel.groupId !== undefined) {\n selectors.push({\n key: \"groupId\",\n selector: createECSqlValueSelector(byLabel.groupId),\n });\n }\n if (byLabel.action !== \"merge\") {\n selectors.push(...createBaseGroupingParamSelectors(byLabel));\n }\n\n return selectors;\n}\n\nasync function createPropertyGroupSelectors(\n propertyGroup: ECSqlSelectClausePropertyGroup,\n propertyClass: EC.Class,\n instanceLabelSelectClauseFactory: IInstanceLabelSelectClauseFactory,\n) {\n const selectors = new Array<{ key: string; selector: string }>();\n selectors.push({\n key: \"propertyName\",\n selector: `${createECSqlValueSelector(propertyGroup.propertyName)}`,\n });\n\n const property = await propertyClass.getProperty(propertyGroup.propertyName);\n if (!property) {\n throw new Error(`Property \"${propertyGroup.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n\n if (property.isNavigation()) {\n const relationshipClass = await property.relationshipClass;\n const abstractConstraint =\n property.direction === \"Forward\" ? await relationshipClass.target.abstractConstraint : await relationshipClass.source.abstractConstraint;\n if (!abstractConstraint) {\n throw new Error(`Could not determine class name for navigation property with direction \"${property.direction}\".`);\n }\n\n const fullName = abstractConstraint.fullName;\n const targetAlias = \"target\";\n selectors.push({\n key: \"propertyValue\",\n selector: `(\n SELECT ${await instanceLabelSelectClauseFactory.createSelectClause({ className: fullName, classAlias: targetAlias })}\n FROM ${fullName} AS ${targetAlias}\n WHERE [${targetAlias}].[ECInstanceId] = [${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}].[Id]\n )`,\n });\n } else {\n selectors.push({\n key: \"propertyValue\",\n selector: `[${propertyGroup.propertyClassAlias}].[${propertyGroup.propertyName}]`,\n });\n }\n\n if (propertyGroup.ranges) {\n selectors.push(createRangeParamSelectors(propertyGroup.ranges));\n }\n\n return selectors;\n}\n\nfunction createRangeParamSelectors(ranges: ECSqlSelectClausePropertyValueRange[]) {\n return {\n key: \"ranges\",\n selector: `json_array(${ranges\n .map((range) =>\n serializeJsonObject([\n {\n key: \"fromValue\",\n selector: createECSqlValueSelector(range.fromValue),\n },\n {\n key: \"toValue\",\n selector: createECSqlValueSelector(range.toValue),\n },\n ...(range.rangeLabel\n ? [\n {\n key: \"rangeLabel\",\n selector: `${createECSqlValueSelector(range.rangeLabel)}`,\n },\n ]\n : []),\n ]),\n )\n .join(\", \")})`,\n };\n}\n\nfunction createBaseGroupingParamSelectors(params: ECSqlSelectClauseGroupingParamsBase) {\n const selectors = new Array<{ key: string; selector: string }>();\n if (params.hideIfNoSiblings !== undefined) {\n selectors.push({\n key: \"hideIfNoSiblings\",\n selector: createECSqlValueSelector(params.hideIfNoSiblings),\n });\n }\n if (params.hideIfOneGroupedNode !== undefined) {\n selectors.push({\n key: \"hideIfOneGroupedNode\",\n selector: createECSqlValueSelector(params.hideIfOneGroupedNode),\n });\n }\n if (params.autoExpand !== undefined) {\n selectors.push({\n key: \"autoExpand\",\n selector: createECSqlValueSelector(params.autoExpand),\n });\n }\n return selectors;\n}\n\nfunction serializeJsonObject(selectors: Array<{ key: string; selector: string }>): string {\n return `json_object(${selectors.map(({ key, selector }) => `'${key}', ${selector}`).join(\", \")})`;\n}\n\nasync function createWhereClause(\n contentClassAlias: string,\n classLoader: (alias: string) => Promise<EC.Class | undefined>,\n rule: GenericInstanceFilterRule | GenericInstanceFilterRuleGroup,\n): Promise<string | undefined> {\n if (GenericInstanceFilter.isFilterRuleGroup(rule)) {\n const clause = (await Promise.all(rule.rules.map(async (r) => createWhereClause(contentClassAlias, classLoader, r))))\n .filter((c) => !!c)\n .join(` ${getECSqlLogicalOperator(rule.operator)} `);\n return clause ? (rule.operator === \"or\" ? `(${clause})` : clause) : undefined;\n }\n const sourceAlias = rule.sourceAlias ? rule.sourceAlias : contentClassAlias;\n const propertyValueSelector = ECSql.createRawPropertyValueSelector(sourceAlias, rule.propertyName);\n if (isUnaryRuleOperator(rule.operator)) {\n switch (rule.operator) {\n case \"is-true\":\n return propertyValueSelector;\n case \"is-false\":\n return `NOT ${propertyValueSelector}`;\n case \"is-null\":\n return `${propertyValueSelector} IS NULL`;\n case \"is-not-null\":\n return `${propertyValueSelector} IS NOT NULL`;\n }\n }\n const ecsqlOperator = getECSqlComparisonOperator(rule.operator);\n if (rule.value === undefined) {\n throw new Error(`Rule \"${rule.propertyName}\" ${ecsqlOperator} is missing value.`);\n }\n\n const value = rule.value.rawValue;\n\n if (rule.operator === \"like\" && typeof value === \"string\") {\n const escapedValue = value.replace(/[%_\\\\]/g, \"\\\\$&\");\n return `${propertyValueSelector} ${ecsqlOperator} '%${escapedValue}%' ESCAPE '\\\\'`;\n }\n const propertyClass = await classLoader(sourceAlias);\n if (!propertyClass) {\n throw new Error(`Class with alias \"${sourceAlias}\" not found.`);\n }\n const property = await propertyClass.getProperty(rule.propertyName);\n if (!property) {\n throw new Error(`Property \"${rule.propertyName}\" not found in ECClass \"${propertyClass.fullName}\".`);\n }\n if (property.isNavigation()) {\n assert(rule.value !== undefined && GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector}.[Id] ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value.id)}`;\n }\n if (property.isEnumeration()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n if (property.isPrimitive()) {\n assert(rule.value !== undefined && !GenericInstanceFilterRuleValue.isInstanceKey(value));\n switch (property.primitiveType) {\n case \"Point2d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint2d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Point3d\": {\n assert(rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\");\n assert(PrimitiveValue.isPoint3d(value));\n const condition = `\n ${createFloatingPointEqualityClause(`${propertyValueSelector}.[x]`, \"is-equal\", value.x)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[y]`, \"is-equal\", value.y)}\n AND ${createFloatingPointEqualityClause(`${propertyValueSelector}.[z]`, \"is-equal\", value.z)}\n `;\n return rule.operator === \"is-equal\" ? condition : `NOT (${condition})`;\n }\n case \"Double\": {\n assert(typeof value === \"number\");\n if (rule.operator === \"is-equal\" || rule.operator === \"is-not-equal\") {\n return `${createFloatingPointEqualityClause(propertyValueSelector, rule.operator, value)}`;\n }\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n default: {\n return `${propertyValueSelector} ${ecsqlOperator} ${ECSql.createRawPrimitiveValueSelector(value)}`;\n }\n }\n }\n throw new Error(\"Struct and array properties are not supported for filtering\");\n}\n\nfunction createFloatingPointEqualityClause(valueSelector: string, operator: \"is-equal\" | \"is-not-equal\", value: number) {\n const [from, to] = getFloatingPointValueRange(value);\n return `${valueSelector} ${operator === \"is-not-equal\" ? \"NOT \" : \"\"} BETWEEN ${from} AND ${to}`;\n}\n\nfunction getFloatingPointValueRange(value: number): [number, number] {\n return [value - Number.EPSILON, value + Number.EPSILON];\n}\n\nfunction getECSqlLogicalOperator(op: GenericInstanceFilterRuleGroupOperator) {\n switch (op) {\n case \"and\":\n return \"AND\";\n case \"or\":\n return \"OR\";\n }\n}\n\nfunction isUnaryRuleOperator(\n op: GenericInstanceFilterRuleOperator,\n): op is Extract<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\"> {\n return op === \"is-true\" || op === \"is-false\" || op === \"is-null\" || op === \"is-not-null\";\n}\n\nfunction getECSqlComparisonOperator(op: Exclude<GenericInstanceFilterRuleOperator, \"is-true\" | \"is-false\" | \"is-null\" | \"is-not-null\">) {\n switch (op) {\n case \"is-equal\":\n return `=`;\n case \"is-not-equal\":\n return `<>`;\n case \"greater\":\n return `>`;\n case \"greater-or-equal\":\n return `>=`;\n case \"less\":\n return `<`;\n case \"less-or-equal\":\n return `<=`;\n case \"like\":\n return `LIKE`;\n }\n}\n\ntype JoinRelationshipPath = Props<typeof ECSql.createRelationshipPathJoinClause>[\"path\"];\nfunction assignRelationshipPathAliases(\n path: GenericInstanceFilterRelationshipStep[],\n pathIndex: number,\n sourceAlias: string,\n targetAlias: string,\n): JoinRelationshipPath {\n function createAlias(fullClassName: string, index: number) {\n return `rel_${pathIndex}_${fullClassName.replaceAll(/[\\.:]/g, \"_\")}_${index}`;\n }\n const result: JoinRelationshipPath = [];\n path.forEach((step, i) => {\n result.push({\n targetClassName: step.targetClassName,\n relationshipName: step.relationshipClassName,\n sourceClassName: step.sourceClassName,\n relationshipReverse: !step.isForwardRelationship,\n sourceAlias: i === 0 ? sourceAlias : result[i - 1].targetAlias,\n relationshipAlias: createAlias(step.relationshipClassName, i),\n targetAlias: i === path.length - 1 ? targetAlias : createAlias(step.targetClassName, i),\n joinType: \"inner\",\n });\n });\n return result;\n}\n\ninterface SpecializeContentClassProps {\n classHierarchyInspector: ECClassHierarchyInspector;\n contentClassName: string;\n filterClassNames: string[];\n}\nasync function specializeContentClass(props: SpecializeContentClassProps): Promise<string | undefined> {\n const filterClass = await getSpecializedPropertyClass(props.classHierarchyInspector, props.filterClassNames);\n if (!filterClass) {\n return props.contentClassName;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(filterClass, props.contentClassName)) {\n return filterClass;\n }\n if (await props.classHierarchyInspector.classDerivesFrom(props.contentClassName, filterClass)) {\n return props.contentClassName;\n }\n return undefined;\n}\n\nasync function getSpecializedPropertyClass(classHierarchyInspector: ECClassHierarchyInspector, classes: string[]): Promise<string | undefined> {\n if (classes.length === 0) {\n return undefined;\n }\n const [currClassName, ...restClasses] = classes;\n let resolvedClassName = currClassName;\n for (const propClassName of restClasses) {\n if (await classHierarchyInspector.classDerivesFrom(propClassName, resolvedClassName)) {\n resolvedClassName = propClassName;\n }\n }\n return resolvedClassName;\n}\n\ninterface HiddenClassNode {\n fullName: string;\n state: \"hide\" | \"show\";\n children: HiddenClassNode[];\n}\n\nasync function getHiddenClassesTree(selectClass: EC.Class, selectClassAttribute: \"show\" | \"hide\" = \"show\"): Promise<HiddenClassNode[]> {\n const derivedClasses = await getDirectDerivedClasses(selectClass);\n\n const derivedClassSchemas = derivedClasses.reduce(\n (acc, ecClass) => {\n if (!acc.set.has(ecClass.schema.name)) {\n acc.schemas.push(ecClass.schema);\n acc.set.add(ecClass.schema.name);\n }\n return acc;\n },\n { set: new Set<string>(), schemas: new Array<EC.Schema>() },\n ).schemas;\n const hiddenSchemas = new Map<string, \"hide\" | \"show\" | undefined>();\n await Promise.all(\n derivedClassSchemas.map(async (ecSchema) => {\n hiddenSchemas.set(ecSchema.name, await getHiddenSchemaAttribute(ecSchema));\n }),\n );\n\n const tree = (\n await Promise.all(\n derivedClasses.map(async (ecClass): Promise<HiddenClassNode[]> => {\n const hiddenClassAttr = await getHiddenClassAttribute(ecClass);\n const attr = hiddenClassAttr ?? hiddenSchemas.get(ecClass.schema.name);\n if (!attr || attr === selectClassAttribute) {\n return getHiddenClassesTree(ecClass, selectClassAttribute);\n }\n return [\n {\n fullName: ecClass.fullName,\n state: attr,\n children: await getHiddenClassesTree(ecClass, attr),\n },\n ];\n }),\n )\n ).flat();\n return tree;\n}\n\nasync function getDirectDerivedClasses(ecClass: EC.Class): Promise<EC.Class[]> {\n const allDerived = await ecClass.getDerivedClasses();\n return (await Promise.all(allDerived.map(async (c) => ({ derived: c, base: await c.baseClass }))))\n .filter(({ base }) => base?.fullName === ecClass.fullName)\n .map(({ derived }) => derived);\n}\n\nasync function getHiddenClassAttribute(ecClass: EC.Class): Promise<\"hide\" | \"show\" | undefined> {\n const customAttributes = await ecClass.getCustomAttributes();\n const hiddenClassAttribute = customAttributes.get(\"CoreCustomAttributes.HiddenClass\");\n return hiddenClassAttribute ? (hiddenClassAttribute.Show ? \"show\" : \"hide\") : undefined;\n}\n\nasync function getHiddenSchemaAttribute(ecSchema: EC.Schema): Promise<\"hide\" | \"show\" | undefined> {\n const customAttributes = await ecSchema.getCustomAttributes();\n const hiddenSchemaAttribute = customAttributes.get(\"CoreCustomAttributes.HiddenSchema\");\n return hiddenSchemaAttribute ? (hiddenSchemaAttribute.ShowClasses ? \"show\" : \"hide\") : undefined;\n}\n\nfunction createWhereClauseForHiddenClasses(hiddenClasses: HiddenClassNode[], selectAlias: string): { showClause?: string; hideClause?: string } {\n const res: { showClause?: string; hideClause?: string } = {};\n\n const show = hiddenClasses.filter(({ state }) => state === \"show\");\n if (show.length > 0) {\n let showClause = `[${selectAlias}].[ECClassId] IS (${show\n .map(({ fullName }) => parseFullClassName(fullName))\n .map(({ schemaName, className }) => `[${schemaName}].[${className}]`)\n .join(\", \")})`;\n const childClauses = createWhereClauseForHiddenClasses(\n show.flatMap(({ children }) => children),\n selectAlias,\n );\n if (childClauses.hideClause) {\n showClause = `(${showClause} AND ${childClauses.hideClause})`;\n }\n res.showClause = showClause;\n }\n\n const hide = hiddenClasses.filter(({ state }) => state === \"hide\");\n if (hide.length > 0) {\n let hideClause = `[${selectAlias}].[ECClassId] IS NOT (${hide\n .map(({ fullName }) => parseFullClassName(fullName))\n .map(({ schemaName, className }) => `[${schemaName}].[${className}]`)\n .join(\", \")})`;\n const childClauses = createWhereClauseForHiddenClasses(\n hide.flatMap(({ children }) => children),\n selectAlias,\n );\n if (childClauses.showClause) {\n hideClause = `(${hideClause} OR ${childClauses.showClause})`;\n }\n res.hideClause = hideClause;\n }\n\n return res;\n}\n"]}
@@ -1,140 +0,0 @@
1
- import { Id64String } from "@itwin/core-bentley";
2
- import { ECClassHierarchyInspector } from "@itwin/presentation-shared";
3
- import { GenericNodeKey, InstancesNodeKey } from "../HierarchyNodeKey.js";
4
- import { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyDefinitionParentNode, HierarchyLevelDefinition } from "./IModelHierarchyDefinition.js";
5
- /**
6
- * Props for defining child hierarchy level for specific parent instance node.
7
- * @see `createPredicateBasedHierarchyDefinition`
8
- * @public
9
- */
10
- export type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode"> & {
11
- /** The parent instance node. */
12
- parentNode: Omit<HierarchyDefinitionParentNode, "key"> & {
13
- key: InstancesNodeKey;
14
- };
15
- /**
16
- * Full name of the parent instance node class.
17
- *
18
- * The `parentNode.key` also contains information about the instances the parent node is based on. However,
19
- * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance
20
- * keys are grouped by class and a hierarchy level definition is requested for each combination of class and
21
- * instance IDs (with the same `parentNode`).
22
- */
23
- parentNodeClassName: string;
24
- /**
25
- * ECInstanceIds of the parent instance node.
26
- *
27
- * The `parentNode.key` also contains information about the instances the parent node is based on. However,
28
- * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance
29
- * keys are grouped by class and a hierarchy level definition is requested for each combination of class and
30
- * instance IDs (with the same `parentNode`).
31
- */
32
- parentNodeInstanceIds: Id64String[];
33
- };
34
- /**
35
- * A definition of a hierarchy level that should be used for specific parent instance nodes.
36
- * @see `createPredicateBasedHierarchyDefinition`
37
- * @public
38
- */
39
- interface InstancesNodeChildHierarchyLevelDefinition {
40
- /**
41
- * A predicate for matching the parent instances node. This can be either a string or a predicate function:
42
- *
43
- * - The string version should specify full name of the parent instance node's class to match against when
44
- * checking if this hierarchy level should be used for specific parent instance node. The check is polymorphic,
45
- * so `BisCore.Element` class would match `BisCore.GeometricElement`, `BisCore.Category` and all other element classes.
46
- *
47
- * - The function version should return a boolean indicating whether this hierarchy level definition should be used
48
- * for the given parent node.
49
- */
50
- parentInstancesNodePredicate: string | ((parentNodeKey: InstancesNodeKey) => Promise<boolean>);
51
- /**
52
- * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.
53
- */
54
- definitions: (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;
55
- /**
56
- * If set to true, and node matches at least one of the previous definitions, this definition will not be applied.
57
- *
58
- * For example:
59
- * ```ts
60
- * {
61
- * parentInstancesNodePredicate: "BisCore.GeometricElement3d",
62
- * definitions: () => ...,
63
- * },
64
- * // This will apply to all elements, that are not `BisCore.GeometricElement3d`
65
- * {
66
- * parentInstancesNodePredicate: "BisCore.Element",
67
- * onlyIfNotHandled: true,
68
- * definitions: () => ...,
69
- * }
70
- * ```
71
- */
72
- onlyIfNotHandled?: boolean;
73
- }
74
- /**
75
- * Props for defining child hierarchy level for specific generic parent node.
76
- * @see `createPredicateBasedHierarchyDefinition`
77
- * @public
78
- */
79
- export type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode"> & {
80
- /** The parent generic node. */
81
- parentNode: Omit<HierarchyDefinitionParentNode, "key"> & {
82
- key: GenericNodeKey;
83
- };
84
- };
85
- /**
86
- * A definition of a hierarchy level for that should be used for specific generic parent nodes.
87
- * @see `createPredicateBasedHierarchyDefinition`
88
- * @public
89
- */
90
- interface GenericNodeChildHierarchyLevelDefinition {
91
- /**
92
- * A function that indicates whether this hierarchy level definition should be used for
93
- * specific parent generic node.
94
- */
95
- parentGenericNodePredicate: (parentNodeKey: GenericNodeKey) => Promise<boolean>;
96
- /**
97
- * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.
98
- */
99
- definitions: (requestProps: DefineGenericNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;
100
- }
101
- /**
102
- * A hierarchy level definition associated with specific parent instance or generic node. *
103
- * @see `createPredicateBasedHierarchyDefinition`
104
- * @public
105
- */
106
- type PredicateBasedHierarchyLevelDefinition = InstancesNodeChildHierarchyLevelDefinition | GenericNodeChildHierarchyLevelDefinition;
107
- /**
108
- * Props for defining root hierarchy level.
109
- * @see `createPredicateBasedHierarchyDefinition`
110
- * @public
111
- */
112
- export type DefineRootHierarchyLevelProps = Omit<DefineHierarchyLevelProps, "parentNode">;
113
- /**
114
- * Props for `createPredicateBasedHierarchyDefinition`.
115
- * @public
116
- */
117
- interface PredicateBasedHierarchyDefinitionProps extends Pick<HierarchyDefinition, "parseNode" | "preProcessNode" | "postProcessNode"> {
118
- /** Access to ECClass hierarchy in the iModel */
119
- classHierarchyInspector: ECClassHierarchyInspector;
120
- /** Hierarchy level definitions */
121
- hierarchy: {
122
- /** Called to create the root hierarchy level definition. */
123
- rootNodes: (props: DefineRootHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;
124
- /**
125
- * A list of child hierarchy level definitions. The list is first filtered based on
126
- * the parent node and then is used to create child hierarchy level definitions.
127
- */
128
- childNodes: PredicateBasedHierarchyLevelDefinition[];
129
- };
130
- }
131
- /**
132
- * Creates an instance of `HierarchyDefinition` that uses a somewhat declarative approach to define the
133
- * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy
134
- * level definitions, that are used when the predicate passes.
135
- *
136
- * @public
137
- */
138
- export declare function createPredicateBasedHierarchyDefinition(props: PredicateBasedHierarchyDefinitionProps): HierarchyDefinition;
139
- export {};
140
- //# sourceMappingURL=PredicateBasedHierarchyDefinition.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PredicateBasedHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,yBAAyB,EAAe,MAAM,4BAA4B,CAAC;AAEpF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,6BAA6B,EAC7B,wBAAwB,EAIzB,MAAM,gCAAgC,CAAC;AAExC;;;;GAIG;AACH,MAAM,MAAM,0CAA0C,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACvG,gCAAgC;IAChC,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAEnF;;;;;;;OAOG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;;;;;;OAOG;IACH,qBAAqB,EAAE,UAAU,EAAE,CAAC;CACrC,CAAC;AAEF;;;;GAIG;AACH,UAAU,0CAA0C;IAClD;;;;;;;;;OASG;IACH,4BAA4B,EAAE,MAAM,GAAG,CAAC,CAAC,aAAa,EAAE,gBAAgB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,0CAA0C,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAE7G;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,MAAM,MAAM,yCAAyC,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,GAAG;IACtG,+BAA+B;IAC/B,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC,GAAG;QAAE,GAAG,EAAE,cAAc,CAAA;KAAE,CAAC;CAClF,CAAC;AAEF;;;;GAIG;AACH,UAAU,wCAAwC;IAChD;;;OAGG;IACH,0BAA0B,EAAE,CAAC,aAAa,EAAE,cAAc,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhF;;OAEG;IACH,WAAW,EAAE,CAAC,YAAY,EAAE,yCAAyC,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC7G;AAED;;;;GAIG;AACH,KAAK,sCAAsC,GAAG,0CAA0C,GAAG,wCAAwC,CAAC;AAEpI;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;AAE1F;;;GAGG;AACH,UAAU,sCAAuC,SAAQ,IAAI,CAAC,mBAAmB,EAAE,WAAW,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IACpI,gDAAgD;IAChD,uBAAuB,EAAE,yBAAyB,CAAC;IAEnD,kCAAkC;IAClC,SAAS,EAAE;QACT,4DAA4D;QAC5D,SAAS,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAEvF;;;WAGG;QACH,UAAU,EAAE,sCAAsC,EAAE,CAAC;KACtD,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,sCAAsC,GAAG,mBAAmB,CAE1H"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PredicateBasedHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/PredicateBasedHierarchyDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concatMap, filter, firstValueFrom, from, mergeAll, mergeMap, toArray } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { HierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport {\n DefineHierarchyLevelProps,\n HierarchyDefinition,\n HierarchyDefinitionParentNode,\n HierarchyLevelDefinition,\n NodeParser,\n NodePostProcessor,\n NodePreProcessor,\n} from \"./IModelHierarchyDefinition.js\";\n\n/**\n * Props for defining child hierarchy level for specific parent instance node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineInstanceNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent instance node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: InstancesNodeKey };\n\n /**\n * Full name of the parent instance node class.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeClassName: string;\n\n /**\n * ECInstanceIds of the parent instance node.\n *\n * The `parentNode.key` also contains information about the instances the parent node is based on. However,\n * an instance node may be based on instances of multiple classes. In case that happens, parent node's instance\n * keys are grouped by class and a hierarchy level definition is requested for each combination of class and\n * instance IDs (with the same `parentNode`).\n */\n parentNodeInstanceIds: Id64String[];\n};\n\n/**\n * A definition of a hierarchy level that should be used for specific parent instance nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ninterface InstancesNodeChildHierarchyLevelDefinition {\n /**\n * A predicate for matching the parent instances node. This can be either a string or a predicate function:\n *\n * - The string version should specify full name of the parent instance node's class to match against when\n * checking if this hierarchy level should be used for specific parent instance node. The check is polymorphic,\n * so `BisCore.Element` class would match `BisCore.GeometricElement`, `BisCore.Category` and all other element classes.\n *\n * - The function version should return a boolean indicating whether this hierarchy level definition should be used\n * for the given parent node.\n */\n parentInstancesNodePredicate: string | ((parentNodeKey: InstancesNodeKey) => Promise<boolean>);\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineInstanceNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * If set to true, and node matches at least one of the previous definitions, this definition will not be applied.\n *\n * For example:\n * ```ts\n * {\n * parentInstancesNodePredicate: \"BisCore.GeometricElement3d\",\n * definitions: () => ...,\n * },\n * // This will apply to all elements, that are not `BisCore.GeometricElement3d`\n * {\n * parentInstancesNodePredicate: \"BisCore.Element\",\n * onlyIfNotHandled: true,\n * definitions: () => ...,\n * }\n * ```\n */\n onlyIfNotHandled?: boolean;\n}\n\n/**\n * Props for defining child hierarchy level for specific generic parent node.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineGenericNodeChildHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\"> & {\n /** The parent generic node. */\n parentNode: Omit<HierarchyDefinitionParentNode, \"key\"> & { key: GenericNodeKey };\n};\n\n/**\n * A definition of a hierarchy level for that should be used for specific generic parent nodes.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ninterface GenericNodeChildHierarchyLevelDefinition {\n /**\n * A function that indicates whether this hierarchy level definition should be used for\n * specific parent generic node.\n */\n parentGenericNodePredicate: (parentNodeKey: GenericNodeKey) => Promise<boolean>;\n\n /**\n * Called to create a hierarchy level definition when the `parentInstancesNodePredicate` predicate passes.\n */\n definitions: (requestProps: DefineGenericNodeChildHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n}\n\n/**\n * A hierarchy level definition associated with specific parent instance or generic node. *\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\ntype PredicateBasedHierarchyLevelDefinition = InstancesNodeChildHierarchyLevelDefinition | GenericNodeChildHierarchyLevelDefinition;\n\n/**\n * Props for defining root hierarchy level.\n * @see `createPredicateBasedHierarchyDefinition`\n * @public\n */\nexport type DefineRootHierarchyLevelProps = Omit<DefineHierarchyLevelProps, \"parentNode\">;\n\n/**\n * Props for `createPredicateBasedHierarchyDefinition`.\n * @public\n */\ninterface PredicateBasedHierarchyDefinitionProps extends Pick<HierarchyDefinition, \"parseNode\" | \"preProcessNode\" | \"postProcessNode\"> {\n /** Access to ECClass hierarchy in the iModel */\n classHierarchyInspector: ECClassHierarchyInspector;\n\n /** Hierarchy level definitions */\n hierarchy: {\n /** Called to create the root hierarchy level definition. */\n rootNodes: (props: DefineRootHierarchyLevelProps) => Promise<HierarchyLevelDefinition>;\n\n /**\n * A list of child hierarchy level definitions. The list is first filtered based on\n * the parent node and then is used to create child hierarchy level definitions.\n */\n childNodes: PredicateBasedHierarchyLevelDefinition[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyDefinition` that uses a somewhat declarative approach to define the\n * hierarchy - each hierarchy level is defined by specifying a parent node predicate and child hierarchy\n * level definitions, that are used when the predicate passes.\n *\n * @public\n */\nexport function createPredicateBasedHierarchyDefinition(props: PredicateBasedHierarchyDefinitionProps): HierarchyDefinition {\n return new PredicateBasedHierarchyDefinition(props);\n}\n\nclass PredicateBasedHierarchyDefinition implements HierarchyDefinition {\n public parseNode: NodeParser | undefined;\n public preProcessNode: NodePreProcessor | undefined;\n public postProcessNode: NodePostProcessor | undefined;\n\n public constructor(private _props: PredicateBasedHierarchyDefinitionProps) {\n if (this._props.parseNode) {\n this.parseNode = this._props.parseNode;\n }\n if (this._props.preProcessNode) {\n this.preProcessNode = this._props.preProcessNode;\n }\n if (this._props.postProcessNode) {\n this.postProcessNode = this._props.postProcessNode;\n }\n }\n\n /**\n * Create hierarchy level definitions for specific hierarchy level.\n * @param parentNode Parent node to create children definitions for.\n */\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const { parentNode } = props;\n\n if (parentNode && HierarchyNode.isGeneric(parentNode)) {\n return firstValueFrom(\n from(this._props.hierarchy.childNodes).pipe(\n filter(isGenericNodeChildHierarchyLevelDefinition),\n mergeMap(async (def) => {\n if (await def.parentGenericNodePredicate(parentNode.key)) {\n return def.definitions({ ...props, parentNode });\n }\n return [];\n }),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {\n const instancesParentNodeDefs = this._props.hierarchy.childNodes.filter(isInstancesNodeChildHierarchyLevelDefinition);\n return firstValueFrom(\n from(groupInstanceIdsByClass(parentNode.key.instanceKeys).entries()).pipe(\n mergeMap(async ([parentNodeClassName, parentNodeInstanceIds]) =>\n createHierarchyLevelDefinitions(this._props.classHierarchyInspector, instancesParentNodeDefs, {\n ...props,\n parentNodeClassName,\n parentNodeInstanceIds,\n parentNode,\n }),\n ),\n mergeAll(),\n toArray(),\n ),\n );\n }\n\n return this._props.hierarchy.rootNodes(props);\n }\n}\n\nasync function createHierarchyLevelDefinitions(\n classHierarchy: ECClassHierarchyInspector,\n defs: InstancesNodeChildHierarchyLevelDefinition[],\n requestProps: DefineInstanceNodeChildHierarchyLevelProps,\n) {\n return from(defs).pipe(\n mergeMap(async (def, idx) => {\n if (\n typeof def.parentInstancesNodePredicate === \"string\" &&\n (await classHierarchy.classDerivesFrom(requestProps.parentNodeClassName, def.parentInstancesNodePredicate))\n ) {\n return { def, idx };\n }\n if (typeof def.parentInstancesNodePredicate === \"function\" && (await def.parentInstancesNodePredicate(requestProps.parentNode.key))) {\n return { def, idx };\n }\n return undefined;\n }),\n filter((x): x is Exclude<typeof x, undefined> => !!x),\n toArray(),\n concatMap((x) => x.sort((a, b) => a.idx - b.idx).map(({ def }) => def)),\n filter((def, idx) => !def.onlyIfNotHandled || idx === 0),\n mergeMap(async (def) => def.definitions(requestProps)),\n mergeAll(),\n );\n}\n\nfunction groupInstanceIdsByClass(instanceKeys: InstanceKey[]) {\n const instanceIdsByClass = new Map<string, Id64String[]>();\n instanceKeys.forEach((key) => {\n let instanceIds = instanceIdsByClass.get(key.className);\n if (!instanceIds) {\n instanceIds = [];\n instanceIdsByClass.set(key.className, instanceIds);\n }\n instanceIds.push(key.id);\n });\n return instanceIdsByClass;\n}\n\nfunction isGenericNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is GenericNodeChildHierarchyLevelDefinition {\n return !!(def as GenericNodeChildHierarchyLevelDefinition).parentGenericNodePredicate;\n}\n\nfunction isInstancesNodeChildHierarchyLevelDefinition(def: PredicateBasedHierarchyLevelDefinition): def is InstancesNodeChildHierarchyLevelDefinition {\n return !!(def as InstancesNodeChildHierarchyLevelDefinition).parentInstancesNodePredicate;\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodesReader.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAsB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAyC,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAE1E,UAAU,cAAc;IACtB,aAAa,EAAE,0BAA0B,CAAC;IAC1C,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,gBAAgB;AAChB,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,UAAU,CAAC,2BAA2B,CAAC,CASxF;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,CAAC,2BAA2B,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC;IACvD,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACnD,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC;IACpD,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC;IACzD,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,CAAC;IAC5D,CAAC,2BAA2B,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAChD,CAAC,2BAA2B,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACpD,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC;IACnD,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,CAAC;CAC3D;AAED,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,GAAG,2BAA2B,CAoBlG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TreeNodesReader.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/TreeNodesReader.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AAEtD,OAAO,EAAiB,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAI/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAS1E,gBAAgB;AAChB,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC9C,MAAM,MAAM,GAAmB,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvF,MAAM,MAAM,GAAmE;QAC7E,SAAS,EAAE,oBAAoB;QAC/B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjD,CAAC;IAEF,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC;AAmBD,gBAAgB;AAChB,MAAM,UAAU,kBAAkB,CAAC,GAAkC;IACnE,MAAM,QAAQ,GAAG,GAAa,CAAC;IAC/B,MAAM,gBAAgB,GAA0C;QAC9D,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,GAAG,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;IACF,OAAO;QACL,+HAA+H;QAC/H,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,YAAY,CAAC;QAChD,GAAG,EAAE;YACH,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC;SACnG;QACD,GAAG,CAAC,QAAQ,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,GAAG,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACjF,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { from, mergeMap, Observable, of } from \"rxjs\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECSqlQueryDef, parseInstanceLabel } from \"@itwin/presentation-shared\";\nimport { RxjsNodeParser } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { InstanceHierarchyNodeProcessingParams, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport { NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory.js\";\n\ninterface ReadNodesProps {\n queryExecutor: LimitingECSqlQueryExecutor;\n query: ECSqlQueryDef;\n limit?: number | \"unbounded\";\n parser?: RxjsNodeParser;\n}\n\n/** @internal */\nexport function readNodes(props: ReadNodesProps): Observable<SourceInstanceHierarchyNode> {\n const { queryExecutor, query, limit } = props;\n const parser: RxjsNodeParser = props?.parser ?? ((row) => of(defaultNodesParser(row)));\n const config: Parameters<LimitingECSqlQueryExecutor[\"createQueryReader\"]>[1] = {\n rowFormat: \"ECSqlPropertyNames\",\n ...(limit !== undefined ? { limit } : undefined),\n };\n\n return from(queryExecutor.createQueryReader(query, config)).pipe(mergeMap((row) => parser(row)));\n}\n\n/**\n * The interface should contain a member for each `NodeSelectClauseColumnNames` value.\n * @internal\n */\nexport interface RowDef {\n [NodeSelectClauseColumnNames.FullClassName]: string;\n [NodeSelectClauseColumnNames.ECInstanceId]: Id64String;\n [NodeSelectClauseColumnNames.DisplayLabel]: string;\n [NodeSelectClauseColumnNames.HasChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideIfNoChildren]?: boolean;\n [NodeSelectClauseColumnNames.HideNodeInHierarchy]?: boolean;\n [NodeSelectClauseColumnNames.Grouping]?: string;\n [NodeSelectClauseColumnNames.ExtendedData]?: string;\n [NodeSelectClauseColumnNames.AutoExpand]?: boolean;\n [NodeSelectClauseColumnNames.SupportsFiltering]?: boolean;\n}\n\n/** @internal */\nexport function defaultNodesParser(row: { [columnName: string]: any }): SourceInstanceHierarchyNode {\n const typedRow = row as RowDef;\n const processingParams: InstanceHierarchyNodeProcessingParams = {\n ...(typedRow.HideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(typedRow.HideNodeInHierarchy ? { hideInHierarchy: true } : undefined),\n ...(typedRow.Grouping ? { grouping: JSON.parse(typedRow.Grouping) } : undefined),\n };\n return {\n // don't format the label here - we're going to do that at node pre-processing step to handle both - instance and generic nodes\n label: parseInstanceLabel(typedRow.DisplayLabel),\n key: {\n type: \"instances\",\n instanceKeys: [{ className: typedRow.FullClassName.replace(\":\", \".\"), id: typedRow.ECInstanceId }],\n },\n ...(typedRow.HasChildren !== undefined ? { children: !!typedRow.HasChildren } : undefined),\n ...(typedRow.AutoExpand ? { autoExpand: true } : undefined),\n ...(typedRow.SupportsFiltering ? { supportsFiltering: true } : undefined),\n ...(typedRow.ExtendedData ? { extendedData: JSON.parse(typedRow.ExtendedData) } : undefined),\n ...(Object.keys(processingParams).length > 0 ? { processingParams } : undefined),\n };\n}\n"]}
@@ -1,4 +0,0 @@
1
- import { ProcessedInstanceHierarchyNode } from "./IModelHierarchyNode.js";
2
- /** @internal */
3
- export declare function mergeInstanceNodes(lhs: ProcessedInstanceHierarchyNode, rhs: ProcessedInstanceHierarchyNode): ProcessedInstanceHierarchyNode;
4
- //# sourceMappingURL=Utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAA2E,8BAA8B,EAAE,MAAM,0BAA0B,CAAC;AAwCnJ,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,8BAA8B,EAAE,GAAG,EAAE,8BAA8B,GAAG,8BAA8B,CAkB3I"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey.js\";\nimport { HierarchyNodeLabelGroupingParams, InstanceHierarchyNodeProcessingParams, ProcessedInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\n\nfunction mergeNodeHandlingParams(\n lhs: InstanceHierarchyNodeProcessingParams | undefined,\n rhs: InstanceHierarchyNodeProcessingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (!lhs && !rhs) {\n return undefined;\n }\n const params = {\n ...(lhs?.hideIfNoChildren || rhs?.hideIfNoChildren ? { hideIfNoChildren: true } : undefined),\n ...(lhs?.hideInHierarchy || rhs?.hideInHierarchy ? { hideInHierarchy: true } : undefined),\n ...mergeByLabelParams(lhs?.grouping?.byLabel, rhs?.grouping?.byLabel),\n };\n return Object.keys(params).length > 0 ? params : undefined;\n}\n\nfunction mergeByLabelParams(\n lhs: HierarchyNodeLabelGroupingParams | undefined,\n rhs: HierarchyNodeLabelGroupingParams | undefined,\n): InstanceHierarchyNodeProcessingParams | undefined {\n if (lhs && typeof lhs === \"object\" && lhs.action === \"merge\" && rhs && typeof rhs === \"object\" && rhs.action === \"merge\" && lhs.groupId === rhs.groupId) {\n return {\n grouping: { byLabel: lhs },\n };\n }\n return undefined;\n}\n\nfunction mergeParentNodeKeys(lhsKeys: HierarchyNodeKey[], rhsKeys: HierarchyNodeKey[]): HierarchyNodeKey[] {\n const res = new Array<HierarchyNodeKey>();\n for (let i = 0; i < lhsKeys.length && i < rhsKeys.length; ++i) {\n if (!HierarchyNodeKey.equals(lhsKeys[i], rhsKeys[i])) {\n break;\n }\n res.push(lhsKeys[i]);\n }\n return res;\n}\n\n/** @internal */\nexport function mergeInstanceNodes(lhs: ProcessedInstanceHierarchyNode, rhs: ProcessedInstanceHierarchyNode): ProcessedInstanceHierarchyNode {\n assert(typeof lhs.key === typeof rhs.key);\n const mergedProcessingParams = mergeNodeHandlingParams(lhs.processingParams, rhs.processingParams);\n const mergedChildren = lhs.children === true || rhs.children === true ? true : lhs.children === false && rhs.children === false ? false : undefined;\n const mergedNode: ProcessedInstanceHierarchyNode = {\n ...lhs,\n ...rhs,\n label: lhs.label,\n key: { type: \"instances\", instanceKeys: [...lhs.key.instanceKeys, ...rhs.key.instanceKeys] },\n parentKeys: mergeParentNodeKeys(lhs.parentKeys, rhs.parentKeys),\n };\n // Remove specific properties or change their values based on lhs and rhs nodes\n mergedChildren !== undefined ? (mergedNode.children = mergedChildren) : delete mergedNode.children;\n mergedProcessingParams ? (mergedNode.processingParams = mergedProcessingParams) : delete mergedNode.processingParams;\n lhs.autoExpand || rhs.autoExpand ? (mergedNode.autoExpand = true) : delete mergedNode.autoExpand;\n lhs.extendedData || rhs.extendedData ? (mergedNode.extendedData = { ...lhs.extendedData, ...rhs.extendedData }) : delete mergedNode.extendedData;\n lhs.supportsFiltering && rhs.supportsFiltering ? (mergedNode.supportsFiltering = true) : delete mergedNode.supportsFiltering;\n return mergedNode;\n}\n"]}
@@ -1,11 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { ProcessedHierarchyNode } from "../IModelHierarchyNode.js";
3
- /** @internal */
4
- export declare const LOGGING_NAMESPACE: string;
5
- /**
6
- * Ensures all input nodes have their children determined.
7
- *
8
- * @internal
9
- */
10
- export declare function createDetermineChildrenOperator(hasNodes: (node: ProcessedHierarchyNode) => Observable<boolean>): (nodes: Observable<ProcessedHierarchyNode>) => Observable<ProcessedHierarchyNode>;
11
- //# sourceMappingURL=DetermineChildren.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"DetermineChildren.d.ts","sourceRoot":"","sources":["../../../../../src/hierarchies/imodel/operators/DetermineChildren.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkB,UAAU,EAAM,MAAM,MAAM,CAAC;AAItD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,QAA4E,CAAC;AAE3G;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,sBAAsB,KAAK,UAAU,CAAC,OAAO,CAAC,WACrF,UAAU,CAAC,sBAAsB,CAAC,KAAG,UAAU,CAAC,sBAAsB,CAAC,CAmBhG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DetermineChildren.js","sourceRoot":"","sources":["../../../../../src/hierarchies/imodel/operators/DetermineChildren.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtI,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,6BAA6B,EAAE,MAAM,+CAA+C,CAAC;AAG9F,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,gBAAgB;AAChB,MAAM,CAAC,MAAM,iBAAiB,GAAG,8BAA8B,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;AAE3G;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAAC,QAA+D;IAC7G,OAAO,UAAU,KAAyC;QACxD,OAAO,KAAK,CAAC,IAAI,CACf,GAAG,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,8BAA8B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EACrH,6BAA6B,CAAC,GAAG,CAAC,EAClC,SAAS,CAAC,CAAC,CAAyB,EAAsC,EAAE;YAC1E,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CACrB,GAAG,CAAC;gBACF,QAAQ,EAAE,iBAAiB;gBAC3B,OAAO,EAAE,oBAAoB,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,0BAA0B,eAAe,EAAE;aACnI,CAAC,EACF,GAAG,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC,CAC1E,CAAC;QACJ,CAAC,CAAC,EACF,GAAG,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,8BAA8B,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACvH,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concatMap, map, Observable, of } from \"rxjs\";\nimport { createNodeIdentifierForLogging, createOperatorLoggingNamespace, LOGGING_NAMESPACE_INTERNAL } from \"../../internal/Common.js\";\nimport { log } from \"../../internal/LoggingUtils.js\";\nimport { releaseMainThreadOnItemsCount } from \"../../internal/operators/ReleaseMainThread.js\";\nimport { ProcessedHierarchyNode } from \"../IModelHierarchyNode.js\";\n\nconst OPERATOR_NAME = \"DetermineChildren\";\n/** @internal */\nexport const LOGGING_NAMESPACE = createOperatorLoggingNamespace(OPERATOR_NAME, LOGGING_NAMESPACE_INTERNAL);\n\n/**\n * Ensures all input nodes have their children determined.\n *\n * @internal\n */\nexport function createDetermineChildrenOperator(hasNodes: (node: ProcessedHierarchyNode) => Observable<boolean>) {\n return function (nodes: Observable<ProcessedHierarchyNode>): Observable<ProcessedHierarchyNode> {\n return nodes.pipe(\n log({ category: LOGGING_NAMESPACE, message: /* c8 ignore next */ (n) => `in: ${createNodeIdentifierForLogging(n)}` }),\n releaseMainThreadOnItemsCount(200),\n concatMap((n: ProcessedHierarchyNode): Observable<ProcessedHierarchyNode> => {\n if (n.children !== undefined) {\n return of(n);\n }\n return hasNodes(n).pipe(\n log({\n category: LOGGING_NAMESPACE,\n message: /* c8 ignore next */ (hasChildrenFlag) => `${createNodeIdentifierForLogging(n)}: determined children: ${hasChildrenFlag}`,\n }),\n map((hasChildrenFlag) => Object.assign(n, { children: hasChildrenFlag })),\n );\n }),\n log({ category: LOGGING_NAMESPACE, message: /* c8 ignore next */ (n) => `out: ${createNodeIdentifierForLogging(n)}` }),\n );\n };\n}\n"]}
@@ -1,26 +0,0 @@
1
- import { Observable } from "rxjs";
2
- import { ECClassHierarchyInspector, ECSchemaProvider, IPrimitiveValueFormatter } from "@itwin/presentation-shared";
3
- import { ParentHierarchyNode } from "../../HierarchyNode.js";
4
- import { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode, ProcessedInstanceHierarchyNode } from "../IModelHierarchyNode.js";
5
- import { PropertiesGroupingLocalizedStrings } from "./grouping/PropertiesGrouping.js";
6
- /** @internal */
7
- export declare const LOGGING_NAMESPACE: string;
8
- /** @internal */
9
- export declare function createGroupingOperator(imodelAccess: ECSchemaProvider & ECClassHierarchyInspector, parentNode: ParentHierarchyNode | undefined, valueFormatter: IPrimitiveValueFormatter, localizedStrings: PropertiesGroupingLocalizedStrings, onNodesGrouped?: (groupingResult: GroupingHandlerResult | undefined, handler: GroupingHandler) => void, onGroupingNodeCreated?: (groupingNode: ProcessedGroupingHierarchyNode) => void, groupingHandlers?: GroupingHandler[]): (nodes: Observable<ProcessedHierarchyNode>) => Observable<ProcessedHierarchyNode>;
10
- /** @internal */
11
- export type ProcessedInstancesGroupingHierarchyNode = Omit<ProcessedGroupingHierarchyNode, "children"> & {
12
- children: ProcessedInstanceHierarchyNode[];
13
- };
14
- /** @internal */
15
- export interface GroupingHandlerResult {
16
- /** Expected to be sorted by label. */
17
- grouped: Array<ProcessedInstancesGroupingHierarchyNode>;
18
- /** Expected to be sorted by label. */
19
- ungrouped: ProcessedInstanceHierarchyNode[];
20
- groupingType: GroupingType;
21
- }
22
- /** @internal */
23
- export type GroupingType = "label" | "class" | "base-class" | "property";
24
- /** @internal */
25
- export type GroupingHandler = (nodesToGroup: ProcessedInstanceHierarchyNode[], nodesAlreadyGrouped: ProcessedInstancesGroupingHierarchyNode[]) => Promise<GroupingHandlerResult>;
26
- //# sourceMappingURL=Grouping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Grouping.d.ts","sourceRoot":"","sources":["../../../../../src/hierarchies/imodel/operators/Grouping.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuF,UAAU,EAA4B,MAAM,MAAM,CAAC;AAEjJ,OAAO,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACnH,OAAO,EAAiB,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAW5E,OAAO,EAAE,8BAA8B,EAAE,sBAAsB,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAC;AAMnI,OAAO,EAAoC,kCAAkC,EAAE,MAAM,kCAAkC,CAAC;AAGxH,gBAAgB;AAChB,eAAO,MAAM,iBAAiB,QAA4E,CAAC;AAI3G,gBAAgB;AAChB,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,gBAAgB,GAAG,yBAAyB,EAC1D,UAAU,EAAE,mBAAmB,GAAG,SAAS,EAC3C,cAAc,EAAE,wBAAwB,EACxC,gBAAgB,EAAE,kCAAkC,EACpD,cAAc,CAAC,EAAE,CAAC,cAAc,EAAE,qBAAqB,GAAG,SAAS,EAAE,OAAO,EAAE,eAAe,KAAK,IAAI,EACtG,qBAAqB,CAAC,EAAE,CAAC,YAAY,EAAE,8BAA8B,KAAK,IAAI,EAC9E,gBAAgB,CAAC,EAAE,eAAe,EAAE,WAEZ,UAAU,CAAC,sBAAsB,CAAC,KAAG,UAAU,CAAC,sBAAsB,CAAC,CAyDhG;AAED,gBAAgB;AAChB,MAAM,MAAM,uCAAuC,GAAG,IAAI,CAAC,8BAA8B,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,EAAE,8BAA8B,EAAE,CAAA;CAAE,CAAC;AAExJ,gBAAgB;AAChB,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,OAAO,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACxD,sCAAsC;IACtC,SAAS,EAAE,8BAA8B,EAAE,CAAC;IAC5C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,gBAAgB;AAChB,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;AAEzE,gBAAgB;AAChB,MAAM,MAAM,eAAe,GAAG,CAC5B,YAAY,EAAE,8BAA8B,EAAE,EAC9C,mBAAmB,EAAE,uCAAuC,EAAE,KAC3D,OAAO,CAAC,qBAAqB,CAAC,CAAC"}