@itwin/presentation-shared 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE.md +9 -0
  3. package/README.md +434 -0
  4. package/lib/cjs/presentation-shared.d.ts +13 -0
  5. package/lib/cjs/presentation-shared.d.ts.map +1 -0
  6. package/lib/cjs/presentation-shared.js +58 -0
  7. package/lib/cjs/presentation-shared.js.map +1 -0
  8. package/lib/cjs/shared/ConcatenatedValue.d.ts +47 -0
  9. package/lib/cjs/shared/ConcatenatedValue.d.ts.map +1 -0
  10. package/lib/cjs/shared/ConcatenatedValue.js +45 -0
  11. package/lib/cjs/shared/ConcatenatedValue.js.map +1 -0
  12. package/lib/cjs/shared/ECSqlCore.d.ts +91 -0
  13. package/lib/cjs/shared/ECSqlCore.d.ts.map +1 -0
  14. package/lib/cjs/shared/ECSqlCore.js +7 -0
  15. package/lib/cjs/shared/ECSqlCore.js.map +1 -0
  16. package/lib/cjs/shared/Event.d.ts +9 -0
  17. package/lib/cjs/shared/Event.d.ts.map +1 -0
  18. package/lib/cjs/shared/Event.js +7 -0
  19. package/lib/cjs/shared/Event.js.map +1 -0
  20. package/lib/cjs/shared/Formatting.d.ts +39 -0
  21. package/lib/cjs/shared/Formatting.d.ts.map +1 -0
  22. package/lib/cjs/shared/Formatting.js +132 -0
  23. package/lib/cjs/shared/Formatting.js.map +1 -0
  24. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +129 -0
  25. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
  26. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +167 -0
  27. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
  28. package/lib/cjs/shared/InternalUtils.d.ts +3 -0
  29. package/lib/cjs/shared/InternalUtils.d.ts.map +1 -0
  30. package/lib/cjs/shared/InternalUtils.js +14 -0
  31. package/lib/cjs/shared/InternalUtils.js.map +1 -0
  32. package/lib/cjs/shared/Logging.d.ts +27 -0
  33. package/lib/cjs/shared/Logging.d.ts.map +1 -0
  34. package/lib/cjs/shared/Logging.js +20 -0
  35. package/lib/cjs/shared/Logging.js.map +1 -0
  36. package/lib/cjs/shared/MappedTypes.d.ts +11 -0
  37. package/lib/cjs/shared/MappedTypes.d.ts.map +1 -0
  38. package/lib/cjs/shared/MappedTypes.js +7 -0
  39. package/lib/cjs/shared/MappedTypes.js.map +1 -0
  40. package/lib/cjs/shared/Metadata.d.ts +268 -0
  41. package/lib/cjs/shared/Metadata.d.ts.map +1 -0
  42. package/lib/cjs/shared/Metadata.js +54 -0
  43. package/lib/cjs/shared/Metadata.js.map +1 -0
  44. package/lib/cjs/shared/Utils.d.ts +26 -0
  45. package/lib/cjs/shared/Utils.d.ts.map +1 -0
  46. package/lib/cjs/shared/Utils.js +50 -0
  47. package/lib/cjs/shared/Utils.js.map +1 -0
  48. package/lib/cjs/shared/Values.d.ts +119 -0
  49. package/lib/cjs/shared/Values.d.ts.map +1 -0
  50. package/lib/cjs/shared/Values.js +156 -0
  51. package/lib/cjs/shared/Values.js.map +1 -0
  52. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +48 -0
  53. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
  54. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +139 -0
  55. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
  56. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +116 -0
  57. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
  58. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +244 -0
  59. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
  60. package/lib/cjs/shared/ecsql-snippets/index.d.ts +3 -0
  61. package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +1 -0
  62. package/lib/cjs/shared/ecsql-snippets/index.js +16 -0
  63. package/lib/cjs/shared/ecsql-snippets/index.js.map +1 -0
  64. package/lib/esm/presentation-shared.d.ts +13 -0
  65. package/lib/esm/presentation-shared.d.ts.map +1 -0
  66. package/lib/esm/presentation-shared.js +15 -0
  67. package/lib/esm/presentation-shared.js.map +1 -0
  68. package/lib/esm/shared/ConcatenatedValue.d.ts +47 -0
  69. package/lib/esm/shared/ConcatenatedValue.d.ts.map +1 -0
  70. package/lib/esm/shared/ConcatenatedValue.js +42 -0
  71. package/lib/esm/shared/ConcatenatedValue.js.map +1 -0
  72. package/lib/esm/shared/ECSqlCore.d.ts +91 -0
  73. package/lib/esm/shared/ECSqlCore.d.ts.map +1 -0
  74. package/lib/esm/shared/ECSqlCore.js +6 -0
  75. package/lib/esm/shared/ECSqlCore.js.map +1 -0
  76. package/lib/esm/shared/Event.d.ts +9 -0
  77. package/lib/esm/shared/Event.d.ts.map +1 -0
  78. package/lib/esm/shared/Event.js +6 -0
  79. package/lib/esm/shared/Event.js.map +1 -0
  80. package/lib/esm/shared/Formatting.d.ts +39 -0
  81. package/lib/esm/shared/Formatting.d.ts.map +1 -0
  82. package/lib/esm/shared/Formatting.js +127 -0
  83. package/lib/esm/shared/Formatting.js.map +1 -0
  84. package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts +129 -0
  85. package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
  86. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +160 -0
  87. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
  88. package/lib/esm/shared/InternalUtils.d.ts +3 -0
  89. package/lib/esm/shared/InternalUtils.d.ts.map +1 -0
  90. package/lib/esm/shared/InternalUtils.js +10 -0
  91. package/lib/esm/shared/InternalUtils.js.map +1 -0
  92. package/lib/esm/shared/Logging.d.ts +27 -0
  93. package/lib/esm/shared/Logging.d.ts.map +1 -0
  94. package/lib/esm/shared/Logging.js +17 -0
  95. package/lib/esm/shared/Logging.js.map +1 -0
  96. package/lib/esm/shared/MappedTypes.d.ts +11 -0
  97. package/lib/esm/shared/MappedTypes.d.ts.map +1 -0
  98. package/lib/esm/shared/MappedTypes.js +6 -0
  99. package/lib/esm/shared/MappedTypes.js.map +1 -0
  100. package/lib/esm/shared/Metadata.d.ts +268 -0
  101. package/lib/esm/shared/Metadata.d.ts.map +1 -0
  102. package/lib/esm/shared/Metadata.js +49 -0
  103. package/lib/esm/shared/Metadata.js.map +1 -0
  104. package/lib/esm/shared/Utils.d.ts +26 -0
  105. package/lib/esm/shared/Utils.d.ts.map +1 -0
  106. package/lib/esm/shared/Utils.js +44 -0
  107. package/lib/esm/shared/Utils.js.map +1 -0
  108. package/lib/esm/shared/Values.d.ts +119 -0
  109. package/lib/esm/shared/Values.d.ts.map +1 -0
  110. package/lib/esm/shared/Values.js +153 -0
  111. package/lib/esm/shared/Values.js.map +1 -0
  112. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +48 -0
  113. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
  114. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +135 -0
  115. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
  116. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +116 -0
  117. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
  118. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +236 -0
  119. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
  120. package/lib/esm/shared/ecsql-snippets/index.d.ts +3 -0
  121. package/lib/esm/shared/ecsql-snippets/index.d.ts.map +1 -0
  122. package/lib/esm/shared/ecsql-snippets/index.js +7 -0
  123. package/lib/esm/shared/ecsql-snippets/index.js.map +1 -0
  124. package/package.json +59 -0
