@itwin/presentation-common 5.1.0-dev.9 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/CHANGELOG.md +91 -1
  2. package/Ruleset.schema.json +3 -3
  3. package/lib/assets/locales/en/Presentation.json +19 -19
  4. package/lib/cjs/presentation-common/AsyncTasks.js.map +1 -1
  5. package/lib/cjs/presentation-common/CommonLoggerCategory.js.map +1 -1
  6. package/lib/cjs/presentation-common/Diagnostics.js.map +1 -1
  7. package/lib/cjs/presentation-common/EC.d.ts.map +1 -1
  8. package/lib/cjs/presentation-common/EC.js +9 -2
  9. package/lib/cjs/presentation-common/EC.js.map +1 -1
  10. package/lib/cjs/presentation-common/ElementProperties.js +1 -0
  11. package/lib/cjs/presentation-common/ElementProperties.js.map +1 -1
  12. package/lib/cjs/presentation-common/Error.d.ts +1 -1
  13. package/lib/cjs/presentation-common/Error.js +1 -1
  14. package/lib/cjs/presentation-common/Error.js.map +1 -1
  15. package/lib/cjs/presentation-common/InstanceFilterDefinition.js.map +1 -1
  16. package/lib/cjs/presentation-common/KeySet.js.map +1 -1
  17. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.d.ts +24 -2
  18. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.d.ts.map +1 -1
  19. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.js +97 -104
  20. package/lib/cjs/presentation-common/KoqPropertyValueFormatter.js.map +1 -1
  21. package/lib/cjs/presentation-common/LabelDefinition.js.map +1 -1
  22. package/lib/cjs/presentation-common/LocalizationHelper.js.map +1 -1
  23. package/lib/cjs/presentation-common/PresentationIpcInterface.js.map +1 -1
  24. package/lib/cjs/presentation-common/PresentationManagerOptions.d.ts +3 -3
  25. package/lib/cjs/presentation-common/PresentationManagerOptions.js.map +1 -1
  26. package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts +19 -19
  27. package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
  28. package/lib/cjs/presentation-common/PresentationRpcInterface.js +17 -17
  29. package/lib/cjs/presentation-common/PresentationRpcInterface.js.map +1 -1
  30. package/lib/cjs/presentation-common/RegisteredRuleset.d.ts +1 -1
  31. package/lib/cjs/presentation-common/RegisteredRuleset.d.ts.map +1 -1
  32. package/lib/cjs/presentation-common/RegisteredRuleset.js +1 -1
  33. package/lib/cjs/presentation-common/RegisteredRuleset.js.map +1 -1
  34. package/lib/cjs/presentation-common/RpcRequestsHandler.js.map +1 -1
  35. package/lib/cjs/presentation-common/RulesetVariables.js.map +1 -1
  36. package/lib/cjs/presentation-common/RulesetsFactory.js.map +1 -1
  37. package/lib/cjs/presentation-common/Update.js.map +1 -1
  38. package/lib/cjs/presentation-common/Utils.js.map +1 -1
  39. package/lib/cjs/presentation-common/content/Category.js.map +1 -1
  40. package/lib/cjs/presentation-common/content/Content.js.map +1 -1
  41. package/lib/cjs/presentation-common/content/ContentTraverser.js.map +1 -1
  42. package/lib/cjs/presentation-common/content/Descriptor.js.map +1 -1
  43. package/lib/cjs/presentation-common/content/DisplayTypes.js.map +1 -1
  44. package/lib/cjs/presentation-common/content/Editor.js.map +1 -1
  45. package/lib/cjs/presentation-common/content/Fields.d.ts +14 -14
  46. package/lib/cjs/presentation-common/content/Fields.js +9 -9
  47. package/lib/cjs/presentation-common/content/Fields.js.map +1 -1
  48. package/lib/cjs/presentation-common/content/Item.d.ts +2 -2
  49. package/lib/cjs/presentation-common/content/Item.d.ts.map +1 -1
  50. package/lib/cjs/presentation-common/content/Item.js.map +1 -1
  51. package/lib/cjs/presentation-common/content/Property.js.map +1 -1
  52. package/lib/cjs/presentation-common/content/PropertyValueFormatter.js.map +1 -1
  53. package/lib/cjs/presentation-common/content/Renderer.js.map +1 -1
  54. package/lib/cjs/presentation-common/content/TypeDescription.js.map +1 -1
  55. package/lib/cjs/presentation-common/content/Value.d.ts +1 -1
  56. package/lib/cjs/presentation-common/content/Value.js.map +1 -1
  57. package/lib/cjs/presentation-common/hierarchy/HierarchyLevel.js.map +1 -1
  58. package/lib/cjs/presentation-common/hierarchy/Key.js.map +1 -1
  59. package/lib/cjs/presentation-common/hierarchy/Node.d.ts +1 -1
  60. package/lib/cjs/presentation-common/hierarchy/Node.js.map +1 -1
  61. package/lib/cjs/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  62. package/lib/cjs/presentation-common/rules/ClassSpecifications.js.map +1 -1
  63. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  64. package/lib/cjs/presentation-common/rules/RelationshipDirection.js.map +1 -1
  65. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  66. package/lib/cjs/presentation-common/rules/Rule.js.map +1 -1
  67. package/lib/cjs/presentation-common/rules/Ruleset.js.map +1 -1
  68. package/lib/cjs/presentation-common/rules/SchemasSpecification.js.map +1 -1
  69. package/lib/cjs/presentation-common/rules/Variables.js.map +1 -1
  70. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  71. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  72. package/lib/cjs/presentation-common/rules/content/ContentRule.js.map +1 -1
  73. package/lib/cjs/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  74. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  75. package/lib/cjs/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  76. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  77. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  78. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  79. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  80. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  81. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  82. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  83. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  84. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  85. package/lib/cjs/presentation-common/rules/customization/GroupingRule.d.ts +2 -2
  86. package/lib/cjs/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  87. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  88. package/lib/cjs/presentation-common/rules/customization/SortingRule.js.map +1 -1
  89. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  90. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  91. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +1 -1
  92. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  93. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  94. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  95. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  96. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  97. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  98. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  99. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  100. package/lib/cjs/presentation-common/selection/SelectionScope.d.ts +3 -3
  101. package/lib/cjs/presentation-common/selection/SelectionScope.js.map +1 -1
  102. package/lib/cjs/presentation-common-internal.js.map +1 -1
  103. package/lib/cjs/presentation-common.js.map +1 -1
  104. package/lib/esm/presentation-common/AsyncTasks.js.map +1 -1
  105. package/lib/esm/presentation-common/CommonLoggerCategory.js.map +1 -1
  106. package/lib/esm/presentation-common/Diagnostics.js.map +1 -1
  107. package/lib/esm/presentation-common/EC.d.ts.map +1 -1
  108. package/lib/esm/presentation-common/EC.js +9 -2
  109. package/lib/esm/presentation-common/EC.js.map +1 -1
  110. package/lib/esm/presentation-common/ElementProperties.js +1 -0
  111. package/lib/esm/presentation-common/ElementProperties.js.map +1 -1
  112. package/lib/esm/presentation-common/Error.d.ts +1 -1
  113. package/lib/esm/presentation-common/Error.js +1 -1
  114. package/lib/esm/presentation-common/Error.js.map +1 -1
  115. package/lib/esm/presentation-common/InstanceFilterDefinition.js.map +1 -1
  116. package/lib/esm/presentation-common/KeySet.js.map +1 -1
  117. package/lib/esm/presentation-common/KoqPropertyValueFormatter.d.ts +24 -2
  118. package/lib/esm/presentation-common/KoqPropertyValueFormatter.d.ts.map +1 -1
  119. package/lib/esm/presentation-common/KoqPropertyValueFormatter.js +97 -104
  120. package/lib/esm/presentation-common/KoqPropertyValueFormatter.js.map +1 -1
  121. package/lib/esm/presentation-common/LabelDefinition.js.map +1 -1
  122. package/lib/esm/presentation-common/LocalizationHelper.js.map +1 -1
  123. package/lib/esm/presentation-common/PresentationIpcInterface.js.map +1 -1
  124. package/lib/esm/presentation-common/PresentationManagerOptions.d.ts +3 -3
  125. package/lib/esm/presentation-common/PresentationManagerOptions.js.map +1 -1
  126. package/lib/esm/presentation-common/PresentationRpcInterface.d.ts +19 -19
  127. package/lib/esm/presentation-common/PresentationRpcInterface.d.ts.map +1 -1
  128. package/lib/esm/presentation-common/PresentationRpcInterface.js +17 -17
  129. package/lib/esm/presentation-common/PresentationRpcInterface.js.map +1 -1
  130. package/lib/esm/presentation-common/RegisteredRuleset.d.ts +1 -1
  131. package/lib/esm/presentation-common/RegisteredRuleset.d.ts.map +1 -1
  132. package/lib/esm/presentation-common/RegisteredRuleset.js +1 -1
  133. package/lib/esm/presentation-common/RegisteredRuleset.js.map +1 -1
  134. package/lib/esm/presentation-common/RpcRequestsHandler.js.map +1 -1
  135. package/lib/esm/presentation-common/RulesetVariables.js.map +1 -1
  136. package/lib/esm/presentation-common/RulesetsFactory.js.map +1 -1
  137. package/lib/esm/presentation-common/Update.js.map +1 -1
  138. package/lib/esm/presentation-common/Utils.js.map +1 -1
  139. package/lib/esm/presentation-common/content/Category.js.map +1 -1
  140. package/lib/esm/presentation-common/content/Content.js.map +1 -1
  141. package/lib/esm/presentation-common/content/ContentTraverser.js.map +1 -1
  142. package/lib/esm/presentation-common/content/Descriptor.js.map +1 -1
  143. package/lib/esm/presentation-common/content/DisplayTypes.js.map +1 -1
  144. package/lib/esm/presentation-common/content/Editor.js.map +1 -1
  145. package/lib/esm/presentation-common/content/Fields.d.ts +14 -14
  146. package/lib/esm/presentation-common/content/Fields.js +9 -9
  147. package/lib/esm/presentation-common/content/Fields.js.map +1 -1
  148. package/lib/esm/presentation-common/content/Item.d.ts +2 -2
  149. package/lib/esm/presentation-common/content/Item.d.ts.map +1 -1
  150. package/lib/esm/presentation-common/content/Item.js.map +1 -1
  151. package/lib/esm/presentation-common/content/Property.js.map +1 -1
  152. package/lib/esm/presentation-common/content/PropertyValueFormatter.js.map +1 -1
  153. package/lib/esm/presentation-common/content/Renderer.js.map +1 -1
  154. package/lib/esm/presentation-common/content/TypeDescription.js.map +1 -1
  155. package/lib/esm/presentation-common/content/Value.d.ts +1 -1
  156. package/lib/esm/presentation-common/content/Value.js.map +1 -1
  157. package/lib/esm/presentation-common/hierarchy/HierarchyLevel.js.map +1 -1
  158. package/lib/esm/presentation-common/hierarchy/Key.js.map +1 -1
  159. package/lib/esm/presentation-common/hierarchy/Node.d.ts +1 -1
  160. package/lib/esm/presentation-common/hierarchy/Node.js.map +1 -1
  161. package/lib/esm/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  162. package/lib/esm/presentation-common/rules/ClassSpecifications.js.map +1 -1
  163. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  164. package/lib/esm/presentation-common/rules/RelationshipDirection.js.map +1 -1
  165. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  166. package/lib/esm/presentation-common/rules/Rule.js.map +1 -1
  167. package/lib/esm/presentation-common/rules/Ruleset.js.map +1 -1
  168. package/lib/esm/presentation-common/rules/SchemasSpecification.js.map +1 -1
  169. package/lib/esm/presentation-common/rules/Variables.js.map +1 -1
  170. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  171. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  172. package/lib/esm/presentation-common/rules/content/ContentRule.js.map +1 -1
  173. package/lib/esm/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  174. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  175. package/lib/esm/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  176. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  177. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  178. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  179. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  180. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  181. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  182. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  183. package/lib/esm/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  184. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  185. package/lib/esm/presentation-common/rules/customization/GroupingRule.d.ts +2 -2
  186. package/lib/esm/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  187. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  188. package/lib/esm/presentation-common/rules/customization/SortingRule.js.map +1 -1
  189. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  190. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  191. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +1 -1
  192. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  193. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  194. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  195. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  196. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  197. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  198. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  199. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  200. package/lib/esm/presentation-common/selection/SelectionScope.d.ts +3 -3
  201. package/lib/esm/presentation-common/selection/SelectionScope.js.map +1 -1
  202. package/lib/esm/presentation-common-internal.js.map +1 -1
  203. package/lib/esm/presentation-common.js.map +1 -1
  204. package/lib/public/locales/en/Presentation.json +19 -19
  205. package/package.json +19 -14
