@itwin/presentation-frontend 5.0.0-dev.9 → 5.0.0-dev.92

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 (147) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/lib/cjs/package.json +1 -0
  3. package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.d.ts +3 -3
  4. package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
  5. package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js +11 -9
  6. package/lib/cjs/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
  7. package/lib/cjs/presentation-frontend/Diagnostics.js.map +1 -1
  8. package/lib/cjs/presentation-frontend/FrontendLoggerCategory.js.map +1 -1
  9. package/lib/cjs/presentation-frontend/IpcRequestsHandler.d.ts +12 -3
  10. package/lib/cjs/presentation-frontend/IpcRequestsHandler.d.ts.map +1 -1
  11. package/lib/cjs/presentation-frontend/IpcRequestsHandler.js +7 -7
  12. package/lib/cjs/presentation-frontend/IpcRequestsHandler.js.map +1 -1
  13. package/lib/cjs/presentation-frontend/LocalizationHelper.d.ts +1 -1
  14. package/lib/cjs/presentation-frontend/LocalizationHelper.d.ts.map +1 -1
  15. package/lib/cjs/presentation-frontend/LocalizationHelper.js +7 -6
  16. package/lib/cjs/presentation-frontend/LocalizationHelper.js.map +1 -1
  17. package/lib/cjs/presentation-frontend/Presentation.d.ts +15 -5
  18. package/lib/cjs/presentation-frontend/Presentation.d.ts.map +1 -1
  19. package/lib/cjs/presentation-frontend/Presentation.js +30 -21
  20. package/lib/cjs/presentation-frontend/Presentation.js.map +1 -1
  21. package/lib/cjs/presentation-frontend/PresentationManager.d.ts +9 -6
  22. package/lib/cjs/presentation-frontend/PresentationManager.d.ts.map +1 -1
  23. package/lib/cjs/presentation-frontend/PresentationManager.js +55 -44
  24. package/lib/cjs/presentation-frontend/PresentationManager.js.map +1 -1
  25. package/lib/cjs/presentation-frontend/RulesetManager.js +2 -4
  26. package/lib/cjs/presentation-frontend/RulesetManager.js.map +1 -1
  27. package/lib/cjs/presentation-frontend/RulesetVariablesManager.d.ts +1 -1
  28. package/lib/cjs/presentation-frontend/RulesetVariablesManager.d.ts.map +1 -1
  29. package/lib/cjs/presentation-frontend/RulesetVariablesManager.js +4 -2
  30. package/lib/cjs/presentation-frontend/RulesetVariablesManager.js.map +1 -1
  31. package/lib/cjs/presentation-frontend/StreamedResponseGenerator.d.ts +1 -1
  32. package/lib/cjs/presentation-frontend/StreamedResponseGenerator.d.ts.map +1 -1
  33. package/lib/cjs/presentation-frontend/StreamedResponseGenerator.js +1 -0
  34. package/lib/cjs/presentation-frontend/StreamedResponseGenerator.js.map +1 -1
  35. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +6 -4
  36. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
  37. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +157 -142
  38. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
  39. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts +4 -5
  40. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
  41. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +27 -29
  42. package/lib/cjs/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
  43. package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.d.ts +3 -0
  44. package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.d.ts.map +1 -1
  45. package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js +8 -2
  46. package/lib/cjs/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
  47. package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts +2 -1
  48. package/lib/cjs/presentation-frontend/selection/ISelectionProvider.d.ts.map +1 -1
  49. package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js +1 -0
  50. package/lib/cjs/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
  51. package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts +5 -1
  52. package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
  53. package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js +3 -0
  54. package/lib/cjs/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
  55. package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts +8 -5
  56. package/lib/cjs/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
  57. package/lib/cjs/presentation-frontend/selection/SelectionHandler.js +35 -13
  58. package/lib/cjs/presentation-frontend/selection/SelectionHandler.js.map +1 -1
  59. package/lib/cjs/presentation-frontend/selection/SelectionHelper.d.ts +2 -0
  60. package/lib/cjs/presentation-frontend/selection/SelectionHelper.d.ts.map +1 -1
  61. package/lib/cjs/presentation-frontend/selection/SelectionHelper.js +3 -1
  62. package/lib/cjs/presentation-frontend/selection/SelectionHelper.js.map +1 -1
  63. package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts +31 -11
  64. package/lib/cjs/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
  65. package/lib/cjs/presentation-frontend/selection/SelectionManager.js +217 -112
  66. package/lib/cjs/presentation-frontend/selection/SelectionManager.js.map +1 -1
  67. package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts +5 -8
  68. package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.d.ts.map +1 -1
  69. package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js +6 -11
  70. package/lib/cjs/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
  71. package/lib/cjs/presentation-frontend.d.ts +15 -15
  72. package/lib/cjs/presentation-frontend.d.ts.map +1 -1
  73. package/lib/cjs/presentation-frontend.js +30 -29
  74. package/lib/cjs/presentation-frontend.js.map +1 -1
  75. package/lib/esm/presentation-frontend/ConnectivityInformationProvider.d.ts +3 -3
  76. package/lib/esm/presentation-frontend/ConnectivityInformationProvider.d.ts.map +1 -1
  77. package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js +11 -9
  78. package/lib/esm/presentation-frontend/ConnectivityInformationProvider.js.map +1 -1
  79. package/lib/esm/presentation-frontend/Diagnostics.js.map +1 -1
  80. package/lib/esm/presentation-frontend/FrontendLoggerCategory.js.map +1 -1
  81. package/lib/esm/presentation-frontend/IpcRequestsHandler.d.ts +12 -3
  82. package/lib/esm/presentation-frontend/IpcRequestsHandler.d.ts.map +1 -1
  83. package/lib/esm/presentation-frontend/IpcRequestsHandler.js +8 -8
  84. package/lib/esm/presentation-frontend/IpcRequestsHandler.js.map +1 -1
  85. package/lib/esm/presentation-frontend/LocalizationHelper.d.ts +1 -1
  86. package/lib/esm/presentation-frontend/LocalizationHelper.d.ts.map +1 -1
  87. package/lib/esm/presentation-frontend/LocalizationHelper.js +3 -2
  88. package/lib/esm/presentation-frontend/LocalizationHelper.js.map +1 -1
  89. package/lib/esm/presentation-frontend/Presentation.d.ts +15 -5
  90. package/lib/esm/presentation-frontend/Presentation.d.ts.map +1 -1
  91. package/lib/esm/presentation-frontend/Presentation.js +23 -14
  92. package/lib/esm/presentation-frontend/Presentation.js.map +1 -1
  93. package/lib/esm/presentation-frontend/PresentationManager.d.ts +9 -6
  94. package/lib/esm/presentation-frontend/PresentationManager.d.ts.map +1 -1
  95. package/lib/esm/presentation-frontend/PresentationManager.js +43 -32
  96. package/lib/esm/presentation-frontend/PresentationManager.js.map +1 -1
  97. package/lib/esm/presentation-frontend/RulesetManager.js +2 -4
  98. package/lib/esm/presentation-frontend/RulesetManager.js.map +1 -1
  99. package/lib/esm/presentation-frontend/RulesetVariablesManager.d.ts +1 -1
  100. package/lib/esm/presentation-frontend/RulesetVariablesManager.d.ts.map +1 -1
  101. package/lib/esm/presentation-frontend/RulesetVariablesManager.js +4 -2
  102. package/lib/esm/presentation-frontend/RulesetVariablesManager.js.map +1 -1
  103. package/lib/esm/presentation-frontend/StreamedResponseGenerator.d.ts +1 -1
  104. package/lib/esm/presentation-frontend/StreamedResponseGenerator.d.ts.map +1 -1
  105. package/lib/esm/presentation-frontend/StreamedResponseGenerator.js +1 -0
  106. package/lib/esm/presentation-frontend/StreamedResponseGenerator.js.map +1 -1
  107. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts +6 -4
  108. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.d.ts.map +1 -1
  109. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js +158 -143
  110. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesManager.js.map +1 -1
  111. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts +4 -5
  112. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.d.ts.map +1 -1
  113. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js +27 -29
  114. package/lib/esm/presentation-frontend/favorite-properties/FavoritePropertiesStorage.js.map +1 -1
  115. package/lib/esm/presentation-frontend/selection/HiliteSetProvider.d.ts +3 -0
  116. package/lib/esm/presentation-frontend/selection/HiliteSetProvider.d.ts.map +1 -1
  117. package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js +8 -2
  118. package/lib/esm/presentation-frontend/selection/HiliteSetProvider.js.map +1 -1
  119. package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts +2 -1
  120. package/lib/esm/presentation-frontend/selection/ISelectionProvider.d.ts.map +1 -1
  121. package/lib/esm/presentation-frontend/selection/ISelectionProvider.js +1 -0
  122. package/lib/esm/presentation-frontend/selection/ISelectionProvider.js.map +1 -1
  123. package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts +5 -1
  124. package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.d.ts.map +1 -1
  125. package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js +3 -0
  126. package/lib/esm/presentation-frontend/selection/SelectionChangeEvent.js.map +1 -1
  127. package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts +8 -5
  128. package/lib/esm/presentation-frontend/selection/SelectionHandler.d.ts.map +1 -1
  129. package/lib/esm/presentation-frontend/selection/SelectionHandler.js +35 -13
  130. package/lib/esm/presentation-frontend/selection/SelectionHandler.js.map +1 -1
  131. package/lib/esm/presentation-frontend/selection/SelectionHelper.d.ts +2 -0
  132. package/lib/esm/presentation-frontend/selection/SelectionHelper.d.ts.map +1 -1
  133. package/lib/esm/presentation-frontend/selection/SelectionHelper.js +3 -1
  134. package/lib/esm/presentation-frontend/selection/SelectionHelper.js.map +1 -1
  135. package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts +31 -11
  136. package/lib/esm/presentation-frontend/selection/SelectionManager.d.ts.map +1 -1
  137. package/lib/esm/presentation-frontend/selection/SelectionManager.js +203 -98
  138. package/lib/esm/presentation-frontend/selection/SelectionManager.js.map +1 -1
  139. package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts +5 -8
  140. package/lib/esm/presentation-frontend/selection/SelectionScopesManager.d.ts.map +1 -1
  141. package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js +6 -10
  142. package/lib/esm/presentation-frontend/selection/SelectionScopesManager.js.map +1 -1
  143. package/lib/esm/presentation-frontend.d.ts +15 -15
  144. package/lib/esm/presentation-frontend.d.ts.map +1 -1
  145. package/lib/esm/presentation-frontend.js +12 -15
  146. package/lib/esm/presentation-frontend.js.map +1 -1
  147. package/package.json +42 -42
