@itwin/presentation-backend 5.0.0-dev.55 → 5.0.0-dev.57

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 (27) hide show
  1. package/lib/cjs/presentation-backend/NativePlatform.js +2 -0
  2. package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
  3. package/lib/cjs/presentation-backend/Presentation.js +8 -2
  4. package/lib/cjs/presentation-backend/Presentation.js.map +1 -1
  5. package/lib/cjs/presentation-backend/PresentationIpcHandler.js +1 -4
  6. package/lib/cjs/presentation-backend/PresentationIpcHandler.js.map +1 -1
  7. package/lib/cjs/presentation-backend/PresentationManager.js +12 -4
  8. package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
  9. package/lib/cjs/presentation-backend/PresentationManagerDetail.js +6 -0
  10. package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
  11. package/lib/cjs/presentation-backend/PresentationRpcImpl.js +3 -0
  12. package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
  13. package/lib/cjs/presentation-backend/RulesetEmbedder.js +5 -3
  14. package/lib/cjs/presentation-backend/RulesetEmbedder.js.map +1 -1
  15. package/lib/cjs/presentation-backend/RulesetManager.js +2 -1
  16. package/lib/cjs/presentation-backend/RulesetManager.js.map +1 -1
  17. package/lib/cjs/presentation-backend/RulesetVariablesManager.js +2 -0
  18. package/lib/cjs/presentation-backend/RulesetVariablesManager.js.map +1 -1
  19. package/lib/cjs/presentation-backend/SelectionScopesHelper.d.ts.map +1 -1
  20. package/lib/cjs/presentation-backend/SelectionScopesHelper.js +6 -9
  21. package/lib/cjs/presentation-backend/SelectionScopesHelper.js.map +1 -1
  22. package/lib/cjs/presentation-backend/TemporaryStorage.js +29 -25
  23. package/lib/cjs/presentation-backend/TemporaryStorage.js.map +1 -1
  24. package/lib/cjs/presentation-backend/Utils.d.ts.map +1 -1
  25. package/lib/cjs/presentation-backend/Utils.js +1 -2
  26. package/lib/cjs/presentation-backend/Utils.js.map +1 -1
  27. package/package.json +16 -15
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.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 { Id64String } from \"@itwin/core-bentley\";\nimport { VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\nimport { NativePlatformDefinition } from \"./NativePlatform\";\n\n/**\n * Presentation ruleset variables registry.\n * @public\n */\nexport interface RulesetVariablesManager {\n /** Gets a value of the specified type and ID */\n getValue(variableId: string, type: VariableValueTypes): VariableValue;\n /** Sets a value of the specified type */\n setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void;\n /** Unsets variable with given id. */\n unset(variableId: string): void;\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n getString(variableId: string): string;\n /**\n * Sets `string` variable value\n */\n setString(variableId: string, value: string): void;\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n getBool(variableId: string): boolean;\n /**\n * Sets `boolean` variable value\n */\n setBool(variableId: string, value: boolean): void;\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n getInt(variableId: string): number;\n /**\n * Sets `number` variable value\n */\n setInt(variableId: string, value: number): void;\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n getInts(variableId: string): number[];\n /**\n * Sets `number[]` variable value\n */\n setInts(variableId: string, value: number[]): void;\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n getId64(variableId: string): Id64String;\n /**\n * Sets `Id64String` variable value\n */\n setId64(variableId: string, value: Id64String): void;\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n getId64s(variableId: string): Id64String[];\n /**\n * Sets `Id64String[]` variable value\n */\n setId64s(variableId: string, value: Id64String[]): void;\n}\n\n/**\n * Presentation ruleset variables registry implementation.\n * @internal\n */\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\n private _getNativePlatform: () => NativePlatformDefinition;\n private _rulesetId: string;\n\n constructor(getNativeAddon: () => NativePlatformDefinition, rulesetId: string) {\n this._getNativePlatform = getNativeAddon;\n this._rulesetId = rulesetId;\n }\n\n public setValueInternal(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n this._getNativePlatform().setRulesetVariableValue(this._rulesetId, variableId, type, value);\n }\n\n public getValueInternal(variableId: string, type: VariableValueTypes): VariableValue {\n return this._getNativePlatform().getRulesetVariableValue(this._rulesetId, variableId, type).result;\n }\n\n public setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.setBool(variableId, value as boolean);\n case VariableValueTypes.Id64:\n return this.setId64(variableId, value as Id64String);\n case VariableValueTypes.Id64Array:\n return this.setId64s(variableId, value as Id64String[]);\n case VariableValueTypes.Int:\n return this.setInt(variableId, value as number);\n case VariableValueTypes.IntArray:\n return this.setInts(variableId, value as number[]);\n case VariableValueTypes.String:\n return this.setString(variableId, value as string);\n }\n }\n\n public unset(variableId: string): void {\n this._getNativePlatform().unsetRulesetVariableValue(this._rulesetId, variableId);\n }\n\n public getValue(variableId: string, type: VariableValueTypes): VariableValue {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.getBool(variableId);\n case VariableValueTypes.Id64:\n return this.getId64(variableId);\n case VariableValueTypes.Id64Array:\n return this.getId64s(variableId);\n case VariableValueTypes.Int:\n return this.getInt(variableId);\n case VariableValueTypes.IntArray:\n return this.getInts(variableId);\n case VariableValueTypes.String:\n return this.getString(variableId);\n }\n }\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n public getString(variableId: string): string {\n return this.getValueInternal(variableId, VariableValueTypes.String) as string;\n }\n\n /**\n * Sets `string` variable value\n */\n public setString(variableId: string, value: string): void {\n this.setValueInternal(variableId, VariableValueTypes.String, value);\n }\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n public getBool(variableId: string): boolean {\n return this.getValueInternal(variableId, VariableValueTypes.Bool) as boolean;\n }\n\n /**\n * Sets `boolean` variable value\n */\n public setBool(variableId: string, value: boolean): void {\n this.setValueInternal(variableId, VariableValueTypes.Bool, value);\n }\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n public getInt(variableId: string): number {\n return this.getValueInternal(variableId, VariableValueTypes.Int) as number;\n }\n\n /**\n * Sets `number` variable value\n */\n public setInt(variableId: string, value: number): void {\n this.setValueInternal(variableId, VariableValueTypes.Int, value);\n }\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n public getInts(variableId: string): number[] {\n return this.getValueInternal(variableId, VariableValueTypes.IntArray) as number[];\n }\n\n /**\n * Sets `number[]` variable value\n */\n public setInts(variableId: string, value: number[]): void {\n this.setValueInternal(variableId, VariableValueTypes.IntArray, value);\n }\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n public getId64(variableId: string): Id64String {\n return this.getValueInternal(variableId, VariableValueTypes.Id64) as Id64String;\n }\n\n /**\n * Sets `Id64String` variable value\n */\n public setId64(variableId: string, value: Id64String): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64, value);\n }\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n public getId64s(variableId: string): Id64String[] {\n return this.getValueInternal(variableId, VariableValueTypes.Id64Array) as Id64String[];\n }\n\n /**\n * Sets `Id64String[]` variable value\n */\n public setId64s(variableId: string, value: Id64String[]): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64Array, value);\n }\n}\n"]}
1
+ {"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.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 { Id64String } from \"@itwin/core-bentley\";\nimport { VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\nimport { NativePlatformDefinition } from \"./NativePlatform\";\n\n/**\n * Presentation ruleset variables registry.\n * @public\n */\nexport interface RulesetVariablesManager {\n /** Gets a value of the specified type and ID */\n getValue(variableId: string, type: VariableValueTypes): VariableValue;\n /** Sets a value of the specified type */\n setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void;\n /** Unsets variable with given id. */\n unset(variableId: string): void;\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n getString(variableId: string): string;\n /**\n * Sets `string` variable value\n */\n setString(variableId: string, value: string): void;\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n getBool(variableId: string): boolean;\n /**\n * Sets `boolean` variable value\n */\n setBool(variableId: string, value: boolean): void;\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n getInt(variableId: string): number;\n /**\n * Sets `number` variable value\n */\n setInt(variableId: string, value: number): void;\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n getInts(variableId: string): number[];\n /**\n * Sets `number[]` variable value\n */\n setInts(variableId: string, value: number[]): void;\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n getId64(variableId: string): Id64String;\n /**\n * Sets `Id64String` variable value\n */\n setId64(variableId: string, value: Id64String): void;\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n getId64s(variableId: string): Id64String[];\n /**\n * Sets `Id64String[]` variable value\n */\n setId64s(variableId: string, value: Id64String[]): void;\n}\n\n/**\n * Presentation ruleset variables registry implementation.\n * @internal\n */\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\n private _getNativePlatform: () => NativePlatformDefinition;\n private _rulesetId: string;\n\n constructor(getNativeAddon: () => NativePlatformDefinition, rulesetId: string) {\n this._getNativePlatform = getNativeAddon;\n this._rulesetId = rulesetId;\n }\n\n public setValueInternal(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n this._getNativePlatform().setRulesetVariableValue(this._rulesetId, variableId, type, value);\n }\n\n public getValueInternal(variableId: string, type: VariableValueTypes): VariableValue {\n return this._getNativePlatform().getRulesetVariableValue(this._rulesetId, variableId, type).result;\n }\n\n public setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.setBool(variableId, value as boolean);\n case VariableValueTypes.Id64:\n return this.setId64(variableId, value as Id64String);\n case VariableValueTypes.Id64Array:\n return this.setId64s(variableId, value as Id64String[]);\n case VariableValueTypes.Int:\n return this.setInt(variableId, value as number);\n case VariableValueTypes.IntArray:\n return this.setInts(variableId, value as number[]);\n case VariableValueTypes.String:\n return this.setString(variableId, value as string);\n }\n }\n\n public unset(variableId: string): void {\n this._getNativePlatform().unsetRulesetVariableValue(this._rulesetId, variableId);\n }\n\n public getValue(variableId: string, type: VariableValueTypes): VariableValue {\n switch (type) {\n case VariableValueTypes.Bool:\n return this.getBool(variableId);\n case VariableValueTypes.Id64:\n return this.getId64(variableId);\n case VariableValueTypes.Id64Array:\n return this.getId64s(variableId);\n case VariableValueTypes.Int:\n return this.getInt(variableId);\n case VariableValueTypes.IntArray:\n return this.getInts(variableId);\n case VariableValueTypes.String:\n return this.getString(variableId);\n }\n }\n\n /**\n * Retrieves `string` variable value.\n * Returns empty string if variable does not exist or does not convert to string.\n */\n public getString(variableId: string): string {\n return this.getValueInternal(variableId, VariableValueTypes.String) as string;\n }\n\n /**\n * Sets `string` variable value\n */\n public setString(variableId: string, value: string): void {\n this.setValueInternal(variableId, VariableValueTypes.String, value);\n }\n\n /**\n * Retrieves `boolean` variable value.\n * Returns `false` if variable does not exist or does not convert to boolean.\n */\n public getBool(variableId: string): boolean {\n return this.getValueInternal(variableId, VariableValueTypes.Bool) as boolean;\n }\n\n /**\n * Sets `boolean` variable value\n */\n public setBool(variableId: string, value: boolean): void {\n this.setValueInternal(variableId, VariableValueTypes.Bool, value);\n }\n\n /**\n * Retrieves `number` variable value.\n * Returns `0` if variable does not exist or does not convert to integer.\n */\n public getInt(variableId: string): number {\n return this.getValueInternal(variableId, VariableValueTypes.Int) as number;\n }\n\n /**\n * Sets `number` variable value\n */\n public setInt(variableId: string, value: number): void {\n this.setValueInternal(variableId, VariableValueTypes.Int, value);\n }\n\n /**\n * Retrieves `number[]` variable value.\n * Returns empty array if variable does not exist or does not convert to integer array.\n */\n public getInts(variableId: string): number[] {\n return this.getValueInternal(variableId, VariableValueTypes.IntArray) as number[];\n }\n\n /**\n * Sets `number[]` variable value\n */\n public setInts(variableId: string, value: number[]): void {\n this.setValueInternal(variableId, VariableValueTypes.IntArray, value);\n }\n\n /**\n * Retrieves `Id64String` variable value.\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\n */\n public getId64(variableId: string): Id64String {\n return this.getValueInternal(variableId, VariableValueTypes.Id64) as Id64String;\n }\n\n /**\n * Sets `Id64String` variable value\n */\n public setId64(variableId: string, value: Id64String): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64, value);\n }\n\n /**\n * Retrieves `Id64String[]` variable value.\n * Returns empty array if variable does not exist or does not convert to Id64String array.\n */\n public getId64s(variableId: string): Id64String[] {\n return this.getValueInternal(variableId, VariableValueTypes.Id64Array) as Id64String[];\n }\n\n /**\n * Sets `Id64String[]` variable value\n */\n public setId64s(variableId: string, value: Id64String[]): void {\n this.setValueInternal(variableId, VariableValueTypes.Id64Array, value);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionScopesHelper.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAwC,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,8BAA8B,EAI9B,MAAM,EAGN,cAAc,EACd,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAGpC;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO;WAEO,kBAAkB,IAAI,cAAc,EAAE;IAgBpD,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAWtC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAgBvC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAwB7C,OAAO,CAAC,MAAM,CAAC,oCAAoC;IAYnD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAgBtC,OAAO,CAAC,MAAM,CAAC,iCAAiC;IA2BhD,OAAO,CAAC,MAAM,CAAC,kCAAkC;IA6BjD,OAAO,CAAC,MAAM,CAAC,qCAAqC;WA6BhC,gBAAgB,CAAC,cAAc,EAAE,4BAA4B,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAC7H,gBAAgB,CAAC,cAAc,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAuChH"}
1
+ {"version":3,"file":"SelectionScopesHelper.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAoB,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EACL,8BAA8B,EAI9B,MAAM,EAGN,cAAc,EACd,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AAGpC;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO;WAEO,kBAAkB,IAAI,cAAc,EAAE;IAgBpD,OAAO,CAAC,MAAM,CAAC,aAAa;IAW5B,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAWtC,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAcvC,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAcpC,OAAO,CAAC,MAAM,CAAC,8BAA8B;IAwB7C,OAAO,CAAC,MAAM,CAAC,oCAAoC;IAYnD,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAgBtC,OAAO,CAAC,MAAM,CAAC,iCAAiC;IA2BhD,OAAO,CAAC,MAAM,CAAC,kCAAkC;IA6BjD,OAAO,CAAC,MAAM,CAAC,qCAAqC;WA6BhC,gBAAgB,CAAC,cAAc,EAAE,4BAA4B,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAC7H,gBAAgB,CAAC,cAAc,EAAE,8BAA8B,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAuChH"}
@@ -8,7 +8,6 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.SelectionScopesHelper = void 0;
11
- const core_backend_1 = require("@itwin/core-backend");
12
11
  const core_bentley_1 = require("@itwin/core-bentley");
