@itwin/presentation-common 3.4.0-dev.50 → 3.4.0-dev.56

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 (459) hide show
  1. package/lib/cjs/assets/locales/en/BisCore.json +18 -18
  2. package/lib/cjs/assets/locales/en/ECPresentation.json +9 -9
  3. package/lib/cjs/assets/locales/en/RulesEngine.json +5 -5
  4. package/lib/cjs/presentation-common/AsyncTasks.d.ts +22 -22
  5. package/lib/cjs/presentation-common/AsyncTasks.js +38 -38
  6. package/lib/cjs/presentation-common/AsyncTasks.js.map +1 -1
  7. package/lib/cjs/presentation-common/CommonLoggerCategory.d.ts +12 -12
  8. package/lib/cjs/presentation-common/CommonLoggerCategory.js +20 -20
  9. package/lib/cjs/presentation-common/CommonLoggerCategory.js.map +1 -1
  10. package/lib/cjs/presentation-common/Diagnostics.d.ts +125 -125
  11. package/lib/cjs/presentation-common/Diagnostics.js +72 -72
  12. package/lib/cjs/presentation-common/Diagnostics.js.map +1 -1
  13. package/lib/cjs/presentation-common/EC.d.ts +315 -315
  14. package/lib/cjs/presentation-common/EC.js +270 -270
  15. package/lib/cjs/presentation-common/EC.js.map +1 -1
  16. package/lib/cjs/presentation-common/ElementProperties.d.ts +123 -123
  17. package/lib/cjs/presentation-common/ElementProperties.js +9 -9
  18. package/lib/cjs/presentation-common/ElementProperties.js.map +1 -1
  19. package/lib/cjs/presentation-common/Error.d.ts +45 -45
  20. package/lib/cjs/presentation-common/Error.js +62 -62
  21. package/lib/cjs/presentation-common/Error.js.map +1 -1
  22. package/lib/cjs/presentation-common/KeySet.d.ts +146 -146
  23. package/lib/cjs/presentation-common/KeySet.js +418 -418
  24. package/lib/cjs/presentation-common/KeySet.js.map +1 -1
  25. package/lib/cjs/presentation-common/LabelDefinition.d.ts +79 -79
  26. package/lib/cjs/presentation-common/LabelDefinition.js +76 -76
  27. package/lib/cjs/presentation-common/LabelDefinition.js.map +1 -1
  28. package/lib/cjs/presentation-common/LocalizationHelper.d.ts +29 -29
  29. package/lib/cjs/presentation-common/LocalizationHelper.js +110 -110
  30. package/lib/cjs/presentation-common/LocalizationHelper.js.map +1 -1
  31. package/lib/cjs/presentation-common/PresentationIpcInterface.d.ts +37 -37
  32. package/lib/cjs/presentation-common/PresentationIpcInterface.js +12 -12
  33. package/lib/cjs/presentation-common/PresentationIpcInterface.js.map +1 -1
  34. package/lib/cjs/presentation-common/PresentationManagerOptions.d.ts +242 -242
  35. package/lib/cjs/presentation-common/PresentationManagerOptions.js +23 -23
  36. package/lib/cjs/presentation-common/PresentationManagerOptions.js.map +1 -1
  37. package/lib/cjs/presentation-common/PresentationRpcInterface.d.ts +181 -181
  38. package/lib/cjs/presentation-common/PresentationRpcInterface.js +102 -102
  39. package/lib/cjs/presentation-common/PresentationRpcInterface.js.map +1 -1
  40. package/lib/cjs/presentation-common/RegisteredRuleset.d.ts +26 -26
  41. package/lib/cjs/presentation-common/RegisteredRuleset.js +33 -33
  42. package/lib/cjs/presentation-common/RegisteredRuleset.js.map +1 -1
  43. package/lib/cjs/presentation-common/RpcRequestsHandler.d.ts +82 -82
  44. package/lib/cjs/presentation-common/RpcRequestsHandler.js +155 -155
  45. package/lib/cjs/presentation-common/RpcRequestsHandler.js.map +1 -1
  46. package/lib/cjs/presentation-common/RulesetVariables.d.ts +166 -166
  47. package/lib/cjs/presentation-common/RulesetVariables.js +55 -55
  48. package/lib/cjs/presentation-common/RulesetVariables.js.map +1 -1
  49. package/lib/cjs/presentation-common/RulesetsFactory.d.ts +44 -44
  50. package/lib/cjs/presentation-common/RulesetsFactory.js +223 -226
  51. package/lib/cjs/presentation-common/RulesetsFactory.js.map +1 -1
  52. package/lib/cjs/presentation-common/Update.d.ts +194 -194
  53. package/lib/cjs/presentation-common/Update.js +196 -196
  54. package/lib/cjs/presentation-common/Update.js.map +1 -1
  55. package/lib/cjs/presentation-common/Utils.d.ts +64 -64
  56. package/lib/cjs/presentation-common/Utils.js +45 -45
  57. package/lib/cjs/presentation-common/Utils.js.map +1 -1
  58. package/lib/cjs/presentation-common/content/Category.d.ts +49 -49
  59. package/lib/cjs/presentation-common/content/Category.js +49 -49
  60. package/lib/cjs/presentation-common/content/Category.js.map +1 -1
  61. package/lib/cjs/presentation-common/content/Content.d.ts +38 -38
  62. package/lib/cjs/presentation-common/content/Content.js +56 -56
  63. package/lib/cjs/presentation-common/content/Content.js.map +1 -1
  64. package/lib/cjs/presentation-common/content/ContentTraverser.d.ts +101 -101
  65. package/lib/cjs/presentation-common/content/ContentTraverser.js +420 -420
  66. package/lib/cjs/presentation-common/content/ContentTraverser.js.map +1 -1
  67. package/lib/cjs/presentation-common/content/Descriptor.d.ts +240 -240
  68. package/lib/cjs/presentation-common/content/Descriptor.js +189 -189
  69. package/lib/cjs/presentation-common/content/Descriptor.js.map +1 -1
  70. package/lib/cjs/presentation-common/content/DisplayTypes.d.ts +21 -21
  71. package/lib/cjs/presentation-common/content/DisplayTypes.js +29 -29
  72. package/lib/cjs/presentation-common/content/DisplayTypes.js.map +1 -1
  73. package/lib/cjs/presentation-common/content/Editor.d.ts +15 -15
  74. package/lib/cjs/presentation-common/content/Editor.js +9 -9
  75. package/lib/cjs/presentation-common/content/Editor.js.map +1 -1
  76. package/lib/cjs/presentation-common/content/Fields.d.ts +282 -282
  77. package/lib/cjs/presentation-common/content/Fields.js +394 -394
  78. package/lib/cjs/presentation-common/content/Fields.js.map +1 -1
  79. package/lib/cjs/presentation-common/content/Item.d.ts +87 -87
  80. package/lib/cjs/presentation-common/content/Item.js +86 -86
  81. package/lib/cjs/presentation-common/content/Item.js.map +1 -1
  82. package/lib/cjs/presentation-common/content/Property.d.ts +51 -51
  83. package/lib/cjs/presentation-common/content/Property.js +36 -36
  84. package/lib/cjs/presentation-common/content/Property.js.map +1 -1
  85. package/lib/cjs/presentation-common/content/Renderer.d.ts +11 -11
  86. package/lib/cjs/presentation-common/content/Renderer.js +9 -9
  87. package/lib/cjs/presentation-common/content/Renderer.js.map +1 -1
  88. package/lib/cjs/presentation-common/content/TypeDescription.d.ts +72 -72
  89. package/lib/cjs/presentation-common/content/TypeDescription.js +23 -23
  90. package/lib/cjs/presentation-common/content/TypeDescription.js.map +1 -1
  91. package/lib/cjs/presentation-common/content/Value.d.ts +157 -157
  92. package/lib/cjs/presentation-common/content/Value.d.ts.map +1 -1
  93. package/lib/cjs/presentation-common/content/Value.js +217 -203
  94. package/lib/cjs/presentation-common/content/Value.js.map +1 -1
  95. package/lib/cjs/presentation-common/hierarchy/Key.d.ts +185 -185
  96. package/lib/cjs/presentation-common/hierarchy/Key.js +112 -112
  97. package/lib/cjs/presentation-common/hierarchy/Key.js.map +1 -1
  98. package/lib/cjs/presentation-common/hierarchy/Node.d.ts +141 -141
  99. package/lib/cjs/presentation-common/hierarchy/Node.js +97 -97
  100. package/lib/cjs/presentation-common/hierarchy/Node.js.map +1 -1
  101. package/lib/cjs/presentation-common/hierarchy/NodePathElement.d.ts +85 -85
  102. package/lib/cjs/presentation-common/hierarchy/NodePathElement.js +98 -98
  103. package/lib/cjs/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  104. package/lib/cjs/presentation-common/rules/ClassSpecifications.d.ts +45 -45
  105. package/lib/cjs/presentation-common/rules/ClassSpecifications.js +9 -9
  106. package/lib/cjs/presentation-common/rules/ClassSpecifications.js.map +1 -1
  107. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.d.ts +31 -31
  108. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js +9 -9
  109. package/lib/cjs/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  110. package/lib/cjs/presentation-common/rules/RelationshipDirection.d.ts +13 -13
  111. package/lib/cjs/presentation-common/rules/RelationshipDirection.js +21 -21
  112. package/lib/cjs/presentation-common/rules/RelationshipDirection.js.map +1 -1
  113. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.d.ts +53 -53
  114. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js +9 -9
  115. package/lib/cjs/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  116. package/lib/cjs/presentation-common/rules/Rule.d.ts +74 -74
  117. package/lib/cjs/presentation-common/rules/Rule.js +35 -35
  118. package/lib/cjs/presentation-common/rules/Rule.js.map +1 -1
  119. package/lib/cjs/presentation-common/rules/Ruleset.d.ts +66 -66
  120. package/lib/cjs/presentation-common/rules/Ruleset.js +9 -9
  121. package/lib/cjs/presentation-common/rules/Ruleset.js.map +1 -1
  122. package/lib/cjs/presentation-common/rules/SchemasSpecification.d.ts +41 -41
  123. package/lib/cjs/presentation-common/rules/SchemasSpecification.js +9 -9
  124. package/lib/cjs/presentation-common/rules/SchemasSpecification.js.map +1 -1
  125. package/lib/cjs/presentation-common/rules/Variables.d.ts +55 -55
  126. package/lib/cjs/presentation-common/rules/Variables.js +25 -25
  127. package/lib/cjs/presentation-common/rules/Variables.js.map +1 -1
  128. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.d.ts +41 -41
  129. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +9 -9
  130. package/lib/cjs/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  131. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.d.ts +25 -25
  132. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +9 -9
  133. package/lib/cjs/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  134. package/lib/cjs/presentation-common/rules/content/ContentRule.d.ts +30 -30
  135. package/lib/cjs/presentation-common/rules/content/ContentRule.js +9 -9
  136. package/lib/cjs/presentation-common/rules/content/ContentRule.js.map +1 -1
  137. package/lib/cjs/presentation-common/rules/content/ContentSpecification.d.ts +55 -55
  138. package/lib/cjs/presentation-common/rules/content/ContentSpecification.js +20 -20
  139. package/lib/cjs/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  140. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.d.ts +19 -19
  141. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +9 -9
  142. package/lib/cjs/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  143. package/lib/cjs/presentation-common/rules/content/PropertySpecification.d.ts +86 -86
  144. package/lib/cjs/presentation-common/rules/content/PropertySpecification.js +9 -9
  145. package/lib/cjs/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  146. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.d.ts +28 -28
  147. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +9 -9
  148. package/lib/cjs/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  149. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.d.ts +25 -25
  150. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +9 -9
  151. package/lib/cjs/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  152. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.d.ts +57 -57
  153. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js +9 -9
  154. package/lib/cjs/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  155. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.d.ts +17 -17
  156. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +9 -9
  157. package/lib/cjs/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  158. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts +107 -107
  159. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +9 -9
  160. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  161. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts +105 -105
  162. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +21 -21
  163. package/lib/cjs/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  164. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.d.ts +93 -93
  165. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +43 -43
  166. package/lib/cjs/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  167. package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.d.ts +44 -44
  168. package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.js +9 -9
  169. package/lib/cjs/presentation-common/rules/customization/CheckBoxRule.js.map +1 -1
  170. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.d.ts +36 -36
  171. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js +9 -9
  172. package/lib/cjs/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  173. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.d.ts +27 -27
  174. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js +9 -9
  175. package/lib/cjs/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  176. package/lib/cjs/presentation-common/rules/customization/GroupingRule.d.ts +200 -200
  177. package/lib/cjs/presentation-common/rules/customization/GroupingRule.js +51 -51
  178. package/lib/cjs/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  179. package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.d.ts +29 -29
  180. package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.js +9 -9
  181. package/lib/cjs/presentation-common/rules/customization/ImageIdOverride.js.map +1 -1
  182. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.d.ts +156 -156
  183. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js +25 -25
  184. package/lib/cjs/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  185. package/lib/cjs/presentation-common/rules/customization/LabelOverride.d.ts +40 -40
  186. package/lib/cjs/presentation-common/rules/customization/LabelOverride.js +9 -9
  187. package/lib/cjs/presentation-common/rules/customization/LabelOverride.js.map +1 -1
  188. package/lib/cjs/presentation-common/rules/customization/SortingRule.d.ts +58 -58
  189. package/lib/cjs/presentation-common/rules/customization/SortingRule.js +9 -9
  190. package/lib/cjs/presentation-common/rules/customization/SortingRule.js.map +1 -1
  191. package/lib/cjs/presentation-common/rules/customization/StyleOverride.d.ts +48 -48
  192. package/lib/cjs/presentation-common/rules/customization/StyleOverride.js +9 -9
  193. package/lib/cjs/presentation-common/rules/customization/StyleOverride.js.map +1 -1
  194. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.d.ts +15 -15
  195. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js +9 -9
  196. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  197. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts +97 -97
  198. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js +22 -22
  199. package/lib/cjs/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  200. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +31 -31
  201. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js +9 -9
  202. package/lib/cjs/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  203. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.d.ts +76 -76
  204. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +19 -19
  205. package/lib/cjs/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  206. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.d.ts +39 -39
  207. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +9 -9
  208. package/lib/cjs/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  209. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.d.ts +50 -50
  210. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js +9 -9
  211. package/lib/cjs/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  212. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.d.ts +27 -27
  213. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js +9 -9
  214. package/lib/cjs/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  215. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.d.ts +27 -27
  216. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +9 -9
  217. package/lib/cjs/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  218. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.d.ts +17 -17
  219. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js +9 -9
  220. package/lib/cjs/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  221. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.d.ts +36 -36
  222. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js +9 -9
  223. package/lib/cjs/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  224. package/lib/cjs/presentation-common/selection/SelectionScope.d.ts +25 -25
  225. package/lib/cjs/presentation-common/selection/SelectionScope.js +9 -9
  226. package/lib/cjs/presentation-common/selection/SelectionScope.js.map +1 -1
  227. package/lib/cjs/presentation-common.d.ts +110 -110
  228. package/lib/cjs/presentation-common.js +126 -126
  229. package/lib/cjs/presentation-common.js.map +1 -1
  230. package/lib/esm/presentation-common/AsyncTasks.d.ts +22 -22
  231. package/lib/esm/presentation-common/AsyncTasks.js +34 -34
  232. package/lib/esm/presentation-common/AsyncTasks.js.map +1 -1
  233. package/lib/esm/presentation-common/CommonLoggerCategory.d.ts +12 -12
  234. package/lib/esm/presentation-common/CommonLoggerCategory.js +17 -17
  235. package/lib/esm/presentation-common/CommonLoggerCategory.js.map +1 -1
  236. package/lib/esm/presentation-common/Diagnostics.d.ts +125 -125
  237. package/lib/esm/presentation-common/Diagnostics.js +67 -67
  238. package/lib/esm/presentation-common/Diagnostics.js.map +1 -1
  239. package/lib/esm/presentation-common/EC.d.ts +315 -315
  240. package/lib/esm/presentation-common/EC.js +267 -267
  241. package/lib/esm/presentation-common/EC.js.map +1 -1
  242. package/lib/esm/presentation-common/ElementProperties.d.ts +123 -123
  243. package/lib/esm/presentation-common/ElementProperties.js +8 -8
  244. package/lib/esm/presentation-common/ElementProperties.js.map +1 -1
  245. package/lib/esm/presentation-common/Error.d.ts +45 -45
  246. package/lib/esm/presentation-common/Error.js +58 -58
  247. package/lib/esm/presentation-common/Error.js.map +1 -1
  248. package/lib/esm/presentation-common/KeySet.d.ts +146 -146
  249. package/lib/esm/presentation-common/KeySet.js +414 -414
  250. package/lib/esm/presentation-common/KeySet.js.map +1 -1
  251. package/lib/esm/presentation-common/LabelDefinition.d.ts +79 -79
  252. package/lib/esm/presentation-common/LabelDefinition.js +73 -73
  253. package/lib/esm/presentation-common/LabelDefinition.js.map +1 -1
  254. package/lib/esm/presentation-common/LocalizationHelper.d.ts +29 -29
  255. package/lib/esm/presentation-common/LocalizationHelper.js +106 -106
  256. package/lib/esm/presentation-common/LocalizationHelper.js.map +1 -1
  257. package/lib/esm/presentation-common/PresentationIpcInterface.d.ts +37 -37
  258. package/lib/esm/presentation-common/PresentationIpcInterface.js +9 -9
  259. package/lib/esm/presentation-common/PresentationIpcInterface.js.map +1 -1
  260. package/lib/esm/presentation-common/PresentationManagerOptions.d.ts +242 -242
  261. package/lib/esm/presentation-common/PresentationManagerOptions.js +18 -18
  262. package/lib/esm/presentation-common/PresentationManagerOptions.js.map +1 -1
  263. package/lib/esm/presentation-common/PresentationRpcInterface.d.ts +181 -181
  264. package/lib/esm/presentation-common/PresentationRpcInterface.js +98 -98
  265. package/lib/esm/presentation-common/PresentationRpcInterface.js.map +1 -1
  266. package/lib/esm/presentation-common/RegisteredRuleset.d.ts +26 -26
  267. package/lib/esm/presentation-common/RegisteredRuleset.js +29 -29
  268. package/lib/esm/presentation-common/RegisteredRuleset.js.map +1 -1
  269. package/lib/esm/presentation-common/RpcRequestsHandler.d.ts +82 -82
  270. package/lib/esm/presentation-common/RpcRequestsHandler.js +151 -151
  271. package/lib/esm/presentation-common/RpcRequestsHandler.js.map +1 -1
  272. package/lib/esm/presentation-common/RulesetVariables.d.ts +166 -166
  273. package/lib/esm/presentation-common/RulesetVariables.js +52 -52
  274. package/lib/esm/presentation-common/RulesetVariables.js.map +1 -1
  275. package/lib/esm/presentation-common/RulesetsFactory.d.ts +44 -44
  276. package/lib/esm/presentation-common/RulesetsFactory.js +219 -222
  277. package/lib/esm/presentation-common/RulesetsFactory.js.map +1 -1
  278. package/lib/esm/presentation-common/Update.d.ts +194 -194
  279. package/lib/esm/presentation-common/Update.js +193 -193
  280. package/lib/esm/presentation-common/Update.js.map +1 -1
  281. package/lib/esm/presentation-common/Utils.d.ts +64 -64
  282. package/lib/esm/presentation-common/Utils.js +41 -41
  283. package/lib/esm/presentation-common/Utils.js.map +1 -1
  284. package/lib/esm/presentation-common/content/Category.d.ts +49 -49
  285. package/lib/esm/presentation-common/content/Category.js +46 -46
  286. package/lib/esm/presentation-common/content/Category.js.map +1 -1
  287. package/lib/esm/presentation-common/content/Content.d.ts +38 -38
  288. package/lib/esm/presentation-common/content/Content.js +52 -52
  289. package/lib/esm/presentation-common/content/Content.js.map +1 -1
  290. package/lib/esm/presentation-common/content/ContentTraverser.d.ts +101 -101
  291. package/lib/esm/presentation-common/content/ContentTraverser.js +411 -411
  292. package/lib/esm/presentation-common/content/ContentTraverser.js.map +1 -1
  293. package/lib/esm/presentation-common/content/Descriptor.d.ts +240 -240
  294. package/lib/esm/presentation-common/content/Descriptor.js +185 -185
  295. package/lib/esm/presentation-common/content/Descriptor.js.map +1 -1
  296. package/lib/esm/presentation-common/content/DisplayTypes.d.ts +21 -21
  297. package/lib/esm/presentation-common/content/DisplayTypes.js +26 -26
  298. package/lib/esm/presentation-common/content/DisplayTypes.js.map +1 -1
  299. package/lib/esm/presentation-common/content/Editor.d.ts +15 -15
  300. package/lib/esm/presentation-common/content/Editor.js +8 -8
  301. package/lib/esm/presentation-common/content/Editor.js.map +1 -1
  302. package/lib/esm/presentation-common/content/Fields.d.ts +282 -282
  303. package/lib/esm/presentation-common/content/Fields.js +387 -387
  304. package/lib/esm/presentation-common/content/Fields.js.map +1 -1
  305. package/lib/esm/presentation-common/content/Item.d.ts +87 -87
  306. package/lib/esm/presentation-common/content/Item.js +82 -82
  307. package/lib/esm/presentation-common/content/Item.js.map +1 -1
  308. package/lib/esm/presentation-common/content/Property.d.ts +51 -51
  309. package/lib/esm/presentation-common/content/Property.js +33 -33
  310. package/lib/esm/presentation-common/content/Property.js.map +1 -1
  311. package/lib/esm/presentation-common/content/Renderer.d.ts +11 -11
  312. package/lib/esm/presentation-common/content/Renderer.js +8 -8
  313. package/lib/esm/presentation-common/content/Renderer.js.map +1 -1
  314. package/lib/esm/presentation-common/content/TypeDescription.d.ts +72 -72
  315. package/lib/esm/presentation-common/content/TypeDescription.js +20 -20
  316. package/lib/esm/presentation-common/content/TypeDescription.js.map +1 -1
  317. package/lib/esm/presentation-common/content/Value.d.ts +157 -157
  318. package/lib/esm/presentation-common/content/Value.d.ts.map +1 -1
  319. package/lib/esm/presentation-common/content/Value.js +214 -200
  320. package/lib/esm/presentation-common/content/Value.js.map +1 -1
  321. package/lib/esm/presentation-common/hierarchy/Key.d.ts +185 -185
  322. package/lib/esm/presentation-common/hierarchy/Key.js +109 -109
  323. package/lib/esm/presentation-common/hierarchy/Key.js.map +1 -1
  324. package/lib/esm/presentation-common/hierarchy/Node.d.ts +141 -141
  325. package/lib/esm/presentation-common/hierarchy/Node.js +94 -94
  326. package/lib/esm/presentation-common/hierarchy/Node.js.map +1 -1
  327. package/lib/esm/presentation-common/hierarchy/NodePathElement.d.ts +85 -85
  328. package/lib/esm/presentation-common/hierarchy/NodePathElement.js +95 -95
  329. package/lib/esm/presentation-common/hierarchy/NodePathElement.js.map +1 -1
  330. package/lib/esm/presentation-common/rules/ClassSpecifications.d.ts +45 -45
  331. package/lib/esm/presentation-common/rules/ClassSpecifications.js +8 -8
  332. package/lib/esm/presentation-common/rules/ClassSpecifications.js.map +1 -1
  333. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.d.ts +31 -31
  334. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js +8 -8
  335. package/lib/esm/presentation-common/rules/RelatedInstanceSpecification.js.map +1 -1
  336. package/lib/esm/presentation-common/rules/RelationshipDirection.d.ts +13 -13
  337. package/lib/esm/presentation-common/rules/RelationshipDirection.js +18 -18
  338. package/lib/esm/presentation-common/rules/RelationshipDirection.js.map +1 -1
  339. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.d.ts +53 -53
  340. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js +8 -8
  341. package/lib/esm/presentation-common/rules/RelationshipPathSpecification.js.map +1 -1
  342. package/lib/esm/presentation-common/rules/Rule.d.ts +74 -74
  343. package/lib/esm/presentation-common/rules/Rule.js +32 -32
  344. package/lib/esm/presentation-common/rules/Rule.js.map +1 -1
  345. package/lib/esm/presentation-common/rules/Ruleset.d.ts +66 -66
  346. package/lib/esm/presentation-common/rules/Ruleset.js +8 -8
  347. package/lib/esm/presentation-common/rules/Ruleset.js.map +1 -1
  348. package/lib/esm/presentation-common/rules/SchemasSpecification.d.ts +41 -41
  349. package/lib/esm/presentation-common/rules/SchemasSpecification.js +8 -8
  350. package/lib/esm/presentation-common/rules/SchemasSpecification.js.map +1 -1
  351. package/lib/esm/presentation-common/rules/Variables.d.ts +55 -55
  352. package/lib/esm/presentation-common/rules/Variables.js +22 -22
  353. package/lib/esm/presentation-common/rules/Variables.js.map +1 -1
  354. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.d.ts +41 -41
  355. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js +8 -8
  356. package/lib/esm/presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification.js.map +1 -1
  357. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.d.ts +25 -25
  358. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js +8 -8
  359. package/lib/esm/presentation-common/rules/content/ContentRelatedInstancesSpecification.js.map +1 -1
  360. package/lib/esm/presentation-common/rules/content/ContentRule.d.ts +30 -30
  361. package/lib/esm/presentation-common/rules/content/ContentRule.js +8 -8
  362. package/lib/esm/presentation-common/rules/content/ContentRule.js.map +1 -1
  363. package/lib/esm/presentation-common/rules/content/ContentSpecification.d.ts +55 -55
  364. package/lib/esm/presentation-common/rules/content/ContentSpecification.js +17 -17
  365. package/lib/esm/presentation-common/rules/content/ContentSpecification.js.map +1 -1
  366. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.d.ts +19 -19
  367. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js +8 -8
  368. package/lib/esm/presentation-common/rules/content/DefaultPropertyCategoryOverride.js.map +1 -1
  369. package/lib/esm/presentation-common/rules/content/PropertySpecification.d.ts +86 -86
  370. package/lib/esm/presentation-common/rules/content/PropertySpecification.js +8 -8
  371. package/lib/esm/presentation-common/rules/content/PropertySpecification.js.map +1 -1
  372. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.d.ts +28 -28
  373. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js +8 -8
  374. package/lib/esm/presentation-common/rules/content/SelectedNodeInstancesSpecification.js.map +1 -1
  375. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.d.ts +25 -25
  376. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js +8 -8
  377. package/lib/esm/presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification.js.map +1 -1
  378. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.d.ts +57 -57
  379. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js +8 -8
  380. package/lib/esm/presentation-common/rules/content/modifiers/ContentModifier.js.map +1 -1
  381. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.d.ts +17 -17
  382. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js +8 -8
  383. package/lib/esm/presentation-common/rules/content/modifiers/CustomRendererSpecification.js.map +1 -1
  384. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.d.ts +107 -107
  385. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js +8 -8
  386. package/lib/esm/presentation-common/rules/content/modifiers/PropertyCategorySpecification.js.map +1 -1
  387. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.d.ts +105 -105
  388. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js +18 -18
  389. package/lib/esm/presentation-common/rules/content/modifiers/PropertyEditorsSpecification.js.map +1 -1
  390. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.d.ts +93 -93
  391. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js +40 -40
  392. package/lib/esm/presentation-common/rules/content/modifiers/RelatedPropertiesSpecification.js.map +1 -1
  393. package/lib/esm/presentation-common/rules/customization/CheckBoxRule.d.ts +44 -44
  394. package/lib/esm/presentation-common/rules/customization/CheckBoxRule.js +8 -8
  395. package/lib/esm/presentation-common/rules/customization/CheckBoxRule.js.map +1 -1
  396. package/lib/esm/presentation-common/rules/customization/CustomizationRule.d.ts +36 -36
  397. package/lib/esm/presentation-common/rules/customization/CustomizationRule.js +8 -8
  398. package/lib/esm/presentation-common/rules/customization/CustomizationRule.js.map +1 -1
  399. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.d.ts +27 -27
  400. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js +8 -8
  401. package/lib/esm/presentation-common/rules/customization/ExtendedDataRule.js.map +1 -1
  402. package/lib/esm/presentation-common/rules/customization/GroupingRule.d.ts +200 -200
  403. package/lib/esm/presentation-common/rules/customization/GroupingRule.js +48 -48
  404. package/lib/esm/presentation-common/rules/customization/GroupingRule.js.map +1 -1
  405. package/lib/esm/presentation-common/rules/customization/ImageIdOverride.d.ts +29 -29
  406. package/lib/esm/presentation-common/rules/customization/ImageIdOverride.js +8 -8
  407. package/lib/esm/presentation-common/rules/customization/ImageIdOverride.js.map +1 -1
  408. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.d.ts +156 -156
  409. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js +22 -22
  410. package/lib/esm/presentation-common/rules/customization/InstanceLabelOverride.js.map +1 -1
  411. package/lib/esm/presentation-common/rules/customization/LabelOverride.d.ts +40 -40
  412. package/lib/esm/presentation-common/rules/customization/LabelOverride.js +8 -8
  413. package/lib/esm/presentation-common/rules/customization/LabelOverride.js.map +1 -1
  414. package/lib/esm/presentation-common/rules/customization/SortingRule.d.ts +58 -58
  415. package/lib/esm/presentation-common/rules/customization/SortingRule.js +8 -8
  416. package/lib/esm/presentation-common/rules/customization/SortingRule.js.map +1 -1
  417. package/lib/esm/presentation-common/rules/customization/StyleOverride.d.ts +48 -48
  418. package/lib/esm/presentation-common/rules/customization/StyleOverride.js +8 -8
  419. package/lib/esm/presentation-common/rules/customization/StyleOverride.js.map +1 -1
  420. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.d.ts +15 -15
  421. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js +8 -8
  422. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeRule.js.map +1 -1
  423. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.d.ts +97 -97
  424. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js +19 -19
  425. package/lib/esm/presentation-common/rules/hierarchy/ChildNodeSpecification.js.map +1 -1
  426. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.d.ts +31 -31
  427. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js +8 -8
  428. package/lib/esm/presentation-common/rules/hierarchy/CustomNodeSpecification.js.map +1 -1
  429. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.d.ts +76 -76
  430. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js +16 -16
  431. package/lib/esm/presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification.js.map +1 -1
  432. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.d.ts +39 -39
  433. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js +8 -8
  434. package/lib/esm/presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification.js.map +1 -1
  435. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.d.ts +50 -50
  436. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js +8 -8
  437. package/lib/esm/presentation-common/rules/hierarchy/NavigationRule.js.map +1 -1
  438. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.d.ts +27 -27
  439. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js +8 -8
  440. package/lib/esm/presentation-common/rules/hierarchy/NodeArtifactsRule.js.map +1 -1
  441. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.d.ts +27 -27
  442. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js +8 -8
  443. package/lib/esm/presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification.js.map +1 -1
  444. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.d.ts +17 -17
  445. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js +8 -8
  446. package/lib/esm/presentation-common/rules/hierarchy/RootNodeRule.js.map +1 -1
  447. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.d.ts +36 -36
  448. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js +8 -8
  449. package/lib/esm/presentation-common/rules/hierarchy/SubCondition.js.map +1 -1
  450. package/lib/esm/presentation-common/selection/SelectionScope.d.ts +25 -25
  451. package/lib/esm/presentation-common/selection/SelectionScope.js +8 -8
  452. package/lib/esm/presentation-common/selection/SelectionScope.js.map +1 -1
  453. package/lib/esm/presentation-common.d.ts +110 -110
  454. package/lib/esm/presentation-common.js +114 -114
  455. package/lib/esm/presentation-common.js.map +1 -1
  456. package/lib/public/locales/en/BisCore.json +18 -18
  457. package/lib/public/locales/en/ECPresentation.json +9 -9
  458. package/lib/public/locales/en/RulesEngine.json +5 -5
  459. package/package.json +9 -9
