@itwin/presentation-hierarchies 2.0.0-alpha.14 → 2.0.0-alpha.16

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 (199) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/README.md +12 -22
  3. package/lib/cjs/hierarchies/HierarchyMerge.d.ts +1 -1
  4. package/lib/cjs/hierarchies/HierarchyMerge.d.ts.map +1 -1
  5. package/lib/cjs/hierarchies/HierarchyMerge.js +1 -1
  6. package/lib/cjs/hierarchies/HierarchyMerge.js.map +1 -1
  7. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
  8. package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
  9. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  10. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
  11. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
  12. package/lib/cjs/hierarchies/HierarchyProvider.js +7 -3
  13. package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
  14. package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +1 -1
  15. package/lib/cjs/hierarchies/HierarchySearch.js +19 -12
  16. package/lib/cjs/hierarchies/HierarchySearch.js.map +1 -1
  17. package/lib/cjs/hierarchies/Logging.js +1 -1
  18. package/lib/cjs/hierarchies/Logging.js.map +1 -1
  19. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  20. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +1 -4
  21. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
  22. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +4 -2
  23. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  24. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  25. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  26. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  27. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +20 -2
  28. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  29. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +157 -85
  30. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  31. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
  32. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +12 -9
  33. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  34. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +4 -3
  35. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  36. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +44 -68
  37. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  38. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  39. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
  40. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  41. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -1
  42. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js +11 -4
  43. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -1
  44. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  45. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +3 -5
  46. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  47. package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -0
  48. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
  49. package/lib/cjs/hierarchies/imodel/Utils.js +21 -7
  50. package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
  51. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  52. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +10 -4
  53. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  54. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  55. package/lib/cjs/hierarchies/imodel/operators/Grouping.js +32 -18
  56. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
  57. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  58. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +31 -9
  59. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  60. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  61. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +30 -14
  62. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  63. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  64. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +4 -6
  65. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  66. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  67. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +4 -9
  68. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  69. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  70. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
  71. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  72. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  73. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
  74. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  75. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  76. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +24 -28
  77. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  78. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  79. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js +3 -1
  80. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  81. package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
  82. package/lib/cjs/hierarchies/internal/Common.js +2 -2
  83. package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
  84. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  85. package/lib/cjs/hierarchies/internal/EachValueFrom.js +0 -2
  86. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
  87. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
  88. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
  89. package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
  90. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
  91. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +1 -4
  92. package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
  93. package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +1 -1
  94. package/lib/cjs/hierarchies/internal/operators/Partition.js.map +1 -1
  95. package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
  96. package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
  97. package/lib/cjs/presentation-hierarchies.d.ts +2 -4
  98. package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
  99. package/lib/cjs/presentation-hierarchies.js +1 -4
  100. package/lib/cjs/presentation-hierarchies.js.map +1 -1
  101. package/lib/esm/hierarchies/HierarchyMerge.d.ts +1 -1
  102. package/lib/esm/hierarchies/HierarchyMerge.d.ts.map +1 -1
  103. package/lib/esm/hierarchies/HierarchyMerge.js +1 -1
  104. package/lib/esm/hierarchies/HierarchyMerge.js.map +1 -1
  105. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
  106. package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
  107. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  108. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
  109. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
  110. package/lib/esm/hierarchies/HierarchyProvider.js +7 -3
  111. package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
  112. package/lib/esm/hierarchies/HierarchySearch.d.ts.map +1 -1
  113. package/lib/esm/hierarchies/HierarchySearch.js +19 -12
  114. package/lib/esm/hierarchies/HierarchySearch.js.map +1 -1
  115. package/lib/esm/hierarchies/Logging.js +1 -1
  116. package/lib/esm/hierarchies/Logging.js.map +1 -1
  117. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  118. package/lib/esm/hierarchies/imodel/HierarchyCache.js +1 -4
  119. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
  120. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +4 -2
  121. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  122. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  123. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  124. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  125. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +20 -2
  126. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  127. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +160 -88
  128. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  129. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
  130. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +13 -10
  131. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  132. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +4 -3
  133. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  134. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +45 -69
  135. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  136. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  137. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
  138. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  139. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -1
  140. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js +11 -4
  141. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -1
  142. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  143. package/lib/esm/hierarchies/imodel/TreeNodesReader.js +3 -5
  144. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  145. package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -0
  146. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
  147. package/lib/esm/hierarchies/imodel/Utils.js +20 -7
  148. package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
  149. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  150. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js +11 -5
  151. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  152. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  153. package/lib/esm/hierarchies/imodel/operators/Grouping.js +33 -19
  154. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
  155. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  156. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +32 -10
  157. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  158. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  159. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js +31 -15
  160. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  161. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  162. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +5 -7
  163. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  164. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  165. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +5 -10
  166. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  167. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  168. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
  169. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  170. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  171. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
  172. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  173. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  174. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +24 -28
  175. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  176. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  177. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js +3 -1
  178. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  179. package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
  180. package/lib/esm/hierarchies/internal/Common.js +2 -2
  181. package/lib/esm/hierarchies/internal/Common.js.map +1 -1
  182. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  183. package/lib/esm/hierarchies/internal/EachValueFrom.js +0 -2
  184. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
  185. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
  186. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
  187. package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
  188. package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
  189. package/lib/esm/hierarchies/internal/SubscriptionScheduler.js +1 -4
  190. package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
  191. package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +1 -1
  192. package/lib/esm/hierarchies/internal/operators/Partition.js.map +1 -1
  193. package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
  194. package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
  195. package/lib/esm/presentation-hierarchies.d.ts +2 -4
  196. package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
  197. package/lib/esm/presentation-hierarchies.js +2 -3
  198. package/lib/esm/presentation-hierarchies.js.map +1 -1
  199. package/package.json +17 -25