13
12
  const presentation_common_1 = require("@itwin/presentation-common");
14
13
  const Utils_1 = require("./Utils");
@@ -58,11 +57,9 @@ class SelectionScopesHelper {
58
57
  const categoryKeys = new presentation_common_1.KeySet();
59
58
  ids.forEach(skipTransients((id) => {
60
59
  const el = iModel.elements.tryGetElement(id);
61
- if (el instanceof core_backend_1.GeometricElement) {
62
- const category = iModel.elements.tryGetElementProps(el.category);
63
- if (category) {
64
- categoryKeys.add({ className: category.classFullName, id: category.id });
65
- }
60
+ const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;
61
+ if (category) {
62
+ categoryKeys.add({ className: category.classFullName, id: category.id });
66
63
  }
67
64
  }));
68
65
  return categoryKeys;
@@ -130,7 +127,7 @@ class SelectionScopesHelper {
130
127
  static computeFunctionalElementSelection(iModel, ids) {
131
128
  const keys = new presentation_common_1.KeySet();
132
129
  ids.forEach(skipTransients((id) => {
133
- const is3d = this.elementClassDerivesFrom(iModel, id, core_backend_1.GeometricElement3d.classFullName);
130
+ const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
134
131
  if (!is3d) {
135
132
  // if the input is not a 3d element, we try to find the first related functional element
136
133
  const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
@@ -155,7 +152,7 @@ class SelectionScopesHelper {
155
152
  const keys = new presentation_common_1.KeySet();
156
153
  ids.forEach(skipTransients((id) => {
157
154
  let idToGetAssemblyFor = id;
158
- const is3d = this.elementClassDerivesFrom(iModel, id, core_backend_1.GeometricElement3d.classFullName);
155
+ const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
159
156
  if (!is3d) {
160
157
  // if the input is not a 3d element, we try to find the first related functional element
161
158
  const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
@@ -181,7 +178,7 @@ class SelectionScopesHelper {
181
178
  const keys = new presentation_common_1.KeySet();
182
179
  ids.forEach(skipTransients((id) => {
183
180
  let idToGetAssemblyFor = id;
184
- const is3d = this.elementClassDerivesFrom(iModel, id, core_backend_1.GeometricElement3d.classFullName);
181
+ const is3d = this.elementClassDerivesFrom(iModel, id, "BisCore.GeometricElement3d");
185
182
  if (!is3d) {
186
183
  // if the input is not a 3d element, we try to find the first related functional element
187
184
  const firstFunctionalKey = this.findFirstRelatedFunctionalElementKey(iModel, id);
@@ -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/** @packageDocumentation\n * @module Core\n */\n\nimport { GeometricElement, GeometricElement3d, IModelDb } from \"@itwin/core-backend\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n ComputeSelectionRequestOptions,\n ElementSelectionScopeProps,\n InstanceKey,\n isComputeSelectionRequestOptions,\n KeySet,\n PresentationError,\n PresentationStatus,\n SelectionScope,\n SelectionScopeRequestOptions,\n} from \"@itwin/presentation-common\";\nimport { getElementKey } from \"./Utils\";\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 // istanbul 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(id);\n if (el instanceof GeometricElement) {\n const category = iModel.elements.tryGetElementProps(el.category);\n if (category) {\n categoryKeys.add({ className: category.classFullName, id: category.id! });\n }\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 // istanbul ignore else\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, GeometricElement3d.classFullName);\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, GeometricElement3d.classFullName);\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, GeometricElement3d.classFullName);\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(requestOptions: SelectionScopeRequestOptions<IModelDb>, ids: Id64String[], scopeId: string): Promise<KeySet>;\n public static async computeSelection(requestOptions: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet>;\n public static async computeSelection(\n requestOptions: ComputeSelectionRequestOptions<IModelDb> | SelectionScopeRequestOptions<IModelDb>,\n elementIds?: Id64String[],\n scopeId?: string,\n ): Promise<KeySet> {\n if (!isComputeSelectionRequestOptions(requestOptions)) {\n return this.computeSelection({\n ...requestOptions,\n elementIds: elementIds!,\n scope: { id: scopeId! },\n });\n }\n\n switch (requestOptions.scope.id) {\n case \"element\":\n return this.computeElementSelection(\n requestOptions.imodel,\n requestOptions.elementIds,\n (requestOptions.scope as ElementSelectionScopeProps).ancestorLevel ?? 0,\n );\n case \"assembly\":\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, 1);\n case \"top-assembly\":\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, Number.MAX_SAFE_INTEGER);\n case \"category\":\n return this.computeCategorySelection(requestOptions.imodel, requestOptions.elementIds);\n case \"model\":\n return this.computeModelSelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional\":\n case \"functional-element\":\n return this.computeFunctionalElementSelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional-assembly\":\n return this.computeFunctionalAssemblySelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional-top-assembly\":\n return this.computeFunctionalTopAssemblySelection(requestOptions.imodel, requestOptions.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":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,sDAAiE;AACjE,oEAUoC;AACpC,mCAAwC;AAExC;;;;;GAKG;AACH,MAAa,qBAAqB;IAChC,uBAAuB;IACvB,gBAAuB,CAAC;IAEjB,MAAM,CAAC,kBAAkB;QAC9B,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAE,KAAa,EAAE,WAAmB,EAAkB,EAAE,CAAC,CAAC;YACrG,EAAE,EAAE,OAAO;YACX,KAAK;YACL,WAAW;SACZ,CAAC,CAAC;QACH,OAAO;YACL,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,2BAA2B,CAAC;YACvE,oBAAoB,CAAC,UAAU,EAAE,UAAU,EAAE,qCAAqC,CAAC;YACnF,oBAAoB,CAAC,cAAc,EAAE,cAAc,EAAE,iDAAiD,CAAC;YACvG,gHAAgH;YAChH,wGAAwG;YACxG,+FAA+F;SAChG,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,aAAa,CAAC,MAAgB,EAAE,SAAqB,EAAE,aAAqB;QACzF,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QACtE,OAAO,QAAQ,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YACvC,MAAM,GAAG,QAAQ,CAAC;YAClB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;YAClE,EAAE,aAAa,CAAC;QAClB,CAAC;QACD,OAAO,IAAA,qBAAa,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,MAAgB,EAAE,UAAwB,EAAE,aAAqB;QACtG,MAAM,UAAU,GAAG,IAAI,4BAAM,EAAE,CAAC;QAChC,UAAU,CAAC,OAAO,CAChB,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;YAC1D,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,CACH,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,MAAM,CAAC,wBAAwB,CAAC,MAAgB,EAAE,GAAiB;QACzE,MAAM,YAAY,GAAG,IAAI,4BAAM,EAAE,CAAC;QAClC,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAmB,EAAE,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5F,IAAI,QAAQ,EAAE,CAAC;gBACb,YAAY,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,aAAa,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAG,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,MAAgB,EAAE,GAAiB;QACtE,MAAM,SAAS,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC/B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE;YACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,IAAI,KAAK,EAAE,CAAC;gBACV,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,EAAG,EAAE,CAAC,CAAC;YACnE,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,8BAA8B,CAAC,MAAgB,EAAE,kBAA8B;QAC5F,MAAM,KAAK,GAAG;;;;;;;;;OASX,CAAC;QACJ,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAA2B,EAAE;YAC3E,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;YACnC,uBAAuB;YACvB,IAAI,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC1B,IAAI,GAAG,CAAC,eAAe,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;oBACxC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAChF,CAAC;YACH,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,oCAAoC,CAAC,MAAgB,EAAE,kBAA8B;QAClG,IAAI,MAAM,GAA2B,kBAAkB,CAAC;QACxD,OAAO,MAAM,EAAE,CAAC;YACd,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjF,IAAI,oBAAoB,EAAE,CAAC;gBACzB,OAAO,oBAAoB,CAAC;YAC9B,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,MAAM,CAAC,uBAAuB,CAAC,MAAgB,EAAE,SAAqB,EAAE,iBAAyB;QACvG,MAAM,KAAK,GAAG;;;;;;;OAOX,CAAC;QACJ,OAAO,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAW,EAAE;YAC3D,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACtC,OAAO,uBAAQ,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,iCAAiC,CAAC,MAAgB,EAAE,GAAiB;QAClF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;YACH,CAAC;YACD,IAAI,QAAiC,CAAC;YACtC,IAAI,IAAI,EAAE,CAAC;gBACT,6FAA6F;gBAC7F,QAAQ,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAA,qBAAa,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,kCAAkC,CAAC,MAAgB,EAAE,GAAiB;QACnF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,kBAAkB,GAAG,kBAAkB,CAAC,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,0EAA0E;YAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;YACtE,IAAI,QAAQ,GAAG,WAAW,CAAC;YAC3B,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACrB,6FAA6F;gBAC7F,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,QAAQ,GAAG,oBAAoB,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,MAAM,CAAC,qCAAqC,CAAC,MAAgB,EAAE,GAAiB;QACtF,MAAM,IAAI,GAAG,IAAI,4BAAM,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CACT,cAAc,CAAC,CAAC,EAAE,EAAQ,EAAE;YAC1B,IAAI,kBAAkB,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,EAAE,EAAE,4BAA4B,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,wFAAwF;gBACxF,MAAM,kBAAkB,GAAG,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,kBAAkB,EAAE,CAAC;oBACvB,kBAAkB,GAAG,kBAAkB,CAAC,EAAE,CAAC;gBAC7C,CAAC;YACH,CAAC;YACD,8EAA8E;YAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC/F,IAAI,QAAQ,GAAG,cAAc,CAAC;YAC9B,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;gBACrB,6FAA6F;gBAC7F,MAAM,oBAAoB,GAAG,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACtF,IAAI,oBAAoB,EAAE,CAAC;oBACzB,QAAQ,GAAG,oBAAoB,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC,CACH,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAIM,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAClC,cAAiG,EACjG,UAAyB,EACzB,OAAgB;QAEhB,IAAI,CAAC,IAAA,sDAAgC,EAAC,cAAc,CAAC,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,gBAAgB,CAAC;gBAC3B,GAAG,cAAc;gBACjB,UAAU,EAAE,UAAW;gBACvB,KAAK,EAAE,EAAE,EAAE,EAAE,OAAQ,EAAE;aACxB,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,cAAc,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YAChC,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,uBAAuB,CACjC,cAAc,CAAC,MAAM,EACrB,cAAc,CAAC,UAAU,EACxB,cAAc,CAAC,KAAoC,CAAC,aAAa,IAAI,CAAC,CACxE,CAAC;YACJ,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC3F,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACjH,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACzF,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACtF,KAAK,YAAY,CAAC;YAClB,KAAK,oBAAoB;gBACvB,OAAO,IAAI,CAAC,iCAAiC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YAClG,KAAK,qBAAqB;gBACxB,OAAO,IAAI,CAAC,kCAAkC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;YACnG,KAAK,yBAAyB;gBAC5B,OAAO,IAAI,CAAC,qCAAqC,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,IAAI,uCAAiB,CAAC,wCAAkB,CAAC,eAAe,EAAE,SAAS,CAAC,CAAC;IAC7E,CAAC;CACF;AAvPD,sDAuPC;AAED,MAAM,cAAc,GAAG,CAAC,QAAkC,EAAE,EAAE;IAC5D,OAAO,CAAC,EAAc,EAAE,EAAE;QACxB,IAAI,CAAC,mBAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,QAAQ,CAAC,EAAE,CAAC,CAAC;QACf,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,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/** @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 isComputeSelectionRequestOptions,\n KeySet,\n PresentationError,\n PresentationStatus,\n SelectionScope,\n SelectionScopeRequestOptions,\n} from \"@itwin/presentation-common\";\nimport { getElementKey } from \"./Utils\";\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 // istanbul 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 // istanbul ignore else\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(requestOptions: SelectionScopeRequestOptions<IModelDb>, ids: Id64String[], scopeId: string): Promise<KeySet>;\n public static async computeSelection(requestOptions: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet>;\n public static async computeSelection(\n requestOptions: ComputeSelectionRequestOptions<IModelDb> | SelectionScopeRequestOptions<IModelDb>,\n elementIds?: Id64String[],\n scopeId?: string,\n ): Promise<KeySet> {\n if (!isComputeSelectionRequestOptions(requestOptions)) {\n return this.computeSelection({\n ...requestOptions,\n elementIds: elementIds!,\n scope: { id: scopeId! },\n });\n }\n\n switch (requestOptions.scope.id) {\n case \"element\":\n return this.computeElementSelection(\n requestOptions.imodel,\n requestOptions.elementIds,\n (requestOptions.scope as ElementSelectionScopeProps).ancestorLevel ?? 0,\n );\n case \"assembly\":\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, 1);\n case \"top-assembly\":\n return this.computeElementSelection(requestOptions.imodel, requestOptions.elementIds, Number.MAX_SAFE_INTEGER);\n case \"category\":\n return this.computeCategorySelection(requestOptions.imodel, requestOptions.elementIds);\n case \"model\":\n return this.computeModelSelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional\":\n case \"functional-element\":\n return this.computeFunctionalElementSelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional-assembly\":\n return this.computeFunctionalAssemblySelection(requestOptions.imodel, requestOptions.elementIds);\n case \"functional-top-assembly\":\n return this.computeFunctionalTopAssemblySelection(requestOptions.imodel, requestOptions.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"]}
@@ -17,35 +17,13 @@ const presentation_common_1 = require("@itwin/presentation-common");
17
17
  * @internal
18
18
  */
19
19
  class TemporaryStorage {
20
+ _timer;
21
+ _values;
22
+ props;
20
23
  /**
21
24
  * Constructor. Creates the storage using supplied params.
22
25
  */
23
26
  constructor(props) {
24
- /**
25
- * Cleans up values that are currently outdated (based
26
- * on their max and unused value lifetimes specified through [[Props]]).
27
- */
28
- this.disposeOutdatedValues = () => {
29
- const now = new Date().getTime();
30
- const valuesToDispose = [];
31
- for (const [key, entry] of this._values.entries()) {
32
- if (this.props.maxValueLifetime !== undefined) {
33
- if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {
34
- valuesToDispose.push(key);
35
- continue;
36
- }
37
- }
38
- if (this.props.unusedValueLifetime !== undefined) {
39
- if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {
40
- valuesToDispose.push(key);
41
- continue;
42
- }
43
- }
44
- }
45
- for (const id of valuesToDispose) {
46
- this.deleteExistingEntry(id, true);
47
- }
48
- };
49
27
  this.props = props;
50
28
  this._values = new Map();
51
29
  if (this.props.cleanupInterval) {
@@ -68,6 +46,31 @@ class TemporaryStorage {
68
46
  this._values.clear();
69
47
  this.props.onDisposedAll && this.props.onDisposedAll();
70
48
  }
49
+ /**
50
+ * Cleans up values that are currently outdated (based
51
+ * on their max and unused value lifetimes specified through [[Props]]).
52
+ */
53
+ disposeOutdatedValues = () => {
54
+ const now = new Date().getTime();
55
+ const valuesToDispose = [];
56
+ for (const [key, entry] of this._values.entries()) {
57
+ if (this.props.maxValueLifetime !== undefined) {
58
+ if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {
59
+ valuesToDispose.push(key);
60
+ continue;
61
+ }
62
+ }
63
+ if (this.props.unusedValueLifetime !== undefined) {
64
+ if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {
65
+ valuesToDispose.push(key);
66
+ continue;
67
+ }
68
+ }
69
+ }
70
+ for (const id of valuesToDispose) {
71
+ this.deleteExistingEntry(id, true);
72
+ }
73
+ };
71
74
  deleteExistingEntry(id, isTimeout) {
72
75
  (0, core_bentley_1.assert)(this._values.has(id));
73
76
  this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id).value, isTimeout ? "timeout" : "request");
@@ -133,6 +136,7 @@ exports.TemporaryStorage = TemporaryStorage;
133
136
  * @internal
134
137
  */
135
138
  class FactoryBasedTemporaryStorage extends TemporaryStorage {
139
+ props;
136
140
  /**
137
141
  * Constructor. Creates the storage using supplied params.
138
142
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TemporaryStorage.js","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,sDAA6C;AAC7C,oEAAmF;AAmDnF;;;;;GAKG;AACH,MAAa,gBAAgB;IAK3B;;OAEG;IACH,YAAY,KAA+B;QA0B3C;;;WAGG;QACI,0BAAqB,GAAG,GAAG,EAAE;YAClC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,eAAe,GAAa,EAAE,CAAC;YACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;gBAClD,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,SAAS,EAAE,CAAC;oBAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;wBACrG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC1B,SAAS;oBACX,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;oBACjD,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;wBAC5G,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC1B,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;gBACjC,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC,CAAC;QAjDA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;QACpD,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC;QACrB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,cAAe,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC;IA4BO,mBAAmB,CAAC,EAAU,EAAE,SAAkB;QACxD,IAAA,qBAAM,EAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC3H,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,QAAQ,CAAC,EAAU;QACxB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC;YAChC,CAAC,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,eAAe,CAAC,EAAU;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,uBAAuB;QACvB,IAAI,KAAK,EAAE,CAAC;YACV,KAAK,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,EAAU,EAAE,KAAQ;QAClC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,uCAAiB,CAAC,wCAAkB,CAAC,eAAe,EAAE,0BAA0B,EAAE,mCAAmC,CAAC,CAAC;QACnI,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,qCAAqC;IAC9B,WAAW,CAAC,EAAU;QAC3B,uBAAuB;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,IAAW,MAAM;QACf,MAAM,MAAM,GAAG,IAAI,KAAK,EAAK,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAzHD,4CAyHC;AAWD;;;;;GAKG;AACH,MAAa,4BAAgC,SAAQ,gBAAmB;IAGtE;;OAEG;IACH,YAAY,KAA2C;QACrD,KAAK,CAAC,KAAK,CAAC,CAAC;QACb,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACa,QAAQ,CAAC,EAAU;QACjC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,aAAa,CAAC;QACvB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AA3BD,oEA2BC","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 // istanbul ignore else\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 // istanbul ignore else\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":["/*---------------------------------------------------------------------------------------------\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 // istanbul ignore else\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 // istanbul ignore else\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 +1 @@
1
- {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAW,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAY,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAGL,WAAW,EAEX,kBAAkB,EAClB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAIpC,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,CAYvF;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"}
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAY,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAGL,WAAW,EAEX,kBAAkB,EAClB,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAIpC,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,CAYvF;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"}
@@ -13,7 +13,6 @@ exports.normalizeVersion = normalizeVersion;
13
13
  exports.combineDiagnosticsOptions = combineDiagnosticsOptions;
14
14
  exports.reportDiagnostics = reportDiagnostics;
15
15
  const semver_1 = require("semver");
16
- const core_backend_1 = require("@itwin/core-backend");
17
16
  const core_bentley_1 = require("@itwin/core-bentley");
18
17
  const presentation_common_1 = require("@itwin/presentation-common");
19
18
  const presentation = require("@itwin/presentation-common/lib/cjs/assets/locales/en/Presentation.json"); // eslint-disable-line @typescript-eslint/no-require-imports
@@ -36,7 +35,7 @@ function getLocalizedStringEN(key) {
36
35
  /** @internal */
37
36
  function getElementKey(imodel, id) {
38
37
  let key;
39
- const query = `SELECT ECClassId FROM ${core_backend_1.Element.classFullName} e WHERE ECInstanceId = ?`;
38
+ const query = `SELECT ECClassId FROM BisCore.Element e WHERE ECInstanceId = ?`;
40
39
  imodel.withPreparedStatement(query, (stmt) => {
41
40
  try {
42
41
  stmt.bindId(1, id);
@@ -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/** @packageDocumentation\n * @module Core\n */\n\nimport { parse as parseVersion } from \"semver\";\nimport { Element, IModelDb } from \"@itwin/core-backend\";\nimport { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport {\n combineDiagnosticsSeverities,\n compareDiagnosticsSeverities,\n Diagnostics,\n DiagnosticsLogEntry,\n DiagnosticsOptions,\n InstanceKey,\n} from \"@itwin/presentation-common\";\n\nconst presentation = require(\"@itwin/presentation-common/lib/cjs/assets/locales/en/Presentation.json\"); // eslint-disable-line @typescript-eslint/no-require-imports\n\n/** @internal */\nexport function getLocalizedStringEN(key: string) {\n let result = presentation;\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 (keyStep in result === false) {\n return key;\n }\n result = result[keyStep];\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 ${Element.classFullName} 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":["/*---------------------------------------------------------------------------------------------\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 { parse as parseVersion } from \"semver\";\nimport { IModelDb } from \"@itwin/core-backend\";\nimport { DbResult, Id64String } from \"@itwin/core-bentley\";\nimport {\n combineDiagnosticsSeverities,\n compareDiagnosticsSeverities,\n Diagnostics,\n DiagnosticsLogEntry,\n DiagnosticsOptions,\n InstanceKey,\n} from \"@itwin/presentation-common\";\n\nconst presentation = require(\"@itwin/presentation-common/lib/cjs/assets/locales/en/Presentation.json\"); // eslint-disable-line @typescript-eslint/no-require-imports\n\n/** @internal */\nexport function getLocalizedStringEN(key: string) {\n let result = presentation;\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 (keyStep in result === false) {\n return key;\n }\n result = result[keyStep];\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/presentation-backend",
3
- "version": "5.0.0-dev.55",
3
+ "version": "5.0.0-dev.57",
4
4
  "description": "Backend of iTwin.js Presentation library",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -23,12 +23,12 @@
23
23
  "main": "lib/cjs/presentation-backend.js",
24
24
  "typings": "lib/cjs/presentation-backend",
25
25
  "peerDependencies": {
26
- "@itwin/core-backend": "5.0.0-dev.55",
27
- "@itwin/core-bentley": "5.0.0-dev.55",
28
- "@itwin/ecschema-metadata": "5.0.0-dev.55",
29
- "@itwin/core-common": "5.0.0-dev.55",
30
- "@itwin/presentation-common": "5.0.0-dev.55",
31
- "@itwin/core-quantity": "5.0.0-dev.55"
26
+ "@itwin/core-bentley": "5.0.0-dev.57",
27
+ "@itwin/core-backend": "5.0.0-dev.57",
28
+ "@itwin/core-common": "5.0.0-dev.57",
29
+ "@itwin/core-quantity": "5.0.0-dev.57",
30
+ "@itwin/ecschema-metadata": "5.0.0-dev.57",
31
+ "@itwin/presentation-common": "5.0.0-dev.57"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@itwin/eslint-plugin": "5.0.0-dev.1",
@@ -47,6 +47,7 @@
47
47
  "@types/sinon": "^17.0.2",
48
48
  "@types/sinon-chai": "^3.2.0",
49
49
  "@types/sinonjs__fake-timers": "^8.1.5",
50
+ "@types/source-map-support": "^0.4.0",
50
51
  "chai": "^4.3.10",
51
52
  "chai-as-promised": "^7.1.1",
52
53
  "chai-jest-snapshot": "^2.0.0",
@@ -66,13 +67,13 @@
66
67
  "source-map-support": "^0.5.6",
67
68
  "typemoq": "^2.1.0",
68
69
  "typescript": "~5.6.2",
69
- "@itwin/build-tools": "5.0.0-dev.55",
70
- "@itwin/core-backend": "5.0.0-dev.55",
71
- "@itwin/ecschema-metadata": "5.0.0-dev.55",
72
- "@itwin/core-bentley": "5.0.0-dev.55",
73
- "@itwin/presentation-common": "5.0.0-dev.55",
74
- "@itwin/core-common": "5.0.0-dev.55",
75
- "@itwin/core-quantity": "5.0.0-dev.55"
70
+ "@itwin/build-tools": "5.0.0-dev.57",
71
+ "@itwin/ecschema-metadata": "5.0.0-dev.57",
72
+ "@itwin/core-bentley": "5.0.0-dev.57",
73
+ "@itwin/core-backend": "5.0.0-dev.57",
74
+ "@itwin/core-quantity": "5.0.0-dev.57",
75
+ "@itwin/core-common": "5.0.0-dev.57",
76
+ "@itwin/presentation-common": "5.0.0-dev.57"
76
77
  },
77
78
  "dependencies": {
78
79
  "object-hash": "^1.3.1",
@@ -95,7 +96,7 @@
95
96
  "extract": "betools extract --fileExt=ts --extractFrom=./src/test --recursive --out=../../generated-docs/extract",
96
97
  "extract-api": "betools extract-api --entry=presentation-backend",
97
98
  "lint": "eslint \"./src/**/*.ts\" 1>&2",
98
- "test": "mocha --config ../.mocharc.json --file ./lib/cjs/test/index.test.js \"./lib/cjs/test/**/*.test.js\"",
99
+ "test": "mocha --config ./.mocharc.json",
99
100
  "test:watch": "npm -s test -- --reporter min --watch-extensions ts --watch",
100
101
  "prettier:fix": "prettier --write ."
101
102
  }