@itwin/presentation-shared 2.0.0-alpha.0 → 2.0.0-alpha.10

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 (135) hide show
  1. package/CHANGELOG.md +188 -1
  2. package/README.md +27 -9
  3. package/lib/cjs/presentation-shared.d.ts +16 -8
  4. package/lib/cjs/presentation-shared.d.ts.map +1 -1
  5. package/lib/cjs/presentation-shared.js +10 -4
  6. package/lib/cjs/presentation-shared.js.map +1 -1
  7. package/lib/cjs/shared/ConcatenatedValue.d.ts +1 -1
  8. package/lib/cjs/shared/ConcatenatedValue.d.ts.map +1 -1
  9. package/lib/cjs/shared/ECSqlCore.d.ts +1 -1
  10. package/lib/cjs/shared/ECSqlCore.d.ts.map +1 -1
  11. package/lib/cjs/shared/Event.d.ts +20 -2
  12. package/lib/cjs/shared/Event.d.ts.map +1 -1
  13. package/lib/cjs/shared/Formatting.d.ts +1 -1
  14. package/lib/cjs/shared/Formatting.d.ts.map +1 -1
  15. package/lib/cjs/shared/Formatting.js +10 -6
  16. package/lib/cjs/shared/Formatting.js.map +1 -1
  17. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +5 -65
  18. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -1
  19. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +0 -136
  20. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +1 -1
  21. package/lib/cjs/shared/Logging.js +2 -1
  22. package/lib/cjs/shared/Logging.js.map +1 -1
  23. package/lib/cjs/shared/MappedTypes.d.ts +3 -13
  24. package/lib/cjs/shared/MappedTypes.d.ts.map +1 -1
  25. package/lib/cjs/shared/Metadata.d.ts +13 -10
  26. package/lib/cjs/shared/Metadata.d.ts.map +1 -1
  27. package/lib/cjs/shared/Metadata.js +4 -1
  28. package/lib/cjs/shared/Metadata.js.map +1 -1
  29. package/lib/cjs/shared/Utils.d.ts +12 -1
  30. package/lib/cjs/shared/Utils.d.ts.map +1 -1
  31. package/lib/cjs/shared/Utils.js +25 -11
  32. package/lib/cjs/shared/Utils.js.map +1 -1
  33. package/lib/cjs/shared/Values.d.ts +3 -3
  34. package/lib/cjs/shared/Values.d.ts.map +1 -1
  35. package/lib/cjs/shared/Values.js +13 -47
  36. package/lib/cjs/shared/Values.js.map +1 -1
  37. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +1 -1
  38. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -1
  39. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +10 -12
  40. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -1
  41. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +4 -3
  42. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -1
  43. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +8 -6
  44. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -1
  45. package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
  46. package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  47. package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +51 -0
  48. package/lib/cjs/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
  49. package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
  50. package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  51. package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +63 -0
  52. package/lib/cjs/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
  53. package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
  54. package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  55. package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +39 -0
  56. package/lib/cjs/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
  57. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
  58. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
  59. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js +10 -0
  60. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
  61. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
  62. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  63. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +335 -0
  64. package/lib/cjs/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
  65. package/lib/cjs/shared/instance-label-factory-impls/Utils.d.ts +6 -0
  66. package/lib/cjs/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
  67. package/lib/cjs/shared/instance-label-factory-impls/Utils.js +24 -0
  68. package/lib/cjs/shared/instance-label-factory-impls/Utils.js.map +1 -0
  69. package/lib/esm/presentation-shared.d.ts +16 -8
  70. package/lib/esm/presentation-shared.d.ts.map +1 -1
  71. package/lib/esm/presentation-shared.js +6 -2
  72. package/lib/esm/presentation-shared.js.map +1 -1
  73. package/lib/esm/shared/ConcatenatedValue.d.ts +1 -1
  74. package/lib/esm/shared/ConcatenatedValue.d.ts.map +1 -1
  75. package/lib/esm/shared/ECSqlCore.d.ts +1 -1
  76. package/lib/esm/shared/ECSqlCore.d.ts.map +1 -1
  77. package/lib/esm/shared/Event.d.ts +20 -2
  78. package/lib/esm/shared/Event.d.ts.map +1 -1
  79. package/lib/esm/shared/Formatting.d.ts +1 -1
  80. package/lib/esm/shared/Formatting.d.ts.map +1 -1
  81. package/lib/esm/shared/Formatting.js +10 -6
  82. package/lib/esm/shared/Formatting.js.map +1 -1
  83. package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts +5 -65
  84. package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -1
  85. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +0 -133
  86. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +1 -1
  87. package/lib/esm/shared/Logging.js +2 -1
  88. package/lib/esm/shared/Logging.js.map +1 -1
  89. package/lib/esm/shared/MappedTypes.d.ts +3 -13
  90. package/lib/esm/shared/MappedTypes.d.ts.map +1 -1
  91. package/lib/esm/shared/Metadata.d.ts +13 -10
  92. package/lib/esm/shared/Metadata.d.ts.map +1 -1
  93. package/lib/esm/shared/Metadata.js +4 -1
  94. package/lib/esm/shared/Metadata.js.map +1 -1
  95. package/lib/esm/shared/Utils.d.ts +12 -1
  96. package/lib/esm/shared/Utils.d.ts.map +1 -1
  97. package/lib/esm/shared/Utils.js +24 -11
  98. package/lib/esm/shared/Utils.js.map +1 -1
  99. package/lib/esm/shared/Values.d.ts +3 -3
  100. package/lib/esm/shared/Values.d.ts.map +1 -1
  101. package/lib/esm/shared/Values.js +13 -47
  102. package/lib/esm/shared/Values.js.map +1 -1
  103. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +1 -1
  104. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -1
  105. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +10 -12
  106. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -1
  107. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +4 -3
  108. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -1
  109. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +8 -6
  110. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -1
  111. package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
  112. package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  113. package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +48 -0
  114. package/lib/esm/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
  115. package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
  116. package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  117. package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +60 -0
  118. package/lib/esm/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
  119. package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
  120. package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  121. package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +36 -0
  122. package/lib/esm/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
  123. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
  124. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
  125. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js +9 -0
  126. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
  127. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
  128. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  129. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +332 -0
  130. package/lib/esm/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
  131. package/lib/esm/shared/instance-label-factory-impls/Utils.d.ts +6 -0
  132. package/lib/esm/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
  133. package/lib/esm/shared/instance-label-factory-impls/Utils.js +20 -0
  134. package/lib/esm/shared/instance-label-factory-impls/Utils.js.map +1 -0
  135. package/package.json +15 -23