@@ -1 +1 @@
1
- {"version":3,"file":"IModelHierarchyProvider.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC;AA6BxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA4B5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,gBAAgB,EAGhB,KAAK,EAEL,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAA0B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AASlF;;;GAGG;AACH,UAAU,uCAAuC;IAC/C;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAc;AACd,KAAK,YAAY,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,yBAAyB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH;;;GAGG;AACH,UAAU,4BAA4B;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,iFAAiF;QACjF,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;CACH;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,4BAA4B,GAAG,iBAAiB,GAAG,UAAU,CAGjH;AAED;;;GAGG;AACH,UAAU,kCAAmC,SAAQ,IAAI,CAAC,4BAA4B,EAAE,cAAc,GAAG,eAAe,CAAC;IACvH;;;;;OAKG;IACH,OAAO,EAAE,KAAK,CAAC;QACb;;;;;;WAMG;QACH,YAAY,EAAE,YAAY,CAAC;QAE3B;;;WAGG;QACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;KACnC,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,kCAAkC,GAAG,iBAAiB,GAAG,UAAU,CAE7H"}
1
+ {"version":3,"file":"IModelHierarchyProvider.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"AAKA,OAAO,gCAAgC,CAAC;AAkCxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AA6B5D,OAAO,KAAK,EAEV,yBAAyB,EACzB,gBAAgB,EAEhB,KAAK,EAEL,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAA0B,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAGV,mBAAmB,EAEpB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAUlF;;;GAGG;AACH,UAAU,uCAAuC;IAC/C;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;CACf;AAED,cAAc;AACd,KAAK,YAAY,GAAG,gBAAgB,GAAG,0BAA0B,GAAG,yBAAyB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtH;;;GAGG;AACH,UAAU,4BAA4B;IACpC;;;;;;OAMG;IACH,YAAY,EAAE,YAAY,CAAC;IAE3B;;;OAGG;IACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;IAElC;;;OAGG;IACH,mBAAmB,EAAE,mBAAmB,CAAC;IAEzC,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC,uCAAuC,CAAC,CAAC;IAEpE;;;;OAIG;IACH,SAAS,CAAC,EAAE,wBAAwB,CAAC;IAErC;;;;;OAKG;IACH,MAAM,CAAC,EAAE;QACP,iFAAiF;QACjF,KAAK,EAAE,mBAAmB,EAAE,CAAC;KAC9B,CAAC;IAEF;;;;;;;OAOG;IACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;CACtE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,4BAA4B,GAAG,iBAAiB,GAAG,UAAU,CAMjH;AAED;;;GAGG;AACH,UAAU,kCAAmC,SAAQ,IAAI,CACvD,4BAA4B,EAC5B,cAAc,GAAG,eAAe,GAAG,kCAAkC,CACtE;IACC;;;;;OAKG;IACH,OAAO,EAAE,KAAK,CAAC;QACb;;;;;;WAMG;QACH,YAAY,EAAE,YAAY,CAAC;QAE3B;;;WAGG;QACH,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;QAElC;;;;;;;WAOG;QACH,gCAAgC,CAAC,EAAE,iCAAiC,CAAC;KACtE,CAAC,CAAC;CACJ;AAED;;;;;;;GAOG;AACH,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,kCAAkC,GACxC,iBAAiB,GAAG,UAAU,CAEhC"}
@@ -3,9 +3,9 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import "../internal/DisposePolyfill.js";
6
- import { catchError, concat, defaultIfEmpty, defer, EMPTY, filter, finalize, from, fromEventPattern, identity, map, merge, mergeAll, mergeMap, of, reduce, Subject, take, takeUntil, tap, } from "rxjs";
6
+ import { catchError, concat, defaultIfEmpty, EMPTY, filter, finalize, from, fromEventPattern, identity, map, merge, mergeAll, mergeMap, of, reduce, Subject, take, takeUntil, tap, } from "rxjs";
7
7
  import { assert, BeEvent, Guid, StopWatch } from "@itwin/core-bentley";
8
- import { createDefaultValueFormatter, formatConcatenatedValue, InstanceKey, normalizeFullClassName } from "@itwin/presentation-shared";
8
+ import { createDefaultValueFormatter, createIModelInstanceLabelSelectClauseFactory, formatConcatenatedValue, InstanceKey, normalizeFullClassName, } from "@itwin/presentation-shared";
9
9
  import { RowsLimitExceededError } from "../HierarchyErrors.js";
10
10
  import { HierarchyNode } from "../HierarchyNode.js";
11
11
  import { HierarchyNodeKey } from "../HierarchyNodeKey.js";
@@ -21,13 +21,14 @@ import { getRxjsHierarchyDefinition } from "../internal/RxjsHierarchyDefinition.
21
21
  import { SubscriptionScheduler } from "../internal/SubscriptionScheduler.js";
22
22
  import { HierarchyCache } from "./HierarchyCache.js";
23
23
  import { HierarchyNodesDefinition } from "./IModelHierarchyDefinition.js";
24
- import { NodeSelectClauseColumnNames } from "./NodeSelectQueryFactory.js";
24
+ import { createNodesQueryClauseFactory, NodeSelectClauseColumnNames } from "./NodeSelectQueryFactory.js";
25
25
  import { createDetermineChildrenOperator } from "./operators/DetermineChildren.js";
26
26
  import { createGroupingOperator } from "./operators/Grouping.js";
27
27
  import { createHideIfNoChildrenOperator } from "./operators/HideIfNoChildren.js";
28
28
  import { createHideNodesInHierarchyOperator } from "./operators/HideNodesInHierarchy.js";
29
29
  import { SearchHierarchyDefinition } from "./SearchHierarchyDefinition.js";
30
30
  import { readNodes } from "./TreeNodesReader.js";
31
+ import { ECSQL_PREFIX } from "./Utils.js";
31
32
  const LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.IModelHierarchyProvider`;
32
33
  const LOGGING_NAMESPACE_INTERNAL = `${BASE_LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;
33
34
  const LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;
@@ -40,8 +41,11 @@ const DEFAULT_QUERY_CACHE_SIZE = 1;
40
41
  * @public
41
42
  */
42
43
  export function createIModelHierarchyProvider(props) {
43
- const { imodelAccess, imodelChanged, ...restProps } = props;
44
- return createMergedIModelHierarchyProvider({ ...restProps, imodels: [{ imodelAccess, imodelChanged }] });
44
+ const { imodelAccess, imodelChanged, instanceLabelSelectClauseFactory, ...restProps } = props;
45
+ return createMergedIModelHierarchyProvider({
46
+ ...restProps,
47
+ imodels: [{ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }],
48
+ });
45
49
  }
46
50
  /**
47
51
  * Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel
@@ -75,9 +79,14 @@ class IModelHierarchyProviderImpl {
75
79
  }
76
80
  this.#componentId = Guid.createValue();
77
81
  this.#componentName = "IModelHierarchyProviderImpl";
78
- /* c8 ignore next */
79
82
  this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;
80
- this._imodels = props.imodels;
83
+ this._imodels = props.imodels.map(({ imodelAccess, imodelChanged, instanceLabelSelectClauseFactory }) => {
84
+ if (!instanceLabelSelectClauseFactory) {
85
+ instanceLabelSelectClauseFactory = createIModelInstanceLabelSelectClauseFactory({ imodelAccess });
86
+ }
87
+ const nodeSelectClauseFactory = createNodesQueryClauseFactory({ imodelAccess, instanceLabelSelectClauseFactory });
88
+ return { imodelAccess, imodelChanged, nodeSelectClauseFactory };
89
+ });
81
90
  this._hierarchyChanged = new BeEvent();
82
91
  this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(props.hierarchyDefinition);
83
92
  this._valuesFormatter = props.formatter ?? createDefaultValueFormatter();
@@ -110,7 +119,7 @@ class IModelHierarchyProviderImpl {
110
119
  this._dispose.next();
111
120
  this._unsubscribe?.();
112
121
  }
113
- /* c8 ignore next 3 */
122
+ /* v8 ignore next -- @preserve */
114
123
  dispose() {
115
124
  this[Symbol.dispose]();
116
125
  }
@@ -129,9 +138,10 @@ class IModelHierarchyProviderImpl {
129
138
  return this._imodels[this._imodels.length - 1].imodelAccess;
130
139
  }
131
140
  invalidateHierarchyCache(reason) {
141
+ /* v8 ignore next -- @preserve */
132
142
  doLog({
133
143
  category: `${LOGGING_NAMESPACE}.Events`,
134
- message: /* c8 ignore next */ () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),
144
+ message: () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),
135
145
  });
136
146
  this._nodesCache?.clear();
137
147
  }
