@itwin/presentation-hierarchies 1.0.0 → 1.2.0

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 (248) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/lib/cjs/hierarchies/HierarchyErrors.d.ts +1 -1
  3. package/lib/cjs/hierarchies/HierarchyErrors.js +1 -1
  4. package/lib/cjs/hierarchies/HierarchyErrors.js.map +1 -1
  5. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts +12 -11
  6. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +1 -1
  7. package/lib/cjs/hierarchies/HierarchyFiltering.js +16 -21
  8. package/lib/cjs/hierarchies/HierarchyFiltering.js.map +1 -1
  9. package/lib/cjs/hierarchies/HierarchyNode.d.ts +10 -10
  10. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
  11. package/lib/cjs/hierarchies/HierarchyNode.js +13 -13
  12. package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
  13. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts +4 -4
  14. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  15. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js +1 -1
  16. package/lib/cjs/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  17. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts +13 -13
  18. package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  19. package/lib/cjs/hierarchies/HierarchyNodeKey.js +1 -1
  20. package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
  21. package/lib/cjs/hierarchies/HierarchyProvider.d.ts +6 -6
  22. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
  23. package/lib/cjs/hierarchies/HierarchyProvider.js +6 -6
  24. package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
  25. package/lib/cjs/hierarchies/Logging.d.ts +2 -2
  26. package/lib/cjs/hierarchies/Logging.js +3 -3
  27. package/lib/cjs/hierarchies/Logging.js.map +1 -1
  28. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +9 -18
  29. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
  30. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +104 -50
  31. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
  32. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  33. package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  34. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +2 -2
  35. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
  36. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts +14 -14
  37. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  38. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js +1 -1
  39. package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  40. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts +23 -23
  41. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  42. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js +5 -5
  43. package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  44. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +8 -8
  45. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  46. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +95 -87
  47. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  48. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +2 -2
  49. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +17 -14
  50. package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  51. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts +16 -16
  52. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  53. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +2 -2
  54. package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  55. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +10 -10
  56. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  57. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +5 -10
  58. package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  59. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts +4 -4
  60. package/lib/cjs/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  61. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js +5 -3
  62. package/lib/cjs/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  63. package/lib/cjs/hierarchies/imodel/Utils.d.ts +1 -1
  64. package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
  65. package/lib/cjs/hierarchies/imodel/Utils.js +2 -2
  66. package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
  67. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts +1 -1
  68. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  69. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +8 -8
  70. package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  71. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts +3 -3
  72. package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  73. package/lib/cjs/hierarchies/imodel/operators/Grouping.js +42 -42
  74. package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
  75. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  76. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  77. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +16 -16
  78. package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  79. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  80. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  81. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +25 -25
  82. package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  83. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  84. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  85. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js +2 -2
  86. package/lib/cjs/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  87. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +3 -3
  88. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  89. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +3 -3
  90. package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  91. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +3 -3
  92. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  93. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +2 -2
  94. package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  95. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  96. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  97. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +2 -2
  98. package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  99. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  100. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  101. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -2
  102. package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  103. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +3 -3
  104. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  105. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +13 -18
  106. package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  107. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  108. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  109. package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  110. package/lib/cjs/hierarchies/internal/Common.d.ts +1 -1
  111. package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
  112. package/lib/cjs/hierarchies/internal/Common.js +2 -1
  113. package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
  114. package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  115. package/lib/cjs/hierarchies/internal/EachValueFrom.js +3 -0
  116. package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
  117. package/lib/cjs/hierarchies/internal/LoggingUtils.js +2 -2
  118. package/lib/cjs/hierarchies/internal/LoggingUtils.js.map +1 -1
  119. package/lib/cjs/hierarchies/internal/operators/Sorting.js +2 -2
  120. package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -1
  121. package/lib/cjs/presentation-hierarchies.d.ts +13 -13
  122. package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
  123. package/lib/cjs/presentation-hierarchies.js +29 -29
  124. package/lib/cjs/presentation-hierarchies.js.map +1 -1
  125. package/lib/esm/hierarchies/HierarchyErrors.d.ts +1 -1
  126. package/lib/esm/hierarchies/HierarchyErrors.js +1 -1
  127. package/lib/esm/hierarchies/HierarchyErrors.js.map +1 -1
  128. package/lib/esm/hierarchies/HierarchyFiltering.d.ts +12 -11
  129. package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +1 -1
  130. package/lib/esm/hierarchies/HierarchyFiltering.js +16 -21
  131. package/lib/esm/hierarchies/HierarchyFiltering.js.map +1 -1
  132. package/lib/esm/hierarchies/HierarchyNode.d.ts +10 -10
  133. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
  134. package/lib/esm/hierarchies/HierarchyNode.js +3 -3
  135. package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
  136. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts +4 -4
  137. package/lib/esm/hierarchies/HierarchyNodeIdentifier.d.ts.map +1 -1
  138. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js +1 -1
  139. package/lib/esm/hierarchies/HierarchyNodeIdentifier.js.map +1 -1
  140. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts +13 -13
  141. package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
  142. package/lib/esm/hierarchies/HierarchyNodeKey.js +1 -1
  143. package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
  144. package/lib/esm/hierarchies/HierarchyProvider.d.ts +6 -6
  145. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
  146. package/lib/esm/hierarchies/HierarchyProvider.js +3 -3
  147. package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
  148. package/lib/esm/hierarchies/Logging.d.ts +2 -2
  149. package/lib/esm/hierarchies/Logging.js +3 -3
  150. package/lib/esm/hierarchies/Logging.js.map +1 -1
  151. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts +9 -18
  152. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
  153. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +92 -38
  154. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
  155. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts +1 -1
  156. package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
  157. package/lib/esm/hierarchies/imodel/HierarchyCache.js +1 -1
  158. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
  159. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts +14 -14
  160. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
  161. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js +1 -1
  162. package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
  163. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts +23 -23
  164. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
  165. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js +2 -2
  166. package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
  167. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +8 -8
  168. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  169. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +49 -41
  170. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  171. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts +2 -2
  172. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +11 -8
  173. package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
  174. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts +16 -16
  175. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
  176. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +2 -2
  177. package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
  178. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts +10 -10
  179. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
  180. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +5 -10
  181. package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
  182. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts +4 -4
  183. package/lib/esm/hierarchies/imodel/TreeNodesReader.d.ts.map +1 -1
  184. package/lib/esm/hierarchies/imodel/TreeNodesReader.js +6 -4
  185. package/lib/esm/hierarchies/imodel/TreeNodesReader.js.map +1 -1
  186. package/lib/esm/hierarchies/imodel/Utils.d.ts +1 -1
  187. package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
  188. package/lib/esm/hierarchies/imodel/Utils.js +1 -1
  189. package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
  190. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts +1 -1
  191. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
  192. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js +6 -6
  193. package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
  194. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts +3 -3
  195. package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
  196. package/lib/esm/hierarchies/imodel/operators/Grouping.js +22 -22
  197. package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
  198. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts +1 -1
  199. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
  200. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +10 -10
  201. package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
  202. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts +1 -1
  203. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
  204. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js +14 -14
  205. package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
  206. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts +1 -1
  207. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.d.ts.map +1 -1
  208. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js +1 -1
  209. package/lib/esm/hierarchies/imodel/operators/grouping/AutoExpand.js.map +1 -1
  210. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts +3 -3
  211. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
  212. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +2 -2
  213. package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
  214. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts +3 -3
  215. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
  216. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +1 -1
  217. package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
  218. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts +1 -1
  219. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
  220. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -1
  221. package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
  222. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts +2 -2
  223. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
  224. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js +1 -1
  225. package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
  226. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts +3 -3
  227. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
  228. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +9 -14
  229. package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
  230. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts +2 -2
  231. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
  232. package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
  233. package/lib/esm/hierarchies/internal/Common.d.ts +1 -1
  234. package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
  235. package/lib/esm/hierarchies/internal/Common.js +2 -1
  236. package/lib/esm/hierarchies/internal/Common.js.map +1 -1
  237. package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
  238. package/lib/esm/hierarchies/internal/EachValueFrom.js +3 -0
  239. package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
  240. package/lib/esm/hierarchies/internal/LoggingUtils.js +1 -1
  241. package/lib/esm/hierarchies/internal/LoggingUtils.js.map +1 -1
  242. package/lib/esm/hierarchies/internal/operators/Sorting.js +1 -1
  243. package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -1
  244. package/lib/esm/presentation-hierarchies.d.ts +13 -13
  245. package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
  246. package/lib/esm/presentation-hierarchies.js +13 -13
  247. package/lib/esm/presentation-hierarchies.js.map +1 -1
  248. package/package.json +24 -15
@@ -4,14 +4,14 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor = exports.ECSQL_COLUMN_NAME_FilterTargetOptions = exports.ECSQL_COLUMN_NAME_IsFilterTarget = exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths = exports.FilteringHierarchyDefinition = void 0;
7
+ exports.ECSQL_COLUMN_NAME_FilterClassName = exports.ECSQL_COLUMN_NAME_FilterECInstanceId = exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor = exports.FilteringHierarchyDefinition = void 0;
8
8
  exports.applyECInstanceIdsFilter = applyECInstanceIdsFilter;