@@ -0,0 +1,332 @@
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
+ // cspell:words rilt
6
+ import { assert } from "@itwin/core-bentley";
7
+ import { createRelationshipPathJoinClause } from "../ecsql-snippets/ECSqlJoinSnippets.js";
8
+ import { createConcatenatedValueJsonSelector, createRawPropertyValueSelector, } from "../ecsql-snippets/ECSqlValueSelectorSnippets.js";
9
+ import { getClass } from "../Metadata.js";
10
+ import { parseFullClassName } from "../Utils.js";
11
+ import { createBisInstanceLabelSelectClauseFactory } from "./BisInstanceLabelSelectClauseFactory.js";
12
+ import { createClassBasedInstanceLabelSelectClauseFactory } from "./ClassBasedInstanceLabelSelectClauseFactory.js";
13
+ /**
14
+ * Creates an instance label select clause factory that reads `InstanceLabelOverride` rules from
15
+ * `PresentationRules` rulesets stored in the iModel and compiles them into ECSQL label selectors.
16
+ *
17
+ * Rules are loaded lazily on first use and cached per factory instance. Rulesets are discovered
18
+ * by querying `PresentationRules.Ruleset`. When the `PresentationRules` schema is not imported
19
+ * into the iModel the factory transparently falls back to `defaultClauseFactory` (defaults
20
+ * to `createBisInstanceLabelSelectClauseFactory`).
21
+ *
22
+ * @public
23
+ */
24
+ export function createIModelInstanceLabelSelectClauseFactory(props) {
25
+ let factoryCache;
26
+ async function getCachedFactory() {
27
+ if (!factoryCache) {
28
+ factoryCache = createIModelInstanceLabelSelectClauseFactoryImpl(props);
29
+ }
30
+ return factoryCache;
31
+ }
32
+ return {
33
+ async createSelectClause(clauseProps) {
34
+ const factory = await getCachedFactory();
35
+ return factory.createSelectClause(clauseProps);
36
+ },
37
+ };
38
+ }
39
+ async function createIModelInstanceLabelSelectClauseFactoryImpl(props) {
40
+ const defaultClauseFactory = props.defaultClauseFactory ??
41
+ createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector: props.imodelAccess });
42
+ const rules = await loadOverrideRules(props.imodelAccess);
43
+ if (rules.length === 0) {
44
+ return defaultClauseFactory;
45
+ }
46
+ rules.sort((lhs, rhs) => (rhs.priority ?? 1000) - (lhs.priority ?? 1000));
47
+ const clauses = rules.map((rule) => ({
48
+ className: `${rule.class.schemaName}.${rule.class.className}`,
49
+ clause: async (clauseProps) => compileOverrideClause({
50
+ rule,
51
+ clauseProps,
52
+ // `innerFactory` is declared below but is already assigned by the time this callback is invoked (never called synchronously)
53
+ labelFactory: innerFactory,
54
+ schemaProvider: props.imodelAccess,
55
+ }),
56
+ }));
57
+ const innerFactory = createClassBasedInstanceLabelSelectClauseFactory({
58
+ classHierarchyInspector: props.imodelAccess,
59
+ clauses,
60
+ defaultClauseFactory,
61
+ });
62
+ return innerFactory;
63
+ }
64
+ // eslint-disable-next-line @typescript-eslint/naming-convention
65
+ const CLASS_NAME_PresentationRules = "PresentationRules.Ruleset";
66
+ async function loadOverrideRules(executor) {
67
+ const rules = [];
68
+ try {
69
+ const reader = executor.createQueryReader({
70
+ ecsql: `SELECT json_extract(JsonProperties, '$.jsonProperties') AS jsonProperties FROM ${CLASS_NAME_PresentationRules}`,
71
+ });
72
+ for await (const row of reader) {
73
+ const payload = row.jsonProperties;
74
+ if (payload === null || payload === undefined) {
75
+ continue;
76
+ }
77
+ let parsed;
78
+ try {
79
+ parsed = JSON.parse(payload);
80
+ }
81
+ catch {
82
+ continue;
83
+ }
84
+ if (!parsed || typeof parsed !== "object") {
85
+ continue;
86
+ }
87
+ const rulesetObj = parsed;
88
+ // Collect from top-level rules[]
89
+ const topRules = Array.isArray(rulesetObj.rules) ? rulesetObj.rules : [];
90
+ for (const rule of topRules) {
91
+ const normalized = normalizeInstanceLabelOverrideRule(rule);
92
+ if (normalized) {
93
+ rules.push(normalized);
94
+ }
95
+ }
96
+ }
97
+ }
98
+ catch (e) {
99
+ if (isPresentationRulesSchemaAbsenceError(e)) {
100
+ return [];
101
+ }
102
+ throw e;
103
+ }
104
+ return rules;
105
+ }
106
+ function isPresentationRulesSchemaAbsenceError(e) {
107
+ if (!(e instanceof Error)) {
108
+ return false;
109
+ }
110
+ return e.message.includes(`'${CLASS_NAME_PresentationRules}' does not exist`);
111
+ }
112
+ function isInstanceLabelOverrideRule(rule) {
113
+ return rule.ruleType === "InstanceLabelOverride";
114
+ }
115
+ function normalizeInstanceLabelOverrideRule(rule) {
116
+ if (!isInstanceLabelOverrideRule(rule)) {
117
+ return undefined;
118
+ }
119
+ if (rule.values.length === 0) {
120
+ return undefined;
121
+ }
122
+ return rule;
123
+ }
124
+ async function compileOverrideClause(props) {
125
+ const { rule, clauseProps, labelFactory, schemaProvider } = props;
126
+ assert(rule.values.length > 0);
127
+ const ctx = {
128
+ classAlias: clauseProps.classAlias,
129
+ selectorsConcatenator: clauseProps.selectorsConcatenator ?? createConcatenatedValueJsonSelector,
130
+ labelFactory,
131
+ visitedClasses: clauseProps.visitedClasses ?? new Set(),
132
+ schemaProvider,
133
+ ruleClassName: `${rule.class.schemaName}.${rule.class.className}`,
134
+ depth: clauseProps.depth ?? 0,
135
+ };
136
+ const compiledSpecs = await Promise.all(rule.values.map(async (spec) => compileValueSpec(spec, ctx)));
137
+ if (compiledSpecs.length === 1) {
138
+ return compiledSpecs[0];
139
+ }
140
+ return `COALESCE(${compiledSpecs.join(", ")})`;
141
+ }
142
+ async function compileValueSpec(spec, ctx) {
143
+ switch (spec.specType) {
144
+ case "String": {
145
+ return ctx.selectorsConcatenator([{ value: spec.value, type: "String" }]);
146
+ }
147
+ case "Property": {
148
+ if (spec.propertySource) {
149
+ const steps = normalizeRelationshipPath(spec.propertySource);
150
+ if (steps.length === 0) {
151
+ return "NULL";
152
+ }
153
+ const finalTargetAlias = subqueryAlias(PROPERTY_SOURCE_TARGET_ALIAS, ctx.depth);
154
+ const subquery = await buildRelationshipPathSubquery({
155
+ schemaProvider: ctx.schemaProvider,
156
+ steps,
157
+ ruleClassName: ctx.ruleClassName,
158
+ classAlias: ctx.classAlias,
159
+ selectExpression: createRawPropertyValueSelector(finalTargetAlias, spec.propertyName),
160
+ finalTargetAlias,
161
+ depth: ctx.depth,
162
+ });
163
+ return subquery;
164
+ }
165
+ return createRawPropertyValueSelector(ctx.classAlias, spec.propertyName);
166
+ }
167
+ case "ClassName": {
168
+ return `ec_classname(${createRawPropertyValueSelector(ctx.classAlias, "ECClassId")}, '${spec.full ? "s.c" : "c"}')`;
169
+ }
170
+ case "ClassLabel": {
171
+ return `(
172
+ SELECT COALESCE(
173
+ ${createRawPropertyValueSelector("c", "DisplayLabel")},
174
+ ${createRawPropertyValueSelector("c", "Name")}
175
+ )
176
+ FROM [meta].[ECClassDef] AS [c]
177
+ WHERE [c].[ECInstanceId] = ${createRawPropertyValueSelector(ctx.classAlias, "ECClassId")}
178
+ )`;
179
+ }
180
+ case "BriefcaseId": {
181
+ return `CAST(base36(${createRawPropertyValueSelector(ctx.classAlias, "ECInstanceId")} >> 40) AS TEXT)`;
182
+ }
183
+ case "LocalId": {
184
+ return `CAST(base36(${createRawPropertyValueSelector(ctx.classAlias, "ECInstanceId")} & ((1 << 40) - 1)) AS TEXT)`;
185
+ }
186
+ case "Composite": {
187
+ return compileCompositeSpec(spec, ctx);
188
+ }
189
+ case "RelatedInstanceLabel": {
190
+ const steps = normalizeRelationshipPath(spec.pathToRelatedInstance);
191
+ if (steps.length === 0) {
192
+ return "NULL";
193
+ }
194
+ const lastStep = steps[steps.length - 1];
195
+ let targetClassName;
196
+ if (lastStep.targetClass) {
197
+ targetClassName = `${lastStep.targetClass.schemaName}.${lastStep.targetClass.className}`;
198
+ }
199
+ else {
200
+ const relName = `${lastStep.relationship.schemaName}.${lastStep.relationship.className}`;
201
+ const relClass = await getClass(ctx.schemaProvider, relName);
202
+ if (!relClass.isRelationshipClass()) {
203
+ throw new Error(`Class ${relName} is not a relationship class`);
204
+ }
205
+ const endpoint = lastStep.direction === "Backward" ? relClass.source : relClass.target;
206
+ const constraintClass = await endpoint.abstractConstraint;
207
+ if (!constraintClass) {
208
+ return "''";
209
+ }
210
+ targetClassName = constraintClass.fullName;
211
+ }
212
+ if (ctx.visitedClasses.has(targetClassName)) {
213
+ return "NULL";
214
+ }
215
+ const finalTargetAlias = subqueryAlias(RELATED_INSTANCE_LABEL_TARGET_ALIAS, ctx.depth);
216
+ const selectClauseProps = {
217
+ classAlias: finalTargetAlias,
218
+ className: targetClassName,
219
+ selectorsConcatenator: ctx.selectorsConcatenator,
220
+ visitedClasses: new Set(ctx.visitedClasses).add(targetClassName),
221
+ depth: ctx.depth + 1,
222
+ };
223
+ const subquery = await buildRelationshipPathSubquery({
224
+ schemaProvider: ctx.schemaProvider,
225
+ steps,
226
+ ruleClassName: ctx.ruleClassName,
227
+ classAlias: ctx.classAlias,
228
+ selectExpression: await ctx.labelFactory.createSelectClause(selectClauseProps),
229
+ finalTargetAlias,
230
+ depth: ctx.depth,
231
+ });
232
+ return subquery;
233
+ }
234
+ }
235
+ }
236
+ async function compileCompositeSpec(spec, ctx) {
237
+ if (spec.parts.length === 0) {
238
+ return "''";
239
+ }
240
+ const separator = spec.separator ?? " ";
241
+ const compiledParts = await Promise.all(spec.parts.map(async (part) => ({
242
+ selector: await compileValueSpec(part.spec, ctx),
243
+ isRequired: !!part.isRequired,
244
+ })));
245
+ const selectors = [];
246
+ compiledParts.forEach(({ selector }, index) => {
247
+ if (index > 0 && separator) {
248
+ selectors.push({ value: separator, type: "String" });
249
+ }
250
+ selectors.push({ selector });
251
+ });
252
+ const checkSelectors = compiledParts.filter((p) => p.isRequired).map((p) => `IFNULL(${p.selector}, '') <> ''`);
253
+ const checkSelector = checkSelectors.length > 0 ? checkSelectors.join(" AND ") : undefined;
254
+ return ctx.selectorsConcatenator(selectors, checkSelector);
255
+ }
256
+ function normalizeRelationshipPath(path) {
257
+ return Array.isArray(path) ? path : [path];
258
+ }
259
+ const ALIAS_PREFIX = "pres_";
260
+ const SUBQUERY_SOURCE_ALIAS = "src";
261
+ const PROPERTY_SOURCE_TARGET_ALIAS = "pst";
262
+ const RELATED_INSTANCE_LABEL_TARGET_ALIAS = "rilt";
263
+ const RELATIONSHIP_ALIAS = "r";
264
+ const INTERMEDIATE_TARGET_ALIAS = "m";
265
+ function subqueryAlias(prefix, depth, stepIndex) {
266
+ const alias = `${ALIAS_PREFIX}${prefix}${depth}`;
267
+ return stepIndex !== undefined ? `${alias}_${stepIndex}` : alias;
268
+ }
269
+ async function toJoinRelationshipPath(props) {
270
+ assert(props.steps.length > 0);
271
+ const result = [];
272
+ let currentSourceClassName = props.sourceClassName;
273
+ let currentSourceAlias = props.sourceAlias;
274
+ for (let i = 0; i < props.steps.length; i++) {
275
+ const step = props.steps[i];
276
+ const relationshipName = `${step.relationship.schemaName}.${step.relationship.className}`;
277
+ const relationshipReverse = step.direction === "Backward";
278
+ let targetClassName;
279
+ if (step.targetClass) {
280
+ targetClassName = `${step.targetClass.schemaName}.${step.targetClass.className}`;
281
+ }
282
+ else {
283
+ const relClass = await getClass(props.schemaProvider, relationshipName);
284
+ if (!relClass.isRelationshipClass()) {
285
+ throw new Error(`Class ${relationshipName} is not a relationship class`);
286
+ }
287
+ const endpoint = relationshipReverse ? relClass.source : relClass.target;
288
+ const constraintClass = await endpoint.abstractConstraint;
289
+ if (!constraintClass) {
290
+ throw new Error(`Relationship's ${relationshipName} endpoint does not have an abstract constraint`);
291
+ }
292
+ targetClassName = constraintClass.fullName;
293
+ }
294
+ const isLastStep = i === props.steps.length - 1;
295
+ const targetAlias = isLastStep ? props.finalTargetAlias : subqueryAlias(INTERMEDIATE_TARGET_ALIAS, props.depth, i);
296
+ const relationshipAlias = subqueryAlias(RELATIONSHIP_ALIAS, props.depth, i);
297
+ result.push({
298
+ sourceClassName: currentSourceClassName,
299
+ targetClassName,
300
+ relationshipName,
301
+ relationshipReverse,
302
+ sourceAlias: currentSourceAlias,
303
+ targetAlias,
304
+ relationshipAlias,
305
+ });
306
+ currentSourceClassName = targetClassName;
307
+ currentSourceAlias = targetAlias;
308
+ }
309
+ return result;
310
+ }
311
+ async function buildRelationshipPathSubquery(props) {
312
+ assert(props.steps.length > 0);
313
+ const sourceAlias = subqueryAlias(SUBQUERY_SOURCE_ALIAS, props.depth);
314
+ const joinPath = await toJoinRelationshipPath({
315
+ schemaProvider: props.schemaProvider,
316
+ steps: props.steps,
317
+ sourceClassName: props.ruleClassName,
318
+ sourceAlias,
319
+ finalTargetAlias: props.finalTargetAlias,
320
+ depth: props.depth,
321
+ });
322
+ const joinClauses = await createRelationshipPathJoinClause({ schemaProvider: props.schemaProvider, path: joinPath });
323
+ const { schemaName, className } = parseFullClassName(props.ruleClassName);
324
+ return `(
325
+ SELECT ${props.selectExpression}
326
+ FROM [${schemaName}].[${className}] [${sourceAlias}]
327
+ ${joinClauses}
328
+ WHERE [${sourceAlias}].[ECInstanceId] = [${props.classAlias}].[ECInstanceId]
329
+ LIMIT 1
330
+ )`;
331
+ }
332
+ //# sourceMappingURL=IModelInstanceLabelSelectClauseFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IModelInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { TypedValueSelectClauseProps } from "../ecsql-snippets/ECSqlValueSelectorSnippets.js";
2
+ export declare function createECInstanceIdSuffixSelectors(classAlias: string): TypedValueSelectClauseProps[];
3
+ export declare function concatenate(props: {
4
+ selectorsConcatenator?: (selectors: TypedValueSelectClauseProps[], checkSelector?: string) => string;
5
+ }, selectors: TypedValueSelectClauseProps[], checkSelector?: string): string;
6
+ //# sourceMappingURL=Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/Utils.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iDAAiD,CAAC;AAEnG,wBAAgB,iCAAiC,CAAC,UAAU,EAAE,MAAM,GAAG,2BAA2B,EAAE,CAUnG;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE;IAAE,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,2BAA2B,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,EAC/G,SAAS,EAAE,2BAA2B,EAAE,EACxC,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAER"}
@@ -0,0 +1,20 @@
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.js";
6
+ export function createECInstanceIdSuffixSelectors(classAlias) {
7
+ return [
8
+ { value: ` [`, type: "String" },
9
+ { selector: `CAST(base36(${createRawPropertyValueSelector(classAlias, "ECInstanceId")} >> 40) AS TEXT)` },
10
+ { value: `-`, type: "String" },
11
+ {
12
+ selector: `CAST(base36(${createRawPropertyValueSelector(classAlias, "ECInstanceId")} & ((1 << 40) - 1)) AS TEXT)`,
13
+ },
14
+ { value: `]`, type: "String" },
15
+ ];
16
+ }
17
+ export function concatenate(props, selectors, checkSelector) {
18
+ return (props.selectorsConcatenator ?? createConcatenatedValueJsonSelector)(selectors, checkSelector);
19
+ }
20
+ //# sourceMappingURL=Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../../../src/shared/instance-label-factory-impls/Utils.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EACL,mCAAmC,EACnC,8BAA8B,GAC/B,MAAM,iDAAiD,CAAC;AAIzD,MAAM,UAAU,iCAAiC,CAAC,UAAkB;IAClE,OAAO;QACL,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC/B,EAAE,QAAQ,EAAE,eAAe,8BAA8B,CAAC,UAAU,EAAE,cAAc,CAAC,kBAAkB,EAAE;QACzG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC9B;YACE,QAAQ,EAAE,eAAe,8BAA8B,CAAC,UAAU,EAAE,cAAc,CAAC,8BAA8B;SAClH;QACD,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,KAA+G,EAC/G,SAAwC,EACxC,aAAsB;IAEtB,OAAO,CAAC,KAAK,CAAC,qBAAqB,IAAI,mCAAmC,CAAC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACxG,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/presentation-shared",
3
- "version": "2.0.0-alpha.0",
3
+ "version": "2.0.0-alpha.10",
4
4
  "description": "The package contains types and utilities used across different iTwin.js Presentation packages.",