@@ -1,223 +1,220 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Core
7
- */
8
- import { Guid, Id64 } from "@itwin/core-bentley";
9
- import { PropertyValueFormat } from "./content/TypeDescription";
10
- import { Value } from "./content/Value";
11
- import { RelationshipPath } from "./EC";
12
- import { ContentSpecificationTypes } from "./rules/content/ContentSpecification";
13
- import { RelationshipDirection } from "./rules/RelationshipDirection";
14
- import { RuleTypes } from "./rules/Rule";
15
- /**
16
- * A factory class that can be used to create presentation rulesets targeted towards
17
- * specific use cases.
18
- *
19
- * @public
20
- */
21
- export class RulesetsFactory {
22
- createSimilarInstancesRulesetInfo(field, record) {
23
- if (!field.isPropertiesField())
24
- throw new Error("Can only create 'similar instances' ruleset for properties-based records");
25
- if (field.type.valueFormat !== PropertyValueFormat.Primitive)
26
- throw new Error("Can only create 'similar instances' ruleset for primitive properties");
27
- if (field.properties.length === 0)
28
- throw new Error("Invalid properties' field with no properties");
29
- if (record.isFieldMerged(field.name))
30
- throw new Error("Can't create 'similar instances' ruleset for merged values");
31
- if (!record.classInfo)
32
- throw new Error("Can't create 'similar instances' for records based on multiple different ECClass instances");
33
- const propertyName = getPropertyName(field);
34
- const propertyValue = getPropertyValue(record, field);
35
- const relatedInstanceInfo = createRelatedInstanceSpecInfo(field);
36
- const relatedClass = relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.class;
37
- const ruleset = {
38
- id: `SimilarInstances/${propertyName}/${Guid.createValue()}`,
39
- rules: [],
40
- };
41
- ruleset.rules.push({
42
- ruleType: RuleTypes.Content,
43
- specifications: [{
44
- specType: ContentSpecificationTypes.ContentInstancesOfSpecificClasses,
45
- classes: createMultiClassSpecification(record.classInfo),
46
- handleInstancesPolymorphically: true,
47
- relatedInstances: relatedInstanceInfo ? [relatedInstanceInfo.spec] : [],
48
- instanceFilter: createInstanceFilter(relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.spec, field.type, propertyName, propertyValue.raw),
49
- }],
50
- });
51
- return { ruleset, relatedClass, propertyName, propertyValue };
52
- }
53
- /**
54
- * Create a ruleset with content rules for getting instances are of the
55
- * same ECClass and have the same property value as the provided `record`.
56
- * @param field A field identifying which property of the record we should use
57
- * @param record A record whose similar instances should be found
58
- * @param computeDisplayValue Optional callback function to calculate display value that's
59
- * used in ruleset's description. If not provided, display value from record is used instead.
60
- */
61
- async createSimilarInstancesRuleset(field, record, computeDisplayValue) {
62
- const info = this.createSimilarInstancesRulesetInfo(field, record);
63
- const description = await createDescriptionAsync(record, info.relatedClass, field, info.propertyValue, computeDisplayValue);
64
- return { ruleset: info.ruleset, description };
65
- }
66
- }
67
- const toString = (displayValue) => {
68
- if (!displayValue)
69
- return "NULL";
70
- return displayValue.toString();
71
- };
72
- const createDescription = (record, relatedClass, field, value) => {
73
- const classInfo = relatedClass !== null && relatedClass !== void 0 ? relatedClass : record.classInfo;
74
- return `[${classInfo.label}].[${field.label}] = ${value}`;
75
- };
76
- const createDescriptionAsync = async (record, relatedClass, field, value, computeDisplayValue) => {
77
- const displayValue = computeDisplayValue ? await computeDisplayValue(field.type.typeName, value.raw, value.display) : toString(value.display);
78
- return createDescription(record, relatedClass, field, displayValue);
79
- };
80
- const getPropertyName = (field) => {
81
- let name = field.properties[0].property.name;
82
- if (field.type.typeName === "navigation")
83
- name += ".Id";
84
- return name;
85
- };
86
- const isPrimitivePropertyValue = (value) => {
87
- if (Value.isPrimitive(value)) {
88
- return true;
89
- }
90
- if (Value.isMap(value)) {
91
- if (typeof value.x === "number"
92
- && typeof value.y === "number"
93
- && (value.z === undefined || typeof value.z === "number")) {
94
- return true;
95
- }
96
- if (typeof value.className === "string" && typeof value.id === "string") {
97
- return true;
98
- }
99
- }
100
- return false;
101
- };
102
- const getPropertyValue = (record, field) => {
103
- const fieldNamesStack = [];
104
- let currField = field;
105
- while (currField) {
106
- fieldNamesStack.push(currField.name);
107
- currField = currField.parent;
108
- }
109
- let currFieldName = fieldNamesStack.pop();
110
- let displayValue = record.displayValues[currFieldName];
111
- let value = record.values[currFieldName];
112
- currFieldName = fieldNamesStack.pop();
113
- while (currFieldName) {
114
- if (!Value.isNestedContent(value) || value.length === 0)
115
- throw new Error("Invalid record value");
116
- if (value.length > 1)
117
- throw new Error("Can't create 'similar instances' for records related through many part of *-to-many relationship");
118
- if (value[0].mergedFieldNames.indexOf(currFieldName) !== -1)
119
- throw new Error("Can't create 'similar instances' ruleset for merged values");
120
- displayValue = value[0].displayValues[currFieldName];
121
- value = value[0].values[currFieldName];
122
- currFieldName = fieldNamesStack.pop();
123
- }
124
- if (!isPrimitivePropertyValue(value))
125
- throw new Error("Can only create 'similar instances' ruleset for primitive values");
126
- return { raw: value, display: toString(displayValue) };
127
- };
128
- const createInstanceFilter = (relatedInstanceSpec, propertyType, propertyName, propertyValue) => {
129
- const alias = relatedInstanceSpec ? relatedInstanceSpec.alias : "this";
130
- return createComparison(propertyType, `${alias}.${propertyName}`, "=", propertyValue);
131
- };
132
- const createComparison = (type, name, operator, value) => {
133
- let compareValue = "";
134
- switch (typeof value) {
135
- case "undefined":
136
- compareValue = "NULL";
137
- break;
138
- case "string":
139
- compareValue = `"${value.replace(/"/g, `""`)}"`;
140
- break;
141
- case "boolean":
142
- compareValue = value ? "TRUE" : "FALSE";
143
- break;
144
- case "number":
145
- compareValue = value.toString();
146
- break;
147
- }
148
- if (type.typeName === "navigation" && typeof value === "object" && Id64.isId64(value.id)) {
149
- // note: this is temporary until we support hex ids in instance filters
150
- compareValue = hexToDec(value.id);
151
- }
152
- if (type.typeName === "point2d" || type.typeName === "point3d") {
153
- if (typeof value !== "object")
154
- throw new Error("Expecting point values to be supplied as objects");
155
- const dimensionType = {
156
- valueFormat: PropertyValueFormat.Primitive,
157
- typeName: "double",
158
- };
159
- const pointValue = value;
160
- let comparison = `${createComparison(dimensionType, `${name}.x`, operator, pointValue.x)}`;
161
- comparison += ` AND ${createComparison(dimensionType, `${name}.y`, operator, pointValue.y)}`;
162
- if (type.typeName === "point3d" && pointValue.z !== undefined)
163
- comparison += ` AND ${createComparison(dimensionType, `${name}.z`, operator, pointValue.z)}`;
164
- return comparison;
165
- }
166
- if (type.typeName === "double") {
167
- return `CompareDoubles(${name}, ${compareValue}) ${operator} 0`;
168
- }
169
- if (type.typeName === "dateTime") {
170
- return `CompareDateTimes(${name}, ${compareValue}) ${operator} 0`;
171
- }
172
- return `${name} ${operator} ${compareValue}`;
173
- };
174
- const createMultiClassSpecification = (classInfo) => {
175
- const [schemaName, className] = classInfo.name.split(":");
176
- return { schemaName, classNames: [className] };
177
- };
178
- const createSingleClassSpecification = (classInfo) => {
179
- const [schemaName, className] = classInfo.name.split(":");
180
- return { schemaName, className };
181
- };
182
- const createRelatedInstanceSpec = (pathFromSelectToPropertyClass, index) => ({
183
- spec: {
184
- relationshipPath: pathFromSelectToPropertyClass.map((step) => ({
185
- relationship: createSingleClassSpecification(step.relationshipInfo),
186
- direction: step.isForwardRelationship ? RelationshipDirection.Forward : RelationshipDirection.Backward,
187
- targetClass: createSingleClassSpecification(step.targetClassInfo),
188
- })),
189
- isRequired: true,
190
- alias: `related_${index}`,
191
- },
192
- class: pathFromSelectToPropertyClass[pathFromSelectToPropertyClass.length - 1].targetClassInfo,
193
- });
194
- const createPathFromSelectToPropertyClass = (field) => {
195
- let currField = field;
196
- const pathFromPropertyToSelectClass = [];
197
- while (currField.parent) {
198
- pathFromPropertyToSelectClass.push(...currField.parent.pathToPrimaryClass);
199
- currField = currField.parent;
200
- }
201
- return RelationshipPath.reverse(pathFromPropertyToSelectClass);
202
- };
203
- const createRelatedInstanceSpecInfo = (field) => {
204
- const path = createPathFromSelectToPropertyClass(field);
205
- return path.length ? createRelatedInstanceSpec(path, 0) : undefined;
206
- };
207
- const hexToDec = (id) => {
208
- const digits = [0];
209
- for (let i = 2; i < id.length; ++i) {
210
- let carry = parseInt(id.charAt(i), 16);
211
- for (let j = 0; j < digits.length; ++j) {
212
- digits[j] = digits[j] * 16 + carry;
213
- carry = digits[j] / 10 | 0;
214
- digits[j] %= 10;
215
- }
216
- while (carry > 0) {
217
- digits.push(carry % 10);
218
- carry = carry / 10 | 0;
219
- }
220
- }
221
- return digits.reverse().join("");
222
- };
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Core
7
+ */
8
+ import { Guid, Id64 } from "@itwin/core-bentley";
9
+ import { PropertyValueFormat } from "./content/TypeDescription";
10
+ import { Value } from "./content/Value";
11
+ import { RelationshipPath } from "./EC";
12
+ import { ContentSpecificationTypes } from "./rules/content/ContentSpecification";
13
+ import { RelationshipDirection } from "./rules/RelationshipDirection";
14
+ import { RuleTypes } from "./rules/Rule";
15
+ /**
16
+ * A factory class that can be used to create presentation rulesets targeted towards
17
+ * specific use cases.
18
+ *
19
+ * @public
20
+ */
21
+ export class RulesetsFactory {
22
+ createSimilarInstancesRulesetInfo(field, record) {
23
+ if (!field.isPropertiesField())
24
+ throw new Error("Can only create 'similar instances' ruleset for properties-based records");
25
+ if (field.type.valueFormat !== PropertyValueFormat.Primitive)
26
+ throw new Error("Can only create 'similar instances' ruleset for primitive properties");
27
+ if (field.properties.length === 0)
28
+ throw new Error("Invalid properties' field with no properties");
29
+ if (record.isFieldMerged(field.name))
30
+ throw new Error("Can't create 'similar instances' ruleset for merged values");
31
+ if (!record.classInfo)
32
+ throw new Error("Can't create 'similar instances' for records based on multiple different ECClass instances");
33
+ const propertyName = getPropertyName(field);
34
+ const propertyValue = getPropertyValue(record, field);
35
+ const relatedInstanceInfo = createRelatedInstanceSpecInfo(field);
36
+ const relatedClass = relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.class;
37
+ const ruleset = {
38
+ id: `SimilarInstances/${propertyName}/${Guid.createValue()}`,
39
+ rules: [],
40
+ };
41
+ ruleset.rules.push({
42
+ ruleType: RuleTypes.Content,
43
+ specifications: [{
44
+ specType: ContentSpecificationTypes.ContentInstancesOfSpecificClasses,
45
+ classes: createMultiClassSpecification(record.classInfo),
46
+ handleInstancesPolymorphically: true,
47
+ relatedInstances: relatedInstanceInfo ? [relatedInstanceInfo.spec] : [],
48
+ instanceFilter: createInstanceFilter(relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.spec, field.type, propertyName, propertyValue.raw),
49
+ }],
50
+ });
51
+ return { ruleset, relatedClass, propertyName, propertyValue };
52
+ }
53
+ /**
54
+ * Create a ruleset with content rules for getting instances are of the
55
+ * same ECClass and have the same property value as the provided `record`.
56
+ * @param field A field identifying which property of the record we should use
57
+ * @param record A record whose similar instances should be found
58
+ * @param computeDisplayValue Optional callback function to calculate display value that's
59
+ * used in ruleset's description. If not provided, display value from record is used instead.
60
+ */
61
+ async createSimilarInstancesRuleset(field, record, computeDisplayValue) {
62
+ const info = this.createSimilarInstancesRulesetInfo(field, record);
63
+ const description = await createDescriptionAsync(record, info.relatedClass, field, info.propertyValue, computeDisplayValue);
64
+ return { ruleset: info.ruleset, description };
65
+ }
66
+ }
67
+ const toString = (displayValue) => {
68
+ if (!displayValue)
69
+ return "NULL";
70
+ return displayValue.toString();
71
+ };
72
+ const createDescription = (record, relatedClass, field, value) => {
73
+ const classInfo = relatedClass !== null && relatedClass !== void 0 ? relatedClass : record.classInfo;
74
+ return `[${classInfo.label}].[${field.label}] = ${value}`;
75
+ };
76
+ const createDescriptionAsync = async (record, relatedClass, field, value, computeDisplayValue) => {
77
+ const displayValue = computeDisplayValue ? await computeDisplayValue(field.type.typeName, value.raw, value.display) : toString(value.display);
78
+ return createDescription(record, relatedClass, field, displayValue);
79
+ };
80
+ const getPropertyName = (field) => {
81
+ let name = field.properties[0].property.name;
82
+ if (field.type.typeName === "navigation")
83
+ name += ".Id";
84
+ return name;
85
+ };
86
+ const isPrimitivePropertyValue = (value) => {
87
+ if (Value.isPrimitive(value)) {
88
+ return true;
89
+ }
90
+ if (Value.isMap(value)) {
91
+ if (typeof value.x === "number"
92
+ && typeof value.y === "number"
93
+ && (value.z === undefined || typeof value.z === "number")) {
94
+ return true;
95
+ }
96
+ if (typeof value.className === "string" && typeof value.id === "string") {
97
+ return true;
98
+ }
99
+ }
100
+ return false;
101
+ };
102
+ const getPropertyValue = (record, field) => {
103
+ const fieldNamesStack = [];
104
+ let currField = field;
105
+ while (currField) {
106
+ fieldNamesStack.push(currField.name);
107
+ currField = currField.parent;
108
+ }
109
+ let currFieldName = fieldNamesStack.pop();
110
+ let displayValue = record.displayValues[currFieldName];
111
+ let value = record.values[currFieldName];
112
+ currFieldName = fieldNamesStack.pop();
113
+ while (currFieldName) {
114
+ if (!Value.isNestedContent(value) || value.length === 0)
115
+ throw new Error("Invalid record value");
116
+ if (value.length > 1)
117
+ throw new Error("Can't create 'similar instances' for records related through many part of *-to-many relationship");
118
+ if (value[0].mergedFieldNames.indexOf(currFieldName) !== -1)
119
+ throw new Error("Can't create 'similar instances' ruleset for merged values");
120
+ displayValue = value[0].displayValues[currFieldName];
121
+ value = value[0].values[currFieldName];
122
+ currFieldName = fieldNamesStack.pop();
123
+ }
124
+ if (!isPrimitivePropertyValue(value))
125
+ throw new Error("Can only create 'similar instances' ruleset for primitive values");
126
+ return { raw: value, display: toString(displayValue) };
127
+ };
128
+ const createInstanceFilter = (relatedInstanceSpec, propertyType, propertyName, propertyValue) => {
129
+ const alias = relatedInstanceSpec ? relatedInstanceSpec.alias : "this";
130
+ return createComparison(propertyType, `${alias}.${propertyName}`, "=", propertyValue);
131
+ };
132
+ const createComparison = (type, name, operator, value) => {
133
+ let compareValue = "";
134
+ switch (typeof value) {
135
+ case "undefined":
136
+ compareValue = "NULL";
137
+ break;
138
+ case "string":
139
+ compareValue = `"${value.replace(/"/g, `""`)}"`;
140
+ break;
141
+ case "boolean":
142
+ compareValue = value ? "TRUE" : "FALSE";
143
+ break;
144
+ case "number":
145
+ compareValue = value.toString();
146
+ break;
147
+ }
148
+ if (type.typeName === "navigation" && typeof value === "object" && Id64.isId64(value.id))
149
+ // note: this is temporary until we support hex ids in instance filters
150
+ compareValue = hexToDec(value.id);
151
+ if (type.typeName === "point2d" || type.typeName === "point3d") {
152
+ if (typeof value !== "object")
153
+ throw new Error("Expecting point values to be supplied as objects");
154
+ const dimensionType = {
155
+ valueFormat: PropertyValueFormat.Primitive,
156
+ typeName: "double",
157
+ };
158
+ const pointValue = value;
159
+ let comparison = `${createComparison(dimensionType, `${name}.x`, operator, pointValue.x)}`;
160
+ comparison += ` AND ${createComparison(dimensionType, `${name}.y`, operator, pointValue.y)}`;
161
+ if (type.typeName === "point3d" && pointValue.z !== undefined)
162
+ comparison += ` AND ${createComparison(dimensionType, `${name}.z`, operator, pointValue.z)}`;
163
+ return comparison;
164
+ }
165
+ if (type.typeName === "double")
166
+ return `CompareDoubles(${name}, ${compareValue}) ${operator} 0`;
167
+ if (type.typeName === "dateTime")
168
+ return `CompareDateTimes(${name}, ${compareValue}) ${operator} 0`;
169
+ return `${name} ${operator} ${compareValue}`;
170
+ };
171
+ const createMultiClassSpecification = (classInfo) => {
172
+ const [schemaName, className] = classInfo.name.split(":");
173
+ return { schemaName, classNames: [className] };
174
+ };
175
+ const createSingleClassSpecification = (classInfo) => {
176
+ const [schemaName, className] = classInfo.name.split(":");
177
+ return { schemaName, className };
178
+ };
179
+ const createRelatedInstanceSpec = (pathFromSelectToPropertyClass, index) => ({
180
+ spec: {
181
+ relationshipPath: pathFromSelectToPropertyClass.map((step) => ({
182
+ relationship: createSingleClassSpecification(step.relationshipInfo),
183
+ direction: step.isForwardRelationship ? RelationshipDirection.Forward : RelationshipDirection.Backward,
184
+ targetClass: createSingleClassSpecification(step.targetClassInfo),
185
+ })),
186
+ isRequired: true,
187
+ alias: `related_${index}`,
188
+ },
189
+ class: pathFromSelectToPropertyClass[pathFromSelectToPropertyClass.length - 1].targetClassInfo,
190
+ });
191
+ const createPathFromSelectToPropertyClass = (field) => {
192
+ let currField = field;
193
+ const pathFromPropertyToSelectClass = [];
194
+ while (currField.parent) {
195
+ pathFromPropertyToSelectClass.push(...currField.parent.pathToPrimaryClass);
196
+ currField = currField.parent;
197
+ }
198
+ return RelationshipPath.reverse(pathFromPropertyToSelectClass);
199
+ };
200
+ const createRelatedInstanceSpecInfo = (field) => {
201
+ const path = createPathFromSelectToPropertyClass(field);
202
+ return path.length ? createRelatedInstanceSpec(path, 0) : undefined;
203
+ };
204
+ const hexToDec = (id) => {
205
+ const digits = [0];
206
+ for (let i = 2; i < id.length; ++i) {
207
+ let carry = parseInt(id.charAt(i), 16);
208
+ for (let j = 0; j < digits.length; ++j) {
209
+ digits[j] = digits[j] * 16 + carry;
210
+ carry = digits[j] / 10 | 0;
211
+ digits[j] %= 10;
212
+ }
213
+ while (carry > 0) {
214
+ digits.push(carry % 10);
215
+ carry = carry / 10 | 0;
216
+ }
217
+ }
218
+ return digits.reverse().join("");
219
+ };
223
220
  //# sourceMappingURL=RulesetsFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetsFactory.js","sourceRoot":"","sources":["../../../src/presentation-common/RulesetsFactory.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 { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Field, PropertiesField } from \"./content/Fields\";\r\nimport { Item } from \"./content/Item\";\r\nimport { PrimitiveTypeDescription, PropertyValueFormat } from \"./content/TypeDescription\";\r\nimport { DisplayValue, Value } from \"./content/Value\";\r\nimport { ClassInfo, InstanceKey, RelationshipPath } from \"./EC\";\r\nimport { MultiSchemaClassesSpecification, SingleSchemaClassSpecification } from \"./rules/ClassSpecifications\";\r\nimport { ContentSpecificationTypes } from \"./rules/content/ContentSpecification\";\r\nimport { RelatedInstanceSpecification } from \"./rules/RelatedInstanceSpecification\";\r\nimport { RelationshipDirection } from \"./rules/RelationshipDirection\";\r\nimport { RuleTypes } from \"./rules/Rule\";\r\nimport { Ruleset } from \"./rules/Ruleset\";\r\n\r\n/**\r\n * A factory class that can be used to create presentation rulesets targeted towards\r\n * specific use cases.\r\n *\r\n * @public\r\n */\r\nexport class RulesetsFactory {\r\n private createSimilarInstancesRulesetInfo(field: Field, record: Item) {\r\n if (!field.isPropertiesField())\r\n throw new Error(\"Can only create 'similar instances' ruleset for properties-based records\");\r\n if (field.type.valueFormat !== PropertyValueFormat.Primitive)\r\n throw new Error(\"Can only create 'similar instances' ruleset for primitive properties\");\r\n if (field.properties.length === 0)\r\n throw new Error(\"Invalid properties' field with no properties\");\r\n if (record.isFieldMerged(field.name))\r\n throw new Error(\"Can't create 'similar instances' ruleset for merged values\");\r\n if (!record.classInfo)\r\n throw new Error(\"Can't create 'similar instances' for records based on multiple different ECClass instances\");\r\n const propertyName = getPropertyName(field);\r\n const propertyValue = getPropertyValue(record, field);\r\n const relatedInstanceInfo = createRelatedInstanceSpecInfo(field);\r\n const relatedClass = relatedInstanceInfo?.class;\r\n const ruleset: Ruleset = {\r\n id: `SimilarInstances/${propertyName}/${Guid.createValue()}`,\r\n rules: [],\r\n };\r\n ruleset.rules.push({\r\n ruleType: RuleTypes.Content,\r\n specifications: [{\r\n specType: ContentSpecificationTypes.ContentInstancesOfSpecificClasses,\r\n classes: createMultiClassSpecification(record.classInfo),\r\n handleInstancesPolymorphically: true,\r\n relatedInstances: relatedInstanceInfo ? [relatedInstanceInfo.spec] : [],\r\n instanceFilter: createInstanceFilter(relatedInstanceInfo?.spec, field.type, propertyName, propertyValue.raw),\r\n }],\r\n });\r\n return { ruleset, relatedClass, propertyName, propertyValue };\r\n }\r\n\r\n /**\r\n * Create a ruleset with content rules for getting instances are of the\r\n * same ECClass and have the same property value as the provided `record`.\r\n * @param field A field identifying which property of the record we should use\r\n * @param record A record whose similar instances should be found\r\n * @param computeDisplayValue Optional callback function to calculate display value that's\r\n * used in ruleset's description. If not provided, display value from record is used instead.\r\n */\r\n public async createSimilarInstancesRuleset(field: Field, record: Item, computeDisplayValue?: ComputeDisplayValueCallback): Promise<{ ruleset: Ruleset, description: string }> {\r\n const info = this.createSimilarInstancesRulesetInfo(field, record);\r\n const description = await createDescriptionAsync(record, info.relatedClass, field, info.propertyValue, computeDisplayValue);\r\n return { ruleset: info.ruleset, description };\r\n }\r\n}\r\n\r\n/**\r\n * Definition of a function for calculating a display value.\r\n * @public\r\n */\r\nexport type ComputeDisplayValueCallback = (type: string, value: PrimitivePropertyValue, displayValue: string) => Promise<string>;\r\n\r\ninterface PrimitiveValueDef {\r\n raw: PrimitivePropertyValue;\r\n display: string;\r\n}\r\n\r\n/**\r\n * Value of a primitive property.\r\n * @public\r\n */\r\nexport type PrimitivePropertyValue = string | number | boolean | Point | InstanceKey | undefined;\r\n\r\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\r\ntype Point = { x: number, y: number, z?: number };\r\n\r\nconst toString = (displayValue: Value | DisplayValue): string => {\r\n if (!displayValue)\r\n return \"NULL\";\r\n return displayValue.toString();\r\n};\r\n\r\nconst createDescription = (record: Item, relatedClass: ClassInfo | undefined, field: Field, value: string): string => {\r\n const classInfo = relatedClass ?? record.classInfo!;\r\n return `[${classInfo.label}].[${field.label}] = ${value}`;\r\n};\r\n\r\nconst createDescriptionAsync = async (record: Item, relatedClass: ClassInfo | undefined, field: Field, value: PrimitiveValueDef, computeDisplayValue?: ComputeDisplayValueCallback): Promise<string> => {\r\n const displayValue = computeDisplayValue ? await computeDisplayValue(field.type.typeName, value.raw, value.display) : toString(value.display);\r\n return createDescription(record, relatedClass, field, displayValue);\r\n};\r\n\r\nconst getPropertyName = (field: PropertiesField) => {\r\n let name = field.properties[0].property.name;\r\n if (field.type.typeName === \"navigation\")\r\n name += \".Id\";\r\n return name;\r\n};\r\n\r\nconst isPrimitivePropertyValue = (value: Value): value is PrimitivePropertyValue => {\r\n if (Value.isPrimitive(value)) {\r\n return true;\r\n }\r\n\r\n if (Value.isMap(value)) {\r\n if (typeof value.x === \"number\"\r\n && typeof value.y === \"number\"\r\n && (value.z === undefined || typeof value.z === \"number\")) {\r\n return true;\r\n }\r\n\r\n if (typeof value.className === \"string\" && typeof value.id === \"string\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getPropertyValue = (record: Item, field: Field): PrimitiveValueDef => {\r\n const fieldNamesStack = [];\r\n let currField: Field | undefined = field;\r\n while (currField) {\r\n fieldNamesStack.push(currField.name);\r\n currField = currField.parent;\r\n }\r\n let currFieldName = fieldNamesStack.pop();\r\n let displayValue: DisplayValue = record.displayValues[currFieldName!];\r\n let value: Value = record.values[currFieldName!];\r\n currFieldName = fieldNamesStack.pop();\r\n while (currFieldName) {\r\n if (!Value.isNestedContent(value) || value.length === 0)\r\n throw new Error(\"Invalid record value\");\r\n if (value.length > 1)\r\n throw new Error(\"Can't create 'similar instances' for records related through many part of *-to-many relationship\");\r\n if (value[0].mergedFieldNames.indexOf(currFieldName) !== -1)\r\n throw new Error(\"Can't create 'similar instances' ruleset for merged values\");\r\n displayValue = value[0].displayValues[currFieldName];\r\n value = value[0].values[currFieldName];\r\n currFieldName = fieldNamesStack.pop();\r\n }\r\n if (!isPrimitivePropertyValue(value))\r\n throw new Error(\"Can only create 'similar instances' ruleset for primitive values\");\r\n return { raw: value, display: toString(displayValue) };\r\n};\r\n\r\nconst createInstanceFilter = (\r\n relatedInstanceSpec: Readonly<RelatedInstanceSpecification> | undefined,\r\n propertyType: PrimitiveTypeDescription,\r\n propertyName: string,\r\n propertyValue: PrimitivePropertyValue,\r\n): string => {\r\n const alias = relatedInstanceSpec ? relatedInstanceSpec.alias : \"this\";\r\n return createComparison(propertyType, `${alias}.${propertyName}`, \"=\", propertyValue);\r\n};\r\n\r\ntype Operator = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\";\r\nconst createComparison = (type: PrimitiveTypeDescription, name: string, operator: Operator, value: PrimitivePropertyValue): string => {\r\n let compareValue = \"\";\r\n switch (typeof value) {\r\n case \"undefined\": compareValue = \"NULL\"; break;\r\n case \"string\": compareValue = `\"${value.replace(/\"/g, `\"\"`)}\"`; break;\r\n case \"boolean\": compareValue = value ? \"TRUE\" : \"FALSE\"; break;\r\n case \"number\": compareValue = value.toString(); break;\r\n }\r\n if (type.typeName === \"navigation\" && typeof value === \"object\" && Id64.isId64((value as InstanceKey).id)) {\r\n // note: this is temporary until we support hex ids in instance filters\r\n compareValue = hexToDec((value as InstanceKey).id);\r\n }\r\n if (type.typeName === \"point2d\" || type.typeName === \"point3d\") {\r\n if (typeof value !== \"object\")\r\n throw new Error(\"Expecting point values to be supplied as objects\");\r\n const dimensionType: PrimitiveTypeDescription = {\r\n valueFormat: PropertyValueFormat.Primitive,\r\n typeName: \"double\",\r\n };\r\n const pointValue = value as Point;\r\n let comparison = `${createComparison(dimensionType, `${name}.x`, operator, pointValue.x)}`;\r\n comparison += ` AND ${createComparison(dimensionType, `${name}.y`, operator, pointValue.y)}`;\r\n if (type.typeName === \"point3d\" && pointValue.z !== undefined)\r\n comparison += ` AND ${createComparison(dimensionType, `${name}.z`, operator, pointValue.z)}`;\r\n return comparison;\r\n }\r\n if (type.typeName === \"double\") {\r\n return `CompareDoubles(${name}, ${compareValue}) ${operator} 0`;\r\n }\r\n if (type.typeName === \"dateTime\") {\r\n return `CompareDateTimes(${name}, ${compareValue}) ${operator} 0`;\r\n }\r\n return `${name} ${operator} ${compareValue}`;\r\n};\r\n\r\nconst createMultiClassSpecification = (classInfo: Readonly<ClassInfo>): MultiSchemaClassesSpecification => {\r\n const [schemaName, className] = classInfo.name.split(\":\");\r\n return { schemaName, classNames: [className] };\r\n};\r\n\r\nconst createSingleClassSpecification = (classInfo: Readonly<ClassInfo>): SingleSchemaClassSpecification => {\r\n const [schemaName, className] = classInfo.name.split(\":\");\r\n return { schemaName, className };\r\n};\r\n\r\nconst createRelatedInstanceSpec = (pathFromSelectToPropertyClass: RelationshipPath, index: number): { spec: RelatedInstanceSpecification, class: ClassInfo } => ({\r\n spec: {\r\n relationshipPath: pathFromSelectToPropertyClass.map((step) => ({\r\n relationship: createSingleClassSpecification(step.relationshipInfo),\r\n direction: step.isForwardRelationship ? RelationshipDirection.Forward : RelationshipDirection.Backward,\r\n targetClass: createSingleClassSpecification(step.targetClassInfo),\r\n })),\r\n isRequired: true,\r\n alias: `related_${index}`,\r\n },\r\n class: pathFromSelectToPropertyClass[pathFromSelectToPropertyClass.length - 1].targetClassInfo,\r\n});\r\n\r\nconst createPathFromSelectToPropertyClass = (field: PropertiesField): RelationshipPath => {\r\n let currField: Field = field;\r\n const pathFromPropertyToSelectClass: RelationshipPath = [];\r\n while (currField.parent) {\r\n pathFromPropertyToSelectClass.push(...currField.parent.pathToPrimaryClass);\r\n currField = currField.parent;\r\n }\r\n return RelationshipPath.reverse(pathFromPropertyToSelectClass);\r\n};\r\n\r\nconst createRelatedInstanceSpecInfo = (field: PropertiesField): { spec: RelatedInstanceSpecification, class: ClassInfo } | undefined => {\r\n const path = createPathFromSelectToPropertyClass(field);\r\n return path.length ? createRelatedInstanceSpec(path, 0) : undefined;\r\n};\r\n\r\nconst hexToDec = (id: Id64String) => {\r\n const digits = [0];\r\n for (let i = 2; i < id.length; ++i) {\r\n let carry = parseInt(id.charAt(i), 16);\r\n for (let j = 0; j < digits.length; ++j) {\r\n digits[j] = digits[j] * 16 + carry;\r\n carry = digits[j] / 10 | 0;\r\n digits[j] %= 10;\r\n }\r\n while (carry > 0) {\r\n digits.push(carry % 10);\r\n carry = carry / 10 | 0;\r\n }\r\n }\r\n return digits.reverse().join(\"\");\r\n};\r\n"]}