@@ -167,13 +177,17 @@ class IModelHierarchyProviderImpl {
167
177
  }
168
178
  createHierarchyLevelDefinitionsObservable(props) {
169
179
  const { requestContext, ...defineHierarchyLevelProps } = props;
180
+ /* v8 ignore next -- @preserve */
170
181
  doLog({
171
182
  category: LOGGING_NAMESPACE_PERFORMANCE,
172
- message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,
183
+ message: () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,
173
184
  });
174
- return from(this._imodels).pipe(mergeMap(({ imodelAccess }, imodelAccessIndex) => {
185
+ return from(this._imodels).pipe(mergeMap(({ imodelAccess, nodeSelectClauseFactory }, imodelAccessIndex) => {
175
186
  let parentNode = props.parentNode;
176
- if (parentNode && HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this.#sourceName) {
187
+ if (parentNode &&
188
+ HierarchyNode.isGeneric(parentNode) &&
189
+ parentNode.key.source &&
190
+ parentNode.key.source !== this.#sourceName) {
177
191
  return EMPTY;
178
192
  }
179
193
  if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {
@@ -189,38 +203,67 @@ class IModelHierarchyProviderImpl {
189
203
  return EMPTY;
190
204
  }
191
205
  }
192
- return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode, imodelAccess }).pipe(mergeAll(), map(
206
+ return this._activeHierarchyDefinition
207
+ .defineHierarchyLevel({
208
+ ...defineHierarchyLevelProps,
209
+ createSelectClause: async (selectClauseProps) => nodeSelectClauseFactory.createSelectClause(selectClauseProps),
210
+ /* v8 ignore start */
211
+ createFilterClauses: async (filterClausesProps) => nodeSelectClauseFactory.createFilterClauses(filterClausesProps),
212
+ /* v8 ignore stop */
213
+ parentNode,
214
+ imodelAccess,
215
+ })
216
+ .pipe(mergeAll(), map(
193
217
  /* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */
194
218
  (hierarchyNodesDefinition) => ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition })));
195
- }), finalize(() => doLog({
196
- category: LOGGING_NAMESPACE_PERFORMANCE,
197
- message: /* c8 ignore next */ () => `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,
198
- })));
219
+ }), finalize(() => {
220
+ /* v8 ignore next -- @preserve */
221
+ doLog({
222
+ category: LOGGING_NAMESPACE_PERFORMANCE,
223
+ message: () => `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,
224
+ });
225
+ }));
199
226
  }
200
227
  createSourceNodesObservable(props) {
201
- // pipe definitions to nodes and put "share replay" on it
202
- return this.createHierarchyLevelDefinitionsObservable(props).pipe(mergeMap(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) => defer(() => {
228
+ const createSourceNodesFromDefinition = (imodelAccess, def) => {
203
229
  if (HierarchyNodesDefinition.isGenericNode(def)) {
204
- return of({
205
- ...def.node,
206
- key: { type: "generic", id: def.node.key, source: this.#sourceName },
207
- });
230
+ return of({ ...def.node, key: { type: "generic", id: def.node.key, source: this.#sourceName } });
208
231
  }
209
- return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(of(def.query).pipe(map((query) => createInstanceKeysFilteredQuery(query, props.targetInstanceKeys)), mergeMap((query) => readNodes({
232
+ const query = createInstanceKeysFilteredQuery(def.query, props.targetInstanceKeys);
233
+ return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(readNodes({
210
234
  queryExecutor: imodelAccess,
211
235
  query,
212
236
  limit: props.hierarchyLevelSizeLimit,
213
237
  parser: this._activeHierarchyDefinition.parseNode
214
- ? ({ row }) => this._activeHierarchyDefinition.parseNode({ row, parentNode: props.parentNode, imodelKey: imodelAccess.imodelKey })
238
+ ? ({ row }) => this._activeHierarchyDefinition.parseNode({
239
+ row,
240
+ parentNode: props.parentNode,
241
+ imodelKey: imodelAccess.imodelKey,
242
+ })
215
243
  : undefined,
216
- })), map((node) => ({
244
+ }).pipe(map((node) => ({
217
245
  ...node,
218
- key: { ...node.key, instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: imodelAccess.imodelKey })) },
246
+ key: {
247
+ ...node.key,
248
+ instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: imodelAccess.imodelKey })),
249
+ },
219
250
  }))));
220
- }).pipe(map((node) => ({ imodelAccess, imodelAccessIndex, node })))), mergeNodes, map(({ node }) => node), finalize(() => doLog({
221
- category: LOGGING_NAMESPACE_PERFORMANCE,
222
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Read all child nodes ${createNodeIdentifierForLogging(props.parentNode)}`,
223
- })), shareReplayWithErrors());
251
+ };
252
+ const definitions = this.createHierarchyLevelDefinitionsObservable(props);
253
+ let sourceNodes;
254
+ if (this._imodels.length === 1) {
255
+ sourceNodes = definitions.pipe(mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) => createSourceNodesFromDefinition(imodelAccess, def)));
256
+ }
257
+ else {
258
+ sourceNodes = definitions.pipe(mergeMap(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) => createSourceNodesFromDefinition(imodelAccess, def).pipe(map((node) => ({ imodelAccess, imodelAccessIndex, node })))), mergeNodes, map(({ node }) => node));
259
+ }
260
+ return sourceNodes.pipe(finalize(() => {
261
+ /* v8 ignore next -- @preserve */
262
+ doLog({
263
+ category: LOGGING_NAMESPACE_PERFORMANCE,
264
+ message: () => `[${props.requestContext.requestId}] Read all child nodes ${createNodeIdentifierForLogging(props.parentNode)}`,
265
+ });
266
+ }), shareReplayWithErrors());
224
267
  }
225
268
  createPreProcessedNodesObservable(queryNodesObservable, props) {
226
269
  return queryNodesObservable.pipe(
@@ -236,16 +279,22 @@ class IModelHierarchyProviderImpl {
236
279
  // process hiding
237
280
  createHideIfNoChildrenOperator((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), createHideNodesInHierarchyOperator(
238
281
  // note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)
239
- (n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), finalize(() => doLog({
240
- category: LOGGING_NAMESPACE_PERFORMANCE,
241
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
242
- })));
282
+ (n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), finalize(() => {
283
+ /* v8 ignore next -- @preserve */
284
+ doLog({
285
+ category: LOGGING_NAMESPACE_PERFORMANCE,
286
+ message: () => `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
287
+ });
288
+ }));
243
289
  }
244
290
  createProcessedNodesObservable(preprocessedNodesObservable, props) {
245
- return preprocessedNodesObservable.pipe(createGroupingOperator(this.getPrimaryIModelAccess(), props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) => this.onGroupingNodeCreated(gn, props)), finalize(() => doLog({
246
- category: LOGGING_NAMESPACE_PERFORMANCE,
247
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished grouping child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
248
- })));
291
+ return preprocessedNodesObservable.pipe(createGroupingOperator(this.getPrimaryIModelAccess(), props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) => this.onGroupingNodeCreated(gn, props)), finalize(() => {
292
+ /* v8 ignore next -- @preserve */
293
+ doLog({
294
+ category: LOGGING_NAMESPACE_PERFORMANCE,
295
+ message: () => `[${props.requestContext.requestId}] Finished grouping child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
296
+ });
297
+ }));
249
298
  }
250
299
  createFinalizedNodesObservable(processedNodesObservable, props) {
251
300
  return processedNodesObservable.pipe(createDetermineChildrenOperator((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), postProcessNodes(this._activeHierarchyDefinition, props.parentNode), sortNodesByLabelOperator, map((n) => {
@@ -253,35 +302,44 @@ class IModelHierarchyProviderImpl {
253
302
  delete n.processingParams;
254
303
  }
255
304
  return { ...n, children: hasChildren(n) };
256
- }), takeUntil(this._dispose), finalize(() => doLog({
257
- category: LOGGING_NAMESPACE_PERFORMANCE,
258
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
259
- })));
305
+ }), takeUntil(this._dispose), finalize(() => {
306
+ /* v8 ignore next -- @preserve */
307
+ doLog({
308
+ category: LOGGING_NAMESPACE_PERFORMANCE,
309
+ message: () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
310
+ });
311
+ }));
260
312
  }
261
313
  createHasNodesObservable(preprocessedNodesObservable, possiblyKnownChildrenObservable, props) {
262
314
  const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;
263
- return concat((possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))), preprocessedNodesObservable).pipe(log({
315
+ return concat((possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))), preprocessedNodesObservable).pipe(
316
+ /* v8 ignore next -- @preserve */
317
+ log({
264
318
  category: loggingCategory,
265
- message: /* c8 ignore next */ (n) => `[${props.requestContext.requestId}] Node before mapping to 'true': ${createNodeIdentifierForLogging(n)}`,
319
+ message: (n) => `[${props.requestContext.requestId}] Node before mapping to 'true': ${createNodeIdentifierForLogging(n)}`,
266
320
  }), take(1), map(() => true), defaultIfEmpty(false), catchError((e) => {
321
+ /* v8 ignore next -- @preserve */
267
322
  doLog({
268
323
  category: loggingCategory,
269
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,
324
+ message: () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,
270
325
  });
271
326
  if (e instanceof RowsLimitExceededError) {
272
327
  return of(true);
273
328
  }
274
329
  throw e;
275
- }), log({ category: loggingCategory, message: /* c8 ignore next */ (r) => `[${props.requestContext.requestId}] Result: ${r}` }));
330
+ }),
331
+ /* v8 ignore next -- @preserve */
332
+ log({ category: loggingCategory, message: (r) => `[${props.requestContext.requestId}] Result: ${r}` }));
276
333
  }
277
334
  getCachedObservableEntry(props) {
278
335
  const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;
279
336
  const { parentNode, ...restProps } = props;
280
337
  const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);
281
338
  if (cached) {
339
+ /* v8 ignore next -- @preserve */
282
340
  doLog({
283
341
  category: loggingCategory,
284
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Found query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,
342
+ message: () => `[${props.requestContext.requestId}] Found query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,
285
343
  });
286
344
  return cached;
287
345
  }
@@ -305,11 +363,15 @@ class IModelHierarchyProviderImpl {
305
363
  parentNode: parentNonGroupingNode,
306
364
  ...(targetInstanceKeys ? { targetInstanceKeys } : undefined),
307
365
  };
308
- const value = { observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps), processingStatus: "none" };
366
+ const value = {
367
+ observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps),
368
+ processingStatus: "none",
369
+ };
309
370
  this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);
371
+ /* v8 ignore next -- @preserve */
310
372
  doLog({
311
373
  category: loggingCategory,
312
- message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,
374
+ message: () => `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,
313
375
  });
314
376
  return value;
315
377
  }
@@ -344,18 +406,19 @@ class IModelHierarchyProviderImpl {
344
406
  const timer = new StopWatch(undefined, true);
345
407
  let error;
346
408
  let nodesCount = 0;
409
+ /* v8 ignore next -- @preserve */
347
410
  doLog({
348
411
  category: loggingCategory,
349
- message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
412
+ message: () => `[${requestContext.requestId}] Requesting child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,
350
413
  });
351
414
  return eachValueFrom(this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe(tap(() => ++nodesCount), catchError((e) => {
352
415
  error = e;
353
416
  throw e;
354
417
  }), finalize(() => {
418
+ /* v8 ignore next -- @preserve */
355
419
  doLog({
356
420
  category: loggingCategory,
357
- message: /* c8 ignore next */ () =>
358
- /* c8 ignore next 3 */ error
421
+ message: () => error
359
422
  ? `[${requestContext.requestId}] Error creating child nodes for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
360
423
  : `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
361
424
  });
@@ -368,7 +431,11 @@ class IModelHierarchyProviderImpl {
368
431
  }
369
432
  assert(!parentNode || HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));
370
433
  // split the definitions based on whether they're for generic nodes or for instance nodes
371
- const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });
434
+ const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({
435
+ parentNode,
436
+ instanceFilter,
437
+ requestContext,
438
+ });
372
439
  const [instanceDefs, genericDefs] = partition(hierarchyLevelDefinitions, (x) => HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition));
373
440
  // query instance keys and a flag whether they should be hidden
374
441
  const instanceKeys = instanceDefs.pipe(mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) => this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(of(def.query).pipe(mergeMap(async (query) => {
@@ -411,11 +478,7 @@ class IModelHierarchyProviderImpl {
411
478
  mergeMap((mergedMap) => [...mergedMap.entries()].map(([className, keys]) => ({
412
479
  type: "instances",
413
480
  instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),
414
- }))))).pipe(map((key) => ({
415
- key,
416
- parentKeys: [],
417
- label: "",
418
- })));
481
+ }))))).pipe(map((key) => ({ key, parentKeys: [], label: "" })));
419
482
  // merge visible instance keys from this level & the ones we get recursively requesting from deeper levels