@@ -1 +1 @@
1
- {"version":3,"file":"KeySet.js","sourceRoot":"","sources":["../../../src/presentation-common/KeySet.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 { CompressedId64Set, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { EntityProps } from \"@itwin/core-common\";\nimport { InstanceId, InstanceKey } from \"./EC.js\";\nimport { PresentationError, PresentationStatus } from \"./Error.js\";\nimport { NodeKey } from \"./hierarchy/Key.js\";\n\n/**\n * A single key that identifies something in an iTwin.js application\n * @public\n */\nexport type Key = Readonly<NodeKey> | Readonly<InstanceKey> | Readonly<EntityProps>;\n\n/** @public */\n// eslint-disable-next-line @typescript-eslint/no-redeclare\nexport namespace Key {\n /** Check if the supplied key is a `NodeKey` */\n export function isNodeKey(key: Key): key is NodeKey {\n return !!(key as NodeKey).type;\n }\n\n /** Check if the supplied key is an `InstanceKey` */\n export function isInstanceKey(key: Key): key is InstanceKey {\n return !!(key as InstanceKey).className && !!(key as InstanceKey).id;\n }\n\n /** Check if the supplied key is an `EntityProps` */\n export function isEntityProps(key: Key): key is EntityProps {\n return !!(key as EntityProps).classFullName && !!(key as EntityProps).id;\n }\n}\n\n/**\n * A type for multiple keys that identify something in iModel.js application\n * @public\n */\nexport type Keys = ReadonlyArray<Key> | Readonly<KeySet>;\n\n/**\n * A data structure of serialized [[KeySet]]\n * @public\n */\nexport interface KeySetJSON {\n /** JSON representation of a list of instance keys */\n instanceKeys: Array<[string, string]>;\n /** An array of serialized node keys */\n nodeKeys: NodeKey[];\n}\n\n/**\n * A class that holds multiple [[Key]] objects. It's basically\n * used as a container that holds multiple keys of different types.\n *\n * @public\n */\nexport class KeySet {\n // note: all keys are stored as strings because we need ability to find them by value\n private _instanceKeys: Map<string, Set<string>>; // lower case class name => instance ids\n private _lowerCaseMap: Map<string, string>; // lower case class name => most recent class name\n private _nodeKeys: Set<string>;\n private _guid!: GuidString;\n\n /**\n * Creates an instance of KeySet.\n * @param source Optional source to initialize from.\n */\n constructor(source?: Keys) {\n this._instanceKeys = new Map();\n this._lowerCaseMap = new Map();\n this._nodeKeys = new Set();\n this.recalculateGuid();\n if (source) {\n this.add(source);\n }\n }\n\n private recalculateGuid() {\n // empty keyset should have empty guid, otherwise use a random guid value\n this._guid = this.isEmpty ? Guid.empty : Guid.createValue();\n }\n\n /**\n * Get a GUID that identifies changes in this keyset. The value\n * does not uniquely identify contents of the keyset, but it can be\n * used to check whether keyset has changed.\n */\n public get guid(): GuidString {\n return this._guid;\n }\n\n /**\n * Get a map of instance keys stored in this KeySet\n *\n * **Warning**: getting instance keys might be expensive for\n * large KeySets.\n */\n public get instanceKeys(): Map<string, Set<InstanceId>> {\n const map = new Map<string, Set<InstanceId>>();\n for (const entry of this._instanceKeys) {\n map.set(this._lowerCaseMap.get(entry[\"0\"])!, new Set([...entry[\"1\"]].map((key: string) => Id64.fromJSON(key))));\n }\n return map;\n }\n\n /**\n * Get instance keys count\n */\n public get instanceKeysCount(): number {\n let count = 0;\n this._instanceKeys.forEach((set: Set<string>) => (count += set.size));\n return count;\n }\n\n /**\n * Get a set of node keys stored in this KeySet\n *\n * **Warning**: getting node keys might be expensive for\n * large KeySets.\n */\n public get nodeKeys(): Set<NodeKey> {\n const set = new Set<NodeKey>();\n for (const serialized of this._nodeKeys) {\n set.add(JSON.parse(serialized));\n }\n return set;\n }\n\n /**\n * Get node keys count\n */\n public get nodeKeysCount(): number {\n return this._nodeKeys.size;\n }\n\n private isKeySet(set: Keys | Key): set is Readonly<KeySet> {\n return !!(set as KeySet)._nodeKeys && !!(set as KeySet)._instanceKeys;\n }\n\n private isKeysArray(keys: Keys | Key): keys is ReadonlyArray<Key> {\n return Array.isArray(keys);\n }\n\n /**\n * Clear this KeySet.\n * @returns itself\n */\n public clear(): KeySet {\n if (this.isEmpty) {\n return this;\n }\n\n this._instanceKeys = new Map();\n this._lowerCaseMap = new Map();\n this._nodeKeys = new Set();\n this.recalculateGuid();\n return this;\n }\n\n private addKeySet(keyset: Readonly<KeySet>, pred?: (key: Key) => boolean): void {\n for (const key of (keyset as any)._nodeKeys) {\n if (!pred || pred(JSON.parse(key))) {\n this._nodeKeys.add(key);\n }\n }\n for (const entry of (keyset as any)._instanceKeys) {\n let set = this._instanceKeys.get(entry[\"0\"]);\n const className = (keyset as KeySet)._lowerCaseMap.get(entry[\"0\"])!;\n if (!set) {\n set = new Set();\n this._instanceKeys.set(entry[\"0\"], set);\n this._lowerCaseMap.set(entry[\"0\"], className);\n }\n entry[\"1\"].forEach((id: Id64String) => {\n if (!pred || pred({ className, id })) {\n set.add(id);\n }\n });\n }\n }\n\n private addKeySetJSON(keyset: Readonly<KeySetJSON>): void {\n for (const key of keyset.nodeKeys) {\n this._nodeKeys.add(JSON.stringify(key));\n }\n for (const entry of keyset.instanceKeys) {\n const normalizedClassName = normalizeClassName(entry[\"0\"]);\n const lcClassName = normalizedClassName.toLowerCase();\n const idsJson: string | Id64String[] = entry[\"1\"];\n const ids: Set<Id64String> =\n typeof idsJson === \"string\" ? (idsJson === Id64.invalid ? new Set([Id64.invalid]) : CompressedId64Set.decompressSet(idsJson)) : new Set(idsJson);\n this._instanceKeys.set(lcClassName, ids);\n this._lowerCaseMap.set(lcClassName, normalizedClassName);\n }\n }\n\n /**\n * Add a key or keys to this KeySet.\n * @param value A key or keys to add.\n * @param pred An optional predicate function that indicates whether a key should be added\n * @returns itself\n */\n public add(value: Keys | Key, pred?: (key: Key) => boolean): KeySet {\n if (!value) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\n }\n const sizeBefore = this.size;\n if (this.isKeySet(value)) {\n this.addKeySet(value, pred);\n } else if (this.isKeysArray(value)) {\n value.forEach((key) => this.add(key, pred));\n } else if (!pred || pred(value)) {\n if (Key.isEntityProps(value)) {\n this.add({ className: value.classFullName, id: Id64.fromJSON(value.id) } as InstanceKey);\n } else if (Key.isInstanceKey(value)) {\n const normalizedClassName = normalizeClassName(value.className);\n const lcClassName = normalizedClassName.toLowerCase();\n if (!this._instanceKeys.has(lcClassName)) {\n this._instanceKeys.set(lcClassName, new Set());\n }\n this._lowerCaseMap.set(lcClassName, normalizedClassName);\n this._instanceKeys.get(lcClassName)!.add(value.id);\n } else if (Key.isNodeKey(value)) {\n this._nodeKeys.add(JSON.stringify(value));\n } else {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\n }\n }\n if (this.size !== sizeBefore) {\n this.recalculateGuid();\n }\n return this;\n }\n\n private deleteKeySet(keyset: Readonly<KeySet>): void {\n for (const key of (keyset as any)._nodeKeys) {\n this._nodeKeys.delete(key);\n }\n for (const entry of (keyset as any)._instanceKeys) {\n const set = this._instanceKeys.get(entry[\"0\"]);\n if (set) {\n entry[\"1\"].forEach((key: string) => {\n set.delete(key);\n });\n }\n }\n }\n\n /**\n * Deletes a key or keys from this KeySet.\n * @param value A key or keys to delete.\n * @returns itself\n */\n public delete(value: Keys | Key): KeySet {\n if (!value) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\n }\n const sizeBefore = this.size;\n if (this.isKeySet(value)) {\n this.deleteKeySet(value);\n } else if (this.isKeysArray(value)) {\n for (const key of value) {\n this.delete(key);\n }\n } else if (Key.isEntityProps(value)) {\n this.delete({ className: value.classFullName, id: value.id! } as InstanceKey);\n } else if (Key.isInstanceKey(value)) {\n const normalizedClassName = normalizeClassName(value.className);\n const set = this._instanceKeys.get(normalizedClassName.toLowerCase());\n if (set) {\n set.delete(value.id);\n }\n } else if (Key.isNodeKey(value)) {\n this._nodeKeys.delete(JSON.stringify(value));\n } else {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\n }\n if (this.size !== sizeBefore) {\n this.recalculateGuid();\n }\n return this;\n }\n\n /**\n * Check if this KeySet contains the specified key.\n * @param value The key to check.\n */\n public has(value: Key): boolean {\n if (!value) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\n }\n if (Key.isEntityProps(value)) {\n return this.has({ className: value.classFullName, id: value.id! } as InstanceKey);\n }\n if (Key.isInstanceKey(value)) {\n const normalizedClassName = normalizeClassName(value.className);\n const set = this._instanceKeys.get(normalizedClassName.toLowerCase());\n return !!(set && set.has(value.id));\n }\n if (Key.isNodeKey(value)) {\n return this._nodeKeys.has(JSON.stringify(value));\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\n }\n\n private hasKeySet(readonlyKeys: Readonly<KeySet>, checkType: \"all\" | \"any\"): boolean {\n // note: cast-away read-onlyness to access private members...\n const keys = readonlyKeys as KeySet;\n\n if (checkType === \"all\") {\n if (this._nodeKeys.size < keys._nodeKeys.size || this._instanceKeys.size < keys._instanceKeys.size) {\n return false;\n }\n if ([...keys._nodeKeys].some((key) => !this._nodeKeys.has(key))) {\n return false;\n }\n for (const otherEntry of keys._instanceKeys) {\n const thisEntryKeys = this._instanceKeys.get(otherEntry[\"0\"]);\n if (!thisEntryKeys || thisEntryKeys.size < otherEntry[\"1\"].size) {\n return false;\n }\n if ([...otherEntry[\"1\"]].some((key) => !thisEntryKeys.has(key))) {\n return false;\n }\n }\n return true;\n }\n\n // \"any\" check type\n if ([...keys._nodeKeys].some((key) => this._nodeKeys.has(key))) {\n return true;\n }\n for (const otherEntry of keys._instanceKeys) {\n const thisEntryKeys = this._instanceKeys.get(otherEntry[\"0\"]);\n if (thisEntryKeys && [...otherEntry[\"1\"]].some((key) => thisEntryKeys.has(key))) {\n return true;\n }\n }\n return false;\n }\n\n private hasKeysArray(keys: ReadonlyArray<Key>, checkType: \"all\" | \"any\"): boolean {\n if (checkType === \"all\") {\n if (this.size < keys.length) {\n return false;\n }\n for (const key of keys) {\n if (!this.has(key)) {\n return false;\n }\n }\n return true;\n }\n\n // \"any\" check type\n for (const key of keys) {\n if (this.has(key)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Check if this KeySet contains all the specified keys.\n * @param keys The keys to check.\n */\n public hasAll(keys: Keys): boolean {\n if (!keys) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${keys}`);\n }\n if (this.isKeySet(keys)) {\n return this.hasKeySet(keys, \"all\");\n }\n if (this.isKeysArray(keys)) {\n return this.hasKeysArray(keys, \"all\");\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: keys = ${keys}`);\n }\n\n /**\n * Check if this KeySet contains any of the specified keys.\n * @param keys The keys to check.\n */\n public hasAny(keys: Keys): boolean {\n if (!keys) {\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${keys}`);\n }\n if (this.isKeySet(keys)) {\n return this.hasKeySet(keys, \"any\");\n }\n if (this.isKeysArray(keys)) {\n return this.hasKeysArray(keys, \"any\");\n }\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: keys = ${keys}`);\n }\n\n /**\n * Get the number of keys stored in this KeySet.\n */\n public get size(): number {\n const nodeKeysCount = this._nodeKeys.size;\n let instanceIdsCount = 0;\n for (const set of this._instanceKeys.values()) {\n instanceIdsCount += set.size;\n }\n return nodeKeysCount + instanceIdsCount;\n }\n\n /**\n * Is this KeySet currently empty.\n */\n public get isEmpty(): boolean {\n return 0 === this.size;\n }\n\n /** Iterate over all keys in this keyset. */\n public some(callback: (key: Key) => boolean) {\n for (const entry of this._instanceKeys) {\n const className = this._lowerCaseMap.get(entry[\"0\"].toLowerCase())!;\n if (some(entry[1], (id: Id64String) => callback({ className, id }))) {\n return true;\n }\n }\n return some(this._nodeKeys, (serializedKey: string) => callback(JSON.parse(serializedKey)));\n }\n\n /** Iterate over all keys in this keyset. */\n public forEach(callback: (key: InstanceKey | NodeKey, index: number) => void) {\n let index = 0;\n this._instanceKeys.forEach((ids: Set<Id64String>, className: string) => {\n const recentClassName = this._lowerCaseMap.get(className.toLowerCase())!;\n ids.forEach((id: Id64String) => callback({ className: recentClassName, id }, index++));\n });\n this._nodeKeys.forEach((serializedKey: string) => {\n callback(JSON.parse(serializedKey), index++);\n });\n }\n\n /** Iterate over all keys in this keyset in batches */\n public forEachBatch(batchSize: number, callback: (batch: KeySet, index: number) => void) {\n const size = this.size;\n const count = Math.ceil(size / batchSize);\n if (1 === count) {\n callback(this, 0);\n return;\n }\n let batch = new KeySet();\n let batchIndex = 0;\n let currBatchSize = 0;\n this.forEach((key, index) => {\n batch.add(key);\n ++currBatchSize;\n if (currBatchSize === batchSize || index === size - 1) {\n callback(batch, batchIndex++);\n batch = new KeySet();\n currBatchSize = 0;\n }\n });\n }\n\n /**\n * Serializes this KeySet to JSON\n * @public\n */\n public toJSON(): KeySetJSON {\n const instanceKeys: [string, string][] = [];\n for (const entry of this._instanceKeys.entries()) {\n if (entry[\"1\"].size > 0) {\n const className = this._lowerCaseMap.get(entry[\"0\"].toLowerCase());\n const compressedIds = CompressedId64Set.sortAndCompress(entry[\"1\"]);\n instanceKeys.push([className!, compressedIds.length > 0 ? compressedIds : Id64.invalid]);\n }\n }\n const nodeKeys: NodeKey[] = [];\n for (const serializedKey of this._nodeKeys.values()) {\n nodeKeys.push(JSON.parse(serializedKey));\n }\n return {\n instanceKeys,\n nodeKeys,\n };\n }\n\n /**\n * Creates a KeySet from JSON\n * @public\n */\n public static fromJSON(json: KeySetJSON): KeySet {\n const keyset = new KeySet();\n keyset.addKeySetJSON(json);\n return keyset;\n }\n}\n\nfunction normalizeClassName(className: string) {\n return className.replace(\".\", \":\");\n}\n\nconst some = <TItem>(set: Set<TItem>, cb: (item: TItem) => boolean) => {\n for (const item of set) {\n if (cb(item)) {\n return true;\n }\n }\n return false;\n};\n"]}
1
+ {"version":3,"file":"KeySet.js","sourceRoot":"","sources":["../../../src/presentation-common/KeySet.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 { CompressedId64Set, Guid, GuidString, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { EntityProps } from \"@itwin/core-common\";\r\nimport { InstanceId, InstanceKey } from \"./EC.js\";\r\nimport { PresentationError, PresentationStatus } from \"./Error.js\";\r\nimport { NodeKey } from \"./hierarchy/Key.js\";\r\n\r\n/**\r\n * A single key that identifies something in an iTwin.js application\r\n * @public\r\n */\r\nexport type Key = Readonly<NodeKey> | Readonly<InstanceKey> | Readonly<EntityProps>;\r\n\r\n/** @public */\r\n// eslint-disable-next-line @typescript-eslint/no-redeclare\r\nexport namespace Key {\r\n /** Check if the supplied key is a `NodeKey` */\r\n export function isNodeKey(key: Key): key is NodeKey {\r\n return !!(key as NodeKey).type;\r\n }\r\n\r\n /** Check if the supplied key is an `InstanceKey` */\r\n export function isInstanceKey(key: Key): key is InstanceKey {\r\n return !!(key as InstanceKey).className && !!(key as InstanceKey).id;\r\n }\r\n\r\n /** Check if the supplied key is an `EntityProps` */\r\n export function isEntityProps(key: Key): key is EntityProps {\r\n return !!(key as EntityProps).classFullName && !!(key as EntityProps).id;\r\n }\r\n}\r\n\r\n/**\r\n * A type for multiple keys that identify something in iModel.js application\r\n * @public\r\n */\r\nexport type Keys = ReadonlyArray<Key> | Readonly<KeySet>;\r\n\r\n/**\r\n * A data structure of serialized [[KeySet]]\r\n * @public\r\n */\r\nexport interface KeySetJSON {\r\n /** JSON representation of a list of instance keys */\r\n instanceKeys: Array<[string, string]>;\r\n /** An array of serialized node keys */\r\n nodeKeys: NodeKey[];\r\n}\r\n\r\n/**\r\n * A class that holds multiple [[Key]] objects. It's basically\r\n * used as a container that holds multiple keys of different types.\r\n *\r\n * @public\r\n */\r\nexport class KeySet {\r\n // note: all keys are stored as strings because we need ability to find them by value\r\n private _instanceKeys: Map<string, Set<string>>; // lower case class name => instance ids\r\n private _lowerCaseMap: Map<string, string>; // lower case class name => most recent class name\r\n private _nodeKeys: Set<string>;\r\n private _guid!: GuidString;\r\n\r\n /**\r\n * Creates an instance of KeySet.\r\n * @param source Optional source to initialize from.\r\n */\r\n constructor(source?: Keys) {\r\n this._instanceKeys = new Map();\r\n this._lowerCaseMap = new Map();\r\n this._nodeKeys = new Set();\r\n this.recalculateGuid();\r\n if (source) {\r\n this.add(source);\r\n }\r\n }\r\n\r\n private recalculateGuid() {\r\n // empty keyset should have empty guid, otherwise use a random guid value\r\n this._guid = this.isEmpty ? Guid.empty : Guid.createValue();\r\n }\r\n\r\n /**\r\n * Get a GUID that identifies changes in this keyset. The value\r\n * does not uniquely identify contents of the keyset, but it can be\r\n * used to check whether keyset has changed.\r\n */\r\n public get guid(): GuidString {\r\n return this._guid;\r\n }\r\n\r\n /**\r\n * Get a map of instance keys stored in this KeySet\r\n *\r\n * **Warning**: getting instance keys might be expensive for\r\n * large KeySets.\r\n */\r\n public get instanceKeys(): Map<string, Set<InstanceId>> {\r\n const map = new Map<string, Set<InstanceId>>();\r\n for (const entry of this._instanceKeys) {\r\n map.set(this._lowerCaseMap.get(entry[\"0\"])!, new Set([...entry[\"1\"]].map((key: string) => Id64.fromJSON(key))));\r\n }\r\n return map;\r\n }\r\n\r\n /**\r\n * Get instance keys count\r\n */\r\n public get instanceKeysCount(): number {\r\n let count = 0;\r\n this._instanceKeys.forEach((set: Set<string>) => (count += set.size));\r\n return count;\r\n }\r\n\r\n /**\r\n * Get a set of node keys stored in this KeySet\r\n *\r\n * **Warning**: getting node keys might be expensive for\r\n * large KeySets.\r\n */\r\n public get nodeKeys(): Set<NodeKey> {\r\n const set = new Set<NodeKey>();\r\n for (const serialized of this._nodeKeys) {\r\n set.add(JSON.parse(serialized));\r\n }\r\n return set;\r\n }\r\n\r\n /**\r\n * Get node keys count\r\n */\r\n public get nodeKeysCount(): number {\r\n return this._nodeKeys.size;\r\n }\r\n\r\n private isKeySet(set: Keys | Key): set is Readonly<KeySet> {\r\n return !!(set as KeySet)._nodeKeys && !!(set as KeySet)._instanceKeys;\r\n }\r\n\r\n private isKeysArray(keys: Keys | Key): keys is ReadonlyArray<Key> {\r\n return Array.isArray(keys);\r\n }\r\n\r\n /**\r\n * Clear this KeySet.\r\n * @returns itself\r\n */\r\n public clear(): KeySet {\r\n if (this.isEmpty) {\r\n return this;\r\n }\r\n\r\n this._instanceKeys = new Map();\r\n this._lowerCaseMap = new Map();\r\n this._nodeKeys = new Set();\r\n this.recalculateGuid();\r\n return this;\r\n }\r\n\r\n private addKeySet(keyset: Readonly<KeySet>, pred?: (key: Key) => boolean): void {\r\n for (const key of (keyset as any)._nodeKeys) {\r\n if (!pred || pred(JSON.parse(key))) {\r\n this._nodeKeys.add(key);\r\n }\r\n }\r\n for (const entry of (keyset as any)._instanceKeys) {\r\n let set = this._instanceKeys.get(entry[\"0\"]);\r\n const className = (keyset as KeySet)._lowerCaseMap.get(entry[\"0\"])!;\r\n if (!set) {\r\n set = new Set();\r\n this._instanceKeys.set(entry[\"0\"], set);\r\n this._lowerCaseMap.set(entry[\"0\"], className);\r\n }\r\n entry[\"1\"].forEach((id: Id64String) => {\r\n if (!pred || pred({ className, id })) {\r\n set.add(id);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private addKeySetJSON(keyset: Readonly<KeySetJSON>): void {\r\n for (const key of keyset.nodeKeys) {\r\n this._nodeKeys.add(JSON.stringify(key));\r\n }\r\n for (const entry of keyset.instanceKeys) {\r\n const normalizedClassName = normalizeClassName(entry[\"0\"]);\r\n const lcClassName = normalizedClassName.toLowerCase();\r\n const idsJson: string | Id64String[] = entry[\"1\"];\r\n const ids: Set<Id64String> =\r\n typeof idsJson === \"string\" ? (idsJson === Id64.invalid ? new Set([Id64.invalid]) : CompressedId64Set.decompressSet(idsJson)) : new Set(idsJson);\r\n this._instanceKeys.set(lcClassName, ids);\r\n this._lowerCaseMap.set(lcClassName, normalizedClassName);\r\n }\r\n }\r\n\r\n /**\r\n * Add a key or keys to this KeySet.\r\n * @param value A key or keys to add.\r\n * @param pred An optional predicate function that indicates whether a key should be added\r\n * @returns itself\r\n */\r\n public add(value: Keys | Key, pred?: (key: Key) => boolean): KeySet {\r\n if (!value) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\r\n }\r\n const sizeBefore = this.size;\r\n if (this.isKeySet(value)) {\r\n this.addKeySet(value, pred);\r\n } else if (this.isKeysArray(value)) {\r\n value.forEach((key) => this.add(key, pred));\r\n } else if (!pred || pred(value)) {\r\n if (Key.isEntityProps(value)) {\r\n this.add({ className: value.classFullName, id: Id64.fromJSON(value.id) } as InstanceKey);\r\n } else if (Key.isInstanceKey(value)) {\r\n const normalizedClassName = normalizeClassName(value.className);\r\n const lcClassName = normalizedClassName.toLowerCase();\r\n if (!this._instanceKeys.has(lcClassName)) {\r\n this._instanceKeys.set(lcClassName, new Set());\r\n }\r\n this._lowerCaseMap.set(lcClassName, normalizedClassName);\r\n this._instanceKeys.get(lcClassName)!.add(value.id);\r\n } else if (Key.isNodeKey(value)) {\r\n this._nodeKeys.add(JSON.stringify(value));\r\n } else {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\r\n }\r\n }\r\n if (this.size !== sizeBefore) {\r\n this.recalculateGuid();\r\n }\r\n return this;\r\n }\r\n\r\n private deleteKeySet(keyset: Readonly<KeySet>): void {\r\n for (const key of (keyset as any)._nodeKeys) {\r\n this._nodeKeys.delete(key);\r\n }\r\n for (const entry of (keyset as any)._instanceKeys) {\r\n const set = this._instanceKeys.get(entry[\"0\"]);\r\n if (set) {\r\n entry[\"1\"].forEach((key: string) => {\r\n set.delete(key);\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Deletes a key or keys from this KeySet.\r\n * @param value A key or keys to delete.\r\n * @returns itself\r\n */\r\n public delete(value: Keys | Key): KeySet {\r\n if (!value) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\r\n }\r\n const sizeBefore = this.size;\r\n if (this.isKeySet(value)) {\r\n this.deleteKeySet(value);\r\n } else if (this.isKeysArray(value)) {\r\n for (const key of value) {\r\n this.delete(key);\r\n }\r\n } else if (Key.isEntityProps(value)) {\r\n this.delete({ className: value.classFullName, id: value.id! } as InstanceKey);\r\n } else if (Key.isInstanceKey(value)) {\r\n const normalizedClassName = normalizeClassName(value.className);\r\n const set = this._instanceKeys.get(normalizedClassName.toLowerCase());\r\n if (set) {\r\n set.delete(value.id);\r\n }\r\n } else if (Key.isNodeKey(value)) {\r\n this._nodeKeys.delete(JSON.stringify(value));\r\n } else {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\r\n }\r\n if (this.size !== sizeBefore) {\r\n this.recalculateGuid();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * Check if this KeySet contains the specified key.\r\n * @param value The key to check.\r\n */\r\n public has(value: Key): boolean {\r\n if (!value) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${value}`);\r\n }\r\n if (Key.isEntityProps(value)) {\r\n return this.has({ className: value.classFullName, id: value.id! } as InstanceKey);\r\n }\r\n if (Key.isInstanceKey(value)) {\r\n const normalizedClassName = normalizeClassName(value.className);\r\n const set = this._instanceKeys.get(normalizedClassName.toLowerCase());\r\n return !!(set && set.has(value.id));\r\n }\r\n if (Key.isNodeKey(value)) {\r\n return this._nodeKeys.has(JSON.stringify(value));\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${JSON.stringify(value)}`);\r\n }\r\n\r\n private hasKeySet(readonlyKeys: Readonly<KeySet>, checkType: \"all\" | \"any\"): boolean {\r\n // note: cast-away read-onlyness to access private members...\r\n const keys = readonlyKeys as KeySet;\r\n\r\n if (checkType === \"all\") {\r\n if (this._nodeKeys.size < keys._nodeKeys.size || this._instanceKeys.size < keys._instanceKeys.size) {\r\n return false;\r\n }\r\n if ([...keys._nodeKeys].some((key) => !this._nodeKeys.has(key))) {\r\n return false;\r\n }\r\n for (const otherEntry of keys._instanceKeys) {\r\n const thisEntryKeys = this._instanceKeys.get(otherEntry[\"0\"]);\r\n if (!thisEntryKeys || thisEntryKeys.size < otherEntry[\"1\"].size) {\r\n return false;\r\n }\r\n if ([...otherEntry[\"1\"]].some((key) => !thisEntryKeys.has(key))) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // \"any\" check type\r\n if ([...keys._nodeKeys].some((key) => this._nodeKeys.has(key))) {\r\n return true;\r\n }\r\n for (const otherEntry of keys._instanceKeys) {\r\n const thisEntryKeys = this._instanceKeys.get(otherEntry[\"0\"]);\r\n if (thisEntryKeys && [...otherEntry[\"1\"]].some((key) => thisEntryKeys.has(key))) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private hasKeysArray(keys: ReadonlyArray<Key>, checkType: \"all\" | \"any\"): boolean {\r\n if (checkType === \"all\") {\r\n if (this.size < keys.length) {\r\n return false;\r\n }\r\n for (const key of keys) {\r\n if (!this.has(key)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // \"any\" check type\r\n for (const key of keys) {\r\n if (this.has(key)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if this KeySet contains all the specified keys.\r\n * @param keys The keys to check.\r\n */\r\n public hasAll(keys: Keys): boolean {\r\n if (!keys) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${keys}`);\r\n }\r\n if (this.isKeySet(keys)) {\r\n return this.hasKeySet(keys, \"all\");\r\n }\r\n if (this.isKeysArray(keys)) {\r\n return this.hasKeysArray(keys, \"all\");\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: keys = ${keys}`);\r\n }\r\n\r\n /**\r\n * Check if this KeySet contains any of the specified keys.\r\n * @param keys The keys to check.\r\n */\r\n public hasAny(keys: Keys): boolean {\r\n if (!keys) {\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: value = ${keys}`);\r\n }\r\n if (this.isKeySet(keys)) {\r\n return this.hasKeySet(keys, \"any\");\r\n }\r\n if (this.isKeysArray(keys)) {\r\n return this.hasKeysArray(keys, \"any\");\r\n }\r\n throw new PresentationError(PresentationStatus.InvalidArgument, `Invalid argument: keys = ${keys}`);\r\n }\r\n\r\n /**\r\n * Get the number of keys stored in this KeySet.\r\n */\r\n public get size(): number {\r\n const nodeKeysCount = this._nodeKeys.size;\r\n let instanceIdsCount = 0;\r\n for (const set of this._instanceKeys.values()) {\r\n instanceIdsCount += set.size;\r\n }\r\n return nodeKeysCount + instanceIdsCount;\r\n }\r\n\r\n /**\r\n * Is this KeySet currently empty.\r\n */\r\n public get isEmpty(): boolean {\r\n return 0 === this.size;\r\n }\r\n\r\n /** Iterate over all keys in this keyset. */\r\n public some(callback: (key: Key) => boolean) {\r\n for (const entry of this._instanceKeys) {\r\n const className = this._lowerCaseMap.get(entry[\"0\"].toLowerCase())!;\r\n if (some(entry[1], (id: Id64String) => callback({ className, id }))) {\r\n return true;\r\n }\r\n }\r\n return some(this._nodeKeys, (serializedKey: string) => callback(JSON.parse(serializedKey)));\r\n }\r\n\r\n /** Iterate over all keys in this keyset. */\r\n public forEach(callback: (key: InstanceKey | NodeKey, index: number) => void) {\r\n let index = 0;\r\n this._instanceKeys.forEach((ids: Set<Id64String>, className: string) => {\r\n const recentClassName = this._lowerCaseMap.get(className.toLowerCase())!;\r\n ids.forEach((id: Id64String) => callback({ className: recentClassName, id }, index++));\r\n });\r\n this._nodeKeys.forEach((serializedKey: string) => {\r\n callback(JSON.parse(serializedKey), index++);\r\n });\r\n }\r\n\r\n /** Iterate over all keys in this keyset in batches */\r\n public forEachBatch(batchSize: number, callback: (batch: KeySet, index: number) => void) {\r\n const size = this.size;\r\n const count = Math.ceil(size / batchSize);\r\n if (1 === count) {\r\n callback(this, 0);\r\n return;\r\n }\r\n let batch = new KeySet();\r\n let batchIndex = 0;\r\n let currBatchSize = 0;\r\n this.forEach((key, index) => {\r\n batch.add(key);\r\n ++currBatchSize;\r\n if (currBatchSize === batchSize || index === size - 1) {\r\n callback(batch, batchIndex++);\r\n batch = new KeySet();\r\n currBatchSize = 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Serializes this KeySet to JSON\r\n * @public\r\n */\r\n public toJSON(): KeySetJSON {\r\n const instanceKeys: [string, string][] = [];\r\n for (const entry of this._instanceKeys.entries()) {\r\n if (entry[\"1\"].size > 0) {\r\n const className = this._lowerCaseMap.get(entry[\"0\"].toLowerCase());\r\n const compressedIds = CompressedId64Set.sortAndCompress(entry[\"1\"]);\r\n instanceKeys.push([className!, compressedIds.length > 0 ? compressedIds : Id64.invalid]);\r\n }\r\n }\r\n const nodeKeys: NodeKey[] = [];\r\n for (const serializedKey of this._nodeKeys.values()) {\r\n nodeKeys.push(JSON.parse(serializedKey));\r\n }\r\n return {\r\n instanceKeys,\r\n nodeKeys,\r\n };\r\n }\r\n\r\n /**\r\n * Creates a KeySet from JSON\r\n * @public\r\n */\r\n public static fromJSON(json: KeySetJSON): KeySet {\r\n const keyset = new KeySet();\r\n keyset.addKeySetJSON(json);\r\n return keyset;\r\n }\r\n}\r\n\r\nfunction normalizeClassName(className: string) {\r\n return className.replace(\".\", \":\");\r\n}\r\n\r\nconst some = <TItem>(set: Set<TItem>, cb: (item: TItem) => boolean) => {\r\n for (const item of set) {\r\n if (cb(item)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n};\r\n"]}
@@ -1,13 +1,15 @@
1
1
  /** @packageDocumentation
2
2
  * @module Core
3
3
  */
