@itwin/presentation-hierarchies 2.0.0-alpha.6 → 2.0.0-alpha.7

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 (65) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +3 -3
  3. package/lib/cjs/hierarchies/HierarchyMerge.js +1 -1
  4. package/lib/cjs/hierarchies/HierarchyMerge.js.map +1 -1
  5. package/lib/cjs/hierarchies/HierarchyNode.d.ts +14 -24
  6. package/lib/cjs/hierarchies/HierarchyNode.d.ts.map +1 -1
  7. package/lib/cjs/hierarchies/HierarchyNode.js +1 -21
  8. package/lib/cjs/hierarchies/HierarchyNode.js.map +1 -1
  9. package/lib/cjs/hierarchies/HierarchyProvider.d.ts +11 -11
  10. package/lib/cjs/hierarchies/HierarchyProvider.d.ts.map +1 -1
  11. package/lib/cjs/hierarchies/HierarchyProvider.js.map +1 -1
  12. package/lib/cjs/hierarchies/{HierarchyFiltering.d.ts → HierarchySearch.d.ts} +42 -52
  13. package/lib/cjs/hierarchies/HierarchySearch.d.ts.map +1 -0
  14. package/lib/cjs/hierarchies/{HierarchyFiltering.js → HierarchySearch.js} +69 -85
  15. package/lib/cjs/hierarchies/HierarchySearch.js.map +1 -0
  16. package/lib/cjs/hierarchies/imodel/HierarchyCache.js +3 -3
  17. package/lib/cjs/hierarchies/imodel/HierarchyCache.js.map +1 -1
  18. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts +4 -4
  19. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  20. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js +20 -20
  21. package/lib/cjs/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  22. package/lib/cjs/hierarchies/imodel/{FilteringHierarchyDefinition.d.ts → SearchHierarchyDefinition.d.ts} +10 -10
  23. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  24. package/lib/cjs/hierarchies/imodel/{FilteringHierarchyDefinition.js → SearchHierarchyDefinition.js} +53 -53
  25. package/lib/cjs/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  26. package/lib/cjs/presentation-hierarchies.d.ts +1 -1
  27. package/lib/cjs/presentation-hierarchies.d.ts.map +1 -1
  28. package/lib/cjs/presentation-hierarchies.js +4 -5
  29. package/lib/cjs/presentation-hierarchies.js.map +1 -1
  30. package/lib/esm/hierarchies/HierarchyMerge.js +1 -1
  31. package/lib/esm/hierarchies/HierarchyMerge.js.map +1 -1
  32. package/lib/esm/hierarchies/HierarchyNode.d.ts +14 -24
  33. package/lib/esm/hierarchies/HierarchyNode.d.ts.map +1 -1
  34. package/lib/esm/hierarchies/HierarchyNode.js +0 -20
  35. package/lib/esm/hierarchies/HierarchyNode.js.map +1 -1
  36. package/lib/esm/hierarchies/HierarchyProvider.d.ts +11 -11
  37. package/lib/esm/hierarchies/HierarchyProvider.d.ts.map +1 -1
  38. package/lib/esm/hierarchies/HierarchyProvider.js.map +1 -1
  39. package/lib/esm/hierarchies/{HierarchyFiltering.d.ts → HierarchySearch.d.ts} +42 -52
  40. package/lib/esm/hierarchies/HierarchySearch.d.ts.map +1 -0
  41. package/lib/esm/hierarchies/{HierarchyFiltering.js → HierarchySearch.js} +67 -82
  42. package/lib/esm/hierarchies/HierarchySearch.js.map +1 -0
  43. package/lib/esm/hierarchies/imodel/HierarchyCache.js +3 -3
  44. package/lib/esm/hierarchies/imodel/HierarchyCache.js.map +1 -1
  45. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts +4 -4
  46. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.d.ts.map +1 -1
  47. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js +20 -20
  48. package/lib/esm/hierarchies/imodel/IModelHierarchyProvider.js.map +1 -1
  49. package/lib/esm/hierarchies/imodel/{FilteringHierarchyDefinition.d.ts → SearchHierarchyDefinition.d.ts} +10 -10
  50. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.d.ts.map +1 -0
  51. package/lib/esm/hierarchies/imodel/{FilteringHierarchyDefinition.js → SearchHierarchyDefinition.js} +48 -48
  52. package/lib/esm/hierarchies/imodel/SearchHierarchyDefinition.js.map +1 -0
  53. package/lib/esm/presentation-hierarchies.d.ts +1 -1
  54. package/lib/esm/presentation-hierarchies.d.ts.map +1 -1
  55. package/lib/esm/presentation-hierarchies.js +1 -1
  56. package/lib/esm/presentation-hierarchies.js.map +1 -1
  57. package/package.json +1 -1
  58. package/lib/cjs/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  59. package/lib/cjs/hierarchies/HierarchyFiltering.js.map +0 -1
  60. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  61. package/lib/cjs/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
  62. package/lib/esm/hierarchies/HierarchyFiltering.d.ts.map +0 -1
  63. package/lib/esm/hierarchies/HierarchyFiltering.js.map +0 -1
  64. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.d.ts.map +0 -1
  65. package/lib/esm/hierarchies/imodel/FilteringHierarchyDefinition.js.map +0 -1
