@itwin/presentation-hierarchies 1.7.11 → 1.7.13
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.
- package/CHANGELOG.md +73 -12
- package/README.md +13 -6
- package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyFiltering.js +38 -15
- package/lib/cjs/hierarchies/HierarchyFiltering.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNode.js +2 -2
- package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/Logging.js +1 -1
- package/lib/cjs/hierarchies/Logging.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js +18 -9
- package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js +1 -4
- package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +92 -62
- package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js +8 -7
- package/lib/cjs/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js +17 -44
- package/lib/cjs/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
- package/lib/cjs/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/Utils.js +19 -7
- package/lib/cjs/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js +10 -4
- package/lib/cjs/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/Grouping.js +32 -18
- package/lib/cjs/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js +31 -9
- package/lib/cjs/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js +30 -14
- package/lib/cjs/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +2 -6
- package/lib/cjs/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js +2 -8
- package/lib/cjs/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
- package/lib/cjs/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
- package/lib/cjs/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +20 -22
- package/lib/cjs/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js +3 -1
- package/lib/cjs/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/Common.js +2 -2
- package/lib/cjs/hierarchies/internal/Common.js.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/EachValueFrom.js +0 -2
- package/lib/cjs/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
- package/lib/cjs/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js +1 -4
- package/lib/cjs/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Partition.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Partition.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
- package/lib/cjs/hierarchies/internal/operators/Sorting.js.map +1 -1
- package/lib/cjs/presentation-hierarchies.d.ts +2 -2
- package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
- package/lib/cjs/presentation-hierarchies.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyFiltering.js +38 -15
- package/lib/esm/hierarchies/HierarchyFiltering.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNode.js +2 -2
- package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyNodeKey.js.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/Logging.js +1 -1
- package/lib/esm/hierarchies/Logging.js.map +1 -1
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js +19 -10
- package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/HierarchyCache.js +1 -4
- package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyNode.js.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +93 -63
- package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js +9 -8
- package/lib/esm/hierarchies/imodel/LimitingECSqlQueryExecutor.js.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js +17 -44
- package/lib/esm/hierarchies/imodel/NodeSelectQueryFactory.js.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js +2 -1
- package/lib/esm/hierarchies/imodel/PredicateBasedHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/Utils.js +19 -7
- package/lib/esm/hierarchies/imodel/Utils.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js +11 -5
- package/lib/esm/hierarchies/imodel/operators/DetermineChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/Grouping.js +33 -19
- package/lib/esm/hierarchies/imodel/operators/Grouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js +33 -11
- package/lib/esm/hierarchies/imodel/operators/HideIfNoChildren.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js +32 -16
- package/lib/esm/hierarchies/imodel/operators/HideNodesInHierarchy.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js +3 -7
- package/lib/esm/hierarchies/imodel/operators/grouping/BaseClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js +2 -8
- package/lib/esm/hierarchies/imodel/operators/grouping/ClassGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js +1 -5
- package/lib/esm/hierarchies/imodel/operators/grouping/GroupHiding.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js +2 -10
- package/lib/esm/hierarchies/imodel/operators/grouping/LabelGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js +20 -22
- package/lib/esm/hierarchies/imodel/operators/grouping/PropertiesGrouping.js.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.d.ts.map +1 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js +3 -1
- package/lib/esm/hierarchies/imodel/operators/grouping/Shared.js.map +1 -1
- package/lib/esm/hierarchies/internal/Common.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/Common.js +2 -2
- package/lib/esm/hierarchies/internal/Common.js.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/EachValueFrom.js +0 -2
- package/lib/esm/hierarchies/internal/EachValueFrom.js.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js +3 -1
- package/lib/esm/hierarchies/internal/RxjsHierarchyDefinition.js.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js +1 -4
- package/lib/esm/hierarchies/internal/SubscriptionScheduler.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Partition.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Partition.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReduceToMergeMap.js.map +1 -1
- package/lib/esm/hierarchies/internal/operators/ReleaseMainThread.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Sorting.d.ts.map +1 -1
- package/lib/esm/hierarchies/internal/operators/Sorting.js.map +1 -1
- package/lib/esm/presentation-hierarchies.d.ts +2 -2
- package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
- package/lib/esm/presentation-hierarchies.js +2 -2
- package/lib/esm/presentation-hierarchies.js.map +1 -1
- package/package.json +17 -25
|
@@ -85,7 +85,7 @@ class IModelHierarchyProviderImpl {
|
|
|
85
85
|
this._dispose.next();
|
|
86
86
|
this._unsubscribe?.();
|
|
87
87
|
}
|
|
88
|
-
/*
|
|
88
|
+
/* v8 ignore next -- @preserve */
|
|
89
89
|
dispose() {
|
|
90
90
|
this[Symbol.dispose]();
|
|
91
91
|
}
|
|
@@ -93,9 +93,10 @@ class IModelHierarchyProviderImpl {
|
|
|
93
93
|
return this._hierarchyChanged;
|
|
94
94
|
}
|
|
95
95
|
invalidateHierarchyCache(reason) {
|
|
96
|
+
/* v8 ignore next -- @preserve */
|
|
96
97
|
(0, LoggingUtils_js_1.doLog)({
|
|
97
98
|
category: `${LOGGING_NAMESPACE}.Events`,
|
|
98
|
-
message:
|
|
99
|
+
message: () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),
|
|
99
100
|
});
|
|
100
101
|
this._nodesCache?.clear();
|
|
101
102
|
}
|
|
@@ -130,12 +131,16 @@ class IModelHierarchyProviderImpl {
|
|
|
130
131
|
}
|
|
131
132
|
createHierarchyLevelDefinitionsObservable(props) {
|
|
132
133
|
const { requestContext, ...defineHierarchyLevelProps } = props;
|
|
134
|
+
/* v8 ignore next -- @preserve */
|
|
133
135
|
(0, LoggingUtils_js_1.doLog)({
|
|
134
136
|
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
135
|
-
message:
|
|
137
|
+
message: () => `[${requestContext.requestId}] Requesting hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
136
138
|
});
|
|
137
139
|
let parentNode = props.parentNode;
|
|
138
|
-
if (parentNode &&
|
|
140
|
+
if (parentNode &&
|
|
141
|
+
HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) &&
|
|
142
|
+
parentNode.key.source &&
|
|
143
|
+
parentNode.key.source !== this._imodelAccess.imodelKey) {
|
|
139
144
|
return rxjs_1.EMPTY;
|
|
140
145
|
}
|
|
141
146
|
if (parentNode && HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode)) {
|
|
@@ -151,10 +156,13 @@ class IModelHierarchyProviderImpl {
|
|
|
151
156
|
return rxjs_1.EMPTY;
|
|
152
157
|
}
|
|
153
158
|
}
|
|
154
|
-
return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode }).pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.finalize)(() =>
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
159
|
+
return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode }).pipe((0, rxjs_1.mergeAll)(), (0, rxjs_1.finalize)(() => {
|
|
160
|
+
/* v8 ignore next -- @preserve */
|
|
161
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
162
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
163
|
+
message: () => `[${requestContext.requestId}] Received all hierarchy level definitions for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
164
|
+
});
|
|
165
|
+
}));
|
|
158
166
|
}
|
|
159
167
|
createSourceNodesObservable(props) {
|
|
160
168
|
// pipe definitions to nodes and put "share replay" on it
|
|
@@ -166,15 +174,23 @@ class IModelHierarchyProviderImpl {
|
|
|
166
174
|
queryExecutor: this._imodelAccess,
|
|
167
175
|
query,
|
|
168
176
|
limit: props.hierarchyLevelSizeLimit,
|
|
169
|
-
parser: this._activeHierarchyDefinition.parseNode
|
|
177
|
+
parser: this._activeHierarchyDefinition.parseNode
|
|
178
|
+
? (row) => this._activeHierarchyDefinition.parseNode(row, props.parentNode)
|
|
179
|
+
: undefined,
|
|
170
180
|
})), (0, rxjs_1.map)((node) => ({
|
|
171
181
|
...node,
|
|
172
|
-
key: {
|
|
182
|
+
key: {
|
|
183
|
+
...node.key,
|
|
184
|
+
instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: this._imodelAccess.imodelKey })),
|
|
185
|
+
},
|
|
173
186
|
}))));
|
|
174
|
-
}), (0, rxjs_1.finalize)(() =>
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
187
|
+
}), (0, rxjs_1.finalize)(() => {
|
|
188
|
+
/* v8 ignore next -- @preserve */
|
|
189
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
190
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
191
|
+
message: () => `[${props.requestContext.requestId}] Read all child nodes ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
192
|
+
});
|
|
193
|
+
}), (0, ShareReplayWithErrors_js_1.shareReplayWithErrors)());
|
|
178
194
|
}
|
|
179
195
|
createPreProcessedNodesObservable(queryNodesObservable, props) {
|
|
180
196
|
return queryNodesObservable.pipe(
|
|
@@ -189,54 +205,67 @@ class IModelHierarchyProviderImpl {
|
|
|
189
205
|
// process hiding
|
|
190
206
|
(0, HideIfNoChildren_js_1.createHideIfNoChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), (0, HideNodesInHierarchy_js_1.createHideNodesInHierarchyOperator)(
|
|
191
207
|
// note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)
|
|
192
|
-
(n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), (0, rxjs_1.finalize)(() =>
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
208
|
+
(n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes, false), (0, rxjs_1.finalize)(() => {
|
|
209
|
+
/* v8 ignore next -- @preserve */
|
|
210
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
211
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
212
|
+
message: () => `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
213
|
+
});
|
|
214
|
+
}));
|
|
196
215
|
}
|
|
197
216
|
createProcessedNodesObservable(preprocessedNodesObservable, props) {
|
|
198
|
-
return preprocessedNodesObservable.pipe((0, Grouping_js_1.createGroupingOperator)(this._imodelAccess, props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) => this.onGroupingNodeCreated(gn, props)), (0, rxjs_1.finalize)(() =>
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
217
|
+
return preprocessedNodesObservable.pipe((0, Grouping_js_1.createGroupingOperator)(this._imodelAccess, props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) => this.onGroupingNodeCreated(gn, props)), (0, rxjs_1.finalize)(() => {
|
|
218
|
+
/* v8 ignore next -- @preserve */
|
|
219
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
220
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
221
|
+
message: () => `[${props.requestContext.requestId}] Finished grouping child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
222
|
+
});
|
|
223
|
+
}));
|
|
202
224
|
}
|
|
203
225
|
createFinalizedNodesObservable(processedNodesObservable, props) {
|
|
204
226
|
return processedNodesObservable.pipe((0, DetermineChildren_js_1.createDetermineChildrenOperator)((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes), postProcessNodes(this._activeHierarchyDefinition), Sorting_js_1.sortNodesByLabelOperator, (0, rxjs_1.map)((n) => {
|
|
205
227
|
if ("processingParams" in n) {
|
|
206
228
|
delete n.processingParams;
|
|
207
229
|
}
|
|
208
|
-
return Object.assign(n, {
|
|
209
|
-
|
|
230
|
+
return Object.assign(n, { children: (0, Common_js_1.hasChildren)(n) });
|
|
231
|
+
}), (0, rxjs_1.takeUntil)(this._dispose), (0, rxjs_1.finalize)(() => {
|
|
232
|
+
/* v8 ignore next -- @preserve */
|
|
233
|
+
(0, LoggingUtils_js_1.doLog)({
|
|
234
|
+
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
235
|
+
message: () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
210
236
|
});
|
|
211
|
-
})
|
|
212
|
-
category: LOGGING_NAMESPACE_PERFORMANCE,
|
|
213
|
-
message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Finished finalizing child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
214
|
-
})));
|
|
237
|
+
}));
|
|
215
238
|
}
|
|
216
239
|
createHasNodesObservable(preprocessedNodesObservable, possiblyKnownChildrenObservable, props) {
|
|
217
240
|
const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;
|
|
218
|
-
return (0, rxjs_1.concat)((possiblyKnownChildrenObservable ?? rxjs_1.EMPTY).pipe((0, rxjs_1.filter)((n) => (0, Common_js_1.hasChildren)(n))), preprocessedNodesObservable).pipe(
|
|
241
|
+
return (0, rxjs_1.concat)((possiblyKnownChildrenObservable ?? rxjs_1.EMPTY).pipe((0, rxjs_1.filter)((n) => (0, Common_js_1.hasChildren)(n))), preprocessedNodesObservable).pipe(
|
|
242
|
+
/* v8 ignore next -- @preserve */
|
|
243
|
+
(0, LoggingUtils_js_1.log)({
|
|
219
244
|
category: loggingCategory,
|
|
220
|
-
message:
|
|
245
|
+
message: (n) => `[${props.requestContext.requestId}] Node before mapping to 'true': ${(0, Common_js_1.createNodeIdentifierForLogging)(n)}`,
|
|
221
246
|
}), (0, rxjs_1.take)(1), (0, rxjs_1.map)(() => true), (0, rxjs_1.defaultIfEmpty)(false), (0, rxjs_1.catchError)((e) => {
|
|
247
|
+
/* v8 ignore next -- @preserve */
|
|
222
248
|
(0, LoggingUtils_js_1.doLog)({
|
|
223
249
|
category: loggingCategory,
|
|
224
|
-
message:
|
|
250
|
+
message: () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,
|
|
225
251
|
});
|
|
226
252
|
if (e instanceof HierarchyErrors_js_1.RowsLimitExceededError) {
|
|
227
253
|
return (0, rxjs_1.of)(true);
|
|
228
254
|
}
|
|
229
255
|
throw e;
|
|
230
|
-
}),
|
|
256
|
+
}),
|
|
257
|
+
/* v8 ignore next -- @preserve */
|
|
258
|
+
(0, LoggingUtils_js_1.log)({ category: loggingCategory, message: (r) => `[${props.requestContext.requestId}] Result: ${r}` }));
|
|
231
259
|
}
|
|
232
260
|
getCachedObservableEntry(props) {
|
|
233
261
|
const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;
|
|
234
262
|
const { parentNode, ...restProps } = props;
|
|
235
263
|
const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);
|
|
236
264
|
if (cached) {
|
|
265
|
+
/* v8 ignore next -- @preserve */
|
|
237
266
|
(0, LoggingUtils_js_1.doLog)({
|
|
238
267
|
category: loggingCategory,
|
|
239
|
-
message:
|
|
268
|
+
message: () => `[${props.requestContext.requestId}] Found query nodes observable for ${(0, Common_js_1.createNodeIdentifierForLogging)(parentNode)}`,
|
|
240
269
|
});
|
|
241
270
|
return cached;
|
|
242
271
|
}
|
|
@@ -260,11 +289,15 @@ class IModelHierarchyProviderImpl {
|
|
|
260
289
|
parentNode: parentNonGroupingNode,
|
|
261
290
|
...(filteredInstanceKeys ? { filteredInstanceKeys } : undefined),
|
|
262
291
|
};
|
|
263
|
-
const value = {
|
|
292
|
+
const value = {
|
|
293
|
+
observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps),
|
|
294
|
+
processingStatus: "none",
|
|
295
|
+
};
|
|
264
296
|
this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);
|
|
297
|
+
/* v8 ignore next -- @preserve */
|
|
265
298
|
(0, LoggingUtils_js_1.doLog)({
|
|
266
299
|
category: loggingCategory,
|
|
267
|
-
message:
|
|
300
|
+
message: () => `[${props.requestContext.requestId}] Saved query nodes observable for ${(0, Common_js_1.createNodeIdentifierForLogging)(parentNode)}`,
|
|
268
301
|
});
|
|
269
302
|
return value;
|
|
270
303
|
}
|
|
@@ -299,18 +332,19 @@ class IModelHierarchyProviderImpl {
|
|
|
299
332
|
const timer = new core_bentley_1.StopWatch(undefined, true);
|
|
300
333
|
let error;
|
|
301
334
|
let nodesCount = 0;
|
|
335
|
+
/* v8 ignore next -- @preserve */
|
|
302
336
|
(0, LoggingUtils_js_1.doLog)({
|
|
303
337
|
category: loggingCategory,
|
|
304
|
-
message:
|
|
338
|
+
message: () => `[${requestContext.requestId}] Requesting child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
305
339
|
});
|
|
306
340
|
return (0, EachValueFrom_js_1.eachValueFrom)(this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe((0, rxjs_1.tap)(() => ++nodesCount), (0, rxjs_1.catchError)((e) => {
|
|
307
341
|
error = e;
|
|
308
342
|
throw e;
|
|
309
343
|
}), (0, rxjs_1.finalize)(() => {
|
|
344
|
+
/* v8 ignore next -- @preserve */
|
|
310
345
|
(0, LoggingUtils_js_1.doLog)({
|
|
311
346
|
category: loggingCategory,
|
|
312
|
-
message:
|
|
313
|
-
/* c8 ignore next 3 */ error
|
|
347
|
+
message: () => error
|
|
314
348
|
? `[${requestContext.requestId}] Error creating child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
|
|
315
349
|
: `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
|
|
316
350
|
});
|
|
@@ -322,7 +356,11 @@ class IModelHierarchyProviderImpl {
|
|
|
322
356
|
return (0, rxjs_1.from)(parentNode.groupedInstanceKeys);
|
|
323
357
|
}
|
|
324
358
|
(0, core_bentley_1.assert)(!parentNode || HierarchyNode_js_1.HierarchyNode.isGeneric(parentNode) || HierarchyNode_js_1.HierarchyNode.isInstancesNode(parentNode));
|
|
325
|
-
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({
|
|
359
|
+
const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({
|
|
360
|
+
parentNode,
|
|
361
|
+
instanceFilter,
|
|
362
|
+
requestContext,
|
|
363
|
+
});
|
|
326
364
|
// split the definitions based on whether they're for generic nodes or for instance nodes
|
|
327
365
|
const [genericDefs, instanceDefs] = (0, Partition_js_1.partition)(hierarchyLevelDefinitions, IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isGenericNode);
|
|
328
366
|
// query instance keys and a flag whether they should be hidden
|
|
@@ -355,22 +393,14 @@ class IModelHierarchyProviderImpl {
|
|
|
355
393
|
// hidden items' handling:
|
|
356
394
|
// - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,
|
|
357
395
|
// - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`
|
|
358
|
-
const hiddenParentNodes = (0, rxjs_1.merge)(genericDefs.pipe((0, rxjs_1.filter)((def) => !!def.node.processingParams?.hideInHierarchy), (0, rxjs_1.map)((def) => ({
|
|
359
|
-
type: "generic",
|
|
360
|
-
id: def.node.key,
|
|
361
|
-
source: this._imodelAccess.imodelKey,
|
|
362
|
-
}))), hiddenNodeInstanceKeys.pipe(
|
|
396
|
+
const hiddenParentNodes = (0, rxjs_1.merge)(genericDefs.pipe((0, rxjs_1.filter)((def) => !!def.node.processingParams?.hideInHierarchy), (0, rxjs_1.map)((def) => ({ type: "generic", id: def.node.key, source: this._imodelAccess.imodelKey }))), hiddenNodeInstanceKeys.pipe(
|
|
363
397
|
// first merge all keys by class
|
|
364
398
|
(0, ReduceToMergeMap_js_1.reduceToMergeMapList)(({ key }) => key.className, ({ key }) => key.id),
|
|
365
399
|
// then, for each class, create an instance key
|
|
366
400
|
(0, rxjs_1.mergeMap)((mergedMap) => [...mergedMap.entries()].map(([className, ids]) => ({
|
|
367
401
|
type: "instances",
|
|
368
402
|
instanceKeys: ids.map((id) => ({ className, id, imodelKey: this._imodelAccess.imodelKey })),
|
|
369
|
-
}))))).pipe((0, rxjs_1.map)((key) => ({
|
|
370
|
-
key,
|
|
371
|
-
parentKeys: [],
|
|
372
|
-
label: "",
|
|
373
|
-
})));
|
|
403
|
+
}))))).pipe((0, rxjs_1.map)((key) => ({ key, parentKeys: [], label: "" })));
|
|
374
404
|
// merge visible instance keys from this level & the ones we get recursively requesting from deeper levels
|
|
375
405
|
return (0, rxjs_1.merge)(visibleNodeInstanceKeys.pipe((0, rxjs_1.map)(({ key }) => key)), hiddenParentNodes.pipe((0, rxjs_1.mergeMap)((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext })))).pipe((0, rxjs_1.takeUntil)(this._dispose));
|
|
376
406
|
}
|
|
@@ -382,9 +412,10 @@ class IModelHierarchyProviderImpl {
|
|
|
382
412
|
const requestContext = { requestId: core_bentley_1.Guid.createValue() };
|
|
383
413
|
const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;
|
|
384
414
|
const timer = new core_bentley_1.StopWatch(undefined, true);
|
|
415
|
+
/* v8 ignore next -- @preserve */
|
|
385
416
|
(0, LoggingUtils_js_1.doLog)({
|
|
386
417
|
category: loggingCategory,
|
|
387
|
-
message:
|
|
418
|
+
message: () => `[${requestContext.requestId}] Requesting keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}`,
|
|
388
419
|
});
|
|
389
420
|
let error;
|
|
390
421
|
let keysCount = 0;
|
|
@@ -392,10 +423,10 @@ class IModelHierarchyProviderImpl {
|
|
|
392
423
|
error = e;
|
|
393
424
|
throw e;
|
|
394
425
|
}), (0, rxjs_1.finalize)(() => {
|
|
426
|
+
/* v8 ignore next -- @preserve */
|
|
395
427
|
(0, LoggingUtils_js_1.doLog)({
|
|
396
428
|
category: loggingCategory,
|
|
397
|
-
message:
|
|
398
|
-
/* c8 ignore next 3 */ error
|
|
429
|
+
message: () => error
|
|
399
430
|
? `[${requestContext.requestId}] Error creating node instance keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`
|
|
400
431
|
: `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${(0, Common_js_1.createNodeIdentifierForLogging)(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,
|
|
401
432
|
});
|
|
@@ -412,13 +443,7 @@ function processNodes(processor) {
|
|
|
412
443
|
return (nodes) => nodes.pipe((0, rxjs_1.mergeMap)(processor));
|
|
413
444
|
}
|
|
414
445
|
function applyLabelsFormatting(node, valueFormatter) {
|
|
415
|
-
return (0, rxjs_1.from)((0, presentation_shared_1.formatConcatenatedValue)({
|
|
416
|
-
value: node.label,
|
|
417
|
-
valueFormatter,
|
|
418
|
-
})).pipe((0, rxjs_1.map)((label) => ({
|
|
419
|
-
...node,
|
|
420
|
-
label,
|
|
421
|
-
})));
|
|
446
|
+
return (0, rxjs_1.from)((0, presentation_shared_1.formatConcatenatedValue)({ value: node.label, valueFormatter })).pipe((0, rxjs_1.map)((label) => ({ ...node, label })));
|
|
422
447
|
}
|
|
423
448
|
function createParentNodeKeysList(parentNode) {
|
|
424
449
|
if (!parentNode) {
|
|
@@ -431,6 +456,8 @@ function filterQueryByInstanceKeys(query, filteredInstanceKeys) {
|
|
|
431
456
|
return query;
|
|
432
457
|
}
|
|
433
458
|
const MAX_ALLOWED_BINDINGS = 1000;
|
|
459
|
+
// TODO: MISSING_COVERAGE
|
|
460
|
+
/* v8 ignore else -- @preserve */
|
|
434
461
|
if (filteredInstanceKeys.length < MAX_ALLOWED_BINDINGS) {
|
|
435
462
|
return {
|
|
436
463
|
...query,
|
|
@@ -439,10 +466,13 @@ function filterQueryByInstanceKeys(query, filteredInstanceKeys) {
|
|
|
439
466
|
FROM (${query.ecsql}) q
|
|
440
467
|
WHERE q.ECInstanceId IN (${filteredInstanceKeys.map(() => "?").join(",")})
|
|
441
468
|
`,
|
|
442
|
-
bindings: [
|
|
469
|
+
bindings: [
|
|
470
|
+
...(query.bindings ?? []),
|
|
471
|
+
...filteredInstanceKeys.map((k) => ({ type: "id", value: k.id })),
|
|
472
|
+
],
|
|
443
473
|
};
|
|
444
474
|
}
|
|
445
|
-
/*
|
|
475
|
+
/* v8 ignore start */
|
|
446
476
|
return {
|
|
447
477
|
...query,
|
|
448
478
|
ecsql: `
|
|
@@ -452,6 +482,6 @@ function filterQueryByInstanceKeys(query, filteredInstanceKeys) {
|
|
|
452
482
|
`,
|
|
453
483
|
bindings: [...(query.bindings ?? []), { type: "idset", value: filteredInstanceKeys.map((k) => k.id) }],
|
|
454
484
|
};
|
|
455
|
-
/*
|
|
485
|
+
/* v8 ignore stop */
|
|
456
486
|
}
|
|
457
487
|
//# sourceMappingURL=IModelHierarchyProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelHierarchyProvider.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"../internal/DisposePolyfill.js\";\n\nimport {\n catchError,\n concat,\n defaultIfEmpty,\n EMPTY,\n filter,\n finalize,\n from,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n Observable,\n ObservableInput,\n of,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, BeEvent, Guid, GuidString, StopWatch } from \"@itwin/core-bentley\";\nimport {\n ConcatenatedValue,\n createDefaultValueFormatter,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryDef,\n Event,\n EventArgs,\n formatConcatenatedValue,\n InstanceKey,\n IPrimitiveValueFormatter,\n normalizeFullClassName,\n} from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport { HierarchyFilteringPath } from \"../HierarchyFiltering.js\";\nimport { HierarchyNode, NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, HierarchyNodeKey, IModelInstanceKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport { GetHierarchyNodesProps, HierarchyProvider } from \"../HierarchyProvider.js\";\nimport {\n LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE,\n LOGGING_NAMESPACE_INTERNAL as BASE_LOGGING_NAMESPACE_INTERNAL,\n LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE,\n createNodeIdentifierForLogging,\n hasChildren,\n} from \"../internal/Common.js\";\nimport { eachValueFrom } from \"../internal/EachValueFrom.js\";\nimport { doLog, log } from \"../internal/LoggingUtils.js\";\nimport { partition } from \"../internal/operators/Partition.js\";\nimport { reduceToMergeMapList } from \"../internal/operators/ReduceToMergeMap.js\";\nimport { shareReplayWithErrors } from \"../internal/operators/ShareReplayWithErrors.js\";\nimport { sortNodesByLabelOperator } from \"../internal/operators/Sorting.js\";\nimport { getRxjsHierarchyDefinition, RxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { SubscriptionScheduler } from \"../internal/SubscriptionScheduler.js\";\nimport { FilteringHierarchyDefinition } from \"./FilteringHierarchyDefinition.js\";\nimport { HierarchyCache } from \"./HierarchyCache.js\";\nimport { DefineHierarchyLevelProps, HierarchyDefinition, HierarchyNodesDefinition } from \"./IModelHierarchyDefinition.js\";\nimport { ProcessedGroupingHierarchyNode, ProcessedHierarchyNode, SourceGenericHierarchyNode, SourceInstanceHierarchyNode } from \"./IModelHierarchyNode.js\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport { NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory.js\";\nimport { createDetermineChildrenOperator } from \"./operators/DetermineChildren.js\";\nimport { createGroupingOperator } from \"./operators/Grouping.js\";\nimport { createHideIfNoChildrenOperator } from \"./operators/HideIfNoChildren.js\";\nimport { createHideNodesInHierarchyOperator } from \"./operators/HideNodesInHierarchy.js\";\nimport { readNodes } from \"./TreeNodesReader.js\";\n\nconst LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_INTERNAL = `${BASE_LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;\n\nconst DEFAULT_QUERY_CONCURRENCY = 10;\nconst DEFAULT_QUERY_CACHE_SIZE = 1;\n\n/**\n * Defines the strings used by hierarchy provider.\n * @public\n */\ninterface IModelHierarchyProviderLocalizedStrings {\n /**\n * A string for \"Unspecified\". Used for labels of property grouping nodes\n * that group by an empty value.\n */\n unspecified: string;\n\n /**\n * A string for \"Other\". Used for label of a range property grouping node that\n * groups values which don't fit into any other range.\n */\n other: string;\n}\n\n/** @public */\ntype IModelAccess = ECSchemaProvider & LimitingECSqlQueryExecutor & ECClassHierarchyInspector & { imodelKey: string };\n\n/**\n * Props for `createIModelHierarchyProvider`.\n * @public\n */\ninterface IModelHierarchyProviderProps {\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /** An event that is raised when iModel data, that may affect the hierarchy, changes. */\n imodelChanged?: Event<() => void>;\n\n /**\n * A function that returns a hierarchy definition, describing how the hierarchy that the provider should be create. The\n * function is called once during the provider's construction.\n */\n hierarchyDefinition: HierarchyDefinition;\n\n /** Maximum number of queries that the provider attempts to execute in parallel. Defaults to `10`. */\n queryConcurrency?: number;\n /**\n * The amount of queries whose results are stored in-memory for quick retrieval. Defaults to `1`,\n * which means only results of the last run query are cached.\n */\n queryCacheSize?: number;\n\n /** A set of localized strings to use. Defaults to English strings. */\n localizedStrings?: Partial<IModelHierarchyProviderLocalizedStrings>;\n\n /**\n * A values formatter for formatting node labels. Defaults to the\n * result of `createDefaultValueFormatter` called with default parameters. May be overridden\n * by calling `setFormatter` on the provider instance.\n */\n formatter?: IPrimitiveValueFormatter;\n /** Props for filtering the hierarchy. */\n filtering?: {\n /** A list of node identifiers from root to target node. */\n paths: HierarchyFilteringPath[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & {\n /** @deprecated in 1.4. Use `[Symbol.dispose]` instead. */\n dispose: () => void;\n [Symbol.dispose]: () => void;\n} {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: {\n requestId: string;\n };\n}\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodelAccess: IModelAccess;\n private _hierarchyChanged: BeEvent<(args?: EventArgs<HierarchyProvider[\"hierarchyChanged\"]>) => void>;\n private _valuesFormatter: IPrimitiveValueFormatter;\n private _sourceHierarchyDefinition: RxjsHierarchyDefinition;\n private _activeHierarchyDefinition: RxjsHierarchyDefinition;\n private _localizedStrings: IModelHierarchyProviderLocalizedStrings;\n private _queryScheduler: SubscriptionScheduler;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n #componentId: GuidString;\n #componentName: string;\n\n public constructor(props: IModelHierarchyProviderProps) {\n this.#componentId = Guid.createValue();\n this.#componentName = \"IModelHierarchyProviderImpl\";\n this._imodelAccess = props.imodelAccess;\n this._hierarchyChanged = new BeEvent();\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(props.hierarchyDefinition);\n this._valuesFormatter = props?.formatter ?? createDefaultValueFormatter();\n this._localizedStrings = { other: \"Other\", unspecified: \"Not specified\", ...props?.localizedStrings };\n this._queryScheduler = new SubscriptionScheduler(props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY);\n this.setHierarchyFilter(props.filtering);\n\n const queryCacheSize = props.queryCacheSize ?? DEFAULT_QUERY_CACHE_SIZE;\n if (queryCacheSize !== 0) {\n this._nodesCache = new HierarchyCache({\n // we divide the size by 2, because each variation also counts as a query that we cache\n size: Math.ceil(queryCacheSize / 2),\n variationsCount: 1,\n });\n }\n\n this._unsubscribe = props.imodelChanged?.addListener(() => {\n this.invalidateHierarchyCache(\"Data source changed\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent();\n });\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* c8 ignore next 3 */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public get hierarchyChanged() {\n return this._hierarchyChanged;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n doLog({\n category: `${LOGGING_NAMESPACE}.Events`,\n message: /* c8 ignore next */ () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),\n });\n this._nodesCache?.clear();\n }\n\n /**\n * Sets `HierarchyProvider` values formatter that formats nodes' labels. If provided `undefined`, then defaults to the\n * result of `createDefaultValueFormatter` called with default parameters.\n */\n public setFormatter(formatter: IPrimitiveValueFormatter | undefined) {\n this._valuesFormatter = formatter ?? createDefaultValueFormatter();\n this._hierarchyChanged.raiseEvent({ formatterChange: { newFormatter: this._valuesFormatter } });\n }\n\n public setHierarchyFilter(props: IModelHierarchyProviderProps[\"filtering\"]) {\n if (!props) {\n if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition;\n this.invalidateHierarchyCache(\"Hierarchy filter reset\");\n }\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: undefined } });\n return;\n }\n this._activeHierarchyDefinition = new FilteringHierarchyDefinition({\n imodelAccess: this._imodelAccess,\n source: this._sourceHierarchyDefinition,\n nodeIdentifierPaths: props.paths,\n });\n this.invalidateHierarchyCache(\"Hierarchy filter set\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: props } });\n }\n\n private onGroupingNodeCreated(groupingNode: ProcessedGroupingHierarchyNode, props: GetHierarchyNodesProps) {\n this._nodesCache?.set({ ...props, parentNode: groupingNode }, { observable: from(groupingNode.children), processingStatus: \"pre-processed\" });\n }\n\n private createHierarchyLevelDefinitionsObservable(props: DefineHierarchyLevelProps & RequestContextProp): Observable<HierarchyNodesDefinition> {\n const { requestContext, ...defineHierarchyLevelProps } = props;\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let parentNode = props.parentNode;\n if (parentNode && HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this._imodelAccess.imodelKey) {\n return EMPTY;\n }\n if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {\n parentNode = {\n ...parentNode,\n key: {\n ...parentNode.key,\n instanceKeys: parentNode.key.instanceKeys.filter((ik) => !ik.imodelKey || ik.imodelKey === this._imodelAccess.imodelKey),\n },\n };\n assert(HierarchyNodeKey.isInstances(parentNode.key));\n if (parentNode.key.instanceKeys.length === 0) {\n return EMPTY;\n }\n }\n return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode }).pipe(\n mergeAll(),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n );\n }\n\n private createSourceNodesObservable(\n props: DefineHierarchyLevelProps & { hierarchyLevelSizeLimit?: number | \"unbounded\"; filteredInstanceKeys?: InstanceKey[] } & RequestContextProp,\n ): SourceNodesObservable {\n // pipe definitions to nodes and put \"share replay\" on it\n return this.createHierarchyLevelDefinitionsObservable(props).pipe(\n mergeMap((def): ObservableInput<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({ ...def.node, key: { type: \"generic\", id: def.node.key, source: this._imodelAccess.imodelKey } });\n }\n return this._queryScheduler.scheduleSubscription(\n of(def.query).pipe(\n map((query) => filterQueryByInstanceKeys(query, props.filteredInstanceKeys)),\n mergeMap((query) =>\n readNodes({\n queryExecutor: this._imodelAccess,\n query,\n limit: props.hierarchyLevelSizeLimit,\n parser: this._activeHierarchyDefinition.parseNode ? (row) => this._activeHierarchyDefinition.parseNode!(row, props.parentNode) : undefined,\n }),\n ),\n map((node) => ({\n ...node,\n key: { ...node.key, instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: this._imodelAccess.imodelKey })) },\n })),\n ),\n );\n }),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Read all child nodes ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n shareReplayWithErrors(),\n );\n }\n\n private createPreProcessedNodesObservable(\n queryNodesObservable: SourceNodesObservable,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return queryNodesObservable.pipe(\n // we're going to be mutating the nodes, but don't want to mutate the original one, so just clone it here once\n map((node) => ({ ...node })),\n // set parent node keys on the source node\n map((node) => Object.assign(node, { parentKeys: createParentNodeKeysList(props.parentNode) })),\n // format `ConcatenatedValue` labels into string labels\n mergeMap((node) => applyLabelsFormatting(node, this._valuesFormatter)),\n // we have `ProcessedHierarchyNode` from here\n preProcessNodes(this._activeHierarchyDefinition),\n // process hiding\n createHideIfNoChildrenOperator((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes),\n createHideNodesInHierarchyOperator(\n // note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)\n (n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes,\n false,\n ),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n );\n }\n\n private createProcessedNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return preprocessedNodesObservable.pipe(\n createGroupingOperator(this._imodelAccess, props.parentNode, this._valuesFormatter, this._localizedStrings, undefined, (gn) =>\n this.onGroupingNodeCreated(gn, props),\n ),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${props.requestContext.requestId}] Finished grouping child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n );\n }\n\n private createFinalizedNodesObservable(\n processedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<HierarchyNode> {\n return processedNodesObservable.pipe(\n createDetermineChildrenOperator((n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes),\n postProcessNodes(this._activeHierarchyDefinition),\n sortNodesByLabelOperator,\n map((n): HierarchyNode => {\n if (\"processingParams\" in n) {\n delete n.processingParams;\n }\n return Object.assign(n, {\n children: hasChildren(n),\n });\n }),\n takeUntil(this._dispose),\n finalize(() =>\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: /* c8 ignore next */ () =>\n `[${props.requestContext.requestId}] Finished finalizing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n }),\n ),\n );\n }\n\n private createHasNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n possiblyKnownChildrenObservable: SourceNodesObservable | undefined,\n props: RequestContextProp,\n ): Observable<boolean> {\n const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;\n return concat((possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))), preprocessedNodesObservable).pipe(\n log({\n category: loggingCategory,\n message: /* c8 ignore next */ (n) => `[${props.requestContext.requestId}] Node before mapping to 'true': ${createNodeIdentifierForLogging(n)}`,\n }),\n take(1),\n map(() => true),\n defaultIfEmpty(false),\n catchError((e: Error) => {\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,\n });\n if (e instanceof RowsLimitExceededError) {\n return of(true);\n }\n throw e;\n }),\n log({ category: loggingCategory, message: /* c8 ignore next */ (r) => `[${props.requestContext.requestId}] Result: ${r}` }),\n );\n }\n\n private getCachedObservableEntry(props: GetHierarchyNodesProps & RequestContextProp): HierarchyCacheEntry {\n const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;\n const { parentNode, ...restProps } = props;\n const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);\n if (cached) {\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\n `[${props.requestContext.requestId}] Found query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return cached;\n }\n\n // if we don't find an entry for a grouping node, we load its instances by getting a query and applying\n // a filter based on grouped instance keys\n let filteredInstanceKeys: InstanceKey[] | undefined;\n let parentNonGroupingNode: ParentHierarchyNode<NonGroupingHierarchyNode> | undefined;\n if (parentNode) {\n if (HierarchyNode.isGroupingNode(parentNode)) {\n parentNonGroupingNode = parentNode.nonGroupingAncestor;\n filteredInstanceKeys = parentNode.groupedInstanceKeys;\n } else {\n // not sure why type checker doesn't pick this up\n assert(HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n parentNonGroupingNode = parentNode;\n }\n }\n\n const nonGroupingNodeChildrenRequestProps = {\n ...restProps,\n parentNode: parentNonGroupingNode,\n ...(filteredInstanceKeys ? { filteredInstanceKeys } : undefined),\n };\n const value = { observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps), processingStatus: \"none\" as const };\n this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return value;\n }\n\n private getChildNodesObservables(props: GetHierarchyNodesProps & { hierarchyLevelSizeLimit?: number | \"unbounded\" } & RequestContextProp) {\n const entry = this.getCachedObservableEntry(props);\n switch (entry.processingStatus) {\n case \"none\": {\n const pre = this.createPreProcessedNodesObservable(entry.observable, props);\n const post = this.createProcessedNodesObservable(pre, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(pre, entry.observable, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n case \"pre-processed\": {\n const post = this.createProcessedNodesObservable(entry.observable, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(entry.observable, undefined, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n }\n }\n\n /**\n * Creates and runs a query based on provided props, then processes retrieved nodes and returns them.\n */\n public getNodes(props: GetHierarchyNodesProps): AsyncIterableIterator<HierarchyNode> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodes`;\n const timer = new StopWatch(undefined, true);\n let error: any;\n let nodesCount = 0;\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n return eachValueFrom(\n this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe(\n tap(() => ++nodesCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\n /* c8 ignore next 3 */ error\n ? `[${requestContext.requestId}] Error creating child nodes for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n\n private getNodeInstanceKeysObs(props: Omit<GetHierarchyNodesProps, \"ignoreCache\"> & RequestContextProp): Observable<InstanceKey> {\n const { parentNode, instanceFilter, hierarchyLevelSizeLimit = \"unbounded\", requestContext } = props;\n if (parentNode && HierarchyNode.isGroupingNode(parentNode)) {\n return from(parentNode.groupedInstanceKeys);\n }\n assert(!parentNode || HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n\n const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });\n\n // split the definitions based on whether they're for generic nodes or for instance nodes\n const [genericDefs, instanceDefs] = partition(hierarchyLevelDefinitions, HierarchyNodesDefinition.isGenericNode);\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap((def) =>\n this._queryScheduler.scheduleSubscription(\n of(def.query).pipe(\n mergeMap(async (query) => {\n const ecsql = `\n SELECT\n ${NodeSelectClauseColumnNames.FullClassName},\n ${NodeSelectClauseColumnNames.ECInstanceId},\n ${NodeSelectClauseColumnNames.HideNodeInHierarchy}\n FROM (\n ${query.ecsql}\n )\n `;\n const reader = this._imodelAccess.createQueryReader(\n { ...query, ecsql },\n {\n rowFormat: \"Indexes\",\n limit: hierarchyLevelSizeLimit,\n restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${Guid.createValue()}`,\n },\n );\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: this._imodelAccess.imodelKey,\n } satisfies IModelInstanceKey,\n hide: !!row[2],\n })),\n );\n }),\n mergeAll(),\n ),\n ),\n ),\n );\n // split the instance keys observable based on whether they should be hidden or not\n const [visibleNodeInstanceKeys, hiddenNodeInstanceKeys] = partition(instanceKeys, ({ hide }) => !hide);\n\n // hidden items' handling:\n // - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,\n // - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`\n const hiddenParentNodes = merge(\n genericDefs.pipe(\n filter((def) => !!def.node.processingParams?.hideInHierarchy),\n map(\n (def): GenericNodeKey => ({\n type: \"generic\",\n id: def.node.key,\n source: this._imodelAccess.imodelKey,\n }),\n ),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key.id,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, ids]) => ({\n type: \"instances\",\n instanceKeys: ids.map((id) => ({ className, id, imodelKey: this._imodelAccess.imodelKey })),\n })),\n ),\n ),\n ).pipe(\n map((key) => ({\n key,\n parentKeys: [],\n label: \"\",\n })),\n );\n\n // merge visible instance keys from this level & the ones we get recursively requesting from deeper levels\n return merge(\n visibleNodeInstanceKeys.pipe(map(({ key }) => key)),\n hiddenParentNodes.pipe(mergeMap((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext }))),\n ).pipe(takeUntil(this._dispose));\n }\n\n /**\n * Creates an iterator for all child hierarchy level instance keys, taking into account any hidden hierarchy levels\n * that there may be under the given parent node.\n */\n public getNodeInstanceKeys(props: Omit<GetHierarchyNodesProps, \"ignoreCache\">): AsyncIterableIterator<InstanceKey> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;\n const timer = new StopWatch(undefined, true);\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () => `[${requestContext.requestId}] Requesting keys for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let error: any;\n let keysCount = 0;\n return eachValueFrom(\n this.getNodeInstanceKeysObs({ ...props, requestContext }).pipe(\n tap(() => ++keysCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n doLog({\n category: loggingCategory,\n message: /* c8 ignore next */ () =>\n /* c8 ignore next 3 */ error\n ? `[${requestContext.requestId}] Error creating node instance keys for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n}\n\ntype SourceHierarchyNode = SourceInstanceHierarchyNode | (Omit<SourceGenericHierarchyNode, \"key\"> & { key: GenericNodeKey });\ntype SourceNodesObservable = Observable<SourceHierarchyNode>;\ntype ProcessedNodesObservable = Observable<ProcessedHierarchyNode>;\ntype HierarchyCacheEntry =\n | { observable: SourceNodesObservable; processingStatus: \"none\" }\n | { observable: ProcessedNodesObservable; processingStatus: \"pre-processed\" };\n\nfunction preProcessNodes(hierarchyFactory: RxjsHierarchyDefinition) {\n return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode) : identity;\n}\n\nfunction postProcessNodes(hierarchyFactory: RxjsHierarchyDefinition) {\n return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode) : identity;\n}\n\nfunction processNodes<TNode>(processor: (node: TNode) => Observable<TNode>) {\n return (nodes: Observable<TNode>) => nodes.pipe(mergeMap(processor));\n}\n\nfunction applyLabelsFormatting<TNode extends { label: string | ConcatenatedValue }>(\n node: TNode,\n valueFormatter: IPrimitiveValueFormatter,\n): Observable<TNode & { label: string }> {\n return from(\n formatConcatenatedValue({\n value: node.label,\n valueFormatter,\n }),\n ).pipe(\n map((label) => ({\n ...node,\n label,\n })),\n );\n}\n\nfunction createParentNodeKeysList(parentNode: ParentHierarchyNode | undefined) {\n if (!parentNode) {\n return [];\n }\n return [...parentNode.parentKeys, parentNode.key];\n}\n\nfunction filterQueryByInstanceKeys(query: ECSqlQueryDef, filteredInstanceKeys: InstanceKey[] | undefined): ECSqlQueryDef {\n if (!filteredInstanceKeys || !filteredInstanceKeys.length) {\n return query;\n }\n const MAX_ALLOWED_BINDINGS = 1000;\n if (filteredInstanceKeys.length < MAX_ALLOWED_BINDINGS) {\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE q.ECInstanceId IN (${filteredInstanceKeys.map(() => \"?\").join(\",\")})\n `,\n bindings: [...(query.bindings ?? []), ...filteredInstanceKeys.map((k): ECSqlBinding => ({ type: \"id\", value: k.id }))],\n };\n }\n /* c8 ignore start */\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE InVirtualSet(?, q.ECInstanceId)\n `,\n bindings: [...(query.bindings ?? []), { type: \"idset\", value: filteredInstanceKeys.map((k) => k.id) }],\n };\n /* c8 ignore end */\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelHierarchyProvider.js","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/IModelHierarchyProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport \"../internal/DisposePolyfill.js\";\n\nimport {\n catchError,\n concat,\n defaultIfEmpty,\n EMPTY,\n filter,\n finalize,\n from,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n Observable,\n ObservableInput,\n of,\n Subject,\n take,\n takeUntil,\n tap,\n} from \"rxjs\";\nimport { assert, BeEvent, Guid, GuidString, StopWatch } from \"@itwin/core-bentley\";\nimport {\n ConcatenatedValue,\n createDefaultValueFormatter,\n ECClassHierarchyInspector,\n ECSchemaProvider,\n ECSqlBinding,\n ECSqlQueryDef,\n Event,\n EventArgs,\n formatConcatenatedValue,\n InstanceKey,\n IPrimitiveValueFormatter,\n normalizeFullClassName,\n} from \"@itwin/presentation-shared\";\nimport { RowsLimitExceededError } from \"../HierarchyErrors.js\";\nimport { HierarchyFilteringPath } from \"../HierarchyFiltering.js\";\nimport { HierarchyNode, NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, HierarchyNodeKey, IModelInstanceKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport { GetHierarchyNodesProps, HierarchyProvider } from \"../HierarchyProvider.js\";\nimport {\n LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE,\n LOGGING_NAMESPACE_INTERNAL as BASE_LOGGING_NAMESPACE_INTERNAL,\n LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE,\n createNodeIdentifierForLogging,\n hasChildren,\n} from \"../internal/Common.js\";\nimport { eachValueFrom } from \"../internal/EachValueFrom.js\";\nimport { doLog, log } from \"../internal/LoggingUtils.js\";\nimport { partition } from \"../internal/operators/Partition.js\";\nimport { reduceToMergeMapList } from \"../internal/operators/ReduceToMergeMap.js\";\nimport { shareReplayWithErrors } from \"../internal/operators/ShareReplayWithErrors.js\";\nimport { sortNodesByLabelOperator } from \"../internal/operators/Sorting.js\";\nimport { getRxjsHierarchyDefinition, RxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { SubscriptionScheduler } from \"../internal/SubscriptionScheduler.js\";\nimport { FilteringHierarchyDefinition } from \"./FilteringHierarchyDefinition.js\";\nimport { HierarchyCache } from \"./HierarchyCache.js\";\nimport {\n DefineHierarchyLevelProps,\n HierarchyDefinition,\n HierarchyNodesDefinition,\n} from \"./IModelHierarchyDefinition.js\";\nimport {\n ProcessedGroupingHierarchyNode,\n ProcessedHierarchyNode,\n SourceGenericHierarchyNode,\n SourceInstanceHierarchyNode,\n} from \"./IModelHierarchyNode.js\";\nimport { LimitingECSqlQueryExecutor } from \"./LimitingECSqlQueryExecutor.js\";\nimport { NodeSelectClauseColumnNames } from \"./NodeSelectQueryFactory.js\";\nimport { createDetermineChildrenOperator } from \"./operators/DetermineChildren.js\";\nimport { createGroupingOperator } from \"./operators/Grouping.js\";\nimport { createHideIfNoChildrenOperator } from \"./operators/HideIfNoChildren.js\";\nimport { createHideNodesInHierarchyOperator } from \"./operators/HideNodesInHierarchy.js\";\nimport { readNodes } from \"./TreeNodesReader.js\";\n\nconst LOGGING_NAMESPACE = `${BASE_LOGGING_NAMESPACE}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_INTERNAL = `${BASE_LOGGING_NAMESPACE_INTERNAL}.IModelHierarchyProvider`;\nconst LOGGING_NAMESPACE_PERFORMANCE = `${BASE_LOGGING_NAMESPACE_PERFORMANCE}.IModelHierarchyProvider`;\n\nconst DEFAULT_QUERY_CONCURRENCY = 10;\nconst DEFAULT_QUERY_CACHE_SIZE = 1;\n\n/**\n * Defines the strings used by hierarchy provider.\n * @public\n */\ninterface IModelHierarchyProviderLocalizedStrings {\n /**\n * A string for \"Unspecified\". Used for labels of property grouping nodes\n * that group by an empty value.\n */\n unspecified: string;\n\n /**\n * A string for \"Other\". Used for label of a range property grouping node that\n * groups values which don't fit into any other range.\n */\n other: string;\n}\n\n/** @public */\ntype IModelAccess = ECSchemaProvider & LimitingECSqlQueryExecutor & ECClassHierarchyInspector & { imodelKey: string };\n\n/**\n * Props for `createIModelHierarchyProvider`.\n * @public\n */\ninterface IModelHierarchyProviderProps {\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /** An event that is raised when iModel data, that may affect the hierarchy, changes. */\n imodelChanged?: Event<() => void>;\n\n /**\n * A function that returns a hierarchy definition, describing how the hierarchy that the provider should be create. The\n * function is called once during the provider's construction.\n */\n hierarchyDefinition: HierarchyDefinition;\n\n /** Maximum number of queries that the provider attempts to execute in parallel. Defaults to `10`. */\n queryConcurrency?: number;\n /**\n * The amount of queries whose results are stored in-memory for quick retrieval. Defaults to `1`,\n * which means only results of the last run query are cached.\n */\n queryCacheSize?: number;\n\n /** A set of localized strings to use. Defaults to English strings. */\n localizedStrings?: Partial<IModelHierarchyProviderLocalizedStrings>;\n\n /**\n * A values formatter for formatting node labels. Defaults to the\n * result of `createDefaultValueFormatter` called with default parameters. May be overridden\n * by calling `setFormatter` on the provider instance.\n */\n formatter?: IPrimitiveValueFormatter;\n /** Props for filtering the hierarchy. */\n filtering?: {\n /** A list of node identifiers from root to target node. */\n paths: HierarchyFilteringPath[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & {\n /** @deprecated in 1.4. Use `[Symbol.dispose]` instead. */\n dispose: () => void;\n [Symbol.dispose]: () => void;\n} {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: { requestId: string };\n}\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodelAccess: IModelAccess;\n private _hierarchyChanged: BeEvent<(args?: EventArgs<HierarchyProvider[\"hierarchyChanged\"]>) => void>;\n private _valuesFormatter: IPrimitiveValueFormatter;\n private _sourceHierarchyDefinition: RxjsHierarchyDefinition;\n private _activeHierarchyDefinition: RxjsHierarchyDefinition;\n private _localizedStrings: IModelHierarchyProviderLocalizedStrings;\n private _queryScheduler: SubscriptionScheduler;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n #componentId: GuidString;\n #componentName: string;\n\n public constructor(props: IModelHierarchyProviderProps) {\n this.#componentId = Guid.createValue();\n this.#componentName = \"IModelHierarchyProviderImpl\";\n this._imodelAccess = props.imodelAccess;\n this._hierarchyChanged = new BeEvent();\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition = getRxjsHierarchyDefinition(\n props.hierarchyDefinition,\n );\n this._valuesFormatter = props?.formatter ?? createDefaultValueFormatter();\n this._localizedStrings = { other: \"Other\", unspecified: \"Not specified\", ...props?.localizedStrings };\n this._queryScheduler = new SubscriptionScheduler(props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY);\n this.setHierarchyFilter(props.filtering);\n\n const queryCacheSize = props.queryCacheSize ?? DEFAULT_QUERY_CACHE_SIZE;\n if (queryCacheSize !== 0) {\n this._nodesCache = new HierarchyCache({\n // we divide the size by 2, because each variation also counts as a query that we cache\n size: Math.ceil(queryCacheSize / 2),\n variationsCount: 1,\n });\n }\n\n this._unsubscribe = props.imodelChanged?.addListener(() => {\n this.invalidateHierarchyCache(\"Data source changed\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent();\n });\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* v8 ignore next -- @preserve */\n public dispose() {\n this[Symbol.dispose]();\n }\n\n public get hierarchyChanged() {\n return this._hierarchyChanged;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n /* v8 ignore next -- @preserve */\n doLog({\n category: `${LOGGING_NAMESPACE}.Events`,\n message: () => (reason ? `${reason}: clear hierarchy cache` : `Clear hierarchy cache`),\n });\n this._nodesCache?.clear();\n }\n\n /**\n * Sets `HierarchyProvider` values formatter that formats nodes' labels. If provided `undefined`, then defaults to the\n * result of `createDefaultValueFormatter` called with default parameters.\n */\n public setFormatter(formatter: IPrimitiveValueFormatter | undefined) {\n this._valuesFormatter = formatter ?? createDefaultValueFormatter();\n this._hierarchyChanged.raiseEvent({ formatterChange: { newFormatter: this._valuesFormatter } });\n }\n\n public setHierarchyFilter(props: IModelHierarchyProviderProps[\"filtering\"]) {\n if (!props) {\n if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition;\n this.invalidateHierarchyCache(\"Hierarchy filter reset\");\n }\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: undefined } });\n return;\n }\n this._activeHierarchyDefinition = new FilteringHierarchyDefinition({\n imodelAccess: this._imodelAccess,\n source: this._sourceHierarchyDefinition,\n nodeIdentifierPaths: props.paths,\n });\n this.invalidateHierarchyCache(\"Hierarchy filter set\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({ filterChange: { newFilter: props } });\n }\n\n private onGroupingNodeCreated(groupingNode: ProcessedGroupingHierarchyNode, props: GetHierarchyNodesProps) {\n this._nodesCache?.set(\n { ...props, parentNode: groupingNode },\n { observable: from(groupingNode.children), processingStatus: \"pre-processed\" },\n );\n }\n\n private createHierarchyLevelDefinitionsObservable(\n props: DefineHierarchyLevelProps & RequestContextProp,\n ): Observable<HierarchyNodesDefinition> {\n const { requestContext, ...defineHierarchyLevelProps } = props;\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${requestContext.requestId}] Requesting hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let parentNode = props.parentNode;\n if (\n parentNode &&\n HierarchyNode.isGeneric(parentNode) &&\n parentNode.key.source &&\n parentNode.key.source !== this._imodelAccess.imodelKey\n ) {\n return EMPTY;\n }\n if (parentNode && HierarchyNode.isInstancesNode(parentNode)) {\n parentNode = {\n ...parentNode,\n key: {\n ...parentNode.key,\n instanceKeys: parentNode.key.instanceKeys.filter(\n (ik) => !ik.imodelKey || ik.imodelKey === this._imodelAccess.imodelKey,\n ),\n },\n };\n assert(HierarchyNodeKey.isInstances(parentNode.key));\n if (parentNode.key.instanceKeys.length === 0) {\n return EMPTY;\n }\n }\n return this._activeHierarchyDefinition.defineHierarchyLevel({ ...defineHierarchyLevelProps, parentNode }).pipe(\n mergeAll(),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${requestContext.requestId}] Received all hierarchy level definitions for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createSourceNodesObservable(\n props: DefineHierarchyLevelProps & {\n hierarchyLevelSizeLimit?: number | \"unbounded\";\n filteredInstanceKeys?: InstanceKey[];\n } & RequestContextProp,\n ): SourceNodesObservable {\n // pipe definitions to nodes and put \"share replay\" on it\n return this.createHierarchyLevelDefinitionsObservable(props).pipe(\n mergeMap((def): ObservableInput<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({ ...def.node, key: { type: \"generic\", id: def.node.key, source: this._imodelAccess.imodelKey } });\n }\n return this._queryScheduler.scheduleSubscription(\n of(def.query).pipe(\n map((query) => filterQueryByInstanceKeys(query, props.filteredInstanceKeys)),\n mergeMap((query) =>\n readNodes({\n queryExecutor: this._imodelAccess,\n query,\n limit: props.hierarchyLevelSizeLimit,\n parser: this._activeHierarchyDefinition.parseNode\n ? (row) => this._activeHierarchyDefinition.parseNode!(row, props.parentNode)\n : undefined,\n }),\n ),\n map((node) => ({\n ...node,\n key: {\n ...node.key,\n instanceKeys: node.key.instanceKeys.map((key) => ({ ...key, imodelKey: this._imodelAccess.imodelKey })),\n },\n })),\n ),\n );\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Read all child nodes ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n shareReplayWithErrors(),\n );\n }\n\n private createPreProcessedNodesObservable(\n queryNodesObservable: SourceNodesObservable,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return queryNodesObservable.pipe(\n // we're going to be mutating the nodes, but don't want to mutate the original one, so just clone it here once\n map((node) => ({ ...node })),\n // set parent node keys on the source node\n map((node) => Object.assign(node, { parentKeys: createParentNodeKeysList(props.parentNode) })),\n // format `ConcatenatedValue` labels into string labels\n mergeMap((node) => applyLabelsFormatting(node, this._valuesFormatter)),\n // we have `ProcessedHierarchyNode` from here\n preProcessNodes(this._activeHierarchyDefinition),\n // process hiding\n createHideIfNoChildrenOperator(\n (n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes,\n ),\n createHideNodesInHierarchyOperator(\n // note: for child nodes created because of hidden parent, we want to use parent's request props (instance filter, limit)\n (n) => this.getChildNodesObservables({ ...props, parentNode: n }).processedNodes,\n false,\n ),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished pre-processing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createProcessedNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<ProcessedHierarchyNode> {\n return preprocessedNodesObservable.pipe(\n createGroupingOperator(\n this._imodelAccess,\n props.parentNode,\n this._valuesFormatter,\n this._localizedStrings,\n undefined,\n (gn) => this.onGroupingNodeCreated(gn, props),\n ),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished grouping child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createFinalizedNodesObservable(\n processedNodesObservable: Observable<ProcessedHierarchyNode>,\n props: GetHierarchyNodesProps & RequestContextProp,\n ): Observable<HierarchyNode> {\n return processedNodesObservable.pipe(\n createDetermineChildrenOperator(\n (n) => this.getChildNodesObservables({ parentNode: n, requestContext: props.requestContext }).hasNodes,\n ),\n postProcessNodes(this._activeHierarchyDefinition),\n sortNodesByLabelOperator,\n map((n): HierarchyNode => {\n if (\"processingParams\" in n) {\n delete n.processingParams;\n }\n return Object.assign(n, { children: hasChildren(n) });\n }),\n takeUntil(this._dispose),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: LOGGING_NAMESPACE_PERFORMANCE,\n message: () =>\n `[${props.requestContext.requestId}] Finished finalizing child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n }),\n );\n }\n\n private createHasNodesObservable(\n preprocessedNodesObservable: Observable<ProcessedHierarchyNode>,\n possiblyKnownChildrenObservable: SourceNodesObservable | undefined,\n props: RequestContextProp,\n ): Observable<boolean> {\n const loggingCategory = `${LOGGING_NAMESPACE_INTERNAL}.HasNodes`;\n return concat(\n (possiblyKnownChildrenObservable ?? EMPTY).pipe(filter((n) => hasChildren(n))),\n preprocessedNodesObservable,\n ).pipe(\n /* v8 ignore next -- @preserve */\n log({\n category: loggingCategory,\n message: (n) =>\n `[${props.requestContext.requestId}] Node before mapping to 'true': ${createNodeIdentifierForLogging(n)}`,\n }),\n take(1),\n map(() => true),\n defaultIfEmpty(false),\n catchError((e: Error) => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () => `[${props.requestContext.requestId}] Error while determining children: ${e.message}`,\n });\n if (e instanceof RowsLimitExceededError) {\n return of(true);\n }\n throw e;\n }),\n /* v8 ignore next -- @preserve */\n log({ category: loggingCategory, message: (r) => `[${props.requestContext.requestId}] Result: ${r}` }),\n );\n }\n\n private getCachedObservableEntry(props: GetHierarchyNodesProps & RequestContextProp): HierarchyCacheEntry {\n const loggingCategory = `${LOGGING_NAMESPACE}.QueryResultsCache`;\n const { parentNode, ...restProps } = props;\n const cached = props.ignoreCache || !this._nodesCache ? undefined : this._nodesCache.get(props);\n if (cached) {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${props.requestContext.requestId}] Found query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return cached;\n }\n\n // if we don't find an entry for a grouping node, we load its instances by getting a query and applying\n // a filter based on grouped instance keys\n let filteredInstanceKeys: InstanceKey[] | undefined;\n let parentNonGroupingNode: ParentHierarchyNode<NonGroupingHierarchyNode> | undefined;\n if (parentNode) {\n if (HierarchyNode.isGroupingNode(parentNode)) {\n parentNonGroupingNode = parentNode.nonGroupingAncestor;\n filteredInstanceKeys = parentNode.groupedInstanceKeys;\n } else {\n // not sure why type checker doesn't pick this up\n assert(HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n parentNonGroupingNode = parentNode;\n }\n }\n\n const nonGroupingNodeChildrenRequestProps = {\n ...restProps,\n parentNode: parentNonGroupingNode,\n ...(filteredInstanceKeys ? { filteredInstanceKeys } : undefined),\n };\n const value = {\n observable: this.createSourceNodesObservable(nonGroupingNodeChildrenRequestProps),\n processingStatus: \"none\" as const,\n };\n this._nodesCache?.set(nonGroupingNodeChildrenRequestProps, value);\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${props.requestContext.requestId}] Saved query nodes observable for ${createNodeIdentifierForLogging(parentNode)}`,\n });\n return value;\n }\n\n private getChildNodesObservables(\n props: GetHierarchyNodesProps & { hierarchyLevelSizeLimit?: number | \"unbounded\" } & RequestContextProp,\n ) {\n const entry = this.getCachedObservableEntry(props);\n switch (entry.processingStatus) {\n case \"none\": {\n const pre = this.createPreProcessedNodesObservable(entry.observable, props);\n const post = this.createProcessedNodesObservable(pre, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(pre, entry.observable, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n case \"pre-processed\": {\n const post = this.createProcessedNodesObservable(entry.observable, props);\n return {\n processedNodes: post,\n hasNodes: this.createHasNodesObservable(entry.observable, undefined, props),\n finalizedNodes: this.createFinalizedNodesObservable(post, props),\n };\n }\n }\n }\n\n /**\n * Creates and runs a query based on provided props, then processes retrieved nodes and returns them.\n */\n public getNodes(props: GetHierarchyNodesProps): AsyncIterableIterator<HierarchyNode> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodes`;\n const timer = new StopWatch(undefined, true);\n let error: any;\n let nodesCount = 0;\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${requestContext.requestId}] Requesting child nodes for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n return eachValueFrom(\n this.getChildNodesObservables({ ...props, requestContext }).finalizedNodes.pipe(\n tap(() => ++nodesCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n error\n ? `[${requestContext.requestId}] Error creating child nodes for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${nodesCount} child nodes for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n\n private getNodeInstanceKeysObs(\n props: Omit<GetHierarchyNodesProps, \"ignoreCache\"> & RequestContextProp,\n ): Observable<InstanceKey> {\n const { parentNode, instanceFilter, hierarchyLevelSizeLimit = \"unbounded\", requestContext } = props;\n if (parentNode && HierarchyNode.isGroupingNode(parentNode)) {\n return from(parentNode.groupedInstanceKeys);\n }\n assert(!parentNode || HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n\n const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({\n parentNode,\n instanceFilter,\n requestContext,\n });\n\n // split the definitions based on whether they're for generic nodes or for instance nodes\n const [genericDefs, instanceDefs] = partition(hierarchyLevelDefinitions, HierarchyNodesDefinition.isGenericNode);\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap((def) =>\n this._queryScheduler.scheduleSubscription(\n of(def.query).pipe(\n mergeMap(async (query) => {\n const ecsql = `\n SELECT\n ${NodeSelectClauseColumnNames.FullClassName},\n ${NodeSelectClauseColumnNames.ECInstanceId},\n ${NodeSelectClauseColumnNames.HideNodeInHierarchy}\n FROM (\n ${query.ecsql}\n )\n `;\n const reader = this._imodelAccess.createQueryReader(\n { ...query, ecsql },\n {\n rowFormat: \"Indexes\",\n limit: hierarchyLevelSizeLimit,\n restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${Guid.createValue()}`,\n },\n );\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: this._imodelAccess.imodelKey,\n } satisfies IModelInstanceKey,\n hide: !!row[2],\n })),\n );\n }),\n mergeAll(),\n ),\n ),\n ),\n );\n // split the instance keys observable based on whether they should be hidden or not\n const [visibleNodeInstanceKeys, hiddenNodeInstanceKeys] = partition(instanceKeys, ({ hide }) => !hide);\n\n // hidden items' handling:\n // - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,\n // - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`\n const hiddenParentNodes = merge(\n genericDefs.pipe(\n filter((def) => !!def.node.processingParams?.hideInHierarchy),\n map((def): GenericNodeKey => ({ type: \"generic\", id: def.node.key, source: this._imodelAccess.imodelKey })),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key.id,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, ids]) => ({\n type: \"instances\",\n instanceKeys: ids.map((id) => ({ className, id, imodelKey: this._imodelAccess.imodelKey })),\n })),\n ),\n ),\n ).pipe(map((key) => ({ key, parentKeys: [], label: \"\" })));\n\n // merge visible instance keys from this level & the ones we get recursively requesting from deeper levels\n return merge(\n visibleNodeInstanceKeys.pipe(map(({ key }) => key)),\n hiddenParentNodes.pipe(\n mergeMap((hiddenNode) => this.getNodeInstanceKeysObs({ parentNode: hiddenNode, requestContext })),\n ),\n ).pipe(takeUntil(this._dispose));\n }\n\n /**\n * Creates an iterator for all child hierarchy level instance keys, taking into account any hidden hierarchy levels\n * that there may be under the given parent node.\n */\n public getNodeInstanceKeys(props: Omit<GetHierarchyNodesProps, \"ignoreCache\">): AsyncIterableIterator<InstanceKey> {\n const requestContext = { requestId: Guid.createValue() };\n const loggingCategory = `${LOGGING_NAMESPACE}.GetNodeInstanceKeys`;\n const timer = new StopWatch(undefined, true);\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n `[${requestContext.requestId}] Requesting keys for ${createNodeIdentifierForLogging(props.parentNode)}`,\n });\n let error: any;\n let keysCount = 0;\n return eachValueFrom(\n this.getNodeInstanceKeysObs({ ...props, requestContext }).pipe(\n tap(() => ++keysCount),\n catchError((e) => {\n error = e;\n throw e;\n }),\n finalize(() => {\n /* v8 ignore next -- @preserve */\n doLog({\n category: loggingCategory,\n message: () =>\n error\n ? `[${requestContext.requestId}] Error creating node instance keys for ${createNodeIdentifierForLogging(props.parentNode)}: ${error instanceof Error ? error.message : error.toString()}`\n : `[${requestContext.requestId}] Returned ${keysCount} instance keys for ${createNodeIdentifierForLogging(props.parentNode)} in ${timer.currentSeconds.toFixed(2)} s.`,\n });\n }),\n ),\n );\n }\n}\n\ntype SourceHierarchyNode =\n | SourceInstanceHierarchyNode\n | (Omit<SourceGenericHierarchyNode, \"key\"> & { key: GenericNodeKey });\ntype SourceNodesObservable = Observable<SourceHierarchyNode>;\ntype ProcessedNodesObservable = Observable<ProcessedHierarchyNode>;\ntype HierarchyCacheEntry =\n | { observable: SourceNodesObservable; processingStatus: \"none\" }\n | { observable: ProcessedNodesObservable; processingStatus: \"pre-processed\" };\n\nfunction preProcessNodes(hierarchyFactory: RxjsHierarchyDefinition) {\n return hierarchyFactory.preProcessNode ? processNodes(hierarchyFactory.preProcessNode) : identity;\n}\n\nfunction postProcessNodes(hierarchyFactory: RxjsHierarchyDefinition) {\n return hierarchyFactory.postProcessNode ? processNodes(hierarchyFactory.postProcessNode) : identity;\n}\n\nfunction processNodes<TNode>(processor: (node: TNode) => Observable<TNode>) {\n return (nodes: Observable<TNode>) => nodes.pipe(mergeMap(processor));\n}\n\nfunction applyLabelsFormatting<TNode extends { label: string | ConcatenatedValue }>(\n node: TNode,\n valueFormatter: IPrimitiveValueFormatter,\n): Observable<TNode & { label: string }> {\n return from(formatConcatenatedValue({ value: node.label, valueFormatter })).pipe(\n map((label) => ({ ...node, label })),\n );\n}\n\nfunction createParentNodeKeysList(parentNode: ParentHierarchyNode | undefined) {\n if (!parentNode) {\n return [];\n }\n return [...parentNode.parentKeys, parentNode.key];\n}\n\nfunction filterQueryByInstanceKeys(\n query: ECSqlQueryDef,\n filteredInstanceKeys: InstanceKey[] | undefined,\n): ECSqlQueryDef {\n if (!filteredInstanceKeys || !filteredInstanceKeys.length) {\n return query;\n }\n const MAX_ALLOWED_BINDINGS = 1000;\n // TODO: MISSING_COVERAGE\n /* v8 ignore else -- @preserve */\n if (filteredInstanceKeys.length < MAX_ALLOWED_BINDINGS) {\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE q.ECInstanceId IN (${filteredInstanceKeys.map(() => \"?\").join(\",\")})\n `,\n bindings: [\n ...(query.bindings ?? []),\n ...filteredInstanceKeys.map((k): ECSqlBinding => ({ type: \"id\", value: k.id })),\n ],\n };\n }\n /* v8 ignore start */\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE InVirtualSet(?, q.ECInstanceId)\n `,\n bindings: [...(query.bindings ?? []), { type: \"idset\", value: filteredInstanceKeys.map((k) => k.id) }],\n };\n /* v8 ignore stop */\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LimitingECSqlQueryExecutor.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/LimitingECSqlQueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EAGxB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"LimitingECSqlQueryExecutor.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/LimitingECSqlQueryExecutor.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EAGxB,MAAM,4BAA4B,CAAC;AAQpC;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;OAIG;IACH,iBAAiB,CACf,KAAK,EAAE,aAAa,EACpB,MAAM,CAAC,EAAE,uBAAuB,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,GAClE,UAAU,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,YAAY,EAAE,kBAAkB,EAChC,YAAY,EAAE,MAAM,GAAG,WAAW,GACjC,0BAA0B,CA+C5B"}
|