1
+ {"version":3,"file":"RulesetsFactory.js","sourceRoot":"","sources":["../../../src/presentation-common/RulesetsFactory.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAA4B,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAgB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAA0B,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAEjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC;;;;;GAKG;AACH,MAAM,OAAO,eAAe;IAClB,iCAAiC,CAAC,KAAY,EAAE,MAAY;QAClE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,mBAAmB,CAAC,SAAS;YAC1D,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,SAAS;YACnB,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;QAChH,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,mBAAmB,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,KAAK,CAAC;QAChD,MAAM,OAAO,GAAY;YACvB,EAAE,EAAE,oBAAoB,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;YAC5D,KAAK,EAAE,EAAE;SACV,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YACjB,QAAQ,EAAE,SAAS,CAAC,OAAO;YAC3B,cAAc,EAAE,CAAC;oBACf,QAAQ,EAAE,yBAAyB,CAAC,iCAAiC;oBACrE,OAAO,EAAE,6BAA6B,CAAC,MAAM,CAAC,SAAS,CAAC;oBACxD,8BAA8B,EAAE,IAAI;oBACpC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;oBACvE,cAAc,EAAE,oBAAoB,CAAC,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC;iBAC7G,CAAC;SACH,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;IAChE,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,6BAA6B,CAAC,KAAY,EAAE,MAAY,EAAE,mBAAiD;QACtH,MAAM,IAAI,GAAG,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QAC5H,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC;CACF;AAsBD,MAAM,QAAQ,GAAG,CAAC,YAAkC,EAAU,EAAE;IAC9D,IAAI,CAAC,YAAY;QACf,OAAO,MAAM,CAAC;IAChB,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,MAAY,EAAE,YAAmC,EAAE,KAAY,EAAE,KAAa,EAAU,EAAE;IACnH,MAAM,SAAS,GAAG,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,MAAM,CAAC,SAAU,CAAC;IACpD,OAAO,IAAI,SAAS,CAAC,KAAK,MAAM,KAAK,CAAC,KAAK,OAAO,KAAK,EAAE,CAAC;AAC5D,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,KAAK,EAAE,MAAY,EAAE,YAAmC,EAAE,KAAY,EAAE,KAAwB,EAAE,mBAAiD,EAAmB,EAAE;IACrM,MAAM,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9I,OAAO,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,KAAsB,EAAE,EAAE;IACjD,IAAI,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,YAAY;QACtC,IAAI,IAAI,KAAK,CAAC;IAChB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,KAAY,EAAmC,EAAE;IACjF,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE;QAC5B,OAAO,IAAI,CAAC;KACb;IAED,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;QACtB,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ;eAC1B,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ;eAC3B,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,EAAE;YAC3D,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,EAAE;YACvE,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,MAAY,EAAE,KAAY,EAAqB,EAAE;IACzE,MAAM,eAAe,GAAG,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAsB,KAAK,CAAC;IACzC,OAAO,SAAS,EAAE;QAChB,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACrC,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAC9B;IACD,IAAI,aAAa,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC;IAC1C,IAAI,YAAY,GAAiB,MAAM,CAAC,aAAa,CAAC,aAAc,CAAC,CAAC;IACtE,IAAI,KAAK,GAAU,MAAM,CAAC,MAAM,CAAC,aAAc,CAAC,CAAC;IACjD,aAAa,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC;IACtC,OAAO,aAAa,EAAE;QACpB,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;QACtH,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QACrD,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACvC,aAAa,GAAG,eAAe,CAAC,GAAG,EAAE,CAAC;KACvC;IACD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;AACzD,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAC3B,mBAAuE,EACvE,YAAsC,EACtC,YAAoB,EACpB,aAAqC,EAC7B,EAAE;IACV,MAAM,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACvE,OAAO,gBAAgB,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,YAAY,EAAE,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;AACxF,CAAC,CAAC;AAGF,MAAM,gBAAgB,GAAG,CAAC,IAA8B,EAAE,IAAY,EAAE,QAAkB,EAAE,KAA6B,EAAU,EAAE;IACnI,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,QAAQ,OAAO,KAAK,EAAE;QACpB,KAAK,WAAW;YACd,YAAY,GAAG,MAAM,CAAC;YACtB,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;YAChD,MAAM;QACR,KAAK,SAAS;YACZ,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YACxC,MAAM;QACR,KAAK,QAAQ;YACX,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM;KACT;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAE,KAAqB,CAAC,EAAE,CAAC;QACvG,uEAAuE;QACvE,YAAY,GAAG,QAAQ,CAAE,KAAqB,CAAC,EAAE,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE;QAC9D,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC3B,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAEtE,MAAM,aAAa,GAA6B;YAC9C,WAAW,EAAE,mBAAmB,CAAC,SAAS;YAC1C,QAAQ,EAAE,QAAQ;SACnB,CAAC;QAEF,MAAM,UAAU,GAAG,KAAc,CAAC;QAClC,IAAI,UAAU,GAAG,GAAG,gBAAgB,CAAC,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3F,UAAU,IAAI,QAAQ,gBAAgB,CAAC,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,UAAU,CAAC,CAAC,KAAK,SAAS;YAC3D,UAAU,IAAI,QAAQ,gBAAgB,CAAC,aAAa,EAAE,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/F,OAAO,UAAU,CAAC;KACnB;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;QAC5B,OAAO,kBAAkB,IAAI,KAAK,YAAY,KAAK,QAAQ,IAAI,CAAC;IAElE,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU;QAC9B,OAAO,oBAAoB,IAAI,KAAK,YAAY,KAAK,QAAQ,IAAI,CAAC;IAEpE,OAAO,GAAG,IAAI,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,SAA8B,EAAmC,EAAE;IACxG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;AACjD,CAAC,CAAC;AAEF,MAAM,8BAA8B,GAAG,CAAC,SAA8B,EAAkC,EAAE;IACxG,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC1D,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,yBAAyB,GAAG,CAAC,6BAA+C,EAAE,KAAa,EAA4D,EAAE,CAAC,CAAC;IAC/J,IAAI,EAAE;QACJ,gBAAgB,EAAE,6BAA6B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7D,YAAY,EAAE,8BAA8B,CAAC,IAAI,CAAC,gBAAgB,CAAC;YACnE,SAAS,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ;YACtG,WAAW,EAAE,8BAA8B,CAAC,IAAI,CAAC,eAAe,CAAC;SAClE,CAAC,CAAC;QACH,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,WAAW,KAAK,EAAE;KAC1B;IACD,KAAK,EAAE,6BAA6B,CAAC,6BAA6B,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,eAAe;CAC/F,CAAC,CAAC;AAEH,MAAM,mCAAmC,GAAG,CAAC,KAAsB,EAAoB,EAAE;IACvF,IAAI,SAAS,GAAU,KAAK,CAAC;IAC7B,MAAM,6BAA6B,GAAqB,EAAE,CAAC;IAC3D,OAAO,SAAS,CAAC,MAAM,EAAE;QACvB,6BAA6B,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC3E,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;KAC9B;IACD,OAAO,gBAAgB,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC;AACjE,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CAAC,KAAsB,EAAwE,EAAE;IACrI,MAAM,IAAI,GAAG,mCAAmC,CAAC,KAAK,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,EAAc,EAAE,EAAE;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QAClC,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACtC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACnC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACjB;QACD,OAAO,KAAK,GAAG,CAAC,EAAE;YAChB,MAAM,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;YACxB,KAAK,GAAG,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;SACxB;KACF;IACD,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { Guid, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Field, PropertiesField } from \"./content/Fields\";\nimport { Item } from \"./content/Item\";\nimport { PrimitiveTypeDescription, PropertyValueFormat } from \"./content/TypeDescription\";\nimport { DisplayValue, Value } from \"./content/Value\";\nimport { ClassInfo, InstanceKey, RelationshipPath } from \"./EC\";\nimport { MultiSchemaClassesSpecification, SingleSchemaClassSpecification } from \"./rules/ClassSpecifications\";\nimport { ContentSpecificationTypes } from \"./rules/content/ContentSpecification\";\nimport { RelatedInstanceSpecification } from \"./rules/RelatedInstanceSpecification\";\nimport { RelationshipDirection } from \"./rules/RelationshipDirection\";\nimport { RuleTypes } from \"./rules/Rule\";\nimport { Ruleset } from \"./rules/Ruleset\";\n\n/**\n * A factory class that can be used to create presentation rulesets targeted towards\n * specific use cases.\n *\n * @public\n */\nexport class RulesetsFactory {\n private createSimilarInstancesRulesetInfo(field: Field, record: Item) {\n if (!field.isPropertiesField())\n throw new Error(\"Can only create 'similar instances' ruleset for properties-based records\");\n if (field.type.valueFormat !== PropertyValueFormat.Primitive)\n throw new Error(\"Can only create 'similar instances' ruleset for primitive properties\");\n if (field.properties.length === 0)\n throw new Error(\"Invalid properties' field with no properties\");\n if (record.isFieldMerged(field.name))\n throw new Error(\"Can't create 'similar instances' ruleset for merged values\");\n if (!record.classInfo)\n throw new Error(\"Can't create 'similar instances' for records based on multiple different ECClass instances\");\n const propertyName = getPropertyName(field);\n const propertyValue = getPropertyValue(record, field);\n const relatedInstanceInfo = createRelatedInstanceSpecInfo(field);\n const relatedClass = relatedInstanceInfo?.class;\n const ruleset: Ruleset = {\n id: `SimilarInstances/${propertyName}/${Guid.createValue()}`,\n rules: [],\n };\n ruleset.rules.push({\n ruleType: RuleTypes.Content,\n specifications: [{\n specType: ContentSpecificationTypes.ContentInstancesOfSpecificClasses,\n classes: createMultiClassSpecification(record.classInfo),\n handleInstancesPolymorphically: true,\n relatedInstances: relatedInstanceInfo ? [relatedInstanceInfo.spec] : [],\n instanceFilter: createInstanceFilter(relatedInstanceInfo?.spec, field.type, propertyName, propertyValue.raw),\n }],\n });\n return { ruleset, relatedClass, propertyName, propertyValue };\n }\n\n /**\n * Create a ruleset with content rules for getting instances are of the\n * same ECClass and have the same property value as the provided `record`.\n * @param field A field identifying which property of the record we should use\n * @param record A record whose similar instances should be found\n * @param computeDisplayValue Optional callback function to calculate display value that's\n * used in ruleset's description. If not provided, display value from record is used instead.\n */\n public async createSimilarInstancesRuleset(field: Field, record: Item, computeDisplayValue?: ComputeDisplayValueCallback): Promise<{ ruleset: Ruleset, description: string }> {\n const info = this.createSimilarInstancesRulesetInfo(field, record);\n const description = await createDescriptionAsync(record, info.relatedClass, field, info.propertyValue, computeDisplayValue);\n return { ruleset: info.ruleset, description };\n }\n}\n\n/**\n * Definition of a function for calculating a display value.\n * @public\n */\nexport type ComputeDisplayValueCallback = (type: string, value: PrimitivePropertyValue, displayValue: string) => Promise<string>;\n\ninterface PrimitiveValueDef {\n raw: PrimitivePropertyValue;\n display: string;\n}\n\n/**\n * Value of a primitive property.\n * @public\n */\nexport type PrimitivePropertyValue = string | number | boolean | Point | InstanceKey | undefined;\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\ntype Point = { x: number, y: number, z?: number };\n\nconst toString = (displayValue: Value | DisplayValue): string => {\n if (!displayValue)\n return \"NULL\";\n return displayValue.toString();\n};\n\nconst createDescription = (record: Item, relatedClass: ClassInfo | undefined, field: Field, value: string): string => {\n const classInfo = relatedClass ?? record.classInfo!;\n return `[${classInfo.label}].[${field.label}] = ${value}`;\n};\n\nconst createDescriptionAsync = async (record: Item, relatedClass: ClassInfo | undefined, field: Field, value: PrimitiveValueDef, computeDisplayValue?: ComputeDisplayValueCallback): Promise<string> => {\n const displayValue = computeDisplayValue ? await computeDisplayValue(field.type.typeName, value.raw, value.display) : toString(value.display);\n return createDescription(record, relatedClass, field, displayValue);\n};\n\nconst getPropertyName = (field: PropertiesField) => {\n let name = field.properties[0].property.name;\n if (field.type.typeName === \"navigation\")\n name += \".Id\";\n return name;\n};\n\nconst isPrimitivePropertyValue = (value: Value): value is PrimitivePropertyValue => {\n if (Value.isPrimitive(value)) {\n return true;\n }\n\n if (Value.isMap(value)) {\n if (typeof value.x === \"number\"\n && typeof value.y === \"number\"\n && (value.z === undefined || typeof value.z === \"number\")) {\n return true;\n }\n\n if (typeof value.className === \"string\" && typeof value.id === \"string\") {\n return true;\n }\n }\n\n return false;\n};\n\nconst getPropertyValue = (record: Item, field: Field): PrimitiveValueDef => {\n const fieldNamesStack = [];\n let currField: Field | undefined = field;\n while (currField) {\n fieldNamesStack.push(currField.name);\n currField = currField.parent;\n }\n let currFieldName = fieldNamesStack.pop();\n let displayValue: DisplayValue = record.displayValues[currFieldName!];\n let value: Value = record.values[currFieldName!];\n currFieldName = fieldNamesStack.pop();\n while (currFieldName) {\n if (!Value.isNestedContent(value) || value.length === 0)\n throw new Error(\"Invalid record value\");\n if (value.length > 1)\n throw new Error(\"Can't create 'similar instances' for records related through many part of *-to-many relationship\");\n if (value[0].mergedFieldNames.indexOf(currFieldName) !== -1)\n throw new Error(\"Can't create 'similar instances' ruleset for merged values\");\n displayValue = value[0].displayValues[currFieldName];\n value = value[0].values[currFieldName];\n currFieldName = fieldNamesStack.pop();\n }\n if (!isPrimitivePropertyValue(value))\n throw new Error(\"Can only create 'similar instances' ruleset for primitive values\");\n return { raw: value, display: toString(displayValue) };\n};\n\nconst createInstanceFilter = (\n relatedInstanceSpec: Readonly<RelatedInstanceSpecification> | undefined,\n propertyType: PrimitiveTypeDescription,\n propertyName: string,\n propertyValue: PrimitivePropertyValue,\n): string => {\n const alias = relatedInstanceSpec ? relatedInstanceSpec.alias : \"this\";\n return createComparison(propertyType, `${alias}.${propertyName}`, \"=\", propertyValue);\n};\n\ntype Operator = \"=\" | \"!=\" | \">\" | \">=\" | \"<\" | \"<=\";\nconst createComparison = (type: PrimitiveTypeDescription, name: string, operator: Operator, value: PrimitivePropertyValue): string => {\n let compareValue = \"\";\n switch (typeof value) {\n case \"undefined\":\n compareValue = \"NULL\";\n break;\n case \"string\":\n compareValue = `\"${value.replace(/\"/g, `\"\"`)}\"`;\n break;\n case \"boolean\":\n compareValue = value ? \"TRUE\" : \"FALSE\";\n break;\n case \"number\":\n compareValue = value.toString();\n break;\n }\n\n if (type.typeName === \"navigation\" && typeof value === \"object\" && Id64.isId64((value as InstanceKey).id))\n // note: this is temporary until we support hex ids in instance filters\n compareValue = hexToDec((value as InstanceKey).id);\n\n if (type.typeName === \"point2d\" || type.typeName === \"point3d\") {\n if (typeof value !== \"object\")\n throw new Error(\"Expecting point values to be supplied as objects\");\n\n const dimensionType: PrimitiveTypeDescription = {\n valueFormat: PropertyValueFormat.Primitive,\n typeName: \"double\",\n };\n\n const pointValue = value as Point;\n let comparison = `${createComparison(dimensionType, `${name}.x`, operator, pointValue.x)}`;\n comparison += ` AND ${createComparison(dimensionType, `${name}.y`, operator, pointValue.y)}`;\n if (type.typeName === \"point3d\" && pointValue.z !== undefined)\n comparison += ` AND ${createComparison(dimensionType, `${name}.z`, operator, pointValue.z)}`;\n\n return comparison;\n }\n\n if (type.typeName === \"double\")\n return `CompareDoubles(${name}, ${compareValue}) ${operator} 0`;\n\n if (type.typeName === \"dateTime\")\n return `CompareDateTimes(${name}, ${compareValue}) ${operator} 0`;\n\n return `${name} ${operator} ${compareValue}`;\n};\n\nconst createMultiClassSpecification = (classInfo: Readonly<ClassInfo>): MultiSchemaClassesSpecification => {\n const [schemaName, className] = classInfo.name.split(\":\");\n return { schemaName, classNames: [className] };\n};\n\nconst createSingleClassSpecification = (classInfo: Readonly<ClassInfo>): SingleSchemaClassSpecification => {\n const [schemaName, className] = classInfo.name.split(\":\");\n return { schemaName, className };\n};\n\nconst createRelatedInstanceSpec = (pathFromSelectToPropertyClass: RelationshipPath, index: number): { spec: RelatedInstanceSpecification, class: ClassInfo } => ({\n spec: {\n relationshipPath: pathFromSelectToPropertyClass.map((step) => ({\n relationship: createSingleClassSpecification(step.relationshipInfo),\n direction: step.isForwardRelationship ? RelationshipDirection.Forward : RelationshipDirection.Backward,\n targetClass: createSingleClassSpecification(step.targetClassInfo),\n })),\n isRequired: true,\n alias: `related_${index}`,\n },\n class: pathFromSelectToPropertyClass[pathFromSelectToPropertyClass.length - 1].targetClassInfo,\n});\n\nconst createPathFromSelectToPropertyClass = (field: PropertiesField): RelationshipPath => {\n let currField: Field = field;\n const pathFromPropertyToSelectClass: RelationshipPath = [];\n while (currField.parent) {\n pathFromPropertyToSelectClass.push(...currField.parent.pathToPrimaryClass);\n currField = currField.parent;\n }\n return RelationshipPath.reverse(pathFromPropertyToSelectClass);\n};\n\nconst createRelatedInstanceSpecInfo = (field: PropertiesField): { spec: RelatedInstanceSpecification, class: ClassInfo } | undefined => {\n const path = createPathFromSelectToPropertyClass(field);\n return path.length ? createRelatedInstanceSpec(path, 0) : undefined;\n};\n\nconst hexToDec = (id: Id64String) => {\n const digits = [0];\n for (let i = 2; i < id.length; ++i) {\n let carry = parseInt(id.charAt(i), 16);\n for (let j = 0; j < digits.length; ++j) {\n digits[j] = digits[j] * 16 + carry;\n carry = digits[j] / 10 | 0;\n digits[j] %= 10;\n }\n while (carry > 0) {\n digits.push(carry % 10);\n carry = carry / 10 | 0;\n }\n }\n return digits.reverse().join(\"\");\n};\n"]}