@itwin/presentation-backend 5.4.0-dev.5 → 5.4.0-dev.6

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 (45) hide show
  1. package/lib/cjs/presentation-backend/BackendLoggerCategory.js.map +1 -1
  2. package/lib/cjs/presentation-backend/ElementPropertiesHelper.js +14 -14
  3. package/lib/cjs/presentation-backend/ElementPropertiesHelper.js.map +1 -1
  4. package/lib/cjs/presentation-backend/InternalSymbols.js.map +1 -1
  5. package/lib/cjs/presentation-backend/NativePlatform.js.map +1 -1
  6. package/lib/cjs/presentation-backend/Presentation.js.map +1 -1
  7. package/lib/cjs/presentation-backend/PresentationIpcHandler.js.map +1 -1
  8. package/lib/cjs/presentation-backend/PresentationManager.js.map +1 -1
  9. package/lib/cjs/presentation-backend/PresentationManagerDetail.js.map +1 -1
  10. package/lib/cjs/presentation-backend/PresentationRpcImpl.js.map +1 -1
  11. package/lib/cjs/presentation-backend/RulesetEmbedder.js +3 -3
  12. package/lib/cjs/presentation-backend/RulesetEmbedder.js.map +1 -1
  13. package/lib/cjs/presentation-backend/RulesetManager.js.map +1 -1
  14. package/lib/cjs/presentation-backend/RulesetVariablesManager.js.map +1 -1
  15. package/lib/cjs/presentation-backend/SelectionScopesHelper.js +16 -16
  16. package/lib/cjs/presentation-backend/SelectionScopesHelper.js.map +1 -1
  17. package/lib/cjs/presentation-backend/TemporaryStorage.js.map +1 -1
  18. package/lib/cjs/presentation-backend/Utils.js.map +1 -1
  19. package/lib/cjs/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
  20. package/lib/cjs/presentation-backend/domain/RulesetElements.js.map +1 -1
  21. package/lib/cjs/presentation-backend-internal.js.map +1 -1
  22. package/lib/cjs/presentation-backend.js.map +1 -1
  23. package/lib/esm/presentation-backend/BackendLoggerCategory.js.map +1 -1
  24. package/lib/esm/presentation-backend/ElementPropertiesHelper.js +14 -14
  25. package/lib/esm/presentation-backend/ElementPropertiesHelper.js.map +1 -1
  26. package/lib/esm/presentation-backend/InternalSymbols.js.map +1 -1
  27. package/lib/esm/presentation-backend/NativePlatform.js.map +1 -1
  28. package/lib/esm/presentation-backend/Presentation.js.map +1 -1
  29. package/lib/esm/presentation-backend/PresentationIpcHandler.js.map +1 -1
  30. package/lib/esm/presentation-backend/PresentationManager.js.map +1 -1
  31. package/lib/esm/presentation-backend/PresentationManagerDetail.js.map +1 -1
  32. package/lib/esm/presentation-backend/PresentationRpcImpl.js.map +1 -1
  33. package/lib/esm/presentation-backend/RulesetEmbedder.js +3 -3
  34. package/lib/esm/presentation-backend/RulesetEmbedder.js.map +1 -1
  35. package/lib/esm/presentation-backend/RulesetManager.js.map +1 -1
  36. package/lib/esm/presentation-backend/RulesetVariablesManager.js.map +1 -1
  37. package/lib/esm/presentation-backend/SelectionScopesHelper.js +16 -16
  38. package/lib/esm/presentation-backend/SelectionScopesHelper.js.map +1 -1
  39. package/lib/esm/presentation-backend/TemporaryStorage.js.map +1 -1
  40. package/lib/esm/presentation-backend/Utils.js.map +1 -1
  41. package/lib/esm/presentation-backend/domain/PresentationRulesDomain.js.map +1 -1
  42. package/lib/esm/presentation-backend/domain/RulesetElements.js.map +1 -1
  43. package/lib/esm/presentation-backend-internal.js.map +1 -1
  44. package/lib/esm/presentation-backend.js.map +1 -1
  45. package/package.json +14 -14
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-backend/RulesetVariablesManager.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,oEAA+E;AA4E/E;;;GAGG;AACH,MAAa,2BAA2B;IAC9B,kBAAkB,CAAiC;IACnD,UAAU,CAAS;IAE3B,YAAY,cAA8C,EAAE,SAAiB;QAC3E,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QACxF,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9F,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB;QAClE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;IACrG,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QAChF,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAgB,CAAC,CAAC;YACpD,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAmB,CAAC,CAAC;YACvD,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC1D,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;YAClD,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAiB,CAAC,CAAC;YACrD,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAkB;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnF,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB;QAC1D,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,CAAW,CAAC;IAChF,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,UAAkB,EAAE,KAAa;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAY,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAc;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,CAAW,CAAC;IAC7E,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,UAAkB,EAAE,KAAa;QAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,CAAa,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAe;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAe,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAiB;QAClD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,CAAiB,CAAC;IACzF,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,UAAkB,EAAE,KAAmB;QACrD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF;AAhJD,kEAgJC","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.js\";\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":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,oEAA+E;AA4E/E;;;GAGG;AACH,MAAa,2BAA2B;IAC9B,kBAAkB,CAAiC;IACnD,UAAU,CAAS;IAE3B,YAAY,cAA8C,EAAE,SAAiB;QAC3E,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QACxF,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9F,CAAC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,IAAwB;QAClE,OAAO,IAAI,CAAC,kBAAkB,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC;IACrG,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB,EAAE,KAAoB;QAChF,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAgB,CAAC,CAAC;YACpD,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAmB,CAAC,CAAC;YACvD,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAqB,CAAC,CAAC;YAC1D,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;YAClD,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAiB,CAAC,CAAC;YACrD,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,KAAe,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAkB;QAC7B,IAAI,CAAC,kBAAkB,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACnF,CAAC;IAEM,QAAQ,CAAC,UAAkB,EAAE,IAAwB;QAC1D,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACnC,KAAK,wCAAkB,CAAC,GAAG;gBACzB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACjC,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAClC,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,SAAS,CAAC,UAAkB;QACjC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,CAAW,CAAC;IAChF,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,UAAkB,EAAE,KAAa;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAY,CAAC;IAC/E,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAc;QAC/C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,UAAkB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,CAAW,CAAC;IAC7E,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,UAAkB,EAAE,KAAa;QAC7C,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,CAAa,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAe;QAChD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACxE,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,UAAkB;QAC/B,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAe,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,UAAkB,EAAE,KAAiB;QAClD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,QAAQ,CAAC,UAAkB;QAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,CAAiB,CAAC;IACzF,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,UAAkB,EAAE,KAAmB;QACrD,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;CACF;AAhJD,kEAgJC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\r\nimport { NativePlatformDefinition } from \"./NativePlatform.js\";\r\n\r\n/**\r\n * Presentation ruleset variables registry.\r\n * @public\r\n */\r\nexport interface RulesetVariablesManager {\r\n /** Gets a value of the specified type and ID */\r\n getValue(variableId: string, type: VariableValueTypes): VariableValue;\r\n /** Sets a value of the specified type */\r\n setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void;\r\n /** Unsets variable with given id. */\r\n unset(variableId: string): void;\r\n\r\n /**\r\n * Retrieves `string` variable value.\r\n * Returns empty string if variable does not exist or does not convert to string.\r\n */\r\n getString(variableId: string): string;\r\n /**\r\n * Sets `string` variable value\r\n */\r\n setString(variableId: string, value: string): void;\r\n\r\n /**\r\n * Retrieves `boolean` variable value.\r\n * Returns `false` if variable does not exist or does not convert to boolean.\r\n */\r\n getBool(variableId: string): boolean;\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n setBool(variableId: string, value: boolean): void;\r\n\r\n /**\r\n * Retrieves `number` variable value.\r\n * Returns `0` if variable does not exist or does not convert to integer.\r\n */\r\n getInt(variableId: string): number;\r\n /**\r\n * Sets `number` variable value\r\n */\r\n setInt(variableId: string, value: number): void;\r\n\r\n /**\r\n * Retrieves `number[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to integer array.\r\n */\r\n getInts(variableId: string): number[];\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n setInts(variableId: string, value: number[]): void;\r\n\r\n /**\r\n * Retrieves `Id64String` variable value.\r\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\r\n */\r\n getId64(variableId: string): Id64String;\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n setId64(variableId: string, value: Id64String): void;\r\n\r\n /**\r\n * Retrieves `Id64String[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to Id64String array.\r\n */\r\n getId64s(variableId: string): Id64String[];\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n setId64s(variableId: string, value: Id64String[]): void;\r\n}\r\n\r\n/**\r\n * Presentation ruleset variables registry implementation.\r\n * @internal\r\n */\r\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\r\n private _getNativePlatform: () => NativePlatformDefinition;\r\n private _rulesetId: string;\r\n\r\n constructor(getNativeAddon: () => NativePlatformDefinition, rulesetId: string) {\r\n this._getNativePlatform = getNativeAddon;\r\n this._rulesetId = rulesetId;\r\n }\r\n\r\n public setValueInternal(variableId: string, type: VariableValueTypes, value: VariableValue): void {\r\n this._getNativePlatform().setRulesetVariableValue(this._rulesetId, variableId, type, value);\r\n }\r\n\r\n public getValueInternal(variableId: string, type: VariableValueTypes): VariableValue {\r\n return this._getNativePlatform().getRulesetVariableValue(this._rulesetId, variableId, type).result;\r\n }\r\n\r\n public setValue(variableId: string, type: VariableValueTypes, value: VariableValue): void {\r\n switch (type) {\r\n case VariableValueTypes.Bool:\r\n return this.setBool(variableId, value as boolean);\r\n case VariableValueTypes.Id64:\r\n return this.setId64(variableId, value as Id64String);\r\n case VariableValueTypes.Id64Array:\r\n return this.setId64s(variableId, value as Id64String[]);\r\n case VariableValueTypes.Int:\r\n return this.setInt(variableId, value as number);\r\n case VariableValueTypes.IntArray:\r\n return this.setInts(variableId, value as number[]);\r\n case VariableValueTypes.String:\r\n return this.setString(variableId, value as string);\r\n }\r\n }\r\n\r\n public unset(variableId: string): void {\r\n this._getNativePlatform().unsetRulesetVariableValue(this._rulesetId, variableId);\r\n }\r\n\r\n public getValue(variableId: string, type: VariableValueTypes): VariableValue {\r\n switch (type) {\r\n case VariableValueTypes.Bool:\r\n return this.getBool(variableId);\r\n case VariableValueTypes.Id64:\r\n return this.getId64(variableId);\r\n case VariableValueTypes.Id64Array:\r\n return this.getId64s(variableId);\r\n case VariableValueTypes.Int:\r\n return this.getInt(variableId);\r\n case VariableValueTypes.IntArray:\r\n return this.getInts(variableId);\r\n case VariableValueTypes.String:\r\n return this.getString(variableId);\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves `string` variable value.\r\n * Returns empty string if variable does not exist or does not convert to string.\r\n */\r\n public getString(variableId: string): string {\r\n return this.getValueInternal(variableId, VariableValueTypes.String) as string;\r\n }\r\n\r\n /**\r\n * Sets `string` variable value\r\n */\r\n public setString(variableId: string, value: string): void {\r\n this.setValueInternal(variableId, VariableValueTypes.String, value);\r\n }\r\n\r\n /**\r\n * Retrieves `boolean` variable value.\r\n * Returns `false` if variable does not exist or does not convert to boolean.\r\n */\r\n public getBool(variableId: string): boolean {\r\n return this.getValueInternal(variableId, VariableValueTypes.Bool) as boolean;\r\n }\r\n\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n public setBool(variableId: string, value: boolean): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Bool, value);\r\n }\r\n\r\n /**\r\n * Retrieves `number` variable value.\r\n * Returns `0` if variable does not exist or does not convert to integer.\r\n */\r\n public getInt(variableId: string): number {\r\n return this.getValueInternal(variableId, VariableValueTypes.Int) as number;\r\n }\r\n\r\n /**\r\n * Sets `number` variable value\r\n */\r\n public setInt(variableId: string, value: number): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Int, value);\r\n }\r\n\r\n /**\r\n * Retrieves `number[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to integer array.\r\n */\r\n public getInts(variableId: string): number[] {\r\n return this.getValueInternal(variableId, VariableValueTypes.IntArray) as number[];\r\n }\r\n\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n public setInts(variableId: string, value: number[]): void {\r\n this.setValueInternal(variableId, VariableValueTypes.IntArray, value);\r\n }\r\n\r\n /**\r\n * Retrieves `Id64String` variable value.\r\n * Returns invalid Id64String if variable does not exist or does not convert to Id64String.\r\n */\r\n public getId64(variableId: string): Id64String {\r\n return this.getValueInternal(variableId, VariableValueTypes.Id64) as Id64String;\r\n }\r\n\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n public setId64(variableId: string, value: Id64String): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Id64, value);\r\n }\r\n\r\n /**\r\n * Retrieves `Id64String[]` variable value.\r\n * Returns empty array if variable does not exist or does not convert to Id64String array.\r\n */\r\n public getId64s(variableId: string): Id64String[] {\r\n return this.getValueInternal(variableId, VariableValueTypes.Id64Array) as Id64String[];\r\n }\r\n\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n public setId64s(variableId: string, value: Id64String[]): void {\r\n this.setValueInternal(variableId, VariableValueTypes.Id64Array, value);\r\n }\r\n}\r\n"]}
@@ -78,15 +78,15 @@ class SelectionScopesHelper {
78
78
  return modelKeys;
79
79
  }
