@itwin/presentation-backend 3.4.0-dev.8 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (23) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/cjs/assets/supplemental-presentation-rules/BisCore.PresentationRuleSet.json +12 -12
  3. package/lib/cjs/presentation-backend/ElementPropertiesHelper.js +1 -1
  4. package/lib/cjs/presentation-backend/ElementPropertiesHelper.js.map +1 -1
  5. package/lib/cjs/presentation-backend/NativePlatform.d.ts +0 -1
  6. package/lib/cjs/presentation-backend/NativePlatform.d.ts.map +1 -1
  7. package/lib/cjs/presentation-backend/NativePlatform.js +1 -1
  8. package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
  9. package/lib/cjs/presentation-backend/PresentationManager.d.ts +24 -4
  10. package/lib/cjs/presentation-backend/PresentationManager.d.ts.map +1 -1
  11. package/lib/cjs/presentation-backend/PresentationManager.js +24 -121
  12. package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
  13. package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts +15 -5
  14. package/lib/cjs/presentation-backend/PresentationManagerDetail.d.ts.map +1 -1
  15. package/lib/cjs/presentation-backend/PresentationManagerDetail.js +171 -25
  16. package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
  17. package/lib/cjs/presentation-backend/PresentationRpcImpl.js +6 -6
  18. package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
  19. package/lib/cjs/presentation-backend/Utils.d.ts +35 -9
  20. package/lib/cjs/presentation-backend/Utils.d.ts.map +1 -1
  21. package/lib/cjs/presentation-backend/Utils.js +68 -8
  22. package/lib/cjs/presentation-backend/Utils.js.map +1 -1
  23. package/package.json +15 -15
@@ -29,6 +29,7 @@ const path = __importStar(require("path"));
29
29
  const core_backend_1 = require("@itwin/core-backend");
30
30
  const presentation_common_1 = require("@itwin/presentation-common");
31
31
  const Constants_1 = require("./Constants");
32
+ const ElementPropertiesHelper_1 = require("./ElementPropertiesHelper");
32
33
  const NativePlatform_1 = require("./NativePlatform");
33
34
  const PresentationManager_1 = require("./PresentationManager");
34
35
  const RulesetManager_1 = require("./RulesetManager");
@@ -37,7 +38,7 @@ const Utils_1 = require("./Utils");
37
38
  /** @internal */