@@ -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 defer,\n EMPTY,\n filter,\n finalize,\n from,\n fromEventPattern,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n Observable,\n ObservableInput,\n ObservedValueOf,\n of,\n reduce,\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 GenericHierarchyNodeDefinition,\n HierarchyDefinition,\n HierarchyNodesDefinition,\n InstanceNodesQueryDefinition,\n} 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 /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n\n /**\n * A function that returns a hierarchy definition, describing how the hierarchy that the provider should be create. The\n * function is called once during the provider's construction.\n */\n hierarchyDefinition: HierarchyDefinition;\n\n /** Maximum number of queries that the provider attempts to execute in parallel. Defaults to `10`. */\n queryConcurrency?: number;\n\n /**\n * The amount of queries whose results are stored in-memory for quick retrieval. Defaults to `1`,\n * which means only results of the last run query are cached.\n */\n queryCacheSize?: number;\n\n /** A set of localized strings to use. Defaults to English strings. */\n localizedStrings?: Partial<IModelHierarchyProviderLocalizedStrings>;\n\n /**\n * A values formatter for formatting node labels. Defaults to the\n * result of `createDefaultValueFormatter` called with default parameters. May be overridden\n * by calling `setFormatter` on the provider instance.\n */\n formatter?: IPrimitiveValueFormatter;\n\n /** 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 the iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & Disposable {\n const { imodelAccess, imodelChanged, ...restProps } = props;\n return createMergedIModelHierarchyProvider({ ...restProps, imodels: [{ imodelAccess, imodelChanged }] });\n}\n\n/**\n * Props for `createMergedIModelHierarchyProvider`.\n * @alpha\n */\ninterface MergedIModelHierarchyProviderProps extends Omit<IModelHierarchyProviderProps, \"imodelAccess\" | \"imodelChanged\"> {\n /**\n * A list of iModels to create merged hierarchy for.\n *\n * **Warning:** These **must** all be different versions of the same iModel, ordered from the earliest to the\n * latest version. Not obeying this rule may result in undefined behavior.\n */\n imodels: Array<{\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n }>;\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel\n * and a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * **Warning:** This is an experimental API that **should not be used in production**.\n *\n * @alpha\n */\nexport function createMergedIModelHierarchyProvider(props: MergedIModelHierarchyProviderProps): HierarchyProvider & Disposable {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: {\n requestId: string;\n };\n}\n\ntype WithSourceNameOverride<T> = T & { sourceName?: string };\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodels: Array<{ imodelAccess: IModelAccess; imodelChanged?: Event<() => void> }>;\n private _hierarchyChanged: BeEvent<(args?: EventArgs<HierarchyProvider[\"hierarchyChanged\"]>) => void>;\n private _valuesFormatter: IPrimitiveValueFormatter;\n private _sourceHierarchyDefinition: RxjsHierarchyDefinition;\n private _activeHierarchyDefinition: RxjsHierarchyDefinition;\n private _localizedStrings: IModelHierarchyProviderLocalizedStrings;\n private _queryConcurrency: number;\n private _querySchedulers: Map<string, SubscriptionScheduler>;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n #componentId: GuidString;\n #componentName: string;\n #sourceName: string;\n\n public constructor(props: WithSourceNameOverride<MergedIModelHierarchyProviderProps>) {\n if (props.imodels.length === 0) {\n throw new Error(`Creating an iModel hierarchy provider requires at least one iModel.`);\n }\n\n this.#componentId = Guid.createValue();\n this.#componentName = \"IModelHierarchyProviderImpl\";\n /* c8 ignore next */\n this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;\n this._imodels = props.imodels;\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._queryConcurrency = props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY;\n this._querySchedulers = new Map();\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 const imodelChangeSubscription = from(this._imodels)\n .pipe(\n mergeMap(({ imodelAccess, imodelChanged }) =>\n imodelChanged\n ? fromEventPattern(\n (handler) => imodelChanged.addListener(handler),\n (handler) => imodelChanged.removeListener(handler),\n () => imodelAccess,\n )\n : EMPTY,\n ),\n )\n .subscribe(({ imodelKey }) => {\n this.invalidateHierarchyCache(`Data source changed: \"${imodelKey}\"`);\n this._dispose.next();\n this._hierarchyChanged.raiseEvent();\n });\n this._unsubscribe = () => {\n imodelChangeSubscription.unsubscribe();\n };\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* 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 getQueryScheduler(imodelKey: string) {\n let scheduler = this._querySchedulers.get(imodelKey);\n if (!scheduler) {\n scheduler = new SubscriptionScheduler(this._queryConcurrency);\n this._querySchedulers.set(imodelKey, scheduler);\n }\n return scheduler;\n }\n\n private getPrimaryIModelAccess() {\n return this._imodels[this._imodels.length - 1].imodelAccess;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n 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.getPrimaryIModelAccess(),\n source: this._sourceHierarchyDefinition,\n sourceName: this.#sourceName,\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(\n props: DefineHierarchyLevelProps & RequestContextProp,\n ): Observable<\n { imodelAccess: IModelAccess; imodelAccessIndex: number } & (\n | { hierarchyNodesDefinition: GenericHierarchyNodeDefinition }\n | { hierarchyNodesDefinition: InstanceNodesQueryDefinition }\n )\n > {\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\n return from(this._imodels).pipe(\n mergeMap(({ imodelAccess }, imodelAccessIndex) => {\n let parentNode = props.parentNode;\n if (parentNode && HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this.#sourceName) {\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 === 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 map(\n /* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */\n (hierarchyNodesDefinition) =>\n ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition }) as ObservedValueOf<\n ReturnType<typeof this.createHierarchyLevelDefinitionsObservable>\n >,\n ),\n );\n }),\n finalize(() =>\n 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(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) =>\n defer((): Observable<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({\n ...def.node,\n key: { type: \"generic\" as const, id: def.node.key, source: this.#sourceName },\n });\n }\n return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n of(def.query).pipe(\n map((query) => filterQueryByInstanceKeys(query, props.filteredInstanceKeys)),\n mergeMap((query) =>\n readNodes({\n queryExecutor: 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: imodelAccess.imodelKey })) },\n })),\n ),\n );\n }).pipe(map((node) => ({ imodelAccess, imodelAccessIndex, node }))),\n ),\n mergeNodes,\n map(({ node }) => node),\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 // let consumers step-in\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.getPrimaryIModelAccess(), 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 { ...n, children: hasChildren(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 // split the definitions based on whether they're for generic nodes or for instance nodes\n const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });\n const [instanceDefs, genericDefs] = partition(\n hierarchyLevelDefinitions,\n (\n x,\n ): x is Omit<ObservedValueOf<typeof hierarchyLevelDefinitions>, \"hierarchyNodesDefinition\"> & {\n hierarchyNodesDefinition: InstanceNodesQueryDefinition;\n } => HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition),\n );\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) =>\n this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n of(def.query).pipe(\n mergeMap(async (query) => {\n const ecsql = `\n SELECT\n ${NodeSelectClauseColumnNames.FullClassName},\n ${NodeSelectClauseColumnNames.ECInstanceId},\n ${NodeSelectClauseColumnNames.HideNodeInHierarchy}\n FROM (\n ${query.ecsql}\n )\n `;\n const reader = imodelAccess.createQueryReader(\n { ...query, ecsql },\n {\n rowFormat: \"Indexes\",\n limit: hierarchyLevelSizeLimit,\n restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${Guid.createValue()}`,\n },\n );\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: imodelAccess.imodelKey,\n } satisfies IModelInstanceKey,\n hide: !!row[2],\n })),\n );\n }),\n mergeAll(),\n ),\n ),\n ),\n );\n // split the instance keys observable based on whether they should be hidden or not\n const [visibleNodeInstanceKeys, hiddenNodeInstanceKeys] = partition(instanceKeys, ({ hide }) => !hide);\n\n // hidden items' handling:\n // - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,\n // - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`\n const hiddenParentNodes = merge(\n genericDefs.pipe(\n filter(({ hierarchyNodesDefinition }) => !!hierarchyNodesDefinition.node.processingParams?.hideInHierarchy),\n map(\n ({ hierarchyNodesDefinition }): GenericNodeKey => ({\n type: \"generic\",\n id: hierarchyNodesDefinition.node.key,\n source: this.#sourceName,\n }),\n ),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, keys]) => ({\n type: \"instances\",\n instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),\n })),\n ),\n ),\n ).pipe(\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\nfunction mergeNodes<\n TNode extends { key: GenericNodeKey | InstancesNodeKey },\n TParam extends {\n imodelAccess: IModelAccess;\n imodelAccessIndex: number;\n node: TNode;\n },\n>(source: ObservableInput<TParam>) {\n return from(source).pipe(\n reduce((acc, input) => {\n for (let i = 0; i < acc.length; ++i) {\n if (input.imodelAccess === acc[i].imodelAccess) {\n // don't attempt to merge nodes if they come from the same provider\n continue;\n }\n\n // the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass\n // the node with higher `imodelAccessIndex` first\n const candidates =\n input.imodelAccessIndex > acc[i].imodelAccessIndex\n ? { imodelAccess: input.imodelAccess, imodelAccessIndex: input.imodelAccessIndex, primary: input.node, secondary: acc[i].node }\n : { imodelAccess: acc[i].imodelAccess, imodelAccessIndex: acc[i].imodelAccessIndex, primary: acc[i].node, secondary: input.node };\n const merged = tryMergeNodes(candidates.primary, candidates.secondary);\n if (merged) {\n acc[i] = { ...acc[i], node: merged, imodelAccess: candidates.imodelAccess, imodelAccessIndex: candidates.imodelAccessIndex };\n return acc;\n }\n }\n acc.push(input);\n return acc;\n }, new Array<TParam>()),\n mergeAll(),\n );\n}\nfunction tryMergeInstanceNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n if (\n HierarchyNode.isInstancesNode(primary) &&\n HierarchyNode.isInstancesNode(secondary) &&\n primary.key.instanceKeys.some((lhsKey) => secondary.key.instanceKeys.some((rhsKey) => InstanceKey.equals(lhsKey, rhsKey)))\n ) {\n return {\n ...primary,\n key: {\n type: \"instances\",\n instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys),\n },\n };\n }\n return undefined;\n}\nfunction tryMergeGenericNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n if (HierarchyNode.isGeneric(primary) && HierarchyNode.isGeneric(secondary) && primary.key.type === secondary.key.type) {\n return primary;\n }\n return undefined;\n}\nfunction tryMergeNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;\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 defer,\n EMPTY,\n filter,\n finalize,\n from,\n fromEventPattern,\n identity,\n map,\n merge,\n mergeAll,\n mergeMap,\n Observable,\n ObservableInput,\n ObservedValueOf,\n of,\n reduce,\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 { HierarchyNode, NonGroupingHierarchyNode, ParentHierarchyNode } from \"../HierarchyNode.js\";\nimport { GenericNodeKey, HierarchyNodeKey, IModelInstanceKey, InstancesNodeKey } from \"../HierarchyNodeKey.js\";\nimport { GetHierarchyNodesProps, HierarchyProvider } from \"../HierarchyProvider.js\";\nimport { HierarchySearchPath } from \"../HierarchySearch.js\";\nimport {\n LOGGING_NAMESPACE as BASE_LOGGING_NAMESPACE,\n LOGGING_NAMESPACE_INTERNAL as BASE_LOGGING_NAMESPACE_INTERNAL,\n LOGGING_NAMESPACE_PERFORMANCE as BASE_LOGGING_NAMESPACE_PERFORMANCE,\n createNodeIdentifierForLogging,\n hasChildren,\n} from \"../internal/Common.js\";\nimport { eachValueFrom } from \"../internal/EachValueFrom.js\";\nimport { doLog, log } from \"../internal/LoggingUtils.js\";\nimport { partition } from \"../internal/operators/Partition.js\";\nimport { reduceToMergeMapList } from \"../internal/operators/ReduceToMergeMap.js\";\nimport { shareReplayWithErrors } from \"../internal/operators/ShareReplayWithErrors.js\";\nimport { sortNodesByLabelOperator } from \"../internal/operators/Sorting.js\";\nimport { getRxjsHierarchyDefinition, RxjsHierarchyDefinition } from \"../internal/RxjsHierarchyDefinition.js\";\nimport { SubscriptionScheduler } from \"../internal/SubscriptionScheduler.js\";\nimport { HierarchyCache } from \"./HierarchyCache.js\";\nimport {\n DefineHierarchyLevelProps,\n GenericHierarchyNodeDefinition,\n HierarchyDefinition,\n HierarchyNodesDefinition,\n InstanceNodesQueryDefinition,\n} 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 { SearchHierarchyDefinition } from \"./SearchHierarchyDefinition.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 /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n\n /**\n * A function that returns a hierarchy definition, describing how the hierarchy that the provider should be create. The\n * function is called once during the provider's construction.\n */\n hierarchyDefinition: HierarchyDefinition;\n\n /** Maximum number of queries that the provider attempts to execute in parallel. Defaults to `10`. */\n queryConcurrency?: number;\n\n /**\n * The amount of queries whose results are stored in-memory for quick retrieval. Defaults to `1`,\n * which means only results of the last run query are cached.\n */\n queryCacheSize?: number;\n\n /** A set of localized strings to use. Defaults to English strings. */\n localizedStrings?: Partial<IModelHierarchyProviderLocalizedStrings>;\n\n /**\n * A values formatter for formatting node labels. Defaults to the\n * result of `createDefaultValueFormatter` called with default parameters. May be overridden\n * by calling `setFormatter` on the provider instance.\n */\n formatter?: IPrimitiveValueFormatter;\n\n /** Props for search the hierarchy. */\n search?: {\n /** A list of node identifiers from root to target node. */\n paths: HierarchySearchPath[];\n };\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on given the iModel and\n * a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * @public\n */\nexport function createIModelHierarchyProvider(props: IModelHierarchyProviderProps): HierarchyProvider & Disposable {\n const { imodelAccess, imodelChanged, ...restProps } = props;\n return createMergedIModelHierarchyProvider({ ...restProps, imodels: [{ imodelAccess, imodelChanged }] });\n}\n\n/**\n * Props for `createMergedIModelHierarchyProvider`.\n * @alpha\n */\ninterface MergedIModelHierarchyProviderProps extends Omit<IModelHierarchyProviderProps, \"imodelAccess\" | \"imodelChanged\"> {\n /**\n * A list of iModels to create merged hierarchy for.\n *\n * **Warning:** These **must** all be different versions of the same iModel, ordered from the earliest to the\n * latest version. Not obeying this rule may result in undefined behavior.\n */\n imodels: Array<{\n /**\n * An object that provides access to iModel's data and metadata.\n *\n * @see `ECSchemaProvider`\n * @see `LimitingECSqlQueryExecutor`\n * @see `ECClassHierarchyInspector`\n */\n imodelAccess: IModelAccess;\n\n /**\n * An event that is raised when iModel data, that may affect the hierarchy, changes. The created provider\n * subscribes to the event to know that it needs to reload the data, and unsubscribes on disposal.\n */\n imodelChanged?: Event<() => void>;\n }>;\n}\n\n/**\n * Creates an instance of `HierarchyProvider` that creates a hierarchy based on multiple version of **the same** iModel\n * and a hierarchy definition, which defines each hierarchy level through ECSQL queries.\n *\n * **Warning:** This is an experimental API that **should not be used in production**.\n *\n * @alpha\n */\nexport function createMergedIModelHierarchyProvider(props: MergedIModelHierarchyProviderProps): HierarchyProvider & Disposable {\n return new IModelHierarchyProviderImpl(props);\n}\n\ninterface RequestContextProp {\n requestContext: {\n requestId: string;\n };\n}\n\ntype WithSourceNameOverride<T> = T & { sourceName?: string };\n\nclass IModelHierarchyProviderImpl implements HierarchyProvider {\n private _imodels: Array<{ imodelAccess: IModelAccess; imodelChanged?: Event<() => void> }>;\n private _hierarchyChanged: BeEvent<(args?: EventArgs<HierarchyProvider[\"hierarchyChanged\"]>) => void>;\n private _valuesFormatter: IPrimitiveValueFormatter;\n private _sourceHierarchyDefinition: RxjsHierarchyDefinition;\n private _activeHierarchyDefinition: RxjsHierarchyDefinition;\n private _localizedStrings: IModelHierarchyProviderLocalizedStrings;\n private _queryConcurrency: number;\n private _querySchedulers: Map<string, SubscriptionScheduler>;\n private _nodesCache?: HierarchyCache<HierarchyCacheEntry>;\n private _unsubscribe?: () => void;\n private _dispose = new Subject<void>();\n #componentId: GuidString;\n #componentName: string;\n #sourceName: string;\n\n public constructor(props: WithSourceNameOverride<MergedIModelHierarchyProviderProps>) {\n if (props.imodels.length === 0) {\n throw new Error(`Creating an iModel hierarchy provider requires at least one iModel.`);\n }\n\n this.#componentId = Guid.createValue();\n this.#componentName = \"IModelHierarchyProviderImpl\";\n /* c8 ignore next */\n this.#sourceName = props.sourceName ?? `${this.#componentName}:${this.#componentId}`;\n this._imodels = props.imodels;\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._queryConcurrency = props.queryConcurrency ?? DEFAULT_QUERY_CONCURRENCY;\n this._querySchedulers = new Map();\n this.setHierarchySearch(props.search);\n\n const queryCacheSize = props.queryCacheSize ?? DEFAULT_QUERY_CACHE_SIZE;\n if (queryCacheSize !== 0) {\n this._nodesCache = new HierarchyCache({\n // we divide the size by 2, because each variation also counts as a query that we cache\n size: Math.ceil(queryCacheSize / 2),\n variationsCount: 1,\n });\n }\n\n const imodelChangeSubscription = from(this._imodels)\n .pipe(\n mergeMap(({ imodelAccess, imodelChanged }) =>\n imodelChanged\n ? fromEventPattern(\n (handler) => imodelChanged.addListener(handler),\n (handler) => imodelChanged.removeListener(handler),\n () => imodelAccess,\n )\n : EMPTY,\n ),\n )\n .subscribe(({ imodelKey }) => {\n this.invalidateHierarchyCache(`Data source changed: \"${imodelKey}\"`);\n this._dispose.next();\n this._hierarchyChanged.raiseEvent();\n });\n this._unsubscribe = () => {\n imodelChangeSubscription.unsubscribe();\n };\n }\n\n public [Symbol.dispose]() {\n this._dispose.next();\n this._unsubscribe?.();\n }\n\n /* 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 getQueryScheduler(imodelKey: string) {\n let scheduler = this._querySchedulers.get(imodelKey);\n if (!scheduler) {\n scheduler = new SubscriptionScheduler(this._queryConcurrency);\n this._querySchedulers.set(imodelKey, scheduler);\n }\n return scheduler;\n }\n\n private getPrimaryIModelAccess() {\n return this._imodels[this._imodels.length - 1].imodelAccess;\n }\n\n private invalidateHierarchyCache(reason?: string) {\n 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 setHierarchySearch(props: IModelHierarchyProviderProps[\"search\"]) {\n if (!props) {\n if (this._sourceHierarchyDefinition !== this._activeHierarchyDefinition) {\n this._activeHierarchyDefinition = this._sourceHierarchyDefinition;\n this.invalidateHierarchyCache(\"Hierarchy search reset\");\n }\n this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: undefined } });\n return;\n }\n this._activeHierarchyDefinition = new SearchHierarchyDefinition({\n imodelAccess: this.getPrimaryIModelAccess(),\n source: this._sourceHierarchyDefinition,\n sourceName: this.#sourceName,\n targetPaths: props.paths,\n });\n this.invalidateHierarchyCache(\"Hierarchy search set\");\n this._dispose.next();\n this._hierarchyChanged.raiseEvent({ searchChange: { newSearch: props } });\n }\n\n private onGroupingNodeCreated(groupingNode: ProcessedGroupingHierarchyNode, props: GetHierarchyNodesProps) {\n this._nodesCache?.set({ ...props, parentNode: groupingNode }, { observable: from(groupingNode.children), processingStatus: \"pre-processed\" });\n }\n\n private createHierarchyLevelDefinitionsObservable(\n props: DefineHierarchyLevelProps & RequestContextProp,\n ): Observable<\n { imodelAccess: IModelAccess; imodelAccessIndex: number } & (\n | { hierarchyNodesDefinition: GenericHierarchyNodeDefinition }\n | { hierarchyNodesDefinition: InstanceNodesQueryDefinition }\n )\n > {\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\n return from(this._imodels).pipe(\n mergeMap(({ imodelAccess }, imodelAccessIndex) => {\n let parentNode = props.parentNode;\n if (parentNode && HierarchyNode.isGeneric(parentNode) && parentNode.key.source && parentNode.key.source !== this.#sourceName) {\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 === 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 map(\n /* Using `as` to work around TS not understanding that `{ x: A, y: B | C }` is the same as `{ x: A } & ({ y: B } | { y: C })` */\n (hierarchyNodesDefinition) =>\n ({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition }) as ObservedValueOf<\n ReturnType<typeof this.createHierarchyLevelDefinitionsObservable>\n >,\n ),\n );\n }),\n finalize(() =>\n 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\"; targetInstanceKeys?: InstanceKey[] } & RequestContextProp,\n ): SourceNodesObservable {\n // pipe definitions to nodes and put \"share replay\" on it\n return this.createHierarchyLevelDefinitionsObservable(props).pipe(\n mergeMap(({ imodelAccess, imodelAccessIndex, hierarchyNodesDefinition: def }) =>\n defer((): Observable<SourceHierarchyNode> => {\n if (HierarchyNodesDefinition.isGenericNode(def)) {\n return of({\n ...def.node,\n key: { type: \"generic\" as const, id: def.node.key, source: this.#sourceName },\n });\n }\n return this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n of(def.query).pipe(\n map((query) => createInstanceKeysFilteredQuery(query, props.targetInstanceKeys)),\n mergeMap((query) =>\n readNodes({\n queryExecutor: 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: imodelAccess.imodelKey })) },\n })),\n ),\n );\n }).pipe(map((node) => ({ imodelAccess, imodelAccessIndex, node }))),\n ),\n mergeNodes,\n map(({ node }) => node),\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 // let consumers step-in\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.getPrimaryIModelAccess(), 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 { ...n, children: hasChildren(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 search based on grouped instance keys\n let targetInstanceKeys: InstanceKey[] | undefined;\n let parentNonGroupingNode: ParentHierarchyNode<NonGroupingHierarchyNode> | undefined;\n if (parentNode) {\n if (HierarchyNode.isGroupingNode(parentNode)) {\n parentNonGroupingNode = parentNode.nonGroupingAncestor;\n targetInstanceKeys = parentNode.groupedInstanceKeys;\n } else {\n // not sure why type checker doesn't pick this up\n assert(HierarchyNode.isGeneric(parentNode) || HierarchyNode.isInstancesNode(parentNode));\n parentNonGroupingNode = parentNode;\n }\n }\n\n const nonGroupingNodeChildrenRequestProps = {\n ...restProps,\n parentNode: parentNonGroupingNode,\n ...(targetInstanceKeys ? { targetInstanceKeys } : undefined),\n };\n const value = { 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 // split the definitions based on whether they're for generic nodes or for instance nodes\n const hierarchyLevelDefinitions = this.createHierarchyLevelDefinitionsObservable({ parentNode, instanceFilter, requestContext });\n const [instanceDefs, genericDefs] = partition(\n hierarchyLevelDefinitions,\n (\n x,\n ): x is Omit<ObservedValueOf<typeof hierarchyLevelDefinitions>, \"hierarchyNodesDefinition\"> & {\n hierarchyNodesDefinition: InstanceNodesQueryDefinition;\n } => HierarchyNodesDefinition.isInstanceNodesQuery(x.hierarchyNodesDefinition),\n );\n\n // query instance keys and a flag whether they should be hidden\n const instanceKeys = instanceDefs.pipe(\n mergeMap(({ imodelAccess, hierarchyNodesDefinition: def }) =>\n this.getQueryScheduler(imodelAccess.imodelKey).scheduleSubscription(\n of(def.query).pipe(\n mergeMap(async (query) => {\n const ecsql = `\n SELECT\n ${NodeSelectClauseColumnNames.FullClassName},\n ${NodeSelectClauseColumnNames.ECInstanceId},\n ${NodeSelectClauseColumnNames.HideNodeInHierarchy}\n FROM (\n ${query.ecsql}\n )\n `;\n const reader = imodelAccess.createQueryReader(\n { ...query, ecsql },\n {\n rowFormat: \"Indexes\",\n limit: hierarchyLevelSizeLimit,\n restartToken: `${this.#componentName}/${this.#componentId}/node-instance-keys/${Guid.createValue()}`,\n },\n );\n return from(reader).pipe(\n map((row) => ({\n key: {\n className: normalizeFullClassName(row[0]),\n id: row[1],\n imodelKey: imodelAccess.imodelKey,\n } satisfies IModelInstanceKey,\n hide: !!row[2],\n })),\n );\n }),\n mergeAll(),\n ),\n ),\n ),\n );\n // split the instance keys observable based on whether they should be hidden or not\n const [visibleNodeInstanceKeys, hiddenNodeInstanceKeys] = partition(instanceKeys, ({ hide }) => !hide);\n\n // hidden items' handling:\n // - if a generic node is hidden, we'll want to retrieve instance keys of its children, otherwise we don't care about it,\n // - if an instance key is hidden, we want to create a merged node similar to what we do in `createHideNodesInHierarchyOperator`\n const hiddenParentNodes = merge(\n genericDefs.pipe(\n filter(({ hierarchyNodesDefinition }) => !!hierarchyNodesDefinition.node.processingParams?.hideInHierarchy),\n map(\n ({ hierarchyNodesDefinition }): GenericNodeKey => ({\n type: \"generic\",\n id: hierarchyNodesDefinition.node.key,\n source: this.#sourceName,\n }),\n ),\n ),\n hiddenNodeInstanceKeys.pipe(\n // first merge all keys by class\n reduceToMergeMapList(\n ({ key }) => key.className,\n ({ key }) => key,\n ),\n // then, for each class, create an instance key\n mergeMap((mergedMap): InstancesNodeKey[] =>\n [...mergedMap.entries()].map(([className, keys]) => ({\n type: \"instances\",\n instanceKeys: keys.map(({ id, imodelKey }) => ({ className, id, imodelKey })),\n })),\n ),\n ),\n ).pipe(\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 createInstanceKeysFilteredQuery(query: ECSqlQueryDef, targetInstanceKeys: InstanceKey[] | undefined): ECSqlQueryDef {\n if (!targetInstanceKeys || !targetInstanceKeys.length) {\n return query;\n }\n const MAX_ALLOWED_BINDINGS = 1000;\n if (targetInstanceKeys.length < MAX_ALLOWED_BINDINGS) {\n return {\n ...query,\n ecsql: `\n SELECT *\n FROM (${query.ecsql}) q\n WHERE q.ECInstanceId IN (${targetInstanceKeys.map(() => \"?\").join(\",\")})\n `,\n bindings: [...(query.bindings ?? []), ...targetInstanceKeys.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: targetInstanceKeys.map((k) => k.id) }],\n };\n /* c8 ignore end */\n}\n\nfunction mergeNodes<\n TNode extends { key: GenericNodeKey | InstancesNodeKey },\n TParam extends {\n imodelAccess: IModelAccess;\n imodelAccessIndex: number;\n node: TNode;\n },\n>(source: ObservableInput<TParam>) {\n return from(source).pipe(\n reduce((acc, input) => {\n for (let i = 0; i < acc.length; ++i) {\n if (input.imodelAccess === acc[i].imodelAccess) {\n // don't attempt to merge nodes if they come from the same provider\n continue;\n }\n\n // the first argument for `tryMergeNodes` acts as the primary data source, so we have to make sure we pass\n // the node with higher `imodelAccessIndex` first\n const candidates =\n input.imodelAccessIndex > acc[i].imodelAccessIndex\n ? { imodelAccess: input.imodelAccess, imodelAccessIndex: input.imodelAccessIndex, primary: input.node, secondary: acc[i].node }\n : { imodelAccess: acc[i].imodelAccess, imodelAccessIndex: acc[i].imodelAccessIndex, primary: acc[i].node, secondary: input.node };\n const merged = tryMergeNodes(candidates.primary, candidates.secondary);\n if (merged) {\n acc[i] = { ...acc[i], node: merged, imodelAccess: candidates.imodelAccess, imodelAccessIndex: candidates.imodelAccessIndex };\n return acc;\n }\n }\n acc.push(input);\n return acc;\n }, new Array<TParam>()),\n mergeAll(),\n );\n}\nfunction tryMergeInstanceNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n if (\n HierarchyNode.isInstancesNode(primary) &&\n HierarchyNode.isInstancesNode(secondary) &&\n primary.key.instanceKeys.some((lhsKey) => secondary.key.instanceKeys.some((rhsKey) => InstanceKey.equals(lhsKey, rhsKey)))\n ) {\n return {\n ...primary,\n key: {\n type: \"instances\",\n instanceKeys: primary.key.instanceKeys.concat(secondary.key.instanceKeys),\n },\n };\n }\n return undefined;\n}\nfunction tryMergeGenericNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n if (HierarchyNode.isGeneric(primary) && HierarchyNode.isGeneric(secondary) && primary.key.type === secondary.key.type) {\n return primary;\n }\n return undefined;\n}\nfunction tryMergeNodes<TNode extends { key: GenericNodeKey | InstancesNodeKey }>(primary: TNode, secondary: TNode): TNode | undefined {\n return tryMergeInstanceNodes(primary, secondary) ?? tryMergeGenericNodes(primary, secondary) ?? undefined;\n}\n"]}
@@ -1,37 +1,37 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { ECClassHierarchyInspector, InstanceKey } from "@itwin/presentation-shared";
3
- import { HierarchyFilteringPath } from "../HierarchyFiltering.js";
3
+ import { HierarchySearchPath } from "../HierarchySearch.js";
4
4
  import { DefineHierarchyLevelProps, HierarchyLevelDefinition, InstanceNodesQueryDefinition } from "../imodel/IModelHierarchyDefinition.js";