@@ -0,0 +1,127 @@
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
+ import { assert } from "@itwin/core-bentley";
6
+ import { ConcatenatedValue, ConcatenatedValuePart } from "./ConcatenatedValue";
7
+ import { julianToDateTime } from "./InternalUtils";
8
+ import { getClass } from "./Metadata";
9
+ /**
10
+ * Formats a concatenated value into a string, taking into account different types of `ConcatenatedValuePart` that
11
+ * the value consists of.
12
+ *
13
+ * @throws Error if a `ConcatenatedValuePart` in given `ConcatenatedValue` references a non-primitive, `IGeometry` or `Binary` property.
14
+ * @beta
15
+ */
16
+ export async function formatConcatenatedValue(props) {
17
+ const { value, schemaProvider, valueFormatter } = props;
18
+ if (typeof value === "string") {
19
+ return valueFormatter({ value, type: "String" });
20
+ }
21
+ return ConcatenatedValue.serialize({
22
+ parts: value,
23
+ partFormatter: async (part) => {
24
+ // strings are converted to typed strings
25
+ if (ConcatenatedValuePart.isString(part)) {
26
+ part = {
27
+ value: part,
28
+ type: "String",
29
+ };
30
+ }
31
+ // for property parts - find property metadata and create `TypedPrimitiveValue` for them.
32
+ if (ConcatenatedValuePart.isProperty(part)) {
33
+ const property = await getProperty(part, schemaProvider);
34
+ if (!property?.isPrimitive()) {
35
+ throw new Error(`Concatenated values formatter expects a primitive property, but it's not.`);
36
+ }
37
+ if (property.primitiveType === "IGeometry") {
38
+ throw new Error(`Concatenated values formatter does not support "IGeometry" values, but the provided ${part.className}.${part.propertyName} property is.`);
39
+ }
40
+ if (property.primitiveType === "Binary") {
41
+ throw new Error(`Concatenated values formatter does not support "Binary" values, but the provided ${part.className}.${part.propertyName} property is.`);
42
+ }
43
+ part = {
44
+ type: property.primitiveType,
45
+ extendedType: property.extendedTypeName,
46
+ koqName: (await property.kindOfQuantity)?.fullName,
47
+ value: part.value,
48
+ };
49
+ }
50
+ // finally, use provided value formatter to create a string from `TypedPrimitiveValue`
51
+ return valueFormatter(part);
52
+ },
53
+ });
54
+ }
55
+ async function getProperty({ className, propertyName }, schemaProvider) {
56
+ const propertyClass = await getClass(schemaProvider, className);
57
+ return propertyClass.getProperty(propertyName);
58
+ }
59
+ /**
60
+ * A values' formatter that knows how to format the following types:
61
+ * - `Boolean` values are formatted to either "true" or "false".
62
+ * - `Integer` and `Long` values are rounded to the closest integer.
63
+ * - `Double` values are rounded to 2 decimal places.
64
+ * - `DateTime` values accept 2 formats in addition to `Date`:
65
+ * - if the value is numeric, assume it's a julian day format,
66
+ * - if the value is string, assume it's an ISO 8601 format.
67
+ * If extended type is set to `ShortDate`, the date is formatted as locale date string. Otherwise, it's
68
+ * formatted as locale date + time string.
69
+ * - `Point2d` values are formatted in `(x, y)` format.
70
+ * - `Point3d` values are formatted in `(x, y, z)` format.
71
+ * - `String` and `Id` values are turned as-is.
72
+ *
73
+ * @beta
74
+ */
75
+ export function createDefaultValueFormatter() {
76
+ const formatters = [applyBooleanFormatting, applyNumericFormatting, applyDatesFormatting, applyPointsFormatting];
77
+ return async function (value) {
78
+ for (const formatter of formatters) {
79
+ const result = formatter(value);
80
+ if (!!result) {
81
+ return result;
82
+ }
83
+ }
84
+ assert(typeof value.value === "undefined" || typeof value.value === "boolean" || typeof value.value === "number" || typeof value.value === "string");
85
+ return value.value.toString();
86
+ };
87
+ }
88
+ function applyBooleanFormatting(value) {
89
+ if (value.type === "Boolean") {
90
+ return Boolean(value.value).toString();
91
+ }
92
+ return undefined;
93
+ }
94
+ function applyNumericFormatting(value) {
95
+ if (value.type === "Integer" || value.type === "Long") {
96
+ return Math.round(value.value).toLocaleString();
97
+ }
98
+ if (value.type === "Double") {
99
+ return value.value.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 });
100
+ }
101
+ return undefined;
102
+ }
103
+ function applyDatesFormatting(value) {
104
+ function getDate(julianOrDate) {
105
+ return typeof julianOrDate === "number" ? julianToDateTime(julianOrDate) : typeof julianOrDate === "string" ? new Date(julianOrDate) : julianOrDate;
106
+ }
107
+ if (value.type !== "DateTime") {
108
+ return undefined;
109
+ }
110
+ if (value.extendedType === "ShortDate") {
111
+ return getDate(value.value).toLocaleDateString();
112
+ }
113
+ return getDate(value.value).toLocaleString();
114
+ }
115
+ function applyPointsFormatting(value) {
116
+ function formatComponent(n) {
117
+ return applyNumericFormatting({ type: "Double", value: n });
118
+ }
119
+ if (value.type === "Point3d") {
120
+ return `(${formatComponent(value.value.x)}, ${formatComponent(value.value.y)}, ${formatComponent(value.value.z)})`;
121
+ }
122
+ if (value.type === "Point2d") {
123
+ return `(${formatComponent(value.value.x)}, ${formatComponent(value.value.y)})`;
124
+ }
125
+ return undefined;
126
+ }
127
+ //# sourceMappingURL=Formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Formatting.js","sourceRoot":"","sources":["../../../src/shared/Formatting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ import { ConcatenatedValue } from "./ConcatenatedValue";
2
+ import { TypedValueSelectClauseProps } from "./ecsql-snippets/ECSqlValueSelectorSnippets";
3
+ import { ECClassHierarchyInspector } from "./Metadata";
4
+ /**
5
+ * Props for `IInstanceLabelSelectClauseFactory.createSelectClause`.
6
+ */
7
+ interface CreateInstanceLabelSelectClauseProps {
8
+ /**
9
+ * Alias of an ECSQL class referring to the target instance whose label should be selected.
10
+ *
11
+ * Example:
12
+ * ```ts
13
+ * const selectClause = `
14
+ * SELECT ${await factory.createSelectClause({ classAlias: "x" })}
15
+ * FROM bis.GeometricElement3d AS x
16
+ * `;
17
+ * ```
18
+ */
19
+ classAlias: string;
20
+ /**
21
+ * An optional full name of the class whose instance label is to be selected.
22
+ *
23
+ * The attribute's purpose is purely for optimization and `IInstanceLabelSelectClauseFactory` should not
24
+ * rely on this to be set to a leaf class or set at all. However, when this name is provided, some factory
25
+ * implementations may be able to create a more efficient select clause (e.g. drop some pieces of clause
26
+ * that don't apply for given class).
27
+ */
28
+ className?: string;
29
+ /**
30
+ * An optional function for concatenating multiple `TypedValueSelectClauseProps`. Selectors' concatenation
31
+ * is used when a label consists of multiple pieces, e.g.:
32
+ * - `[` - string,
33
+ * - `this.PropertyX` - property value selector,
34
+ * - `]` - string.
35
+ *
36
+ * It's concatenator's job to serialize those pieces into a single selector and, depending on the use case,
37
+ * it may do that in multiple ways. For example:
38
+ *
39
+ * - `createConcatenatedValueJsonSelector` serializes parts into a JSON array selector. This allows the array to
40
+ * be parsed after the query is run, where each part can be handled individually without losing its metadata.
41
+ * This is the default value.
42
+ *
43
+ * - `createConcatenatedValueStringSelector` concatenates parts into a string using SQLite's `||` operator. While
44
+ * this way of concatenation looses metadata (thus disabling formatting of the values), it tries to produce the
45
+ * value to be as close as possible to the formatted one. This concatenator may be used to create a label for using
46
+ * in the query `WHERE` clause.
47
+ *
48
+ * @see `createConcatenatedValueJsonSelector`
49
+ * @see `createConcatenatedValueStringSelector`
50
+ */
51
+ selectorsConcatenator?: (selectors: TypedValueSelectClauseProps[], checkSelector?: string) => string;
52
+ }
53
+ /**
54
+ * An interface for a factory that knows how create instance label select clauses.
55
+ * @see `createDefaultInstanceLabelSelectClauseFactory`
56
+ * @see `createClassBasedInstanceLabelSelectClauseFactory`
57
+ * @see `createBisInstanceLabelSelectClauseFactory`
58
+ * @beta
59
+ */
60
+ export interface IInstanceLabelSelectClauseFactory {
61
+ /** Creates a select clause for an instance label. */
62
+ createSelectClause(props: CreateInstanceLabelSelectClauseProps): Promise<string>;
63
+ }
64
+ /**
65
+ * Parses an instance label from query result into a string or a `ConcatenatedValue`. The latter type of result
66
+ * is expected when label selector is created using `IInstanceLabelSelectClauseFactory.createSelectClause` with
67
+ * `createConcatenatedValueJsonSelector`.
68
+ *
69
+ * @beta
70
+ */
71
+ export declare function parseInstanceLabel(value: string | undefined): ConcatenatedValue | string;
72
+ /**
73
+ * Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
74
+ * local and briefcase IDs are calculated based on ECInstance ID:
75
+ * - `{briefcase id} = ECInstanceId >> 40`
76
+ * - `{local id} = ECInstanceId & (1 << 40 - 1)`
77
+ *
78
+ * @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
79
+ * @beta
80
+ */
81
+ export declare function createDefaultInstanceLabelSelectClauseFactory(): IInstanceLabelSelectClauseFactory;
82
+ /**
83
+ * An association of a class and an instance label select clause factory method.
84
+ */
85
+ interface ClassBasedLabelSelectClause {
86
+ /** Full class name */
87
+ className: string;
88
+ /** A factory method to create an instance label select clause */
89
+ clause: (props: CreateInstanceLabelSelectClauseProps) => Promise<string>;
90
+ }
91
+ /**
92
+ * Props for `createClassBasedInstanceLabelSelectClauseFactory`.
93
+ */
94
+ interface ClassBasedInstanceLabelSelectClauseFactoryProps {
95
+ /** Access to ECClass hierarchy in the iModel. */
96
+ classHierarchyInspector: ECClassHierarchyInspector;
97
+ /**
98
+ * A prioritized list of instance label selectors associated to classes they should be applied to.
99
+ *
100
+ * Because the list may contain clauses for classes in the same class hierarchy, and the factory
101
+ * handles them in given order, the order of clauses should be from the most specific class to the
102
+ * most general one.
103
+ */
104
+ clauses: ClassBasedLabelSelectClause[];
105
+ /**
106
+ * A fallback label clause factory for when class-based factory doesn't produce a label.
107
+ * Defaults to the result of `createDefaultInstanceLabelSelectClauseFactory`.
108
+ */
109
+ defaultClauseFactory?: IInstanceLabelSelectClauseFactory;
110
+ }
111
+ /**
112
+ * Creates an instance label select clause based on its class.
113
+ * @beta
114
+ */
115
+ export declare function createClassBasedInstanceLabelSelectClauseFactory(props: ClassBasedInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
116
+ /**
117
+ * Props for `createBisInstanceLabelSelectClauseFactory`.
118
+ */
119
+ interface BisInstanceLabelSelectClauseFactoryProps {
120
+ classHierarchyInspector: ECClassHierarchyInspector;
121
+ }
122
+ /**
123
+ * Creates a label select clause according to BIS instance label rules.
124
+ * @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
125
+ * @beta
126
+ */
127
+ export declare function createBisInstanceLabelSelectClauseFactory(props: BisInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
128
+ export {};
129
+ //# sourceMappingURL=InstanceLabelSelectClauseFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/InstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAuE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAC/J,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD;;GAEG;AACH,UAAU,oCAAoC;IAC5C;;;;;;;;;;OAUG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;;;;;;OAOG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,2BAA2B,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;CACtG;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iCAAiC;IAChD,qDAAqD;IACrD,kBAAkB,CAAC,KAAK,EAAE,oCAAoC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAClF;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,MAAM,CAaxF;AAED;;;;;;;;GAQG;AACH,wBAAgB,6CAA6C,IAAI,iCAAiC,CAmBjG;AAED;;GAEG;AACH,UAAU,2BAA2B;IACnC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,MAAM,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED;;GAEG;AACH,UAAU,+CAA+C;IACvD,iDAAiD;IACjD,uBAAuB,EAAE,yBAAyB,CAAC;IAEnD;;;;;;OAMG;IACH,OAAO,EAAE,2BAA2B,EAAE,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,iCAAiC,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,gDAAgD,CAAC,KAAK,EAAE,+CAA+C,GAAG,iCAAiC,CA0D1J;AAED;;GAEG;AACH,UAAU,wCAAwC;IAChD,uBAAuB,EAAE,yBAAyB,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CAAC,KAAK,EAAE,wCAAwC,GAAG,iCAAiC,CAuC5I"}
@@ -0,0 +1,160 @@
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
+ import { createConcatenatedValueJsonSelector, createRawPropertyValueSelector } from "./ecsql-snippets/ECSqlValueSelectorSnippets";
6
+ /**
7
+ * Parses an instance label from query result into a string or a `ConcatenatedValue`. The latter type of result
8
+ * is expected when label selector is created using `IInstanceLabelSelectClauseFactory.createSelectClause` with
9
+ * `createConcatenatedValueJsonSelector`.
10
+ *
11
+ * @beta
12
+ */
13
+ export function parseInstanceLabel(value) {
14
+ if (!value) {
15
+ return "";
16
+ }
17
+ if ((value.startsWith("[") && value.endsWith("]")) || (value.startsWith("{") && value.endsWith("}"))) {
18
+ try {
19
+ return JSON.parse(value);
20
+ }
21
+ catch {
22
+ // fall through
23
+ }
24
+ }
25
+ // not a JSON object/array
26
+ return value;
27
+ }
28
+ /**
29
+ * Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
30
+ * local and briefcase IDs are calculated based on ECInstance ID:
31
+ * - `{briefcase id} = ECInstanceId >> 40`
32
+ * - `{local id} = ECInstanceId & (1 << 40 - 1)`
33
+ *
34
+ * @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
35
+ * @beta
36
+ */
37
+ export function createDefaultInstanceLabelSelectClauseFactory() {
38
+ return {
39
+ async createSelectClause(props) {
40
+ return `(
41
+ SELECT
42
+ ${concatenate(props, [
43
+ {
44
+ selector: `COALESCE(
45
+ ${createRawPropertyValueSelector("c", "DisplayLabel")},
46
+ ${createRawPropertyValueSelector("c", "Name")}
47
+ )`,
48
+ },
49
+ ...createECInstanceIdSuffixSelectors(props.classAlias),
50
+ ])}
51
+ FROM [meta].[ECClassDef] AS [c]
52
+ WHERE [c].[ECInstanceId] = ${createRawPropertyValueSelector(props.classAlias, "ECClassId")}
53
+ )`;
54
+ },
55
+ };
56
+ }
57
+ /**
58
+ * Creates an instance label select clause based on its class.
59
+ * @beta
60
+ */
61
+ export function createClassBasedInstanceLabelSelectClauseFactory(props) {
62
+ const { classHierarchyInspector, clauses: labelClausesByClass } = props;
63
+ const defaultClauseFactory = props.defaultClauseFactory ?? createDefaultInstanceLabelSelectClauseFactory();
64
+ async function getLabelClausesForClass(queryClassName) {
65
+ const matchingLabelClauses = await Promise.all(labelClausesByClass.map(async (entry) => {
66
+ if (await classHierarchyInspector.classDerivesFrom(entry.className, queryClassName)) {
67
+ // label selector is intended for a more specific class than we're selecting from - need to include it
68
+ // as query results (on polymorphic select) are going to include more specific class instances too
69
+ return entry;
70
+ }
71
+ if (await classHierarchyInspector.classDerivesFrom(queryClassName, entry.className)) {
72
+ // label selector is intended for a base class of what query is selecting - need to include it as
73
+ // we want base class label selectors to apply to subclass instances
74
+ return entry;
75
+ }
76
+ return undefined;
77
+ }));
78
+ function filterNotUndefined(x) {
79
+ return !!x;
80
+ }
81
+ return matchingLabelClauses.filter(filterNotUndefined);
82
+ }
83
+ return {
84
+ async createSelectClause(clauseProps) {
85
+ if (labelClausesByClass.length === 0) {
86
+ return defaultClauseFactory.createSelectClause(clauseProps);
87
+ }
88
+ const labelClausePromises = clauseProps.className ? await getLabelClausesForClass(clauseProps.className) : labelClausesByClass;
89
+ if (labelClausePromises.length === 0) {
90
+ return defaultClauseFactory.createSelectClause(clauseProps);
91
+ }
92
+ const labelClauses = await Promise.all(labelClausePromises.map(async ({ className, clause }) => ({
93
+ className,
94
+ clause: await clause(clauseProps),
95
+ })));
96
+ return `COALESCE(
97
+ ${labelClauses
98
+ .map(({ className, clause }) => `
99
+ IIF(
100
+ ${createRawPropertyValueSelector(clauseProps.classAlias, "ECClassId")} IS (${className}),
101
+ ${clause.trim()},
102
+ NULL
103
+ )
104
+ `.trim())
105
+ .join(", ")},
106
+ ${await defaultClauseFactory.createSelectClause(clauseProps)}
107
+ )`;
108
+ },
109
+ };
110
+ }
111
+ /**
112
+ * Creates a label select clause according to BIS instance label rules.
113
+ * @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
114
+ * @beta
115
+ */
116
+ export function createBisInstanceLabelSelectClauseFactory(props) {
117
+ const clauses = [];
118
+ const factory = createClassBasedInstanceLabelSelectClauseFactory({
119
+ classHierarchyInspector: props.classHierarchyInspector,
120
+ clauses,
121
+ });
122
+ clauses.push({
123
+ className: "BisCore.GeometricElement",
124
+ clause: async ({ classAlias, ...rest }) => `
125
+ COALESCE(
126
+ ${createRawPropertyValueSelector(classAlias, "CodeValue")},
127
+ ${concatenate(rest, [{ selector: createRawPropertyValueSelector(classAlias, "UserLabel") }, ...createECInstanceIdSuffixSelectors(classAlias)], `${createRawPropertyValueSelector(classAlias, "UserLabel")} IS NOT NULL`)}
128
+ )
129
+ `,
130
+ }, {
131
+ className: "BisCore.Element",
132
+ clause: async ({ classAlias }) => `
133
+ COALESCE(
134
+ ${createRawPropertyValueSelector(classAlias, "UserLabel")},
135
+ ${createRawPropertyValueSelector(classAlias, "CodeValue")}
136
+ )
137
+ `,
138
+ }, {
139
+ className: "BisCore.Model",
140
+ clause: async ({ classAlias, ...rest }) => `(
141
+ SELECT ${await factory.createSelectClause({ ...rest, classAlias: "e", className: "BisCore.Element" })}
142
+ FROM [bis].[Element] AS [e]
143
+ WHERE [e].[ECInstanceId] = ${createRawPropertyValueSelector(classAlias, "ModeledElement", "Id")}
144
+ )`,
145
+ });
146
+ return factory;
147
+ }
148
+ function createECInstanceIdSuffixSelectors(classAlias) {
149
+ return [
150
+ { value: ` [`, type: "String" },
151
+ { selector: `CAST(base36(${createRawPropertyValueSelector(classAlias, "ECInstanceId")} >> 40) AS TEXT)` },
152
+ { value: `-`, type: "String" },
153
+ { selector: `CAST(base36(${createRawPropertyValueSelector(classAlias, "ECInstanceId")} & ((1 << 40) - 1)) AS TEXT)` },
154
+ { value: `]`, type: "String" },
155
+ ];
156
+ }
157
+ function concatenate(props, selectors, checkSelector) {
158
+ return (props.selectorsConcatenator ?? createConcatenatedValueJsonSelector)(selectors, checkSelector);
159
+ }
160
+ //# sourceMappingURL=InstanceLabelSelectClauseFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../src/shared/InstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ /** @internal */
2
+ export declare function julianToDateTime(julianDate: number): Date;
3
+ //# sourceMappingURL=InternalUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalUtils.d.ts","sourceRoot":"","sources":["../../../src/shared/InternalUtils.ts"],"names":[],"mappings":"AAKA,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAGzD"}
@@ -0,0 +1,10 @@
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
+ /** @internal */
6
+ export function julianToDateTime(julianDate) {
7
+ const millis = (julianDate - 2440587.5) * 86400000;
8
+ return new Date(millis);
9
+ }
10
+ //# sourceMappingURL=InternalUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InternalUtils.js","sourceRoot":"","sources":["../../../src/shared/InternalUtils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,MAAM,MAAM,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC;IACnD,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Defines a type for a logging function.
3
+ * @beta
4
+ */
5
+ export type LogFunction = (category: string, message: string) => void;
6
+ /**
7
+ * Defines logging severities.
8
+ * @beta
9
+ */
10
+ export type LogLevel = "error" | "warning" | "info" | "trace";
11
+ /**
12
+ * An interface for a logger used by presentation packages.
13
+ * @beta
14
+ */
15
+ export interface ILogger {
16
+ isEnabled: (category: string, level: LogLevel) => boolean;
17
+ logError: LogFunction;
18
+ logWarning: LogFunction;
19
+ logInfo: LogFunction;
20
+ logTrace: LogFunction;
21
+ }
22
+ /**
23
+ * A logger implementation that does nothing.
24
+ * @beta
25
+ */
26
+ export declare const NOOP_LOGGER: ILogger;
27
+ //# sourceMappingURL=Logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logging.d.ts","sourceRoot":"","sources":["../../../src/shared/Logging.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9D;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC1D,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED;;;GAGG;AAEH,eAAO,MAAM,WAAW,EAAE,OAMzB,CAAC"}
@@ -0,0 +1,17 @@
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
+ /**
6
+ * A logger implementation that does nothing.
7
+ * @beta
8
+ */
9
+ // istanbul ignore next
10
+ export const NOOP_LOGGER = {
11
+ isEnabled: () => false,
12
+ logError: () => { },
13
+ logWarning: () => { },
14
+ logInfo: () => { },
15
+ logTrace: () => { },
16
+ };
17
+ //# sourceMappingURL=Logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logging.js","sourceRoot":"","sources":["../../../src/shared/Logging.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AA0BhG;;;GAGG;AACH,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;IACtB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;IACpB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;CACnB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * An utility `Omit` type which works with union types.
3
+ * @beta
4
+ */
5
+ export type OmitOverUnion<T, K extends PropertyKey> = T extends T ? Omit<T, K> : never;
6
+ /**
7
+ * An utility generic type to get array element's type.
8
+ * @beta
9
+ */
10
+ export type ArrayElement<ArrayType extends readonly unknown[]> = ArrayType extends readonly (infer ElementType)[] ? ElementType : never;
11
+ //# sourceMappingURL=MappedTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MappedTypes.d.ts","sourceRoot":"","sources":["../../../src/shared/MappedTypes.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AAEvF;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,SAAS,SAAS,SAAS,OAAO,EAAE,IAAI,SAAS,SAAS,SAAS,CAAC,MAAM,WAAW,CAAC,EAAE,GAAG,WAAW,GAAG,KAAK,CAAC"}
@@ -0,0 +1,6 @@
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
+ export {};
6
+ //# sourceMappingURL=MappedTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MappedTypes.js","sourceRoot":"","sources":["../../../src/shared/MappedTypes.ts"],"names":[],"mappings":"AAAA;;;gGAGgG"}