@@ -12,9 +12,11 @@ const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const presentation_common_1 = require("@itwin/presentation-common");
13
13
  /** @internal */
14
14
  class RulesetVariablesManagerImpl {
15
+ _clientValues = new Map();
16
+ _rulesetId;
17
+ _ipcHandler;
18
+ onVariableChanged = new core_bentley_1.BeEvent();
15
19
  constructor(rulesetId, ipcHandler) {
16
- this._clientValues = new Map();
17
- this.onVariableChanged = new core_bentley_1.BeEvent();
18
20
  this._rulesetId = rulesetId;
19
21
  this._ipcHandler = ipcHandler;
20
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/RulesetVariablesManager.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, BeEvent, Id64, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { RulesetVariable, VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\r\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler\";\r\n\r\n/**\r\n * Presentation ruleset variables' registry.\r\n * @public\r\n */\r\nexport interface RulesetVariablesManager {\r\n /**\r\n * An event that is raised when variable changes.\r\n */\r\n onVariableChanged: BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => 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): Promise<string>;\r\n /**\r\n * Sets `string` variable value\r\n */\r\n setString(variableId: string, value: string): Promise<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): Promise<boolean>;\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n setBool(variableId: string, value: boolean): Promise<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): Promise<number>;\r\n /**\r\n * Sets `number` variable value\r\n */\r\n setInt(variableId: string, value: number): Promise<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): Promise<number[]>;\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n setInts(variableId: string, value: number[]): Promise<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): Promise<Id64String>;\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n setId64(variableId: string, value: Id64String): Promise<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): Promise<Id64String[]>;\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n setId64s(variableId: string, value: Id64String[]): Promise<void>;\r\n\r\n /** Unsets variable with given id. */\r\n unset(variableId: string): Promise<void>;\r\n\r\n /** Retrieves all variables.\r\n * @internal\r\n */\r\n getAllVariables(): RulesetVariable[];\r\n}\r\n\r\n/** @internal */\r\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\r\n private _clientValues = new Map<string, RulesetVariable>();\r\n private _rulesetId: string;\r\n private _ipcHandler?: IpcRequestsHandler;\r\n public onVariableChanged = new BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => void>();\r\n\r\n public constructor(rulesetId: string, ipcHandler?: IpcRequestsHandler) {\r\n this._rulesetId = rulesetId;\r\n this._ipcHandler = ipcHandler;\r\n }\r\n\r\n public getAllVariables(): RulesetVariable[] {\r\n const variables: RulesetVariable[] = [];\r\n for (const entry of this._clientValues) {\r\n variables.push(entry[1]);\r\n }\r\n return variables;\r\n }\r\n\r\n private changeValueType(variable: RulesetVariable, toType: VariableValueTypes): VariableValue | undefined {\r\n switch (toType) {\r\n case VariableValueTypes.Bool:\r\n switch (variable.type) {\r\n case VariableValueTypes.Int:\r\n return 0 !== variable.value;\r\n case VariableValueTypes.Id64:\r\n return Id64.isValidId64(variable.value);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Int:\r\n switch (variable.type) {\r\n case VariableValueTypes.Bool:\r\n return variable.value ? 1 : 0;\r\n case VariableValueTypes.Id64:\r\n return Id64.getUpperUint32(variable.value);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.IntArray:\r\n switch (variable.type) {\r\n case VariableValueTypes.Id64Array:\r\n return variable.value.map((id) => Id64.getUpperUint32(id));\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Id64:\r\n switch (variable.type) {\r\n case VariableValueTypes.Bool:\r\n return Id64.fromLocalAndBriefcaseIds(variable.value ? 1 : 0, 0);\r\n case VariableValueTypes.Int:\r\n return Id64.fromLocalAndBriefcaseIds(variable.value, 0);\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.Id64Array:\r\n switch (variable.type) {\r\n case VariableValueTypes.IntArray:\r\n return variable.value.map((int) => Id64.fromLocalAndBriefcaseIds(int, 0));\r\n default:\r\n return undefined;\r\n }\r\n case VariableValueTypes.String:\r\n switch (variable.type) {\r\n case VariableValueTypes.IntArray:\r\n case VariableValueTypes.Id64Array:\r\n return undefined;\r\n default:\r\n variable.value.toString();\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n private async getValue(id: string, type: VariableValueTypes): Promise<VariableValue | undefined> {\r\n const variable = this._clientValues.get(id);\r\n if (!variable) {\r\n return undefined;\r\n }\r\n if (variable.type !== type) {\r\n return this.changeValueType(variable, type);\r\n }\r\n return variable.value;\r\n }\r\n\r\n private async setValue(variable: RulesetVariable): Promise<void> {\r\n const oldVariable = this._clientValues.get(variable.id);\r\n if (oldVariable && variablesEqual(oldVariable, variable)) {\r\n return;\r\n }\r\n\r\n this._clientValues.set(variable.id, variable);\r\n if (this._ipcHandler) {\r\n await this._ipcHandler.setRulesetVariable({ rulesetId: this._rulesetId, variable });\r\n }\r\n\r\n this.onVariableChanged.raiseEvent(variable.id, oldVariable?.value, variable.value);\r\n }\r\n\r\n public async unset(variableId: string): Promise<void> {\r\n const variable = this._clientValues.get(variableId);\r\n if (variable === undefined) {\r\n return;\r\n }\r\n\r\n this._clientValues.delete(variable.id);\r\n if (this._ipcHandler) {\r\n await this._ipcHandler.unsetRulesetVariable({ rulesetId: this._rulesetId, variableId });\r\n }\r\n this.onVariableChanged.raiseEvent(variable.id, variable.value, undefined);\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 async getString(variableId: string): Promise<string> {\r\n return ((await this.getValue(variableId, VariableValueTypes.String)) as string) || \"\";\r\n }\r\n\r\n /**\r\n * Sets `string` variable value\r\n */\r\n public async setString(variableId: string, value: string): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getBool(variableId: string): Promise<boolean> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Bool)) as boolean) || false;\r\n }\r\n\r\n /**\r\n * Sets `boolean` variable value\r\n */\r\n public async setBool(variableId: string, value: boolean): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getInt(variableId: string): Promise<number> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Int)) as number) || 0;\r\n }\r\n\r\n /**\r\n * Sets `number` variable value\r\n */\r\n public async setInt(variableId: string, value: number): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getInts(variableId: string): Promise<number[]> {\r\n return ((await this.getValue(variableId, VariableValueTypes.IntArray)) as number[]) || [];\r\n }\r\n\r\n /**\r\n * Sets `number[]` variable value\r\n */\r\n public async setInts(variableId: string, value: number[]): Promise<void> {\r\n await this.setValue({ id: variableId, type: VariableValueTypes.IntArray, value: [...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 async getId64(variableId: string): Promise<Id64String> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Id64)) as Id64String) || Id64.invalid;\r\n }\r\n\r\n /**\r\n * Sets `Id64String` variable value\r\n */\r\n public async setId64(variableId: string, value: Id64String): Promise<void> {\r\n await this.setValue({ id: variableId, type: 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 async getId64s(variableId: string): Promise<Id64String[]> {\r\n return ((await this.getValue(variableId, VariableValueTypes.Id64Array)) as Id64String[]) || [];\r\n }\r\n\r\n /**\r\n * Sets `Id64String[]` variable value\r\n */\r\n public async setId64s(variableId: string, value: Id64String[]): Promise<void> {\r\n await this.setValue({ id: variableId, type: VariableValueTypes.Id64Array, value: [...OrderedId64Iterable.sortArray(value)] });\r\n }\r\n}\r\n\r\nfunction variablesEqual(lhs: RulesetVariable, rhs: RulesetVariable) {\r\n if (lhs.type !== rhs.type) {\r\n return false;\r\n }\r\n\r\n switch (lhs.type) {\r\n case VariableValueTypes.IntArray:\r\n case VariableValueTypes.Id64Array:\r\n assert(rhs.type === lhs.type);\r\n return arraysEqual(lhs.value, rhs.value);\r\n\r\n default:\r\n return lhs.value === rhs.value;\r\n }\r\n}\r\n\r\nfunction arraysEqual(lhs: any[], rhs: any[]) {\r\n if (lhs.length !== rhs.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < lhs.length; ++i) {\r\n if (lhs[i] !== rhs[i]) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\r\n"]}
1
+ {"version":3,"file":"RulesetVariablesManager.js","sourceRoot":"","sources":["../../../src/presentation-frontend/RulesetVariablesManager.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AAEH,sDAA6F;AAC7F,oEAAgG;AAkFhG,gBAAgB;AAChB,MAAa,2BAA2B;IAC9B,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;IACnD,UAAU,CAAS;IACnB,WAAW,CAAsB;IAClC,iBAAiB,GAAG,IAAI,sBAAO,EAA4G,CAAC;IAEnJ,YAAmB,SAAiB,EAAE,UAA+B;QACnE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAEM,eAAe;QACpB,MAAM,SAAS,GAAsB,EAAE,CAAC;QACxC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,eAAe,CAAC,QAAyB,EAAE,MAA0B;QAC3E,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,GAAG;wBACzB,OAAO,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC;oBAC9B,KAAK,wCAAkB,CAAC,IAAI;wBAC1B,OAAO,mBAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC1C;wBACE,OAAO,SAAS,CAAC;gBACrB,CAAC;YACH,KAAK,wCAAkB,CAAC,GAAG;gBACzB,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,IAAI;wBAC1B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,KAAK,wCAAkB,CAAC,IAAI;wBAC1B,OAAO,mBAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAC7C;wBACE,OAAO,SAAS,CAAC;gBACrB,CAAC;YACH,KAAK,wCAAkB,CAAC,QAAQ;gBAC9B,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,SAAS;wBAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,mBAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC7D;wBACE,OAAO,SAAS,CAAC;gBACrB,CAAC;YACH,KAAK,wCAAkB,CAAC,IAAI;gBAC1B,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,IAAI;wBAC1B,OAAO,mBAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAClE,KAAK,wCAAkB,CAAC,GAAG;wBACzB,OAAO,mBAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC1D;wBACE,OAAO,SAAS,CAAC;gBACrB,CAAC;YACH,KAAK,wCAAkB,CAAC,SAAS;gBAC/B,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,QAAQ;wBAC9B,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC5E;wBACE,OAAO,SAAS,CAAC;gBACrB,CAAC;YACH,KAAK,wCAAkB,CAAC,MAAM;gBAC5B,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACtB,KAAK,wCAAkB,CAAC,QAAQ,CAAC;oBACjC,KAAK,wCAAkB,CAAC,SAAS;wBAC/B,OAAO,SAAS,CAAC;oBACnB;wBACE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC9B,CAAC;QACL,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,EAAU,EAAE,IAAwB;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,QAAyB;QAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxD,IAAI,WAAW,IAAI,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC9C,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,UAAkB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,SAAS,CAAC,UAAkB;QACvC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,MAAM,CAAC,CAAY,IAAI,EAAE,CAAC;IACxF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,SAAS,CAAC,UAAkB,EAAE,KAAa;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB;QACrC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAC,CAAa,IAAI,KAAK,CAAC;IAC1F,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,KAAc;QACrD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,UAAkB;QACpC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,GAAG,CAAC,CAAY,IAAI,CAAC,CAAC;IACpF,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,KAAa;QACnD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB;QACrC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,QAAQ,CAAC,CAAc,IAAI,EAAE,CAAC;IAC5F,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,KAAe;QACtD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB;QACrC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,IAAI,CAAC,CAAgB,IAAI,mBAAI,CAAC,OAAO,CAAC;IACpG,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,UAAkB,EAAE,KAAiB;QACxD,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,OAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,wCAAkB,CAAC,SAAS,CAAC,CAAkB,IAAI,EAAE,CAAC;IACjG,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,KAAmB;QAC3D,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,wCAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,GAAG,kCAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAChI,CAAC;CACF;AAzMD,kEAyMC;AAED,SAAS,cAAc,CAAC,GAAoB,EAAE,GAAoB;IAChE,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,wCAAkB,CAAC,QAAQ,CAAC;QACjC,KAAK,wCAAkB,CAAC,SAAS;YAC/B,IAAA,qBAAM,EAAC,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAE3C;YACE,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,GAAU,EAAE,GAAU;IACzC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { assert, BeEvent, Id64, Id64String, OrderedId64Iterable } from \"@itwin/core-bentley\";\nimport { RulesetVariable, VariableValue, VariableValueTypes } from \"@itwin/presentation-common\";\nimport { IpcRequestsHandler } from \"./IpcRequestsHandler.js\";\n\n/**\n * Presentation ruleset variables' registry.\n * @public\n */\nexport interface RulesetVariablesManager {\n /**\n * An event that is raised when variable changes.\n */\n onVariableChanged: BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => 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): Promise<string>;\n /**\n * Sets `string` variable value\n */\n setString(variableId: string, value: string): Promise<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): Promise<boolean>;\n /**\n * Sets `boolean` variable value\n */\n setBool(variableId: string, value: boolean): Promise<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): Promise<number>;\n /**\n * Sets `number` variable value\n */\n setInt(variableId: string, value: number): Promise<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): Promise<number[]>;\n /**\n * Sets `number[]` variable value\n */\n setInts(variableId: string, value: number[]): Promise<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): Promise<Id64String>;\n /**\n * Sets `Id64String` variable value\n */\n setId64(variableId: string, value: Id64String): Promise<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): Promise<Id64String[]>;\n /**\n * Sets `Id64String[]` variable value\n */\n setId64s(variableId: string, value: Id64String[]): Promise<void>;\n\n /** Unsets variable with given id. */\n unset(variableId: string): Promise<void>;\n\n /** Retrieves all variables.\n * @internal\n */\n getAllVariables(): RulesetVariable[];\n}\n\n/** @internal */\nexport class RulesetVariablesManagerImpl implements RulesetVariablesManager {\n private _clientValues = new Map<string, RulesetVariable>();\n private _rulesetId: string;\n private _ipcHandler?: IpcRequestsHandler;\n public onVariableChanged = new BeEvent<(variableId: string, prevValue: VariableValue | undefined, currValue: VariableValue | undefined) => void>();\n\n public constructor(rulesetId: string, ipcHandler?: IpcRequestsHandler) {\n this._rulesetId = rulesetId;\n this._ipcHandler = ipcHandler;\n }\n\n public getAllVariables(): RulesetVariable[] {\n const variables: RulesetVariable[] = [];\n for (const entry of this._clientValues) {\n variables.push(entry[1]);\n }\n return variables;\n }\n\n private changeValueType(variable: RulesetVariable, toType: VariableValueTypes): VariableValue | undefined {\n switch (toType) {\n case VariableValueTypes.Bool:\n switch (variable.type) {\n case VariableValueTypes.Int:\n return 0 !== variable.value;\n case VariableValueTypes.Id64:\n return Id64.isValidId64(variable.value);\n default:\n return undefined;\n }\n case VariableValueTypes.Int:\n switch (variable.type) {\n case VariableValueTypes.Bool:\n return variable.value ? 1 : 0;\n case VariableValueTypes.Id64:\n return Id64.getUpperUint32(variable.value);\n default:\n return undefined;\n }\n case VariableValueTypes.IntArray:\n switch (variable.type) {\n case VariableValueTypes.Id64Array:\n return variable.value.map((id) => Id64.getUpperUint32(id));\n default:\n return undefined;\n }\n case VariableValueTypes.Id64:\n switch (variable.type) {\n case VariableValueTypes.Bool:\n return Id64.fromLocalAndBriefcaseIds(variable.value ? 1 : 0, 0);\n case VariableValueTypes.Int:\n return Id64.fromLocalAndBriefcaseIds(variable.value, 0);\n default:\n return undefined;\n }\n case VariableValueTypes.Id64Array:\n switch (variable.type) {\n case VariableValueTypes.IntArray:\n return variable.value.map((int) => Id64.fromLocalAndBriefcaseIds(int, 0));\n default:\n return undefined;\n }\n case VariableValueTypes.String:\n switch (variable.type) {\n case VariableValueTypes.IntArray:\n case VariableValueTypes.Id64Array:\n return undefined;\n default:\n variable.value.toString();\n }\n }\n return undefined;\n }\n\n private async getValue(id: string, type: VariableValueTypes): Promise<VariableValue | undefined> {\n const variable = this._clientValues.get(id);\n if (!variable) {\n return undefined;\n }\n if (variable.type !== type) {\n return this.changeValueType(variable, type);\n }\n return variable.value;\n }\n\n private async setValue(variable: RulesetVariable): Promise<void> {\n const oldVariable = this._clientValues.get(variable.id);\n if (oldVariable && variablesEqual(oldVariable, variable)) {\n return;\n }\n\n this._clientValues.set(variable.id, variable);\n if (this._ipcHandler) {\n await this._ipcHandler.setRulesetVariable({ rulesetId: this._rulesetId, variable });\n }\n\n this.onVariableChanged.raiseEvent(variable.id, oldVariable?.value, variable.value);\n }\n\n public async unset(variableId: string): Promise<void> {\n const variable = this._clientValues.get(variableId);\n if (variable === undefined) {\n return;\n }\n\n this._clientValues.delete(variable.id);\n if (this._ipcHandler) {\n await this._ipcHandler.unsetRulesetVariable({ rulesetId: this._rulesetId, variableId });\n }\n this.onVariableChanged.raiseEvent(variable.id, variable.value, undefined);\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 async getString(variableId: string): Promise<string> {\n return ((await this.getValue(variableId, VariableValueTypes.String)) as string) || \"\";\n }\n\n /**\n * Sets `string` variable value\n */\n public async setString(variableId: string, value: string): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getBool(variableId: string): Promise<boolean> {\n return ((await this.getValue(variableId, VariableValueTypes.Bool)) as boolean) || false;\n }\n\n /**\n * Sets `boolean` variable value\n */\n public async setBool(variableId: string, value: boolean): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getInt(variableId: string): Promise<number> {\n return ((await this.getValue(variableId, VariableValueTypes.Int)) as number) || 0;\n }\n\n /**\n * Sets `number` variable value\n */\n public async setInt(variableId: string, value: number): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getInts(variableId: string): Promise<number[]> {\n return ((await this.getValue(variableId, VariableValueTypes.IntArray)) as number[]) || [];\n }\n\n /**\n * Sets `number[]` variable value\n */\n public async setInts(variableId: string, value: number[]): Promise<void> {\n await this.setValue({ id: variableId, type: VariableValueTypes.IntArray, value: [...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 async getId64(variableId: string): Promise<Id64String> {\n return ((await this.getValue(variableId, VariableValueTypes.Id64)) as Id64String) || Id64.invalid;\n }\n\n /**\n * Sets `Id64String` variable value\n */\n public async setId64(variableId: string, value: Id64String): Promise<void> {\n await this.setValue({ id: variableId, type: 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 async getId64s(variableId: string): Promise<Id64String[]> {\n return ((await this.getValue(variableId, VariableValueTypes.Id64Array)) as Id64String[]) || [];\n }\n\n /**\n * Sets `Id64String[]` variable value\n */\n public async setId64s(variableId: string, value: Id64String[]): Promise<void> {\n await this.setValue({ id: variableId, type: VariableValueTypes.Id64Array, value: [...OrderedId64Iterable.sortArray(value)] });\n }\n}\n\nfunction variablesEqual(lhs: RulesetVariable, rhs: RulesetVariable) {\n if (lhs.type !== rhs.type) {\n return false;\n }\n\n switch (lhs.type) {\n case VariableValueTypes.IntArray:\n case VariableValueTypes.Id64Array:\n assert(rhs.type === lhs.type);\n return arraysEqual(lhs.value, rhs.value);\n\n default:\n return lhs.value === rhs.value;\n }\n}\n\nfunction arraysEqual(lhs: any[], rhs: any[]) {\n if (lhs.length !== rhs.length) {\n return false;\n }\n\n for (let i = 0; i < lhs.length; ++i) {\n if (lhs[i] !== rhs[i]) {\n return false;\n }\n }\n return true;\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { PagedResponse, PageOptions } from "@itwin/presentation-common";
2
- import { MultipleValuesRequestOptions } from "./PresentationManager";
2
+ import { MultipleValuesRequestOptions } from "./PresentationManager.js";
3
3
  /**
4
4
  * Properties for streaming the results.
5
5
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"StreamedResponseGenerator.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CAAC,KAAK,IAAI,4BAA4B,GAAG;IACjF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAC1F,CAAC;AAEF;;;;GAIG;AACH,qBAAa,yBAAyB,CAAC,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,8BAA8B,CAAC,kBAAkB,CAAC;IAEvF,0EAA0E;IAC7D,2BAA2B,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;IAQxH;;;OAGG;YACW,cAAc;IAM5B,OAAO,CAAC,iBAAiB;CA2F1B"}
1
+ {"version":3,"file":"StreamedResponseGenerator.d.ts","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAExE;;;GAGG;AACH,MAAM,MAAM,8BAA8B,CAAC,KAAK,IAAI,4BAA4B,GAAG;IACjF,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;CAC1F,CAAC;AAEF;;;;GAIG;AACH,qBAAa,yBAAyB,CAAC,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,8BAA8B,CAAC,kBAAkB,CAAC;IAEvF,0EAA0E;IAC7D,2BAA2B,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,qBAAqB,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC;IAQxH;;;OAGG;YACW,cAAc;IAM5B,OAAO,CAAC,iBAAiB;CA2F1B"}
@@ -14,6 +14,7 @@ const core_bentley_1 = require("@itwin/core-bentley");
14
14
  * @internal
15
15
  */
16
16
  class StreamedResponseGenerator {
17
+ _props;
17
18
  constructor(_props) {
18
19
  this._props = _props;
19
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"StreamedResponseGenerator.js","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.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\r\nimport { concat, concatAll, map, mergeMap, Observable, of, range, scan } from \"rxjs\";\r\nimport { eachValueFrom } from \"rxjs-for-await\";\r\nimport { SortedArray } from \"@itwin/core-bentley\";\r\nimport { PagedResponse, PageOptions } from \"@itwin/presentation-common\";\r\nimport { MultipleValuesRequestOptions } from \"./PresentationManager\";\r\n\r\n/**\r\n * Properties for streaming the results.\r\n * @internal\r\n */\r\nexport type StreamedResponseGeneratorProps<TItem> = MultipleValuesRequestOptions & {\r\n getBatch(page: Required<PageOptions>, requestIdx: number): Promise<PagedResponse<TItem>>;\r\n};\r\n\r\n/**\r\n * This class allows loading values in multiple parallel batches and return them either as an array or an async iterator.\r\n * Pages are prefetched in advanced according to the `parallelism` argument.\r\n * @internal\r\n */\r\nexport class StreamedResponseGenerator<TPagedResponseItem> {\r\n constructor(private readonly _props: StreamedResponseGeneratorProps<TPagedResponseItem>) {}\r\n\r\n /** Creates a response with the total item count and an async iterator. */\r\n public async createAsyncIteratorResponse(): Promise<{ total: number; items: AsyncIterableIterator<TPagedResponseItem> }> {\r\n const firstPage = await this.fetchFirstPage();\r\n return {\r\n total: firstPage.total,\r\n items: eachValueFrom(this.getRemainingPages(firstPage).pipe(concatAll())),\r\n };\r\n }\r\n\r\n /**\r\n * Fetches the first page.\r\n * This function has to be called in order to retrieve the total items count.\r\n */\r\n private async fetchFirstPage(): Promise<PagedResponse<TPagedResponseItem>> {\r\n const start = this._props.paging?.start ?? 0;\r\n const batchSize = this._props.batchSize ?? this._props.paging?.size ?? 0;\r\n return this._props.getBatch({ start, size: batchSize }, 0);\r\n }\r\n\r\n private getRemainingPages(firstPage: PagedResponse<TPagedResponseItem>): Observable<TPagedResponseItem[]> {\r\n const pageStart = this._props.paging?.start ?? 0;\r\n const maxParallelRequests = this._props.maxParallelRequests;\r\n const pageSize = this._props.paging?.size;\r\n const { total, items: firstPageItems } = firstPage;\r\n\r\n // If there are no items, return a single empty page.\r\n if (total === 0) {\r\n return of([]);\r\n }\r\n\r\n // If the response is empty, something went wrong.\r\n const receivedItemsLength = firstPage.items.length;\r\n if (!receivedItemsLength) {\r\n handleEmptyPageResult(pageStart, total);\r\n }\r\n\r\n const totalItemsToFetch = total - pageStart;\r\n if (receivedItemsLength === totalItemsToFetch) {\r\n return of(firstPageItems);\r\n }\r\n\r\n let itemsToFetch: number;\r\n let batchSize: number;\r\n if (pageSize) {\r\n itemsToFetch = Math.min(totalItemsToFetch, pageSize) - receivedItemsLength;\r\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, pageSize, receivedItemsLength);\r\n } else {\r\n itemsToFetch = totalItemsToFetch - receivedItemsLength;\r\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, receivedItemsLength);\r\n }\r\n\r\n const remainingBatches = Math.ceil(itemsToFetch / batchSize);\r\n\r\n // Return the first page and then stream the remaining ones.\r\n return concat(\r\n of(firstPage.items),\r\n range(1, remainingBatches).pipe(\r\n mergeMap(async (idx) => {\r\n const start = pageStart + idx * batchSize;\r\n const size = Math.min(total - start, batchSize);\r\n const page = await this._props.getBatch({ start, size }, idx);\r\n if (!page.items.length) {\r\n handleEmptyPageResult(start, total);\r\n }\r\n\r\n // Pass along the index, so that the items could be sorted.\r\n return { idx, items: page.items };\r\n }, maxParallelRequests),\r\n scan(\r\n // Collect the emitted pages an emit them in the correct order.\r\n (acc, value) => {\r\n let { lastEmitted } = acc;\r\n const { accumulatedBatches } = acc;\r\n const { idx } = value;\r\n\r\n // If current batch is not in order, put it in the accumulator\r\n if (idx - 1 !== lastEmitted) {\r\n accumulatedBatches.insert(value);\r\n return { lastEmitted, accumulatedBatches, itemsToEmit: [] };\r\n }\r\n\r\n // Collect all batches to emit in order.\r\n lastEmitted = idx;\r\n const batchesToEmit = [value];\r\n for (const batch of accumulatedBatches) {\r\n if (batch.idx - 1 !== lastEmitted) {\r\n break;\r\n }\r\n lastEmitted = batch.idx;\r\n batchesToEmit.push(batch);\r\n }\r\n\r\n // Remove batches to emit from the accumulator.\r\n for (const batch of batchesToEmit) {\r\n accumulatedBatches.remove(batch);\r\n }\r\n\r\n const itemsToEmit = batchesToEmit.flatMap((x) => x.items);\r\n return { lastEmitted, accumulatedBatches, itemsToEmit };\r\n },\r\n {\r\n lastEmitted: 0,\r\n accumulatedBatches: new SortedArray<{ idx: number; items: TPagedResponseItem[] }>((a, b) => a.idx - b.idx),\r\n itemsToEmit: new Array<TPagedResponseItem>(),\r\n },\r\n ),\r\n map(({ itemsToEmit }) => itemsToEmit),\r\n ),\r\n );\r\n }\r\n}\r\n\r\nfunction handleEmptyPageResult(pageStart: number, total: number) {\r\n if (pageStart >= total) {\r\n throw new Error(`Requested page with start index ${pageStart} is out of bounds. Total number of items: ${total}`);\r\n }\r\n throw new Error(\"Paged request returned non zero total count but no items\");\r\n}\r\n"]}
1
+ {"version":3,"file":"StreamedResponseGenerator.js","sourceRoot":"","sources":["../../../src/presentation-frontend/StreamedResponseGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n\nimport { concat, concatAll, map, mergeMap, Observable, of, range, scan } from \"rxjs\";\nimport { eachValueFrom } from \"rxjs-for-await\";\nimport { SortedArray } from \"@itwin/core-bentley\";\nimport { PagedResponse, PageOptions } from \"@itwin/presentation-common\";\nimport { MultipleValuesRequestOptions } from \"./PresentationManager.js\";\n\n/**\n * Properties for streaming the results.\n * @internal\n */\nexport type StreamedResponseGeneratorProps<TItem> = MultipleValuesRequestOptions & {\n getBatch(page: Required<PageOptions>, requestIdx: number): Promise<PagedResponse<TItem>>;\n};\n\n/**\n * This class allows loading values in multiple parallel batches and return them either as an array or an async iterator.\n * Pages are prefetched in advanced according to the `parallelism` argument.\n * @internal\n */\nexport class StreamedResponseGenerator<TPagedResponseItem> {\n constructor(private readonly _props: StreamedResponseGeneratorProps<TPagedResponseItem>) {}\n\n /** Creates a response with the total item count and an async iterator. */\n public async createAsyncIteratorResponse(): Promise<{ total: number; items: AsyncIterableIterator<TPagedResponseItem> }> {\n const firstPage = await this.fetchFirstPage();\n return {\n total: firstPage.total,\n items: eachValueFrom(this.getRemainingPages(firstPage).pipe(concatAll())),\n };\n }\n\n /**\n * Fetches the first page.\n * This function has to be called in order to retrieve the total items count.\n */\n private async fetchFirstPage(): Promise<PagedResponse<TPagedResponseItem>> {\n const start = this._props.paging?.start ?? 0;\n const batchSize = this._props.batchSize ?? this._props.paging?.size ?? 0;\n return this._props.getBatch({ start, size: batchSize }, 0);\n }\n\n private getRemainingPages(firstPage: PagedResponse<TPagedResponseItem>): Observable<TPagedResponseItem[]> {\n const pageStart = this._props.paging?.start ?? 0;\n const maxParallelRequests = this._props.maxParallelRequests;\n const pageSize = this._props.paging?.size;\n const { total, items: firstPageItems } = firstPage;\n\n // If there are no items, return a single empty page.\n if (total === 0) {\n return of([]);\n }\n\n // If the response is empty, something went wrong.\n const receivedItemsLength = firstPage.items.length;\n if (!receivedItemsLength) {\n handleEmptyPageResult(pageStart, total);\n }\n\n const totalItemsToFetch = total - pageStart;\n if (receivedItemsLength === totalItemsToFetch) {\n return of(firstPageItems);\n }\n\n let itemsToFetch: number;\n let batchSize: number;\n if (pageSize) {\n itemsToFetch = Math.min(totalItemsToFetch, pageSize) - receivedItemsLength;\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, pageSize, receivedItemsLength);\n } else {\n itemsToFetch = totalItemsToFetch - receivedItemsLength;\n batchSize = Math.min(this._props.batchSize ?? Number.MAX_SAFE_INTEGER, receivedItemsLength);\n }\n\n const remainingBatches = Math.ceil(itemsToFetch / batchSize);\n\n // Return the first page and then stream the remaining ones.\n return concat(\n of(firstPage.items),\n range(1, remainingBatches).pipe(\n mergeMap(async (idx) => {\n const start = pageStart + idx * batchSize;\n const size = Math.min(total - start, batchSize);\n const page = await this._props.getBatch({ start, size }, idx);\n if (!page.items.length) {\n handleEmptyPageResult(start, total);\n }\n\n // Pass along the index, so that the items could be sorted.\n return { idx, items: page.items };\n }, maxParallelRequests),\n scan(\n // Collect the emitted pages an emit them in the correct order.\n (acc, value) => {\n let { lastEmitted } = acc;\n const { accumulatedBatches } = acc;\n const { idx } = value;\n\n // If current batch is not in order, put it in the accumulator\n if (idx - 1 !== lastEmitted) {\n accumulatedBatches.insert(value);\n return { lastEmitted, accumulatedBatches, itemsToEmit: [] };\n }\n\n // Collect all batches to emit in order.\n lastEmitted = idx;\n const batchesToEmit = [value];\n for (const batch of accumulatedBatches) {\n if (batch.idx - 1 !== lastEmitted) {\n break;\n }\n lastEmitted = batch.idx;\n batchesToEmit.push(batch);\n }\n\n // Remove batches to emit from the accumulator.\n for (const batch of batchesToEmit) {\n accumulatedBatches.remove(batch);\n }\n\n const itemsToEmit = batchesToEmit.flatMap((x) => x.items);\n return { lastEmitted, accumulatedBatches, itemsToEmit };\n },\n {\n lastEmitted: 0,\n accumulatedBatches: new SortedArray<{ idx: number; items: TPagedResponseItem[] }>((a, b) => a.idx - b.idx),\n itemsToEmit: new Array<TPagedResponseItem>(),\n },\n ),\n map(({ itemsToEmit }) => itemsToEmit),\n ),\n );\n }\n}\n\nfunction handleEmptyPageResult(pageStart: number, total: number) {\n if (pageStart >= total) {\n throw new Error(`Requested page with start index ${pageStart} is out of bounds. Total number of items: ${total}`);\n }\n throw new Error(\"Paged request returned non zero total count but no items\");\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  /** @packageDocumentation
2
2
  * @module Core
3
3
  */
4
- import { BeEvent, IDisposable } from "@itwin/core-bentley";
4
+ import { BeEvent } from "@itwin/core-bentley";
5
5
  import { IModelConnection } from "@itwin/core-frontend";
6
6
  import { Field } from "@itwin/presentation-common";
7
- import { IFavoritePropertiesStorage } from "./FavoritePropertiesStorage";
7
+ import { IFavoritePropertiesStorage } from "./FavoritePropertiesStorage.js";
8
8
  /**
9
9
  * Scopes that favorite properties can be stored in.
10
10
  * @public
@@ -49,7 +49,7 @@ export interface FavoritePropertiesManagerProps {
49
49
  *
50
50
  * @public
51
51
  */
52
- export declare class FavoritePropertiesManager implements IDisposable {
52
+ export declare class FavoritePropertiesManager implements Disposable {
53
53
  /**
54
54
  * Used in tests to avoid collisions between multiple runs using the same storage
55
55
  * @internal
@@ -57,7 +57,7 @@ export declare class FavoritePropertiesManager implements IDisposable {
57
57
  static FAVORITES_IDENTIFIER_PREFIX: string;
58
58
  /** Event raised after favorite properties have changed. */
59
59
  onFavoritesChanged: BeEvent<() => void>;
60
- private _storage;
60
+ readonly storage: IFavoritePropertiesStorage;
61
61
  private _globalProperties;
62
62
  private _iTwinProperties;
63
63
  private _imodelProperties;
@@ -66,6 +66,8 @@ export declare class FavoritePropertiesManager implements IDisposable {
66
66
  /** Property order is saved only in iModel scope */
67
67
  private _propertiesOrder;
68
68
  constructor(props: FavoritePropertiesManagerProps);
69
+ [Symbol.dispose](): void;
70
+ /** @deprecated in 5.0 Use [Symbol.dispose] instead. */
69
71
  dispose(): void;
70
72
  /**
71
73
  * Initialize favorite properties for the provided IModelConnection.
@@ -1 +1 @@
1
- {"version":3,"file":"FavoritePropertiesManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FavoritePropertiesManager.d.ts","sourceRoot":"","sources":["../../../../src/presentation-frontend/favorite-properties/FavoritePropertiesManager.ts"],"names":[],"mappings":"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"}
@@ -27,139 +27,93 @@ var FavoritePropertiesScope;
27
27
  * @public
28
28
  */
29
29
  class FavoritePropertiesManager {
30
+ /**
31
+ * Used in tests to avoid collisions between multiple runs using the same storage
32
+ * @internal
33
+ */
34
+ static FAVORITES_IDENTIFIER_PREFIX = "";
35
+ /** Event raised after favorite properties have changed. */
36
+ onFavoritesChanged = new core_bentley_1.BeEvent();
37
+ storage;
38
+ _globalProperties;
39
+ _iTwinProperties;
40
+ _imodelProperties;
41
+ _imodelBaseClassesByClass;
42
+ _imodelInitializationPromises;
43
+ /** Property order is saved only in iModel scope */
44
+ _propertiesOrder;
30
45
  constructor(props) {
31
- /** Event raised after favorite properties have changed. */
32
- this.onFavoritesChanged = new core_bentley_1.BeEvent();
33
- /**
34
- * Initialize favorite properties for the provided IModelConnection.
35
- * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].
36
- */
37
- this.initializeConnection = async (imodel) => {
38
- const imodelId = imodel.iModelId;
39
- const iTwinId = imodel.iTwinId;
40
- if (this._globalProperties === undefined) {
41
- this._globalProperties = (await this._storage.loadProperties()) || new Set();
42
- }
43
- if (!this._iTwinProperties.has(iTwinId)) {
44
- const iTwinProperties = (await this._storage.loadProperties(iTwinId)) || new Set();
45
- this._iTwinProperties.set(iTwinId, iTwinProperties);
46
- }
47
- if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {
48
- const imodelProperties = (await this._storage.loadProperties(iTwinId, imodelId)) || new Set();
49
- this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);
50
- }
51
- const propertiesOrder = (await this._storage.loadPropertiesOrder(iTwinId, imodelId)) || [];
52
- this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);
53
- await this._adjustPropertyOrderInfos(iTwinId, imodelId);
54
- };
55
- /**
56
- * Function that removes order information of properties that are no longer
57
- * favorited and adds missing order information for favorited properties.
58
- */
59
- this._adjustPropertyOrderInfos = async (iTwinId, imodelId) => {
60
- const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
61
- const globalProperties = this._globalProperties;
62
- const iTwinProperties = this._iTwinProperties.get(iTwinId);
63
- const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
64
- // favorite property infos that need to be added to the propertiesOrder array
65
- const infosToAdd = new Set([...globalProperties, ...iTwinProperties, ...imodelProperties]);
66
- for (let i = propertiesOrder.length - 1; i >= 0; i--) {
67
- if (infosToAdd.has(propertiesOrder[i].name)) {
68
- infosToAdd.delete(propertiesOrder[i].name);
69
- }
70
- else {
71
- propertiesOrder.splice(i, 1);
72
- }
73
- }
74
- infosToAdd.forEach((info) => propertiesOrder.push({
75
- name: info,
76
- parentClassName: getPropertyClassName(info),
77
- orderedTimestamp: new Date(),
78
- priority: 0,
79
- }));
80
- let priority = propertiesOrder.length;
81
- propertiesOrder.forEach((oi) => (oi.priority = priority--));
82
- };
83
- /**
84
- * Sorts an array of fields with respect to favorite property order.
85
- * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
86
- * @param imodel IModelConnection.
87
- * @param fields Array of Field's that needs to be sorted.
88
- * @note `initializeConnection` must be called with the `imodel` before calling this function.
89
- * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].
90
- */
91
- this.sortFields = (imodel, fields) => {
92
- this.validateInitialization(imodel);
93
- const iTwinId = imodel.iTwinId;
94
- const imodelId = imodel.iModelId;
95
- const fieldPriority = new Map();
96
- fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));
97
- const sortFunction = (left, right) => {
98
- const lp = fieldPriority.get(left);
99
- const rp = fieldPriority.get(right);
100
- return lp < rp
101
- ? 1
102
- : lp > rp
103
- ? -1
104
- : left.priority < right.priority
105
- ? 1 // if favorite fields have equal priorities, sort by field priority
106
- : left.priority > right.priority
107
- ? -1
108
- : left.name.localeCompare(right.name);
109
- };
110
- return fields.sort(sortFunction);
111
- };
112
- this._getBaseClassesByClass = async (imodel, neededClasses) => {
113
- const iTwinId = imodel.iTwinId;
114
- const imodelId = imodel.iModelId;
115
- const imodelInfo = getiModelInfo(iTwinId, imodelId);
116
- let baseClasses;
117
- if (this._imodelBaseClassesByClass.has(imodelInfo)) {
118
- baseClasses = this._imodelBaseClassesByClass.get(imodelInfo);
119
- }
120
- else {
121
- this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));
122
- }
123
- const missingClasses = new Set();
124
- neededClasses.forEach((className) => {
125
- if (!baseClasses.hasOwnProperty(className)) {
126
- missingClasses.add(className);
127
- }
128
- });
129
- if (missingClasses.size === 0) {
130
- return baseClasses;
131
- }
132
- const query = `
133
- SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
134
- FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
135
- INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
136
- INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
137
- INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
138
- INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
139
- WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(",")})`;
140
- const reader = imodel.createQueryReader(query, undefined, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
141
- while (await reader.step()) {
142
- const row = reader.current.toRow();
143
- if (!(row.classFullName in baseClasses)) {
144
- baseClasses[row.classFullName] = [];
145
- }
146
- baseClasses[row.classFullName].push(row.baseClassFullName);
147
- }
148
- return baseClasses;
149
- };
150
- this._storage = props.storage;
46
+ this.storage = props.storage;
151
47
  this._iTwinProperties = new Map();
152
48
  this._imodelProperties = new Map();
153
49
  this._propertiesOrder = new Map();
154
50
  this._imodelBaseClassesByClass = new Map();
155
51
  this._imodelInitializationPromises = new Map();
156
52
  }
157
- dispose() {
158
- // istanbul ignore else
159
- if ((0, core_bentley_1.isIDisposable)(this._storage)) {
160
- this._storage.dispose();
53
+ [Symbol.dispose]() {
54
+ if ((0, core_bentley_1.isDisposable)(this.storage)) {
55
+ this.storage[Symbol.dispose]();
56
+ /* c8 ignore next 3 */
57
+ }
58
+ else if ((0, core_bentley_1.isIDisposable)(this.storage)) { /* eslint-disable-line @typescript-eslint/no-deprecated */
59
+ this.storage.dispose();
161
60
  }
162
61
  }
62
+ /** @deprecated in 5.0 Use [Symbol.dispose] instead. */
63
+ /* c8 ignore next 3 */
64
+ dispose() {
65
+ this[Symbol.dispose]();
66
+ }
67
+ /**
68
+ * Initialize favorite properties for the provided IModelConnection.
69
+ * @deprecated in 4.5. Initialization is performed automatically by all async methods and only needed for deprecated [[FavoritePropertiesManager.has]] and [[FavoritePropertiesManager.sortFields]].
70
+ */
71
+ initializeConnection = async (imodel) => {
72
+ const imodelId = imodel.iModelId;
73
+ const iTwinId = imodel.iTwinId;
74
+ if (this._globalProperties === undefined) {
75
+ this._globalProperties = (await this.storage.loadProperties()) || new Set();
76
+ }
77
+ if (!this._iTwinProperties.has(iTwinId)) {
78
+ const iTwinProperties = (await this.storage.loadProperties(iTwinId)) || new Set();
79
+ this._iTwinProperties.set(iTwinId, iTwinProperties);
80
+ }
81
+ if (!this._imodelProperties.has(getiModelInfo(iTwinId, imodelId))) {
82
+ const imodelProperties = (await this.storage.loadProperties(iTwinId, imodelId)) || new Set();
83
+ this._imodelProperties.set(getiModelInfo(iTwinId, imodelId), imodelProperties);
84
+ }
85
+ const propertiesOrder = (await this.storage.loadPropertiesOrder(iTwinId, imodelId)) || [];
86
+ this._propertiesOrder.set(getiModelInfo(iTwinId, imodelId), propertiesOrder);
87
+ await this._adjustPropertyOrderInfos(iTwinId, imodelId);
88
+ };
89
+ /**
90
+ * Function that removes order information of properties that are no longer
91
+ * favorited and adds missing order information for favorited properties.
92
+ */
93
+ _adjustPropertyOrderInfos = async (iTwinId, imodelId) => {
94
+ const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
95
+ const globalProperties = this._globalProperties;
96
+ const iTwinProperties = this._iTwinProperties.get(iTwinId);
97
+ const imodelProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
98
+ // favorite property infos that need to be added to the propertiesOrder array
99
+ const infosToAdd = new Set([...globalProperties, ...iTwinProperties, ...imodelProperties]);
100
+ for (let i = propertiesOrder.length - 1; i >= 0; i--) {
101
+ if (infosToAdd.has(propertiesOrder[i].name)) {
102
+ infosToAdd.delete(propertiesOrder[i].name);
103
+ }
104
+ else {
105
+ propertiesOrder.splice(i, 1);
106
+ }
107
+ }
108
+ infosToAdd.forEach((info) => propertiesOrder.push({
109
+ name: info,
110
+ parentClassName: getPropertyClassName(info),
111
+ orderedTimestamp: new Date(),
112
+ priority: 0,
113
+ }));
114
+ let priority = propertiesOrder.length;
115
+ propertiesOrder.forEach((oi) => (oi.priority = priority--));
116
+ };
163
117
  isInitialized(imodel) {
164
118
  const iTwinId = imodel.iTwinId;
165
119
  const imodelId = imodel.iModelId;
@@ -220,15 +174,15 @@ class FavoritePropertiesManager {
220
174
  switch (scope) {
221
175
  case FavoritePropertiesScope.Global:
222
176
  favoriteProperties = this._globalProperties;
223
- saveProperties = async (properties) => this._storage.saveProperties(properties);
177
+ saveProperties = async (properties) => this.storage.saveProperties(properties);
224
178
  break;
225
179
  case FavoritePropertiesScope.ITwin:
226
180
  favoriteProperties = this._iTwinProperties.get(iTwinId);
227
- saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId);
181
+ saveProperties = async (properties) => this.storage.saveProperties(properties, iTwinId);
228
182
  break;
229
183
  default:
230
184
  favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
231
- saveProperties = async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId);
185
+ saveProperties = async (properties) => this.storage.saveProperties(properties, iTwinId, imodelId);
232
186
  }
233
187
  const countBefore = favoriteProperties.size;
234
188
  const fieldInfos = (0, exports.getFieldInfos)(field);
@@ -238,7 +192,7 @@ class FavoritePropertiesManager {
238
192
  saves.push(saveProperties(favoriteProperties));
239
193
  const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
240
194
  addOrderInfos(propertiesOrder, (0, exports.createFieldOrderInfos)(field));
241
- saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
195
+ saves.push(this.storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
242
196
  await Promise.all(saves);
243
197
  this.onFavoritesChanged.raiseEvent();
244
198
  }
@@ -257,18 +211,18 @@ class FavoritePropertiesManager {
257
211
  const workingScopes = [];
258
212
  workingScopes.push({
259
213
  properties: this._globalProperties,
260
- save: async (properties) => this._storage.saveProperties(properties),
214
+ save: async (properties) => this.storage.saveProperties(properties),
261
215
  });
262
216
  if (scope === FavoritePropertiesScope.ITwin || scope === FavoritePropertiesScope.IModel) {
263
217
  workingScopes.push({
264
218
  properties: this._iTwinProperties.get(iTwinId),
265
- save: async (properties) => this._storage.saveProperties(properties, iTwinId),
219
+ save: async (properties) => this.storage.saveProperties(properties, iTwinId),
266
220
  });
267
221
  }
268
222
  if (scope === FavoritePropertiesScope.IModel) {
269
223
  workingScopes.push({
270
224
  properties: this._imodelProperties.get(getiModelInfo(iTwinId, imodelId)),
271
- save: async (properties) => this._storage.saveProperties(properties, iTwinId, imodelId),
225
+ save: async (properties) => this.storage.saveProperties(properties, iTwinId, imodelId),
272
226
  });
273
227
  }
274
228
  const saves = [];
@@ -286,7 +240,7 @@ class FavoritePropertiesManager {
286
240
  }
287
241
  const propertiesOrder = this._propertiesOrder.get(getiModelInfo(iTwinId, imodelId));
288
242
  removeOrderInfos(propertiesOrder, (0, exports.createFieldOrderInfos)(field));
289
- saves.push(this._storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
243
+ saves.push(this.storage.savePropertiesOrder(propertiesOrder, iTwinId, imodelId));
290
244
  await Promise.all(saves);
291
245
  this.onFavoritesChanged.raiseEvent();
292
246
  }
@@ -304,15 +258,15 @@ class FavoritePropertiesManager {
304
258
  switch (scope) {
305
259
  case FavoritePropertiesScope.Global:
306
260
  favoriteProperties = this._globalProperties;
307
- saveProperties = async () => this._storage.saveProperties(new Set());
261
+ saveProperties = async () => this.storage.saveProperties(new Set());
308
262
  break;
309
263
  case FavoritePropertiesScope.ITwin:
310
264
  favoriteProperties = this._iTwinProperties.get(iTwinId);
311
- saveProperties = async () => this._storage.saveProperties(new Set(), iTwinId);
265
+ saveProperties = async () => this.storage.saveProperties(new Set(), iTwinId);
312
266
  break;
313
267
  default:
314
268
  favoriteProperties = this._imodelProperties.get(getiModelInfo(iTwinId, imodelId));
315
- saveProperties = async () => this._storage.saveProperties(new Set(), iTwinId, imodelId);
269
+ saveProperties = async () => this.storage.saveProperties(new Set(), iTwinId, imodelId);
316
270
  }
317
271
  if (favoriteProperties.size === 0) {
318
272
  return;
@@ -352,6 +306,35 @@ class FavoritePropertiesManager {
352
306
  // eslint-disable-next-line @typescript-eslint/no-deprecated
353
307
  return this.has(field, imodel, scope);
354
308
  }
309
+ /**
310
+ * Sorts an array of fields with respect to favorite property order.
311
+ * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
312
+ * @param imodel IModelConnection.
313
+ * @param fields Array of Field's that needs to be sorted.
314
+ * @note `initializeConnection` must be called with the `imodel` before calling this function.
315
+ * @deprecated in 4.5. Use [[FavoritePropertiesManager.sortFieldsAsync]] instead. This method is not async, therefore it requires early initialization by calling [[FavoritePropertiesManager.initializeConnection]].
316
+ */
317
+ sortFields = (imodel, fields) => {
318
+ this.validateInitialization(imodel);
319
+ const iTwinId = imodel.iTwinId;
320
+ const imodelId = imodel.iModelId;
321
+ const fieldPriority = new Map();
322
+ fields.forEach((field) => fieldPriority.set(field, this.getFieldPriority(field, iTwinId, imodelId)));
323
+ const sortFunction = (left, right) => {
324
+ const lp = fieldPriority.get(left);
325
+ const rp = fieldPriority.get(right);
326
+ return lp < rp
327
+ ? 1
328
+ : lp > rp
329
+ ? -1
330
+ : left.priority < right.priority
331
+ ? 1 // if favorite fields have equal priorities, sort by field priority
332
+ : left.priority > right.priority
333
+ ? -1
334
+ : left.name.localeCompare(right.name);
335
+ };
336
+ return fields.sort(sortFunction);
337
+ };
355
338
  /**
356
339
  * Sorts an array of fields with respect to favorite property order.
357
340
  * Non-favorited fields get sorted by their default priority and always have lower priority than favorited fields.
@@ -372,6 +355,44 @@ class FavoritePropertiesManager {
372
355
  const mostRecent = getMostRecentOrderInfo(fieldOrderInfos);
373
356
  return mostRecent.priority;
374
357
  }
358
+ _getBaseClassesByClass = async (imodel, neededClasses) => {
359
+ const iTwinId = imodel.iTwinId;
360
+ const imodelId = imodel.iModelId;
361
+ const imodelInfo = getiModelInfo(iTwinId, imodelId);
362
+ let baseClasses;
363
+ if (this._imodelBaseClassesByClass.has(imodelInfo)) {
364
+ baseClasses = this._imodelBaseClassesByClass.get(imodelInfo);
365
+ }
366
+ else {
367
+ this._imodelBaseClassesByClass.set(imodelInfo, (baseClasses = {}));
368
+ }
369
+ const missingClasses = new Set();
370
+ neededClasses.forEach((className) => {
371
+ if (!baseClasses.hasOwnProperty(className)) {
372
+ missingClasses.add(className);
373
+ }
374
+ });
375
+ if (missingClasses.size === 0) {
376
+ return baseClasses;
377
+ }
378
+ const query = `
379
+ SELECT (derivedSchema.Name || ':' || derivedClass.Name) AS "ClassFullName", (baseSchema.Name || ':' || baseClass.Name) AS "BaseClassFullName"
380
+ FROM ECDbMeta.ClassHasAllBaseClasses baseClassRels
381
+ INNER JOIN ECDbMeta.ECClassDef derivedClass ON derivedClass.ECInstanceId = baseClassRels.SourceECInstanceId
382
+ INNER JOIN ECDbMeta.ECSchemaDef derivedSchema ON derivedSchema.ECInstanceId = derivedClass.Schema.Id
383
+ INNER JOIN ECDbMeta.ECClassDef baseClass ON baseClass.ECInstanceId = baseClassRels.TargetECInstanceId
384
+ INNER JOIN ECDbMeta.ECSchemaDef baseSchema ON baseSchema.ECInstanceId = baseClass.Schema.Id
385
+ WHERE (derivedSchema.Name || ':' || derivedClass.Name) IN (${[...missingClasses].map((className) => `'${className}'`).join(",")})`;
386
+ const reader = imodel.createQueryReader(query, undefined, { rowFormat: core_common_1.QueryRowFormat.UseJsPropertyNames });
387
+ while (await reader.step()) {
388
+ const row = reader.current.toRow();
389
+ if (!(row.classFullName in baseClasses)) {
390
+ baseClasses[row.classFullName] = [];
391
+ }
392
+ baseClasses[row.classFullName].push(row.baseClassFullName);
393
+ }
394
+ return baseClasses;
395
+ };
375
396
  /** Changes field properties priorities to lower than another fields priority
376
397
  * @param imodel IModelConnection.
377
398
  * @param field Field that priority is being changed.
@@ -481,16 +502,11 @@ class FavoritePropertiesManager {
481
502
  // reassign priority numbers
482
503
  let priority = allOrderInfos.length;
483
504
  allOrderInfos.forEach((oi) => (oi.priority = priority--));
484
- await this._storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);
505
+ await this.storage.savePropertiesOrder(allOrderInfos, iTwinId, imodelId);
485
506
  this.onFavoritesChanged.raiseEvent();
486
507
  }
487
508
  }
488
509
  exports.FavoritePropertiesManager = FavoritePropertiesManager;
489
- /**
490
- * Used in tests to avoid collisions between multiple runs using the same storage
491
- * @internal
492
- */
493
- FavoritePropertiesManager.FAVORITES_IDENTIFIER_PREFIX = "";
494
510
  var Direction;
495
511
  (function (Direction) {
496
512
  Direction[Direction["Up"] = -1] = "Up";
@@ -573,7 +589,6 @@ const addOrderInfos = (dest, source) => {
573
589
  const removeOrderInfos = (container, toRemove) => {
574
590
  toRemove.forEach((roi) => {
575
591
  const index = container.findIndex((oi) => oi.name === roi.name);
576
- /* istanbul ignore else */
577
592
  if (index >= 0) {
578
593
  container.splice(index, 1);
579
594
  }