9
- const HierarchyFiltering_1 = require("../HierarchyFiltering");
10
- const HierarchyNode_1 = require("../HierarchyNode");
11
- const HierarchyNodeIdentifier_1 = require("../HierarchyNodeIdentifier");
12
- const IModelHierarchyDefinition_1 = require("./IModelHierarchyDefinition");
13
- const IModelHierarchyNode_1 = require("./IModelHierarchyNode");
14
- const TreeNodesReader_1 = require("./TreeNodesReader");
9
+ const HierarchyFiltering_js_1 = require("../HierarchyFiltering.js");
10
+ const HierarchyNode_js_1 = require("../HierarchyNode.js");
11
+ const HierarchyNodeIdentifier_js_1 = require("../HierarchyNodeIdentifier.js");
12
+ const IModelHierarchyDefinition_js_1 = require("./IModelHierarchyDefinition.js");
13
+ const IModelHierarchyNode_js_1 = require("./IModelHierarchyNode.js");
14
+ const TreeNodesReader_js_1 = require("./TreeNodesReader.js");
15
15
  /** @internal */
16
16
  class FilteringHierarchyDefinition {
17
17
  _imodelAccess;
@@ -34,7 +34,7 @@ class FilteringHierarchyDefinition {
34
34
  }
35
35
  shouldExpandGroupingNode(node) {
36
36
  for (const child of node.children) {
37
- // istanbul ignore next
37
+ /* c8 ignore next 3 */
38
38
  if (!child.filtering) {
39
39
  continue;
40
40
  }
@@ -57,7 +57,7 @@ class FilteringHierarchyDefinition {
57
57
  }
58
58
  }
59
59
  if (!child.filtering.filteredChildrenIdentifierPaths) {
60
- // istanbul ignore next
60
+ /* c8 ignore next */
61
61
  continue;
62
62
  }
63
63
  for (const path of child.filtering.filteredChildrenIdentifierPaths) {
@@ -72,23 +72,22 @@ class FilteringHierarchyDefinition {
72
72
  return async (node) => {
73
73
  const processedNode = this._source.postProcessNode ? await this._source.postProcessNode(node) : node;
74
74
  // instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing
75
- if (IModelHierarchyNode_1.ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {
75
+ if (IModelHierarchyNode_js_1.ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {
76
76
  Object.assign(processedNode, { autoExpand: true });
77
77
  }
78
78
  return processedNode;
79
79
  };
80
80
  }
81
81
  get parseNode() {
82
- return (row) => {
82
+ return async (row, parentNode) => {
83
83
  const hasFilterTargetAncestor = !!row[exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor];
84
- const isFilterTarget = !!row[exports.ECSQL_COLUMN_NAME_IsFilterTarget];
85
- const filterTargetOptions = row[exports.ECSQL_COLUMN_NAME_FilterTargetOptions]
86
- ? JSON.parse(row[exports.ECSQL_COLUMN_NAME_FilterTargetOptions])
87
- : undefined;
88
- const filteredChildrenIdentifierPaths = row[exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths]
89
- ? JSON.parse(row[exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths])
90
- : undefined;
91
- const defaultNode = (this._source.parseNode ?? TreeNodesReader_1.defaultNodesParser)(row);
84
+ const { filteredChildrenIdentifierPaths, filterTargetOptions, isFilterTarget } = row[exports.ECSQL_COLUMN_NAME_FilterECInstanceId] && row[exports.ECSQL_COLUMN_NAME_FilterClassName]
85
+ ? await this.getChildrenIdentifierPaths(parentNode?.filtering?.filteredChildrenIdentifierPaths ?? this._nodeIdentifierPaths, {
86
+ className: row[exports.ECSQL_COLUMN_NAME_FilterClassName],
87
+ id: row[exports.ECSQL_COLUMN_NAME_FilterECInstanceId],
88
+ })
89
+ : { filteredChildrenIdentifierPaths: [], filterTargetOptions: undefined, isFilterTarget: false };
90
+ const defaultNode = await (this._source.parseNode ?? TreeNodesReader_js_1.defaultNodesParser)(row);
92
91
  return applyFilterAttributes({
93
92
  node: defaultNode,
94
93
  filteredChildrenIdentifierPaths,
@@ -98,18 +97,61 @@ class FilteringHierarchyDefinition {
98
97
  });
99
98
  };
100
99
  }
100
+ async getChildrenIdentifierPaths(filteredChildrenNodeIdentifierPaths, providedIdentifier) {
101
+ const { id, className } = providedIdentifier;
102
+ let filteredChildrenIdentifierPaths;
103
+ let isFilterTarget = false;
104
+ let filterTargetOptions;
105
+ for (const filteredChildrenNodeIdentifierPath of filteredChildrenNodeIdentifierPaths) {
106
+ const { path, options } = HierarchyFiltering_js_1.HierarchyFilteringPath.normalize(filteredChildrenNodeIdentifierPath);
107
+ /* c8 ignore next 3 */
108
+ if (path.length === 0) {
109
+ continue;
110
+ }
111
+ // We need to check if identifiers have the same id and imodelKey and are
112
+ // of the same class / derived class / is derived from class
113
+ const identifier = path[0];
114
+ if (identifier.id !== id) {
115
+ continue;
116
+ }
117
+ if (HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {
118
+ if (identifier.imodelKey && identifier.imodelKey !== this._imodelAccess.imodelKey) {
119
+ continue;
120
+ }
121
+ if (identifier.className !== className &&
122
+ !(await this._imodelAccess.classDerivesFrom(identifier.className, className)) &&
123
+ !(await this._imodelAccess.classDerivesFrom(className, identifier.className))) {
124
+ continue;
125
+ }
126
+ }
127
+ if (!filteredChildrenIdentifierPaths) {
128
+ filteredChildrenIdentifierPaths = [];
129
+ }
130
+ if (path.length > 1) {
131
+ filteredChildrenIdentifierPaths.push(options ? { path: path.slice(1), options } : path.slice(1));
132
+ }
133
+ else if (isFilterTarget) {
134
+ filterTargetOptions = HierarchyFiltering_js_1.HierarchyFilteringPath.mergeOptions(filterTargetOptions, options);
135
+ }
136
+ else {
137
+ isFilterTarget = true;
138
+ filterTargetOptions = options;
139
+ }
140
+ }
141
+ return { filteredChildrenIdentifierPaths, filterTargetOptions, isFilterTarget };
142
+ }
101
143
  async defineHierarchyLevel(props) {
102
144
  const sourceDefinitions = await this._source.defineHierarchyLevel(props);
103
- const filteringProps = (0, HierarchyFiltering_1.extractFilteringProps)(this._nodeIdentifierPaths, props.parentNode);
145
+ const filteringProps = (0, HierarchyFiltering_js_1.extractFilteringProps)(this._nodeIdentifierPaths, props.parentNode);
104
146
  if (!filteringProps) {
105
147
  return sourceDefinitions;
106
148
  }
107
149
  const filteredDefinitions = [];
108
150
  await Promise.all(sourceDefinitions.map(async (definition) => {
109
151
  let matchedDefinition;
110
- if (IModelHierarchyDefinition_1.HierarchyNodesDefinition.isGenericNode(definition)) {
152
+ if (IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isGenericNode(definition)) {
111
153
  matchedDefinition = await matchFilters(definition, filteringProps, async (id) => {
112
- return (HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isGenericNodeIdentifier(id) &&
154
+ return (HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isGenericNodeIdentifier(id) &&
113
155
  (!id.source || id.source === this._imodelAccess.imodelKey) &&
114
156
  id.id === definition.node.key);
115
157
  }, this._imodelAccess, (def, matchingFilters) => {
@@ -120,6 +162,7 @@ class FilteringHierarchyDefinition {
120
162
  node: def.node,
121
163
  filteredChildrenIdentifierPaths,
122
164
  isFilterTarget: matchingFilters.some((mc) => mc.isFilterTarget),
165
+ filterTargetOptions: matchingFilters.find((mc) => mc.isFilterTarget)?.filterTargetOptions,
123
166
  hasFilterTargetAncestor: filteringProps.hasFilterTargetAncestor,
124
167
  }),
125
168
  };
@@ -127,10 +170,10 @@ class FilteringHierarchyDefinition {
127
170
  }
128
171
  else {
129
172
  matchedDefinition = await matchFilters(definition, filteringProps, async (id) => {
130
- return (HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(id) &&
173
+ return (HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(id) &&
131
174
  (!id.imodelKey || id.imodelKey === this._imodelAccess.imodelKey) &&
132
175
  (await this._imodelAccess.classDerivesFrom(id.className, definition.fullClassName)));
133
- }, this._imodelAccess, (def, matchingFilters) => applyECInstanceIdsFilter(def, matchingFilters, !!filteringProps.hasFilterTargetAncestor));
176
+ }, this._imodelAccess, (def, matchingFilters) => applyECInstanceIdsFilter(def, matchingFilters, !!filteringProps.hasFilterTargetAncestor), false);
134
177
  }
135
178
  if (matchedDefinition) {
136
179
  filteredDefinitions.push(matchedDefinition);
@@ -140,11 +183,11 @@ class FilteringHierarchyDefinition {
140
183
  }
141
184
  }
142
185
  exports.FilteringHierarchyDefinition = FilteringHierarchyDefinition;
143
- async function matchFilters(definition, filteringProps, predicate, classHierarchy, matchedDefinitionProcessor) {
186
+ async function matchFilters(definition, filteringProps, predicate, classHierarchy, matchedDefinitionProcessor, extractPathsAndOptions = true) {
144
187
  const { filteredNodePaths, hasFilterTargetAncestor } = filteringProps;
145
188
  const matchingFilters = [];
146
189
  for (const filteredNodePath of filteredNodePaths) {
147
- const { path, options } = HierarchyFiltering_1.HierarchyFilteringPath.normalize(filteredNodePath);
190
+ const { path, options } = HierarchyFiltering_js_1.HierarchyFilteringPath.normalize(filteredNodePath);
148
191
  if (path.length === 0) {
149
192
  continue;
150
193
  }
@@ -161,12 +204,14 @@ async function matchFilters(definition, filteringProps, predicate, classHierarch
161
204
  };
162
205
  matchingFilters.push(entry);
163
206
  }
164
- const remainingPath = path.slice(1);
165
- if (remainingPath.length > 0) {
166
- entry.childrenIdentifierPaths.push(options ? { path: remainingPath, options } : remainingPath);
207
+ if (!extractPathsAndOptions) {
208
+ continue;
209
+ }
210
+ if (path.length > 1) {
211
+ entry.childrenIdentifierPaths.push(options ? { path: path.slice(1), options } : path.slice(1));
167
212
  }
168
213
  else if (entry.isFilterTarget) {
169
- entry.filterTargetOptions = HierarchyFiltering_1.HierarchyFilteringPath.mergeOptions(entry.filterTargetOptions, options);
214
+ entry.filterTargetOptions = HierarchyFiltering_js_1.HierarchyFilteringPath.mergeOptions(entry.filterTargetOptions, options);
170
215
  }
171
216
  else {
172
217
  Object.assign(entry, { isFilterTarget: true, filterTargetOptions: options });
@@ -187,24 +232,24 @@ async function findMatchingFilterEntry(filters, nodeId, classHierarchy) {
187
232
  return undefined;
188
233
  }
189
234
  async function identifiersEqual(lhs, rhs, classHierarchy) {
190
- if (HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(lhs) && HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(rhs)) {
235
+ if (HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(lhs) && HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(rhs)) {
191
236
  return (lhs.id === rhs.id &&
192
237
  (lhs.className === rhs.className ||
193
238
  (await classHierarchy.classDerivesFrom(lhs.className, rhs.className)) ||
194
239
  (await classHierarchy.classDerivesFrom(rhs.className, lhs.className))));
195
240
  }
196
- return HierarchyNodeIdentifier_1.HierarchyNodeIdentifier.equal(lhs, rhs);
241
+ return HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.equal(lhs, rhs);
197
242
  }
198
243
  function applyFilterAttributes(props) {
199
244
  const { node, filteredChildrenIdentifierPaths } = props;
200
245
  const result = { ...node };
201
246
  const shouldAutoExpand = !!filteredChildrenIdentifierPaths?.some((childPath) => {
202
- return !!HierarchyFiltering_1.HierarchyFilteringPath.normalize(childPath).options?.autoExpand;
247
+ return !!HierarchyFiltering_js_1.HierarchyFilteringPath.normalize(childPath).options?.autoExpand;
203
248
  });
204
249
  if (shouldAutoExpand) {
205
250
  result.autoExpand = true;
206
251
  }
207
- const filteringProps = HierarchyNode_1.HierarchyNodeFilteringProps.create(props);
252
+ const filteringProps = HierarchyNode_js_1.HierarchyNodeFilteringProps.create(props);
208
253
  if (filteringProps) {
209
254
  result.filtering = filteringProps;
210
255
  }
@@ -212,44 +257,53 @@ function applyFilterAttributes(props) {
212
257
  }
213
258
  /** @internal */
214
259
  // eslint-disable-next-line @typescript-eslint/naming-convention
215
- exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths = "FilteredChildrenPaths";
216
- /** @internal */
217
- // eslint-disable-next-line @typescript-eslint/naming-convention
218
- exports.ECSQL_COLUMN_NAME_IsFilterTarget = "IsFilterTarget";
260
+ exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor = "HasFilterTargetAncestor";
219
261
  /** @internal */
220
262
  // eslint-disable-next-line @typescript-eslint/naming-convention
221
- exports.ECSQL_COLUMN_NAME_FilterTargetOptions = "FilterTargetOptions";
263
+ exports.ECSQL_COLUMN_NAME_FilterECInstanceId = "FilterECInstanceId";
222
264
  /** @internal */
223
265
  // eslint-disable-next-line @typescript-eslint/naming-convention
224
- exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor = "HasFilterTargetAncestor";
266
+ exports.ECSQL_COLUMN_NAME_FilterClassName = "FilterClassName";
267
+ function getClassECInstanceIds(matchingFilters) {
268
+ const classNameECInstanceIds = new Map();
269
+ for (const matchingFilter of matchingFilters) {
270
+ const entry = classNameECInstanceIds.get(matchingFilter.id.className);
271
+ if (entry === undefined) {
272
+ classNameECInstanceIds.set(matchingFilter.id.className, [matchingFilter.id.id]);
273
+ continue;
274
+ }
275
+ entry.push(matchingFilter.id.id);
276
+ }
277
+ return classNameECInstanceIds;
278
+ }
225
279
  /** @internal */
226
280
  function applyECInstanceIdsFilter(def, matchingFilters, hasFilterTargetAncestor) {
227
281
  if (matchingFilters.length === 0) {
228
282
  return def;
229
283
  }
284
+ const matchingFiltersToUse = getClassECInstanceIds(matchingFilters);
230
285
  return {
231
286
  ...def,
232
287
  query: {
233
288
  ...def.query,
234
289
  ctes: [
235
290
  ...(def.query.ctes ?? []),
236
- // note: generally we'd use `VALUES (1,1),(2,2)`, but that doesn't work in ECSQL (https://github.com/iTwin/itwinjs-backlog/issues/865),
237
- // so using UNION as a workaround
238
- `FilteringInfo(ECInstanceId, IsFilterTarget, FilterTargetOptions, FilteredChildrenPaths) AS (
239
- ${matchingFilters
240
- .map((mc) => mc.isFilterTarget
241
- ? `VALUES (${mc.id.id}, 1, ${mc.filterTargetOptions ? `'${JSON.stringify(mc.filterTargetOptions)}'` : "CAST(NULL AS TEXT)"}, '${JSON.stringify(mc.childrenIdentifierPaths)}')`
242
- : `VALUES (${mc.id.id}, 0, CAST(NULL AS TEXT), '${JSON.stringify(mc.childrenIdentifierPaths)}')`)
291
+ `FilteringInfo(ECInstanceId, FilterClassName) AS (
292
+ ${Array.from(matchingFiltersToUse)
293
+ .map(([className, ecInstanceIds]) => `
294
+ SELECT ECInstanceId, '${className}' AS FilterClassName
295
+ FROM ${className}
296
+ WHERE ECInstanceId IN (${ecInstanceIds.join(", ")})
297
+ `)
243
298
  .join(" UNION ALL ")}
244
299
  )`,
245
300
  ],
246
301
  ecsql: `
247
302
  SELECT
248
303
  [q].*,
249
- [f].[IsFilterTarget] AS [${exports.ECSQL_COLUMN_NAME_IsFilterTarget}],
250
- [f].[FilterTargetOptions] AS [${exports.ECSQL_COLUMN_NAME_FilterTargetOptions}],
251
304
  ${hasFilterTargetAncestor ? "1" : "0"} AS [${exports.ECSQL_COLUMN_NAME_HasFilterTargetAncestor}],
252
- [f].[FilteredChildrenPaths] AS [${exports.ECSQL_COLUMN_NAME_FilteredChildrenPaths}]
305
+ IdToHex([f].[ECInstanceId]) AS [${exports.ECSQL_COLUMN_NAME_FilterECInstanceId}],
306
+ [f].[FilterClassName] AS [${exports.ECSQL_COLUMN_NAME_FilterClassName}]
253
307
  FROM (
254
308
  ${def.query.ecsql}
255
309
  ) [q]
@@ -1 +1 @@
1
- {"version":3,"file":"FilteringHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/FilteringHierarchyDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { extractFilteringProps, HierarchyFilteringPath, HierarchyFilteringPathOptions } from \"../HierarchyFiltering\";\nimport { HierarchyNodeFilteringProps } from \"../HierarchyNode\";\nimport { HierarchyNodeIdentifier } from \"../HierarchyNodeIdentifier\";\nimport { GenericNodeKey } from \"../HierarchyNodeKey\";\nimport {\n DefineHierarchyLevelProps,\n GenericHierarchyNodeDefinition,\n HierarchyDefinition,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n InstanceNodesQueryDefinition,\n NodeParser,\n NodePostProcessor,\n NodePreProcessor,\n} from \"./IModelHierarchyDefinition\";\nimport { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode, SourceHierarchyNode, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode\";\nimport { defaultNodesParser } from \"./TreeNodesReader\";\n\ninterface FilteringHierarchyDefinitionProps {\n imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n source: HierarchyDefinition;\n nodeIdentifierPaths: HierarchyFilteringPath[];\n}\n\n/** @internal */\nexport class FilteringHierarchyDefinition implements HierarchyDefinition {\n private _imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n private _source: HierarchyDefinition;\n private _nodeIdentifierPaths: HierarchyFilteringPath[];\n\n public constructor(props: FilteringHierarchyDefinitionProps) {\n this._imodelAccess = props.imodelAccess;\n this._source = props.source;\n this._nodeIdentifierPaths = props.nodeIdentifierPaths;\n }\n\n public get preProcessNode(): NodePreProcessor {\n return async (node) => {\n const processedNode = this._source.preProcessNode ? await this._source.preProcessNode(node) : node;\n if (processedNode?.processingParams?.hideInHierarchy && processedNode.filtering?.isFilterTarget && !processedNode.filtering.hasFilterTargetAncestor) {\n // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another filter target\n return undefined;\n }\n return processedNode;\n };\n }\n\n private shouldExpandGroupingNode(node: ProcessedGroupingHierarchyNode) {\n for (const child of node.children) {\n // istanbul ignore next\n if (!child.filtering) {\n continue;\n }\n\n if (child.filtering.isFilterTarget) {\n const childAutoExpand = child.filtering.filterTargetOptions?.autoExpand;\n\n // If child is a filter target and is has no `autoExpand` flag, then it's always to be expanded.\n if (childAutoExpand === true) {\n return true;\n }\n\n // If it's not an object and not `true`, then it's falsy - continue looking\n if (typeof childAutoExpand !== \"object\") {\n continue;\n }\n\n // If grouping node's child has `autoExpandUntil` flag,\n // auto-expand the grouping node only if it's depth is lower than that of the grouping node in associated with the target.\n const nodeDepth = node.parentKeys.length;\n const filterTargetDepth = childAutoExpand.depth;\n if (nodeDepth < filterTargetDepth) {\n return true;\n }\n }\n\n if (!child.filtering.filteredChildrenIdentifierPaths) {\n // istanbul ignore next\n continue;\n }\n\n for (const path of child.filtering.filteredChildrenIdentifierPaths) {\n if (\"path\" in path && path.options?.autoExpand) {\n return true;\n }\n }\n }\n return false;\n }\n\n public get postProcessNode(): NodePostProcessor {\n return async (node: ProcessedHierarchyNode) => {\n const processedNode = this._source.postProcessNode ? await this._source.postProcessNode(node) : node;\n // instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing\n if (ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {\n Object.assign(processedNode, { autoExpand: true });\n }\n return processedNode;\n };\n }\n\n public get parseNode(): NodeParser {\n return (row: { [columnName: string]: any }): SourceInstanceHierarchyNode => {\n const hasFilterTargetAncestor: boolean = !!row[ECSQL_COLUMN_NAME_HasFilterTargetAncestor];\n const isFilterTarget: boolean = !!row[ECSQL_COLUMN_NAME_IsFilterTarget];\n const filterTargetOptions: HierarchyFilteringPathOptions | undefined = row[ECSQL_COLUMN_NAME_FilterTargetOptions]\n ? JSON.parse(row[ECSQL_COLUMN_NAME_FilterTargetOptions])\n : undefined;\n const filteredChildrenIdentifierPaths: HierarchyFilteringPath[] | undefined = row[ECSQL_COLUMN_NAME_FilteredChildrenPaths]\n ? JSON.parse(row[ECSQL_COLUMN_NAME_FilteredChildrenPaths])\n : undefined;\n const defaultNode = (this._source.parseNode ?? defaultNodesParser)(row);\n return applyFilterAttributes({\n node: defaultNode,\n filteredChildrenIdentifierPaths,\n isFilterTarget,\n filterTargetOptions,\n hasFilterTargetAncestor,\n });\n };\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const sourceDefinitions = await this._source.defineHierarchyLevel(props);\n const filteringProps = extractFilteringProps(this._nodeIdentifierPaths, props.parentNode);\n if (!filteringProps) {\n return sourceDefinitions;\n }\n\n const filteredDefinitions: HierarchyLevelDefinition = [];\n await Promise.all(\n sourceDefinitions.map(async (definition) => {\n let matchedDefinition: HierarchyNodesDefinition | undefined;\n if (HierarchyNodesDefinition.isGenericNode(definition)) {\n matchedDefinition = await matchFilters<GenericNodeKey>(\n definition,\n filteringProps,\n async (id) => {\n return (\n HierarchyNodeIdentifier.isGenericNodeIdentifier(id) &&\n (!id.source || id.source === this._imodelAccess.imodelKey) &&\n id.id === definition.node.key\n );\n },\n this._imodelAccess,\n (def, matchingFilters) => {\n const filteredChildrenIdentifierPaths = matchingFilters.reduce(\n (r, c) => [...r, ...c.childrenIdentifierPaths],\n new Array<HierarchyFilteringPath>(),\n );\n return {\n ...def,\n node: applyFilterAttributes({\n node: def.node,\n filteredChildrenIdentifierPaths,\n isFilterTarget: matchingFilters.some((mc) => mc.isFilterTarget),\n hasFilterTargetAncestor: filteringProps.hasFilterTargetAncestor,\n }),\n };\n },\n );\n } else {\n matchedDefinition = await matchFilters<InstanceKey>(\n definition,\n filteringProps,\n async (id) => {\n return (\n HierarchyNodeIdentifier.isInstanceNodeIdentifier(id) &&\n (!id.imodelKey || id.imodelKey === this._imodelAccess.imodelKey) &&\n (await this._imodelAccess.classDerivesFrom(id.className, definition.fullClassName))\n );\n },\n this._imodelAccess,\n (def, matchingFilters) => applyECInstanceIdsFilter(def, matchingFilters, !!filteringProps.hasFilterTargetAncestor),\n );\n }\n if (matchedDefinition) {\n filteredDefinitions.push(matchedDefinition);\n }\n }),\n );\n return filteredDefinitions;\n }\n}\n\ntype MatchedFilter<TIdentifier extends HierarchyNodeIdentifier> = {\n id: TIdentifier;\n childrenIdentifierPaths: HierarchyFilteringPath[];\n} & ({ isFilterTarget: false } | { isFilterTarget: true; filterTargetOptions?: HierarchyFilteringPathOptions });\n\nasync function matchFilters<\n TIdentifier extends HierarchyNodeIdentifier,\n TDefinition = TIdentifier extends InstanceKey ? InstanceNodesQueryDefinition : GenericHierarchyNodeDefinition,\n>(\n definition: TDefinition,\n filteringProps: { filteredNodePaths: HierarchyFilteringPath[]; hasFilterTargetAncestor?: boolean },\n predicate: (id: HierarchyNodeIdentifier) => Promise<boolean>,\n classHierarchy: ECClassHierarchyInspector,\n matchedDefinitionProcessor: (def: TDefinition, matchingFilters: Array<MatchedFilter<TIdentifier>>) => TDefinition,\n): Promise<TDefinition | undefined> {\n const { filteredNodePaths, hasFilterTargetAncestor } = filteringProps;\n const matchingFilters: Array<MatchedFilter<TIdentifier>> = [];\n for (const filteredNodePath of filteredNodePaths) {\n const { path, options } = HierarchyFilteringPath.normalize(filteredNodePath);\n if (path.length === 0) {\n continue;\n }\n const nodeId = path[0];\n if (await predicate(nodeId)) {\n let entry = await findMatchingFilterEntry(matchingFilters, nodeId, classHierarchy);\n if (!entry) {\n entry = {\n // ideally, `predicate` would act as a type guard to guarantee that `id` is `TIdentifier`, but at the moment\n // async type guards aren't supported\n id: nodeId as TIdentifier,\n childrenIdentifierPaths: [],\n isFilterTarget: false,\n };\n matchingFilters.push(entry);\n }\n const remainingPath = path.slice(1);\n if (remainingPath.length > 0) {\n entry.childrenIdentifierPaths.push(options ? { path: remainingPath, options } : remainingPath);\n } else if (entry.isFilterTarget) {\n entry.filterTargetOptions = HierarchyFilteringPath.mergeOptions(entry.filterTargetOptions, options);\n } else {\n Object.assign(entry, { isFilterTarget: true, filterTargetOptions: options });\n }\n }\n }\n if (hasFilterTargetAncestor || matchingFilters.length > 0) {\n return matchedDefinitionProcessor(definition, matchingFilters);\n }\n return undefined;\n}\n\nasync function findMatchingFilterEntry<TEntry extends { id: TIdentifier }, TIdentifier extends HierarchyNodeIdentifier>(\n filters: TEntry[],\n nodeId: TIdentifier,\n classHierarchy: ECClassHierarchyInspector,\n): Promise<TEntry | undefined> {\n for (const filter of filters) {\n if (await identifiersEqual(filter.id, nodeId, classHierarchy)) {\n return filter;\n }\n }\n return undefined;\n}\n\nasync function identifiersEqual<TIdentifier extends HierarchyNodeIdentifier>(lhs: TIdentifier, rhs: TIdentifier, classHierarchy: ECClassHierarchyInspector) {\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(lhs) && HierarchyNodeIdentifier.isInstanceNodeIdentifier(rhs)) {\n return (\n lhs.id === rhs.id &&\n (lhs.className === rhs.className ||\n (await classHierarchy.classDerivesFrom(lhs.className, rhs.className)) ||\n (await classHierarchy.classDerivesFrom(rhs.className, lhs.className)))\n );\n }\n return HierarchyNodeIdentifier.equal(lhs, rhs);\n}\n\nfunction applyFilterAttributes<TNode extends SourceHierarchyNode>(props: {\n node: TNode;\n filteredChildrenIdentifierPaths: HierarchyFilteringPath[] | undefined;\n isFilterTarget?: boolean;\n filterTargetOptions?: HierarchyFilteringPathOptions;\n hasFilterTargetAncestor: boolean;\n}): TNode {\n const { node, filteredChildrenIdentifierPaths } = props;\n const result = { ...node };\n\n const shouldAutoExpand = !!filteredChildrenIdentifierPaths?.some((childPath) => {\n return !!HierarchyFilteringPath.normalize(childPath).options?.autoExpand;\n });\n if (shouldAutoExpand) {\n result.autoExpand = true;\n }\n\n const filteringProps = HierarchyNodeFilteringProps.create(props);\n if (filteringProps) {\n result.filtering = filteringProps;\n }\n\n return result;\n}\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilteredChildrenPaths = \"FilteredChildrenPaths\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_IsFilterTarget = \"IsFilterTarget\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilterTargetOptions = \"FilterTargetOptions\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_HasFilterTargetAncestor = \"HasFilterTargetAncestor\";\n\n/** @internal */\nexport function applyECInstanceIdsFilter(\n def: InstanceNodesQueryDefinition,\n matchingFilters: Array<MatchedFilter<InstanceKey>>,\n hasFilterTargetAncestor: boolean,\n): InstanceNodesQueryDefinition {\n if (matchingFilters.length === 0) {\n return def;\n }\n return {\n ...def,\n query: {\n ...def.query,\n ctes: [\n ...(def.query.ctes ?? []),\n // note: generally we'd use `VALUES (1,1),(2,2)`, but that doesn't work in ECSQL (https://github.com/iTwin/itwinjs-backlog/issues/865),\n // so using UNION as a workaround\n `FilteringInfo(ECInstanceId, IsFilterTarget, FilterTargetOptions, FilteredChildrenPaths) AS (\n ${matchingFilters\n .map((mc) =>\n mc.isFilterTarget\n ? `VALUES (${mc.id.id}, 1, ${mc.filterTargetOptions ? `'${JSON.stringify(mc.filterTargetOptions)}'` : \"CAST(NULL AS TEXT)\"}, '${JSON.stringify(mc.childrenIdentifierPaths)}')`\n : `VALUES (${mc.id.id}, 0, CAST(NULL AS TEXT), '${JSON.stringify(mc.childrenIdentifierPaths)}')`,\n )\n .join(\" UNION ALL \")}\n )`,\n ],\n ecsql: `\n SELECT\n [q].*,\n [f].[IsFilterTarget] AS [${ECSQL_COLUMN_NAME_IsFilterTarget}],\n [f].[FilterTargetOptions] AS [${ECSQL_COLUMN_NAME_FilterTargetOptions}],\n ${hasFilterTargetAncestor ? \"1\" : \"0\"} AS [${ECSQL_COLUMN_NAME_HasFilterTargetAncestor}],\n [f].[FilteredChildrenPaths] AS [${ECSQL_COLUMN_NAME_FilteredChildrenPaths}]\n FROM (\n ${def.query.ecsql}\n ) [q]\n ${hasFilterTargetAncestor ? \"LEFT \" : \"\"} JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]\n `,\n },\n };\n}\n"]}
1
+ {"version":3,"file":"FilteringHierarchyDefinition.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/FilteringHierarchyDefinition.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { ECClassHierarchyInspector, InstanceKey } from \"@itwin/presentation-shared\";\nimport { extractFilteringProps, HierarchyFilteringPath, HierarchyFilteringPathOptions } from \"../HierarchyFiltering.js\";\nimport { HierarchyNodeFilteringProps } from \"../HierarchyNode.js\";\nimport { HierarchyNodeIdentifier } from \"../HierarchyNodeIdentifier.js\";\nimport { GenericNodeKey } from \"../HierarchyNodeKey.js\";\nimport {\n DefineHierarchyLevelProps,\n GenericHierarchyNodeDefinition,\n HierarchyDefinition,\n HierarchyDefinitionParentNode,\n HierarchyLevelDefinition,\n HierarchyNodesDefinition,\n InstanceNodesQueryDefinition,\n NodeParser,\n NodePostProcessor,\n NodePreProcessor,\n} from \"./IModelHierarchyDefinition.js\";\nimport { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode, SourceHierarchyNode, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\nimport { defaultNodesParser } from \"./TreeNodesReader.js\";\n\ninterface FilteringHierarchyDefinitionProps {\n imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n source: HierarchyDefinition;\n nodeIdentifierPaths: HierarchyFilteringPath[];\n}\n\n/** @internal */\nexport class FilteringHierarchyDefinition implements HierarchyDefinition {\n private _imodelAccess: ECClassHierarchyInspector & { imodelKey: string };\n private _source: HierarchyDefinition;\n private _nodeIdentifierPaths: HierarchyFilteringPath[];\n\n public constructor(props: FilteringHierarchyDefinitionProps) {\n this._imodelAccess = props.imodelAccess;\n this._source = props.source;\n this._nodeIdentifierPaths = props.nodeIdentifierPaths;\n }\n\n public get preProcessNode(): NodePreProcessor {\n return async (node) => {\n const processedNode = this._source.preProcessNode ? await this._source.preProcessNode(node) : node;\n if (processedNode?.processingParams?.hideInHierarchy && processedNode.filtering?.isFilterTarget && !processedNode.filtering.hasFilterTargetAncestor) {\n // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another filter target\n return undefined;\n }\n return processedNode;\n };\n }\n\n private shouldExpandGroupingNode(node: ProcessedGroupingHierarchyNode) {\n for (const child of node.children) {\n /* c8 ignore next 3 */\n if (!child.filtering) {\n continue;\n }\n\n if (child.filtering.isFilterTarget) {\n const childAutoExpand = child.filtering.filterTargetOptions?.autoExpand;\n\n // If child is a filter target and is has no `autoExpand` flag, then it's always to be expanded.\n if (childAutoExpand === true) {\n return true;\n }\n\n // If it's not an object and not `true`, then it's falsy - continue looking\n if (typeof childAutoExpand !== \"object\") {\n continue;\n }\n\n // If grouping node's child has `autoExpandUntil` flag,\n // auto-expand the grouping node only if it's depth is lower than that of the grouping node in associated with the target.\n const nodeDepth = node.parentKeys.length;\n const filterTargetDepth = childAutoExpand.depth;\n if (nodeDepth < filterTargetDepth) {\n return true;\n }\n }\n\n if (!child.filtering.filteredChildrenIdentifierPaths) {\n /* c8 ignore next */\n continue;\n }\n\n for (const path of child.filtering.filteredChildrenIdentifierPaths) {\n if (\"path\" in path && path.options?.autoExpand) {\n return true;\n }\n }\n }\n return false;\n }\n\n public get postProcessNode(): NodePostProcessor {\n return async (node: ProcessedHierarchyNode) => {\n const processedNode = this._source.postProcessNode ? await this._source.postProcessNode(node) : node;\n // instance nodes get the auto-expand flag in `parseNode`, but grouping ones need to be handled during post-processing\n if (ProcessedHierarchyNode.isGroupingNode(node) && this.shouldExpandGroupingNode(node)) {\n Object.assign(processedNode, { autoExpand: true });\n }\n return processedNode;\n };\n }\n\n public get parseNode(): NodeParser {\n return async (row: { [columnName: string]: any }, parentNode?: HierarchyDefinitionParentNode): Promise<SourceInstanceHierarchyNode> => {\n const hasFilterTargetAncestor: boolean = !!row[ECSQL_COLUMN_NAME_HasFilterTargetAncestor];\n\n const { filteredChildrenIdentifierPaths, filterTargetOptions, isFilterTarget } =\n row[ECSQL_COLUMN_NAME_FilterECInstanceId] && row[ECSQL_COLUMN_NAME_FilterClassName]\n ? await this.getChildrenIdentifierPaths(parentNode?.filtering?.filteredChildrenIdentifierPaths ?? this._nodeIdentifierPaths, {\n className: row[ECSQL_COLUMN_NAME_FilterClassName],\n id: row[ECSQL_COLUMN_NAME_FilterECInstanceId],\n })\n : { filteredChildrenIdentifierPaths: [], filterTargetOptions: undefined, isFilterTarget: false };\n\n const defaultNode = await (this._source.parseNode ?? defaultNodesParser)(row);\n return applyFilterAttributes({\n node: defaultNode,\n filteredChildrenIdentifierPaths,\n isFilterTarget,\n filterTargetOptions,\n hasFilterTargetAncestor,\n });\n };\n }\n\n private async getChildrenIdentifierPaths(filteredChildrenNodeIdentifierPaths: HierarchyFilteringPath[], providedIdentifier: InstanceKey) {\n const { id, className } = providedIdentifier;\n\n let filteredChildrenIdentifierPaths: HierarchyFilteringPath[] | undefined;\n let isFilterTarget = false;\n let filterTargetOptions: HierarchyFilteringPathOptions | undefined;\n for (const filteredChildrenNodeIdentifierPath of filteredChildrenNodeIdentifierPaths) {\n const { path, options } = HierarchyFilteringPath.normalize(filteredChildrenNodeIdentifierPath);\n /* c8 ignore next 3 */\n if (path.length === 0) {\n continue;\n }\n\n // We need to check if identifiers have the same id and imodelKey and are\n // of the same class / derived class / is derived from class\n const identifier = path[0];\n if (identifier.id !== id) {\n continue;\n }\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(identifier)) {\n if (identifier.imodelKey && identifier.imodelKey !== this._imodelAccess.imodelKey) {\n continue;\n }\n if (\n identifier.className !== className &&\n !(await this._imodelAccess.classDerivesFrom(identifier.className, className)) &&\n !(await this._imodelAccess.classDerivesFrom(className, identifier.className))\n ) {\n continue;\n }\n }\n if (!filteredChildrenIdentifierPaths) {\n filteredChildrenIdentifierPaths = [];\n }\n if (path.length > 1) {\n filteredChildrenIdentifierPaths.push(options ? { path: path.slice(1), options } : path.slice(1));\n } else if (isFilterTarget) {\n filterTargetOptions = HierarchyFilteringPath.mergeOptions(filterTargetOptions, options);\n } else {\n isFilterTarget = true;\n filterTargetOptions = options;\n }\n }\n return { filteredChildrenIdentifierPaths, filterTargetOptions, isFilterTarget };\n }\n\n public async defineHierarchyLevel(props: DefineHierarchyLevelProps): Promise<HierarchyLevelDefinition> {\n const sourceDefinitions = await this._source.defineHierarchyLevel(props);\n const filteringProps = extractFilteringProps(this._nodeIdentifierPaths, props.parentNode);\n if (!filteringProps) {\n return sourceDefinitions;\n }\n\n const filteredDefinitions: HierarchyLevelDefinition = [];\n await Promise.all(\n sourceDefinitions.map(async (definition) => {\n let matchedDefinition: HierarchyNodesDefinition | undefined;\n if (HierarchyNodesDefinition.isGenericNode(definition)) {\n matchedDefinition = await matchFilters<GenericNodeKey>(\n definition,\n filteringProps,\n async (id) => {\n return (\n HierarchyNodeIdentifier.isGenericNodeIdentifier(id) &&\n (!id.source || id.source === this._imodelAccess.imodelKey) &&\n id.id === definition.node.key\n );\n },\n this._imodelAccess,\n (def, matchingFilters) => {\n const filteredChildrenIdentifierPaths = matchingFilters.reduce(\n (r, c) => [...r, ...c.childrenIdentifierPaths],\n new Array<HierarchyFilteringPath>(),\n );\n return {\n ...def,\n node: applyFilterAttributes({\n node: def.node,\n filteredChildrenIdentifierPaths,\n isFilterTarget: matchingFilters.some((mc) => mc.isFilterTarget),\n filterTargetOptions: matchingFilters.find((mc) => mc.isFilterTarget)?.filterTargetOptions,\n hasFilterTargetAncestor: filteringProps.hasFilterTargetAncestor,\n }),\n };\n },\n );\n } else {\n matchedDefinition = await matchFilters<InstanceKey>(\n definition,\n filteringProps,\n async (id) => {\n return (\n HierarchyNodeIdentifier.isInstanceNodeIdentifier(id) &&\n (!id.imodelKey || id.imodelKey === this._imodelAccess.imodelKey) &&\n (await this._imodelAccess.classDerivesFrom(id.className, definition.fullClassName))\n );\n },\n this._imodelAccess,\n (def, matchingFilters) => applyECInstanceIdsFilter(def, matchingFilters, !!filteringProps.hasFilterTargetAncestor),\n false,\n );\n }\n if (matchedDefinition) {\n filteredDefinitions.push(matchedDefinition);\n }\n }),\n );\n return filteredDefinitions;\n }\n}\n\ntype MatchedFilter<TIdentifier extends HierarchyNodeIdentifier> = {\n id: TIdentifier;\n childrenIdentifierPaths: HierarchyFilteringPath[];\n} & ({ isFilterTarget: false } | { isFilterTarget: true; filterTargetOptions?: HierarchyFilteringPathOptions });\n\nasync function matchFilters<\n TIdentifier extends HierarchyNodeIdentifier,\n TDefinition = TIdentifier extends InstanceKey ? InstanceNodesQueryDefinition : GenericHierarchyNodeDefinition,\n>(\n definition: TDefinition,\n filteringProps: { filteredNodePaths: HierarchyFilteringPath[]; hasFilterTargetAncestor?: boolean },\n predicate: (id: HierarchyNodeIdentifier) => Promise<boolean>,\n classHierarchy: ECClassHierarchyInspector,\n matchedDefinitionProcessor: (def: TDefinition, matchingFilters: Array<MatchedFilter<TIdentifier>>) => TDefinition,\n extractPathsAndOptions: boolean = true,\n): Promise<TDefinition | undefined> {\n const { filteredNodePaths, hasFilterTargetAncestor } = filteringProps;\n const matchingFilters: Array<MatchedFilter<TIdentifier>> = [];\n for (const filteredNodePath of filteredNodePaths) {\n const { path, options } = HierarchyFilteringPath.normalize(filteredNodePath);\n if (path.length === 0) {\n continue;\n }\n const nodeId = path[0];\n if (await predicate(nodeId)) {\n let entry = await findMatchingFilterEntry(matchingFilters, nodeId, classHierarchy);\n if (!entry) {\n entry = {\n // ideally, `predicate` would act as a type guard to guarantee that `id` is `TIdentifier`, but at the moment\n // async type guards aren't supported\n id: nodeId as TIdentifier,\n childrenIdentifierPaths: [],\n isFilterTarget: false,\n };\n matchingFilters.push(entry);\n }\n\n if (!extractPathsAndOptions) {\n continue;\n }\n\n if (path.length > 1) {\n entry.childrenIdentifierPaths.push(options ? { path: path.slice(1), options } : path.slice(1));\n } else if (entry.isFilterTarget) {\n entry.filterTargetOptions = HierarchyFilteringPath.mergeOptions(entry.filterTargetOptions, options);\n } else {\n Object.assign(entry, { isFilterTarget: true, filterTargetOptions: options });\n }\n }\n }\n if (hasFilterTargetAncestor || matchingFilters.length > 0) {\n return matchedDefinitionProcessor(definition, matchingFilters);\n }\n return undefined;\n}\n\nasync function findMatchingFilterEntry<TEntry extends { id: TIdentifier }, TIdentifier extends HierarchyNodeIdentifier>(\n filters: TEntry[],\n nodeId: TIdentifier,\n classHierarchy: ECClassHierarchyInspector,\n): Promise<TEntry | undefined> {\n for (const filter of filters) {\n if (await identifiersEqual(filter.id, nodeId, classHierarchy)) {\n return filter;\n }\n }\n return undefined;\n}\n\nasync function identifiersEqual<TIdentifier extends HierarchyNodeIdentifier>(lhs: TIdentifier, rhs: TIdentifier, classHierarchy: ECClassHierarchyInspector) {\n if (HierarchyNodeIdentifier.isInstanceNodeIdentifier(lhs) && HierarchyNodeIdentifier.isInstanceNodeIdentifier(rhs)) {\n return (\n lhs.id === rhs.id &&\n (lhs.className === rhs.className ||\n (await classHierarchy.classDerivesFrom(lhs.className, rhs.className)) ||\n (await classHierarchy.classDerivesFrom(rhs.className, lhs.className)))\n );\n }\n return HierarchyNodeIdentifier.equal(lhs, rhs);\n}\n\nfunction applyFilterAttributes<TNode extends SourceHierarchyNode>(props: {\n node: TNode;\n filteredChildrenIdentifierPaths: HierarchyFilteringPath[] | undefined;\n isFilterTarget?: boolean;\n filterTargetOptions?: HierarchyFilteringPathOptions;\n hasFilterTargetAncestor: boolean;\n}): TNode {\n const { node, filteredChildrenIdentifierPaths } = props;\n const result = { ...node };\n\n const shouldAutoExpand = !!filteredChildrenIdentifierPaths?.some((childPath) => {\n return !!HierarchyFilteringPath.normalize(childPath).options?.autoExpand;\n });\n if (shouldAutoExpand) {\n result.autoExpand = true;\n }\n\n const filteringProps = HierarchyNodeFilteringProps.create(props);\n if (filteringProps) {\n result.filtering = filteringProps;\n }\n\n return result;\n}\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_HasFilterTargetAncestor = \"HasFilterTargetAncestor\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilterECInstanceId = \"FilterECInstanceId\";\n\n/** @internal */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const ECSQL_COLUMN_NAME_FilterClassName = \"FilterClassName\";\n\nfunction getClassECInstanceIds(matchingFilters: Array<{ id: InstanceKey }>) {\n const classNameECInstanceIds = new Map<string, Id64String[]>();\n for (const matchingFilter of matchingFilters) {\n const entry = classNameECInstanceIds.get(matchingFilter.id.className);\n if (entry === undefined) {\n classNameECInstanceIds.set(matchingFilter.id.className, [matchingFilter.id.id]);\n continue;\n }\n entry.push(matchingFilter.id.id);\n }\n return classNameECInstanceIds;\n}\n\n/** @internal */\nexport function applyECInstanceIdsFilter(\n def: InstanceNodesQueryDefinition,\n matchingFilters: Array<{ id: InstanceKey }>,\n hasFilterTargetAncestor: boolean,\n): InstanceNodesQueryDefinition {\n if (matchingFilters.length === 0) {\n return def;\n }\n const matchingFiltersToUse = getClassECInstanceIds(matchingFilters);\n return {\n ...def,\n query: {\n ...def.query,\n ctes: [\n ...(def.query.ctes ?? []),\n `FilteringInfo(ECInstanceId, FilterClassName) AS (\n ${Array.from(matchingFiltersToUse)\n .map(\n ([className, ecInstanceIds]) => `\n SELECT ECInstanceId, '${className}' AS FilterClassName\n FROM ${className}\n WHERE ECInstanceId IN (${ecInstanceIds.join(\", \")})\n `,\n )\n .join(\" UNION ALL \")}\n )`,\n ],\n ecsql: `\n SELECT\n [q].*,\n ${hasFilterTargetAncestor ? \"1\" : \"0\"} AS [${ECSQL_COLUMN_NAME_HasFilterTargetAncestor}],\n IdToHex([f].[ECInstanceId]) AS [${ECSQL_COLUMN_NAME_FilterECInstanceId}],\n [f].[FilterClassName] AS [${ECSQL_COLUMN_NAME_FilterClassName}]\n FROM (\n ${def.query.ecsql}\n ) [q]\n ${hasFilterTargetAncestor ? \"LEFT \" : \"\"} JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]\n `,\n },\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { GetHierarchyNodesProps } from "../HierarchyProvider";
1
+ import { GetHierarchyNodesProps } from "../HierarchyProvider.js";
2
2
  interface ChildNodeObservablesCacheProps {
3
3
  size: number;
4
4
  variationsCount?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchyCache.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/HierarchyCache.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAS9D,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,gBAAgB;AAChB,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAA4D;IACxE,OAAO,CAAC,MAAM,CAAiC;gBAE5B,KAAK,EAAE,8BAA8B;IAKxD,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,iBAAiB;IAyBlB,GAAG,CAAC,YAAY,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;IAKlD,GAAG,CAAC,YAAY,EAAE,sBAAsB,GAAG,CAAC,GAAG,SAAS;IAKxD,KAAK;CAGb"}
1
+ {"version":3,"file":"HierarchyCache.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/HierarchyCache.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AASjE,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,gBAAgB;AAChB,qBAAa,cAAc,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAA4D;IACxE,OAAO,CAAC,MAAM,CAAiC;gBAE5B,KAAK,EAAE,8BAA8B;IAKxD,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,iBAAiB;IAyBlB,GAAG,CAAC,YAAY,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;IAKlD,GAAG,CAAC,YAAY,EAAE,sBAAsB,GAAG,CAAC,GAAG,SAAS;IAKxD,KAAK;CAGb"}
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.HierarchyCache = void 0;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
- const HierarchyNodeKey_1 = require("../HierarchyNodeKey");
9
+ const HierarchyNodeKey_js_1 = require("../HierarchyNodeKey.js");
10
10
  /** @internal */
11
11
  class HierarchyCache {
12
12
  _map;
@@ -74,7 +74,7 @@ function compareHierarchyNodeKeys(lhs, rhs) {
74
74
  return lhs.length - rhs.length;
75
75
  }
76
76
  for (let i = 0; i < lhs.length; ++i) {
77
- const keysCompareResult = HierarchyNodeKey_1.HierarchyNodeKey.compare(lhs[i], rhs[i]);
77
+ const keysCompareResult = HierarchyNodeKey_js_1.HierarchyNodeKey.compare(lhs[i], rhs[i]);
78
78
  if (keysCompareResult !== 0) {
79
79
  return keysCompareResult;
80
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"HierarchyCache.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/HierarchyCache.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 { LRUCache, LRUDictionary, LRUMap } from \"@itwin/core-bentley\";\nimport { InstanceKey } from \"@itwin/presentation-shared\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey\";\nimport { GetHierarchyNodesProps } from \"../HierarchyProvider\";\n\ninterface HierarchyCacheEntry<T> {\n /** Stores observables for the default case - no instance filter or custom limit for the hierarchy level. */\n primary: T | undefined;\n /** Stores a limited number of variations with custom instance filter and/or custom limit for the hierarchy level. */\n variations: LRUCache<string, T>;\n}\n\ninterface ChildNodeObservablesCacheProps {\n size: number;\n variationsCount?: number;\n}\n\n/** @internal */\nexport class HierarchyCache<T> {\n private _map: LRUDictionary<HierarchyNodeKey[], HierarchyCacheEntry<T>>;\n private _props: ChildNodeObservablesCacheProps;\n\n public constructor(props: ChildNodeObservablesCacheProps) {\n this._props = props;\n this._map = new LRUDictionary<HierarchyNodeKey[], HierarchyCacheEntry<T>>(props.size, compareHierarchyNodeKeys);\n }\n\n private createCacheKeys(\n props: Omit<GetHierarchyNodesProps, \"parentNode\"> & {\n parentNode: { key: HierarchyNodeKey; parentKeys: HierarchyNodeKey[] } | undefined;\n filteredInstanceKeys?: InstanceKey[];\n },\n ) {\n function createVariationKey() {\n const { instanceFilter, hierarchyLevelSizeLimit, filteredInstanceKeys } = props;\n if (instanceFilter === undefined && hierarchyLevelSizeLimit === undefined && filteredInstanceKeys === undefined) {\n return undefined;\n }\n return JSON.stringify({ instanceFilter, hierarchyLevelSizeLimit, filteredInstanceKeys });\n }\n\n if (!props.parentNode) {\n return { primaryKey: [], variationKey: createVariationKey() };\n }\n\n const parentKeys = props.parentNode.parentKeys;\n\n return {\n primaryKey: [...parentKeys, props.parentNode.key],\n variationKey: createVariationKey(),\n };\n }\n\n private getCacheAccessors(primaryKey: HierarchyNodeKey[], variationKey?: string) {\n const getMapEntry = (create: boolean) => {\n let entry = this._map.get(primaryKey);\n if (!entry && create) {\n entry = { primary: undefined, variations: new LRUMap(this._props.variationsCount ?? 1) };\n this._map.set(primaryKey, entry);\n }\n return entry;\n };\n if (variationKey) {\n return {\n get: () => getMapEntry(false)?.variations.get(variationKey),\n set: (value: T) => {\n getMapEntry(true)!.variations.set(variationKey, value);\n },\n };\n }\n return {\n get: () => getMapEntry(false)?.primary,\n set: (value: T) => {\n getMapEntry(true)!.primary = value;\n },\n };\n }\n\n public set(requestProps: GetHierarchyNodesProps, value: T) {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n this.getCacheAccessors(primaryKey, variationKey).set(value);\n }\n\n public get(requestProps: GetHierarchyNodesProps): T | undefined {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n return this.getCacheAccessors(primaryKey, variationKey).get();\n }\n\n public clear() {\n this._map.clear();\n }\n}\n\nfunction compareHierarchyNodeKeys(lhs: HierarchyNodeKey[], rhs: HierarchyNodeKey[]) {\n if (lhs.length !== rhs.length) {\n return lhs.length - rhs.length;\n }\n for (let i = 0; i < lhs.length; ++i) {\n const keysCompareResult = HierarchyNodeKey.compare(lhs[i], rhs[i]);\n if (keysCompareResult !== 0) {\n return keysCompareResult;\n }\n }\n return 0;\n}\n"]}
1
+ {"version":3,"file":"HierarchyCache.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/HierarchyCache.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 { LRUCache, LRUDictionary, LRUMap } from \"@itwin/core-bentley\";\nimport { InstanceKey } from \"@itwin/presentation-shared\";\nimport { HierarchyNodeKey } from \"../HierarchyNodeKey.js\";\nimport { GetHierarchyNodesProps } from \"../HierarchyProvider.js\";\n\ninterface HierarchyCacheEntry<T> {\n /** Stores observables for the default case - no instance filter or custom limit for the hierarchy level. */\n primary: T | undefined;\n /** Stores a limited number of variations with custom instance filter and/or custom limit for the hierarchy level. */\n variations: LRUCache<string, T>;\n}\n\ninterface ChildNodeObservablesCacheProps {\n size: number;\n variationsCount?: number;\n}\n\n/** @internal */\nexport class HierarchyCache<T> {\n private _map: LRUDictionary<HierarchyNodeKey[], HierarchyCacheEntry<T>>;\n private _props: ChildNodeObservablesCacheProps;\n\n public constructor(props: ChildNodeObservablesCacheProps) {\n this._props = props;\n this._map = new LRUDictionary<HierarchyNodeKey[], HierarchyCacheEntry<T>>(props.size, compareHierarchyNodeKeys);\n }\n\n private createCacheKeys(\n props: Omit<GetHierarchyNodesProps, \"parentNode\"> & {\n parentNode: { key: HierarchyNodeKey; parentKeys: HierarchyNodeKey[] } | undefined;\n filteredInstanceKeys?: InstanceKey[];\n },\n ) {\n function createVariationKey() {\n const { instanceFilter, hierarchyLevelSizeLimit, filteredInstanceKeys } = props;\n if (instanceFilter === undefined && hierarchyLevelSizeLimit === undefined && filteredInstanceKeys === undefined) {\n return undefined;\n }\n return JSON.stringify({ instanceFilter, hierarchyLevelSizeLimit, filteredInstanceKeys });\n }\n\n if (!props.parentNode) {\n return { primaryKey: [], variationKey: createVariationKey() };\n }\n\n const parentKeys = props.parentNode.parentKeys;\n\n return {\n primaryKey: [...parentKeys, props.parentNode.key],\n variationKey: createVariationKey(),\n };\n }\n\n private getCacheAccessors(primaryKey: HierarchyNodeKey[], variationKey?: string) {\n const getMapEntry = (create: boolean) => {\n let entry = this._map.get(primaryKey);\n if (!entry && create) {\n entry = { primary: undefined, variations: new LRUMap(this._props.variationsCount ?? 1) };\n this._map.set(primaryKey, entry);\n }\n return entry;\n };\n if (variationKey) {\n return {\n get: () => getMapEntry(false)?.variations.get(variationKey),\n set: (value: T) => {\n getMapEntry(true)!.variations.set(variationKey, value);\n },\n };\n }\n return {\n get: () => getMapEntry(false)?.primary,\n set: (value: T) => {\n getMapEntry(true)!.primary = value;\n },\n };\n }\n\n public set(requestProps: GetHierarchyNodesProps, value: T) {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n this.getCacheAccessors(primaryKey, variationKey).set(value);\n }\n\n public get(requestProps: GetHierarchyNodesProps): T | undefined {\n const { primaryKey, variationKey } = this.createCacheKeys(requestProps);\n return this.getCacheAccessors(primaryKey, variationKey).get();\n }\n\n public clear() {\n this._map.clear();\n }\n}\n\nfunction compareHierarchyNodeKeys(lhs: HierarchyNodeKey[], rhs: HierarchyNodeKey[]) {\n if (lhs.length !== rhs.length) {\n return lhs.length - rhs.length;\n }\n for (let i = 0; i < lhs.length; ++i) {\n const keysCompareResult = HierarchyNodeKey.compare(lhs[i], rhs[i]);\n if (keysCompareResult !== 0) {\n return keysCompareResult;\n }\n }\n return 0;\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  import { GenericInstanceFilter } from "@itwin/core-common";
2
2
  import { ECSqlQueryDef } from "@itwin/presentation-shared";
3
- import { NonGroupingHierarchyNode } from "../HierarchyNode";
4
- import { ProcessedGenericHierarchyNode, ProcessedHierarchyNode, ProcessedInstanceHierarchyNode, SourceGenericHierarchyNode, SourceInstanceHierarchyNode } from "./IModelHierarchyNode";
3
+ import { NonGroupingHierarchyNode } from "../HierarchyNode.js";
4
+ import { ProcessedGenericHierarchyNode, ProcessedHierarchyNode, ProcessedInstanceHierarchyNode, SourceGenericHierarchyNode, SourceInstanceHierarchyNode } from "./IModelHierarchyNode.js";
5
5
  /**
6
6
  * A nodes definition that returns a single generic node.
7
- * @beta
7
+ * @public
8
8
  */
9
9
  export interface GenericHierarchyNodeDefinition {
10
10
  /** The node to be created in the hierarchy level */
@@ -12,7 +12,7 @@ export interface GenericHierarchyNodeDefinition {
12
12
  }
13
13
  /**
14
14
  * A nodes definition that returns an ECSQL query for selecting nodes from an iModel.
15
- * @beta
15
+ * @public
16
16
  */
17
17
  export interface InstanceNodesQueryDefinition {
18
18
  /**
@@ -29,39 +29,39 @@ export interface InstanceNodesQueryDefinition {
29
29
  }
30
30
  /**
31
31
  * A definition of nodes included in a hierarchy level.
32
- * @beta
32
+ * @public
33
33
  */
34
34
  export type HierarchyNodesDefinition = GenericHierarchyNodeDefinition | InstanceNodesQueryDefinition;
35
- /** @beta */
35
+ /** @public */
36
36
  export declare namespace HierarchyNodesDefinition {
37
37
  function isGenericNode(def: HierarchyNodesDefinition): def is GenericHierarchyNodeDefinition;
38
38
  function isInstanceNodesQuery(def: HierarchyNodesDefinition): def is InstanceNodesQueryDefinition;
39
39
  }
40
40
  /**
41
41
  * A definition of a hierarchy level, which may consist of multiple node definitions.
42
- * @beta
42
+ * @public
43
43
  */
44
44
  export type HierarchyLevelDefinition = HierarchyNodesDefinition[];
45
45
  /**
46
46
  * A type for a function that parses a `SourceInstanceHierarchyNode` from provided ECSQL `row` object.
47
- * @beta
47
+ * @public
48
48
  */
49
49
  export type NodeParser = (row: {
50
50
  [columnName: string]: any;
51
- }) => SourceInstanceHierarchyNode;
51
+ }, parentNode?: HierarchyDefinitionParentNode) => SourceInstanceHierarchyNode | Promise<SourceInstanceHierarchyNode>;
52
52
  /**
53
53
  * A type for a function that pre-processes given node. Unless the function decides not to make any modifications,
54
54
  * it should return a new - modified - node, rather than modifying the given one. Returning `undefined` omits the node
55
55
  * from the hierarchy.
56
56
  *
57
- * @beta
57
+ * @public
58
58
  */
59
59
  export type NodePreProcessor = <TNode extends ProcessedGenericHierarchyNode | ProcessedInstanceHierarchyNode>(node: TNode) => Promise<TNode | undefined>;
60
60
  /**
61
61
  * A type for a function that post-processes given node. Unless the function decides not to make any modifications,
62
62
  * it should return a new - modified - node, rather than modifying the given one.
63
63
  *
64
- * @beta
64
+ * @public
65
65
  */
66
66
  export type NodePostProcessor = (node: ProcessedHierarchyNode) => Promise<ProcessedHierarchyNode>;
67
67
  /**
@@ -69,12 +69,12 @@ export type NodePostProcessor = (node: ProcessedHierarchyNode) => Promise<Proces
69
69
  * a `HierarchyNode` that:
70
70
  * - knows nothing about its children,
71
71
  * - is either an instances node (key is of `InstancesNodeKey` type) or a generic node (key is of `GenericNodeKey` type).
72
- * @beta
72
+ * @public
73
73
  */
74
74
  export type HierarchyDefinitionParentNode = Omit<NonGroupingHierarchyNode, "children">;
75
75
  /**
76
76
  * Props for `HierarchyDefinition.defineHierarchyLevel`.
77
- * @beta
77
+ * @public
78
78
  */
79
79
  export interface DefineHierarchyLevelProps {
80
80
  /** Parent node to get children for. Pass `undefined` to get root nodes. */
@@ -84,7 +84,7 @@ export interface DefineHierarchyLevelProps {
84
84
  }
85
85
  /**
86
86
  * An interface for a factory that knows how define a hierarchy based on a given parent node.
87
- * @beta
87
+ * @public
88
88
  */
89
89
  export interface HierarchyDefinition {
90
90
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"IModelHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyDefinition.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,uBAAuB,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,oDAAoD;IACpD,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC;AACrG,YAAY;AAEZ,yBAAiB,wBAAwB,CAAC;IACxC,SAAgB,aAAa,CAAC,GAAG,EAAE,wBAAwB,GAAG,GAAG,IAAI,8BAA8B,CAElG;IACD,SAAgB,oBAAoB,CAAC,GAAG,EAAE,wBAAwB,GAAG,GAAG,IAAI,4BAA4B,CAEvG;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,EAAE,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,KAAK,2BAA2B,CAAC;AAE7F;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,SAAS,6BAA6B,GAAG,8BAA8B,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAEzJ;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAElG;;;;;;GAMG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,UAAU,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAEtD,uCAAuC;IACvC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,iBAAiB,CAAC;IAEpC,+EAA+E;IAC/E,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC3F"}
1
+ {"version":3,"file":"IModelHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyDefinition.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,8BAA8B;IAC7C,oDAAoD;IACpD,IAAI,EAAE,0BAA0B,CAAC;CAClC;AAED;;;GAGG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;;;OAIG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,KAAK,EAAE,aAAa,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,8BAA8B,GAAG,4BAA4B,CAAC;AACrG,cAAc;AAEd,yBAAiB,wBAAwB,CAAC;IACxC,SAAgB,aAAa,CAAC,GAAG,EAAE,wBAAwB,GAAG,GAAG,IAAI,8BAA8B,CAElG;IACD,SAAgB,oBAAoB,CAAC,GAAG,EAAE,wBAAwB,GAAG,GAAG,IAAI,4BAA4B,CAEvG;CACF;AAED;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,wBAAwB,EAAE,CAAC;AAElE;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,CACvB,GAAG,EAAE;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAClC,UAAU,CAAC,EAAE,6BAA6B,KACvC,2BAA2B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAExE;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,SAAS,6BAA6B,GAAG,8BAA8B,EAAE,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;AAEzJ;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,IAAI,EAAE,sBAAsB,KAAK,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAElG;;;;;;GAMG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAAC,wBAAwB,EAAE,UAAU,CAAC,CAAC;AAEvF;;;GAGG;AACH,MAAM,WAAW,yBAAyB;IACxC,2EAA2E;IAC3E,UAAU,EAAE,6BAA6B,GAAG,SAAS,CAAC;IAEtD,uCAAuC;IACvC,cAAc,CAAC,EAAE,qBAAqB,CAAC;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,SAAS,CAAC,EAAE,UAAU,CAAC;IAEvB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC;IAElC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,iBAAiB,CAAC;IAEpC,+EAA+E;IAC/E,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC3F"}
@@ -5,7 +5,7 @@
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.HierarchyNodesDefinition = void 0;
8
- /** @beta */
8
+ /** @public */
9
9
  // eslint-disable-next-line @typescript-eslint/no-redeclare
10
10
  var HierarchyNodesDefinition;
11
11
  (function (HierarchyNodesDefinition) {