@itwin/presentation-common 4.0.0-dev.23 → 4.0.0-dev.28

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 (38) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/presentation-common/PropertyFormatter.d.ts +26 -0
  3. package/lib/cjs/presentation-common/PropertyFormatter.d.ts.map +1 -0
  4. package/lib/cjs/presentation-common/PropertyFormatter.js +74 -0
  5. package/lib/cjs/presentation-common/PropertyFormatter.js.map +1 -0
  6. package/lib/cjs/presentation-common/RpcRequestsHandler.js +1 -1
  7. package/lib/cjs/presentation-common/RpcRequestsHandler.js.map +1 -1
  8. package/lib/cjs/presentation-common/RulesetsFactory.js +3 -3
  9. package/lib/cjs/presentation-common/RulesetsFactory.js.map +1 -1
  10. package/lib/cjs/presentation-common/content/ContentTraverser.js +3 -5
  11. package/lib/cjs/presentation-common/content/ContentTraverser.js.map +1 -1
  12. package/lib/cjs/presentation-common/content/Descriptor.js +4 -6
  13. package/lib/cjs/presentation-common/content/Descriptor.js.map +1 -1
  14. package/lib/cjs/presentation-common/content/Fields.js +2 -3
  15. package/lib/cjs/presentation-common/content/Fields.js.map +1 -1
  16. package/lib/cjs/presentation-common.d.ts +1 -0
  17. package/lib/cjs/presentation-common.d.ts.map +1 -1
  18. package/lib/cjs/presentation-common.js +1 -0
  19. package/lib/cjs/presentation-common.js.map +1 -1
  20. package/lib/esm/presentation-common/PropertyFormatter.d.ts +26 -0
  21. package/lib/esm/presentation-common/PropertyFormatter.d.ts.map +1 -0
  22. package/lib/esm/presentation-common/PropertyFormatter.js +69 -0
  23. package/lib/esm/presentation-common/PropertyFormatter.js.map +1 -0
  24. package/lib/esm/presentation-common/RpcRequestsHandler.js +1 -1
  25. package/lib/esm/presentation-common/RpcRequestsHandler.js.map +1 -1
  26. package/lib/esm/presentation-common/RulesetsFactory.js +3 -3
  27. package/lib/esm/presentation-common/RulesetsFactory.js.map +1 -1
  28. package/lib/esm/presentation-common/content/ContentTraverser.js +3 -5
  29. package/lib/esm/presentation-common/content/ContentTraverser.js.map +1 -1
  30. package/lib/esm/presentation-common/content/Descriptor.js +4 -6
  31. package/lib/esm/presentation-common/content/Descriptor.js.map +1 -1
  32. package/lib/esm/presentation-common/content/Fields.js +2 -3
  33. package/lib/esm/presentation-common/content/Fields.js.map +1 -1
  34. package/lib/esm/presentation-common.d.ts +1 -0
  35. package/lib/esm/presentation-common.d.ts.map +1 -1
  36. package/lib/esm/presentation-common.js +1 -0
  37. package/lib/esm/presentation-common.js.map +1 -1
  38. package/package.json +9 -9
@@ -35,6 +35,7 @@ __exportStar(require("./presentation-common/Utils"), exports);
35
35
  __exportStar(require("./presentation-common/PresentationIpcInterface"), exports);
36
36
  __exportStar(require("./presentation-common/LocalizationHelper"), exports);
37
37
  __exportStar(require("./presentation-common/InstanceFilterDefinition"), exports);