80
80
  static async getRelatedFunctionalElementKey(imodel, graphicalElementId) {
81
- const query = `
82
- SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
83
- FROM bis.Element e
84
- LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
85
- LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
86
- LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
87
- INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
88
- INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
89
- WHERE e.ECInstanceId = ?
81
+ const query = `
82
+ SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId
83
+ FROM bis.Element e
84
+ LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId
85
+ LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId
86
+ LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)
87
+ INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId
88
+ INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id
89
+ WHERE e.ECInstanceId = ?
90
90
  `;
91
91
  const bindings = new core_common_1.QueryBinder();
92
92
  bindings.bindId(1, graphicalElementId);
@@ -109,13 +109,13 @@ class SelectionScopesHelper {
109
109
  return undefined;
110
110
  }
111
111
  static async elementClassDerivesFrom(imodel, elementId, baseClassFullName) {
112
- const query = `
113
- SELECT 1
114
- FROM bis.Element e
115
- INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
116
- INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
117
- INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
118
- WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
112
+ const query = `
113
+ SELECT 1
114
+ FROM bis.Element e
115
+ INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId
116
+ INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
117
+ INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
118
+ WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?
119
119
  `;
120
120
  const bindings = new core_common_1.QueryBinder();