420
483
  return merge(visibleNodeInstanceKeys.pipe(map(({ key }) => key)), hiddenParentNodes.pipe(mergeMap((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext })))).pipe(takeUntil(this._dispose));
421
484
  }
@@ -427,9 +490,10 @@ class IModelHierarchyProviderImpl {
427
490
  const requestContext = { requestId: Guid.createValue() };
428
491
  const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;
429
492
  const timer = new StopWatch(undefined, true);
493
+ /* v8 ignore next -- @preserve */
430
494
  doLog({
431
495
  category: loggingCategory,
432
- message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting keys for ${createNodeIdentifierForLogging(props.parentNode)}`,
496
+ message: () => `[${requestContext.requestId}] Requesting keys for ${createNodeIdentifierForLogging(props.parentNode)}`,
433
497
  });
434
498
  let error;
435
499
  let keysCount = 0;
@@ -437,10 +501,10 @@ class IModelHierarchyProviderImpl {
437
501
  error = e;
438
502
  throw e;
439
503
  }), finalize(() => {
504
+ /* v8 ignore next -- @preserve */
440
505
  doLog({
441
506
  category: loggingCategory,
442
- message: /* c8 ignore next */ () =>
443
- /* c8 ignore next 3 */ error
507
+ message: () => error
444
508
  ? `[${requestContext.requestId}] Error creating node instance keys for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
445
509
  : `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
446
510
  });
@@ -457,13 +521,7 @@ function processNodes(processor, parentNode) {
457
521
  return (nodes) => nodes.pipe(mergeMap((node) => processor({ node, parentNode })));
458
522
  }
459
523
  function applyLabelsFormatting(node, valueFormatter) {
460
- return from(formatConcatenatedValue({
461
- value: node.label,
462
- valueFormatter,
463
- })).pipe(map((label) => ({
464
- ...node,
465
- label,
466
- })));
524
+ return from(formatConcatenatedValue({ value: node.label, valueFormatter })).pipe(map((label) => ({ ...node, label })));
467
525
  }
468
526
  function createParentNodeKeysList(parentNode) {
469
527
  if (!parentNode) {
@@ -475,30 +533,35 @@ function createInstanceKeysFilteredQuery(query, targetInstanceKeys) {
475
533
  if (!targetInstanceKeys || !targetInstanceKeys.length) {
476
534
  return query;
477
535
  }
478
- const MAX_ALLOWED_BINDINGS = 1000;
479
- if (targetInstanceKeys.length < MAX_ALLOWED_BINDINGS) {
536
+ if (Array.isArray(query.bindings)) {
480
537
  return {
481
538
  ...query,
482
539
  ecsql: `
483
540
  SELECT *
484
541
  FROM (${query.ecsql}) q
485
- WHERE q.ECInstanceId IN (${targetInstanceKeys.map(() => "?").join(",")})
542
+ JOIN IdSet(?) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
543
+ ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
486
544
  `,
487
- bindings: [...(query.bindings ?? []), ...targetInstanceKeys.map((k) => ({ type: "id", value: k.id }))],
545
+ bindings: [...query.bindings, { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
488
546
  };
489
547
  }
490
- /* c8 ignore start */
548
+ const ecsqlVarTargetInstanceKeys = `${ECSQL_PREFIX}targetInstanceKeys`;
491
549
  return {
492
550
  ...query,
493
551
  ecsql: `
494
552
  SELECT *
495
553
  FROM (${query.ecsql}) q
496
- WHERE InVirtualSet(?, q.ECInstanceId)
554
+ JOIN IdSet(:${ecsqlVarTargetInstanceKeys}) targetInstanceKeys ON targetInstanceKeys.id = q.ECInstanceId
555
+ ECSQLOPTIONS ENABLE_EXPERIMENTAL_FEATURES
497
556
  `,
498
- bindings: [...(query.bindings ?? []), { type: "idset", value: targetInstanceKeys.map((k) => k.id) }],
557
+ bindings: {
558
+ ...query.bindings,
559
+ [ecsqlVarTargetInstanceKeys]: { type: "idset", value: targetInstanceKeys.map((k) => k.id) },
560
+ },
499
561
  };
500
- /* c8 ignore end */
501
562
  }
563
+ // TODO: MISSING_COVERAGE
564
+ /* v8 ignore start */
502
565
  function mergeNodes(source) {
503
566
  return from(source).pipe(reduce((acc, input) => {
504
567
  for (let i = 0; i < acc.length; ++i) {
@@ -509,11 +572,25 @@ function mergeNodes(source) {
509
572
  // the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass
510
573
  // the node with higher `imodelAccessIndex` first
511
574
  const candidates = input.imodelAccessIndex > acc[i].imodelAccessIndex
512
- ? { imodelAccess: input.imodelAccess, imodelAccessIndex: input.imodelAccessIndex, primary: input.node, secondary: acc[i].node }
513
- : { imodelAccess: acc[i].imodelAccess, imodelAccessIndex: acc[i].imodelAccessIndex, primary: acc[i].node, secondary: input.node };
575
+ ? {
576
+ imodelAccess: input.imodelAccess,
577
+ imodelAccessIndex: input.imodelAccessIndex,
578
+ primary: input.node,
579
+ secondary: acc[i].node,
580
+ }
581
+ : {
582
+ imodelAccess: acc[i].imodelAccess,
583
+ imodelAccessIndex: acc[i].imodelAccessIndex,
584
+ primary: acc[i].node,
585
+ secondary: input.node,
586
+ };
514
587
  const merged = tryMergeNodes(candidates.primary, candidates.secondary);
515
588
  if (merged) {
516
- acc[i] = { node: merged, imodelAccess: candidates.imodelAccess, imodelAccessIndex: candidates.imodelAccessIndex };
589
+ acc[i] = {
590
+ node: merged,
591
+ imodelAccess: candidates.imodelAccess,
592
+ imodelAccessIndex: candidates.imodelAccessIndex,
593
+ };
517
594
  return acc;
518
595
  }
519
596
  }
@@ -557,10 +634,7 @@ function tryMergeInstanceNodes(primary, secondary) {
557
634
  primary.key.instanceKeys.some((lhsKey) => secondary.key.instanceKeys.some((rhsKey) => InstanceKey.equals(lhsKey, rhsKey)))) {
558
635
  return {
559
636
  ...primary,
560
- key: {
561
- type: "instances",
562
- instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys),
563
- },
637
+ key: { type: "instances", instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys) },
564
638
  ...mergeBaseNodeAttributes(primary, secondary),
565
639
  };
566
640
  }
@@ -568,14 +642,12 @@ function tryMergeInstanceNodes(primary, secondary) {
568
642
  }
569
643
  function tryMergeGenericNodes(primary, secondary) {
570
644
  if (HierarchyNode.isGeneric(primary) && HierarchyNode.isGeneric(secondary) && primary.key.id === secondary.key.id) {
571
- return {
572
- ...primary,
573
- ...mergeBaseNodeAttributes(primary, secondary),
574
- };
645
+ return { ...primary, ...mergeBaseNodeAttributes(primary, secondary) };
575
646
  }
576
647
  return undefined;
577
648
  }
578
649
  function tryMergeNodes(primary, secondary) {
579
650
  return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;
580
651
  }
652
+ /* v8 ignore stop */
581
653
  //# sourceMappingURL=IModelHierarchyProvider.js.map