4
- import { FormatProps, FormatterSpec, ParserSpec, UnitSystemKey } from "@itwin/core-quantity";
4
+ import { FormatProps, FormatsProvider, FormatterSpec, ParserSpec, UnitSystemKey } from "@itwin/core-quantity";
5
5
  import { SchemaContext } from "@itwin/ecschema-metadata";
6
6
  /**
7
7
  * A data structure that associates unit systems with property value formatting props. The associations are used for
8
8
  * assigning formatting props for specific phenomenon and unit system combinations (see [[FormatsMap]]).
9
9
  *
10
10
  * @public
11
+ *
12
+ * @deprecated in 5.1 - will not be removed until after 2026-08-08. `FormatsMap` and related APIs have been deprecated in favor of [FormatsProvider]($core-quantity).
11
13
  */
12
14
  export interface UnitSystemFormat {
13
15
  unitSystems: UnitSystemKey[];
@@ -33,6 +35,8 @@ export interface UnitSystemFormat {
33
35
  * ```
34
36
  *
35
37
  * @public
38
+ *
39
+ * @deprecated in 5.1 - will not be removed until after 2026-08-08. `FormatsMap` and related APIs have been deprecated in favor of [FormatsProvider]($core-quantity).
36
40
  */
37
41
  export interface FormatsMap {
38
42
  [phenomenon: string]: UnitSystemFormat | UnitSystemFormat[];
@@ -47,17 +51,35 @@ export interface FormatOptions {
47
51
  /** Unit system to use for formatting. */
48
52
  unitSystem?: UnitSystemKey;
49
53
  }
54
+ /**
55
+ * Props for creating [[KoqPropertyValueFormatter]].
56
+ * @public
57
+ */
58
+ interface KoqPropertyValueFormatterProps {
59
+ /** Schema context to use for locating units, formats, etc. Generally retrieved through the `schemaContext` getter on an iModel. */
60
+ schemaContext: SchemaContext;
61
+ /** Formats provider to use for finding formatting props. Defaults to [SchemaFormatsProvider]($ecschema-metadata) when not supplied. */
62
+ formatsProvider?: FormatsProvider;
63
+ }
50
64
  /**
51
65
  * An utility for formatting property values based on `KindOfQuantity` and unit system.
52
66
  * @public
53
67
  */
54
68
  export declare class KoqPropertyValueFormatter {
69
+ #private;
55
70
  private _schemaContext;
56
71
  private _unitsProvider;
72
+ private _formatsProvider?;
57
73
  private _defaultFormats?;
58
- constructor(_schemaContext: SchemaContext, defaultFormats?: FormatsMap);
74
+ /** @deprecated in 5.1 - will not be removed until after 2026-08-08. Use the overload that takes a props object. */
75
+ constructor(schemaContext: SchemaContext, defaultFormats?: FormatsMap, formatsProvider?: FormatsProvider);
76
+ constructor(props: KoqPropertyValueFormatterProps);
77
+ /** @internal */
78
+ get defaultFormats(): FormatsMap | undefined;
79
+ set defaultFormats(value: FormatsMap | undefined);
59
80
  format(value: number, options: FormatOptions): Promise<string | undefined>;
60
81
  getFormatterSpec(options: FormatOptions): Promise<FormatterSpec | undefined>;
61
82
  getParserSpec(options: FormatOptions): Promise<ParserSpec | undefined>;
62
83
  }
84
+ export {};
63
85
  //# sourceMappingURL=KoqPropertyValueFormatter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"KoqPropertyValueFormatter.d.ts","sourceRoot":"","sources":["../../../src/presentation-common/KoqPropertyValueFormatter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,WAAW,EAAE,aAAa,EAAE,UAAU,EAAiB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAIL,aAAa,EAMd,MAAM,0BAA0B,CAAC;AAElC;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,yBAAyB;IAKlC,OAAO,CAAC,cAAc;IAJxB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAa;gBAG3B,cAAc,EAAE,aAAa,EACrC,cAAc,CAAC,EAAE,UAAU;IAQhB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAQ5C,gBAAgB,CAAC,OAAO,EAAE,aAAa;IAWvC,aAAa,CAAC,OAAO,EAAE,aAAa;CAUlD"}
1
+ {"version":3,"file":"KoqPropertyValueFormatter.d.ts","sourceRoot":"","sources":["../../../src/presentation-common/KoqPropertyValueFormatter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAU,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAiB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrI,OAAO,EAAgC,aAAa,EAAyE,MAAM,0BAA0B,CAAC;AAE9J;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,UAAU;IAEzB,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;CAC7D;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAED;;;GAGG;AACH,UAAU,8BAA8B;IACtC,mIAAmI;IACnI,aAAa,EAAE,aAAa,CAAC;IAC7B,uIAAuI;IACvI,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;GAGG;AACH,qBAAa,yBAAyB;;IACpC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,gBAAgB,CAAC,CAAkB;IAE3C,OAAO,CAAC,eAAe,CAAC,CAAa;IAErC,mHAAmH;gBAEvG,aAAa,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,eAAe;gBAC5F,KAAK,EAAE,8BAA8B;IAejD,gBAAgB;IAEhB,IAAW,cAAc,IAAI,UAAU,GAAG,SAAS,CAElD;IAED,IAAW,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAItD;IAGY,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAQ5C,gBAAgB,CAAC,OAAO,EAAE,aAAa;IAWvC,aAAa,CAAC,OAAO,EAAE,aAAa;CA+ClD"}
@@ -8,6 +8,7 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.KoqPropertyValueFormatter = void 0;
11
+ const core_bentley_1 = require("@itwin/core-bentley");
11
12
  const core_quantity_1 = require("@itwin/core-quantity");
12
13
  const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
13
14
  /**
@@ -17,14 +18,35 @@ const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
17
18
  class KoqPropertyValueFormatter {
18
19
  _schemaContext;
19
20
  _unitsProvider;
21
+ _formatsProvider;
22
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
20
23
  _defaultFormats;
21
- constructor(_schemaContext, defaultFormats) {
22
- this._schemaContext = _schemaContext;
23
- this._unitsProvider = new ecschema_metadata_1.SchemaUnitProvider(_schemaContext);
24
- this._defaultFormats = defaultFormats
25
- ? Object.entries(defaultFormats).reduce((acc, [phenomenon, unitSystemFormats]) => ({ ...acc, [phenomenon.toUpperCase()]: unitSystemFormats }), {})
26
- : /* c8 ignore next */ undefined;
24
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
25
+ constructor(schemaContextOrProps, defaultFormats, formatsProvider) {
26
+ if (schemaContextOrProps instanceof ecschema_metadata_1.SchemaContext) {
27
+ this._schemaContext = schemaContextOrProps;
28
+ this._formatsProvider = formatsProvider;
29
+ this.defaultFormats = defaultFormats;
30
+ }
31
+ else {
32
+ this._schemaContext = schemaContextOrProps.schemaContext;
33
+ this._formatsProvider = schemaContextOrProps.formatsProvider;
34
+ }
35
+ this._unitsProvider = new ecschema_metadata_1.SchemaUnitProvider(this._schemaContext);
36
+ }
37
+ /* c8 ignore start */
38
+ /** @internal */
39
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
40
+ get defaultFormats() {
41
+ return this._defaultFormats;
27
42
  }
43
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
44
+ set defaultFormats(value) {
45
+ this._defaultFormats = value
46
+ ? Object.entries(value).reduce((acc, [phenomenon, unitSystemFormats]) => ({ ...acc, [phenomenon.toUpperCase()]: unitSystemFormats }), {})
47
+ : undefined;
48
+ }
49
+ /* c8 ignore end */
28
50
  async format(value, options) {
29
51
  const formatterSpec = await this.getFormatterSpec(options);
30
52
  if (!formatterSpec) {
@@ -33,7 +55,7 @@ class KoqPropertyValueFormatter {
33
55
  return formatterSpec.applyFormatting(value);
34
56
  }
35
57
  async getFormatterSpec(options) {
36
- const formattingProps = await getFormattingProps(this._schemaContext, this._defaultFormats, options);
58
+ const formattingProps = await this.#getFormattingProps(options);
37
59
  if (!formattingProps) {
38
60
  return undefined;
39
61
  }
@@ -43,7 +65,7 @@ class KoqPropertyValueFormatter {
43
65
  return core_quantity_1.FormatterSpec.create("", format, this._unitsProvider, persistenceUnit);
44
66
  }
45
67
  async getParserSpec(options) {
46
- const formattingProps = await getFormattingProps(this._schemaContext, this._defaultFormats, options);
68
+ const formattingProps = await this.#getFormattingProps(options);
47
69
  if (!formattingProps) {
48
70
  return undefined;
49
71
  }
@@ -52,25 +74,39 @@ class KoqPropertyValueFormatter {
52
74
  const format = await core_quantity_1.Format.createFromJSON("", this._unitsProvider, formatProps);
53
75
  return core_quantity_1.ParserSpec.create(format, this._unitsProvider, persistenceUnit);
54
76
  }
55
- }
56
- exports.KoqPropertyValueFormatter = KoqPropertyValueFormatter;
57
- async function getFormattingProps(schemaLocater, defaultFormats, options) {
58
- const { koqName, unitSystem } = options;
59
- const koq = await getKoq(schemaLocater, koqName);
60
- if (!koq) {
61
- return undefined;
62
- }
63
- const persistenceUnit = await koq.persistenceUnit;
64
- /* c8 ignore next 3 */
65
- if (!persistenceUnit) {
66
- return undefined;
67
- }
68
- const formatProps = await getKoqFormatProps(koq, persistenceUnit, defaultFormats, unitSystem);
69
- if (!formatProps) {
77
+ async #getFormattingProps(options) {
78
+ const { koqName } = options;
79
+ const koq = await getKoq(this._schemaContext, koqName);
80
+ if (!koq) {
81
+ return undefined;
82
+ }
83
+ const persistenceUnit = await koq.persistenceUnit;
84
+ (0, core_bentley_1.assert)(!!persistenceUnit);
85
+ // default to metric as it's the persistence unit system
86
+ const unitSystem = options.unitSystem ?? "metric";
87
+ const formatsProvider = this._formatsProvider ?? new ecschema_metadata_1.SchemaFormatsProvider(this._schemaContext, unitSystem);
88
+ const formatProps = await formatsProvider.getFormat(koqName);
89
+ // `SchemaFormatsProvider` will fall back to default presentation format, but we want to fall back
90
+ // to default formats' map first, and only then to the default presentation format. All of this can
91
+ // be removed with the removal of default formats map.
92
+ if (this._defaultFormats && (!formatProps || (await getUnitSystemKey(this._unitsProvider, formatProps)) !== unitSystem)) {
93
+ const defaultFormatProps = await getFormatPropsFromDefaultFormats({
94
+ schemaContext: this._schemaContext,
95
+ formatsMap: this._defaultFormats,
96
+ unitSystem,
97
+ koqName,
98
+ });
99
+ if (defaultFormatProps) {
100
+ return { formatProps: defaultFormatProps, persistenceUnitName: persistenceUnit.fullName };
101
+ }
102
+ }
103
+ if (formatProps) {
104
+ return { formatProps, persistenceUnitName: persistenceUnit.fullName };
105
+ }
70
106
  return undefined;
71
107
  }
72
- return { formatProps, persistenceUnitName: persistenceUnit.fullName };
73
108
  }
109
+ exports.KoqPropertyValueFormatter = KoqPropertyValueFormatter;
74
110
  async function getKoq(schemaLocater, fullName) {
75
111
  const [schemaName, propKoqName] = fullName.split(":");
76
112
  const schema = await schemaLocater.getSchema(new ecschema_metadata_1.SchemaKey(schemaName), ecschema_metadata_1.SchemaMatchType.Latest);
@@ -79,92 +115,49 @@ async function getKoq(schemaLocater, fullName) {
79
115
  }
80
116
  return schema.getItem(propKoqName, ecschema_metadata_1.KindOfQuantity);
81
117
  }
82
- async function getKoqFormatProps(koq, persistenceUnit, defaultFormats, unitSystem) {
83
- const unitSystemMatchers = getUnitSystemGroupMatchers(unitSystem);
84
- // use one of KOQ presentation format that matches requested unit system
85
- const presentationFormat = await getKoqPresentationFormat(koq, unitSystemMatchers);
86
- if (presentationFormat) {
87
- return (0, ecschema_metadata_1.getFormatProps)(presentationFormat);
88
- }
89
- // use one of the formats in default formats map if there is one for matching phenomena and requested unit
90
- // system combination
91
- if (defaultFormats && unitSystem) {
92
- const actualPersistenceUnit = persistenceUnit instanceof ecschema_metadata_1.InvertedUnit ? /* c8 ignore next */ await persistenceUnit.invertsUnit : persistenceUnit;
93
- const phenomenon = await actualPersistenceUnit?.phenomenon;
94
- if (phenomenon && defaultFormats[phenomenon.name.toUpperCase()]) {
95
- const defaultPhenomenonFormats = defaultFormats[phenomenon.name.toUpperCase()];
96
- for (const defaultUnitSystemFormat of Array.isArray(defaultPhenomenonFormats)
97
- ? /* c8 ignore next */ defaultPhenomenonFormats
98
- : [defaultPhenomenonFormats]) {
99
- if (defaultUnitSystemFormat.unitSystems.includes(unitSystem)) {
100
- return defaultUnitSystemFormat.format;
101
- }
102
- }
103
- }
118
+ async function getUnitSystemKey(unitsProvider, formatProps) {
119
+ const unitName = formatProps.composite?.units[0].name;
120
+ (0, core_bentley_1.assert)(!!unitName);
121
+ const unit = await unitsProvider.findUnitByName(unitName);
122
+ (0, core_bentley_1.assert)(!!unit);
123
+ const [_, unitSystemName] = unit.system.split(/[\.:]/);
124
+ switch (unitSystemName.toUpperCase()) {
125
+ case "METRIC":
126
+ return "metric";
127
+ case "IMPERIAL":
128
+ return "imperial";
129
+ case "USCUSTOM":
130
+ return "usCustomary";
131
+ case "USSURVEY":
132
+ return "usSurvey";
133
+ /* c8 ignore next 2 */
134
+ default:
135
+ return undefined;
104
136
  }
105
- // use persistence unit format if it matches requested unit system and matching presentation format was not found
106
- const persistenceUnitSystem = await persistenceUnit.unitSystem;
107
- if (persistenceUnitSystem && unitSystemMatchers.some((matcher) => matcher(persistenceUnitSystem))) {
108
- return getPersistenceUnitFormatProps(persistenceUnit);
137
+ }
138
+ async function getFormatPropsFromDefaultFormats({ schemaContext, formatsMap, unitSystem, koqName, }) {
139
+ const koq = await getKoq(schemaContext, koqName);
140
+ /* c8 ignore next 3 */
141
+ if (!koq) {
142
+ return undefined;
109
143
  }
110
- // use default presentation format if persistence unit does not match requested unit system
111
- if (koq.defaultPresentationFormat) {
112
- return (0, ecschema_metadata_1.getFormatProps)(await koq.defaultPresentationFormat);
144
+ const persistenceUnit = await koq.persistenceUnit;
145
+ /* c8 ignore next 3 */
146
+ if (!persistenceUnit) {
147
+ return undefined;
113
148
  }
114
- return undefined;
115
- }
116
- async function getKoqPresentationFormat(koq, unitSystemMatchers) {
117
- const presentationFormats = koq.presentationFormats;
118
- for (const matcher of unitSystemMatchers) {
119
- for (const lazyFormat of presentationFormats) {
120
- const format = await lazyFormat;
121
- const lazyUnit = format.units && format.units[0][0];
122
- /* c8 ignore next 3 */
123
- if (!lazyUnit) {
124
- continue;
125
- }
126
- const unit = await lazyUnit;
127
- const currentUnitSystem = await unit.unitSystem;
128
- if (currentUnitSystem && matcher(currentUnitSystem)) {
129
- return format;
149
+ const actualPersistenceUnit = persistenceUnit instanceof ecschema_metadata_1.InvertedUnit ? /* c8 ignore next */ await persistenceUnit.invertsUnit : persistenceUnit;
150
+ const phenomenon = await actualPersistenceUnit?.phenomenon;
151
+ if (phenomenon && formatsMap[phenomenon.name.toUpperCase()]) {
152
+ const defaultPhenomenonFormats = formatsMap[phenomenon.name.toUpperCase()];
153
+ for (const defaultUnitSystemFormat of Array.isArray(defaultPhenomenonFormats)
154
+ ? /* c8 ignore next */ defaultPhenomenonFormats
155
+ : [defaultPhenomenonFormats]) {
156
+ if (defaultUnitSystemFormat.unitSystems.includes(unitSystem)) {
157
+ return defaultUnitSystemFormat.format;
130
158
  }
131
159
  }
132
160
  }
133
161
  return undefined;
134
162
  }
135
- function getPersistenceUnitFormatProps(persistenceUnit) {
136
- // Same as Format "DefaultRealU" in Formats ecschema
137
- return {
138
- formatTraits: ["keepSingleZero", "keepDecimalPoint", "showUnitLabel"],
139
- precision: 6,
140
- type: "Decimal",
141
- uomSeparator: " ",
142
- decimalSeparator: ".",
143
- composite: {
144
- units: [
145
- {
146
- name: persistenceUnit.fullName,
147
- label: persistenceUnit.label,
148
- },
149
- ],
150
- },
151
- };
152
- }
153
- function getUnitSystemGroupMatchers(groupKey) {
154
- function createMatcher(name) {
155
- const names = Array.isArray(name) ? name : [name];
156
- return (unitSystem) => names.some((n) => n === unitSystem.name.toUpperCase());
157
- }
158
- switch (groupKey) {
159
- case "imperial":
160
- return ["IMPERIAL", "USCUSTOM", "INTERNATIONAL", "FINANCE"].map(createMatcher);
161
- case "metric":
162
- return [["SI", "METRIC"], "INTERNATIONAL", "FINANCE"].map(createMatcher);
163
- case "usCustomary":
164
- return ["USCUSTOM", "INTERNATIONAL", "FINANCE"].map(createMatcher);
165
- case "usSurvey":
166
- return ["USSURVEY", "USCUSTOM", "INTERNATIONAL", "FINANCE"].map(createMatcher);
167
- }
168
- return [];
169
- }
170
163
  //# sourceMappingURL=KoqPropertyValueFormatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KoqPropertyValueFormatter.js","sourceRoot":"","sources":["../../../src/presentation-common/KoqPropertyValueFormatter.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 { Format, FormatProps, FormatterSpec, ParserSpec, UnitsProvider, UnitSystemKey } from \"@itwin/core-quantity\";\nimport {\n getFormatProps,\n InvertedUnit,\n KindOfQuantity,\n SchemaContext,\n SchemaKey,\n SchemaMatchType,\n SchemaUnitProvider,\n Unit,\n UnitSystem,\n} from \"@itwin/ecschema-metadata\";\n\n/**\n * A data structure that associates unit systems with property value formatting props. The associations are used for\n * assigning formatting props for specific phenomenon and unit system combinations (see [[FormatsMap]]).\n *\n * @public\n */\nexport interface UnitSystemFormat {\n unitSystems: UnitSystemKey[];\n format: FormatProps;\n}\n\n/**\n * A data structure that associates specific phenomenon with one or more formatting props for specific unit system.\n *\n * Example:\n * ```json\n * {\n * length: [{\n * unitSystems: [\"metric\"],\n * format: formatForCentimeters,\n * }, {\n * unitSystems: [\"imperial\", \"usCustomary\"],\n * format: formatForInches,\n * }, {\n * unitSystems: [\"usSurvey\"],\n * format: formatForUsSurveyInches,\n * }]\n * }\n * ```\n *\n * @public\n */\nexport interface FormatsMap {\n [phenomenon: string]: UnitSystemFormat | UnitSystemFormat[];\n}\n\n/**\n * Options for finding a formatter spec to use in [[KoqPropertyValueFormatter]].\n * @public\n */\nexport interface FormatOptions {\n /** Full name of the `KindOfQuantity`, e.g. `SchemaName:KoqName`. */\n koqName: string;\n /** Unit system to use for formatting. */\n unitSystem?: UnitSystemKey;\n}\n\n/**\n * An utility for formatting property values based on `KindOfQuantity` and unit system.\n * @public\n */\nexport class KoqPropertyValueFormatter {\n private _unitsProvider: UnitsProvider;\n private _defaultFormats?: FormatsMap;\n\n constructor(\n private _schemaContext: SchemaContext,\n defaultFormats?: FormatsMap,\n ) {\n this._unitsProvider = new SchemaUnitProvider(_schemaContext);\n this._defaultFormats = defaultFormats\n ? Object.entries(defaultFormats).reduce((acc, [phenomenon, unitSystemFormats]) => ({ ...acc, [phenomenon.toUpperCase()]: unitSystemFormats }), {})\n : /* c8 ignore next */ undefined;\n }\n\n public async format(value: number, options: FormatOptions) {\n const formatterSpec = await this.getFormatterSpec(options);\n if (!formatterSpec) {\n return undefined;\n }\n return formatterSpec.applyFormatting(value);\n }\n\n public async getFormatterSpec(options: FormatOptions) {\n const formattingProps = await getFormattingProps(this._schemaContext, this._defaultFormats, options);\n if (!formattingProps) {\n return undefined;\n }\n const { formatProps, persistenceUnitName } = formattingProps;\n const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);\n const format = await Format.createFromJSON(\"\", this._unitsProvider, formatProps);\n return FormatterSpec.create(\"\", format, this._unitsProvider, persistenceUnit);\n }\n\n public async getParserSpec(options: FormatOptions) {\n const formattingProps = await getFormattingProps(this._schemaContext, this._defaultFormats, options);\n if (!formattingProps) {\n return undefined;\n }\n const { formatProps, persistenceUnitName } = formattingProps;\n const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);\n const format = await Format.createFromJSON(\"\", this._unitsProvider, formatProps);\n return ParserSpec.create(format, this._unitsProvider, persistenceUnit);\n }\n}\n\ninterface FormattingProps {\n formatProps: FormatProps;\n persistenceUnitName: string;\n}\n\nasync function getFormattingProps(\n schemaLocater: SchemaContext,\n defaultFormats: FormatsMap | undefined,\n options: FormatOptions,\n): Promise<FormattingProps | undefined> {\n const { koqName, unitSystem } = options;\n\n const koq = await getKoq(schemaLocater, koqName);\n if (!koq) {\n return undefined;\n }\n\n const persistenceUnit = await koq.persistenceUnit;\n /* c8 ignore next 3 */\n if (!persistenceUnit) {\n return undefined;\n }\n\n const formatProps = await getKoqFormatProps(koq, persistenceUnit, defaultFormats, unitSystem);\n if (!formatProps) {\n return undefined;\n }\n\n return { formatProps, persistenceUnitName: persistenceUnit.fullName };\n}\n\nasync function getKoq(schemaLocater: SchemaContext, fullName: string) {\n const [schemaName, propKoqName] = fullName.split(\":\");\n const schema = await schemaLocater.getSchema(new SchemaKey(schemaName), SchemaMatchType.Latest);\n if (!schema) {\n return undefined;\n }\n return schema.getItem(propKoqName, KindOfQuantity);\n}\n\nasync function getKoqFormatProps(\n koq: KindOfQuantity,\n persistenceUnit: Unit | InvertedUnit,\n defaultFormats: FormatsMap | undefined,\n unitSystem?: UnitSystemKey,\n) {\n const unitSystemMatchers = getUnitSystemGroupMatchers(unitSystem);\n // use one of KOQ presentation format that matches requested unit system\n const presentationFormat = await getKoqPresentationFormat(koq, unitSystemMatchers);\n if (presentationFormat) {\n return getFormatProps(presentationFormat);\n }\n\n // use one of the formats in default formats map if there is one for matching phenomena and requested unit\n // system combination\n if (defaultFormats && unitSystem) {\n const actualPersistenceUnit = persistenceUnit instanceof InvertedUnit ? /* c8 ignore next */ await persistenceUnit.invertsUnit : persistenceUnit;\n const phenomenon = await actualPersistenceUnit?.phenomenon;\n if (phenomenon && defaultFormats[phenomenon.name.toUpperCase()]) {\n const defaultPhenomenonFormats = defaultFormats[phenomenon.name.toUpperCase()];\n for (const defaultUnitSystemFormat of Array.isArray(defaultPhenomenonFormats)\n ? /* c8 ignore next */ defaultPhenomenonFormats\n : [defaultPhenomenonFormats]) {\n if (defaultUnitSystemFormat.unitSystems.includes(unitSystem)) {\n return defaultUnitSystemFormat.format;\n }\n }\n }\n }\n\n // use persistence unit format if it matches requested unit system and matching presentation format was not found\n const persistenceUnitSystem = await persistenceUnit.unitSystem;\n if (persistenceUnitSystem && unitSystemMatchers.some((matcher) => matcher(persistenceUnitSystem))) {\n return getPersistenceUnitFormatProps(persistenceUnit);\n }\n\n // use default presentation format if persistence unit does not match requested unit system\n if (koq.defaultPresentationFormat) {\n return getFormatProps(await koq.defaultPresentationFormat);\n }\n\n return undefined;\n}\n\nasync function getKoqPresentationFormat(koq: KindOfQuantity, unitSystemMatchers: Array<(unitSystem: UnitSystem) => boolean>) {\n const presentationFormats = koq.presentationFormats;\n for (const matcher of unitSystemMatchers) {\n for (const lazyFormat of presentationFormats) {\n const format = await lazyFormat;\n const lazyUnit = format.units && format.units[0][0];\n /* c8 ignore next 3 */\n if (!lazyUnit) {\n continue;\n }\n const unit = await lazyUnit;\n const currentUnitSystem = await unit.unitSystem;\n if (currentUnitSystem && matcher(currentUnitSystem)) {\n return format;\n }\n }\n }\n return undefined;\n}\n\nfunction getPersistenceUnitFormatProps(persistenceUnit: Unit | InvertedUnit): FormatProps {\n // Same as Format \"DefaultRealU\" in Formats ecschema\n return {\n formatTraits: [\"keepSingleZero\", \"keepDecimalPoint\", \"showUnitLabel\"],\n precision: 6,\n type: \"Decimal\",\n uomSeparator: \" \",\n decimalSeparator: \".\",\n composite: {\n units: [\n {\n name: persistenceUnit.fullName,\n label: persistenceUnit.label,\n },\n ],\n },\n };\n}\n\nfunction getUnitSystemGroupMatchers(groupKey?: UnitSystemKey) {\n function createMatcher(name: string | string[]) {\n const names = Array.isArray(name) ? name : [name];\n return (unitSystem: UnitSystem) => names.some((n) => n === unitSystem.name.toUpperCase());\n }\n switch (groupKey) {\n case \"imperial\":\n return [\"IMPERIAL\", \"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"].map(createMatcher);\n case \"metric\":\n return [[\"SI\", \"METRIC\"], \"INTERNATIONAL\", \"FINANCE\"].map(createMatcher);\n case \"usCustomary\":\n return [\"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"].map(createMatcher);\n case \"usSurvey\":\n return [\"USSURVEY\", \"USCUSTOM\", \"INTERNATIONAL\", \"FINANCE\"].map(createMatcher);\n }\n return [];\n}\n"]}
1
+ {"version":3,"file":"KoqPropertyValueFormatter.js","sourceRoot":"","sources":["../../../src/presentation-common/KoqPropertyValueFormatter.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 { Format, FormatProps, FormatsProvider, FormatterSpec, ParserSpec, UnitsProvider, UnitSystemKey } from \"@itwin/core-quantity\";\r\nimport { InvertedUnit, KindOfQuantity, SchemaContext, SchemaFormatsProvider, SchemaKey, SchemaMatchType, SchemaUnitProvider } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * A data structure that associates unit systems with property value formatting props. The associations are used for\r\n * assigning formatting props for specific phenomenon and unit system combinations (see [[FormatsMap]]).\r\n *\r\n * @public\r\n *\r\n * @deprecated in 5.1 - will not be removed until after 2026-08-08. `FormatsMap` and related APIs have been deprecated in favor of [FormatsProvider]($core-quantity).\r\n */\r\nexport interface UnitSystemFormat {\r\n unitSystems: UnitSystemKey[];\r\n format: FormatProps;\r\n}\r\n\r\n/**\r\n * A data structure that associates specific phenomenon with one or more formatting props for specific unit system.\r\n *\r\n * Example:\r\n * ```json\r\n * {\r\n * length: [{\r\n * unitSystems: [\"metric\"],\r\n * format: formatForCentimeters,\r\n * }, {\r\n * unitSystems: [\"imperial\", \"usCustomary\"],\r\n * format: formatForInches,\r\n * }, {\r\n * unitSystems: [\"usSurvey\"],\r\n * format: formatForUsSurveyInches,\r\n * }]\r\n * }\r\n * ```\r\n *\r\n * @public\r\n *\r\n * @deprecated in 5.1 - will not be removed until after 2026-08-08. `FormatsMap` and related APIs have been deprecated in favor of [FormatsProvider]($core-quantity).\r\n */\r\nexport interface FormatsMap {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n [phenomenon: string]: UnitSystemFormat | UnitSystemFormat[];\r\n}\r\n\r\n/**\r\n * Options for finding a formatter spec to use in [[KoqPropertyValueFormatter]].\r\n * @public\r\n */\r\nexport interface FormatOptions {\r\n /** Full name of the `KindOfQuantity`, e.g. `SchemaName:KoqName`. */\r\n koqName: string;\r\n /** Unit system to use for formatting. */\r\n unitSystem?: UnitSystemKey;\r\n}\r\n\r\n/**\r\n * Props for creating [[KoqPropertyValueFormatter]].\r\n * @public\r\n */\r\ninterface KoqPropertyValueFormatterProps {\r\n /** Schema context to use for locating units, formats, etc. Generally retrieved through the `schemaContext` getter on an iModel. */\r\n schemaContext: SchemaContext;\r\n /** Formats provider to use for finding formatting props. Defaults to [SchemaFormatsProvider]($ecschema-metadata) when not supplied. */\r\n formatsProvider?: FormatsProvider;\r\n}\r\n\r\n/**\r\n * An utility for formatting property values based on `KindOfQuantity` and unit system.\r\n * @public\r\n */\r\nexport class KoqPropertyValueFormatter {\r\n private _schemaContext: SchemaContext;\r\n private _unitsProvider: UnitsProvider;\r\n private _formatsProvider?: FormatsProvider;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n private _defaultFormats?: FormatsMap;\r\n\r\n /** @deprecated in 5.1 - will not be removed until after 2026-08-08. Use the overload that takes a props object. */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n constructor(schemaContext: SchemaContext, defaultFormats?: FormatsMap, formatsProvider?: FormatsProvider);\r\n constructor(props: KoqPropertyValueFormatterProps);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n constructor(schemaContextOrProps: SchemaContext | KoqPropertyValueFormatterProps, defaultFormats?: FormatsMap, formatsProvider?: FormatsProvider) {\r\n if (schemaContextOrProps instanceof SchemaContext) {\r\n this._schemaContext = schemaContextOrProps;\r\n this._formatsProvider = formatsProvider;\r\n this.defaultFormats = defaultFormats;\r\n } else {\r\n this._schemaContext = schemaContextOrProps.schemaContext;\r\n this._formatsProvider = schemaContextOrProps.formatsProvider;\r\n }\r\n this._unitsProvider = new SchemaUnitProvider(this._schemaContext);\r\n }\r\n\r\n /* c8 ignore start */\r\n /** @internal */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public get defaultFormats(): FormatsMap | undefined {\r\n return this._defaultFormats;\r\n }\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public set defaultFormats(value: FormatsMap | undefined) {\r\n this._defaultFormats = value\r\n ? Object.entries(value).reduce((acc, [phenomenon, unitSystemFormats]) => ({ ...acc, [phenomenon.toUpperCase()]: unitSystemFormats }), {})\r\n : undefined;\r\n }\r\n /* c8 ignore end */\r\n\r\n public async format(value: number, options: FormatOptions) {\r\n const formatterSpec = await this.getFormatterSpec(options);\r\n if (!formatterSpec) {\r\n return undefined;\r\n }\r\n return formatterSpec.applyFormatting(value);\r\n }\r\n\r\n public async getFormatterSpec(options: FormatOptions) {\r\n const formattingProps = await this.#getFormattingProps(options);\r\n if (!formattingProps) {\r\n return undefined;\r\n }\r\n const { formatProps, persistenceUnitName } = formattingProps;\r\n const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);\r\n const format = await Format.createFromJSON(\"\", this._unitsProvider, formatProps);\r\n return FormatterSpec.create(\"\", format, this._unitsProvider, persistenceUnit);\r\n }\r\n\r\n public async getParserSpec(options: FormatOptions) {\r\n const formattingProps = await this.#getFormattingProps(options);\r\n if (!formattingProps) {\r\n return undefined;\r\n }\r\n const { formatProps, persistenceUnitName } = formattingProps;\r\n const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);\r\n const format = await Format.createFromJSON(\"\", this._unitsProvider, formatProps);\r\n return ParserSpec.create(format, this._unitsProvider, persistenceUnit);\r\n }\r\n\r\n async #getFormattingProps(options: FormatOptions): Promise<FormattingProps | undefined> {\r\n const { koqName } = options;\r\n const koq = await getKoq(this._schemaContext, koqName);\r\n if (!koq) {\r\n return undefined;\r\n }\r\n const persistenceUnit = await koq.persistenceUnit;\r\n assert(!!persistenceUnit);\r\n\r\n // default to metric as it's the persistence unit system\r\n const unitSystem = options.unitSystem ?? \"metric\";\r\n\r\n const formatsProvider = this._formatsProvider ?? new SchemaFormatsProvider(this._schemaContext, unitSystem);\r\n const formatProps = await formatsProvider.getFormat(koqName);\r\n\r\n // `SchemaFormatsProvider` will fall back to default presentation format, but we want to fall back\r\n // to default formats' map first, and only then to the default presentation format. All of this can\r\n // be removed with the removal of default formats map.\r\n if (this._defaultFormats && (!formatProps || (await getUnitSystemKey(this._unitsProvider, formatProps)) !== unitSystem)) {\r\n const defaultFormatProps = await getFormatPropsFromDefaultFormats({\r\n schemaContext: this._schemaContext,\r\n formatsMap: this._defaultFormats,\r\n unitSystem,\r\n koqName,\r\n });\r\n if (defaultFormatProps) {\r\n return { formatProps: defaultFormatProps, persistenceUnitName: persistenceUnit.fullName };\r\n }\r\n }\r\n\r\n if (formatProps) {\r\n return { formatProps, persistenceUnitName: persistenceUnit.fullName };\r\n }\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\ninterface FormattingProps {\r\n formatProps: FormatProps;\r\n persistenceUnitName: string;\r\n}\r\n\r\nasync function getKoq(schemaLocater: SchemaContext, fullName: string) {\r\n const [schemaName, propKoqName] = fullName.split(\":\");\r\n const schema = await schemaLocater.getSchema(new SchemaKey(schemaName), SchemaMatchType.Latest);\r\n if (!schema) {\r\n return undefined;\r\n }\r\n return schema.getItem(propKoqName, KindOfQuantity);\r\n}\r\n\r\nasync function getUnitSystemKey(unitsProvider: UnitsProvider, formatProps: FormatProps): Promise<UnitSystemKey | undefined> {\r\n const unitName = formatProps.composite?.units[0].name;\r\n assert(!!unitName);\r\n const unit = await unitsProvider.findUnitByName(unitName);\r\n assert(!!unit);\r\n const [_, unitSystemName] = unit.system.split(/[\\.:]/);\r\n switch (unitSystemName.toUpperCase()) {\r\n case \"METRIC\":\r\n return \"metric\";\r\n case \"IMPERIAL\":\r\n return \"imperial\";\r\n case \"USCUSTOM\":\r\n return \"usCustomary\";\r\n case \"USSURVEY\":\r\n return \"usSurvey\";\r\n /* c8 ignore next 2 */\r\n default:\r\n return undefined;\r\n }\r\n}\r\n\r\nasync function getFormatPropsFromDefaultFormats({\r\n schemaContext,\r\n formatsMap,\r\n unitSystem,\r\n koqName,\r\n}: {\r\n schemaContext: SchemaContext;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n formatsMap: FormatsMap;\r\n unitSystem: UnitSystemKey;\r\n koqName: string;\r\n}): Promise<FormatProps | undefined> {\r\n const koq = await getKoq(schemaContext, koqName);\r\n /* c8 ignore next 3 */\r\n if (!koq) {\r\n return undefined;\r\n }\r\n\r\n const persistenceUnit = await koq.persistenceUnit;\r\n /* c8 ignore next 3 */\r\n if (!persistenceUnit) {\r\n return undefined;\r\n }\r\n const actualPersistenceUnit = persistenceUnit instanceof InvertedUnit ? /* c8 ignore next */ await persistenceUnit.invertsUnit : persistenceUnit;\r\n const phenomenon = await actualPersistenceUnit?.phenomenon;\r\n if (phenomenon && formatsMap[phenomenon.name.toUpperCase()]) {\r\n const defaultPhenomenonFormats = formatsMap[phenomenon.name.toUpperCase()];\r\n for (const defaultUnitSystemFormat of Array.isArray(defaultPhenomenonFormats)\r\n ? /* c8 ignore next */ defaultPhenomenonFormats\r\n : [defaultPhenomenonFormats]) {\r\n if (defaultUnitSystemFormat.unitSystems.includes(unitSystem)) {\r\n return defaultUnitSystemFormat.format;\r\n }\r\n }\r\n }\r\n return undefined;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LabelDefinition.js","sourceRoot":"","sources":["../../../src/presentation-common/LabelDefinition.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AA8BH,gBAAgB;AACH,QAAA,mCAAmC,GAAG,WAAW,CAAC;AAE/D,cAAc;AACd,IAAiB,eAAe,CAoB/B;AApBD,WAAiB,eAAe;IAC9B;;;OAGG;IACH,SAAgB,qBAAqB,CAAC,GAAoB;QACxD,OAAO,GAAG,CAAC,QAAQ,KAAK,2CAAmC,CAAC;IAC9D,CAAC;IAFe,qCAAqB,wBAEpC,CAAA;IAED;;;OAGG;IACH,SAAgB,eAAe,CAAC,KAAa;QAC3C,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IANe,+BAAe,kBAM9B,CAAA;AACH,CAAC,EApBgB,eAAe,+BAAf,eAAe,QAoB/B","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 Hierarchies\n */\n\n/**\n * Data structure that describes raw composite label value.\n * @public\n */\nexport interface LabelCompositeValue {\n separator: string;\n values: LabelDefinition[];\n}\n\n/**\n * Type definition of label raw value.\n * @public\n */\nexport type LabelRawValue = string | number | boolean | LabelCompositeValue;\n\n/**\n * Data structure that describes label definition.\n * @public\n */\nexport interface LabelDefinition {\n /** Display value of label */\n displayValue: string;\n /** Raw value of label */\n rawValue: LabelRawValue;\n /** Type name of raw value */\n typeName: string;\n}\n\n/** @internal */\nexport const COMPOSITE_LABEL_DEFINITION_TYPENAME = \"composite\";\n\n/** @public */\nexport namespace LabelDefinition {\n /**\n * Checks if provided [[LabelDefinition]] has raw value of type [[LabelCompositeValue]].\n * @public\n */\n export function isCompositeDefinition(def: LabelDefinition): def is LabelDefinition & { rawValue: LabelCompositeValue } {\n return def.typeName === COMPOSITE_LABEL_DEFINITION_TYPENAME;\n }\n\n /**\n * Creates [[LabelDefinition]] from string value.\n * @public\n */\n export function fromLabelString(label: string): LabelDefinition {\n return {\n displayValue: label,\n rawValue: label,\n typeName: \"string\",\n };\n }\n}\n"]}
1
+ {"version":3,"file":"LabelDefinition.js","sourceRoot":"","sources":["../../../src/presentation-common/LabelDefinition.ts"],"names":[],"mappings":";AAAA;;;gGAGgG;AAChG;;GAEG;;;AA8BH,gBAAgB;AACH,QAAA,mCAAmC,GAAG,WAAW,CAAC;AAE/D,cAAc;AACd,IAAiB,eAAe,CAoB/B;AApBD,WAAiB,eAAe;IAC9B;;;OAGG;IACH,SAAgB,qBAAqB,CAAC,GAAoB;QACxD,OAAO,GAAG,CAAC,QAAQ,KAAK,2CAAmC,CAAC;IAC9D,CAAC;IAFe,qCAAqB,wBAEpC,CAAA;IAED;;;OAGG;IACH,SAAgB,eAAe,CAAC,KAAa;QAC3C,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,QAAQ,EAAE,KAAK;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IANe,+BAAe,kBAM9B,CAAA;AACH,CAAC,EApBgB,eAAe,+BAAf,eAAe,QAoB/B","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 Hierarchies\r\n */\r\n\r\n/**\r\n * Data structure that describes raw composite label value.\r\n * @public\r\n */\r\nexport interface LabelCompositeValue {\r\n separator: string;\r\n values: LabelDefinition[];\r\n}\r\n\r\n/**\r\n * Type definition of label raw value.\r\n * @public\r\n */\r\nexport type LabelRawValue = string | number | boolean | LabelCompositeValue;\r\n\r\n/**\r\n * Data structure that describes label definition.\r\n * @public\r\n */\r\nexport interface LabelDefinition {\r\n /** Display value of label */\r\n displayValue: string;\r\n /** Raw value of label */\r\n rawValue: LabelRawValue;\r\n /** Type name of raw value */\r\n typeName: string;\r\n}\r\n\r\n/** @internal */\r\nexport const COMPOSITE_LABEL_DEFINITION_TYPENAME = \"composite\";\r\n\r\n/** @public */\r\nexport namespace LabelDefinition {\r\n /**\r\n * Checks if provided [[LabelDefinition]] has raw value of type [[LabelCompositeValue]].\r\n * @public\r\n */\r\n export function isCompositeDefinition(def: LabelDefinition): def is LabelDefinition & { rawValue: LabelCompositeValue } {\r\n return def.typeName === COMPOSITE_LABEL_DEFINITION_TYPENAME;\r\n }\r\n\r\n /**\r\n * Creates [[LabelDefinition]] from string value.\r\n * @public\r\n */\r\n export function fromLabelString(label: string): LabelDefinition {\r\n return {\r\n displayValue: label,\r\n rawValue: label,\r\n typeName: \"string\",\r\n };\r\n }\r\n}\r\n"]}