38
+ __exportStar(require("./presentation-common/PropertyFormatter"), exports);
38
39
  /**
39
40
  * @module RPC
40
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"presentation-common.js","sourceRoot":"","sources":["../../src/presentation-common.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,mEAAiD;AACjD,oEAAkD;AAClD,2DAAyC;AACzC,8DAA4C;AAC5C,+DAA6C;AAC7C,wEAAsD;AACtD,mFAAiE;AACjE,0EAAwD;AACxD,yEAAuD;AACvD,wEAAsD;AACtD,+DAA6C;AAC7C,8DAA4C;AAC5C,iFAA+D;AAC/D,2EAAyD;AACzD,iFAA+D;AAE/D;;;;;;GAMG;AACH,iFAA+D;AAC/D,2EAAyD;AACzD,0EAAwD;AAExD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yEAAuD;AACvD,wEAAsD;AACtD,2EAAyD;AACzD,6EAA2D;AAC3D,uEAAqD;AACrD,uEAAqD;AACrD,qEAAmD;AACnD,yEAAuD;AACvD,yEAAuD;AACvD,gFAA8D;AAC9D,sEAAoD;AACpD,iFAA+D;AAE/D;;;;;GAKG;AACH,iFAA+D;AAC/D,sEAAoD;AACpD,uEAAqD;AACrD,kFAAgE;AAEhE;;;;;GAKG;AACH,sFAAoE;AACpE,+FAA6E;AAC7E,gGAA8E;AAC9E,8GAA4F;AAC5F,oHAAkG;AAClG,uFAAqE;AACrE,0FAAwE;AACxE,0GAAwF;AACxF,qFAAmE;AACnE,qFAAmE;AACnE,yFAAuE;AACvE,8FAA4E;AAC5E,6FAA2E;AAC3E,yFAAuE;AACvE,4FAA0E;AAC1E,kGAAgF;AAChF,0FAAwE;AACxE,wFAAsE;AACtE,0FAAwE;AACxE,qHAAmG;AACnG,2GAAyF;AACzF,kFAAgE;AAChE,2FAAyE;AACzE,4FAA0E;AAC1E,yGAAuF;AACvF,sGAAoF;AACpF,kHAAgG;AAChG,gGAA8E;AAC9E,8GAA4F;AAC5F,6GAA2F;AAC3F,4GAA0F;AAC1F,+GAA6F;AAC7F,kFAAgE;AAChE,2FAAyE;AACzE,oFAAkE;AAClE,4FAA0E;AAC1E,mEAAiD;AACjD,sEAAoD;AACpD,mFAAiE;AACjE,wEAAsD","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used all across Presentation packages.\n */\nexport * from \"./presentation-common/AsyncTasks\";\nexport * from \"./presentation-common/Diagnostics\";\nexport * from \"./presentation-common/EC\";\nexport * from \"./presentation-common/Error\";\nexport * from \"./presentation-common/KeySet\";\nexport * from \"./presentation-common/LabelDefinition\";\nexport * from \"./presentation-common/PresentationManagerOptions\";\nexport * from \"./presentation-common/RegisteredRuleset\";\nexport * from \"./presentation-common/RulesetVariables\";\nexport * from \"./presentation-common/RulesetsFactory\";\nexport * from \"./presentation-common/Update\";\nexport * from \"./presentation-common/Utils\";\nexport * from \"./presentation-common/PresentationIpcInterface\";\nexport * from \"./presentation-common/LocalizationHelper\";\nexport * from \"./presentation-common/InstanceFilterDefinition\";\n\n/**\n * @module RPC\n *\n * @docs-group-description RPC\n * Types used for RPC communication between frontend and backend. Generally should\n * only be used internally by presentation packages.\n */\nexport * from \"./presentation-common/PresentationRpcInterface\";\nexport * from \"./presentation-common/RpcRequestsHandler\";\nexport * from \"./presentation-common/ElementProperties\";\n\n/**\n * @module UnifiedSelection\n *\n * @docs-group-description UnifiedSelection\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\n */\nexport * from \"./presentation-common/selection/SelectionScope\";\n\n/**\n * @module Content\n *\n * @docs-group-description Content\n * Types related to presentation [content]($docs/presentation/content/index.md).\n */\nexport * from \"./presentation-common/content/Category\";\nexport * from \"./presentation-common/content/Content\";\nexport * from \"./presentation-common/content/Descriptor\";\nexport * from \"./presentation-common/content/DisplayTypes\";\nexport * from \"./presentation-common/content/Editor\";\nexport * from \"./presentation-common/content/Fields\";\nexport * from \"./presentation-common/content/Item\";\nexport * from \"./presentation-common/content/Property\";\nexport * from \"./presentation-common/content/Renderer\";\nexport * from \"./presentation-common/content/TypeDescription\";\nexport * from \"./presentation-common/content/Value\";\nexport * from \"./presentation-common/content/ContentTraverser\";\n\n/**\n * @module Hierarchies\n *\n * @docs-group-description Hierarchies\n * Types related to presentation [hierarchies]($docs/presentation/hierarchies/index.md).\n */\nexport * from \"./presentation-common/hierarchy/HierarchyLevel\";\nexport * from \"./presentation-common/hierarchy/Key\";\nexport * from \"./presentation-common/hierarchy/Node\";\nexport * from \"./presentation-common/hierarchy/NodePathElement\";\n\n/**\n * @module PresentationRules\n *\n * @docs-group-description PresentationRules\n * Types for defining the presentation ruleset.\n */\nexport * from \"./presentation-common/rules/hierarchy/ChildNodeRule\";\nexport * from \"./presentation-common/rules/hierarchy/ChildNodeSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/CustomNodeSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/NavigationRule\";\nexport * from \"./presentation-common/rules/hierarchy/NodeArtifactsRule\";\nexport * from \"./presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/RootNodeRule\";\nexport * from \"./presentation-common/rules/hierarchy/SubCondition\";\nexport * from \"./presentation-common/rules/customization/CheckBoxRule\";\nexport * from \"./presentation-common/rules/customization/CustomizationRule\";\nexport * from \"./presentation-common/rules/customization/ExtendedDataRule\";\nexport * from \"./presentation-common/rules/customization/GroupingRule\";\nexport * from \"./presentation-common/rules/customization/ImageIdOverride\";\nexport * from \"./presentation-common/rules/customization/InstanceLabelOverride\";\nexport * from \"./presentation-common/rules/customization/LabelOverride\";\nexport * from \"./presentation-common/rules/customization/SortingRule\";\nexport * from \"./presentation-common/rules/customization/StyleOverride\";\nexport * from \"./presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification\";\nexport * from \"./presentation-common/rules/content/ContentRelatedInstancesSpecification\";\nexport * from \"./presentation-common/rules/content/ContentRule\";\nexport * from \"./presentation-common/rules/content/ContentSpecification\";\nexport * from \"./presentation-common/rules/content/PropertySpecification\";\nexport * from \"./presentation-common/rules/content/SelectedNodeInstancesSpecification\";\nexport * from \"./presentation-common/rules/content/DefaultPropertyCategoryOverride\";\nexport * from \"./presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/ContentModifier\";\nexport * from \"./presentation-common/rules/content/modifiers/PropertyCategorySpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/PropertyEditorsSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/CustomRendererSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/RelatedPropertiesSpecification\";\nexport * from \"./presentation-common/rules/ClassSpecifications\";\nexport * from \"./presentation-common/rules/RelatedInstanceSpecification\";\nexport * from \"./presentation-common/rules/RelationshipDirection\";\nexport * from \"./presentation-common/rules/RelationshipPathSpecification\";\nexport * from \"./presentation-common/rules/Rule\";\nexport * from \"./presentation-common/rules/Ruleset\";\nexport * from \"./presentation-common/rules/SchemasSpecification\";\nexport * from \"./presentation-common/rules/Variables\";\n"]}
1
+ {"version":3,"file":"presentation-common.js","sourceRoot":"","sources":["../../src/presentation-common.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;+FAG+F;AAC/F;;;;;GAKG;AACH,mEAAiD;AACjD,oEAAkD;AAClD,2DAAyC;AACzC,8DAA4C;AAC5C,+DAA6C;AAC7C,wEAAsD;AACtD,mFAAiE;AACjE,0EAAwD;AACxD,yEAAuD;AACvD,wEAAsD;AACtD,+DAA6C;AAC7C,8DAA4C;AAC5C,iFAA+D;AAC/D,2EAAyD;AACzD,iFAA+D;AAC/D,0EAAwD;AAExD;;;;;;GAMG;AACH,iFAA+D;AAC/D,2EAAyD;AACzD,0EAAwD;AAExD;;;;;GAKG;AACH,iFAA+D;AAE/D;;;;;GAKG;AACH,yEAAuD;AACvD,wEAAsD;AACtD,2EAAyD;AACzD,6EAA2D;AAC3D,uEAAqD;AACrD,uEAAqD;AACrD,qEAAmD;AACnD,yEAAuD;AACvD,yEAAuD;AACvD,gFAA8D;AAC9D,sEAAoD;AACpD,iFAA+D;AAE/D;;;;;GAKG;AACH,iFAA+D;AAC/D,sEAAoD;AACpD,uEAAqD;AACrD,kFAAgE;AAEhE;;;;;GAKG;AACH,sFAAoE;AACpE,+FAA6E;AAC7E,gGAA8E;AAC9E,8GAA4F;AAC5F,oHAAkG;AAClG,uFAAqE;AACrE,0FAAwE;AACxE,0GAAwF;AACxF,qFAAmE;AACnE,qFAAmE;AACnE,yFAAuE;AACvE,8FAA4E;AAC5E,6FAA2E;AAC3E,yFAAuE;AACvE,4FAA0E;AAC1E,kGAAgF;AAChF,0FAAwE;AACxE,wFAAsE;AACtE,0FAAwE;AACxE,qHAAmG;AACnG,2GAAyF;AACzF,kFAAgE;AAChE,2FAAyE;AACzE,4FAA0E;AAC1E,yGAAuF;AACvF,sGAAoF;AACpF,kHAAgG;AAChG,gGAA8E;AAC9E,8GAA4F;AAC5F,6GAA2F;AAC3F,4GAA0F;AAC1F,+GAA6F;AAC7F,kFAAgE;AAChE,2FAAyE;AACzE,oFAAkE;AAClE,4FAA0E;AAC1E,mEAAiD;AACjD,sEAAoD;AACpD,mFAAiE;AACjE,wEAAsD","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * @module Core\n *\n * @docs-group-description Core\n * Common types used all across Presentation packages.\n */\nexport * from \"./presentation-common/AsyncTasks\";\nexport * from \"./presentation-common/Diagnostics\";\nexport * from \"./presentation-common/EC\";\nexport * from \"./presentation-common/Error\";\nexport * from \"./presentation-common/KeySet\";\nexport * from \"./presentation-common/LabelDefinition\";\nexport * from \"./presentation-common/PresentationManagerOptions\";\nexport * from \"./presentation-common/RegisteredRuleset\";\nexport * from \"./presentation-common/RulesetVariables\";\nexport * from \"./presentation-common/RulesetsFactory\";\nexport * from \"./presentation-common/Update\";\nexport * from \"./presentation-common/Utils\";\nexport * from \"./presentation-common/PresentationIpcInterface\";\nexport * from \"./presentation-common/LocalizationHelper\";\nexport * from \"./presentation-common/InstanceFilterDefinition\";\nexport * from \"./presentation-common/PropertyFormatter\";\n\n/**\n * @module RPC\n *\n * @docs-group-description RPC\n * Types used for RPC communication between frontend and backend. Generally should\n * only be used internally by presentation packages.\n */\nexport * from \"./presentation-common/PresentationRpcInterface\";\nexport * from \"./presentation-common/RpcRequestsHandler\";\nexport * from \"./presentation-common/ElementProperties\";\n\n/**\n * @module UnifiedSelection\n *\n * @docs-group-description UnifiedSelection\n * Types related to [unified selection]($docs/presentation/unified-selection/index.md).\n */\nexport * from \"./presentation-common/selection/SelectionScope\";\n\n/**\n * @module Content\n *\n * @docs-group-description Content\n * Types related to presentation [content]($docs/presentation/content/index.md).\n */\nexport * from \"./presentation-common/content/Category\";\nexport * from \"./presentation-common/content/Content\";\nexport * from \"./presentation-common/content/Descriptor\";\nexport * from \"./presentation-common/content/DisplayTypes\";\nexport * from \"./presentation-common/content/Editor\";\nexport * from \"./presentation-common/content/Fields\";\nexport * from \"./presentation-common/content/Item\";\nexport * from \"./presentation-common/content/Property\";\nexport * from \"./presentation-common/content/Renderer\";\nexport * from \"./presentation-common/content/TypeDescription\";\nexport * from \"./presentation-common/content/Value\";\nexport * from \"./presentation-common/content/ContentTraverser\";\n\n/**\n * @module Hierarchies\n *\n * @docs-group-description Hierarchies\n * Types related to presentation [hierarchies]($docs/presentation/hierarchies/index.md).\n */\nexport * from \"./presentation-common/hierarchy/HierarchyLevel\";\nexport * from \"./presentation-common/hierarchy/Key\";\nexport * from \"./presentation-common/hierarchy/Node\";\nexport * from \"./presentation-common/hierarchy/NodePathElement\";\n\n/**\n * @module PresentationRules\n *\n * @docs-group-description PresentationRules\n * Types for defining the presentation ruleset.\n */\nexport * from \"./presentation-common/rules/hierarchy/ChildNodeRule\";\nexport * from \"./presentation-common/rules/hierarchy/ChildNodeSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/CustomNodeSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/CustomQueryInstanceNodesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/InstanceNodesOfSpecificClassesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/NavigationRule\";\nexport * from \"./presentation-common/rules/hierarchy/NodeArtifactsRule\";\nexport * from \"./presentation-common/rules/hierarchy/RelatedInstanceNodesSpecification\";\nexport * from \"./presentation-common/rules/hierarchy/RootNodeRule\";\nexport * from \"./presentation-common/rules/hierarchy/SubCondition\";\nexport * from \"./presentation-common/rules/customization/CheckBoxRule\";\nexport * from \"./presentation-common/rules/customization/CustomizationRule\";\nexport * from \"./presentation-common/rules/customization/ExtendedDataRule\";\nexport * from \"./presentation-common/rules/customization/GroupingRule\";\nexport * from \"./presentation-common/rules/customization/ImageIdOverride\";\nexport * from \"./presentation-common/rules/customization/InstanceLabelOverride\";\nexport * from \"./presentation-common/rules/customization/LabelOverride\";\nexport * from \"./presentation-common/rules/customization/SortingRule\";\nexport * from \"./presentation-common/rules/customization/StyleOverride\";\nexport * from \"./presentation-common/rules/content/ContentInstancesOfSpecificClassesSpecification\";\nexport * from \"./presentation-common/rules/content/ContentRelatedInstancesSpecification\";\nexport * from \"./presentation-common/rules/content/ContentRule\";\nexport * from \"./presentation-common/rules/content/ContentSpecification\";\nexport * from \"./presentation-common/rules/content/PropertySpecification\";\nexport * from \"./presentation-common/rules/content/SelectedNodeInstancesSpecification\";\nexport * from \"./presentation-common/rules/content/DefaultPropertyCategoryOverride\";\nexport * from \"./presentation-common/rules/content/modifiers/CalculatedPropertiesSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/ContentModifier\";\nexport * from \"./presentation-common/rules/content/modifiers/PropertyCategorySpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/PropertyEditorsSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/CustomRendererSpecification\";\nexport * from \"./presentation-common/rules/content/modifiers/RelatedPropertiesSpecification\";\nexport * from \"./presentation-common/rules/ClassSpecifications\";\nexport * from \"./presentation-common/rules/RelatedInstanceSpecification\";\nexport * from \"./presentation-common/rules/RelationshipDirection\";\nexport * from \"./presentation-common/rules/RelationshipPathSpecification\";\nexport * from \"./presentation-common/rules/Rule\";\nexport * from \"./presentation-common/rules/Ruleset\";\nexport * from \"./presentation-common/rules/SchemasSpecification\";\nexport * from \"./presentation-common/rules/Variables\";\n"]}
@@ -0,0 +1,26 @@
1
+ /** @packageDocumentation
2
+ * @module Core
3
+ */
4
+ import { FormatProps, FormatterSpec, ParserSpec, UnitsProvider } from "@itwin/core-quantity";
5
+ import { Content } from "./content/Content";
6
+ /** @alpha */
7
+ export interface FormatOptions {
8
+ formatProps: FormatProps;
9
+ persistenceUnitName: string;
10
+ }
11
+ /** @alpha */
12
+ export declare class PropertyValueFormatter {
13
+ private _unitsProvider;
14
+ constructor(_unitsProvider: UnitsProvider);
15
+ format(value: number, options: FormatOptions): Promise<string>;
16
+ getFormatterSpec(options: FormatOptions): Promise<FormatterSpec>;
17
+ getParserSpec(options: FormatOptions): Promise<ParserSpec>;
18
+ }
19
+ /** @alpha */
20
+ export declare class ContentPropertyValueFormatter extends PropertyValueFormatter {
21
+ formatContent(content: Content): Promise<Content>;
22
+ private formatValues;
23
+ private formatNestedContentDisplayValues;
24
+ private isFormattable;
25
+ }
26
+ //# sourceMappingURL=PropertyFormatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyFormatter.d.ts","sourceRoot":"","sources":["../../../src/presentation-common/PropertyFormatter.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAU,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAM5C,aAAa;AACb,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,WAAW,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,aAAa;AACb,qBAAa,sBAAsB;IACrB,OAAO,CAAC,cAAc;gBAAd,cAAc,EAAE,aAAa;IAEpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAK5C,gBAAgB,CAAC,OAAO,EAAE,aAAa;IAOvC,aAAa,CAAC,OAAO,EAAE,aAAa;CAMlD;AAED,aAAa;AACb,qBAAa,6BAA8B,SAAQ,sBAAsB;IAC1D,aAAa,CAAC,OAAO,EAAE,OAAO;YAQ7B,YAAY;YAgBZ,gCAAgC;IAM9C,OAAO,CAAC,aAAa;CAMtB"}
@@ -0,0 +1,69 @@
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 { assert } from "@itwin/core-bentley";
9
+ import { Format, FormatterSpec, ParserSpec } from "@itwin/core-quantity";
10
+ import { Value } from "./content/Value";
11
+ /** @alpha */
12
+ export class PropertyValueFormatter {
13
+ constructor(_unitsProvider) {
14
+ this._unitsProvider = _unitsProvider;
15
+ }
16
+ async format(value, options) {
17
+ const formatterSpec = await this.getFormatterSpec(options);
18
+ return formatterSpec.applyFormatting(value);
19
+ }
20
+ async getFormatterSpec(options) {
21
+ const { formatProps, persistenceUnitName } = options;
22
+ const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);
23
+ const format = await Format.createFromJSON("", this._unitsProvider, formatProps);
24
+ return FormatterSpec.create("", format, this._unitsProvider, persistenceUnit);
25
+ }
26
+ async getParserSpec(options) {
27
+ const { formatProps, persistenceUnitName } = options;
28
+ const persistenceUnit = await this._unitsProvider.findUnitByName(persistenceUnitName);
29
+ const format = await Format.createFromJSON("", this._unitsProvider, formatProps);
30
+ return ParserSpec.create(format, this._unitsProvider, persistenceUnit);
31
+ }
32
+ }
33
+ /** @alpha */
34
+ export class ContentPropertyValueFormatter extends PropertyValueFormatter {
35
+ async formatContent(content) {
36
+ const descriptor = content.descriptor;
37
+ for (const item of content.contentSet) {
38
+ await this.formatValues(item.values, item.displayValues, descriptor.fields, item.mergedFieldNames);
39
+ }
40
+ return content;
41
+ }
42
+ async formatValues(values, displayValues, fields, mergedFields) {
43
+ for (const field of fields) {
44
+ const value = values[field.name];
45
+ if (field.isNestedContentField() && !mergedFields.includes(field.name)) {
46
+ assert(Value.isNestedContent(value));
47
+ await this.formatNestedContentDisplayValues(value, field.nestedFields);
48
+ continue;
49
+ }
50
+ if (this.isFormattable(field) && typeof value === "number") {
51
+ const koq = field.properties[0].property.kindOfQuantity;
52
+ displayValues[field.name] = await this.format(value, { persistenceUnitName: koq.persistenceUnit, formatProps: koq.activeFormat });
53
+ continue;
54
+ }
55
+ }
56
+ }
57
+ async formatNestedContentDisplayValues(nestedValues, fields) {
58
+ for (const nestedValue of nestedValues) {
59
+ await this.formatValues(nestedValue.values, nestedValue.displayValues, fields, nestedValue.mergedFieldNames);
60
+ }
61
+ }
62
+ isFormattable(field) {
63
+ return field.isPropertiesField()
64
+ && field.properties.length > 0
65
+ && field.properties[0].property.kindOfQuantity !== undefined
66
+ && field.properties[0].property.kindOfQuantity.activeFormat !== undefined;
67
+ }
68
+ }
69
+ //# sourceMappingURL=PropertyFormatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PropertyFormatter.js","sourceRoot":"","sources":["../../../src/presentation-common/PropertyFormatter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Core\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Format, FormatProps, FormatterSpec, ParserSpec, UnitsProvider } from \"@itwin/core-quantity\";\nimport { Content } from \"./content/Content\";\nimport { Field, PropertiesField } from \"./content/Fields\";\nimport { DisplayValue, NestedContentValue, Value } from \"./content/Value\";\nimport { KindOfQuantityInfo, PropertyInfo } from \"./EC\";\nimport { ValuesDictionary } from \"./Utils\";\n\n/** @alpha */\nexport interface FormatOptions {\n formatProps: FormatProps;\n persistenceUnitName: string;\n}\n\n/** @alpha */\nexport class PropertyValueFormatter {\n constructor(private _unitsProvider: UnitsProvider) { }\n\n public async format(value: number, options: FormatOptions) {\n const formatterSpec = await this.getFormatterSpec(options);\n return formatterSpec.applyFormatting(value);\n }\n\n public async getFormatterSpec(options: FormatOptions) {\n const { formatProps, persistenceUnitName } = options;\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 { formatProps, persistenceUnitName } = options;\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\n/** @alpha */\nexport class ContentPropertyValueFormatter extends PropertyValueFormatter {\n public async formatContent(content: Content) {\n const descriptor = content.descriptor;\n for (const item of content.contentSet) {\n await this.formatValues(item.values, item.displayValues, descriptor.fields, item.mergedFieldNames);\n }\n return content;\n }\n\n private async formatValues(values: ValuesDictionary<Value>, displayValues: ValuesDictionary<DisplayValue>, fields: Field[], mergedFields: string[]) {\n for (const field of fields) {\n const value = values[field.name];\n if (field.isNestedContentField() && !mergedFields.includes(field.name)) {\n assert(Value.isNestedContent(value));\n await this.formatNestedContentDisplayValues(value, field.nestedFields);\n continue;\n }\n if (this.isFormattable(field) && typeof value === \"number\") {\n const koq = field.properties[0].property.kindOfQuantity;\n displayValues[field.name] = await this.format(value, { persistenceUnitName: koq.persistenceUnit, formatProps: koq.activeFormat });\n continue;\n }\n }\n }\n\n private async formatNestedContentDisplayValues(nestedValues: NestedContentValue[], fields: Field[]) {\n for (const nestedValue of nestedValues) {\n await this.formatValues(nestedValue.values, nestedValue.displayValues, fields, nestedValue.mergedFieldNames);\n }\n }\n\n private isFormattable(field: Field): field is FormattableField {\n return field.isPropertiesField()\n && field.properties.length > 0\n && field.properties[0].property.kindOfQuantity !== undefined\n && field.properties[0].property.kindOfQuantity.activeFormat !== undefined;\n }\n}\n\ntype FormattableField = PropertiesField & {\n properties: [{\n property: PropertyInfo & {\n kindOfQuantity: KindOfQuantityInfo & {\n activeFormat: FormatProps;\n };\n };\n }];\n};\n"]}
@@ -65,7 +65,7 @@ export class RpcRequestsHandler {
65
65
  */
66
66
  async request(func, options, ...additionalOptions) {
67
67
  const { imodel, diagnostics, ...optionsNoIModel } = options;
68
- const { handler: diagnosticsHandler, ...diagnosticsOptions } = diagnostics !== null && diagnostics !== void 0 ? diagnostics : {};
68
+ const { handler: diagnosticsHandler, ...diagnosticsOptions } = diagnostics ?? {};
69
69
  if (isOptionsWithRuleset(optionsNoIModel))
70
70
  optionsNoIModel.rulesetOrId = cleanupRuleset(optionsNoIModel.rulesetOrId);
71
71
  const rpcOptions = {
@@ -1 +1 @@
1
- {"version":3,"file":"RpcRequestsHandler.js","sourceRoot":"","sources":["../../../src/presentation-common/RpcRequestsHandler.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 RPC\n */\n\nimport { Guid, IDisposable, Logger } from \"@itwin/core-bentley\";\nimport { IModelRpcProps, RpcManager } from \"@itwin/core-common\";\nimport { PresentationCommonLoggerCategory } from \"./CommonLoggerCategory\";\nimport { DescriptorJSON, DescriptorOverrides } from \"./content/Descriptor\";\nimport { ItemJSON } from \"./content/Item\";\nimport { DisplayValueGroupJSON } from \"./content/Value\";\nimport { ClientDiagnostics, ClientDiagnosticsAttribute, ClientDiagnosticsHandler } from \"./Diagnostics\";\nimport { InstanceKey } from \"./EC\";\nimport { ElementProperties } from \"./ElementProperties\";\nimport { PresentationError, PresentationStatus } from \"./Error\";\nimport { NodeKey } from \"./hierarchy/Key\";\nimport { NodeJSON } from \"./hierarchy/Node\";\nimport { NodePathElementJSON } from \"./hierarchy/NodePathElement\";\nimport { KeySetJSON } from \"./KeySet\";\nimport { LabelDefinition } from \"./LabelDefinition\";\nimport {\n ComputeSelectionRequestOptions, ContentDescriptorRequestOptions, ContentInstanceKeysRequestOptions, ContentRequestOptions,\n ContentSourcesRequestOptions, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DistinctValuesRequestOptions,\n FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, HierarchyLevelDescriptorRequestOptions, HierarchyRequestOptions,\n Paged, RequestOptions, RequestOptionsWithRuleset, SelectionScopeRequestOptions, SingleElementPropertiesRequestOptions,\n} from \"./PresentationManagerOptions\";\nimport {\n ContentSourcesRpcResult, PresentationRpcInterface, PresentationRpcRequestOptions, PresentationRpcResponse,\n} from \"./PresentationRpcInterface\";\nimport { Ruleset } from \"./rules/Ruleset\";\nimport { RulesetVariableJSON } from \"./RulesetVariables\";\nimport { SelectionScope } from \"./selection/SelectionScope\";\nimport { PagedResponse } from \"./Utils\";\n\n/**\n * Configuration parameters for [[RpcRequestsHandler]].\n *\n * @internal\n */\nexport interface RpcRequestsHandlerProps {\n /**\n * Optional ID used to identify client that requests data. If not specified,\n * the handler creates a unique GUID as a client id.\n * @internal\n */\n clientId?: string;\n}\n\n/**\n * RPC requests handler that wraps [[PresentationRpcInterface]] and\n * adds handling for cases when backend needs to be synced with client\n * state.\n *\n * @internal\n */\nexport class RpcRequestsHandler implements IDisposable {\n public readonly maxRequestRepeatCount: number = 5;\n\n /** ID that identifies this handler as a client */\n public readonly clientId: string;\n\n public constructor(props?: RpcRequestsHandlerProps) {\n this.clientId = (props && props.clientId) ? props.clientId : Guid.createValue();\n }\n\n public dispose() {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private get rpcClient(): PresentationRpcInterface { return RpcManager.getClientForInterface(PresentationRpcInterface); }\n\n private async requestRepeatedly<TResult>(func: () => PresentationRpcResponse<TResult>, diagnosticsHandler?: ClientDiagnosticsHandler, repeatCount: number = 1): Promise<TResult> {\n let diagnostics: ClientDiagnostics | undefined;\n let error: unknown | undefined;\n let shouldRepeat = false;\n try {\n const response = await func();\n diagnostics = response.diagnostics;\n\n if (response.statusCode === PresentationStatus.Success)\n return response.result!;\n\n if (response.statusCode === PresentationStatus.BackendTimeout && repeatCount < this.maxRequestRepeatCount)\n shouldRepeat = true;\n else\n error = new PresentationError(response.statusCode, response.errorMessage);\n\n } catch (e) {\n error = e;\n if (repeatCount < this.maxRequestRepeatCount)\n shouldRepeat = true;\n\n } finally {\n diagnosticsHandler && diagnostics && diagnosticsHandler(diagnostics);\n }\n\n if (shouldRepeat) {\n ++repeatCount;\n return this.requestRepeatedly(func, diagnosticsHandler, repeatCount);\n }\n\n throw error;\n }\n\n /**\n * Send the request to backend.\n *\n * If the backend responds with [[PresentationStatus.BackendTimeout]] or there's an RPC-related error,\n * the request is repeated up to `this._maxRequestRepeatCount` times. If we fail to get a valid success or error\n * response from the backend, throw the last encountered error.\n *\n * @internal\n */\n public async request<TResult, TOptions extends (RequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute), TArg = any>(\n func: (token: IModelRpcProps, options: PresentationRpcRequestOptions<TOptions>, ...args: TArg[]) => PresentationRpcResponse<TResult>,\n options: TOptions,\n ...additionalOptions: TArg[]\n ): Promise<TResult> {\n const { imodel, diagnostics, ...optionsNoIModel } = options;\n const { handler: diagnosticsHandler, ...diagnosticsOptions } = diagnostics ?? {};\n if (isOptionsWithRuleset(optionsNoIModel))\n optionsNoIModel.rulesetOrId = cleanupRuleset(optionsNoIModel.rulesetOrId);\n const rpcOptions: PresentationRpcRequestOptions<TOptions> = {\n ...optionsNoIModel,\n clientId: this.clientId,\n };\n if (diagnostics)\n rpcOptions.diagnostics = diagnosticsOptions;\n const doRequest = async () => func(imodel, rpcOptions, ...additionalOptions);\n return this.requestRepeatedly(doRequest, diagnosticsHandler);\n }\n\n public async getNodesCount(options: HierarchyRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<number> {\n return this.request<number, typeof options>(\n this.rpcClient.getNodesCount.bind(this.rpcClient), options);\n }\n // eslint-disable-next-line deprecation/deprecation\n public async getPagedNodes(options: Paged<HierarchyRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON>> & ClientDiagnosticsAttribute): Promise<PagedResponse<NodeJSON>> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<PagedResponse<NodeJSON>, typeof options>(\n this.rpcClient.getPagedNodes.bind(this.rpcClient), options);\n }\n\n public async getNodesDescriptor(options: HierarchyLevelDescriptorRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<DescriptorJSON | undefined> {\n const response = await this.request<string | DescriptorJSON | undefined, typeof options>(\n this.rpcClient.getNodesDescriptor.bind(this.rpcClient), options);\n if (typeof response === \"string\")\n return JSON.parse(response);\n return response;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public async getNodePaths(options: FilterByInstancePathsHierarchyRequestOptions<IModelRpcProps, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<NodePathElementJSON[]> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<NodePathElementJSON[], typeof options>(\n this.rpcClient.getNodePaths.bind(this.rpcClient), options);\n }\n // eslint-disable-next-line deprecation/deprecation\n public async getFilteredNodePaths(options: FilterByTextHierarchyRequestOptions<IModelRpcProps, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<NodePathElementJSON[]> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<NodePathElementJSON[], typeof options>(\n this.rpcClient.getFilteredNodePaths.bind(this.rpcClient), options);\n }\n\n public async getContentSources(options: ContentSourcesRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<ContentSourcesRpcResult> {\n return this.request<ContentSourcesRpcResult, typeof options>(\n this.rpcClient.getContentSources.bind(this.rpcClient), options);\n }\n public async getContentDescriptor(options: ContentDescriptorRequestOptions<IModelRpcProps, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<DescriptorJSON | undefined> {\n return this.request<DescriptorJSON | undefined, typeof options>(\n this.rpcClient.getContentDescriptor.bind(this.rpcClient), options);\n }\n public async getContentSetSize(options: ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<number> {\n return this.request<number, typeof options>(\n this.rpcClient.getContentSetSize.bind(this.rpcClient), options);\n }\n public async getPagedContent(options: Paged<ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute>) {\n return this.request<{ descriptor: DescriptorJSON, contentSet: PagedResponse<ItemJSON> } | undefined, typeof options>(\n this.rpcClient.getPagedContent.bind(this.rpcClient), options);\n }\n public async getPagedContentSet(options: Paged<ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute>) {\n return this.request<PagedResponse<ItemJSON>, typeof options>(\n this.rpcClient.getPagedContentSet.bind(this.rpcClient), options);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public async getPagedDistinctValues(options: DistinctValuesRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<PagedResponse<DisplayValueGroupJSON>> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<PagedResponse<DisplayValueGroupJSON>, typeof options>(\n this.rpcClient.getPagedDistinctValues.bind(this.rpcClient), options);\n }\n\n public async getElementProperties(options: SingleElementPropertiesRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<ElementProperties | undefined> {\n return this.request<ElementProperties | undefined, typeof options>(\n this.rpcClient.getElementProperties.bind(this.rpcClient), options);\n }\n\n public async getContentInstanceKeys(options: ContentInstanceKeysRequestOptions<IModelRpcProps, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<{ total: number, items: KeySetJSON }> {\n return this.request<{ total: number, items: KeySetJSON }, typeof options>(\n this.rpcClient.getContentInstanceKeys.bind(this.rpcClient), options);\n }\n\n public async getDisplayLabelDefinition(options: DisplayLabelRequestOptions<IModelRpcProps, InstanceKey> & ClientDiagnosticsAttribute): Promise<LabelDefinition> {\n return this.request<LabelDefinition, typeof options>(\n this.rpcClient.getDisplayLabelDefinition.bind(this.rpcClient), options);\n }\n public async getPagedDisplayLabelDefinitions(options: DisplayLabelsRequestOptions<IModelRpcProps, InstanceKey> & ClientDiagnosticsAttribute): Promise<PagedResponse<LabelDefinition>> {\n return this.request<PagedResponse<LabelDefinition>, typeof options>(\n this.rpcClient.getPagedDisplayLabelDefinitions.bind(this.rpcClient), options);\n }\n\n public async getSelectionScopes(options: SelectionScopeRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<SelectionScope[]> {\n return this.request<SelectionScope[], typeof options>(\n this.rpcClient.getSelectionScopes.bind(this.rpcClient), options);\n }\n public async computeSelection(options: ComputeSelectionRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<KeySetJSON> {\n return this.request<KeySetJSON, typeof options>(\n // eslint-disable-next-line deprecation/deprecation\n this.rpcClient.computeSelection.bind(this.rpcClient), options);\n }\n}\n\nfunction isOptionsWithRuleset(options: Object): options is { rulesetOrId: Ruleset } {\n return (typeof (options as RequestOptionsWithRuleset<any, any>).rulesetOrId === \"object\");\n}\n\ntype RulesetWithRequiredProperties = {\n [key in keyof Ruleset]-?: true;\n};\n\nconst RULESET_SUPPORTED_PROPERTIES_OBJ: RulesetWithRequiredProperties = {\n id: true,\n rules: true,\n version: true,\n requiredSchemas: true,\n supplementationInfo: true,\n vars: true,\n};\n\nfunction cleanupRuleset(ruleset: Ruleset): Ruleset {\n const cleanedUpRuleset: Ruleset = { ...ruleset };\n\n for (const propertyKey of Object.keys(cleanedUpRuleset)) {\n if (!RULESET_SUPPORTED_PROPERTIES_OBJ.hasOwnProperty(propertyKey)) {\n if (propertyKey === \"$schema\")\n delete (cleanedUpRuleset as any)[propertyKey];\n else\n Logger.logWarning(PresentationCommonLoggerCategory.Package, `Provided ruleset contains unrecognized attribute '${propertyKey}'. It either doesn't exist or may be no longer supported.`);\n }\n }\n\n return cleanedUpRuleset;\n}\n"]}
1
+ {"version":3,"file":"RpcRequestsHandler.js","sourceRoot":"","sources":["../../../src/presentation-common/RpcRequestsHandler.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 RPC\n */\n\nimport { Guid, IDisposable, Logger } from \"@itwin/core-bentley\";\nimport { IModelRpcProps, RpcManager } from \"@itwin/core-common\";\nimport { PresentationCommonLoggerCategory } from \"./CommonLoggerCategory\";\nimport { DescriptorJSON, DescriptorOverrides } from \"./content/Descriptor\";\nimport { ItemJSON } from \"./content/Item\";\nimport { DisplayValueGroupJSON } from \"./content/Value\";\nimport { ClientDiagnostics, ClientDiagnosticsAttribute, ClientDiagnosticsHandler } from \"./Diagnostics\";\nimport { InstanceKey } from \"./EC\";\nimport { ElementProperties } from \"./ElementProperties\";\nimport { PresentationError, PresentationStatus } from \"./Error\";\nimport { NodeKey } from \"./hierarchy/Key\";\nimport { NodeJSON } from \"./hierarchy/Node\";\nimport { NodePathElementJSON } from \"./hierarchy/NodePathElement\";\nimport { KeySetJSON } from \"./KeySet\";\nimport { LabelDefinition } from \"./LabelDefinition\";\nimport {\n ComputeSelectionRequestOptions, ContentDescriptorRequestOptions, ContentInstanceKeysRequestOptions, ContentRequestOptions,\n ContentSourcesRequestOptions, DisplayLabelRequestOptions, DisplayLabelsRequestOptions, DistinctValuesRequestOptions,\n FilterByInstancePathsHierarchyRequestOptions, FilterByTextHierarchyRequestOptions, HierarchyLevelDescriptorRequestOptions, HierarchyRequestOptions,\n Paged, RequestOptions, RequestOptionsWithRuleset, SelectionScopeRequestOptions, SingleElementPropertiesRequestOptions,\n} from \"./PresentationManagerOptions\";\nimport {\n ContentSourcesRpcResult, PresentationRpcInterface, PresentationRpcRequestOptions, PresentationRpcResponse,\n} from \"./PresentationRpcInterface\";\nimport { Ruleset } from \"./rules/Ruleset\";\nimport { RulesetVariableJSON } from \"./RulesetVariables\";\nimport { SelectionScope } from \"./selection/SelectionScope\";\nimport { PagedResponse } from \"./Utils\";\n\n/**\n * Configuration parameters for [[RpcRequestsHandler]].\n *\n * @internal\n */\nexport interface RpcRequestsHandlerProps {\n /**\n * Optional ID used to identify client that requests data. If not specified,\n * the handler creates a unique GUID as a client id.\n * @internal\n */\n clientId?: string;\n}\n\n/**\n * RPC requests handler that wraps [[PresentationRpcInterface]] and\n * adds handling for cases when backend needs to be synced with client\n * state.\n *\n * @internal\n */\nexport class RpcRequestsHandler implements IDisposable {\n public readonly maxRequestRepeatCount: number = 5;\n\n /** ID that identifies this handler as a client */\n public readonly clientId: string;\n\n public constructor(props?: RpcRequestsHandlerProps) {\n this.clientId = (props && props.clientId) ? props.clientId : Guid.createValue();\n }\n\n public dispose() {\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n private get rpcClient(): PresentationRpcInterface { return RpcManager.getClientForInterface(PresentationRpcInterface); }\n\n private async requestRepeatedly<TResult>(func: () => PresentationRpcResponse<TResult>, diagnosticsHandler?: ClientDiagnosticsHandler, repeatCount: number = 1): Promise<TResult> {\n let diagnostics: ClientDiagnostics | undefined;\n let error: unknown | undefined;\n let shouldRepeat = false;\n try {\n const response = await func();\n diagnostics = response.diagnostics;\n\n if (response.statusCode === PresentationStatus.Success)\n return response.result!;\n\n if (response.statusCode === PresentationStatus.BackendTimeout && repeatCount < this.maxRequestRepeatCount)\n shouldRepeat = true;\n else\n error = new PresentationError(response.statusCode, response.errorMessage);\n\n } catch (e) {\n error = e;\n if (repeatCount < this.maxRequestRepeatCount)\n shouldRepeat = true;\n\n } finally {\n diagnosticsHandler && diagnostics && diagnosticsHandler(diagnostics);\n }\n\n if (shouldRepeat) {\n ++repeatCount;\n return this.requestRepeatedly(func, diagnosticsHandler, repeatCount);\n }\n\n throw error;\n }\n\n /**\n * Send the request to backend.\n *\n * If the backend responds with [[PresentationStatus.BackendTimeout]] or there's an RPC-related error,\n * the request is repeated up to `this._maxRequestRepeatCount` times. If we fail to get a valid success or error\n * response from the backend, throw the last encountered error.\n *\n * @internal\n */\n public async request<TResult, TOptions extends (RequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute), TArg = any>(\n func: (token: IModelRpcProps, options: PresentationRpcRequestOptions<TOptions>, ...args: TArg[]) => PresentationRpcResponse<TResult>,\n options: TOptions,\n ...additionalOptions: TArg[]\n ): Promise<TResult> {\n const { imodel, diagnostics, ...optionsNoIModel } = options;\n const { handler: diagnosticsHandler, ...diagnosticsOptions } = diagnostics ?? {};\n if (isOptionsWithRuleset(optionsNoIModel))\n optionsNoIModel.rulesetOrId = cleanupRuleset(optionsNoIModel.rulesetOrId);\n const rpcOptions: PresentationRpcRequestOptions<TOptions> = {\n ...optionsNoIModel,\n clientId: this.clientId,\n };\n if (diagnostics)\n rpcOptions.diagnostics = diagnosticsOptions;\n const doRequest = async () => func(imodel, rpcOptions, ...additionalOptions);\n return this.requestRepeatedly(doRequest, diagnosticsHandler);\n }\n\n public async getNodesCount(options: HierarchyRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<number> {\n return this.request<number, typeof options>(\n this.rpcClient.getNodesCount.bind(this.rpcClient), options);\n }\n // eslint-disable-next-line deprecation/deprecation\n public async getPagedNodes(options: Paged<HierarchyRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON>> & ClientDiagnosticsAttribute): Promise<PagedResponse<NodeJSON>> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<PagedResponse<NodeJSON>, typeof options>(\n this.rpcClient.getPagedNodes.bind(this.rpcClient), options);\n }\n\n public async getNodesDescriptor(options: HierarchyLevelDescriptorRequestOptions<IModelRpcProps, NodeKey, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<DescriptorJSON | undefined> {\n const response = await this.request<string | DescriptorJSON | undefined, typeof options>(\n this.rpcClient.getNodesDescriptor.bind(this.rpcClient), options);\n if (typeof response === \"string\")\n return JSON.parse(response);\n return response;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public async getNodePaths(options: FilterByInstancePathsHierarchyRequestOptions<IModelRpcProps, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<NodePathElementJSON[]> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<NodePathElementJSON[], typeof options>(\n this.rpcClient.getNodePaths.bind(this.rpcClient), options);\n }\n // eslint-disable-next-line deprecation/deprecation\n public async getFilteredNodePaths(options: FilterByTextHierarchyRequestOptions<IModelRpcProps, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<NodePathElementJSON[]> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<NodePathElementJSON[], typeof options>(\n this.rpcClient.getFilteredNodePaths.bind(this.rpcClient), options);\n }\n\n public async getContentSources(options: ContentSourcesRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<ContentSourcesRpcResult> {\n return this.request<ContentSourcesRpcResult, typeof options>(\n this.rpcClient.getContentSources.bind(this.rpcClient), options);\n }\n public async getContentDescriptor(options: ContentDescriptorRequestOptions<IModelRpcProps, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<DescriptorJSON | undefined> {\n return this.request<DescriptorJSON | undefined, typeof options>(\n this.rpcClient.getContentDescriptor.bind(this.rpcClient), options);\n }\n public async getContentSetSize(options: ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<number> {\n return this.request<number, typeof options>(\n this.rpcClient.getContentSetSize.bind(this.rpcClient), options);\n }\n public async getPagedContent(options: Paged<ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute>) {\n return this.request<{ descriptor: DescriptorJSON, contentSet: PagedResponse<ItemJSON> } | undefined, typeof options>(\n this.rpcClient.getPagedContent.bind(this.rpcClient), options);\n }\n public async getPagedContentSet(options: Paged<ContentRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute>) {\n return this.request<PagedResponse<ItemJSON>, typeof options>(\n this.rpcClient.getPagedContentSet.bind(this.rpcClient), options);\n }\n\n // eslint-disable-next-line deprecation/deprecation\n public async getPagedDistinctValues(options: DistinctValuesRequestOptions<IModelRpcProps, DescriptorOverrides, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<PagedResponse<DisplayValueGroupJSON>> {\n // eslint-disable-next-line deprecation/deprecation\n return this.request<PagedResponse<DisplayValueGroupJSON>, typeof options>(\n this.rpcClient.getPagedDistinctValues.bind(this.rpcClient), options);\n }\n\n public async getElementProperties(options: SingleElementPropertiesRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<ElementProperties | undefined> {\n return this.request<ElementProperties | undefined, typeof options>(\n this.rpcClient.getElementProperties.bind(this.rpcClient), options);\n }\n\n public async getContentInstanceKeys(options: ContentInstanceKeysRequestOptions<IModelRpcProps, KeySetJSON, RulesetVariableJSON> & ClientDiagnosticsAttribute): Promise<{ total: number, items: KeySetJSON }> {\n return this.request<{ total: number, items: KeySetJSON }, typeof options>(\n this.rpcClient.getContentInstanceKeys.bind(this.rpcClient), options);\n }\n\n public async getDisplayLabelDefinition(options: DisplayLabelRequestOptions<IModelRpcProps, InstanceKey> & ClientDiagnosticsAttribute): Promise<LabelDefinition> {\n return this.request<LabelDefinition, typeof options>(\n this.rpcClient.getDisplayLabelDefinition.bind(this.rpcClient), options);\n }\n public async getPagedDisplayLabelDefinitions(options: DisplayLabelsRequestOptions<IModelRpcProps, InstanceKey> & ClientDiagnosticsAttribute): Promise<PagedResponse<LabelDefinition>> {\n return this.request<PagedResponse<LabelDefinition>, typeof options>(\n this.rpcClient.getPagedDisplayLabelDefinitions.bind(this.rpcClient), options);\n }\n\n public async getSelectionScopes(options: SelectionScopeRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<SelectionScope[]> {\n return this.request<SelectionScope[], typeof options>(\n this.rpcClient.getSelectionScopes.bind(this.rpcClient), options);\n }\n public async computeSelection(options: ComputeSelectionRequestOptions<IModelRpcProps> & ClientDiagnosticsAttribute): Promise<KeySetJSON> {\n return this.request<KeySetJSON, typeof options>(\n // eslint-disable-next-line deprecation/deprecation\n this.rpcClient.computeSelection.bind(this.rpcClient), options);\n }\n}\n\nfunction isOptionsWithRuleset(options: Object): options is { rulesetOrId: Ruleset } {\n return (typeof (options as RequestOptionsWithRuleset<any, any>).rulesetOrId === \"object\");\n}\n\ntype RulesetWithRequiredProperties = {\n [key in keyof Ruleset]-?: true;\n};\n\nconst RULESET_SUPPORTED_PROPERTIES_OBJ: RulesetWithRequiredProperties = {\n id: true,\n rules: true,\n version: true,\n requiredSchemas: true,\n supplementationInfo: true,\n vars: true,\n};\n\nfunction cleanupRuleset(ruleset: Ruleset): Ruleset {\n const cleanedUpRuleset: Ruleset = { ...ruleset };\n\n for (const propertyKey of Object.keys(cleanedUpRuleset)) {\n if (!RULESET_SUPPORTED_PROPERTIES_OBJ.hasOwnProperty(propertyKey)) {\n if (propertyKey === \"$schema\")\n delete (cleanedUpRuleset as any)[propertyKey];\n else\n Logger.logWarning(PresentationCommonLoggerCategory.Package, `Provided ruleset contains unrecognized attribute '${propertyKey}'. It either doesn't exist or may be no longer supported.`);\n }\n }\n\n return cleanedUpRuleset;\n}\n"]}
@@ -33,7 +33,7 @@ export class RulesetsFactory {
33
33
  const propertyName = getPropertyName(field);
34
34
  const propertyValue = getPropertyValue(record, field);
35
35
  const relatedInstanceInfo = createRelatedInstanceSpecInfo(field);
36
- const relatedClass = relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.class;
36
+ const relatedClass = relatedInstanceInfo?.class;
37
37
  const ruleset = {
38
38
  id: `SimilarInstances/${propertyName}/${Guid.createValue()}`,
39
39
  rules: [],
@@ -45,7 +45,7 @@ export class RulesetsFactory {
45
45
  classes: createMultiClassSpecification(record.classInfo),
46
46
  handleInstancesPolymorphically: true,
47
47
  relatedInstances: relatedInstanceInfo ? [relatedInstanceInfo.spec] : [],
48
- instanceFilter: createInstanceFilter(relatedInstanceInfo === null || relatedInstanceInfo === void 0 ? void 0 : relatedInstanceInfo.spec, field.type, propertyName, propertyValue.raw),
48
+ instanceFilter: createInstanceFilter(relatedInstanceInfo?.spec, field.type, propertyName, propertyValue.raw),
49
49
  }],
50
50
  });
51
51
  return { ruleset, relatedClass, propertyName, propertyValue };
@@ -70,7 +70,7 @@ const toString = (displayValue) => {
70
70
  return displayValue.toString();
71
71
  };
72
72
  const createDescription = (record, relatedClass, field, value) => {
73
- const classInfo = relatedClass !== null && relatedClass !== void 0 ? relatedClass : record.classInfo;
73
+ const classInfo = relatedClass ?? record.classInfo;
74
74
  return `[${classInfo.label}].[${field.label}] = ${value}`;
75
75
  };
76
76
  const createDescriptionAsync = async (record, relatedClass, field, value, computeDisplayValue) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RulesetsFactory.js","sourceRoot":"","sources":["../../../src/presentation-common/RulesetsFactory.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 { 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"]}
1
+ {"version":3,"file":"RulesetsFactory.js","sourceRoot":"","sources":["../../../src/presentation-common/RulesetsFactory.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 { 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"]}
@@ -217,7 +217,7 @@ export function createFieldHierarchies(fields, ignoreCategories) {
217
217
  return undefined;
218
218
  }
219
219
  const fieldHierarchy = { field, childFields };
220
- if (category === (parentField === null || parentField === void 0 ? void 0 : parentField.category) || ignoreCategories && parentField) {
220
+ if (category === parentField?.category || ignoreCategories && parentField) {
221
221
  // if categories of this field and its parent field match - return the field hierarchy without
222
222
  // including it as a top level field
223
223
  return fieldHierarchy;
@@ -301,14 +301,13 @@ function mergeHierarchies(lhs, rhs) {
301
301
  * @public
302
302
  */
303
303
  export function addFieldHierarchy(rootHierarchies, hierarchy) {
304
- var _a;
305
304
  const match = findRelatedFields(rootHierarchies, hierarchy);
306
305
  if (!match) {
307
306
  rootHierarchies.push(hierarchy);
308
307
  return;
309
308
  }
310
309
  const targetHierarchy = rootHierarchies[match.existing.index];
311
- const existingHierarchy = (_a = match.existing.hierarchy) !== null && _a !== void 0 ? _a : buildParentHierarchy(targetHierarchy, match.existing.field);
310
+ const existingHierarchy = match.existing.hierarchy ?? buildParentHierarchy(targetHierarchy, match.existing.field);
312
311
  const insertHierarchy = buildParentHierarchy(hierarchy, match.matchingField);
313
312
  const mergedHierarchy = mergeHierarchies(existingHierarchy, insertHierarchy);
314
313
  mergedHierarchy.field.category = hierarchy.field.category;
@@ -341,8 +340,7 @@ export function parseCombinedFieldNames(combinedName) {
341
340
  return combinedName ? combinedName.split(FIELD_NAMES_SEPARATOR) : [];
342
341
  }
343
342
  function convertNestedContentItemToStructArrayItem(item, field, nextField) {
344
- var _a;
345
- const value = (_a = item.values[field.name]) !== null && _a !== void 0 ? _a : [];
343
+ const value = item.values[field.name] ?? [];
346
344
  assert(Value.isNestedContent(value));
347
345
  if (value.length === 0)
348
346
  return { emptyNestedItem: true, convertedItem: item };