5
5
  import { RxjsHierarchyDefinition, RxjsNodeParser, RxjsNodePostProcessor, RxjsNodePreProcessor } from "../internal/RxjsHierarchyDefinition.js";
6
- interface FilteringHierarchyDefinitionProps {
6
+ interface SearchHierarchyDefinitionProps {
7
7
  imodelAccess: ECClassHierarchyInspector & {
8
8
  imodelKey: string;
9
9
  };
10
10
  source: RxjsHierarchyDefinition;
11
11
  sourceName: string;
12
- nodeIdentifierPaths: HierarchyFilteringPath[];
12
+ targetPaths: HierarchySearchPath[];
13
13
  nodesParser?: RxjsNodeParser;
14
14
  }
15
15
  /** @internal */
16
- export declare class FilteringHierarchyDefinition implements RxjsHierarchyDefinition {
16
+ export declare class SearchHierarchyDefinition implements RxjsHierarchyDefinition {
17
17
  #private;
18
18
  private _imodelAccess;
19
19
  private _source;
20
- private _nodeIdentifierPaths;
20
+ private _targetPaths;
21
21
  private _nodesParser;
22
- constructor(props: FilteringHierarchyDefinitionProps);
22
+ constructor(props: SearchHierarchyDefinitionProps);
23
23
  get preProcessNode(): RxjsNodePreProcessor;
24
24
  get postProcessNode(): RxjsNodePostProcessor;
25
25
  get parseNode(): RxjsNodeParser;
26
26
  defineHierarchyLevel(props: DefineHierarchyLevelProps): Observable<HierarchyLevelDefinition>;
27
27
  }
28
28
  /** @internal */
29
- export declare const ECSQL_COLUMN_NAME_FilterECInstanceId = "FilterECInstanceId";
29
+ export declare const ECSQL_COLUMN_NAME_SearchECInstanceId = "SearchECInstanceId";
30
30
  /** @internal */
31
- export declare const ECSQL_COLUMN_NAME_FilterClassName = "FilterClassName";
31
+ export declare const ECSQL_COLUMN_NAME_SearchClassName = "SearchClassName";
32
32
  /** @internal */
33
- export declare function applyECInstanceIdsFilter(def: InstanceNodesQueryDefinition, filteredInstanceKeys: InstanceKey[]): InstanceNodesQueryDefinition;
33
+ export declare function applyECInstanceIdsSearch(def: InstanceNodesQueryDefinition, targetInstanceKeys: InstanceKey[]): InstanceNodesQueryDefinition;
34
34
  /** @internal */
35
35
  export declare function applyECInstanceIdsSelector(def: InstanceNodesQueryDefinition): InstanceNodesQueryDefinition;
36
36
  export {};
37
- //# sourceMappingURL=FilteringHierarchyDefinition.d.ts.map
37
+ //# sourceMappingURL=SearchHierarchyDefinition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchHierarchyDefinition.d.ts","sourceRoot":"","sources":["../../../../src/hierarchies/imodel/SearchHierarchyDefinition.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiF,UAAU,EAAqB,MAAM,MAAM,CAAC;AAEpI,OAAO,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAGpF,OAAO,EAA+B,mBAAmB,EAAiC,MAAM,uBAAuB,CAAC;AACxH,OAAO,EACL,yBAAyB,EAEzB,wBAAwB,EAExB,4BAA4B,EAC7B,MAAM,wCAAwC,CAAC;AAMhD,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9I,UAAU,8BAA8B;IACtC,YAAY,EAAE,yBAAyB,GAAG;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,mBAAmB,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,cAAc,CAAC;CAC9B;AAED,gBAAgB;AAChB,qBAAa,yBAA0B,YAAW,uBAAuB;;IACvE,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,YAAY,CAAiB;gBAGlB,KAAK,EAAE,8BAA8B;IAQxD,IAAW,cAAc,IAAI,oBAAoB,CAYhD;IAED,IAAW,eAAe,IAAI,qBAAqB,CA4BlD;IAED,IAAW,SAAS,IAAI,cAAc,CA8CrC;IAEM,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,UAAU,CAAC,wBAAwB,CAAC;CAoGpG;AAED,gBAAgB;AAEhB,eAAO,MAAM,oCAAoC,uBAAuB,CAAC;AAEzE,gBAAgB;AAEhB,eAAO,MAAM,iCAAiC,oBAAoB,CAAC;AAenE,gBAAgB;AAChB,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,WAAW,EAAE,GAAG,4BAA4B,CAgC3I;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,4BAA4B,GAAG,4BAA4B,CAc1G"}
@@ -4,13 +4,13 @@
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_FilterClassName = exports.ECSQL_COLUMN_NAME_FilterECInstanceId = exports.FilteringHierarchyDefinition = void 0;
8
- exports.applyECInstanceIdsFilter = applyECInstanceIdsFilter;
7
+ exports.ECSQL_COLUMN_NAME_SearchClassName = exports.ECSQL_COLUMN_NAME_SearchECInstanceId = exports.SearchHierarchyDefinition = void 0;
8
+ exports.applyECInstanceIdsSearch = applyECInstanceIdsSearch;
9
9
  exports.applyECInstanceIdsSelector = applyECInstanceIdsSelector;
10
10
  const rxjs_1 = require("rxjs");
11
- const HierarchyFiltering_js_1 = require("../HierarchyFiltering.js");
12
11
  const HierarchyNodeIdentifier_js_1 = require("../HierarchyNodeIdentifier.js");
13
12
  const HierarchyNodeKey_js_1 = require("../HierarchyNodeKey.js");
13
+ const HierarchySearch_js_1 = require("../HierarchySearch.js");
14
14
  const IModelHierarchyDefinition_js_1 = require("../imodel/IModelHierarchyDefinition.js");
15
15
  const IModelHierarchyNode_js_1 = require("../imodel/IModelHierarchyNode.js");
16
16
  const NodeSelectQueryFactory_js_1 = require("../imodel/NodeSelectQueryFactory.js");
@@ -18,24 +18,24 @@ const TreeNodesReader_js_1 = require("../imodel/TreeNodesReader.js");
18
18
  const Common_js_1 = require("../internal/Common.js");
19
19
  const Partition_js_1 = require("../internal/operators/Partition.js");
20
20
  /** @internal */
21
- class FilteringHierarchyDefinition {
21
+ class SearchHierarchyDefinition {
22
22
  _imodelAccess;
23
23
  _source;
24
- _nodeIdentifierPaths;
24
+ _targetPaths;
25
25
  _nodesParser;
26
26
  #sourceName;
27
27
  constructor(props) {
28
28
  this._imodelAccess = props.imodelAccess;
29
29
  this._source = props.source;
30
30
  this.#sourceName = props.sourceName;
31
- this._nodeIdentifierPaths = props.nodeIdentifierPaths;
31
+ this._targetPaths = props.targetPaths;
32
32
  this._nodesParser = props.nodesParser ?? this._source.parseNode ?? ((row) => (0, rxjs_1.of)((0, TreeNodesReader_js_1.defaultNodesParser)(row)));
33
33
  }
34
34
  get preProcessNode() {
35
35
  return (node) => {
36
36
  return (this._source.preProcessNode ? this._source.preProcessNode(node) : (0, rxjs_1.of)(node)).pipe((0, rxjs_1.filter)((processedNode) => {
37
- if (processedNode.processingParams?.hideInHierarchy && processedNode.filtering?.isFilterTarget && !processedNode.filtering.hasFilterTargetAncestor) {
38
- // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another filter target
37
+ if (processedNode.processingParams?.hideInHierarchy && processedNode.search?.isSearchTarget && !processedNode.search.hasSearchTargetAncestor) {
38
+ // we want to hide target nodes if they have `hideInHierarchy` param, but only if they're not under another search target
39
39
  return false;
40
40
  }
41
41
  return true;
@@ -53,9 +53,9 @@ class FilteringHierarchyDefinition {
53
53
  parentKeysWithoutGroupingNodesLength,
54
54
  parentKeysLength,
55
55
  })
56
- : (processedNode.filtering?.isFilterTarget && !!processedNode.filtering.filterTargetOptions?.autoExpand) ||
57
- processedNode.filtering?.filteredChildrenIdentifierPaths?.some((path) => (0, HierarchyFiltering_js_1.shouldAutoExpandBasedOnReveal)({
58
- reveal: HierarchyFiltering_js_1.HierarchyFilteringPath.normalize(path).options?.reveal,
56
+ : (processedNode.search?.isSearchTarget && !!processedNode.search.searchTargetOptions?.autoExpand) ||
57
+ processedNode.search?.childrenTargetPaths?.some((path) => (0, HierarchySearch_js_1.shouldAutoExpandBasedOnReveal)({
58
+ reveal: HierarchySearch_js_1.HierarchySearchPath.normalize(path).options?.reveal,
59
59
  nodePositionInPath: parentKeysWithoutGroupingNodesLength,
60
60
  nodePositionInHierarchy: parentKeysLength,
61
61
  }));
@@ -69,12 +69,12 @@ class FilteringHierarchyDefinition {
69
69
  get parseNode() {
70
70
  return (row, parentNode) => {
71
71
  return this._nodesParser(row).pipe((0, rxjs_1.mergeMap)((parsedNode) => {
72
- if (!row[exports.ECSQL_COLUMN_NAME_FilterECInstanceId] || !row[exports.ECSQL_COLUMN_NAME_FilterClassName]) {
72
+ if (!row[exports.ECSQL_COLUMN_NAME_SearchECInstanceId] || !row[exports.ECSQL_COLUMN_NAME_SearchClassName]) {
73
73
  return (0, rxjs_1.of)(parsedNode);
74
74
  }
75
- const rowInstanceKey = { className: row[exports.ECSQL_COLUMN_NAME_FilterClassName], id: row[exports.ECSQL_COLUMN_NAME_FilterECInstanceId] };
76
- const filteringHelper = (0, HierarchyFiltering_js_1.createHierarchyFilteringHelper)(this._nodeIdentifierPaths, parentNode);
77
- const nodeFilteringPropPossiblyPromise = filteringHelper.createChildNodeProps({
75
+ const rowInstanceKey = { className: row[exports.ECSQL_COLUMN_NAME_SearchClassName], id: row[exports.ECSQL_COLUMN_NAME_SearchECInstanceId] };
76
+ const searchHelper = (0, HierarchySearch_js_1.createHierarchySearchHelper)(this._targetPaths, parentNode);
77
+ const nodeSearchPropPossiblyPromise = searchHelper.createChildNodeProps({
78
78
  asyncPathMatcher: (identifier) => {
79
79
  if (identifier.id !== rowInstanceKey.id) {
80
80
  return false;
@@ -91,9 +91,9 @@ class FilteringHierarchyDefinition {
91
91
  return (0, rxjs_1.firstValueFrom)((0, rxjs_1.merge)((0, Common_js_1.fromPossiblyPromise)(this._imodelAccess.classDerivesFrom(identifier.className, rowInstanceKey.className)), (0, Common_js_1.fromPossiblyPromise)(this._imodelAccess.classDerivesFrom(rowInstanceKey.className, identifier.className))).pipe((0, rxjs_1.filter)((classDerives) => classDerives), (0, rxjs_1.defaultIfEmpty)(false), (0, rxjs_1.take)(1)));
92
92
  },
93
93
  });
94
- return (0, Common_js_1.fromPossiblyPromise)(nodeFilteringPropPossiblyPromise).pipe((0, rxjs_1.map)((nodeExtraProps) => {
95
- if (nodeExtraProps?.filtering) {
96
- parsedNode.filtering = nodeExtraProps.filtering;
94
+ return (0, Common_js_1.fromPossiblyPromise)(nodeSearchPropPossiblyPromise).pipe((0, rxjs_1.map)((nodeExtraProps) => {
95
+ if (nodeExtraProps?.search) {
96
+ parsedNode.search = nodeExtraProps.search;
97
97
  }
98
98
  return parsedNode;
99
99
  }));
@@ -102,29 +102,29 @@ class FilteringHierarchyDefinition {
102
102
  }
103
103
  defineHierarchyLevel(props) {
104
104
  const sourceDefinitions = this._source.defineHierarchyLevel(props);
105
- const filteringHelper = (0, HierarchyFiltering_js_1.createHierarchyFilteringHelper)(this._nodeIdentifierPaths, props.parentNode);
106
- const childNodeFilteringIdentifiers = filteringHelper.getChildNodeFilteringIdentifiers();
107
- if (!childNodeFilteringIdentifiers) {
105
+ const searchHelper = (0, HierarchySearch_js_1.createHierarchySearchHelper)(this._targetPaths, props.parentNode);
106
+ const childNodeSearchIdentifiers = searchHelper.getChildNodeSearchIdentifiers();
107
+ if (!childNodeSearchIdentifiers) {
108
108
  return sourceDefinitions;
109
109
  }
110
110
  const [genericNodeDefinitions, instanceNodeDefinitions] = (0, Partition_js_1.partition)(sourceDefinitions.pipe((0, rxjs_1.mergeAll)()), IModelHierarchyDefinition_js_1.HierarchyNodesDefinition.isGenericNode);
111
111
  return (0, rxjs_1.merge)(genericNodeDefinitions.pipe((0, rxjs_1.map)((definition) => {
112
- if (filteringHelper.hasFilterTargetAncestor ||
113
- childNodeFilteringIdentifiers.some((identifier) => HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isGenericNodeIdentifier(identifier) &&
112
+ if (searchHelper.hasSearchTargetAncestor ||
113
+ childNodeSearchIdentifiers.some((identifier) => HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isGenericNodeIdentifier(identifier) &&
114
114
  (!identifier.source || identifier.source === this.#sourceName) &&
115
115
  identifier.id === definition.node.key)) {
116
116
  return {
117
117
  ...definition,
118
118
  node: {
119
119
  ...definition.node,
120
- ...filteringHelper.createChildNodeProps({ pathMatcher: ({ id }) => id === definition.node.key }),
120
+ ...searchHelper.createChildNodeProps({ pathMatcher: ({ id }) => id === definition.node.key }),
121
121
  },
122
122
  };
123
123
  }
124
124
  return undefined;
125
125
  }), (0, rxjs_1.filter)((def) => !!def)), instanceNodeDefinitions.pipe((0, rxjs_1.mergeMap)((definition) => {
126
- if (filteringHelper.hasFilterTargetAncestor) {
127
- // if we have a filter target ancestor, we don't need to filter the definitions - we use all of them
126
+ if (searchHelper.hasSearchTargetAncestor) {
127
+ // if we have a search target ancestor, we don't need to search the definitions - we use all of them
128
128
  return (0, rxjs_1.of)(applyECInstanceIdsSelector(definition));
129
129
  }
130
130
  return (0, rxjs_1.defer)(async () => {
@@ -150,7 +150,7 @@ class FilteringHierarchyDefinition {
150
150
  }
151
151
  return entries;
152
152
  }
153
- for (const id of childNodeFilteringIdentifiers) {
153
+ for (const id of childNodeSearchIdentifiers) {
154
154
  // take only identifiers that match the definition by type, source and class
155
155
  if (!HierarchyNodeIdentifier_js_1.HierarchyNodeIdentifier.isInstanceNodeIdentifier(id)) {
156
156
  continue;
@@ -174,21 +174,21 @@ class FilteringHierarchyDefinition {
174
174
  }).pipe(
175
175
  // only take definitions that have matching path identifiers
176
176
  (0, rxjs_1.filter)((pathIdentifiers) => pathIdentifiers.length > 0),
177
- // for each definition that we're going to use, apply query-level filter
178
- (0, rxjs_1.map)((pathIdentifiers) => applyECInstanceIdsFilter(definition, pathIdentifiers)));
177
+ // for each definition that we're going to use, apply query-level search
178
+ (0, rxjs_1.map)((pathIdentifiers) => applyECInstanceIdsSearch(definition, pathIdentifiers)));
179
179
  }))).pipe((0, rxjs_1.toArray)());
180
180
  }
181
181
  }
182
- exports.FilteringHierarchyDefinition = FilteringHierarchyDefinition;
182
+ exports.SearchHierarchyDefinition = SearchHierarchyDefinition;
183
183
  /** @internal */
184
184
  // eslint-disable-next-line @typescript-eslint/naming-convention
185
- exports.ECSQL_COLUMN_NAME_FilterECInstanceId = "FilterECInstanceId";
185
+ exports.ECSQL_COLUMN_NAME_SearchECInstanceId = "SearchECInstanceId";
186
186
  /** @internal */
187
187
  // eslint-disable-next-line @typescript-eslint/naming-convention
188
- exports.ECSQL_COLUMN_NAME_FilterClassName = "FilterClassName";
189
- function getClassECInstanceIds(filteredInstanceKeys) {
188
+ exports.ECSQL_COLUMN_NAME_SearchClassName = "SearchClassName";
189
+ function getClassECInstanceIds(targetInstanceKeys) {
190
190
  const classNameECInstanceIds = new Map();
191
- for (const key of filteredInstanceKeys) {
191
+ for (const key of targetInstanceKeys) {
192
192
  const entry = classNameECInstanceIds.get(key.className);
193
193
  if (entry === undefined) {
194
194
  classNameECInstanceIds.set(key.className, [key.id]);
@@ -199,18 +199,18 @@ function getClassECInstanceIds(filteredInstanceKeys) {
199
199
  return classNameECInstanceIds;
200
200
  }
201
201
  /** @internal */
202
- function applyECInstanceIdsFilter(def, filteredInstanceKeys) {
203
- const instanceIdsByClass = getClassECInstanceIds(filteredInstanceKeys);
202
+ function applyECInstanceIdsSearch(def, targetInstanceKeys) {
203
+ const instanceIdsByClass = getClassECInstanceIds(targetInstanceKeys);
204
204
  return {
205
205
  ...def,
206
206
  query: {
207
207
  ...def.query,
208
208
  ctes: [
209
209
  ...(def.query.ctes ?? []),
210
- `FilteringInfo(ECInstanceId, FilterClassName) AS (
210
+ `SearchInfo(ECInstanceId, SearchClassName) AS (
211
211
  ${Array.from(instanceIdsByClass)
212
212
  .map(([className, ecInstanceIds]) => `
213
- SELECT ECInstanceId, '${className}' AS FilterClassName
213
+ SELECT ECInstanceId, '${className}' AS SearchClassName
214
214
  FROM ${className}
215
215
  WHERE ECInstanceId IN (${ecInstanceIds.join(", ")})
216
216
  `)
@@ -220,12 +220,12 @@ function applyECInstanceIdsFilter(def, filteredInstanceKeys) {
220
220
  ecsql: `
221
221
  SELECT
222
222
  [q].*,
223
- IdToHex([f].[ECInstanceId]) AS [${exports.ECSQL_COLUMN_NAME_FilterECInstanceId}],
224
- [f].[FilterClassName] AS [${exports.ECSQL_COLUMN_NAME_FilterClassName}]
223
+ IdToHex([f].[ECInstanceId]) AS [${exports.ECSQL_COLUMN_NAME_SearchECInstanceId}],
224
+ [f].[SearchClassName] AS [${exports.ECSQL_COLUMN_NAME_SearchClassName}]
225
225
  FROM (
226
226
  ${def.query.ecsql}
227
227
  ) [q]
228
- JOIN FilteringInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]
228
+ JOIN SearchInfo [f] ON [f].[ECInstanceId] = [q].[ECInstanceId]
229
229
  `,
230
230
  },
231
231
  };
@@ -239,8 +239,8 @@ function applyECInstanceIdsSelector(def) {
239
239
  ecsql: `
240
240
  SELECT
241
241
  [q].*,
242
- IdToHex([q].[ECInstanceId]) AS [${exports.ECSQL_COLUMN_NAME_FilterECInstanceId}],
243
- [q].[${NodeSelectQueryFactory_js_1.NodeSelectClauseColumnNames.FullClassName}] AS [${exports.ECSQL_COLUMN_NAME_FilterClassName}]
242
+ IdToHex([q].[ECInstanceId]) AS [${exports.ECSQL_COLUMN_NAME_SearchECInstanceId}],
243
+ [q].[${NodeSelectQueryFactory_js_1.NodeSelectClauseColumnNames.FullClassName}] AS [${exports.ECSQL_COLUMN_NAME_SearchClassName}]
244
244
  FROM (${def.query.ecsql}) [q]
245
245
  `,
246
246
  },
@@ -256,28 +256,28 @@ function shouldAutoExpandGroupingNodeBasedOnNestedChildren({ directOrIndirectChi
256
256
  continue;
257
257
  }
258
258
  /* c8 ignore next 3 */
259
- if (!child.filtering) {
259
+ if (!child.search) {
260
260
  continue;
261
261
  }
262
- if (child.filtering.isFilterTarget &&
263
- (0, HierarchyFiltering_js_1.shouldAutoExpandBasedOnReveal)({
264
- reveal: child.filtering.filterTargetOptions?.reveal,
262
+ if (child.search.isSearchTarget &&
263
+ (0, HierarchySearch_js_1.shouldAutoExpandBasedOnReveal)({
264
+ reveal: child.search.searchTargetOptions?.reveal,
265
265
  nodePositionInHierarchy: parentKeysLength,
266
- // Grouping node is not in filtering path, but we can assume that it is at the position of 1 less than `parentKeysWithoutGroupingNodesLength`
266
+ // Grouping node is not in search path, but we can assume that it is at the position of 1 less than `parentKeysWithoutGroupingNodesLength`
267
267
  nodePositionInPath: parentKeysWithoutGroupingNodesLength - 1,
268
268
  })) {
269
269
  return true;
270
270
  }
271
- if (!child.filtering.filteredChildrenIdentifierPaths) {
271
+ if (!child.search.childrenTargetPaths) {
272
272
  /* c8 ignore next */
273
273
  continue;
274
274
  }
275
- for (const path of child.filtering.filteredChildrenIdentifierPaths) {
275
+ for (const path of child.search.childrenTargetPaths) {
276
276
  if ("path" in path &&
277
- (0, HierarchyFiltering_js_1.shouldAutoExpandBasedOnReveal)({
277
+ (0, HierarchySearch_js_1.shouldAutoExpandBasedOnReveal)({
278
278
  reveal: path.options?.reveal,
279
279
  nodePositionInHierarchy: parentKeysLength,
280
- // Grouping node is not in filtering path, but we can assume that it is at the position of 1 less than `parentKeysWithoutGroupingNodesLength`
280
+ // Grouping node is not in search path, but we can assume that it is at the position of 1 less than `parentKeysWithoutGroupingNodesLength`
281
281
  nodePositionInPath: parentKeysWithoutGroupingNodesLength - 1,
282
282
  })) {
283
283
  return true;
@@ -286,4 +286,4 @@ function shouldAutoExpandGroupingNodeBasedOnNestedChildren({ directOrIndirectChi
286
286
  }
287
287
  return false;
288
288
  }
289
- //# sourceMappingURL=FilteringHierarchyDefinition.js.map
289
+ //# sourceMappingURL=SearchHierarchyDefinition.js.map