5
5
  "license": "MIT",
6
6
  "author": {
@@ -32,37 +32,29 @@
32
32
  "./package.json": "./package.json"
33
33
  },
34
34
  "dependencies": {
35
- "@itwin/core-bentley": "^4.10.10"
35
+ "@itwin/core-bentley": "^5.8.0"
36
36
  },
37
37
  "devDependencies": {
38
- "@itwin/build-tools": "5.0.0-dev.67",
39
- "@itwin/eslint-plugin": "5.0.0-dev.1",
40
- "@types/chai": "^5.2.0",
41
- "@types/chai-as-promised": "^8.0.2",
42
- "@types/mocha": "^10.0.10",
43
- "@types/node": "^22.13.9",
44
- "@types/sinon": "^17.0.4",
45
- "@types/sinon-chai": "^4.0.0",
46
- "c8": "^10.1.3",
47
- "chai": "^5.2.0",
48
- "chai-as-promised": "^8.0.1",
49
- "eslint": "^9.13.0",
50
- "mocha": "^11.1.0",
51
- "rimraf": "^6.0.1",
52
- "sinon": "^19.0.4",
53
- "sinon-chai": "^4.0.0",
38
+ "@itwin/build-tools": "^5.8.0",
39
+ "@itwin/eslint-plugin": "5.1.0",
40
+ "@types/node": "^24.12.2",
41
+ "@vitest/coverage-v8": "^4.1.3",
42
+ "eslint": "^9.39.4",
43
+ "rimraf": "^6.1.3",
54
44
  "typescript": "~5.7.3",
55
- "presentation-test-utilities": "^0.0.0"
45
+ "vitest": "^4.1.3",
46
+ "presentation-test-utilities": "0.0.1"
56
47
  },
