@itwin/presentation-backend 5.0.0-dev.98 → 5.1.0-dev.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.
- package/CHANGELOG.md +6 -1
- package/lib/cjs/presentation-backend/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.d.ts +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js +20 -19
- package/lib/cjs/presentation-backend/ElementPropertiesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/InternalSymbols.js.map +1 -1
- package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
- package/lib/cjs/presentation-backend/Presentation.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationIpcHandler.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
- package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/RulesetEmbedder.js +8 -11
- package/lib/cjs/presentation-backend/RulesetEmbedder.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetManager.js.map +1 -1
- package/lib/cjs/presentation-backend/RulesetVariablesManager.js.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js +67 -70
- package/lib/cjs/presentation-backend/SelectionScopesHelper.js.map +1 -1
- package/lib/cjs/presentation-backend/TemporaryStorage.js.map +1 -1
- package/lib/cjs/presentation-backend/Utils.d.ts.map +1 -1
- package/lib/cjs/presentation-backend/Utils.js +2 -13
- package/lib/cjs/presentation-backend/Utils.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
- package/lib/cjs/presentation-backend/domain/RulesetElements.js.map +1 -1
- package/lib/cjs/presentation-backend-internal.js.map +1 -1
- package/lib/cjs/presentation-backend.js.map +1 -1
- package/lib/esm/presentation-backend/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/presentation-backend/ElementPropertiesHelper.d.ts +1 -1
- package/lib/esm/presentation-backend/ElementPropertiesHelper.d.ts.map +1 -1
- package/lib/esm/presentation-backend/ElementPropertiesHelper.js +21 -20
- package/lib/esm/presentation-backend/ElementPropertiesHelper.js.map +1 -1
- package/lib/esm/presentation-backend/InternalSymbols.js.map +1 -1
- package/lib/esm/presentation-backend/NativePlatform.js.map +1 -1
- package/lib/esm/presentation-backend/Presentation.js.map +1 -1
- package/lib/esm/presentation-backend/PresentationIpcHandler.js.map +1 -1
- package/lib/esm/presentation-backend/PresentationManager.js.map +1 -1
- package/lib/esm/presentation-backend/PresentationManagerDetail.js.map +1 -1
- package/lib/esm/presentation-backend/PresentationRpcImpl.js.map +1 -1
- package/lib/esm/presentation-backend/RulesetEmbedder.d.ts.map +1 -1
- package/lib/esm/presentation-backend/RulesetEmbedder.js +10 -13
- package/lib/esm/presentation-backend/RulesetEmbedder.js.map +1 -1
- package/lib/esm/presentation-backend/RulesetManager.js.map +1 -1
- package/lib/esm/presentation-backend/RulesetVariablesManager.js.map +1 -1
- package/lib/esm/presentation-backend/SelectionScopesHelper.d.ts.map +1 -1
- package/lib/esm/presentation-backend/SelectionScopesHelper.js +68 -71
- package/lib/esm/presentation-backend/SelectionScopesHelper.js.map +1 -1
- package/lib/esm/presentation-backend/TemporaryStorage.js.map +1 -1
- package/lib/esm/presentation-backend/Utils.d.ts.map +1 -1
- package/lib/esm/presentation-backend/Utils.js +2 -13
- package/lib/esm/presentation-backend/Utils.js.map +1 -1
- package/lib/esm/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
- package/lib/esm/presentation-backend/domain/RulesetElements.js.map +1 -1
- package/lib/esm/presentation-backend-internal.js.map +1 -1
- package/lib/esm/presentation-backend.js.map +1 -1
- package/package.json +15 -15
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
/** @packageDocumentation
|
|
7
7
|
* @module Core
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
10
|
+
import { QueryBinder } from "@itwin/core-common";
|
|
10
11
|
import { KeySet, PresentationError, PresentationStatus, } from "@itwin/presentation-common";
|
|
11
12
|
import { getElementKey } from "./Utils.js";
|
|
12
13
|
/**
|
|
@@ -43,62 +44,60 @@ export class SelectionScopesHelper {
|
|
|
43
44
|
}
|
|
44
45
|
return getElementKey(iModel, currId);
|
|
45
46
|
}
|
|
46
|
-
static computeElementSelection(iModel, elementIds, ancestorLevel) {
|
|
47
|
+
static async computeElementSelection(iModel, elementIds, ancestorLevel) {
|
|
47
48
|
const parentKeys = new KeySet();
|
|
48
|
-
elementIds
|
|
49
|
+
await forEachNonTransientId(elementIds, async (id) => {
|
|
49
50
|
const key = this.getElementKey(iModel, id, ancestorLevel);
|
|
50
51
|
key && parentKeys.add(key);
|
|
51
|
-
})
|
|
52
|
+
});
|
|
52
53
|
return parentKeys;
|
|
53
54
|
}
|
|
54
|
-
static computeCategorySelection(iModel, ids) {
|
|
55
|
+
static async computeCategorySelection(iModel, ids) {
|
|
55
56
|
const categoryKeys = new KeySet();
|
|
56
|
-
ids
|
|
57
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
57
58
|
const el = iModel.elements.tryGetElement(id);
|
|
58
59
|
const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;
|
|
59
60
|
if (category) {
|
|
60
61
|
categoryKeys.add({ className: category.classFullName, id: category.id });
|
|
61
62
|
}
|
|
62
|
-
})
|
|
63
|
+
});
|
|
63
64
|
return categoryKeys;
|
|
64
65
|
}
|
|
65
|
-
static computeModelSelection(iModel, ids) {
|
|
66
|
+
static async computeModelSelection(iModel, ids) {
|
|
66
67
|
const modelKeys = new KeySet();
|
|
67
|
-
ids
|
|
68
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
68
69
|
const el = iModel.elements.tryGetElementProps(id);
|
|
69
70
|
const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;
|
|
70
71
|
if (model) {
|
|
71
72
|
modelKeys.add({ className: model.classFullName, id: model.id });
|
|
72
73
|
}
|
|
73
|
-
})
|
|
74
|
+
});
|
|
74
75
|
return modelKeys;
|
|
75
76
|
}
|
|
76
|
-
static getRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
77
|
-
const query = `
|
|
78
|
-
SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
|
|
79
|
-
FROM bis.Element e
|
|
80
|
-
LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
|
|
81
|
-
LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
|
|
82
|
-
LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
|
|
83
|
-
INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
|
|
84
|
-
INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return { className: row.funcElClassName.replace(".", ":"), id: row.funcElId };
|
|
93
|
-
}
|
|
77
|
+
static async getRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
78
|
+
const query = `
|
|
79
|
+
SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
|
|
80
|
+
FROM bis.Element e
|
|
81
|
+
LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
|
|
82
|
+
LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
|
|
83
|
+
LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
|
|
84
|
+
INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
|
|
85
|
+
INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
|
|
86
|
+
WHERE e.ECInstanceId = ?
|
|
87
|
+
`;
|
|
88
|
+
const bindings = new QueryBinder();
|
|
89
|
+
bindings.bindId(1, graphicalElementId);
|
|
90
|
+
for await (const row of imodel.createQueryReader(query, bindings)) {
|
|
91
|
+
if (row.funcElClassName && row.funcElId) {
|
|
92
|
+
return { className: row.funcElClassName.replace(".", ":"), id: row.funcElId };
|
|
94
93
|
}
|
|
95
|
-
|
|
96
|
-
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
97
96
|
}
|
|
98
|
-
static findFirstRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
97
|
+
static async findFirstRelatedFunctionalElementKey(imodel, graphicalElementId) {
|
|
99
98
|
let currId = graphicalElementId;
|
|
100
99
|
while (currId) {
|
|
101
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(imodel, currId);
|
|
100
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(imodel, currId);
|
|
102
101
|
if (relatedFunctionalKey) {
|
|
103
102
|
return relatedFunctionalKey;
|
|
104
103
|
}
|
|
@@ -106,28 +105,30 @@ export class SelectionScopesHelper {
|
|
|
106
105
|
}
|
|
107
106
|
return undefined;
|
|
108
107
|
}
|
|
109
|
-
static elementClassDerivesFrom(imodel, elementId, baseClassFullName) {
|
|
110
|
-
const query = `
|
|
111
|
-
SELECT 1
|
|
112
|
-
FROM bis.Element e
|
|
113
|
-
INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
|
|
114
|
-
INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
115
|
-
INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
116
|
-
WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
108
|
+
static async elementClassDerivesFrom(imodel, elementId, baseClassFullName) {
|
|
109
|
+
const query = `
|
|
110
|
+
SELECT 1
|
|
111
|
+
FROM bis.Element e
|
|
112
|
+
INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
|
|
113
|
+
INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
|
|
114
|
+
INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
|
|
115
|
+
WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
|
|
116
|
+
`;
|
|
117
|
+
const bindings = new QueryBinder();
|
|
118
|
+
bindings.bindId(1, elementId);
|
|
119
|
+
bindings.bindString(2, baseClassFullName);
|
|
120
|
+
for await (const _ of imodel.createQueryReader(query, bindings)) {
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
123
124
|
}
|
|
124
|
-
static computeFunctionalElementSelection(iModel, ids) {
|
|
125
|
+
static async computeFunctionalElementSelection(iModel, ids) {
|
|
125
126
|
const keys = new KeySet();
|
|
126
|
-
ids
|
|
127
|
-
const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
127
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
128
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
128
129
|
if (!is3d) {
|
|
129
130
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
130
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
131
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
131
132
|
if (firstFunctionalKey) {
|
|
132
133
|
keys.add(firstFunctionalKey);
|
|
133
134
|
return;
|
|
@@ -136,23 +137,23 @@ export class SelectionScopesHelper {
|
|
|
136
137
|
let keyToAdd;
|
|
137
138
|
if (is3d) {
|
|
138
139
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
139
|
-
keyToAdd = this.getRelatedFunctionalElementKey(iModel, id);
|
|
140
|
+
keyToAdd = await this.getRelatedFunctionalElementKey(iModel, id);
|
|
140
141
|
}
|
|
141
142
|
if (!keyToAdd) {
|
|
142
143
|
keyToAdd = getElementKey(iModel, id);
|
|
143
144
|
}
|
|
144
145
|
keyToAdd && keys.add(keyToAdd);
|
|
145
|
-
})
|
|
146
|
+
});
|
|
146
147
|
return keys;
|
|
147
148
|
}
|
|
148
|
-
static computeFunctionalAssemblySelection(iModel, ids) {
|
|
149
|
+
static async computeFunctionalAssemblySelection(iModel, ids) {
|
|
149
150
|
const keys = new KeySet();
|
|
150
|
-
ids
|
|
151
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
151
152
|
let idToGetAssemblyFor = id;
|
|
152
|
-
const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
153
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
153
154
|
if (!is3d) {
|
|
154
155
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
155
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
156
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
156
157
|
if (firstFunctionalKey) {
|
|
157
158
|
idToGetAssemblyFor = firstFunctionalKey.id;
|
|
158
159
|
}
|
|
@@ -162,23 +163,23 @@ export class SelectionScopesHelper {
|
|
|
162
163
|
let keyToAdd = assemblyKey;
|
|
163
164
|
if (is3d && keyToAdd) {
|
|
164
165
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
165
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
166
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
166
167
|
if (relatedFunctionalKey) {
|
|
167
168
|
keyToAdd = relatedFunctionalKey;
|
|
168
169
|
}
|
|
169
170
|
}
|
|
170
171
|
keyToAdd && keys.add(keyToAdd);
|
|
171
|
-
})
|
|
172
|
+
});
|
|
172
173
|
return keys;
|
|
173
174
|
}
|
|
174
|
-
static computeFunctionalTopAssemblySelection(iModel, ids) {
|
|
175
|
+
static async computeFunctionalTopAssemblySelection(iModel, ids) {
|
|
175
176
|
const keys = new KeySet();
|
|
176
|
-
ids
|
|
177
|
+
await forEachNonTransientId(ids, async (id) => {
|
|
177
178
|
let idToGetAssemblyFor = id;
|
|
178
|
-
const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
179
|
+
const is3d = await this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
|
|
179
180
|
if (!is3d) {
|
|
180
181
|
// if the input is not a 3d element, we try to find the first related functional element
|
|
181
|
-
const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
182
|
+
const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);
|
|
182
183
|
if (firstFunctionalKey) {
|
|
183
184
|
idToGetAssemblyFor = firstFunctionalKey.id;
|
|
184
185
|
}
|
|
@@ -188,13 +189,13 @@ export class SelectionScopesHelper {
|
|
|
188
189
|
let keyToAdd = topAssemblyKey;
|
|
189
190
|
if (is3d && keyToAdd) {
|
|
190
191
|
// if we're computing scope for a 3d element, try to switch to its related functional element
|
|
191
|
-
const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
192
|
+
const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);
|
|
192
193
|
if (relatedFunctionalKey) {
|
|
193
194
|
keyToAdd = relatedFunctionalKey;
|
|
194
195
|
}
|
|
195
196
|
}
|
|
196
197
|
keyToAdd && keys.add(keyToAdd);
|
|
197
|
-
})
|
|
198
|
+
});
|
|
198
199
|
return keys;
|
|
199
200
|
}
|
|
200
201
|
static async computeSelection({ imodel, scope, elementIds }) {
|
|
@@ -220,11 +221,7 @@ export class SelectionScopesHelper {
|
|
|
220
221
|
throw new PresentationError(PresentationStatus.InvalidArgument, "scopeId");
|
|
221
222
|
}
|
|
222
223
|
}
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
callback(id);
|
|
227
|
-
}
|
|
228
|
-
};
|
|
229
|
-
};
|
|
224
|
+
async function forEachNonTransientId(ids, callback) {
|
|
225
|
+
await Promise.all(ids.filter((id) => !Id64.isTransient(id)).map(callback));
|
|
226
|
+
}
|
|
230
227
|
//# sourceMappingURL=SelectionScopesHelper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.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/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module Core\n */\n\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n ComputeSelectionRequestOptions,\n ElementSelectionScopeProps,\n InstanceKey,\n KeySet,\n PresentationError,\n PresentationStatus,\n SelectionScope,\n} from \"@itwin/presentation-common\";\nimport { getElementKey } from \"./Utils.js\";\n\n/**\n * Contains helper methods for computing selection scopes. Will get removed\n * once rules-driven scopes are implemented.\n *\n * @internal\n */\nexport class SelectionScopesHelper {\n /* c8 ignore next */\n private constructor() {}\n\n public static getSelectionScopes(): SelectionScope[] {\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\n id: scopeId,\n label,\n description,\n });\n return [\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\n ];\n }\n\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\n let currId = elementId;\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n while (parentId && ancestorLevel !== 0) {\n currId = parentId;\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n --ancestorLevel;\n }\n return getElementKey(iModel, currId);\n }\n\n private static computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\n const parentKeys = new KeySet();\n elementIds.forEach(\n skipTransients((id) => {\n const key = this.getElementKey(iModel, id, ancestorLevel);\n key && parentKeys.add(key);\n }),\n );\n return parentKeys;\n }\n\n private static computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\n const categoryKeys = new KeySet();\n ids.forEach(\n skipTransients((id) => {\n const el = iModel.elements.tryGetElement<GeometricElement>(id);\n const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;\n if (category) {\n categoryKeys.add({ className: category.classFullName, id: category.id! });\n }\n }),\n );\n return categoryKeys;\n }\n\n private static computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\n const modelKeys = new KeySet();\n ids.forEach(\n skipTransients((id) => {\n const el = iModel.elements.tryGetElementProps(id);\n const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;\n if (model) {\n modelKeys.add({ className: model.classFullName, id: model.id! });\n }\n }),\n );\n return modelKeys;\n }\n\n private static getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): InstanceKey | undefined {\n const query = `\n SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId\n FROM bis.Element e\n LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId\n LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId\n LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)\n INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId\n INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id\n WHERE e.ECInstanceId = ?\n `;\n return imodel.withPreparedStatement(query, (stmt): InstanceKey | undefined => {\n stmt.bindId(1, graphicalElementId);\n if (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const row = stmt.getRow();\n if (row.funcElClassName && row.funcElId) {\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\n }\n }\n return undefined;\n });\n }\n\n private static findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): InstanceKey | undefined {\n let currId: Id64String | undefined = graphicalElementId;\n while (currId) {\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(imodel, currId);\n if (relatedFunctionalKey) {\n return relatedFunctionalKey;\n }\n currId = imodel.elements.tryGetElementProps(currId)?.parent?.id;\n }\n return undefined;\n }\n\n private static elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): boolean {\n const query = `\n SELECT 1\n FROM bis.Element e\n INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId\n INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\n INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\n WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?\n `;\n return imodel.withPreparedStatement(query, (stmt): boolean => {\n stmt.bindId(1, elementId);\n stmt.bindString(2, baseClassFullName);\n return DbResult.BE_SQLITE_ROW === stmt.step();\n });\n }\n\n private static computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n ids.forEach(\n skipTransients((id): void => {\n const is3d = this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n keys.add(firstFunctionalKey);\n return;\n }\n }\n let keyToAdd: InstanceKey | undefined;\n if (is3d) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n keyToAdd = this.getRelatedFunctionalElementKey(iModel, id);\n }\n if (!keyToAdd) {\n keyToAdd = getElementKey(iModel, id);\n }\n keyToAdd && keys.add(keyToAdd);\n }),\n );\n return keys;\n }\n\n private static computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n ids.forEach(\n skipTransients((id): void => {\n let idToGetAssemblyFor = id;\n const is3d = this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n idToGetAssemblyFor = firstFunctionalKey.id;\n }\n }\n // find the assembly of either the given element or the functional element\n const assemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, 1);\n let keyToAdd = assemblyKey;\n if (is3d && keyToAdd) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n }),\n );\n return keys;\n }\n\n private static computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n ids.forEach(\n skipTransients((id): void => {\n let idToGetAssemblyFor = id;\n const is3d = this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\n if (!is3d) {\n // if the input is not a 3d element, we try to find the first related functional element\n const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);\n if (firstFunctionalKey) {\n idToGetAssemblyFor = firstFunctionalKey.id;\n }\n }\n // find the top assembly of either the given element or the functional element\n const topAssemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, Number.MAX_SAFE_INTEGER);\n let keyToAdd = topAssemblyKey;\n if (is3d && keyToAdd) {\n // if we're computing scope for a 3d element, try to switch to its related functional element\n const relatedFunctionalKey = this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n }),\n );\n return keys;\n }\n\n public static async computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet> {\n switch (scope.id) {\n case \"element\":\n return this.computeElementSelection(imodel, elementIds, (scope as ElementSelectionScopeProps).ancestorLevel ?? 0);\n case \"assembly\":\n return this.computeElementSelection(imodel, elementIds, 1);\n case \"top-assembly\":\n return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);\n case \"category\":\n return this.computeCategorySelection(imodel, elementIds);\n case \"model\":\n return this.computeModelSelection(imodel, elementIds);\n case \"functional\":\n case \"functional-element\":\n return this.computeFunctionalElementSelection(imodel, elementIds);\n case \"functional-assembly\":\n return this.computeFunctionalAssemblySelection(imodel, elementIds);\n case \"functional-top-assembly\":\n return this.computeFunctionalTopAssemblySelection(imodel, elementIds);\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\n }\n}\n\nconst skipTransients = (callback: (id: Id64String) => void) => {\n return (id: Id64String) => {\n if (!Id64.isTransient(id)) {\n callback(id);\n }\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.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\n/* eslint-disable @typescript-eslint/no-deprecated */\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { QueryBinder } from \"@itwin/core-common\";\r\nimport {\r\n ComputeSelectionRequestOptions,\r\n ElementSelectionScopeProps,\r\n InstanceKey,\r\n KeySet,\r\n PresentationError,\r\n PresentationStatus,\r\n SelectionScope,\r\n} from \"@itwin/presentation-common\";\r\nimport { getElementKey } from \"./Utils.js\";\r\n\r\n/**\r\n * Contains helper methods for computing selection scopes. Will get removed\r\n * once rules-driven scopes are implemented.\r\n *\r\n * @internal\r\n */\r\nexport class SelectionScopesHelper {\r\n /* c8 ignore next */\r\n private constructor() { }\r\n\r\n public static getSelectionScopes(): SelectionScope[] {\r\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\r\n id: scopeId,\r\n label,\r\n description,\r\n });\r\n return [\r\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\r\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\r\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\r\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\r\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\r\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\r\n ];\r\n }\r\n\r\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\r\n let currId = elementId;\r\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n while (parentId && ancestorLevel !== 0) {\r\n currId = parentId;\r\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n --ancestorLevel;\r\n }\r\n return getElementKey(iModel, currId);\r\n }\r\n\r\n private static async computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\r\n const parentKeys = new KeySet();\r\n await forEachNonTransientId(elementIds, async (id) => {\r\n const key = this.getElementKey(iModel, id, ancestorLevel);\r\n key && parentKeys.add(key);\r\n });\r\n return parentKeys;\r\n }\r\n\r\n private static async computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const categoryKeys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const el = iModel.elements.tryGetElement<GeometricElement>(id);\r\n const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;\r\n if (category) {\r\n categoryKeys.add({ className: category.classFullName, id: category.id! });\r\n }\r\n });\r\n return categoryKeys;\r\n }\r\n\r\n private static async computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const modelKeys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const el = iModel.elements.tryGetElementProps(id);\r\n const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;\r\n if (model) {\r\n modelKeys.add({ className: model.classFullName, id: model.id! });\r\n }\r\n });\r\n return modelKeys;\r\n }\r\n\r\n private static async getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\r\n const query = `\r\n SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId\r\n FROM bis.Element e\r\n LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)\r\n INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId\r\n INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id\r\n WHERE e.ECInstanceId = ?\r\n `;\r\n\r\n const bindings = new QueryBinder();\r\n bindings.bindId(1, graphicalElementId);\r\n\r\n for await (const row of imodel.createQueryReader(query, bindings)) {\r\n if (row.funcElClassName && row.funcElId) {\r\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private static async findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\r\n let currId: Id64String | undefined = graphicalElementId;\r\n while (currId) {\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(imodel, currId);\r\n if (relatedFunctionalKey) {\r\n return relatedFunctionalKey;\r\n }\r\n currId = imodel.elements.tryGetElementProps(currId)?.parent?.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private static async elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): Promise<boolean> {\r\n const query = `\r\n SELECT 1\r\n FROM bis.Element e\r\n INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId\r\n INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\r\n INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\r\n WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?\r\n `;\r\n\r\n const bindings = new QueryBinder();\r\n bindings.bindId(1, elementId);\r\n bindings.bindString(2, baseClassFullName);\r\n\r\n for await (const _ of imodel.createQueryReader(query, bindings)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private static async computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n keys.add(firstFunctionalKey);\r\n return;\r\n }\r\n }\r\n let keyToAdd: InstanceKey | undefined;\r\n if (is3d) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n keyToAdd = await this.getRelatedFunctionalElementKey(iModel, id);\r\n }\r\n if (!keyToAdd) {\r\n keyToAdd = getElementKey(iModel, id);\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n private static async computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the assembly of either the given element or the functional element\r\n const assemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, 1);\r\n let keyToAdd = assemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n private static async computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the top assembly of either the given element or the functional element\r\n const topAssemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, Number.MAX_SAFE_INTEGER);\r\n let keyToAdd = topAssemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n public static async computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet> {\r\n switch (scope.id) {\r\n case \"element\":\r\n return this.computeElementSelection(imodel, elementIds, (scope as ElementSelectionScopeProps).ancestorLevel ?? 0);\r\n case \"assembly\":\r\n return this.computeElementSelection(imodel, elementIds, 1);\r\n case \"top-assembly\":\r\n return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);\r\n case \"category\":\r\n return this.computeCategorySelection(imodel, elementIds);\r\n case \"model\":\r\n return this.computeModelSelection(imodel, elementIds);\r\n case \"functional\":\r\n case \"functional-element\":\r\n return this.computeFunctionalElementSelection(imodel, elementIds);\r\n case \"functional-assembly\":\r\n return this.computeFunctionalAssemblySelection(imodel, elementIds);\r\n case \"functional-top-assembly\":\r\n return this.computeFunctionalTopAssemblySelection(imodel, elementIds);\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\r\n }\r\n}\r\n\r\nasync function forEachNonTransientId(ids: Id64Array, callback: (id: Id64String) => Promise<void>): Promise<void> {\r\n await Promise.all(ids.filter((id) => !Id64.isTransient(id)).map(callback));\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemporaryStorage.js","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.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/** @packageDocumentation\n * @module Core\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\n\n/**\n * Configuration properties for [[TemporaryStorage]].\n * @internal\n */\nexport interface TemporaryStorageProps<T> {\n /** A method that's called for every value before it's removed from storage */\n cleanupHandler?: (id: string, value: T, reason: \"timeout\" | \"dispose\" | \"request\") => void;\n\n onDisposedSingle?: (id: string) => void;\n onDisposedAll?: () => void;\n\n /**\n * An interval at which the storage attempts to clean up its values.\n * When `0` or `undefined` is specified, values are not cleaned up\n * automatically and cleanup has to be initiated manually by calling\n * [[TemporaryStorage.disposeOutdatedValues]].\n */\n cleanupInterval?: number;\n\n /**\n * Shortest period of time which the value should be kept in storage\n * unused before it's cleaned up.\n *\n * `undefined` means the values may be kept unused in the storage indefinitely.\n * `0` means the values are removed from the storage on every cleanup (either manual\n * call to [[TemporaryStorage.disposeOutdatedValues]] or scheduled (controlled\n * by [[cleanupInterval]])).\n */\n unusedValueLifetime?: number;\n\n /**\n * The maximum period of time which the value should be kept in storage\n * before it's cleaned up. The time is measured from the moment the value is added\n * to the storage.\n *\n * `undefined` means the values may be kept indefinitely. `0` means they're removed\n * up on every cleanup (either manual call to [[TemporaryStorage.disposeOutdatedValues]]\n * or scheduled (controlled by [[cleanupInterval]])).\n */\n maxValueLifetime?: number;\n}\n\n/** Value with know last used time */\ninterface TemporaryValue<T> {\n created: Date;\n lastUsed: Date;\n value: T;\n}\n\n/**\n * Storage for values that get removed from it after being unused (not-requested\n * for a specified amount of time).\n *\n * @internal\n */\nexport class TemporaryStorage<T> implements Disposable {\n private _timer?: NodeJS.Timeout;\n protected _values: Map<string, TemporaryValue<T>>;\n public readonly props: TemporaryStorageProps<T>;\n\n /**\n * Constructor. Creates the storage using supplied params.\n */\n constructor(props: TemporaryStorageProps<T>) {\n this.props = props;\n this._values = new Map<string, TemporaryValue<T>>();\n if (this.props.cleanupInterval) {\n this._timer = setInterval(this.disposeOutdatedValues, this.props.cleanupInterval);\n }\n }\n\n /**\n * Destructor. Must be called to clean up the stored values\n * and other resources\n */\n public [Symbol.dispose]() {\n if (this._timer) {\n clearInterval(this._timer);\n }\n\n if (this.props.cleanupHandler) {\n this._values.forEach((v, id) => {\n this.props.cleanupHandler!(id, v.value, \"dispose\");\n });\n }\n this._values.clear();\n this.props.onDisposedAll && this.props.onDisposedAll();\n }\n\n /**\n * Cleans up values that are currently outdated (based\n * on their max and unused value lifetimes specified through [[Props]]).\n */\n public disposeOutdatedValues = () => {\n const now = new Date().getTime();\n const valuesToDispose: string[] = [];\n for (const [key, entry] of this._values.entries()) {\n if (this.props.maxValueLifetime !== undefined) {\n if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {\n valuesToDispose.push(key);\n continue;\n }\n }\n if (this.props.unusedValueLifetime !== undefined) {\n if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {\n valuesToDispose.push(key);\n continue;\n }\n }\n }\n for (const id of valuesToDispose) {\n this.deleteExistingEntry(id, true);\n }\n };\n\n private deleteExistingEntry(id: string, isTimeout: boolean) {\n assert(this._values.has(id));\n this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id)!.value, isTimeout ? \"timeout\" : \"request\");\n this._values.delete(id);\n this.props.onDisposedSingle && this.props.onDisposedSingle(id);\n }\n\n /**\n * Get a value from the storage.\n *\n * **Note:** requesting a value with this method updates it's last used time.\n */\n public getValue(id: string): T | undefined {\n if (this._values.has(id)) {\n const v = this._values.get(id)!;\n v.lastUsed = new Date();\n return v.value;\n }\n return undefined;\n }\n\n public notifyValueUsed(id: string) {\n const entry = this._values.get(id);\n if (entry) {\n entry.lastUsed = new Date();\n }\n }\n\n /**\n * Adds a value into the storage.\n * @throws An error when trying to add a value with ID that's already stored in the storage.\n */\n public addValue(id: string, value: T) {\n if (this._values.has(id)) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `A value with given ID \"${id}\" already exists in this storage.`);\n }\n this._values.set(id, { value, created: new Date(), lastUsed: new Date() });\n }\n\n /** Deletes a value with given id. */\n public deleteValue(id: string) {\n if (this._values.has(id)) {\n this.deleteExistingEntry(id, false);\n }\n }\n\n /**\n * Get all values currently in this storage.\n *\n * **Note:** requesting values with this method **doesn't**\n * update their last used times.\n */\n public get values(): T[] {\n const values = new Array<T>();\n for (const v of this._values.values()) {\n values.push(v.value);\n }\n return values;\n }\n}\n\n/**\n * Configuration properties for [[FactoryBasedTemporaryStorage]].\n * @internal\n */\nexport interface FactoryBasedTemporaryStorageProps<T> extends TemporaryStorageProps<T> {\n /** A factory method that creates a stored value given it's identifier */\n factory: (id: string, onValueUsed: () => void) => T;\n}\n\n/**\n * Storage for values that get removed from it after being unused (not-requested\n * for a specified amount of time).\n *\n * @internal\n */\nexport class FactoryBasedTemporaryStorage<T> extends TemporaryStorage<T> {\n public override readonly props: FactoryBasedTemporaryStorageProps<T>;\n\n /**\n * Constructor. Creates the storage using supplied params.\n */\n constructor(props: FactoryBasedTemporaryStorageProps<T>) {\n super(props);\n this.props = props;\n }\n\n /**\n * Get a value from the storage. If the value with the specified id\n * doesn't exist, it gets created.\n *\n * **Note:** requesting a value with this method updates it's last used time.\n */\n public override getValue(id: string): T {\n const existingValue = super.getValue(id);\n if (existingValue) {\n return existingValue;\n }\n\n const value = this.props.factory(id, () => this.notifyValueUsed(id));\n this.addValue(id, value);\n return value;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TemporaryStorage.js","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.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\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Configuration properties for [[TemporaryStorage]].\r\n * @internal\r\n */\r\nexport interface TemporaryStorageProps<T> {\r\n /** A method that's called for every value before it's removed from storage */\r\n cleanupHandler?: (id: string, value: T, reason: \"timeout\" | \"dispose\" | \"request\") => void;\r\n\r\n onDisposedSingle?: (id: string) => void;\r\n onDisposedAll?: () => void;\r\n\r\n /**\r\n * An interval at which the storage attempts to clean up its values.\r\n * When `0` or `undefined` is specified, values are not cleaned up\r\n * automatically and cleanup has to be initiated manually by calling\r\n * [[TemporaryStorage.disposeOutdatedValues]].\r\n */\r\n cleanupInterval?: number;\r\n\r\n /**\r\n * Shortest period of time which the value should be kept in storage\r\n * unused before it's cleaned up.\r\n *\r\n * `undefined` means the values may be kept unused in the storage indefinitely.\r\n * `0` means the values are removed from the storage on every cleanup (either manual\r\n * call to [[TemporaryStorage.disposeOutdatedValues]] or scheduled (controlled\r\n * by [[cleanupInterval]])).\r\n */\r\n unusedValueLifetime?: number;\r\n\r\n /**\r\n * The maximum period of time which the value should be kept in storage\r\n * before it's cleaned up. The time is measured from the moment the value is added\r\n * to the storage.\r\n *\r\n * `undefined` means the values may be kept indefinitely. `0` means they're removed\r\n * up on every cleanup (either manual call to [[TemporaryStorage.disposeOutdatedValues]]\r\n * or scheduled (controlled by [[cleanupInterval]])).\r\n */\r\n maxValueLifetime?: number;\r\n}\r\n\r\n/** Value with know last used time */\r\ninterface TemporaryValue<T> {\r\n created: Date;\r\n lastUsed: Date;\r\n value: T;\r\n}\r\n\r\n/**\r\n * Storage for values that get removed from it after being unused (not-requested\r\n * for a specified amount of time).\r\n *\r\n * @internal\r\n */\r\nexport class TemporaryStorage<T> implements Disposable {\r\n private _timer?: NodeJS.Timeout;\r\n protected _values: Map<string, TemporaryValue<T>>;\r\n public readonly props: TemporaryStorageProps<T>;\r\n\r\n /**\r\n * Constructor. Creates the storage using supplied params.\r\n */\r\n constructor(props: TemporaryStorageProps<T>) {\r\n this.props = props;\r\n this._values = new Map<string, TemporaryValue<T>>();\r\n if (this.props.cleanupInterval) {\r\n this._timer = setInterval(this.disposeOutdatedValues, this.props.cleanupInterval);\r\n }\r\n }\r\n\r\n /**\r\n * Destructor. Must be called to clean up the stored values\r\n * and other resources\r\n */\r\n public [Symbol.dispose]() {\r\n if (this._timer) {\r\n clearInterval(this._timer);\r\n }\r\n\r\n if (this.props.cleanupHandler) {\r\n this._values.forEach((v, id) => {\r\n this.props.cleanupHandler!(id, v.value, \"dispose\");\r\n });\r\n }\r\n this._values.clear();\r\n this.props.onDisposedAll && this.props.onDisposedAll();\r\n }\r\n\r\n /**\r\n * Cleans up values that are currently outdated (based\r\n * on their max and unused value lifetimes specified through [[Props]]).\r\n */\r\n public disposeOutdatedValues = () => {\r\n const now = new Date().getTime();\r\n const valuesToDispose: string[] = [];\r\n for (const [key, entry] of this._values.entries()) {\r\n if (this.props.maxValueLifetime !== undefined) {\r\n if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {\r\n valuesToDispose.push(key);\r\n continue;\r\n }\r\n }\r\n if (this.props.unusedValueLifetime !== undefined) {\r\n if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {\r\n valuesToDispose.push(key);\r\n continue;\r\n }\r\n }\r\n }\r\n for (const id of valuesToDispose) {\r\n this.deleteExistingEntry(id, true);\r\n }\r\n };\r\n\r\n private deleteExistingEntry(id: string, isTimeout: boolean) {\r\n assert(this._values.has(id));\r\n this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id)!.value, isTimeout ? \"timeout\" : \"request\");\r\n this._values.delete(id);\r\n this.props.onDisposedSingle && this.props.onDisposedSingle(id);\r\n }\r\n\r\n /**\r\n * Get a value from the storage.\r\n *\r\n * **Note:** requesting a value with this method updates it's last used time.\r\n */\r\n public getValue(id: string): T | undefined {\r\n if (this._values.has(id)) {\r\n const v = this._values.get(id)!;\r\n v.lastUsed = new Date();\r\n return v.value;\r\n }\r\n return undefined;\r\n }\r\n\r\n public notifyValueUsed(id: string) {\r\n const entry = this._values.get(id);\r\n if (entry) {\r\n entry.lastUsed = new Date();\r\n }\r\n }\r\n\r\n /**\r\n * Adds a value into the storage.\r\n * @throws An error when trying to add a value with ID that's already stored in the storage.\r\n */\r\n public addValue(id: string, value: T) {\r\n if (this._values.has(id)) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `A value with given ID \"${id}\" already exists in this storage.`);\r\n }\r\n this._values.set(id, { value, created: new Date(), lastUsed: new Date() });\r\n }\r\n\r\n /** Deletes a value with given id. */\r\n public deleteValue(id: string) {\r\n if (this._values.has(id)) {\r\n this.deleteExistingEntry(id, false);\r\n }\r\n }\r\n\r\n /**\r\n * Get all values currently in this storage.\r\n *\r\n * **Note:** requesting values with this method **doesn't**\r\n * update their last used times.\r\n */\r\n public get values(): T[] {\r\n const values = new Array<T>();\r\n for (const v of this._values.values()) {\r\n values.push(v.value);\r\n }\r\n return values;\r\n }\r\n}\r\n\r\n/**\r\n * Configuration properties for [[FactoryBasedTemporaryStorage]].\r\n * @internal\r\n */\r\nexport interface FactoryBasedTemporaryStorageProps<T> extends TemporaryStorageProps<T> {\r\n /** A factory method that creates a stored value given it's identifier */\r\n factory: (id: string, onValueUsed: () => void) => T;\r\n}\r\n\r\n/**\r\n * Storage for values that get removed from it after being unused (not-requested\r\n * for a specified amount of time).\r\n *\r\n * @internal\r\n */\r\nexport class FactoryBasedTemporaryStorage<T> extends TemporaryStorage<T> {\r\n public override readonly props: FactoryBasedTemporaryStorageProps<T>;\r\n\r\n /**\r\n * Constructor. Creates the storage using supplied params.\r\n */\r\n constructor(props: FactoryBasedTemporaryStorageProps<T>) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n /**\r\n * Get a value from the storage. If the value with the specified id\r\n * doesn't exist, it gets created.\r\n *\r\n * **Note:** requesting a value with this method updates it's last used time.\r\n */\r\n public override getValue(id: string): T {\r\n const existingValue = super.getValue(id);\r\n if (existingValue) {\r\n return existingValue;\r\n }\r\n\r\n const value = this.props.factory(id, () => this.notifyValueUsed(id));\r\n this.addValue(id, value);\r\n return value;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"AAKA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EACL,WAAW,EAEX,kBAAkB,EAClB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAQpC,gBAAgB;AAChB,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,UAc/C;AAED,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAGvF;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,UAQhD;AAED;;;GAGG;AACH,MAAM,MAAM,yBAAyB,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE/G;;;GAGG;AACH,MAAM,WAAW,yBAAyB,CAAC,QAAQ,GAAG,GAAG,CAAE,SAAQ,kBAAkB;IACnF;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,QAAQ,CAAC;IAExC;;;;OAIG;IACH,OAAO,EAAE,yBAAyB,CAAC,QAAQ,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,WAAW,CAAC,EAAE,yBAAyB,CAAC;CACzC;AAED,gBAAgB;AAChB,wBAAgB,yBAAyB,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,yBAAyB,GAAG,SAAS,CAAC,GAAG,kBAAkB,GAAG,SAAS,CAuBlI;AAED,gBAAgB;AAChB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,yBAAyB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,QAGrI"}
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
* @module Core
|
|
8
8
|
*/
|
|
9
9
|
import { parse as parseVersion } from "semver";
|
|
10
|
-
import { DbResult } from "@itwin/core-bentley";
|
|
11
10
|
import { DiagnosticsLogEntry, } from "@itwin/presentation-common";
|
|
12
11
|
import { combineDiagnosticsSeverities, compareDiagnosticsSeverities, } from "@itwin/presentation-common/internal";
|
|
13
12
|
// @ts-ignore TS complains about `with` in CJS builds, but not ESM
|
|
@@ -30,18 +29,8 @@ export function getLocalizedStringEN(key) {
|
|
|
30
29
|
}
|
|
31
30
|
/** @internal */
|
|
32
31
|
export function getElementKey(imodel, id) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
imodel.withPreparedStatement(query, (stmt) => {
|
|
36
|
-
try {
|
|
37
|
-
stmt.bindId(1, id);
|
|
38
|
-
if (stmt.step() === DbResult.BE_SQLITE_ROW) {
|
|
39
|
-
key = { className: stmt.getValue(0).getClassNameForClassId().replace(".", ":"), id };
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
catch { }
|
|
43
|
-
});
|
|
44
|
-
return key;
|
|
32
|
+
const className = imodel.elements.tryGetElementProps(id)?.classFullName;
|
|
33
|
+
return className ? { className, id } : undefined;
|
|
45
34
|
}
|
|
46
35
|
/** @internal */
|
|
47
36
|
export function normalizeVersion(version) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.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/* eslint-disable @typescript-eslint/ban-ts-comment */\n/** @packageDocumentation\n * @module Core\n */\n\nimport { parse as parseVersion } from \"semver\";\nimport { IModelDb } from \"@itwin/core-backend\";\nimport { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport {\n Diagnostics,\n DiagnosticsLogEntry,\n DiagnosticsOptions,\n InstanceKey,\n} from \"@itwin/presentation-common\";\nimport {\n combineDiagnosticsSeverities,\n compareDiagnosticsSeverities,\n} from \"@itwin/presentation-common/internal\";\n// @ts-ignore TS complains about `with` in CJS builds, but not ESM\nimport presentationStrings from \"@itwin/presentation-common/locales/en/Presentation.json\" with { type: \"json\" };\n\n/** @internal */\nexport function getLocalizedStringEN(key: string) {\n let result: object | string = presentationStrings;\n const [namespace, identifier] = key.split(\":\", 2);\n if (namespace !== \"Presentation\") {\n return key;\n }\n const keySteps = identifier.split(\".\");\n for (const keyStep of keySteps) {\n if (typeof result !== \"object\" || keyStep in result === false) {\n return key;\n }\n result = result[keyStep as keyof typeof result];\n }\n return typeof result === \"string\" ? result : key;\n}\n\n/** @internal */\nexport function getElementKey(imodel: IModelDb, id: Id64String): InstanceKey | undefined {\n let key: InstanceKey | undefined;\n const query = `SELECT ECClassId FROM BisCore.Element e WHERE ECInstanceId = ?`;\n imodel.withPreparedStatement(query, (stmt) => {\n try {\n stmt.bindId(1, id);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n key = { className: stmt.getValue(0).getClassNameForClassId().replace(\".\", \":\"), id };\n }\n } catch {}\n });\n return key;\n}\n\n/** @internal */\nexport function normalizeVersion(version?: string) {\n if (version) {\n const parsedVersion = parseVersion(version, true);\n if (parsedVersion) {\n return `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\n }\n }\n return \"0.0.0\";\n}\n\n/**\n * A function that received request diagnostics and, optionally, request context.\n * @public\n */\nexport type BackendDiagnosticsHandler<TContext = any> = (logs: Diagnostics, requestContext?: TContext) => void;\n\n/**\n * Data structure for backend diagnostics options.\n * @public\n */\nexport interface BackendDiagnosticsOptions<TContext = any> extends DiagnosticsOptions {\n /**\n * An optional function to supply request context that'll be passed to [[handler]] when\n * it's called after the request is fulfilled.\n */\n requestContextSupplier?: () => TContext;\n\n /**\n * Request diagnostics handler function that is called after the request is fulfilled. The handler\n * receives request diagnostics as the first argument and, optionally, request context as the\n * second (see [[requestContextSupplier]]).\n */\n handler: BackendDiagnosticsHandler<TContext>;\n}\n\n/**\n * Data structure which contains backend diagnostics options.\n * @public\n */\nexport interface BackendDiagnosticsAttribute {\n /**\n * Backend diagnostics options.\n * @public\n */\n diagnostics?: BackendDiagnosticsOptions;\n}\n\n/** @internal */\nexport function combineDiagnosticsOptions(...options: Array<BackendDiagnosticsOptions | undefined>): DiagnosticsOptions | undefined {\n const combinedOptions: DiagnosticsOptions = {};\n options.forEach((d) => {\n if (!d) {\n return;\n }\n if (\n d.perf === true ||\n (typeof d.perf === \"object\" &&\n (!combinedOptions.perf || (typeof combinedOptions.perf === \"object\" && d.perf.minimumDuration < combinedOptions.perf.minimumDuration)))\n ) {\n combinedOptions.perf = d.perf;\n }\n const combinedDev = combineDiagnosticsSeverities(d.dev, combinedOptions.dev);\n if (combinedDev) {\n combinedOptions.dev = combinedDev;\n }\n const combinedEditor = combineDiagnosticsSeverities(d.editor, combinedOptions.editor);\n if (combinedEditor) {\n combinedOptions.editor = combinedEditor;\n }\n });\n return combinedOptions.dev || combinedOptions.editor || combinedOptions.perf ? combinedOptions : undefined;\n}\n\n/** @internal */\nexport function reportDiagnostics<TContext>(diagnostics: Diagnostics, options: BackendDiagnosticsOptions<TContext>, context?: TContext) {\n const stripped = diagnostics.logs ? stripDiagnostics(options, diagnostics.logs) : undefined;\n stripped && options.handler({ logs: stripped }, context);\n}\nfunction stripDiagnostics<TEntry extends DiagnosticsLogEntry>(options: DiagnosticsOptions, diagnostics: TEntry[]) {\n const stripped: TEntry[] = [];\n diagnostics.forEach((entry) => {\n if (DiagnosticsLogEntry.isScope(entry)) {\n const scopeLogs = stripDiagnostics(options, entry.logs ?? []);\n const strippedScope = { ...entry, logs: scopeLogs };\n if (!strippedScope.logs) {\n delete strippedScope.logs;\n }\n if (entry.duration !== undefined && (options.perf === true || (typeof options.perf === \"object\" && entry.duration >= options.perf.minimumDuration))) {\n stripped.push(strippedScope);\n } else if (scopeLogs) {\n delete strippedScope.duration;\n delete strippedScope.scopeCreateTimestamp;\n stripped.push(strippedScope);\n }\n } else {\n const matchesDevSeverity = entry.severity.dev && compareDiagnosticsSeverities(entry.severity.dev, options.dev) >= 0;\n const matchesEditorSeverity = entry.severity.editor && compareDiagnosticsSeverities(entry.severity.editor, options.editor) >= 0;\n if (matchesDevSeverity || matchesEditorSeverity) {\n stripped.push({ ...entry });\n }\n }\n });\n return stripped.length > 0 ? stripped : undefined;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.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\n/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { parse as parseVersion } from \"semver\";\r\nimport { IModelDb } from \"@itwin/core-backend\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Diagnostics,\r\n DiagnosticsLogEntry,\r\n DiagnosticsOptions,\r\n InstanceKey,\r\n} from \"@itwin/presentation-common\";\r\nimport {\r\n combineDiagnosticsSeverities,\r\n compareDiagnosticsSeverities,\r\n} from \"@itwin/presentation-common/internal\";\r\n// @ts-ignore TS complains about `with` in CJS builds, but not ESM\r\nimport presentationStrings from \"@itwin/presentation-common/locales/en/Presentation.json\" with { type: \"json\" };\r\n\r\n/** @internal */\r\nexport function getLocalizedStringEN(key: string) {\r\n let result: object | string = presentationStrings;\r\n const [namespace, identifier] = key.split(\":\", 2);\r\n if (namespace !== \"Presentation\") {\r\n return key;\r\n }\r\n const keySteps = identifier.split(\".\");\r\n for (const keyStep of keySteps) {\r\n if (typeof result !== \"object\" || keyStep in result === false) {\r\n return key;\r\n }\r\n result = result[keyStep as keyof typeof result];\r\n }\r\n return typeof result === \"string\" ? result : key;\r\n}\r\n\r\n/** @internal */\r\nexport function getElementKey(imodel: IModelDb, id: Id64String): InstanceKey | undefined {\r\n const className = imodel.elements.tryGetElementProps(id)?.classFullName;\r\n return className ? { className, id } : undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function normalizeVersion(version?: string) {\r\n if (version) {\r\n const parsedVersion = parseVersion(version, true);\r\n if (parsedVersion) {\r\n return `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\r\n }\r\n }\r\n return \"0.0.0\";\r\n}\r\n\r\n/**\r\n * A function that received request diagnostics and, optionally, request context.\r\n * @public\r\n */\r\nexport type BackendDiagnosticsHandler<TContext = any> = (logs: Diagnostics, requestContext?: TContext) => void;\r\n\r\n/**\r\n * Data structure for backend diagnostics options.\r\n * @public\r\n */\r\nexport interface BackendDiagnosticsOptions<TContext = any> extends DiagnosticsOptions {\r\n /**\r\n * An optional function to supply request context that'll be passed to [[handler]] when\r\n * it's called after the request is fulfilled.\r\n */\r\n requestContextSupplier?: () => TContext;\r\n\r\n /**\r\n * Request diagnostics handler function that is called after the request is fulfilled. The handler\r\n * receives request diagnostics as the first argument and, optionally, request context as the\r\n * second (see [[requestContextSupplier]]).\r\n */\r\n handler: BackendDiagnosticsHandler<TContext>;\r\n}\r\n\r\n/**\r\n * Data structure which contains backend diagnostics options.\r\n * @public\r\n */\r\nexport interface BackendDiagnosticsAttribute {\r\n /**\r\n * Backend diagnostics options.\r\n * @public\r\n */\r\n diagnostics?: BackendDiagnosticsOptions;\r\n}\r\n\r\n/** @internal */\r\nexport function combineDiagnosticsOptions(...options: Array<BackendDiagnosticsOptions | undefined>): DiagnosticsOptions | undefined {\r\n const combinedOptions: DiagnosticsOptions = {};\r\n options.forEach((d) => {\r\n if (!d) {\r\n return;\r\n }\r\n if (\r\n d.perf === true ||\r\n (typeof d.perf === \"object\" &&\r\n (!combinedOptions.perf || (typeof combinedOptions.perf === \"object\" && d.perf.minimumDuration < combinedOptions.perf.minimumDuration)))\r\n ) {\r\n combinedOptions.perf = d.perf;\r\n }\r\n const combinedDev = combineDiagnosticsSeverities(d.dev, combinedOptions.dev);\r\n if (combinedDev) {\r\n combinedOptions.dev = combinedDev;\r\n }\r\n const combinedEditor = combineDiagnosticsSeverities(d.editor, combinedOptions.editor);\r\n if (combinedEditor) {\r\n combinedOptions.editor = combinedEditor;\r\n }\r\n });\r\n return combinedOptions.dev || combinedOptions.editor || combinedOptions.perf ? combinedOptions : undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function reportDiagnostics<TContext>(diagnostics: Diagnostics, options: BackendDiagnosticsOptions<TContext>, context?: TContext) {\r\n const stripped = diagnostics.logs ? stripDiagnostics(options, diagnostics.logs) : undefined;\r\n stripped && options.handler({ logs: stripped }, context);\r\n}\r\nfunction stripDiagnostics<TEntry extends DiagnosticsLogEntry>(options: DiagnosticsOptions, diagnostics: TEntry[]) {\r\n const stripped: TEntry[] = [];\r\n diagnostics.forEach((entry) => {\r\n if (DiagnosticsLogEntry.isScope(entry)) {\r\n const scopeLogs = stripDiagnostics(options, entry.logs ?? []);\r\n const strippedScope = { ...entry, logs: scopeLogs };\r\n if (!strippedScope.logs) {\r\n delete strippedScope.logs;\r\n }\r\n if (entry.duration !== undefined && (options.perf === true || (typeof options.perf === \"object\" && entry.duration >= options.perf.minimumDuration))) {\r\n stripped.push(strippedScope);\r\n } else if (scopeLogs) {\r\n delete strippedScope.duration;\r\n delete strippedScope.scopeCreateTimestamp;\r\n stripped.push(strippedScope);\r\n }\r\n } else {\r\n const matchesDevSeverity = entry.severity.dev && compareDiagnosticsSeverities(entry.severity.dev, options.dev) >= 0;\r\n const matchesEditorSeverity = entry.severity.editor && compareDiagnosticsSeverities(entry.severity.editor, options.editor) >= 0;\r\n if (matchesDevSeverity || matchesEditorSeverity) {\r\n stripped.push({ ...entry });\r\n }\r\n }\r\n });\r\n return stripped.length > 0 ? stripped : undefined;\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PresentationRulesDomain.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/PresentationRulesDomain.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAC;AAExD,gBAAgB;AAChB,MAAM,OAAO,iBAAkB,SAAQ,MAAM;IACpC,MAAM,KAAc,UAAU;QACnC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,uDAAuD;IAChD,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,OAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,aAAa,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAED,gBAAgB;AAChB,sBAAsB;AACtB,WAAiB,iBAAiB;IAChC,IAAY,QAEX;IAFD,WAAY,QAAQ;QAClB,iDAAqC,CAAA;IACvC,CAAC,EAFW,QAAQ,GAAR,0BAAQ,KAAR,0BAAQ,QAEnB;AACH,CAAC,EAJgB,iBAAiB,KAAjB,iBAAiB,QAIjC","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/** @packageDocumentation\n * @module Core\n */\n\nimport { ClassRegistry, Schema, Schemas } from \"@itwin/core-backend\";\nimport * as RulesetElements from \"./RulesetElements.js\";\n\n/** @internal */\nexport class PresentationRules extends Schema {\n public static override get schemaName(): string {\n return \"PresentationRules\";\n }\n\n /** Registers this schema and it's elements' classes */\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(PresentationRules.schemaName)) {\n Schemas.registerSchema(PresentationRules);\n ClassRegistry.registerModule(RulesetElements, this);\n }\n }\n}\n\n/** @internal */\n/* c8 ignore next 5 */\nexport namespace PresentationRules {\n export enum CodeSpec {\n Ruleset = \"PresentationRules:Ruleset\",\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"PresentationRulesDomain.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/PresentationRulesDomain.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,eAAe,MAAM,sBAAsB,CAAC;AAExD,gBAAgB;AAChB,MAAM,OAAO,iBAAkB,SAAQ,MAAM;IACpC,MAAM,KAAc,UAAU;QACnC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,uDAAuD;IAChD,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,OAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,OAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,aAAa,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAED,gBAAgB;AAChB,sBAAsB;AACtB,WAAiB,iBAAiB;IAChC,IAAY,QAEX;IAFD,WAAY,QAAQ;QAClB,iDAAqC,CAAA;IACvC,CAAC,EAFW,QAAQ,GAAR,0BAAQ,KAAR,0BAAQ,QAEnB;AACH,CAAC,EAJgB,iBAAiB,KAAjB,iBAAiB,QAIjC","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\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { ClassRegistry, Schema, Schemas } from \"@itwin/core-backend\";\r\nimport * as RulesetElements from \"./RulesetElements.js\";\r\n\r\n/** @internal */\r\nexport class PresentationRules extends Schema {\r\n public static override get schemaName(): string {\r\n return \"PresentationRules\";\r\n }\r\n\r\n /** Registers this schema and it's elements' classes */\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(PresentationRules.schemaName)) {\r\n Schemas.registerSchema(PresentationRules);\r\n ClassRegistry.registerModule(RulesetElements, this);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\n/* c8 ignore next 5 */\r\nexport namespace PresentationRules {\r\n export enum CodeSpec {\r\n Ruleset = \"PresentationRules:Ruleset\",\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RulesetElements.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/RulesetElements.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAY,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,gBAAgB;AAChB,MAAM,OAAO,OAAQ,SAAQ,iBAAiB;IAC5C;;OAEG;IACI,MAAM,KAAc,SAAS;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,OAAmB,EAAE,OAA4B;QACnG,IAAI,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,IAAI,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;YACzB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;CACF","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/** @packageDocumentation\n * @module Core\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionElement, IModelDb } from \"@itwin/core-backend\";\nimport { Code } from \"@itwin/core-common\";\nimport { Ruleset as PresentationRuleset } from \"@itwin/presentation-common\";\nimport { normalizeVersion } from \"../Utils.js\";\nimport { PresentationRules } from \"./PresentationRulesDomain.js\";\n\n/** @internal */\nexport class Ruleset extends DefinitionElement {\n /**\n * Name of the `Ruleset` element class.\n */\n public static override get className(): string {\n return \"Ruleset\";\n }\n\n /**\n * Generates a unique code for a ruleset\n * @param iModelDb DB the ruleset is supposed to be inserted into\n * @param modelId ID of a the model this ruleset should be created in\n * @param ruleset The ruleset code is being created for\n */\n public static createRulesetCode(iModelDb: IModelDb, modelId: Id64String, ruleset: PresentationRuleset) {\n let codeValue = ruleset.id;\n if (ruleset.version) {\n codeValue += `@${normalizeVersion(ruleset.version)}`;\n }\n\n return new Code({\n spec: iModelDb.codeSpecs.getByName(PresentationRules.CodeSpec.Ruleset).id,\n scope: modelId.toString(),\n value: codeValue,\n });\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"RulesetElements.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/RulesetElements.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAGH,OAAO,EAAE,iBAAiB,EAAY,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,gBAAgB;AAChB,MAAM,OAAO,OAAQ,SAAQ,iBAAiB;IAC5C;;OAEG;IACI,MAAM,KAAc,SAAS;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,OAAmB,EAAE,OAA4B;QACnG,IAAI,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,IAAI,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,IAAI,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;YACzB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;CACF","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\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { DefinitionElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { Code } from \"@itwin/core-common\";\r\nimport { Ruleset as PresentationRuleset } from \"@itwin/presentation-common\";\r\nimport { normalizeVersion } from \"../Utils.js\";\r\nimport { PresentationRules } from \"./PresentationRulesDomain.js\";\r\n\r\n/** @internal */\r\nexport class Ruleset extends DefinitionElement {\r\n /**\r\n * Name of the `Ruleset` element class.\r\n */\r\n public static override get className(): string {\r\n return \"Ruleset\";\r\n }\r\n\r\n /**\r\n * Generates a unique code for a ruleset\r\n * @param iModelDb DB the ruleset is supposed to be inserted into\r\n * @param modelId ID of a the model this ruleset should be created in\r\n * @param ruleset The ruleset code is being created for\r\n */\r\n public static createRulesetCode(iModelDb: IModelDb, modelId: Id64String, ruleset: PresentationRuleset) {\r\n let codeValue = ruleset.id;\r\n if (ruleset.version) {\r\n codeValue += `@${normalizeVersion(ruleset.version)}`;\r\n }\r\n\r\n return new Code({\r\n spec: iModelDb.codeSpecs.getByName(PresentationRules.CodeSpec.Ruleset).id,\r\n scope: modelId.toString(),\r\n value: codeValue,\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-backend-internal.js","sourceRoot":"","sources":["../../src/presentation-backend-internal.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,yFAAyF;AACzF,qHAAqH;AAErH,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC","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\n// WARNING: This barrel file exports internal APIs only for use by Presentation packages.\n// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.\n\nexport { _presentation_manager_detail } from \"./presentation-backend/InternalSymbols.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"presentation-backend-internal.js","sourceRoot":"","sources":["../../src/presentation-backend-internal.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,yFAAyF;AACzF,qHAAqH;AAErH,OAAO,EAAE,4BAA4B,EAAE,MAAM,2CAA2C,CAAC","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\n\r\n// WARNING: This barrel file exports internal APIs only for use by Presentation packages.\r\n// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.\r\n\r\nexport { _presentation_manager_detail } from \"./presentation-backend/InternalSymbols.js\";\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation-backend.js","sourceRoot":"","sources":["../../src/presentation-backend.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,OAAO,EAAoF,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACxJ,OAAO,EACL,kBAAkB,EAWlB,mBAAmB,GACpB,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAA8C,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAGxH;;;;;GAKG;AACH,OAAO,EAAE,iCAAiC,EAAE,uCAAuC,EAAE,MAAM,iDAAiD,CAAC","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/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used for retrieving presentation data from iModels.\n */\nexport { PresentationProps, MultiManagerPresentationProps, SingleManagerPresentationProps, Presentation } from \"./presentation-backend/Presentation.js\";\nexport {\n HierarchyCacheMode,\n HierarchyCacheConfig,\n MemoryHierarchyCacheConfig,\n DiskHierarchyCacheConfig,\n HybridCacheConfig,\n ContentCacheConfig,\n PresentationManagerCachingConfig,\n UnitSystemFormat,\n MultiElementPropertiesResponse,\n PresentationAssetsRootConfig,\n PresentationManagerProps,\n PresentationManager,\n} from \"./presentation-backend/PresentationManager.js\";\nexport { RulesetManager } from \"./presentation-backend/RulesetManager.js\";\nexport { RulesetVariablesManager } from \"./presentation-backend/RulesetVariablesManager.js\";\nexport { RulesetInsertOptions, RulesetEmbedderProps, RulesetEmbedder } from \"./presentation-backend/RulesetEmbedder.js\";\nexport { BackendDiagnosticsHandler, BackendDiagnosticsOptions, BackendDiagnosticsAttribute } from \"./presentation-backend/Utils.js\";\n\n/**\n * @module Logging\n *\n * @docs-group-description Logging\n * Types related to logging in this package.\n */\nexport { PresentationBackendLoggerCategory, PresentationBackendNativeLoggerCategory } from \"./presentation-backend/BackendLoggerCategory.js\";\n"]}
|
|
1
|
+
{"version":3,"file":"presentation-backend.js","sourceRoot":"","sources":["../../src/presentation-backend.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,OAAO,EAAoF,YAAY,EAAE,MAAM,wCAAwC,CAAC;AACxJ,OAAO,EACL,kBAAkB,EAWlB,mBAAmB,GACpB,MAAM,+CAA+C,CAAC;AAGvD,OAAO,EAA8C,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAGxH;;;;;GAKG;AACH,OAAO,EAAE,iCAAiC,EAAE,uCAAuC,EAAE,MAAM,iDAAiD,CAAC","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\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport { PresentationProps, MultiManagerPresentationProps, SingleManagerPresentationProps, Presentation } from \"./presentation-backend/Presentation.js\";\r\nexport {\r\n HierarchyCacheMode,\r\n HierarchyCacheConfig,\r\n MemoryHierarchyCacheConfig,\r\n DiskHierarchyCacheConfig,\r\n HybridCacheConfig,\r\n ContentCacheConfig,\r\n PresentationManagerCachingConfig,\r\n UnitSystemFormat,\r\n MultiElementPropertiesResponse,\r\n PresentationAssetsRootConfig,\r\n PresentationManagerProps,\r\n PresentationManager,\r\n} from \"./presentation-backend/PresentationManager.js\";\r\nexport { RulesetManager } from \"./presentation-backend/RulesetManager.js\";\r\nexport { RulesetVariablesManager } from \"./presentation-backend/RulesetVariablesManager.js\";\r\nexport { RulesetInsertOptions, RulesetEmbedderProps, RulesetEmbedder } from \"./presentation-backend/RulesetEmbedder.js\";\r\nexport { BackendDiagnosticsHandler, BackendDiagnosticsOptions, BackendDiagnosticsAttribute } from \"./presentation-backend/Utils.js\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport { PresentationBackendLoggerCategory, PresentationBackendNativeLoggerCategory } from \"./presentation-backend/BackendLoggerCategory.js\";\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/presentation-backend",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.1.0-dev.0",
|
|
4
4
|
"description": "Backend of iTwin.js Presentation library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -36,12 +36,12 @@
|
|
|
36
36
|
"./package.json": "./package.json"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
|
-
"@itwin/core-backend": "5.
|
|
40
|
-
"@itwin/core-
|
|
41
|
-
"@itwin/core-
|
|
42
|
-
"@itwin/core-
|
|
43
|
-
"@itwin/
|
|
44
|
-
"@itwin/
|
|
39
|
+
"@itwin/core-backend": "5.1.0-dev.0",
|
|
40
|
+
"@itwin/core-common": "5.1.0-dev.0",
|
|
41
|
+
"@itwin/core-bentley": "5.1.0-dev.0",
|
|
42
|
+
"@itwin/core-quantity": "5.1.0-dev.0",
|
|
43
|
+
"@itwin/ecschema-metadata": "5.1.0-dev.0",
|
|
44
|
+
"@itwin/presentation-common": "5.1.0-dev.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@itwin/eslint-plugin": "5.0.0-dev.1",
|
|
@@ -76,14 +76,14 @@
|
|
|
76
76
|
"sinon-chai": "^3.7.0",
|
|
77
77
|
"typemoq": "^2.1.0",
|
|
78
78
|
"typescript": "~5.6.2",
|
|
79
|
-
"@itwin/build-tools": "5.
|
|
80
|
-
"@itwin/core-
|
|
81
|
-
"@itwin/
|
|
82
|
-
"@itwin/
|
|
83
|
-
"@itwin/
|
|
84
|
-
"
|
|
85
|
-
"@itwin/
|
|
86
|
-
"
|
|
79
|
+
"@itwin/build-tools": "5.1.0-dev.0",
|
|
80
|
+
"@itwin/core-common": "5.1.0-dev.0",
|
|
81
|
+
"@itwin/presentation-common": "5.1.0-dev.0",
|
|
82
|
+
"@itwin/core-backend": "5.1.0-dev.0",
|
|
83
|
+
"@itwin/core-quantity": "5.1.0-dev.0",
|
|
84
|
+
"@itwin/core-bentley": "5.1.0-dev.0",
|
|
85
|
+
"@itwin/ecschema-metadata": "5.1.0-dev.0",
|
|
86
|
+
"internal-tools": "3.0.0-dev.69"
|
|
87
87
|
},
|
|
88
88
|
"dependencies": {
|
|
89
89
|
"object-hash": "^1.3.1",
|