121
121
  bindings.bindId(1, elementId);
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/no-deprecated */\n/** @packageDocumentation\n * @module Core\n */\n\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { QueryBinder } from \"@itwin/core-common\";\nimport {\n ComputeSelectionRequestOptions,\n ElementSelectionScopeProps,\n InstanceKey,\n KeySet,\n PresentationError,\n PresentationStatus,\n SelectionScope,\n} from \"@itwin/presentation-common\";\nimport { getElementKey } from \"./Utils.js\";\n\n/**\n * Contains helper methods for computing selection scopes. Will get removed\n * once rules-driven scopes are implemented.\n *\n * @internal\n */\nexport class SelectionScopesHelper {\n /* c8 ignore next */\n private constructor() {}\n\n public static getSelectionScopes(): SelectionScope[] {\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\n id: scopeId,\n label,\n description,\n });\n return [\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\n ];\n }\n\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\n let currId = elementId;\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n while (parentId && ancestorLevel !== 0) {\n currId = parentId;\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\n --ancestorLevel;\n }\n return getElementKey(iModel, currId);\n }\n\n private static async computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\n const parentKeys = new KeySet();\n await forEachNonTransientId(elementIds, async (id) => {\n const key = this.getElementKey(iModel, id, ancestorLevel);\n key && parentKeys.add(key);\n });\n return parentKeys;\n }\n\n private static async computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\n const categoryKeys = new KeySet();\n await forEachNonTransientId(ids, async (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 return categoryKeys;\n }\n\n private static async computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\n const modelKeys = new KeySet();\n await forEachNonTransientId(ids, async (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 return modelKeys;\n }\n\n private static async getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<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\n const bindings = new QueryBinder();\n bindings.bindId(1, graphicalElementId);\n\n for await (const row of imodel.createQueryReader(query, bindings)) {\n if (row.funcElClassName && row.funcElId) {\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\n }\n }\n return undefined;\n }\n\n private static async findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\n let currId: Id64String | undefined = graphicalElementId;\n while (currId) {\n const relatedFunctionalKey = await 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 async elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): Promise<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\n const bindings = new QueryBinder();\n bindings.bindId(1, elementId);\n bindings.bindString(2, baseClassFullName);\n\n for await (const _ of imodel.createQueryReader(query, bindings)) {\n return true;\n }\n return false;\n }\n\n private static async computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n const is3d = await 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 = await 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 = await this.getRelatedFunctionalElementKey(iModel, id);\n }\n if (!keyToAdd) {\n keyToAdd = getElementKey(iModel, id);\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n private static async computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n let idToGetAssemblyFor = id;\n const is3d = await 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 = await 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 = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n private static async computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\n const keys = new KeySet();\n await forEachNonTransientId(ids, async (id) => {\n let idToGetAssemblyFor = id;\n const is3d = await 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 = await 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 = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\n if (relatedFunctionalKey) {\n keyToAdd = relatedFunctionalKey;\n }\n }\n keyToAdd && keys.add(keyToAdd);\n });\n return keys;\n }\n\n public static async computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet> {\n switch (scope.id) {\n case \"element\":\n return this.computeElementSelection(imodel, elementIds, (scope as ElementSelectionScopeProps).ancestorLevel ?? 0);\n case \"assembly\":\n return this.computeElementSelection(imodel, elementIds, 1);\n case \"top-assembly\":\n return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);\n case \"category\":\n return this.computeCategorySelection(imodel, elementIds);\n case \"model\":\n return this.computeModelSelection(imodel, elementIds);\n case \"functional\":\n case \"functional-element\":\n return this.computeFunctionalElementSelection(imodel, elementIds);\n case \"functional-assembly\":\n return this.computeFunctionalAssemblySelection(imodel, elementIds);\n case \"functional-top-assembly\":\n return this.computeFunctionalTopAssemblySelection(imodel, elementIds);\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\n }\n}\n\nasync function forEachNonTransientId(ids: Id64Array, callback: (id: Id64String) => Promise<void>): Promise<void> {\n await Promise.all(ids.filter((id) => !Id64.isTransient(id)).map(callback));\n}\n"]}
1
+ {"version":3,"file":"SelectionScopesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/SelectionScopesHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable @typescript-eslint/no-deprecated */\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { GeometricElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { QueryBinder } from \"@itwin/core-common\";\r\nimport {\r\n ComputeSelectionRequestOptions,\r\n ElementSelectionScopeProps,\r\n InstanceKey,\r\n KeySet,\r\n PresentationError,\r\n PresentationStatus,\r\n SelectionScope,\r\n} from \"@itwin/presentation-common\";\r\nimport { getElementKey } from \"./Utils.js\";\r\n\r\n/**\r\n * Contains helper methods for computing selection scopes. Will get removed\r\n * once rules-driven scopes are implemented.\r\n *\r\n * @internal\r\n */\r\nexport class SelectionScopesHelper {\r\n /* c8 ignore next */\r\n private constructor() {}\r\n\r\n public static getSelectionScopes(): SelectionScope[] {\r\n const createSelectionScope = (scopeId: string, label: string, description: string): SelectionScope => ({\r\n id: scopeId,\r\n label,\r\n description,\r\n });\r\n return [\r\n createSelectionScope(\"element\", \"Element\", \"Select the picked element\"),\r\n createSelectionScope(\"assembly\", \"Assembly\", \"Select parent of the picked element\"),\r\n createSelectionScope(\"top-assembly\", \"Top Assembly\", \"Select the topmost parent of the picked element\"),\r\n // WIP: temporarily comment-out \"category\" and \"model\" scopes since we can't hilite contents of them fast enough\r\n // createSelectionScope(\"category\", \"Category\", \"Select all elements in the picked element's category\"),\r\n // createSelectionScope(\"model\", \"Model\", \"Select all elements in the picked element's model\"),\r\n ];\r\n }\r\n\r\n private static getElementKey(iModel: IModelDb, elementId: Id64String, ancestorLevel: number) {\r\n let currId = elementId;\r\n let parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n while (parentId && ancestorLevel !== 0) {\r\n currId = parentId;\r\n parentId = iModel.elements.tryGetElementProps(currId)?.parent?.id;\r\n --ancestorLevel;\r\n }\r\n return getElementKey(iModel, currId);\r\n }\r\n\r\n private static async computeElementSelection(iModel: IModelDb, elementIds: Id64String[], ancestorLevel: number) {\r\n const parentKeys = new KeySet();\r\n await forEachNonTransientId(elementIds, async (id) => {\r\n const key = this.getElementKey(iModel, id, ancestorLevel);\r\n key && parentKeys.add(key);\r\n });\r\n return parentKeys;\r\n }\r\n\r\n private static async computeCategorySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const categoryKeys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const el = iModel.elements.tryGetElement<GeometricElement>(id);\r\n const category = el?.category ? iModel.elements.tryGetElementProps(el.category) : undefined;\r\n if (category) {\r\n categoryKeys.add({ className: category.classFullName, id: category.id! });\r\n }\r\n });\r\n return categoryKeys;\r\n }\r\n\r\n private static async computeModelSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const modelKeys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const el = iModel.elements.tryGetElementProps(id);\r\n const model = el ? iModel.models.tryGetModelProps(el.model) : undefined;\r\n if (model) {\r\n modelKeys.add({ className: model.classFullName, id: model.id! });\r\n }\r\n });\r\n return modelKeys;\r\n }\r\n\r\n private static async getRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\r\n const query = `\r\n SELECT funcSchemaDef.Name || '.' || funcClassDef.Name funcElClassName, fe.ECInstanceId funcElId\r\n FROM bis.Element e\r\n LEFT JOIN func.PhysicalElementFulfillsFunction rel1 ON rel1.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.DrawingGraphicRepresentsFunctionalElement rel2 ON rel2.SourceECInstanceId = e.ECInstanceId\r\n LEFT JOIN func.FunctionalElement fe ON fe.ECInstanceId IN (rel1.TargetECInstanceId, rel2.TargetECInstanceId)\r\n INNER JOIN meta.ECClassDef funcClassDef ON funcClassDef.ECInstanceId = fe.ECClassId\r\n INNER JOIN meta.ECSchemaDef funcSchemaDef ON funcSchemaDef.ECInstanceId = funcClassDef.Schema.Id\r\n WHERE e.ECInstanceId = ?\r\n `;\r\n\r\n const bindings = new QueryBinder();\r\n bindings.bindId(1, graphicalElementId);\r\n\r\n for await (const row of imodel.createQueryReader(query, bindings)) {\r\n if (row.funcElClassName && row.funcElId) {\r\n return { className: row.funcElClassName.replace(\".\", \":\"), id: row.funcElId };\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private static async findFirstRelatedFunctionalElementKey(imodel: IModelDb, graphicalElementId: Id64String): Promise<InstanceKey | undefined> {\r\n let currId: Id64String | undefined = graphicalElementId;\r\n while (currId) {\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(imodel, currId);\r\n if (relatedFunctionalKey) {\r\n return relatedFunctionalKey;\r\n }\r\n currId = imodel.elements.tryGetElementProps(currId)?.parent?.id;\r\n }\r\n return undefined;\r\n }\r\n\r\n private static async elementClassDerivesFrom(imodel: IModelDb, elementId: Id64String, baseClassFullName: string): Promise<boolean> {\r\n const query = `\r\n SELECT 1\r\n FROM bis.Element e\r\n INNER JOIN meta.ClassHasAllBaseClasses baseClassRels ON baseClassRels.SourceECInstanceId = e.ECClassId\r\n INNER JOIN meta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId\r\n INNER JOIN meta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id\r\n WHERE e.ECInstanceId = ? AND (baseSchema.Name || ':' || baseClass.Name) = ?\r\n `;\r\n\r\n const bindings = new QueryBinder();\r\n bindings.bindId(1, elementId);\r\n bindings.bindString(2, baseClassFullName);\r\n\r\n for await (const _ of imodel.createQueryReader(query, bindings)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private static async computeFunctionalElementSelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n keys.add(firstFunctionalKey);\r\n return;\r\n }\r\n }\r\n let keyToAdd: InstanceKey | undefined;\r\n if (is3d) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n keyToAdd = await this.getRelatedFunctionalElementKey(iModel, id);\r\n }\r\n if (!keyToAdd) {\r\n keyToAdd = getElementKey(iModel, id);\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n private static async computeFunctionalAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the assembly of either the given element or the functional element\r\n const assemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, 1);\r\n let keyToAdd = assemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n private static async computeFunctionalTopAssemblySelection(iModel: IModelDb, ids: Id64String[]) {\r\n const keys = new KeySet();\r\n await forEachNonTransientId(ids, async (id) => {\r\n let idToGetAssemblyFor = id;\r\n const is3d = await this.elementClassDerivesFrom(iModel, id, \"BisCore.GeometricElement3d\");\r\n if (!is3d) {\r\n // if the input is not a 3d element, we try to find the first related functional element\r\n const firstFunctionalKey = await this.findFirstRelatedFunctionalElementKey(iModel, id);\r\n if (firstFunctionalKey) {\r\n idToGetAssemblyFor = firstFunctionalKey.id;\r\n }\r\n }\r\n // find the top assembly of either the given element or the functional element\r\n const topAssemblyKey = this.getElementKey(iModel, idToGetAssemblyFor, Number.MAX_SAFE_INTEGER);\r\n let keyToAdd = topAssemblyKey;\r\n if (is3d && keyToAdd) {\r\n // if we're computing scope for a 3d element, try to switch to its related functional element\r\n const relatedFunctionalKey = await this.getRelatedFunctionalElementKey(iModel, keyToAdd.id);\r\n if (relatedFunctionalKey) {\r\n keyToAdd = relatedFunctionalKey;\r\n }\r\n }\r\n keyToAdd && keys.add(keyToAdd);\r\n });\r\n return keys;\r\n }\r\n\r\n public static async computeSelection({ imodel, scope, elementIds }: ComputeSelectionRequestOptions<IModelDb>): Promise<KeySet> {\r\n switch (scope.id) {\r\n case \"element\":\r\n return this.computeElementSelection(imodel, elementIds, (scope as ElementSelectionScopeProps).ancestorLevel ?? 0);\r\n case \"assembly\":\r\n return this.computeElementSelection(imodel, elementIds, 1);\r\n case \"top-assembly\":\r\n return this.computeElementSelection(imodel, elementIds, Number.MAX_SAFE_INTEGER);\r\n case \"category\":\r\n return this.computeCategorySelection(imodel, elementIds);\r\n case \"model\":\r\n return this.computeModelSelection(imodel, elementIds);\r\n case \"functional\":\r\n case \"functional-element\":\r\n return this.computeFunctionalElementSelection(imodel, elementIds);\r\n case \"functional-assembly\":\r\n return this.computeFunctionalAssemblySelection(imodel, elementIds);\r\n case \"functional-top-assembly\":\r\n return this.computeFunctionalTopAssemblySelection(imodel, elementIds);\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, \"scopeId\");\r\n }\r\n}\r\n\r\nasync function forEachNonTransientId(ids: Id64Array, callback: (id: Id64String) => Promise<void>): Promise<void> {\r\n await Promise.all(ids.filter((id) => !Id64.isTransient(id)).map(callback));\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TemporaryStorage.js","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\n\n/**\n * Configuration properties for [[TemporaryStorage]].\n * @internal\n */\nexport interface TemporaryStorageProps<T> {\n /** A method that's called for every value before it's removed from storage */\n cleanupHandler?: (id: string, value: T, reason: \"timeout\" | \"dispose\" | \"request\") => void;\n\n onDisposedSingle?: (id: string) => void;\n onDisposedAll?: () => void;\n\n /**\n * An interval at which the storage attempts to clean up its values.\n * When `0` or `undefined` is specified, values are not cleaned up\n * automatically and cleanup has to be initiated manually by calling\n * [[TemporaryStorage.disposeOutdatedValues]].\n */\n cleanupInterval?: number;\n\n /**\n * Shortest period of time which the value should be kept in storage\n * unused before it's cleaned up.\n *\n * `undefined` means the values may be kept unused in the storage indefinitely.\n * `0` means the values are removed from the storage on every cleanup (either manual\n * call to [[TemporaryStorage.disposeOutdatedValues]] or scheduled (controlled\n * by [[cleanupInterval]])).\n */\n unusedValueLifetime?: number;\n\n /**\n * The maximum period of time which the value should be kept in storage\n * before it's cleaned up. The time is measured from the moment the value is added\n * to the storage.\n *\n * `undefined` means the values may be kept indefinitely. `0` means they're removed\n * up on every cleanup (either manual call to [[TemporaryStorage.disposeOutdatedValues]]\n * or scheduled (controlled by [[cleanupInterval]])).\n */\n maxValueLifetime?: number;\n}\n\n/** Value with know last used time */\ninterface TemporaryValue<T> {\n created: Date;\n lastUsed: Date;\n value: T;\n}\n\n/**\n * Storage for values that get removed from it after being unused (not-requested\n * for a specified amount of time).\n *\n * @internal\n */\nexport class TemporaryStorage<T> implements Disposable {\n private _timer?: NodeJS.Timeout;\n protected _values: Map<string, TemporaryValue<T>>;\n public readonly props: TemporaryStorageProps<T>;\n\n /**\n * Constructor. Creates the storage using supplied params.\n */\n constructor(props: TemporaryStorageProps<T>) {\n this.props = props;\n this._values = new Map<string, TemporaryValue<T>>();\n if (this.props.cleanupInterval) {\n this._timer = setInterval(this.disposeOutdatedValues, this.props.cleanupInterval);\n }\n }\n\n /**\n * Destructor. Must be called to clean up the stored values\n * and other resources\n */\n public [Symbol.dispose]() {\n if (this._timer) {\n clearInterval(this._timer);\n }\n\n if (this.props.cleanupHandler) {\n this._values.forEach((v, id) => {\n this.props.cleanupHandler!(id, v.value, \"dispose\");\n });\n }\n this._values.clear();\n this.props.onDisposedAll && this.props.onDisposedAll();\n }\n\n /**\n * Cleans up values that are currently outdated (based\n * on their max and unused value lifetimes specified through [[Props]]).\n */\n public disposeOutdatedValues = () => {\n const now = new Date().getTime();\n const valuesToDispose: string[] = [];\n for (const [key, entry] of this._values.entries()) {\n if (this.props.maxValueLifetime !== undefined) {\n if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {\n valuesToDispose.push(key);\n continue;\n }\n }\n if (this.props.unusedValueLifetime !== undefined) {\n if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {\n valuesToDispose.push(key);\n continue;\n }\n }\n }\n for (const id of valuesToDispose) {\n this.deleteExistingEntry(id, true);\n }\n };\n\n private deleteExistingEntry(id: string, isTimeout: boolean) {\n assert(this._values.has(id));\n this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id)!.value, isTimeout ? \"timeout\" : \"request\");\n this._values.delete(id);\n this.props.onDisposedSingle && this.props.onDisposedSingle(id);\n }\n\n /**\n * Get a value from the storage.\n *\n * **Note:** requesting a value with this method updates it's last used time.\n */\n public getValue(id: string): T | undefined {\n if (this._values.has(id)) {\n const v = this._values.get(id)!;\n v.lastUsed = new Date();\n return v.value;\n }\n return undefined;\n }\n\n public notifyValueUsed(id: string) {\n const entry = this._values.get(id);\n if (entry) {\n entry.lastUsed = new Date();\n }\n }\n\n /**\n * Adds a value into the storage.\n * @throws An error when trying to add a value with ID that's already stored in the storage.\n */\n public addValue(id: string, value: T) {\n if (this._values.has(id)) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `A value with given ID \"${id}\" already exists in this storage.`);\n }\n this._values.set(id, { value, created: new Date(), lastUsed: new Date() });\n }\n\n /** Deletes a value with given id. */\n public deleteValue(id: string) {\n if (this._values.has(id)) {\n this.deleteExistingEntry(id, false);\n }\n }\n\n /**\n * Get all values currently in this storage.\n *\n * **Note:** requesting values with this method **doesn't**\n * update their last used times.\n */\n public get values(): T[] {\n const values = new Array<T>();\n for (const v of this._values.values()) {\n values.push(v.value);\n }\n return values;\n }\n}\n\n/**\n * Configuration properties for [[FactoryBasedTemporaryStorage]].\n * @internal\n */\nexport interface FactoryBasedTemporaryStorageProps<T> extends TemporaryStorageProps<T> {\n /** A factory method that creates a stored value given it's identifier */\n factory: (id: string, onValueUsed: () => void) => T;\n}\n\n/**\n * Storage for values that get removed from it after being unused (not-requested\n * for a specified amount of time).\n *\n * @internal\n */\nexport class FactoryBasedTemporaryStorage<T> extends TemporaryStorage<T> {\n public override readonly props: FactoryBasedTemporaryStorageProps<T>;\n\n /**\n * Constructor. Creates the storage using supplied params.\n */\n constructor(props: FactoryBasedTemporaryStorageProps<T>) {\n super(props);\n this.props = props;\n }\n\n /**\n * Get a value from the storage. If the value with the specified id\n * doesn't exist, it gets created.\n *\n * **Note:** requesting a value with this method updates it's last used time.\n */\n public override getValue(id: string): T {\n const existingValue = super.getValue(id);\n if (existingValue) {\n return existingValue;\n }\n\n const value = this.props.factory(id, () => this.notifyValueUsed(id));\n this.addValue(id, value);\n return value;\n }\n}\n"]}
1
+ {"version":3,"file":"TemporaryStorage.js","sourceRoot":"","sources":["../../../src/presentation-backend/TemporaryStorage.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { PresentationError, PresentationStatus } from \"@itwin/presentation-common\";\r\n\r\n/**\r\n * Configuration properties for [[TemporaryStorage]].\r\n * @internal\r\n */\r\nexport interface TemporaryStorageProps<T> {\r\n /** A method that's called for every value before it's removed from storage */\r\n cleanupHandler?: (id: string, value: T, reason: \"timeout\" | \"dispose\" | \"request\") => void;\r\n\r\n onDisposedSingle?: (id: string) => void;\r\n onDisposedAll?: () => void;\r\n\r\n /**\r\n * An interval at which the storage attempts to clean up its values.\r\n * When `0` or `undefined` is specified, values are not cleaned up\r\n * automatically and cleanup has to be initiated manually by calling\r\n * [[TemporaryStorage.disposeOutdatedValues]].\r\n */\r\n cleanupInterval?: number;\r\n\r\n /**\r\n * Shortest period of time which the value should be kept in storage\r\n * unused before it's cleaned up.\r\n *\r\n * `undefined` means the values may be kept unused in the storage indefinitely.\r\n * `0` means the values are removed from the storage on every cleanup (either manual\r\n * call to [[TemporaryStorage.disposeOutdatedValues]] or scheduled (controlled\r\n * by [[cleanupInterval]])).\r\n */\r\n unusedValueLifetime?: number;\r\n\r\n /**\r\n * The maximum period of time which the value should be kept in storage\r\n * before it's cleaned up. The time is measured from the moment the value is added\r\n * to the storage.\r\n *\r\n * `undefined` means the values may be kept indefinitely. `0` means they're removed\r\n * up on every cleanup (either manual call to [[TemporaryStorage.disposeOutdatedValues]]\r\n * or scheduled (controlled by [[cleanupInterval]])).\r\n */\r\n maxValueLifetime?: number;\r\n}\r\n\r\n/** Value with know last used time */\r\ninterface TemporaryValue<T> {\r\n created: Date;\r\n lastUsed: Date;\r\n value: T;\r\n}\r\n\r\n/**\r\n * Storage for values that get removed from it after being unused (not-requested\r\n * for a specified amount of time).\r\n *\r\n * @internal\r\n */\r\nexport class TemporaryStorage<T> implements Disposable {\r\n private _timer?: NodeJS.Timeout;\r\n protected _values: Map<string, TemporaryValue<T>>;\r\n public readonly props: TemporaryStorageProps<T>;\r\n\r\n /**\r\n * Constructor. Creates the storage using supplied params.\r\n */\r\n constructor(props: TemporaryStorageProps<T>) {\r\n this.props = props;\r\n this._values = new Map<string, TemporaryValue<T>>();\r\n if (this.props.cleanupInterval) {\r\n this._timer = setInterval(this.disposeOutdatedValues, this.props.cleanupInterval);\r\n }\r\n }\r\n\r\n /**\r\n * Destructor. Must be called to clean up the stored values\r\n * and other resources\r\n */\r\n public [Symbol.dispose]() {\r\n if (this._timer) {\r\n clearInterval(this._timer);\r\n }\r\n\r\n if (this.props.cleanupHandler) {\r\n this._values.forEach((v, id) => {\r\n this.props.cleanupHandler!(id, v.value, \"dispose\");\r\n });\r\n }\r\n this._values.clear();\r\n this.props.onDisposedAll && this.props.onDisposedAll();\r\n }\r\n\r\n /**\r\n * Cleans up values that are currently outdated (based\r\n * on their max and unused value lifetimes specified through [[Props]]).\r\n */\r\n public disposeOutdatedValues = () => {\r\n const now = new Date().getTime();\r\n const valuesToDispose: string[] = [];\r\n for (const [key, entry] of this._values.entries()) {\r\n if (this.props.maxValueLifetime !== undefined) {\r\n if (this.props.maxValueLifetime === 0 || now - entry.created.getTime() > this.props.maxValueLifetime) {\r\n valuesToDispose.push(key);\r\n continue;\r\n }\r\n }\r\n if (this.props.unusedValueLifetime !== undefined) {\r\n if (this.props.unusedValueLifetime === 0 || now - entry.lastUsed.getTime() > this.props.unusedValueLifetime) {\r\n valuesToDispose.push(key);\r\n continue;\r\n }\r\n }\r\n }\r\n for (const id of valuesToDispose) {\r\n this.deleteExistingEntry(id, true);\r\n }\r\n };\r\n\r\n private deleteExistingEntry(id: string, isTimeout: boolean) {\r\n assert(this._values.has(id));\r\n this.props.cleanupHandler && this.props.cleanupHandler(id, this._values.get(id)!.value, isTimeout ? \"timeout\" : \"request\");\r\n this._values.delete(id);\r\n this.props.onDisposedSingle && this.props.onDisposedSingle(id);\r\n }\r\n\r\n /**\r\n * Get a value from the storage.\r\n *\r\n * **Note:** requesting a value with this method updates it's last used time.\r\n */\r\n public getValue(id: string): T | undefined {\r\n if (this._values.has(id)) {\r\n const v = this._values.get(id)!;\r\n v.lastUsed = new Date();\r\n return v.value;\r\n }\r\n return undefined;\r\n }\r\n\r\n public notifyValueUsed(id: string) {\r\n const entry = this._values.get(id);\r\n if (entry) {\r\n entry.lastUsed = new Date();\r\n }\r\n }\r\n\r\n /**\r\n * Adds a value into the storage.\r\n * @throws An error when trying to add a value with ID that's already stored in the storage.\r\n */\r\n public addValue(id: string, value: T) {\r\n if (this._values.has(id)) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `A value with given ID \"${id}\" already exists in this storage.`);\r\n }\r\n this._values.set(id, { value, created: new Date(), lastUsed: new Date() });\r\n }\r\n\r\n /** Deletes a value with given id. */\r\n public deleteValue(id: string) {\r\n if (this._values.has(id)) {\r\n this.deleteExistingEntry(id, false);\r\n }\r\n }\r\n\r\n /**\r\n * Get all values currently in this storage.\r\n *\r\n * **Note:** requesting values with this method **doesn't**\r\n * update their last used times.\r\n */\r\n public get values(): T[] {\r\n const values = new Array<T>();\r\n for (const v of this._values.values()) {\r\n values.push(v.value);\r\n }\r\n return values;\r\n }\r\n}\r\n\r\n/**\r\n * Configuration properties for [[FactoryBasedTemporaryStorage]].\r\n * @internal\r\n */\r\nexport interface FactoryBasedTemporaryStorageProps<T> extends TemporaryStorageProps<T> {\r\n /** A factory method that creates a stored value given it's identifier */\r\n factory: (id: string, onValueUsed: () => void) => T;\r\n}\r\n\r\n/**\r\n * Storage for values that get removed from it after being unused (not-requested\r\n * for a specified amount of time).\r\n *\r\n * @internal\r\n */\r\nexport class FactoryBasedTemporaryStorage<T> extends TemporaryStorage<T> {\r\n public override readonly props: FactoryBasedTemporaryStorageProps<T>;\r\n\r\n /**\r\n * Constructor. Creates the storage using supplied params.\r\n */\r\n constructor(props: FactoryBasedTemporaryStorageProps<T>) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n /**\r\n * Get a value from the storage. If the value with the specified id\r\n * doesn't exist, it gets created.\r\n *\r\n * **Note:** requesting a value with this method updates it's last used time.\r\n */\r\n public override getValue(id: string): T {\r\n const existingValue = super.getValue(id);\r\n if (existingValue) {\r\n return existingValue;\r\n }\r\n\r\n const value = this.props.factory(id, () => this.notifyValueUsed(id));\r\n this.addValue(id, value);\r\n return value;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/** @packageDocumentation\n * @module Core\n */\n\nimport { parse as parseVersion } from \"semver\";\nimport { IModelDb } from \"@itwin/core-backend\";\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { Diagnostics, DiagnosticsLogEntry, DiagnosticsOptions, InstanceKey } from \"@itwin/presentation-common\";\nimport { combineDiagnosticsSeverities, compareDiagnosticsSeverities } from \"@itwin/presentation-common/internal\";\n// @ts-ignore TS complains about `with` in CJS builds, but not ESM\nimport presentationStrings from \"@itwin/presentation-common/locales/en/Presentation.json\" with { type: \"json\" };\n\n/** @internal */\nexport function getLocalizedStringEN(key: string) {\n let result: object | string = presentationStrings;\n const [namespace, identifier] = key.split(\":\", 2);\n if (namespace !== \"Presentation\") {\n return key;\n }\n const keySteps = identifier.split(\".\");\n for (const keyStep of keySteps) {\n if (typeof result !== \"object\" || keyStep in result === false) {\n return key;\n }\n result = result[keyStep as keyof typeof result];\n }\n return typeof result === \"string\" ? result : key;\n}\n\n/** @internal */\nexport function getElementKey(imodel: IModelDb, id: Id64String): InstanceKey | undefined {\n const className = imodel.elements.tryGetElementProps(id)?.classFullName;\n return className ? { className, id } : undefined;\n}\n\n/** @internal */\nexport function normalizeVersion(version?: string) {\n if (version) {\n const parsedVersion = parseVersion(version, true);\n if (parsedVersion) {\n return `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\n }\n }\n return \"0.0.0\";\n}\n\n/**\n * A function that received request diagnostics and, optionally, request context.\n * @public\n */\nexport type BackendDiagnosticsHandler<TContext = any> = (logs: Diagnostics, requestContext?: TContext) => void;\n\n/**\n * Data structure for backend diagnostics options.\n * @public\n */\nexport interface BackendDiagnosticsOptions<TContext = any> extends DiagnosticsOptions {\n /**\n * An optional function to supply request context that'll be passed to [[handler]] when\n * it's called after the request is fulfilled.\n */\n requestContextSupplier?: () => TContext;\n\n /**\n * Request diagnostics handler function that is called after the request is fulfilled. The handler\n * receives request diagnostics as the first argument and, optionally, request context as the\n * second (see [[requestContextSupplier]]).\n */\n handler: BackendDiagnosticsHandler<TContext>;\n}\n\n/**\n * Data structure which contains backend diagnostics options.\n * @public\n */\nexport interface BackendDiagnosticsAttribute {\n /**\n * Backend diagnostics options.\n * @public\n */\n diagnostics?: BackendDiagnosticsOptions;\n}\n\n/** @internal */\nexport function combineDiagnosticsOptions(...options: Array<BackendDiagnosticsOptions | undefined>): DiagnosticsOptions | undefined {\n const combinedOptions: DiagnosticsOptions = {};\n options.forEach((d) => {\n if (!d) {\n return;\n }\n if (\n d.perf === true ||\n (typeof d.perf === \"object\" &&\n (!combinedOptions.perf || (typeof combinedOptions.perf === \"object\" && d.perf.minimumDuration < combinedOptions.perf.minimumDuration)))\n ) {\n combinedOptions.perf = d.perf;\n }\n const combinedDev = combineDiagnosticsSeverities(d.dev, combinedOptions.dev);\n if (combinedDev) {\n combinedOptions.dev = combinedDev;\n }\n const combinedEditor = combineDiagnosticsSeverities(d.editor, combinedOptions.editor);\n if (combinedEditor) {\n combinedOptions.editor = combinedEditor;\n }\n });\n return combinedOptions.dev || combinedOptions.editor || combinedOptions.perf ? combinedOptions : undefined;\n}\n\n/** @internal */\nexport function reportDiagnostics<TContext>(diagnostics: Diagnostics, options: BackendDiagnosticsOptions<TContext>, context?: TContext) {\n const stripped = diagnostics.logs ? stripDiagnostics(options, diagnostics.logs) : undefined;\n stripped && options.handler({ logs: stripped }, context);\n}\nfunction stripDiagnostics<TEntry extends DiagnosticsLogEntry>(options: DiagnosticsOptions, diagnostics: TEntry[]) {\n const stripped: TEntry[] = [];\n diagnostics.forEach((entry) => {\n if (DiagnosticsLogEntry.isScope(entry)) {\n const scopeLogs = stripDiagnostics(options, entry.logs ?? []);\n const strippedScope = { ...entry, logs: scopeLogs };\n if (!strippedScope.logs) {\n delete strippedScope.logs;\n }\n if (entry.duration !== undefined && (options.perf === true || (typeof options.perf === \"object\" && entry.duration >= options.perf.minimumDuration))) {\n stripped.push(strippedScope);\n } else if (scopeLogs) {\n delete strippedScope.duration;\n delete strippedScope.scopeCreateTimestamp;\n stripped.push(strippedScope);\n }\n } else {\n const matchesDevSeverity = entry.severity.dev && compareDiagnosticsSeverities(entry.severity.dev, options.dev) >= 0;\n const matchesEditorSeverity = entry.severity.editor && compareDiagnosticsSeverities(entry.severity.editor, options.editor) >= 0;\n if (matchesDevSeverity || matchesEditorSeverity) {\n stripped.push({ ...entry });\n }\n }\n });\n return stripped.length > 0 ? stripped : undefined;\n}\n"]}
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../src/presentation-backend/Utils.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable @typescript-eslint/ban-ts-comment */\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { parse as parseVersion } from \"semver\";\r\nimport { IModelDb } from \"@itwin/core-backend\";\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { Diagnostics, DiagnosticsLogEntry, DiagnosticsOptions, InstanceKey } from \"@itwin/presentation-common\";\r\nimport { combineDiagnosticsSeverities, compareDiagnosticsSeverities } from \"@itwin/presentation-common/internal\";\r\n// @ts-ignore TS complains about `with` in CJS builds, but not ESM\r\nimport presentationStrings from \"@itwin/presentation-common/locales/en/Presentation.json\" with { type: \"json\" };\r\n\r\n/** @internal */\r\nexport function getLocalizedStringEN(key: string) {\r\n let result: object | string = presentationStrings;\r\n const [namespace, identifier] = key.split(\":\", 2);\r\n if (namespace !== \"Presentation\") {\r\n return key;\r\n }\r\n const keySteps = identifier.split(\".\");\r\n for (const keyStep of keySteps) {\r\n if (typeof result !== \"object\" || keyStep in result === false) {\r\n return key;\r\n }\r\n result = result[keyStep as keyof typeof result];\r\n }\r\n return typeof result === \"string\" ? result : key;\r\n}\r\n\r\n/** @internal */\r\nexport function getElementKey(imodel: IModelDb, id: Id64String): InstanceKey | undefined {\r\n const className = imodel.elements.tryGetElementProps(id)?.classFullName;\r\n return className ? { className, id } : undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function normalizeVersion(version?: string) {\r\n if (version) {\r\n const parsedVersion = parseVersion(version, true);\r\n if (parsedVersion) {\r\n return `${parsedVersion.major}.${parsedVersion.minor}.${parsedVersion.patch}`;\r\n }\r\n }\r\n return \"0.0.0\";\r\n}\r\n\r\n/**\r\n * A function that received request diagnostics and, optionally, request context.\r\n * @public\r\n */\r\nexport type BackendDiagnosticsHandler<TContext = any> = (logs: Diagnostics, requestContext?: TContext) => void;\r\n\r\n/**\r\n * Data structure for backend diagnostics options.\r\n * @public\r\n */\r\nexport interface BackendDiagnosticsOptions<TContext = any> extends DiagnosticsOptions {\r\n /**\r\n * An optional function to supply request context that'll be passed to [[handler]] when\r\n * it's called after the request is fulfilled.\r\n */\r\n requestContextSupplier?: () => TContext;\r\n\r\n /**\r\n * Request diagnostics handler function that is called after the request is fulfilled. The handler\r\n * receives request diagnostics as the first argument and, optionally, request context as the\r\n * second (see [[requestContextSupplier]]).\r\n */\r\n handler: BackendDiagnosticsHandler<TContext>;\r\n}\r\n\r\n/**\r\n * Data structure which contains backend diagnostics options.\r\n * @public\r\n */\r\nexport interface BackendDiagnosticsAttribute {\r\n /**\r\n * Backend diagnostics options.\r\n * @public\r\n */\r\n diagnostics?: BackendDiagnosticsOptions;\r\n}\r\n\r\n/** @internal */\r\nexport function combineDiagnosticsOptions(...options: Array<BackendDiagnosticsOptions | undefined>): DiagnosticsOptions | undefined {\r\n const combinedOptions: DiagnosticsOptions = {};\r\n options.forEach((d) => {\r\n if (!d) {\r\n return;\r\n }\r\n if (\r\n d.perf === true ||\r\n (typeof d.perf === \"object\" &&\r\n (!combinedOptions.perf || (typeof combinedOptions.perf === \"object\" && d.perf.minimumDuration < combinedOptions.perf.minimumDuration)))\r\n ) {\r\n combinedOptions.perf = d.perf;\r\n }\r\n const combinedDev = combineDiagnosticsSeverities(d.dev, combinedOptions.dev);\r\n if (combinedDev) {\r\n combinedOptions.dev = combinedDev;\r\n }\r\n const combinedEditor = combineDiagnosticsSeverities(d.editor, combinedOptions.editor);\r\n if (combinedEditor) {\r\n combinedOptions.editor = combinedEditor;\r\n }\r\n });\r\n return combinedOptions.dev || combinedOptions.editor || combinedOptions.perf ? combinedOptions : undefined;\r\n}\r\n\r\n/** @internal */\r\nexport function reportDiagnostics<TContext>(diagnostics: Diagnostics, options: BackendDiagnosticsOptions<TContext>, context?: TContext) {\r\n const stripped = diagnostics.logs ? stripDiagnostics(options, diagnostics.logs) : undefined;\r\n stripped && options.handler({ logs: stripped }, context);\r\n}\r\nfunction stripDiagnostics<TEntry extends DiagnosticsLogEntry>(options: DiagnosticsOptions, diagnostics: TEntry[]) {\r\n const stripped: TEntry[] = [];\r\n diagnostics.forEach((entry) => {\r\n if (DiagnosticsLogEntry.isScope(entry)) {\r\n const scopeLogs = stripDiagnostics(options, entry.logs ?? []);\r\n const strippedScope = { ...entry, logs: scopeLogs };\r\n if (!strippedScope.logs) {\r\n delete strippedScope.logs;\r\n }\r\n if (entry.duration !== undefined && (options.perf === true || (typeof options.perf === \"object\" && entry.duration >= options.perf.minimumDuration))) {\r\n stripped.push(strippedScope);\r\n } else if (scopeLogs) {\r\n delete strippedScope.duration;\r\n delete strippedScope.scopeCreateTimestamp;\r\n stripped.push(strippedScope);\r\n }\r\n } else {\r\n const matchesDevSeverity = entry.severity.dev && compareDiagnosticsSeverities(entry.severity.dev, options.dev) >= 0;\r\n const matchesEditorSeverity = entry.severity.editor && compareDiagnosticsSeverities(entry.severity.editor, options.editor) >= 0;\r\n if (matchesDevSeverity || matchesEditorSeverity) {\r\n stripped.push({ ...entry });\r\n }\r\n }\r\n });\r\n return stripped.length > 0 ? stripped : undefined;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PresentationRulesDomain.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/PresentationRulesDomain.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sDAAqE;AACrE,sEAAwD;AAExD,gBAAgB;AAChB,MAAa,iBAAkB,SAAQ,qBAAM;IACpC,MAAM,KAAc,UAAU;QACnC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,uDAAuD;IAChD,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,sBAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,sBAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,4BAAa,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAZD,8CAYC;AAED,gBAAgB;AAChB,sBAAsB;AACtB,WAAiB,iBAAiB;IAChC,IAAY,QAEX;IAFD,WAAY,QAAQ;QAClB,iDAAqC,CAAA;IACvC,CAAC,EAFW,QAAQ,GAAR,0BAAQ,KAAR,0BAAQ,QAEnB;AACH,CAAC,EAJgB,iBAAiB,iCAAjB,iBAAiB,QAIjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { ClassRegistry, Schema, Schemas } from \"@itwin/core-backend\";\nimport * as RulesetElements from \"./RulesetElements.js\";\n\n/** @internal */\nexport class PresentationRules extends Schema {\n public static override get schemaName(): string {\n return \"PresentationRules\";\n }\n\n /** Registers this schema and it's elements' classes */\n public static registerSchema() {\n if (this !== Schemas.getRegisteredSchema(PresentationRules.schemaName)) {\n Schemas.registerSchema(PresentationRules);\n ClassRegistry.registerModule(RulesetElements, this);\n }\n }\n}\n\n/** @internal */\n/* c8 ignore next 5 */\nexport namespace PresentationRules {\n export enum CodeSpec {\n Ruleset = \"PresentationRules:Ruleset\",\n }\n}\n"]}
1
+ {"version":3,"file":"PresentationRulesDomain.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/PresentationRulesDomain.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sDAAqE;AACrE,sEAAwD;AAExD,gBAAgB;AAChB,MAAa,iBAAkB,SAAQ,qBAAM;IACpC,MAAM,KAAc,UAAU;QACnC,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,uDAAuD;IAChD,MAAM,CAAC,cAAc;QAC1B,IAAI,IAAI,KAAK,sBAAO,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;YACvE,sBAAO,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;YAC1C,4BAAa,CAAC,cAAc,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;CACF;AAZD,8CAYC;AAED,gBAAgB;AAChB,sBAAsB;AACtB,WAAiB,iBAAiB;IAChC,IAAY,QAEX;IAFD,WAAY,QAAQ;QAClB,iDAAqC,CAAA;IACvC,CAAC,EAFW,QAAQ,GAAR,0BAAQ,KAAR,0BAAQ,QAEnB;AACH,CAAC,EAJgB,iBAAiB,iCAAjB,iBAAiB,QAIjC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { ClassRegistry, Schema, Schemas } from \"@itwin/core-backend\";\r\nimport * as RulesetElements from \"./RulesetElements.js\";\r\n\r\n/** @internal */\r\nexport class PresentationRules extends Schema {\r\n public static override get schemaName(): string {\r\n return \"PresentationRules\";\r\n }\r\n\r\n /** Registers this schema and it's elements' classes */\r\n public static registerSchema() {\r\n if (this !== Schemas.getRegisteredSchema(PresentationRules.schemaName)) {\r\n Schemas.registerSchema(PresentationRules);\r\n ClassRegistry.registerModule(RulesetElements, this);\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\n/* c8 ignore next 5 */\r\nexport namespace PresentationRules {\r\n export enum CodeSpec {\r\n Ruleset = \"PresentationRules:Ruleset\",\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetElements.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/RulesetElements.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,sDAAkE;AAClE,oDAA0C;AAE1C,0CAA+C;AAC/C,6EAAiE;AAEjE,gBAAgB;AAChB,MAAa,OAAQ,SAAQ,gCAAiB;IAC5C;;OAEG;IACI,MAAM,KAAc,SAAS;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,OAAmB,EAAE,OAA4B;QACnG,IAAI,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,IAAI,IAAI,IAAA,2BAAgB,EAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,kBAAI,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,8CAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;YACzB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,0BA0BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { Id64String } from \"@itwin/core-bentley\";\nimport { DefinitionElement, IModelDb } from \"@itwin/core-backend\";\nimport { Code } from \"@itwin/core-common\";\nimport { Ruleset as PresentationRuleset } from \"@itwin/presentation-common\";\nimport { normalizeVersion } from \"../Utils.js\";\nimport { PresentationRules } from \"./PresentationRulesDomain.js\";\n\n/** @internal */\nexport class Ruleset extends DefinitionElement {\n /**\n * Name of the `Ruleset` element class.\n */\n public static override get className(): string {\n return \"Ruleset\";\n }\n\n /**\n * Generates a unique code for a ruleset\n * @param iModelDb DB the ruleset is supposed to be inserted into\n * @param modelId ID of a the model this ruleset should be created in\n * @param ruleset The ruleset code is being created for\n */\n public static createRulesetCode(iModelDb: IModelDb, modelId: Id64String, ruleset: PresentationRuleset) {\n let codeValue = ruleset.id;\n if (ruleset.version) {\n codeValue += `@${normalizeVersion(ruleset.version)}`;\n }\n\n return new Code({\n spec: iModelDb.codeSpecs.getByName(PresentationRules.CodeSpec.Ruleset).id,\n scope: modelId.toString(),\n value: codeValue,\n });\n }\n}\n"]}
1
+ {"version":3,"file":"RulesetElements.js","sourceRoot":"","sources":["../../../../src/presentation-backend/domain/RulesetElements.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAGH,sDAAkE;AAClE,oDAA0C;AAE1C,0CAA+C;AAC/C,6EAAiE;AAEjE,gBAAgB;AAChB,MAAa,OAAQ,SAAQ,gCAAiB;IAC5C;;OAEG;IACI,MAAM,KAAc,SAAS;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,iBAAiB,CAAC,QAAkB,EAAE,OAAmB,EAAE,OAA4B;QACnG,IAAI,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,SAAS,IAAI,IAAI,IAAA,2BAAgB,EAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,kBAAI,CAAC;YACd,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,8CAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACzE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;YACzB,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;CACF;AA1BD,0BA0BC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport { DefinitionElement, IModelDb } from \"@itwin/core-backend\";\r\nimport { Code } from \"@itwin/core-common\";\r\nimport { Ruleset as PresentationRuleset } from \"@itwin/presentation-common\";\r\nimport { normalizeVersion } from \"../Utils.js\";\r\nimport { PresentationRules } from \"./PresentationRulesDomain.js\";\r\n\r\n/** @internal */\r\nexport class Ruleset extends DefinitionElement {\r\n /**\r\n * Name of the `Ruleset` element class.\r\n */\r\n public static override get className(): string {\r\n return \"Ruleset\";\r\n }\r\n\r\n /**\r\n * Generates a unique code for a ruleset\r\n * @param iModelDb DB the ruleset is supposed to be inserted into\r\n * @param modelId ID of a the model this ruleset should be created in\r\n * @param ruleset The ruleset code is being created for\r\n */\r\n public static createRulesetCode(iModelDb: IModelDb, modelId: Id64String, ruleset: PresentationRuleset) {\r\n let codeValue = ruleset.id;\r\n if (ruleset.version) {\r\n codeValue += `@${normalizeVersion(ruleset.version)}`;\r\n }\r\n\r\n return new Code({\r\n spec: iModelDb.codeSpecs.getByName(PresentationRules.CodeSpec.Ruleset).id,\r\n scope: modelId.toString(),\r\n value: codeValue,\r\n });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-backend-internal.js","sourceRoot":"","sources":["../../src/presentation-backend-internal.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,yFAAyF;AACzF,qHAAqH;AAErH,gFAAyF;AAAhF,kIAAA,4BAA4B,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\n// WARNING: This barrel file exports internal APIs only for use by Presentation packages.\n// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.\n\nexport { _presentation_manager_detail } from \"./presentation-backend/InternalSymbols.js\";\n"]}
1
+ {"version":3,"file":"presentation-backend-internal.js","sourceRoot":"","sources":["../../src/presentation-backend-internal.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;;;AAEhG,yFAAyF;AACzF,qHAAqH;AAErH,gFAAyF;AAAhF,kIAAA,4BAA4B,OAAA","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n\r\n// WARNING: This barrel file exports internal APIs only for use by Presentation packages.\r\n// They should not be used outside of these packages. These APIs may be broken or removed at any time without notice.\r\n\r\nexport { _presentation_manager_detail } from \"./presentation-backend/InternalSymbols.js\";\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-backend.js","sourceRoot":"","sources":["../../src/presentation-backend.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,0EAAwJ;AAA7D,+GAAA,YAAY,OAAA;AACvG,wFAauD;AAZrD,4HAAA,kBAAkB,OAAA;AAWlB,6HAAA,mBAAmB,OAAA;AAIrB,gFAAwH;AAAnE,qHAAA,eAAe,OAAA;AAGpE;;;;;GAKG;AACH,4FAA6I;AAApI,6IAAA,iCAAiC,OAAA;AAAE,mJAAA,uCAAuC,OAAA;AAEnF,MAAM,+BAA+B,GAAG,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACzF,IAAK,UAAkB,CAAC,+BAA+B,CAAC,EAAE,CAAC;IACzD,4DAA4D;IAC5D,MAAM,cAAc,GAAI,UAAkB,CAAC,+BAA+B,CAAC,CAAC,KAAK,CAAC;IAElF,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,8EAA8E;QAC5E,yDAAyD;QACzD,8CAA8C;QAC9C,wDAAwD,CAC3D,CAAC;IAEF,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,8BAA8B;IAE9B,MAAM,KAAK,CAAC;AACd,CAAC;KAAM,CAAC;IACL,UAAkB,CAAC,+BAA+B,CAAC,GAAG;QACrD,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used for retrieving presentation data from iModels.\n */\nexport { PresentationProps, MultiManagerPresentationProps, SingleManagerPresentationProps, Presentation } from \"./presentation-backend/Presentation.js\";\nexport {\n HierarchyCacheMode,\n HierarchyCacheConfig,\n MemoryHierarchyCacheConfig,\n DiskHierarchyCacheConfig,\n HybridCacheConfig,\n ContentCacheConfig,\n PresentationManagerCachingConfig,\n UnitSystemFormat,\n MultiElementPropertiesResponse,\n PresentationAssetsRootConfig,\n PresentationManagerProps,\n PresentationManager,\n} from \"./presentation-backend/PresentationManager.js\";\nexport { RulesetManager } from \"./presentation-backend/RulesetManager.js\";\nexport { RulesetVariablesManager } from \"./presentation-backend/RulesetVariablesManager.js\";\nexport { RulesetInsertOptions, RulesetEmbedderProps, RulesetEmbedder } from \"./presentation-backend/RulesetEmbedder.js\";\nexport { BackendDiagnosticsHandler, BackendDiagnosticsOptions, BackendDiagnosticsAttribute } from \"./presentation-backend/Utils.js\";\n\n/**\n * @module Logging\n *\n * @docs-group-description Logging\n * Types related to logging in this package.\n */\nexport { PresentationBackendLoggerCategory, PresentationBackendNativeLoggerCategory } from \"./presentation-backend/BackendLoggerCategory.js\";\n\nconst globalSymbolPresentationBackend = Symbol.for(\"itwin.presentation.backend.globals\");\nif ((globalThis as any)[globalSymbolPresentationBackend]) {\n // Get the stack trace from when the module was first loaded\n const firstLoadStack = (globalThis as any)[globalSymbolPresentationBackend].stack;\n\n const error = new Error(\n \"Multiple @itwin/presentation-backend imports detected! This may happen if:\\n\" +\n \"- You have multiple versions of the package installed\\n\" +\n \"- Your bundling configuration is incorrect\\n\" +\n \"- You're importing from both ESM and CommonJS versions\",\n );\n\n /* eslint-disable no-console */\n console.error(\"Duplicate @itwin/presentation-backend import:\", error);\n console.error(\"First import occurred at:\", firstLoadStack);\n console.error(\"Current import occurred at:\", error.stack);\n /* eslint-enable no-console */\n\n throw error;\n} else {\n (globalThis as any)[globalSymbolPresentationBackend] = {\n stack: new Error().stack,\n };\n}"]}
1
+ {"version":3,"file":"presentation-backend.js","sourceRoot":"","sources":["../../src/presentation-backend.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG;;;;;GAKG;AACH,0EAAwJ;AAA7D,+GAAA,YAAY,OAAA;AACvG,wFAauD;AAZrD,4HAAA,kBAAkB,OAAA;AAWlB,6HAAA,mBAAmB,OAAA;AAIrB,gFAAwH;AAAnE,qHAAA,eAAe,OAAA;AAGpE;;;;;GAKG;AACH,4FAA6I;AAApI,6IAAA,iCAAiC,OAAA;AAAE,mJAAA,uCAAuC,OAAA;AAEnF,MAAM,+BAA+B,GAAG,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACzF,IAAK,UAAkB,CAAC,+BAA+B,CAAC,EAAE,CAAC;IACzD,4DAA4D;IAC5D,MAAM,cAAc,GAAI,UAAkB,CAAC,+BAA+B,CAAC,CAAC,KAAK,CAAC;IAElF,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,8EAA8E;QAC5E,yDAAyD;QACzD,8CAA8C;QAC9C,wDAAwD,CAC3D,CAAC;IAEF,+BAA+B;IAC/B,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,KAAK,CAAC,CAAC;IACtE,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,cAAc,CAAC,CAAC;IAC3D,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1D,8BAA8B;IAE9B,MAAM,KAAK,CAAC;AACd,CAAC;KAAM,CAAC;IACL,UAAkB,CAAC,+BAA+B,CAAC,GAAG;QACrD,KAAK,EAAE,IAAI,KAAK,EAAE,CAAC,KAAK;KACzB,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @module Core\r\n *\r\n * @docs-group-description Core\r\n * Common types used for retrieving presentation data from iModels.\r\n */\r\nexport { PresentationProps, MultiManagerPresentationProps, SingleManagerPresentationProps, Presentation } from \"./presentation-backend/Presentation.js\";\r\nexport {\r\n HierarchyCacheMode,\r\n HierarchyCacheConfig,\r\n MemoryHierarchyCacheConfig,\r\n DiskHierarchyCacheConfig,\r\n HybridCacheConfig,\r\n ContentCacheConfig,\r\n PresentationManagerCachingConfig,\r\n UnitSystemFormat,\r\n MultiElementPropertiesResponse,\r\n PresentationAssetsRootConfig,\r\n PresentationManagerProps,\r\n PresentationManager,\r\n} from \"./presentation-backend/PresentationManager.js\";\r\nexport { RulesetManager } from \"./presentation-backend/RulesetManager.js\";\r\nexport { RulesetVariablesManager } from \"./presentation-backend/RulesetVariablesManager.js\";\r\nexport { RulesetInsertOptions, RulesetEmbedderProps, RulesetEmbedder } from \"./presentation-backend/RulesetEmbedder.js\";\r\nexport { BackendDiagnosticsHandler, BackendDiagnosticsOptions, BackendDiagnosticsAttribute } from \"./presentation-backend/Utils.js\";\r\n\r\n/**\r\n * @module Logging\r\n *\r\n * @docs-group-description Logging\r\n * Types related to logging in this package.\r\n */\r\nexport { PresentationBackendLoggerCategory, PresentationBackendNativeLoggerCategory } from \"./presentation-backend/BackendLoggerCategory.js\";\r\n\r\nconst globalSymbolPresentationBackend = Symbol.for(\"itwin.presentation.backend.globals\");\r\nif ((globalThis as any)[globalSymbolPresentationBackend]) {\r\n // Get the stack trace from when the module was first loaded\r\n const firstLoadStack = (globalThis as any)[globalSymbolPresentationBackend].stack;\r\n\r\n const error = new Error(\r\n \"Multiple @itwin/presentation-backend imports detected! This may happen if:\\n\" +\r\n \"- You have multiple versions of the package installed\\n\" +\r\n \"- Your bundling configuration is incorrect\\n\" +\r\n \"- You're importing from both ESM and CommonJS versions\",\r\n );\r\n\r\n /* eslint-disable no-console */\r\n console.error(\"Duplicate @itwin/presentation-backend import:\", error);\r\n console.error(\"First import occurred at:\", firstLoadStack);\r\n console.error(\"Current import occurred at:\", error.stack);\r\n /* eslint-enable no-console */\r\n\r\n throw error;\r\n} else {\r\n (globalThis as any)[globalSymbolPresentationBackend] = {\r\n stack: new Error().stack,\r\n };\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BackendLoggerCategory.js","sourceRoot":"","sources":["../../../src/presentation-backend/BackendLoggerCategory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,CAAN,IAAY,iCAWX;AAXD,WAAY,iCAAiC;IAC3C,qEAAgC,CAAA;IAEhC,+FAA+F;IAC/F,qGAAgE,CAAA;IAEhE,mEAAmE;IACnE,qEAAgC,CAAA;IAEhC,mEAAmE;IACnE,qEAAgC,CAAA;AAClC,CAAC,EAXW,iCAAiC,KAAjC,iCAAiC,QAW5C;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,uCAuCX;AAvCD,WAAY,uCAAuC;IACjD,kEAAuB,CAAA;IACvB,8FAAmD,CAAA;IACnD,0GAA+D,CAAA;IAC/D,gHAAqE,CAAA;IAErE,4EAAiC,CAAA;IACjC,oGAAyD,CAAA;IACzD,wFAA6C,CAAA;IAC7C,mGAAwD,CAAA;IACxD,+GAAoE,CAAA;IACpE,4FAAiD,CAAA;IACjD,0FAA+C,CAAA;IAC/C,kHAAuE,CAAA;IACvE,0GAA+D,CAAA;IAC/D,wFAA6C,CAAA;IAC7C,8GAAmE,CAAA;IACnE,wGAA6D,CAAA;IAC7D,wGAA6D,CAAA;IAE7D,gEAAgE;IAChE,kHAAkH;IAClH,sGAA2D,CAAA;IAC3D,8FAA8F;IAC9F,oGAAyD,CAAA;IACzD,sGAAsG;IACtG,wGAA6D,CAAA;IAC7D,kHAAkH;IAClH,kHAAuE,CAAA;IACvE,0GAA0G;IAC1G,8GAAmE,CAAA;IACnE,gHAAgH;IAChH,0HAA+E,CAAA;IAC/E,oGAAoG;IACpG,sGAA2D,CAAA;IAC3D,qGAAqG;IACrG,sGAA2D,CAAA;IAC3D,+GAA+G;IAC/G,0HAA+E,CAAA;AACjF,CAAC,EAvCW,uCAAuC,KAAvC,uCAAuC,QAuClD","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 Logging\n */\n\n/**\n * Logger categories used by this package\n * @note All logger categories in this package start with the `presentation-backend` prefix.\n * @see [Logger]($bentley)\n * @public\n */\nexport enum PresentationBackendLoggerCategory {\n Package = \"presentation-backend\",\n\n /** The logger category used by the [[PresentationManager]] class and other related classes. */\n PresentationManager = \"presentation-backend.PresentationManager\",\n\n /** The logger category used by Presentation RPC implementation. */\n Rpc = \"presentation-backend.Rpc\",\n\n /** The logger category used by Presentation IPC implementation. */\n Ipc = \"presentation-backend.Ipc\",\n}\n\n/**\n * Logger categories used by this package\n * @note Logger categories used by the [[PresentationManager]] native addon.\n * @see [Logger]($bentley)\n * @public\n */\nexport enum PresentationBackendNativeLoggerCategory {\n ECObjects = \"ECObjects\",\n ECObjects_ECExpressions = \"ECObjects.ECExpressions\",\n ECObjects_ECExpressions_Parse = \"ECObjects.ECExpressions.Parse\",\n ECObjects_ECExpressions_Evaluate = \"ECObjects.ECExpressions.Evaluate\",\n\n ECPresentation = \"ECPresentation\",\n ECPresentation_Connections = \"ECPresentation.Connections\",\n ECPresentation_Tasks = \"ECPresentation.Tasks\",\n ECPresentation_Hierarchies = \"ECPresentation.Navigation\",\n ECPresentation_Hierarchies_Cache = \"ECPresentation.Navigation.Cache\",\n ECPresentation_Content = \"ECPresentation.Content\",\n ECPresentation_Update = \"ECPresentation.Update\",\n ECPresentation_Update_Hierarchies = \"ECPresentation.Update.Hierarchies\",\n ECPresentation_Update_Content = \"ECPresentation.Update.Content\",\n ECPresentation_Rules = \"ECPresentation.Rules\",\n ECPresentation_RulesetVariables = \"ECPresentation.RulesetVariables\",\n ECPresentation_ECExpressions = \"ECPresentation.ECExpressions\",\n ECPresentation_Serialization = \"ECPresentation.Serialization\",\n\n /* eslint-disable @typescript-eslint/no-duplicate-enum-values */\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. The logging namespace is not used anymore. */\n ECPresentation_Localization = \"ECPresentation.Localization\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation]] */\n ECPresentation_RulesEngine = \"ECPresentation.RulesEngine\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Content]] */\n ECPresentation_RulesEngine_Content = \"ECPresentation.Content\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. The logging namespace is not used anymore. */\n ECPresentation_RulesEngine_Localization = \"ECPresentation.Localization\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Hierarchies]] */\n ECPresentation_RulesEngine_Navigation = \"ECPresentation.Navigation\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Hierarchies_Cache]] */\n ECPresentation_RulesEngine_Navigation_Cache = \"ECPresentation.Navigation.Cache\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Tasks]] */\n ECPresentation_RulesEngine_Threads = \"ECPresentation.Tasks\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Update]] */\n ECPresentation_RulesEngine_Update = \"ECPresentation.Update\",\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_RulesetVariables]] */\n ECPresentation_RulesEngine_RulesetVariables = \"ECPresentation.RulesetVariables\",\n}\n"]}
1
+ {"version":3,"file":"BackendLoggerCategory.js","sourceRoot":"","sources":["../../../src/presentation-backend/BackendLoggerCategory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,CAAN,IAAY,iCAWX;AAXD,WAAY,iCAAiC;IAC3C,qEAAgC,CAAA;IAEhC,+FAA+F;IAC/F,qGAAgE,CAAA;IAEhE,mEAAmE;IACnE,qEAAgC,CAAA;IAEhC,mEAAmE;IACnE,qEAAgC,CAAA;AAClC,CAAC,EAXW,iCAAiC,KAAjC,iCAAiC,QAW5C;AAED;;;;;GAKG;AACH,MAAM,CAAN,IAAY,uCAuCX;AAvCD,WAAY,uCAAuC;IACjD,kEAAuB,CAAA;IACvB,8FAAmD,CAAA;IACnD,0GAA+D,CAAA;IAC/D,gHAAqE,CAAA;IAErE,4EAAiC,CAAA;IACjC,oGAAyD,CAAA;IACzD,wFAA6C,CAAA;IAC7C,mGAAwD,CAAA;IACxD,+GAAoE,CAAA;IACpE,4FAAiD,CAAA;IACjD,0FAA+C,CAAA;IAC/C,kHAAuE,CAAA;IACvE,0GAA+D,CAAA;IAC/D,wFAA6C,CAAA;IAC7C,8GAAmE,CAAA;IACnE,wGAA6D,CAAA;IAC7D,wGAA6D,CAAA;IAE7D,gEAAgE;IAChE,kHAAkH;IAClH,sGAA2D,CAAA;IAC3D,8FAA8F;IAC9F,oGAAyD,CAAA;IACzD,sGAAsG;IACtG,wGAA6D,CAAA;IAC7D,kHAAkH;IAClH,kHAAuE,CAAA;IACvE,0GAA0G;IAC1G,8GAAmE,CAAA;IACnE,gHAAgH;IAChH,0HAA+E,CAAA;IAC/E,oGAAoG;IACpG,sGAA2D,CAAA;IAC3D,qGAAqG;IACrG,sGAA2D,CAAA;IAC3D,+GAA+G;IAC/G,0HAA+E,CAAA;AACjF,CAAC,EAvCW,uCAAuC,KAAvC,uCAAuC,QAuClD","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Logging\r\n */\r\n\r\n/**\r\n * Logger categories used by this package\r\n * @note All logger categories in this package start with the `presentation-backend` prefix.\r\n * @see [Logger]($bentley)\r\n * @public\r\n */\r\nexport enum PresentationBackendLoggerCategory {\r\n Package = \"presentation-backend\",\r\n\r\n /** The logger category used by the [[PresentationManager]] class and other related classes. */\r\n PresentationManager = \"presentation-backend.PresentationManager\",\r\n\r\n /** The logger category used by Presentation RPC implementation. */\r\n Rpc = \"presentation-backend.Rpc\",\r\n\r\n /** The logger category used by Presentation IPC implementation. */\r\n Ipc = \"presentation-backend.Ipc\",\r\n}\r\n\r\n/**\r\n * Logger categories used by this package\r\n * @note Logger categories used by the [[PresentationManager]] native addon.\r\n * @see [Logger]($bentley)\r\n * @public\r\n */\r\nexport enum PresentationBackendNativeLoggerCategory {\r\n ECObjects = \"ECObjects\",\r\n ECObjects_ECExpressions = \"ECObjects.ECExpressions\",\r\n ECObjects_ECExpressions_Parse = \"ECObjects.ECExpressions.Parse\",\r\n ECObjects_ECExpressions_Evaluate = \"ECObjects.ECExpressions.Evaluate\",\r\n\r\n ECPresentation = \"ECPresentation\",\r\n ECPresentation_Connections = \"ECPresentation.Connections\",\r\n ECPresentation_Tasks = \"ECPresentation.Tasks\",\r\n ECPresentation_Hierarchies = \"ECPresentation.Navigation\",\r\n ECPresentation_Hierarchies_Cache = \"ECPresentation.Navigation.Cache\",\r\n ECPresentation_Content = \"ECPresentation.Content\",\r\n ECPresentation_Update = \"ECPresentation.Update\",\r\n ECPresentation_Update_Hierarchies = \"ECPresentation.Update.Hierarchies\",\r\n ECPresentation_Update_Content = \"ECPresentation.Update.Content\",\r\n ECPresentation_Rules = \"ECPresentation.Rules\",\r\n ECPresentation_RulesetVariables = \"ECPresentation.RulesetVariables\",\r\n ECPresentation_ECExpressions = \"ECPresentation.ECExpressions\",\r\n ECPresentation_Serialization = \"ECPresentation.Serialization\",\r\n\r\n /* eslint-disable @typescript-eslint/no-duplicate-enum-values */\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. The logging namespace is not used anymore. */\r\n ECPresentation_Localization = \"ECPresentation.Localization\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation]] */\r\n ECPresentation_RulesEngine = \"ECPresentation.RulesEngine\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Content]] */\r\n ECPresentation_RulesEngine_Content = \"ECPresentation.Content\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. The logging namespace is not used anymore. */\r\n ECPresentation_RulesEngine_Localization = \"ECPresentation.Localization\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Hierarchies]] */\r\n ECPresentation_RulesEngine_Navigation = \"ECPresentation.Navigation\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Hierarchies_Cache]] */\r\n ECPresentation_RulesEngine_Navigation_Cache = \"ECPresentation.Navigation.Cache\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Tasks]] */\r\n ECPresentation_RulesEngine_Threads = \"ECPresentation.Tasks\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_Update]] */\r\n ECPresentation_RulesEngine_Update = \"ECPresentation.Update\",\r\n /** @deprecated in 4.0 - will not be removed until after 2026-06-13. Use [[ECPresentation_RulesetVariables]] */\r\n ECPresentation_RulesEngine_RulesetVariables = \"ECPresentation.RulesetVariables\",\r\n}\r\n"]}
@@ -103,11 +103,11 @@ function getElementClassesFromIds(imodel, elementIds) {
103
103
  return range(0, elementIds.length / elementIdsBatchSize).pipe(mergeMap((batchIndex) => {
104
104
  const idsFrom = batchIndex * elementIdsBatchSize;
105
105
  const idsTo = Math.min(idsFrom + elementIdsBatchSize, elementIds.length);
106
- return from(imodel.createQueryReader(`
107
- SELECT ec_classname(e.ECClassId) className, GROUP_CONCAT(IdToHex(e.ECInstanceId)) ids
108
- FROM bis.Element e
109
- WHERE e.ECInstanceId IN (${elementIds.slice(idsFrom, idsTo).join(",")})
110
- GROUP BY e.ECClassId
106
+ return from(imodel.createQueryReader(`
107
+ SELECT ec_classname(e.ECClassId) className, GROUP_CONCAT(IdToHex(e.ECInstanceId)) ids
108
+ FROM bis.Element e
109
+ WHERE e.ECInstanceId IN (${elementIds.slice(idsFrom, idsTo).join(",")})
110
+ GROUP BY e.ECClassId
111
111
  `));
112
112
  }), map((row) => ({ className: row.className, ids: row.ids.split(",") })), groupBy(({ className }) => className), mergeMap((groups) => groups.pipe(reduce((acc, g) => {
113
113
  g.ids.forEach((id) => acc.ids.push(id));
@@ -119,10 +119,10 @@ function getElementClassesFromIds(imodel, elementIds) {
119
119
  }
120
120
  /** Given a list of full class names, get a stream of actual class names that have instances. */
121
121
  function getClassesWithInstances(imodel, fullClassNames) {
122
- return from(fullClassNames).pipe(mergeMap((fullClassName) => from(imodel.createQueryReader(`
123
- SELECT ec_classname(e.ECClassId, 's.c') className
124
- FROM ${getECSqlName(fullClassName)} e
125
- GROUP BY e.ECClassId
122
+ return from(fullClassNames).pipe(mergeMap((fullClassName) => from(imodel.createQueryReader(`
123
+ SELECT ec_classname(e.ECClassId, 's.c') className
124
+ FROM ${getECSqlName(fullClassName)} e
125
+ GROUP BY e.ECClassId
126
126
  `))), map((row) => row.className));
127
127
  }
128
128
  /**
@@ -169,15 +169,15 @@ export async function getElementsCount(db, classNames) {
169
169
  const classNameRegExp = new RegExp(/^[\w]+[.:][\w]+$/);
170
170
  const invalidName = classNames.find((name) => !name.match(classNameRegExp));
171
171
  if (invalidName) {
172
- throw new PresentationError(PresentationStatus.InvalidArgument, `Encountered invalid class name - ${invalidName}.
172
+ throw new PresentationError(PresentationStatus.InvalidArgument, `Encountered invalid class name - ${invalidName}.
173
173
  Valid class name formats: "<schema name or alias>.<class name>", "<schema name or alias>:<class name>"`);
174
174
  }
175
175
  return `e.ECClassId IS (${classNames.join(",")})`;
176
176
  })();
177
- const query = `
178
- SELECT COUNT(e.ECInstanceId) AS elementCount
179
- FROM bis.Element e
180
- ${whereClause ? `WHERE ${whereClause}` : ""}
177
+ const query = `
178
+ SELECT COUNT(e.ECInstanceId) AS elementCount
179
+ FROM bis.Element e
180
+ ${whereClause ? `WHERE ${whereClause}` : ""}
181
181
  `;
182
182
  for await (const row of db.createQueryReader(query)) {
183
183
  return row.elementCount;
@@ -1 +1 @@
1
- {"version":3,"file":"ElementPropertiesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/ElementPropertiesHelper.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 { bufferCount, defer, from, groupBy, map, mergeMap, Observable, ObservedValueOf, of, range, reduce } from \"rxjs\";\nimport { IModelDb } from \"@itwin/core-backend\";\nimport { Id64, Id64Array, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { QueryRowProxy } from \"@itwin/core-common\";\nimport {\n ContentDescriptorRequestOptions,\n ContentRequestOptions,\n Descriptor,\n Item,\n KeySet,\n PresentationError,\n PresentationStatus,\n Ruleset,\n RulesetVariable,\n} from \"@itwin/presentation-common\";\n\n/** @internal */\nexport function parseFullClassName(fullClassName: string): [string, string] {\n const [schemaName, className] = fullClassName.split(/[:\\.]/);\n return [schemaName, className];\n}\n\nfunction getECSqlName(fullClassName: string) {\n const [schemaName, className] = parseFullClassName(fullClassName);\n return `[${schemaName}].[${className}]`;\n}\n\n/** @internal */\nexport function getContentItemsObservableFromElementIds(\n imodel: IModelDb,\n contentDescriptorGetter: (\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\n ) => Promise<Descriptor | undefined>,\n contentSetGetter: (\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\n ) => Promise<Item[]>,\n elementIds: Id64String[],\n classParallelism: number,\n batchesParallelism: number,\n batchSize: number,\n): { itemBatches: Observable<{ descriptor: Descriptor; items: Item[] }>; count: Observable<number> } {\n return {\n itemBatches: getElementClassesFromIds(imodel, elementIds).pipe(\n mergeMap(\n ({ classFullName, ids }) =>\n getBatchedClassContentItems(\n classFullName,\n contentDescriptorGetter,\n contentSetGetter,\n () => createIdBatches(OrderedId64Iterable.sortArray(ids), batchSize),\n batchesParallelism,\n ),\n classParallelism,\n ),\n ),\n count: of(elementIds.length),\n };\n}\n\n/** @internal */\nexport function getContentItemsObservableFromClassNames(\n imodel: IModelDb,\n contentDescriptorGetter: (\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\n ) => Promise<Descriptor | undefined>,\n contentSetGetter: (\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\n ) => Promise<Item[]>,\n elementClasses: string[],\n classParallelism: number,\n batchesParallelism: number,\n batchSize: number,\n): { itemBatches: Observable<{ descriptor: Descriptor; items: Item[] }>; count: Observable<number> } {\n return {\n itemBatches: getClassesWithInstances(imodel, elementClasses).pipe(\n mergeMap(\n (classFullName) =>\n getBatchedClassContentItems(\n classFullName,\n contentDescriptorGetter,\n contentSetGetter,\n () => getBatchedClassElementIds(imodel, classFullName, batchSize),\n batchesParallelism,\n ),\n classParallelism,\n ),\n ),\n count: from(getElementsCount(imodel, elementClasses)),\n };\n}\n\nfunction getBatchedClassContentItems(\n classFullName: string,\n contentDescriptorGetter: (\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\n ) => Promise<Descriptor | undefined>,\n contentSetGetter: (\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\n ) => Promise<Item[]>,\n batcher: () => Observable<Array<{ from: Id64String; to: Id64String }>>,\n batchesParallelism: number,\n): Observable<{ descriptor: Descriptor; items: Item[] }> {\n return defer(async () => {\n const ruleset = createClassContentRuleset(classFullName);\n const keys = new KeySet();\n const descriptor = await contentDescriptorGetter({ rulesetOrId: ruleset, keys });\n if (!descriptor) {\n throw new PresentationError(PresentationStatus.Error, `Failed to get descriptor for class ${classFullName}`);\n }\n return { descriptor, keys, ruleset };\n }).pipe(\n // create elements' id batches\n mergeMap((x) => batcher().pipe(map((batch) => ({ ...x, batch })))),\n // request content for each batch, filter by IDs for performance\n mergeMap(\n ({ descriptor, keys, ruleset, batch }) =>\n defer(async () => {\n const filteringDescriptor = new Descriptor(descriptor);\n filteringDescriptor.instanceFilter = {\n selectClassName: classFullName,\n expression: createElementIdsECExpressionFilter(batch),\n };\n return contentSetGetter({\n rulesetOrId: ruleset,\n keys,\n descriptor: filteringDescriptor,\n });\n }).pipe(map((items) => ({ descriptor, items }))),\n batchesParallelism,\n ),\n );\n}\n\nfunction createElementIdsECExpressionFilter(batch: Array<{ from: Id64String; to: Id64String }>): string {\n let filter = \"\";\n function appendCondition(cond: string) {\n if (filter.length > 0) {\n filter += \" OR \";\n }\n filter += cond;\n }\n for (const item of batch) {\n if (item.from === item.to) {\n appendCondition(`this.ECInstanceId = ${item.from}`);\n } else {\n appendCondition(`this.ECInstanceId >= ${item.from} AND this.ECInstanceId <= ${item.to}`);\n }\n }\n return filter;\n}\n\nfunction createClassContentRuleset(fullClassName: string): Ruleset {\n const [schemaName, className] = parseFullClassName(fullClassName);\n return {\n id: `content/class-descriptor/${fullClassName}`,\n rules: [\n {\n ruleType: \"Content\",\n specifications: [\n {\n specType: \"ContentInstancesOfSpecificClasses\",\n classes: {\n schemaName,\n classNames: [className],\n arePolymorphic: false,\n },\n handlePropertiesPolymorphically: true,\n },\n ],\n },\n ],\n };\n}\n\n/** Given a list of element ids, group them by class name. */\nfunction getElementClassesFromIds(imodel: IModelDb, elementIds: string[]): Observable<{ classFullName: string; ids: Id64Array }> {\n const elementIdsBatchSize = 5000;\n return range(0, elementIds.length / elementIdsBatchSize).pipe(\n mergeMap((batchIndex) => {\n const idsFrom = batchIndex * elementIdsBatchSize;\n const idsTo = Math.min(idsFrom + elementIdsBatchSize, elementIds.length);\n return from(\n imodel.createQueryReader(\n `\n SELECT ec_classname(e.ECClassId) className, GROUP_CONCAT(IdToHex(e.ECInstanceId)) ids\n FROM bis.Element e\n WHERE e.ECInstanceId IN (${elementIds.slice(idsFrom, idsTo).join(\",\")})\n GROUP BY e.ECClassId\n `,\n ),\n );\n }),\n map((row: QueryRowProxy): { className: string; ids: Id64Array } => ({ className: row.className, ids: row.ids.split(\",\") })),\n groupBy(({ className }) => className),\n mergeMap((groups) =>\n groups.pipe(\n reduce<ObservedValueOf<typeof groups>, { classFullName: string; ids: Id64Array }>(\n (acc, g) => {\n g.ids.forEach((id) => acc.ids.push(id));\n return {\n classFullName: g.className,\n ids: acc.ids,\n };\n },\n { classFullName: \"\", ids: [] },\n ),\n ),\n ),\n );\n}\n\n/** Given a list of full class names, get a stream of actual class names that have instances. */\nfunction getClassesWithInstances(imodel: IModelDb, fullClassNames: string[]): Observable<string> {\n return from(fullClassNames).pipe(\n mergeMap((fullClassName) =>\n from(\n imodel.createQueryReader(\n `\n SELECT ec_classname(e.ECClassId, 's.c') className\n FROM ${getECSqlName(fullClassName)} e\n GROUP BY e.ECClassId\n `,\n ),\n ),\n ),\n map((row: QueryRowProxy): string => row.className),\n );\n}\n\n/**\n * Given a sorted list of ECInstanceIds and a batch size, create a stream of batches. Because the IDs won't necessarily\n * be sequential, a batch is defined a list of from-to pairs.\n * @internal\n */\nexport function createIdBatches(sortedIds: Id64String[], batchSize: number): Observable<Array<{ from: Id64String; to: Id64String }>> {\n return range(0, sortedIds.length / batchSize).pipe(\n map((batchIndex) => {\n const sequences = new Array<{ from: Id64String; to: Id64String }>();\n const startIndex = batchIndex * batchSize;\n const endIndex = Math.min((batchIndex + 1) * batchSize, sortedIds.length) - 1;\n let fromId = sortedIds[startIndex];\n let to = {\n id: sortedIds[startIndex],\n localId: Id64.getLocalId(sortedIds[startIndex]),\n };\n for (let i = startIndex + 1; i <= endIndex; ++i) {\n const currLocalId = Id64.getLocalId(sortedIds[i]);\n if (currLocalId !== to.localId + 1) {\n sequences.push({ from: fromId, to: sortedIds[i - 1] });\n fromId = sortedIds[i];\n }\n to = { id: sortedIds[i], localId: currLocalId };\n }\n sequences.push({ from: fromId, to: sortedIds[endIndex] });\n return sequences;\n }),\n );\n}\n\n/**\n * Query all ECInstanceIds from given class and stream from-to pairs that batch the items into batches of `batchSize` size.\n * @internal\n */\nexport function getBatchedClassElementIds(imodel: IModelDb, fullClassName: string, batchSize: number): Observable<Array<{ from: Id64String; to: Id64String }>> {\n return from(imodel.createQueryReader(`SELECT IdToHex(ECInstanceId) id FROM ${getECSqlName(fullClassName)} ORDER BY ECInstanceId`)).pipe(\n map((row): Id64String => row.id),\n bufferCount(batchSize),\n map((batch) => [{ from: batch[0], to: batch[batch.length - 1] }]),\n );\n}\n\n/** @internal */\nexport async function getElementsCount(db: IModelDb, classNames: string[]) {\n const whereClause = (() => {\n if (classNames === undefined || classNames.length === 0) {\n return undefined;\n }\n // check if list contains only valid class names\n const classNameRegExp = new RegExp(/^[\\w]+[.:][\\w]+$/);\n const invalidName = classNames.find((name) => !name.match(classNameRegExp));\n if (invalidName) {\n throw new PresentationError(\n PresentationStatus.InvalidArgument,\n `Encountered invalid class name - ${invalidName}.\n Valid class name formats: \"<schema name or alias>.<class name>\", \"<schema name or alias>:<class name>\"`,\n );\n }\n return `e.ECClassId IS (${classNames.join(\",\")})`;\n })();\n const query = `\n SELECT COUNT(e.ECInstanceId) AS elementCount\n FROM bis.Element e\n ${whereClause ? `WHERE ${whereClause}` : \"\"}\n `;\n for await (const row of db.createQueryReader(query)) {\n return row.elementCount;\n }\n return 0;\n}\n"]}
1
+ {"version":3,"file":"ElementPropertiesHelper.js","sourceRoot":"","sources":["../../../src/presentation-backend/ElementPropertiesHelper.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nimport { bufferCount, defer, from, groupBy, map, mergeMap, Observable, ObservedValueOf, of, range, reduce } from \"rxjs\";\r\nimport { IModelDb } from \"@itwin/core-backend\";\r\nimport { Id64, Id64Array, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { QueryRowProxy } from \"@itwin/core-common\";\r\nimport {\r\n ContentDescriptorRequestOptions,\r\n ContentRequestOptions,\r\n Descriptor,\r\n Item,\r\n KeySet,\r\n PresentationError,\r\n PresentationStatus,\r\n Ruleset,\r\n RulesetVariable,\r\n} from \"@itwin/presentation-common\";\r\n\r\n/** @internal */\r\nexport function parseFullClassName(fullClassName: string): [string, string] {\r\n const [schemaName, className] = fullClassName.split(/[:\\.]/);\r\n return [schemaName, className];\r\n}\r\n\r\nfunction getECSqlName(fullClassName: string) {\r\n const [schemaName, className] = parseFullClassName(fullClassName);\r\n return `[${schemaName}].[${className}]`;\r\n}\r\n\r\n/** @internal */\r\nexport function getContentItemsObservableFromElementIds(\r\n imodel: IModelDb,\r\n contentDescriptorGetter: (\r\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\r\n ) => Promise<Descriptor | undefined>,\r\n contentSetGetter: (\r\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\r\n ) => Promise<Item[]>,\r\n elementIds: Id64String[],\r\n classParallelism: number,\r\n batchesParallelism: number,\r\n batchSize: number,\r\n): { itemBatches: Observable<{ descriptor: Descriptor; items: Item[] }>; count: Observable<number> } {\r\n return {\r\n itemBatches: getElementClassesFromIds(imodel, elementIds).pipe(\r\n mergeMap(\r\n ({ classFullName, ids }) =>\r\n getBatchedClassContentItems(\r\n classFullName,\r\n contentDescriptorGetter,\r\n contentSetGetter,\r\n () => createIdBatches(OrderedId64Iterable.sortArray(ids), batchSize),\r\n batchesParallelism,\r\n ),\r\n classParallelism,\r\n ),\r\n ),\r\n count: of(elementIds.length),\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function getContentItemsObservableFromClassNames(\r\n imodel: IModelDb,\r\n contentDescriptorGetter: (\r\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\r\n ) => Promise<Descriptor | undefined>,\r\n contentSetGetter: (\r\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\r\n ) => Promise<Item[]>,\r\n elementClasses: string[],\r\n classParallelism: number,\r\n batchesParallelism: number,\r\n batchSize: number,\r\n): { itemBatches: Observable<{ descriptor: Descriptor; items: Item[] }>; count: Observable<number> } {\r\n return {\r\n itemBatches: getClassesWithInstances(imodel, elementClasses).pipe(\r\n mergeMap(\r\n (classFullName) =>\r\n getBatchedClassContentItems(\r\n classFullName,\r\n contentDescriptorGetter,\r\n contentSetGetter,\r\n () => getBatchedClassElementIds(imodel, classFullName, batchSize),\r\n batchesParallelism,\r\n ),\r\n classParallelism,\r\n ),\r\n ),\r\n count: from(getElementsCount(imodel, elementClasses)),\r\n };\r\n}\r\n\r\nfunction getBatchedClassContentItems(\r\n classFullName: string,\r\n contentDescriptorGetter: (\r\n partialProps: Pick<ContentDescriptorRequestOptions<IModelDb, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\">,\r\n ) => Promise<Descriptor | undefined>,\r\n contentSetGetter: (\r\n partialProps: Pick<ContentRequestOptions<IModelDb, Descriptor, KeySet, RulesetVariable>, \"rulesetOrId\" | \"keys\" | \"descriptor\">,\r\n ) => Promise<Item[]>,\r\n batcher: () => Observable<Array<{ from: Id64String; to: Id64String }>>,\r\n batchesParallelism: number,\r\n): Observable<{ descriptor: Descriptor; items: Item[] }> {\r\n return defer(async () => {\r\n const ruleset = createClassContentRuleset(classFullName);\r\n const keys = new KeySet();\r\n const descriptor = await contentDescriptorGetter({ rulesetOrId: ruleset, keys });\r\n if (!descriptor) {\r\n throw new PresentationError(PresentationStatus.Error, `Failed to get descriptor for class ${classFullName}`);\r\n }\r\n return { descriptor, keys, ruleset };\r\n }).pipe(\r\n // create elements' id batches\r\n mergeMap((x) => batcher().pipe(map((batch) => ({ ...x, batch })))),\r\n // request content for each batch, filter by IDs for performance\r\n mergeMap(\r\n ({ descriptor, keys, ruleset, batch }) =>\r\n defer(async () => {\r\n const filteringDescriptor = new Descriptor(descriptor);\r\n filteringDescriptor.instanceFilter = {\r\n selectClassName: classFullName,\r\n expression: createElementIdsECExpressionFilter(batch),\r\n };\r\n return contentSetGetter({\r\n rulesetOrId: ruleset,\r\n keys,\r\n descriptor: filteringDescriptor,\r\n });\r\n }).pipe(map((items) => ({ descriptor, items }))),\r\n batchesParallelism,\r\n ),\r\n );\r\n}\r\n\r\nfunction createElementIdsECExpressionFilter(batch: Array<{ from: Id64String; to: Id64String }>): string {\r\n let filter = \"\";\r\n function appendCondition(cond: string) {\r\n if (filter.length > 0) {\r\n filter += \" OR \";\r\n }\r\n filter += cond;\r\n }\r\n for (const item of batch) {\r\n if (item.from === item.to) {\r\n appendCondition(`this.ECInstanceId = ${item.from}`);\r\n } else {\r\n appendCondition(`this.ECInstanceId >= ${item.from} AND this.ECInstanceId <= ${item.to}`);\r\n }\r\n }\r\n return filter;\r\n}\r\n\r\nfunction createClassContentRuleset(fullClassName: string): Ruleset {\r\n const [schemaName, className] = parseFullClassName(fullClassName);\r\n return {\r\n id: `content/class-descriptor/${fullClassName}`,\r\n rules: [\r\n {\r\n ruleType: \"Content\",\r\n specifications: [\r\n {\r\n specType: \"ContentInstancesOfSpecificClasses\",\r\n classes: {\r\n schemaName,\r\n classNames: [className],\r\n arePolymorphic: false,\r\n },\r\n handlePropertiesPolymorphically: true,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n}\r\n\r\n/** Given a list of element ids, group them by class name. */\r\nfunction getElementClassesFromIds(imodel: IModelDb, elementIds: string[]): Observable<{ classFullName: string; ids: Id64Array }> {\r\n const elementIdsBatchSize = 5000;\r\n return range(0, elementIds.length / elementIdsBatchSize).pipe(\r\n mergeMap((batchIndex) => {\r\n const idsFrom = batchIndex * elementIdsBatchSize;\r\n const idsTo = Math.min(idsFrom + elementIdsBatchSize, elementIds.length);\r\n return from(\r\n imodel.createQueryReader(\r\n `\r\n SELECT ec_classname(e.ECClassId) className, GROUP_CONCAT(IdToHex(e.ECInstanceId)) ids\r\n FROM bis.Element e\r\n WHERE e.ECInstanceId IN (${elementIds.slice(idsFrom, idsTo).join(\",\")})\r\n GROUP BY e.ECClassId\r\n `,\r\n ),\r\n );\r\n }),\r\n map((row: QueryRowProxy): { className: string; ids: Id64Array } => ({ className: row.className, ids: row.ids.split(\",\") })),\r\n groupBy(({ className }) => className),\r\n mergeMap((groups) =>\r\n groups.pipe(\r\n reduce<ObservedValueOf<typeof groups>, { classFullName: string; ids: Id64Array }>(\r\n (acc, g) => {\r\n g.ids.forEach((id) => acc.ids.push(id));\r\n return {\r\n classFullName: g.className,\r\n ids: acc.ids,\r\n };\r\n },\r\n { classFullName: \"\", ids: [] },\r\n ),\r\n ),\r\n ),\r\n );\r\n}\r\n\r\n/** Given a list of full class names, get a stream of actual class names that have instances. */\r\nfunction getClassesWithInstances(imodel: IModelDb, fullClassNames: string[]): Observable<string> {\r\n return from(fullClassNames).pipe(\r\n mergeMap((fullClassName) =>\r\n from(\r\n imodel.createQueryReader(\r\n `\r\n SELECT ec_classname(e.ECClassId, 's.c') className\r\n FROM ${getECSqlName(fullClassName)} e\r\n GROUP BY e.ECClassId\r\n `,\r\n ),\r\n ),\r\n ),\r\n map((row: QueryRowProxy): string => row.className),\r\n );\r\n}\r\n\r\n/**\r\n * Given a sorted list of ECInstanceIds and a batch size, create a stream of batches. Because the IDs won't necessarily\r\n * be sequential, a batch is defined a list of from-to pairs.\r\n * @internal\r\n */\r\nexport function createIdBatches(sortedIds: Id64String[], batchSize: number): Observable<Array<{ from: Id64String; to: Id64String }>> {\r\n return range(0, sortedIds.length / batchSize).pipe(\r\n map((batchIndex) => {\r\n const sequences = new Array<{ from: Id64String; to: Id64String }>();\r\n const startIndex = batchIndex * batchSize;\r\n const endIndex = Math.min((batchIndex + 1) * batchSize, sortedIds.length) - 1;\r\n let fromId = sortedIds[startIndex];\r\n let to = {\r\n id: sortedIds[startIndex],\r\n localId: Id64.getLocalId(sortedIds[startIndex]),\r\n };\r\n for (let i = startIndex + 1; i <= endIndex; ++i) {\r\n const currLocalId = Id64.getLocalId(sortedIds[i]);\r\n if (currLocalId !== to.localId + 1) {\r\n sequences.push({ from: fromId, to: sortedIds[i - 1] });\r\n fromId = sortedIds[i];\r\n }\r\n to = { id: sortedIds[i], localId: currLocalId };\r\n }\r\n sequences.push({ from: fromId, to: sortedIds[endIndex] });\r\n return sequences;\r\n }),\r\n );\r\n}\r\n\r\n/**\r\n * Query all ECInstanceIds from given class and stream from-to pairs that batch the items into batches of `batchSize` size.\r\n * @internal\r\n */\r\nexport function getBatchedClassElementIds(imodel: IModelDb, fullClassName: string, batchSize: number): Observable<Array<{ from: Id64String; to: Id64String }>> {\r\n return from(imodel.createQueryReader(`SELECT IdToHex(ECInstanceId) id FROM ${getECSqlName(fullClassName)} ORDER BY ECInstanceId`)).pipe(\r\n map((row): Id64String => row.id),\r\n bufferCount(batchSize),\r\n map((batch) => [{ from: batch[0], to: batch[batch.length - 1] }]),\r\n );\r\n}\r\n\r\n/** @internal */\r\nexport async function getElementsCount(db: IModelDb, classNames: string[]) {\r\n const whereClause = (() => {\r\n if (classNames === undefined || classNames.length === 0) {\r\n return undefined;\r\n }\r\n // check if list contains only valid class names\r\n const classNameRegExp = new RegExp(/^[\\w]+[.:][\\w]+$/);\r\n const invalidName = classNames.find((name) => !name.match(classNameRegExp));\r\n if (invalidName) {\r\n throw new PresentationError(\r\n PresentationStatus.InvalidArgument,\r\n `Encountered invalid class name - ${invalidName}.\r\n Valid class name formats: \"<schema name or alias>.<class name>\", \"<schema name or alias>:<class name>\"`,\r\n );\r\n }\r\n return `e.ECClassId IS (${classNames.join(\",\")})`;\r\n })();\r\n const query = `\r\n SELECT COUNT(e.ECInstanceId) AS elementCount\r\n FROM bis.Element e\r\n ${whereClause ? `WHERE ${whereClause}` : \"\"}\r\n `;\r\n for await (const row of db.createQueryReader(query)) {\r\n return row.elementCount;\r\n }\r\n return 0;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"InternalSymbols.js","sourceRoot":"","sources":["../../../src/presentation-backend/InternalSymbols.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,yDAAyD;AACzD;;GAEG;AAEH,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,gDAAgD,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,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/* eslint-disable @typescript-eslint/naming-convention */\n/** @packageDocumentation\n * @module Core\n */\n\nfunction sym(name: string): string {\n return `${name}_presentation-backend_INTERNAL_ONLY_DO_NOT_USE`;\n}\n\nexport const _presentation_manager_detail = Symbol.for(sym(\"presentation_manager_detail\"));\n"]}
1
+ {"version":3,"file":"InternalSymbols.js","sourceRoot":"","sources":["../../../src/presentation-backend/InternalSymbols.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,yDAAyD;AACzD;;GAEG;AAEH,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,gDAAgD,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable @typescript-eslint/naming-convention */\r\n/** @packageDocumentation\r\n * @module Core\r\n */\r\n\r\nfunction sym(name: string): string {\r\n return `${name}_presentation-backend_INTERNAL_ONLY_DO_NOT_USE`;\r\n}\r\n\r\nexport const _presentation_manager_detail = Symbol.for(sym(\"presentation_manager_detail\"));\r\n"]}