57
48
  "scripts": {
58
- "build": "npm run -s build:cjs && npm run -s build:esm",
49
+ "build": "npm run -s typecheck && npm run -s build:cjs && npm run -s build:esm",
59
50
  "build:cjs": "node ../../scripts/package-cjs.mjs ./lib/cjs && tsc -p tsconfig.cjs.json",
60
51
  "build:esm": "tsc -p tsconfig.esm.json",
61
52
  "clean": "rimraf lib temp",
62
- "cover": "c8 npm -s test",
53
+ "cover": "vitest run --coverage",
63
54
  "lint": "eslint \"./src/**/*.ts\"",
64
- "test:dev": "mocha --enable-source-maps --config ./.mocharc.json",
65
- "test": "npm run test:dev",
55
+ "typecheck": "tsc -p tsconfig.json --noEmit",
56
+ "test": "vitest run",
57
+ "test:watch": "vitest",
66
58
  "extract-api": "betools extract-api --entry=presentation-shared --apiReportFolder=./api --apiReportTempFolder=./api/temp --apiSummaryFolder=./api --includeUnexportedApis",
67
59
  "check-internal": "node ../../scripts/checkInternal.js --apiSummary ./api/presentation-shared.api.md",
68
60
  "validate-markdowns": "node ../../scripts/validateMarkdowns.js README.md"