38
39
  class PresentationManagerDetail {
39
40
  constructor(params) {
40
- var _a, _b, _c, _d, _e, _f, _g, _h;
41
+ var _a, _b, _c, _d, _e, _f, _g;
41
42
  this._disposed = false;
42
43
  const presentationAssetsRoot = (_a = params.presentationAssetsRoot) !== null && _a !== void 0 ? _a : {
43
44
  common: Constants_1.PRESENTATION_COMMON_ASSETS_ROOT,
@@ -45,7 +46,7 @@ class PresentationManagerDetail {
45
46
  };
46
47
  const mode = (_b = params.mode) !== null && _b !== void 0 ? _b : PresentationManager_1.PresentationManagerMode.ReadWrite;
47
48
  const changeTrackingEnabled = mode === PresentationManager_1.PresentationManagerMode.ReadWrite && !!params.updatesPollInterval;
48
- this._nativePlatform = (_c = params.addon) !== null && _c !== void 0 ? _c : createNativePlatform((_d = params.id) !== null && _d !== void 0 ? _d : "", typeof presentationAssetsRoot === "string" ? presentationAssetsRoot : presentationAssetsRoot.common, (_e = params.localeDirectories) !== null && _e !== void 0 ? _e : [], (_f = params.workerThreadsCount) !== null && _f !== void 0 ? _f : 2, mode, changeTrackingEnabled, params.caching, params.defaultFormats, params.useMmap);
49
+ this._nativePlatform = (_c = params.addon) !== null && _c !== void 0 ? _c : createNativePlatform((_d = params.id) !== null && _d !== void 0 ? _d : "", (_e = params.workerThreadsCount) !== null && _e !== void 0 ? _e : 2, mode, changeTrackingEnabled, params.caching, params.defaultFormats, params.useMmap);
49
50
  const getNativePlatform = () => this.getNativePlatform();
50
51
  if (core_backend_1.IpcHost.isValid && changeTrackingEnabled) {
51
52
  this._updatesTracker = UpdatesTracker_1.UpdatesTracker.create({
@@ -56,11 +57,11 @@ class PresentationManagerDetail {
56
57
  else {
57
58
  this._updatesTracker = undefined;
58
59
  }
59
- setupRulesetDirectories(this._nativePlatform, typeof presentationAssetsRoot === "string" ? presentationAssetsRoot : presentationAssetsRoot.backend, (_g = params.supplementalRulesetDirectories) !== null && _g !== void 0 ? _g : [], (_h = params.rulesetDirectories) !== null && _h !== void 0 ? _h : []);
60
- this.activeLocale = params.defaultLocale;
60
+ setupRulesetDirectories(this._nativePlatform, typeof presentationAssetsRoot === "string" ? presentationAssetsRoot : presentationAssetsRoot.backend, (_f = params.supplementalRulesetDirectories) !== null && _f !== void 0 ? _f : [], (_g = params.rulesetDirectories) !== null && _g !== void 0 ? _g : []);
61
61
  this.activeUnitSystem = params.defaultUnitSystem;
62
62
  this._onManagerUsed = undefined;
63
63
  this.rulesets = new RulesetManager_1.RulesetManagerImpl(getNativePlatform);
64
+ this._diagnosticsOptions = params.diagnostics;
64
65
  }
65
66
  dispose() {
66
67
  var _a;
@@ -82,6 +83,45 @@ class PresentationManagerDetail {
82
83
  setOnManagerUsedHandler(handler) {
83
84
  this._onManagerUsed = handler;
84
85
  }
86
+ async getNodes(requestOptions) {
87
+ const { rulesetOrId, parentKey, ...strippedOptions } = requestOptions;
88
+ const params = {
89
+ requestId: parentKey ? NativePlatform_1.NativePlatformRequestTypes.GetChildren : NativePlatform_1.NativePlatformRequestTypes.GetRootNodes,
90
+ rulesetId: this.registerRuleset(rulesetOrId),
91
+ ...strippedOptions,
92
+ nodeKey: parentKey,
93
+ };
94
+ return JSON.parse(await this.request(params), presentation_common_1.Node.listReviver);
95
+ }
96
+ async getNodesCount(requestOptions) {
97
+ const { rulesetOrId, parentKey, ...strippedOptions } = requestOptions;
98
+ const params = {
99
+ requestId: parentKey ? NativePlatform_1.NativePlatformRequestTypes.GetChildrenCount : NativePlatform_1.NativePlatformRequestTypes.GetRootNodesCount,
100
+ rulesetId: this.registerRuleset(rulesetOrId),
101
+ ...strippedOptions,
102
+ nodeKey: parentKey,
103
+ };
104
+ return JSON.parse(await this.request(params));
105
+ }
106
+ async getNodePaths(requestOptions) {
107
+ const { rulesetOrId, instancePaths, ...strippedOptions } = requestOptions;
108
+ const params = {
109
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetNodePaths,
110
+ rulesetId: this.registerRuleset(rulesetOrId),
111
+ ...strippedOptions,
112
+ paths: instancePaths.map((p) => p.map((s) => presentation_common_1.InstanceKey.toJSON(s))),
113
+ };
114
+ return JSON.parse(await this.request(params), presentation_common_1.NodePathElement.listReviver);
115
+ }
116
+ async getFilteredNodePaths(requestOptions) {
117
+ const { rulesetOrId, ...strippedOptions } = requestOptions;
118
+ const params = {
119
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetFilteredNodePaths,
120
+ rulesetId: this.registerRuleset(rulesetOrId),
121
+ ...strippedOptions,
122
+ };
123
+ return JSON.parse(await this.request(params), presentation_common_1.NodePathElement.listReviver);
124
+ }
85
125
  async getContentDescriptor(requestOptions) {
86
126
  const { rulesetOrId, ...strippedOptions } = requestOptions;
87
127
  const params = {
@@ -93,6 +133,102 @@ class PresentationManagerDetail {
93
133
  };
94
134
  return this.request(params);
95
135
  }
136
+ async getContentSources(requestOptions) {
137
+ const params = {
138
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetContentSources,
139
+ rulesetId: "ElementProperties",
140
+ ...requestOptions,
141
+ };
142
+ const reviver = (key, value) => {
143
+ return key === "" ? presentation_common_1.SelectClassInfo.listFromCompressedJSON(value.sources, value.classesMap) : value;
144
+ };
145
+ return JSON.parse(await this.request(params), reviver);
146
+ }
147
+ async getContentSetSize(requestOptions) {
148
+ const { rulesetOrId, descriptor, ...strippedOptions } = requestOptions;
149
+ const params = {
150
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetContentSetSize,
151
+ rulesetId: this.registerRuleset(rulesetOrId),
152
+ ...strippedOptions,
153
+ keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),
154
+ descriptorOverrides: createContentDescriptorOverrides(descriptor),
155
+ };
156
+ return JSON.parse(await this.request(params));
157
+ }
158
+ async getContent(requestOptions) {
159
+ const { rulesetOrId, descriptor, ...strippedOptions } = requestOptions;
160
+ const params = {
161
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetContent,
162
+ rulesetId: this.registerRuleset(rulesetOrId),
163
+ ...strippedOptions,
164
+ keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),
165
+ descriptorOverrides: createContentDescriptorOverrides(descriptor),
166
+ };
167
+ return JSON.parse(await this.request(params), presentation_common_1.Content.reviver);
168
+ }
169
+ async getPagedDistinctValues(requestOptions) {
170
+ const { rulesetOrId, ...strippedOptions } = requestOptions;
171
+ const { descriptor, keys, ...strippedOptionsNoDescriptorAndKeys } = strippedOptions;
172
+ const params = {
173
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetPagedDistinctValues,
174
+ rulesetId: this.registerRuleset(rulesetOrId),
175
+ ...strippedOptionsNoDescriptorAndKeys,
176
+ keys: getKeysForContentRequest(keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),
177
+ descriptorOverrides: createContentDescriptorOverrides(descriptor),
178
+ };
179
+ const reviver = (key, value) => {
180
+ return key === "" ? {
181
+ total: value.total,
182
+ items: value.items.map(presentation_common_1.DisplayValueGroup.fromJSON),
183
+ } : value;
184
+ };
185
+ return JSON.parse(await this.request(params), reviver);
186
+ }
187
+ async getDisplayLabelDefinition(requestOptions) {
188
+ const params = {
189
+ requestId: NativePlatform_1.NativePlatformRequestTypes.GetDisplayLabel,
190
+ ...requestOptions,
191
+ key: presentation_common_1.InstanceKey.toJSON(requestOptions.key),
192
+ };
193
+ return JSON.parse(await this.request(params), presentation_common_1.LabelDefinition.reviver);
194
+ }
195
+ async getDisplayLabelDefinitions(requestOptions) {
196
+ const concreteKeys = requestOptions.keys.map((k) => {
197
+ if (k.className === "BisCore:Element")
198
+ return (0, Utils_1.getElementKey)(requestOptions.imodel, k.id);
199
+ return k;
200
+ }).filter((k) => !!k);
201
+ const contentRequestOptions = {
202
+ ...requestOptions,
203
+ rulesetOrId: "RulesDrivenECPresentationManager_RulesetId_DisplayLabel",
204
+ descriptor: {
205
+ displayType: presentation_common_1.DefaultContentDisplayTypes.List,
206
+ contentFlags: presentation_common_1.ContentFlags.ShowLabels | presentation_common_1.ContentFlags.NoFields,
207
+ },
208
+ keys: new presentation_common_1.KeySet(concreteKeys),
209
+ };
210
+ const content = await this.getContent(contentRequestOptions);
211
+ return concreteKeys.map((key) => {
212
+ const item = content ? content.contentSet.find((it) => it.primaryKeys.length > 0 && presentation_common_1.InstanceKey.compare(it.primaryKeys[0], key) === 0) : undefined;
213
+ if (!item)
214
+ return { displayValue: "", rawValue: "", typeName: "" };
215
+ return item.label;
216
+ });
217
+ }
218
+ async getElementProperties(requestOptions) {
219
+ const { elementId, ...optionsNoElementId } = requestOptions;
220
+ const content = await this.getContent({
221
+ ...optionsNoElementId,
222
+ descriptor: {
223
+ displayType: presentation_common_1.DefaultContentDisplayTypes.PropertyPane,
224
+ contentFlags: presentation_common_1.ContentFlags.ShowLabels,
225
+ },
226
+ rulesetOrId: "ElementProperties",
227
+ keys: new presentation_common_1.KeySet([{ className: "BisCore:Element", id: elementId }]),
228
+ });
229
+ const properties = (0, ElementPropertiesHelper_1.buildElementsProperties)(content);
230
+ return properties[0];
231
+ }
96
232
  /** Registers given ruleset and replaces the ruleset with its ID in the resulting object */
97
233
  registerRuleset(rulesetOrId) {
98
234
  if (typeof rulesetOrId === "object") {
@@ -106,30 +242,37 @@ class PresentationManagerDetail {
106
242
  return getRulesetIdObject(rulesetOrId).uniqueId;
107
243
  }
108
244
  async request(params) {
109
- var _a, _b;
110
- const { requestId, imodel, locale, unitSystem, diagnostics, cancelEvent, ...strippedParams } = params;
245
+ var _a;
111
246
  (_a = this._onManagerUsed) === null || _a === void 0 ? void 0 : _a.call(this);
247
+ const { requestId, imodel, unitSystem, diagnostics: requestDiagnostics, cancelEvent, ...strippedParams } = params;
112
248
  const imodelAddon = this.getNativePlatform().getImodelAddon(imodel);
113
- const nativeRequestParams = {
114
- requestId,
115
- params: {
116
- locale: (_b = (locale !== null && locale !== void 0 ? locale : this.activeLocale)) === null || _b === void 0 ? void 0 : _b.toLocaleLowerCase(),
117
- unitSystem: toOptionalNativeUnitSystem(unitSystem !== null && unitSystem !== void 0 ? unitSystem : this.activeUnitSystem),
118
- ...strippedParams,
119
- },
120
- };
121
- let diagnosticsListener;
122
- if (diagnostics) {
123
- const { handler: tempDiagnosticsListener, ...diagnosticsOptions } = diagnostics;
124
- diagnosticsListener = tempDiagnosticsListener;
125
- nativeRequestParams.params.diagnostics = diagnosticsOptions;
126
- }
127
- const response = await this.getNativePlatform().handleRequest(imodelAddon, JSON.stringify(nativeRequestParams), cancelEvent);
128
- diagnosticsListener && response.diagnostics && diagnosticsListener({ logs: [response.diagnostics] });
249
+ const response = await withOptionalDiagnostics([this._diagnosticsOptions, requestDiagnostics], async (diagnosticsOptions) => {
250
+ const nativeRequestParams = {
251
+ requestId,
252
+ params: {
253
+ unitSystem: toOptionalNativeUnitSystem(unitSystem !== null && unitSystem !== void 0 ? unitSystem : this.activeUnitSystem),
254
+ ...strippedParams,
255
+ ...(diagnosticsOptions ? { diagnostics: diagnosticsOptions } : undefined),
256
+ },
257
+ };
258
+ return this.getNativePlatform().handleRequest(imodelAddon, JSON.stringify(nativeRequestParams), cancelEvent);
259
+ });
129
260
  return response.result;
130
261
  }
131
262
  }
132
263
  exports.PresentationManagerDetail = PresentationManagerDetail;
264
+ async function withOptionalDiagnostics(diagnosticsOptions, nativePlatformRequestHandler) {
265
+ const contexts = diagnosticsOptions.map((d) => { var _a; return (_a = d === null || d === void 0 ? void 0 : d.requestContextSupplier) === null || _a === void 0 ? void 0 : _a.call(d); });
266
+ const combinedOptions = (0, Utils_1.combineDiagnosticsOptions)(...diagnosticsOptions);
267
+ const response = await nativePlatformRequestHandler(combinedOptions);
268
+ if (response.diagnostics) {
269
+ const diagnostics = { logs: [response.diagnostics] };
270
+ diagnosticsOptions.forEach((options, i) => {
271
+ options && (0, Utils_1.reportDiagnostics)(diagnostics, options, contexts[i]);
272
+ });
273
+ }
274
+ return response;
275
+ }
133
276
  function setupRulesetDirectories(nativePlatform, presentationAssetsRoot, supplementalRulesetDirectoriesOverrides, rulesetDirectories) {
134
277
  const supplementalRulesetDirectories = collateAssetDirectories(path.join(presentationAssetsRoot, "supplemental-presentation-rules"), supplementalRulesetDirectoriesOverrides);
135
278
  nativePlatform.setupSupplementalRulesetDirectories(supplementalRulesetDirectories);
@@ -213,12 +356,10 @@ function addInstanceKey(classInstancesMap, key) {
213
356
  }
214
357
  set.add(key.id);
215
358
  }
216
- function createNativePlatform(id, presentationAssetsRoot, localeDirectories, workerThreadsCount, mode, changeTrackingEnabled, caching, defaultFormats, useMmap) {
359
+ function createNativePlatform(id, workerThreadsCount, mode, changeTrackingEnabled, caching, defaultFormats, useMmap) {
217
360
  var _a;
218
- const collatedLocaleDirectories = collateAssetDirectories((0, Utils_1.getLocalesDirectory)(presentationAssetsRoot), localeDirectories);
219
361
  return new ((0, NativePlatform_1.createDefaultNativePlatform)({
220
362
  id,
221
- localeDirectories: collatedLocaleDirectories,
222
363
  taskAllocationsMap: { [Number.MAX_SAFE_INTEGER]: workerThreadsCount },
223
364
  mode,
224
365
  isChangeTrackingEnabled: changeTrackingEnabled,
@@ -274,4 +415,9 @@ function toNativeUnitSystem(unitSystem) {
274
415
  function collateAssetDirectories(mainDirectory, additionalDirectories) {
275
416
  return [...new Set([mainDirectory, ...additionalDirectories])];
276
417
  }
418
+ const createContentDescriptorOverrides = (descriptorOrOverrides) => {
419
+ if (descriptorOrOverrides instanceof presentation_common_1.Descriptor)
420
+ return descriptorOrOverrides.createDescriptorOverrides();
421
+ return descriptorOrOverrides;
422
+ };
277
423
  //# sourceMappingURL=PresentationManagerDetail.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PresentationManagerDetail.js","sourceRoot":"","sources":["../../../src/presentation-backend/PresentationManagerDetail.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as hash from \"object-hash\";\r\nimport * as path from \"path\";\r\nimport { IModelDb, IModelJsNative, IpcHost } from \"@itwin/core-backend\";\r\nimport { BeEvent, IDisposable } from \"@itwin/core-bentley\";\r\nimport { UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport {\r\n ContentDescriptorRequestOptions, ContentFlags, InstanceKey, Key, KeySet, PresentationError, PresentationStatus, Prioritized, Ruleset,\r\n} from \"@itwin/presentation-common\";\r\nimport { PRESENTATION_BACKEND_ASSETS_ROOT, PRESENTATION_COMMON_ASSETS_ROOT } from \"./Constants\";\r\nimport {\r\n createDefaultNativePlatform, NativePlatformDefinition, NativePlatformRequestTypes, NativePresentationDefaultUnitFormats,\r\n NativePresentationKeySetJSON, NativePresentationUnitSystem,\r\n} from \"./NativePlatform\";\r\nimport { HierarchyCacheConfig, HierarchyCacheMode, PresentationManagerMode, PresentationManagerProps, UnitSystemFormat } from \"./PresentationManager\";\r\nimport { RulesetManager, RulesetManagerImpl } from \"./RulesetManager\";\r\nimport { UpdatesTracker } from \"./UpdatesTracker\";\r\nimport { BackendDiagnosticsHandler, BackendDiagnosticsOptions, getElementKey, getLocalesDirectory } from \"./Utils\";\r\n\r\n/** @internal */\r\nexport class PresentationManagerDetail implements IDisposable {\r\n private _disposed: boolean;\r\n private _nativePlatform: NativePlatformDefinition | undefined;\r\n private _updatesTracker: UpdatesTracker | undefined;\r\n private _onManagerUsed: (() => void) | undefined;\r\n\r\n public rulesets: RulesetManager;\r\n public activeLocale: string | undefined;\r\n public activeUnitSystem: UnitSystemKey | undefined;\r\n\r\n constructor(params: PresentationManagerProps) {\r\n this._disposed = false;\r\n\r\n const presentationAssetsRoot = params.presentationAssetsRoot ?? {\r\n common: PRESENTATION_COMMON_ASSETS_ROOT,\r\n backend: PRESENTATION_BACKEND_ASSETS_ROOT,\r\n };\r\n const mode = params.mode ?? PresentationManagerMode.ReadWrite;\r\n const changeTrackingEnabled = mode === PresentationManagerMode.ReadWrite && !!params.updatesPollInterval;\r\n this._nativePlatform = params.addon ?? createNativePlatform(\r\n params.id ?? \"\",\r\n typeof presentationAssetsRoot === \"string\" ? presentationAssetsRoot : presentationAssetsRoot.common,\r\n params.localeDirectories ?? [],\r\n params.workerThreadsCount ?? 2,\r\n mode,\r\n changeTrackingEnabled,\r\n params.caching,\r\n params.defaultFormats,\r\n params.useMmap,\r\n );\r\n\r\n const getNativePlatform = () => this.getNativePlatform();\r\n if (IpcHost.isValid && changeTrackingEnabled) {\r\n this._updatesTracker = UpdatesTracker.create({\r\n nativePlatformGetter: getNativePlatform,\r\n pollInterval: params.updatesPollInterval!,\r\n });\r\n } else {\r\n this._updatesTracker = undefined;\r\n }\r\n\r\n setupRulesetDirectories(\r\n this._nativePlatform,\r\n typeof presentationAssetsRoot === \"string\" ? presentationAssetsRoot : presentationAssetsRoot.backend,\r\n params.supplementalRulesetDirectories ?? [],\r\n params.rulesetDirectories ?? [],\r\n );\r\n this.activeLocale = params.defaultLocale;\r\n this.activeUnitSystem = params.defaultUnitSystem;\r\n\r\n this._onManagerUsed = undefined;\r\n this.rulesets = new RulesetManagerImpl(getNativePlatform);\r\n }\r\n\r\n public dispose(): void {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this.getNativePlatform().dispose();\r\n this._nativePlatform = undefined;\r\n\r\n this._updatesTracker?.dispose();\r\n this._updatesTracker = undefined;\r\n\r\n this._disposed = true;\r\n }\r\n\r\n public getNativePlatform(): NativePlatformDefinition {\r\n if (this._disposed) {\r\n throw new PresentationError(\r\n PresentationStatus.NotInitialized,\r\n \"Attempting to use Presentation manager after disposal\",\r\n );\r\n }\r\n\r\n return this._nativePlatform!;\r\n }\r\n\r\n public setOnManagerUsedHandler(handler: () => void) {\r\n this._onManagerUsed = handler;\r\n }\r\n\r\n public async getContentDescriptor(requestOptions: Prioritized<ContentDescriptorRequestOptions<IModelDb, KeySet>>): Promise<string> {\r\n const { rulesetOrId, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetContentDescriptor,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n contentFlags: ContentFlags.DescriptorOnly,\r\n keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),\r\n };\r\n return this.request(params);\r\n }\r\n\r\n /** Registers given ruleset and replaces the ruleset with its ID in the resulting object */\r\n public registerRuleset(rulesetOrId: Ruleset | string): string {\r\n if (typeof rulesetOrId === \"object\") {\r\n const rulesetWithNativeId = { ...rulesetOrId, id: this.getRulesetId(rulesetOrId) };\r\n return this.rulesets.add(rulesetWithNativeId).id;\r\n }\r\n\r\n return rulesetOrId;\r\n }\r\n\r\n /** @internal */\r\n public getRulesetId(rulesetOrId: Ruleset | string): string {\r\n return getRulesetIdObject(rulesetOrId).uniqueId;\r\n }\r\n\r\n public async request(params: RequestParams): Promise<string> {\r\n const { requestId, imodel, locale, unitSystem, diagnostics, cancelEvent, ...strippedParams } = params;\r\n this._onManagerUsed?.();\r\n\r\n const imodelAddon = this.getNativePlatform().getImodelAddon(imodel);\r\n const nativeRequestParams: any = {\r\n requestId,\r\n params: {\r\n locale: (locale ?? this.activeLocale)?.toLocaleLowerCase(),\r\n unitSystem: toOptionalNativeUnitSystem(unitSystem ?? this.activeUnitSystem),\r\n ...strippedParams,\r\n },\r\n };\r\n\r\n let diagnosticsListener: BackendDiagnosticsHandler | undefined;\r\n if (diagnostics) {\r\n const { handler: tempDiagnosticsListener, ...diagnosticsOptions } = diagnostics;\r\n diagnosticsListener = tempDiagnosticsListener;\r\n nativeRequestParams.params.diagnostics = diagnosticsOptions;\r\n }\r\n\r\n const response = await this.getNativePlatform().handleRequest(imodelAddon, JSON.stringify(nativeRequestParams), cancelEvent);\r\n diagnosticsListener && response.diagnostics && diagnosticsListener({ logs: [response.diagnostics] });\r\n return response.result;\r\n }\r\n}\r\n\r\ninterface RequestParams {\r\n diagnostics?: BackendDiagnosticsOptions;\r\n requestId: string;\r\n imodel: IModelDb;\r\n locale?: string;\r\n unitSystem?: UnitSystemKey;\r\n cancelEvent?: BeEvent<() => void>;\r\n}\r\n\r\nfunction setupRulesetDirectories(\r\n nativePlatform: NativePlatformDefinition,\r\n presentationAssetsRoot: string,\r\n supplementalRulesetDirectoriesOverrides: string[],\r\n rulesetDirectories: string[],\r\n): void {\r\n const supplementalRulesetDirectories = collateAssetDirectories(\r\n path.join(presentationAssetsRoot, \"supplemental-presentation-rules\"),\r\n supplementalRulesetDirectoriesOverrides,\r\n );\r\n nativePlatform.setupSupplementalRulesetDirectories(supplementalRulesetDirectories);\r\n\r\n const primaryRulesetDirectories = collateAssetDirectories(\r\n path.join(presentationAssetsRoot, \"primary-presentation-rules\"),\r\n rulesetDirectories,\r\n );\r\n nativePlatform.setupRulesetDirectories(primaryRulesetDirectories);\r\n}\r\n\r\ninterface RulesetIdObject {\r\n uniqueId: string;\r\n parts: {\r\n id: string;\r\n hash?: string;\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getRulesetIdObject(rulesetOrId: Ruleset | string): RulesetIdObject {\r\n if (typeof rulesetOrId === \"object\") {\r\n if (IpcHost.isValid) {\r\n // in case of native apps we don't want to enforce ruleset id uniqueness as ruleset variables\r\n // are stored on a backend and creating new id will lose those variables\r\n return {\r\n uniqueId: rulesetOrId.id,\r\n parts: { id: rulesetOrId.id },\r\n };\r\n }\r\n\r\n const hashedId = hash.MD5(rulesetOrId);\r\n return {\r\n uniqueId: `${rulesetOrId.id}-${hashedId}`,\r\n parts: {\r\n id: rulesetOrId.id,\r\n hash: hashedId,\r\n },\r\n };\r\n }\r\n\r\n return { uniqueId: rulesetOrId, parts: { id: rulesetOrId } };\r\n}\r\n\r\n/** @internal */\r\nexport function getKeysForContentRequest(\r\n keys: Readonly<KeySet>,\r\n classInstanceKeysProcessor?: (keys: Map<string, Set<string>>) => void,\r\n): NativePresentationKeySetJSON {\r\n const result: NativePresentationKeySetJSON = {\r\n instanceKeys: [],\r\n nodeKeys: [],\r\n };\r\n const classInstancesMap = new Map<string, Set<string>>();\r\n keys.forEach((key) => {\r\n if (Key.isNodeKey(key)) {\r\n result.nodeKeys.push(key);\r\n }\r\n\r\n if (Key.isInstanceKey(key)) {\r\n addInstanceKey(classInstancesMap, key);\r\n }\r\n });\r\n\r\n if (classInstanceKeysProcessor) {\r\n classInstanceKeysProcessor(classInstancesMap);\r\n }\r\n\r\n for (const entry of classInstancesMap) {\r\n if (entry[1].size > 0) {\r\n result.instanceKeys.push([entry[\"0\"], [...entry[1]]]);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function bisElementInstanceKeysProcessor(imodel: IModelDb, classInstancesMap: Map<string, Set<string>>) {\r\n const elementClassName = \"BisCore:Element\";\r\n const elementIds = classInstancesMap.get(elementClassName);\r\n if (elementIds) {\r\n const deleteElementIds = new Array<string>();\r\n elementIds.forEach((elementId) => {\r\n const concreteKey = getElementKey(imodel, elementId);\r\n if (concreteKey && concreteKey.className !== elementClassName) {\r\n deleteElementIds.push(elementId);\r\n addInstanceKey(classInstancesMap, { className: concreteKey.className, id: elementId });\r\n }\r\n });\r\n for (const id of deleteElementIds) {\r\n elementIds.delete(id);\r\n }\r\n }\r\n}\r\n\r\nfunction addInstanceKey(classInstancesMap: Map<string, Set<string>>, key: InstanceKey): void {\r\n let set = classInstancesMap.get(key.className);\r\n // istanbul ignore else\r\n if (!set) {\r\n set = new Set();\r\n classInstancesMap.set(key.className, set);\r\n }\r\n set.add(key.id);\r\n}\r\n\r\ninterface UnitFormatMap {\r\n [phenomenon: string]: UnitSystemFormat;\r\n}\r\n\r\nfunction createNativePlatform(\r\n id: string,\r\n presentationAssetsRoot: string,\r\n localeDirectories: string[],\r\n workerThreadsCount: number,\r\n mode: PresentationManagerMode,\r\n changeTrackingEnabled: boolean,\r\n caching: PresentationManagerProps[\"caching\"],\r\n defaultFormats: UnitFormatMap | undefined,\r\n useMmap: boolean | number | undefined,\r\n): NativePlatformDefinition {\r\n const collatedLocaleDirectories = collateAssetDirectories(\r\n getLocalesDirectory(presentationAssetsRoot),\r\n localeDirectories,\r\n );\r\n return new (createDefaultNativePlatform({\r\n id,\r\n localeDirectories: collatedLocaleDirectories,\r\n taskAllocationsMap: { [Number.MAX_SAFE_INTEGER]: workerThreadsCount },\r\n mode,\r\n isChangeTrackingEnabled: changeTrackingEnabled,\r\n cacheConfig: createCacheConfig(caching?.hierarchies),\r\n contentCacheSize: caching?.content?.size,\r\n defaultFormats: toNativeUnitFormatsMap(defaultFormats),\r\n useMmap,\r\n }))();\r\n\r\n function createCacheConfig(config?: HierarchyCacheConfig): IModelJsNative.ECPresentationHierarchyCacheConfig {\r\n switch (config?.mode) {\r\n case HierarchyCacheMode.Disk:\r\n return { ...config, directory: normalizeDirectory(config.directory) };\r\n\r\n case HierarchyCacheMode.Hybrid:\r\n return {\r\n ...config,\r\n disk: config.disk ? { ...config.disk, directory: normalizeDirectory(config.disk.directory) } : undefined,\r\n };\r\n\r\n case HierarchyCacheMode.Memory:\r\n return config;\r\n\r\n default:\r\n return { mode: HierarchyCacheMode.Disk, directory: \"\" };\r\n }\r\n }\r\n\r\n function normalizeDirectory(directory?: string): string {\r\n return directory ? path.resolve(directory) : \"\";\r\n }\r\n\r\n function toNativeUnitFormatsMap(map: UnitFormatMap | undefined): NativePresentationDefaultUnitFormats | undefined {\r\n if (!map) {\r\n return undefined;\r\n }\r\n\r\n const nativeFormatsMap: NativePresentationDefaultUnitFormats = {};\r\n Object.keys(map).forEach((phenomenon) => {\r\n const unitSystemsFormat = map[phenomenon];\r\n nativeFormatsMap[phenomenon] = {\r\n unitSystems: unitSystemsFormat.unitSystems.map(toNativeUnitSystem),\r\n format: unitSystemsFormat.format,\r\n };\r\n });\r\n return nativeFormatsMap;\r\n }\r\n}\r\n\r\nfunction toOptionalNativeUnitSystem(unitSystem: UnitSystemKey | undefined): NativePresentationUnitSystem | undefined {\r\n return unitSystem ? toNativeUnitSystem(unitSystem) : undefined;\r\n}\r\n\r\nfunction toNativeUnitSystem(unitSystem: UnitSystemKey): NativePresentationUnitSystem {\r\n switch (unitSystem) {\r\n case \"imperial\": return NativePresentationUnitSystem.BritishImperial;\r\n case \"metric\": return NativePresentationUnitSystem.Metric;\r\n case \"usCustomary\": return NativePresentationUnitSystem.UsCustomary;\r\n case \"usSurvey\": return NativePresentationUnitSystem.UsSurvey;\r\n }\r\n}\r\n\r\nfunction collateAssetDirectories(mainDirectory: string, additionalDirectories: string[]): string[] {\r\n return [...new Set([mainDirectory, ...additionalDirectories])];\r\n}\r\n"]}
1
+ {"version":3,"file":"PresentationManagerDetail.js","sourceRoot":"","sources":["../../../src/presentation-backend/PresentationManagerDetail.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport * as hash from \"object-hash\";\r\nimport * as path from \"path\";\r\nimport { IModelDb, IModelJsNative, IpcHost } from \"@itwin/core-backend\";\r\nimport { BeEvent, IDisposable } from \"@itwin/core-bentley\";\r\nimport { UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport {\r\n Content, ContentDescriptorRequestOptions, ContentFlags, ContentRequestOptions, ContentSourcesRequestOptions, DefaultContentDisplayTypes, Descriptor,\r\n DescriptorOverrides, DiagnosticsOptions, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DisplayValueGroup, DistinctValuesRequestOptions,\r\n ElementProperties, FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, HierarchyRequestOptions, InstanceKey, Key,\r\n KeySet, LabelDefinition, Node, NodeKey, NodePathElement, Paged, PagedResponse, PresentationError, PresentationStatus, Prioritized, Ruleset,\r\n RulesetVariable, SelectClassInfo, SingleElementPropertiesRequestOptions, WithCancelEvent,\r\n} from \"@itwin/presentation-common\";\r\nimport { PRESENTATION_BACKEND_ASSETS_ROOT, PRESENTATION_COMMON_ASSETS_ROOT } from \"./Constants\";\r\nimport { buildElementsProperties } from \"./ElementPropertiesHelper\";\r\nimport {\r\n createDefaultNativePlatform, NativePlatformDefinition, NativePlatformRequestTypes, NativePlatformResponse, NativePresentationDefaultUnitFormats,\r\n NativePresentationKeySetJSON, NativePresentationUnitSystem,\r\n} from \"./NativePlatform\";\r\nimport { HierarchyCacheConfig, HierarchyCacheMode, PresentationManagerMode, PresentationManagerProps, UnitSystemFormat } from \"./PresentationManager\";\r\nimport { RulesetManager, RulesetManagerImpl } from \"./RulesetManager\";\r\nimport { UpdatesTracker } from \"./UpdatesTracker\";\r\nimport { BackendDiagnosticsAttribute, BackendDiagnosticsOptions, combineDiagnosticsOptions, getElementKey, reportDiagnostics } from \"./Utils\";\r\n\r\n/** @internal */\r\nexport class PresentationManagerDetail implements IDisposable {\r\n private _disposed: boolean;\r\n private _nativePlatform: NativePlatformDefinition | undefined;\r\n private _updatesTracker: UpdatesTracker | undefined;\r\n private _onManagerUsed: (() => void) | undefined;\r\n private _diagnosticsOptions: BackendDiagnosticsOptions | undefined;\r\n\r\n public rulesets: RulesetManager;\r\n public activeUnitSystem: UnitSystemKey | undefined;\r\n\r\n constructor(params: PresentationManagerProps) {\r\n this._disposed = false;\r\n\r\n const presentationAssetsRoot = params.presentationAssetsRoot ?? {\r\n common: PRESENTATION_COMMON_ASSETS_ROOT,\r\n backend: PRESENTATION_BACKEND_ASSETS_ROOT,\r\n };\r\n const mode = params.mode ?? PresentationManagerMode.ReadWrite;\r\n const changeTrackingEnabled = mode === PresentationManagerMode.ReadWrite && !!params.updatesPollInterval;\r\n this._nativePlatform = params.addon ?? createNativePlatform(\r\n params.id ?? \"\",\r\n params.workerThreadsCount ?? 2,\r\n mode,\r\n changeTrackingEnabled,\r\n params.caching,\r\n params.defaultFormats,\r\n params.useMmap,\r\n );\r\n\r\n const getNativePlatform = () => this.getNativePlatform();\r\n if (IpcHost.isValid && changeTrackingEnabled) {\r\n this._updatesTracker = UpdatesTracker.create({\r\n nativePlatformGetter: getNativePlatform,\r\n pollInterval: params.updatesPollInterval!,\r\n });\r\n } else {\r\n this._updatesTracker = undefined;\r\n }\r\n\r\n setupRulesetDirectories(\r\n this._nativePlatform,\r\n typeof presentationAssetsRoot === \"string\" ? presentationAssetsRoot : presentationAssetsRoot.backend,\r\n params.supplementalRulesetDirectories ?? [],\r\n params.rulesetDirectories ?? [],\r\n );\r\n this.activeUnitSystem = params.defaultUnitSystem;\r\n\r\n this._onManagerUsed = undefined;\r\n this.rulesets = new RulesetManagerImpl(getNativePlatform);\r\n this._diagnosticsOptions = params.diagnostics;\r\n }\r\n\r\n public dispose(): void {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this.getNativePlatform().dispose();\r\n this._nativePlatform = undefined;\r\n\r\n this._updatesTracker?.dispose();\r\n this._updatesTracker = undefined;\r\n\r\n this._disposed = true;\r\n }\r\n\r\n public getNativePlatform(): NativePlatformDefinition {\r\n if (this._disposed) {\r\n throw new PresentationError(\r\n PresentationStatus.NotInitialized,\r\n \"Attempting to use Presentation manager after disposal\",\r\n );\r\n }\r\n\r\n return this._nativePlatform!;\r\n }\r\n\r\n public setOnManagerUsedHandler(handler: () => void) {\r\n this._onManagerUsed = handler;\r\n }\r\n\r\n public async getNodes(requestOptions: WithCancelEvent<Prioritized<Paged<HierarchyRequestOptions<IModelDb, NodeKey, RulesetVariable>>>> & BackendDiagnosticsAttribute): Promise<Node[]> {\r\n const { rulesetOrId, parentKey, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: parentKey ? NativePlatformRequestTypes.GetChildren : NativePlatformRequestTypes.GetRootNodes,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n nodeKey: parentKey,\r\n };\r\n return JSON.parse(await this.request(params), Node.listReviver);\r\n }\r\n\r\n public async getNodesCount(requestOptions: WithCancelEvent<Prioritized<HierarchyRequestOptions<IModelDb, NodeKey, RulesetVariable>>> & BackendDiagnosticsAttribute): Promise<number> {\r\n const { rulesetOrId, parentKey, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: parentKey ? NativePlatformRequestTypes.GetChildrenCount : NativePlatformRequestTypes.GetRootNodesCount,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n nodeKey: parentKey,\r\n };\r\n return JSON.parse(await this.request(params));\r\n }\r\n\r\n public async getNodePaths(requestOptions: WithCancelEvent<Prioritized<FilterByInstancePathsHierarchyRequestOptions<IModelDb, RulesetVariable>>> & BackendDiagnosticsAttribute): Promise<NodePathElement[]> {\r\n const { rulesetOrId, instancePaths, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetNodePaths,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n paths: instancePaths.map((p) => p.map((s) => InstanceKey.toJSON(s))),\r\n };\r\n return JSON.parse(await this.request(params), NodePathElement.listReviver);\r\n }\r\n\r\n public async getFilteredNodePaths(requestOptions: WithCancelEvent<Prioritized<FilterByTextHierarchyRequestOptions<IModelDb, RulesetVariable>>> & BackendDiagnosticsAttribute): Promise<NodePathElement[]> {\r\n const { rulesetOrId, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetFilteredNodePaths,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n };\r\n return JSON.parse(await this.request(params), NodePathElement.listReviver);\r\n }\r\n\r\n public async getContentDescriptor(requestOptions: WithCancelEvent<Prioritized<ContentDescriptorRequestOptions<IModelDb, KeySet>>>): Promise<string> {\r\n const { rulesetOrId, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetContentDescriptor,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n contentFlags: ContentFlags.DescriptorOnly,\r\n keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),\r\n };\r\n return this.request(params);\r\n }\r\n\r\n public async getContentSources(requestOptions: WithCancelEvent<Prioritized<ContentSourcesRequestOptions<IModelDb>>> & BackendDiagnosticsAttribute): Promise<SelectClassInfo[]> {\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetContentSources,\r\n rulesetId: \"ElementProperties\",\r\n ...requestOptions,\r\n };\r\n const reviver = (key: string, value: any) => {\r\n return key === \"\" ? SelectClassInfo.listFromCompressedJSON(value.sources, value.classesMap) : value;\r\n };\r\n return JSON.parse(await this.request(params), reviver);\r\n }\r\n\r\n public async getContentSetSize(requestOptions: WithCancelEvent<Prioritized<ContentRequestOptions<IModelDb, Descriptor | DescriptorOverrides, KeySet, RulesetVariable>>> & BackendDiagnosticsAttribute): Promise<number> {\r\n const { rulesetOrId, descriptor, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetContentSetSize,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),\r\n descriptorOverrides: createContentDescriptorOverrides(descriptor),\r\n };\r\n return JSON.parse(await this.request(params));\r\n }\r\n\r\n public async getContent(requestOptions: WithCancelEvent<Prioritized<Paged<ContentRequestOptions<IModelDb, Descriptor | DescriptorOverrides, KeySet, RulesetVariable>>>> & BackendDiagnosticsAttribute): Promise<Content | undefined> {\r\n const { rulesetOrId, descriptor, ...strippedOptions } = requestOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetContent,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptions,\r\n keys: getKeysForContentRequest(requestOptions.keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),\r\n descriptorOverrides: createContentDescriptorOverrides(descriptor),\r\n };\r\n return JSON.parse(await this.request(params), Content.reviver);\r\n }\r\n\r\n public async getPagedDistinctValues(requestOptions: WithCancelEvent<Prioritized<DistinctValuesRequestOptions<IModelDb, Descriptor | DescriptorOverrides, KeySet, RulesetVariable>>> & BackendDiagnosticsAttribute): Promise<PagedResponse<DisplayValueGroup>> {\r\n const { rulesetOrId, ...strippedOptions } = requestOptions;\r\n const { descriptor, keys, ...strippedOptionsNoDescriptorAndKeys } = strippedOptions;\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetPagedDistinctValues,\r\n rulesetId: this.registerRuleset(rulesetOrId),\r\n ...strippedOptionsNoDescriptorAndKeys,\r\n keys: getKeysForContentRequest(keys, (map) => bisElementInstanceKeysProcessor(requestOptions.imodel, map)),\r\n descriptorOverrides: createContentDescriptorOverrides(descriptor),\r\n };\r\n const reviver = (key: string, value: any) => {\r\n return key === \"\" ? {\r\n total: value.total,\r\n items: value.items.map(DisplayValueGroup.fromJSON),\r\n } : value;\r\n };\r\n return JSON.parse(await this.request(params), reviver);\r\n }\r\n\r\n public async getDisplayLabelDefinition(requestOptions: WithCancelEvent<Prioritized<DisplayLabelRequestOptions<IModelDb, InstanceKey>>> & BackendDiagnosticsAttribute): Promise<LabelDefinition> {\r\n const params = {\r\n requestId: NativePlatformRequestTypes.GetDisplayLabel,\r\n ...requestOptions,\r\n key: InstanceKey.toJSON(requestOptions.key),\r\n };\r\n return JSON.parse(await this.request(params), LabelDefinition.reviver);\r\n }\r\n\r\n public async getDisplayLabelDefinitions(requestOptions: WithCancelEvent<Prioritized<Paged<DisplayLabelsRequestOptions<IModelDb, InstanceKey>>>> & BackendDiagnosticsAttribute): Promise<LabelDefinition[]> {\r\n const concreteKeys = requestOptions.keys.map((k) => {\r\n if (k.className === \"BisCore:Element\")\r\n return getElementKey(requestOptions.imodel, k.id);\r\n return k;\r\n }).filter<InstanceKey>((k): k is InstanceKey => !!k);\r\n const contentRequestOptions: ContentRequestOptions<IModelDb, Descriptor | DescriptorOverrides, KeySet> = {\r\n ...requestOptions,\r\n rulesetOrId: \"RulesDrivenECPresentationManager_RulesetId_DisplayLabel\",\r\n descriptor: {\r\n displayType: DefaultContentDisplayTypes.List,\r\n contentFlags: ContentFlags.ShowLabels | ContentFlags.NoFields,\r\n },\r\n keys: new KeySet(concreteKeys),\r\n };\r\n const content = await this.getContent(contentRequestOptions);\r\n return concreteKeys.map((key) => {\r\n const item = content ? content.contentSet.find((it) => it.primaryKeys.length > 0 && InstanceKey.compare(it.primaryKeys[0], key) === 0) : undefined;\r\n if (!item)\r\n return { displayValue: \"\", rawValue: \"\", typeName: \"\" };\r\n return item.label;\r\n });\r\n }\r\n\r\n public async getElementProperties(requestOptions: WithCancelEvent<Prioritized<SingleElementPropertiesRequestOptions<IModelDb>>> & BackendDiagnosticsAttribute): Promise<ElementProperties | undefined> {\r\n const { elementId, ...optionsNoElementId } = requestOptions;\r\n const content = await this.getContent({\r\n ...optionsNoElementId,\r\n descriptor: {\r\n displayType: DefaultContentDisplayTypes.PropertyPane,\r\n contentFlags: ContentFlags.ShowLabels,\r\n },\r\n rulesetOrId: \"ElementProperties\",\r\n keys: new KeySet([{ className: \"BisCore:Element\", id: elementId }]),\r\n });\r\n const properties = buildElementsProperties(content);\r\n return properties[0];\r\n }\r\n\r\n /** Registers given ruleset and replaces the ruleset with its ID in the resulting object */\r\n public registerRuleset(rulesetOrId: Ruleset | string): string {\r\n if (typeof rulesetOrId === \"object\") {\r\n const rulesetWithNativeId = { ...rulesetOrId, id: this.getRulesetId(rulesetOrId) };\r\n return this.rulesets.add(rulesetWithNativeId).id;\r\n }\r\n\r\n return rulesetOrId;\r\n }\r\n\r\n /** @internal */\r\n public getRulesetId(rulesetOrId: Ruleset | string): string {\r\n return getRulesetIdObject(rulesetOrId).uniqueId;\r\n }\r\n\r\n public async request(params: RequestParams): Promise<string> {\r\n this._onManagerUsed?.();\r\n const { requestId, imodel, unitSystem, diagnostics: requestDiagnostics, cancelEvent, ...strippedParams } = params;\r\n const imodelAddon = this.getNativePlatform().getImodelAddon(imodel);\r\n const response = await withOptionalDiagnostics(\r\n [this._diagnosticsOptions, requestDiagnostics],\r\n async (diagnosticsOptions) => {\r\n const nativeRequestParams: any = {\r\n requestId,\r\n params: {\r\n unitSystem: toOptionalNativeUnitSystem(unitSystem ?? this.activeUnitSystem),\r\n ...strippedParams,\r\n ...(diagnosticsOptions ? { diagnostics: diagnosticsOptions } : undefined),\r\n },\r\n };\r\n return this.getNativePlatform().handleRequest(imodelAddon, JSON.stringify(nativeRequestParams), cancelEvent);\r\n },\r\n );\r\n return response.result;\r\n }\r\n}\r\n\r\nasync function withOptionalDiagnostics(\r\n diagnosticsOptions: Array<BackendDiagnosticsOptions | undefined>,\r\n nativePlatformRequestHandler: (combinedDiagnosticsOptions: DiagnosticsOptions | undefined) => Promise<NativePlatformResponse<string>>,\r\n): Promise<NativePlatformResponse<string>> {\r\n const contexts = diagnosticsOptions.map((d) => d?.requestContextSupplier?.());\r\n const combinedOptions = combineDiagnosticsOptions(...diagnosticsOptions);\r\n const response = await nativePlatformRequestHandler(combinedOptions);\r\n if (response.diagnostics) {\r\n const diagnostics = { logs: [response.diagnostics] };\r\n diagnosticsOptions.forEach((options, i) => {\r\n options && reportDiagnostics(diagnostics, options, contexts[i]);\r\n });\r\n }\r\n return response;\r\n}\r\n\r\ninterface RequestParams {\r\n diagnostics?: BackendDiagnosticsOptions;\r\n requestId: string;\r\n imodel: IModelDb;\r\n unitSystem?: UnitSystemKey;\r\n cancelEvent?: BeEvent<() => void>;\r\n}\r\n\r\nfunction setupRulesetDirectories(\r\n nativePlatform: NativePlatformDefinition,\r\n presentationAssetsRoot: string,\r\n supplementalRulesetDirectoriesOverrides: string[],\r\n rulesetDirectories: string[],\r\n): void {\r\n const supplementalRulesetDirectories = collateAssetDirectories(\r\n path.join(presentationAssetsRoot, \"supplemental-presentation-rules\"),\r\n supplementalRulesetDirectoriesOverrides,\r\n );\r\n nativePlatform.setupSupplementalRulesetDirectories(supplementalRulesetDirectories);\r\n\r\n const primaryRulesetDirectories = collateAssetDirectories(\r\n path.join(presentationAssetsRoot, \"primary-presentation-rules\"),\r\n rulesetDirectories,\r\n );\r\n nativePlatform.setupRulesetDirectories(primaryRulesetDirectories);\r\n}\r\n\r\ninterface RulesetIdObject {\r\n uniqueId: string;\r\n parts: {\r\n id: string;\r\n hash?: string;\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getRulesetIdObject(rulesetOrId: Ruleset | string): RulesetIdObject {\r\n if (typeof rulesetOrId === \"object\") {\r\n if (IpcHost.isValid) {\r\n // in case of native apps we don't want to enforce ruleset id uniqueness as ruleset variables\r\n // are stored on a backend and creating new id will lose those variables\r\n return {\r\n uniqueId: rulesetOrId.id,\r\n parts: { id: rulesetOrId.id },\r\n };\r\n }\r\n\r\n const hashedId = hash.MD5(rulesetOrId);\r\n return {\r\n uniqueId: `${rulesetOrId.id}-${hashedId}`,\r\n parts: {\r\n id: rulesetOrId.id,\r\n hash: hashedId,\r\n },\r\n };\r\n }\r\n\r\n return { uniqueId: rulesetOrId, parts: { id: rulesetOrId } };\r\n}\r\n\r\n/** @internal */\r\nexport function getKeysForContentRequest(\r\n keys: Readonly<KeySet>,\r\n classInstanceKeysProcessor?: (keys: Map<string, Set<string>>) => void,\r\n): NativePresentationKeySetJSON {\r\n const result: NativePresentationKeySetJSON = {\r\n instanceKeys: [],\r\n nodeKeys: [],\r\n };\r\n const classInstancesMap = new Map<string, Set<string>>();\r\n keys.forEach((key) => {\r\n if (Key.isNodeKey(key)) {\r\n result.nodeKeys.push(key);\r\n }\r\n\r\n if (Key.isInstanceKey(key)) {\r\n addInstanceKey(classInstancesMap, key);\r\n }\r\n });\r\n\r\n if (classInstanceKeysProcessor) {\r\n classInstanceKeysProcessor(classInstancesMap);\r\n }\r\n\r\n for (const entry of classInstancesMap) {\r\n if (entry[1].size > 0) {\r\n result.instanceKeys.push([entry[\"0\"], [...entry[1]]]);\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/** @internal */\r\nexport function bisElementInstanceKeysProcessor(imodel: IModelDb, classInstancesMap: Map<string, Set<string>>) {\r\n const elementClassName = \"BisCore:Element\";\r\n const elementIds = classInstancesMap.get(elementClassName);\r\n if (elementIds) {\r\n const deleteElementIds = new Array<string>();\r\n elementIds.forEach((elementId) => {\r\n const concreteKey = getElementKey(imodel, elementId);\r\n if (concreteKey && concreteKey.className !== elementClassName) {\r\n deleteElementIds.push(elementId);\r\n addInstanceKey(classInstancesMap, { className: concreteKey.className, id: elementId });\r\n }\r\n });\r\n for (const id of deleteElementIds) {\r\n elementIds.delete(id);\r\n }\r\n }\r\n}\r\n\r\nfunction addInstanceKey(classInstancesMap: Map<string, Set<string>>, key: InstanceKey): void {\r\n let set = classInstancesMap.get(key.className);\r\n // istanbul ignore else\r\n if (!set) {\r\n set = new Set();\r\n classInstancesMap.set(key.className, set);\r\n }\r\n set.add(key.id);\r\n}\r\n\r\ninterface UnitFormatMap {\r\n [phenomenon: string]: UnitSystemFormat;\r\n}\r\n\r\nfunction createNativePlatform(\r\n id: string,\r\n workerThreadsCount: number,\r\n mode: PresentationManagerMode,\r\n changeTrackingEnabled: boolean,\r\n caching: PresentationManagerProps[\"caching\"],\r\n defaultFormats: UnitFormatMap | undefined,\r\n useMmap: boolean | number | undefined,\r\n): NativePlatformDefinition {\r\n return new (createDefaultNativePlatform({\r\n id,\r\n taskAllocationsMap: { [Number.MAX_SAFE_INTEGER]: workerThreadsCount },\r\n mode,\r\n isChangeTrackingEnabled: changeTrackingEnabled,\r\n cacheConfig: createCacheConfig(caching?.hierarchies),\r\n contentCacheSize: caching?.content?.size,\r\n defaultFormats: toNativeUnitFormatsMap(defaultFormats),\r\n useMmap,\r\n }))();\r\n\r\n function createCacheConfig(config?: HierarchyCacheConfig): IModelJsNative.ECPresentationHierarchyCacheConfig {\r\n switch (config?.mode) {\r\n case HierarchyCacheMode.Disk:\r\n return { ...config, directory: normalizeDirectory(config.directory) };\r\n\r\n case HierarchyCacheMode.Hybrid:\r\n return {\r\n ...config,\r\n disk: config.disk ? { ...config.disk, directory: normalizeDirectory(config.disk.directory) } : undefined,\r\n };\r\n\r\n case HierarchyCacheMode.Memory:\r\n return config;\r\n\r\n default:\r\n return { mode: HierarchyCacheMode.Disk, directory: \"\" };\r\n }\r\n }\r\n\r\n function normalizeDirectory(directory?: string): string {\r\n return directory ? path.resolve(directory) : \"\";\r\n }\r\n\r\n function toNativeUnitFormatsMap(map: UnitFormatMap | undefined): NativePresentationDefaultUnitFormats | undefined {\r\n if (!map) {\r\n return undefined;\r\n }\r\n\r\n const nativeFormatsMap: NativePresentationDefaultUnitFormats = {};\r\n Object.keys(map).forEach((phenomenon) => {\r\n const unitSystemsFormat = map[phenomenon];\r\n nativeFormatsMap[phenomenon] = {\r\n unitSystems: unitSystemsFormat.unitSystems.map(toNativeUnitSystem),\r\n format: unitSystemsFormat.format,\r\n };\r\n });\r\n return nativeFormatsMap;\r\n }\r\n}\r\n\r\nfunction toOptionalNativeUnitSystem(unitSystem: UnitSystemKey | undefined): NativePresentationUnitSystem | undefined {\r\n return unitSystem ? toNativeUnitSystem(unitSystem) : undefined;\r\n}\r\n\r\nfunction toNativeUnitSystem(unitSystem: UnitSystemKey): NativePresentationUnitSystem {\r\n switch (unitSystem) {\r\n case \"imperial\": return NativePresentationUnitSystem.BritishImperial;\r\n case \"metric\": return NativePresentationUnitSystem.Metric;\r\n case \"usCustomary\": return NativePresentationUnitSystem.UsCustomary;\r\n case \"usSurvey\": return NativePresentationUnitSystem.UsSurvey;\r\n }\r\n}\r\n\r\nfunction collateAssetDirectories(mainDirectory: string, additionalDirectories: string[]): string[] {\r\n return [...new Set([mainDirectory, ...additionalDirectories])];\r\n}\r\n\r\nconst createContentDescriptorOverrides = (descriptorOrOverrides: Descriptor | DescriptorOverrides): DescriptorOverrides => {\r\n if (descriptorOrOverrides instanceof Descriptor)\r\n return descriptorOrOverrides.createDescriptorOverrides();\r\n return descriptorOrOverrides;\r\n};\r\n"]}
@@ -191,7 +191,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
191
191
  parentKey: nodeKeyFromJson(options.parentKey),
192
192
  });
193
193
  const [nodes, count] = await Promise.all([
194
- this.getManager(requestOptions.clientId).getNodes(options),
194
+ this.getManager(requestOptions.clientId).getDetail().getNodes(options),
195
195
  this.getManager(requestOptions.clientId).getNodesCount(options),
196
196
  ]);
197
197
  return { total: count, items: nodes.map(presentation_common_1.Node.toJSON) };
@@ -252,7 +252,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
252
252
  });
253
253
  const [size, content] = await Promise.all([
254
254
  this.getManager(requestOptions.clientId).getContentSetSize(options),
255
- this.getManager(requestOptions.clientId).getContent(options),
255
+ this.getManager(requestOptions.clientId).getDetail().getContent(options),
256
256
  ]);
257
257
  if (!content)
258
258
  return undefined;
@@ -271,7 +271,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
271
271
  }
272
272
  async getElementProperties(token, requestOptions) {
273
273
  return this.makeRequest(token, "getElementProperties", { ...requestOptions }, async (options) => {
274
- return this.getManager(requestOptions.clientId).getElementProperties(options);
274
+ return this.getManager(requestOptions.clientId).getDetail().getElementProperties(options);
275
275
  });
276
276
  }
277
277
  async getPagedDistinctValues(token, requestOptions) {
@@ -300,7 +300,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
300
300
  }, exports.MAX_ALLOWED_KEYS_PAGE_SIZE);
301
301
  const [size, content] = await Promise.all([
302
302
  this.getManager(requestOptions.clientId).getContentSetSize(options),
303
- this.getManager(requestOptions.clientId).getContent(options),
303
+ this.getManager(requestOptions.clientId).getDetail().getContent(options),
304
304
  ]);
305
305
  if (size === 0 || !content)
306
306
  return { total: 0, items: new presentation_common_1.KeySet().toJSON() };
@@ -312,7 +312,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
312
312
  }
313
313
  async getDisplayLabelDefinition(token, requestOptions) {
314
314
  return this.makeRequest(token, "getDisplayLabelDefinition", requestOptions, async (options) => {
315
- const label = await this.getManager(requestOptions.clientId).getDisplayLabelDefinition(options);
315
+ const label = await this.getManager(requestOptions.clientId).getDetail().getDisplayLabelDefinition(options);
316
316
  return presentation_common_1.LabelDefinition.toJSON(label);
317
317
  });
318
318
  }
@@ -321,7 +321,7 @@ class PresentationRpcImpl extends presentation_common_1.PresentationRpcInterface
321
321
  if (pageOpts.paging.size < requestOptions.keys.length)
322
322
  requestOptions.keys.splice(pageOpts.paging.size);
323
323
  return this.makeRequest(token, "getPagedDisplayLabelDefinitions", requestOptions, async (options) => {
324
- const labels = await this.getManager(requestOptions.clientId).getDisplayLabelDefinitions({ ...options, keys: options.keys.map(presentation_common_1.InstanceKey.fromJSON) });
324
+ const labels = await this.getManager(requestOptions.clientId).getDetail().getDisplayLabelDefinitions({ ...options, keys: options.keys.map(presentation_common_1.InstanceKey.fromJSON) });
325
325
  return {
326
326
  total: options.keys.length,
327
327
  items: labels.map(presentation_common_1.LabelDefinition.toJSON),