@itwin/presentation-shared 2.0.0-alpha.8 → 2.0.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 (190) hide show
  1. package/CHANGELOG.md +736 -1
  2. package/README.md +59 -27
  3. package/lib/presentation-shared.d.ts +24 -0
  4. package/lib/presentation-shared.d.ts.map +1 -0
  5. package/lib/presentation-shared.js +22 -0
  6. package/lib/presentation-shared.js.map +1 -0
  7. package/lib/shared/ConcatenatedValue.d.ts.map +1 -0
  8. package/lib/shared/ConcatenatedValue.js.map +1 -0
  9. package/lib/{cjs/shared → shared}/ECSqlCore.d.ts +16 -2
  10. package/lib/shared/ECSqlCore.d.ts.map +1 -0
  11. package/lib/shared/ECSqlCore.js +37 -0
  12. package/lib/shared/ECSqlCore.js.map +1 -0
  13. package/lib/shared/EachValueFrom.d.ts +30 -0
  14. package/lib/shared/EachValueFrom.d.ts.map +1 -0
  15. package/lib/shared/EachValueFrom.js +115 -0
  16. package/lib/shared/EachValueFrom.js.map +1 -0
  17. package/lib/shared/Event.d.ts.map +1 -0
  18. package/lib/{esm/shared → shared}/Event.js.map +1 -1
  19. package/lib/shared/Formatting.d.ts.map +1 -0
  20. package/lib/{esm/shared → shared}/Formatting.js +10 -6
  21. package/lib/shared/Formatting.js.map +1 -0
  22. package/lib/shared/HiddenClasses.d.ts +21 -0
  23. package/lib/shared/HiddenClasses.d.ts.map +1 -0
  24. package/lib/shared/HiddenClasses.js +52 -0
  25. package/lib/shared/HiddenClasses.js.map +1 -0
  26. package/lib/{esm/shared → shared}/InstanceLabelSelectClauseFactory.d.ts +3 -63
  27. package/lib/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
  28. package/lib/shared/InstanceLabelSelectClauseFactory.js +27 -0
  29. package/lib/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
  30. package/lib/shared/Logging.d.ts.map +1 -0
  31. package/lib/{esm/shared → shared}/Logging.js +2 -1
  32. package/lib/shared/Logging.js.map +1 -0
  33. package/lib/shared/MappedTypes.d.ts +55 -0
  34. package/lib/shared/MappedTypes.d.ts.map +1 -0
  35. package/lib/shared/MappedTypes.js.map +1 -0
  36. package/lib/shared/Metadata.d.ts +572 -0
  37. package/lib/shared/Metadata.d.ts.map +1 -0
  38. package/lib/{esm/shared → shared}/Metadata.js +7 -3
  39. package/lib/shared/Metadata.js.map +1 -0
  40. package/lib/{cjs/shared → shared}/Utils.d.ts +6 -7
  41. package/lib/shared/Utils.d.ts.map +1 -0
  42. package/lib/{esm/shared → shared}/Utils.js +21 -27
  43. package/lib/shared/Utils.js.map +1 -0
  44. package/lib/shared/Values.d.ts +144 -0
  45. package/lib/shared/Values.d.ts.map +1 -0
  46. package/lib/shared/Values.js +121 -0
  47. package/lib/shared/Values.js.map +1 -0
  48. package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts +40 -0
  49. package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts.map +1 -0
  50. package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js +66 -0
  51. package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js.map +1 -0
  52. package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +174 -0
  53. package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
  54. package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js +177 -0
  55. package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
  56. package/lib/{cjs/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +10 -2
  57. package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
  58. package/lib/{esm/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.js +22 -8
  59. package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
  60. package/lib/shared/ecsql-snippets/index.d.ts +4 -0
  61. package/lib/shared/ecsql-snippets/index.d.ts.map +1 -0
  62. package/lib/shared/ecsql-snippets/index.js +8 -0
  63. package/lib/shared/ecsql-snippets/index.js.map +1 -0
  64. package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
  65. package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  66. package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +48 -0
  67. package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
  68. package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
  69. package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  70. package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +60 -0
  71. package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
  72. package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
  73. package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  74. package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +37 -0
  75. package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
  76. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
  77. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
  78. package/lib/{esm/shared/ECSqlCore.js → shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js} +4 -1
  79. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
  80. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
  81. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
  82. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +332 -0
  83. package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
  84. package/lib/shared/instance-label-factory-impls/Utils.d.ts +7 -0
  85. package/lib/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
  86. package/lib/shared/instance-label-factory-impls/Utils.js +21 -0
  87. package/lib/shared/instance-label-factory-impls/Utils.js.map +1 -0
  88. package/package.json +22 -31
  89. package/lib/cjs/package.json +0 -1
  90. package/lib/cjs/presentation-shared.d.ts +0 -17
  91. package/lib/cjs/presentation-shared.d.ts.map +0 -1
  92. package/lib/cjs/presentation-shared.js +0 -71
  93. package/lib/cjs/presentation-shared.js.map +0 -1
  94. package/lib/cjs/shared/ConcatenatedValue.d.ts.map +0 -1
  95. package/lib/cjs/shared/ConcatenatedValue.js +0 -49
  96. package/lib/cjs/shared/ConcatenatedValue.js.map +0 -1
  97. package/lib/cjs/shared/ECSqlCore.d.ts.map +0 -1
  98. package/lib/cjs/shared/ECSqlCore.js +0 -7
  99. package/lib/cjs/shared/ECSqlCore.js.map +0 -1
  100. package/lib/cjs/shared/Event.d.ts.map +0 -1
  101. package/lib/cjs/shared/Event.js +0 -7
  102. package/lib/cjs/shared/Event.js.map +0 -1
  103. package/lib/cjs/shared/Formatting.d.ts.map +0 -1
  104. package/lib/cjs/shared/Formatting.js +0 -114
  105. package/lib/cjs/shared/Formatting.js.map +0 -1
  106. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +0 -133
  107. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
  108. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +0 -166
  109. package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
  110. package/lib/cjs/shared/Logging.d.ts.map +0 -1
  111. package/lib/cjs/shared/Logging.js +0 -20
  112. package/lib/cjs/shared/Logging.js.map +0 -1
  113. package/lib/cjs/shared/MappedTypes.d.ts +0 -17
  114. package/lib/cjs/shared/MappedTypes.d.ts.map +0 -1
  115. package/lib/cjs/shared/MappedTypes.js +0 -7
  116. package/lib/cjs/shared/MappedTypes.js.map +0 -1
  117. package/lib/cjs/shared/Metadata.d.ts +0 -291
  118. package/lib/cjs/shared/Metadata.d.ts.map +0 -1
  119. package/lib/cjs/shared/Metadata.js +0 -53
  120. package/lib/cjs/shared/Metadata.js.map +0 -1
  121. package/lib/cjs/shared/Utils.d.ts.map +0 -1
  122. package/lib/cjs/shared/Utils.js +0 -114
  123. package/lib/cjs/shared/Utils.js.map +0 -1
  124. package/lib/cjs/shared/Values.d.ts +0 -107
  125. package/lib/cjs/shared/Values.d.ts.map +0 -1
  126. package/lib/cjs/shared/Values.js +0 -155
  127. package/lib/cjs/shared/Values.js.map +0 -1
  128. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
  129. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
  130. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -140
  131. package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
  132. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
  133. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +0 -260
  134. package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
  135. package/lib/cjs/shared/ecsql-snippets/index.d.ts +0 -3
  136. package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +0 -1
  137. package/lib/cjs/shared/ecsql-snippets/index.js +0 -18
  138. package/lib/cjs/shared/ecsql-snippets/index.js.map +0 -1
  139. package/lib/esm/presentation-shared.d.ts +0 -17
  140. package/lib/esm/presentation-shared.d.ts.map +0 -1
  141. package/lib/esm/presentation-shared.js +0 -14
  142. package/lib/esm/presentation-shared.js.map +0 -1
  143. package/lib/esm/shared/ConcatenatedValue.d.ts +0 -46
  144. package/lib/esm/shared/ConcatenatedValue.d.ts.map +0 -1
  145. package/lib/esm/shared/ConcatenatedValue.js.map +0 -1
  146. package/lib/esm/shared/ECSqlCore.d.ts +0 -94
  147. package/lib/esm/shared/ECSqlCore.d.ts.map +0 -1
  148. package/lib/esm/shared/ECSqlCore.js.map +0 -1
  149. package/lib/esm/shared/Event.d.ts +0 -27
  150. package/lib/esm/shared/Event.d.ts.map +0 -1
  151. package/lib/esm/shared/Formatting.d.ts +0 -44
  152. package/lib/esm/shared/Formatting.d.ts.map +0 -1
  153. package/lib/esm/shared/Formatting.js.map +0 -1
  154. package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
  155. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +0 -160
  156. package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
  157. package/lib/esm/shared/Logging.d.ts +0 -27
  158. package/lib/esm/shared/Logging.d.ts.map +0 -1
  159. package/lib/esm/shared/Logging.js.map +0 -1
  160. package/lib/esm/shared/MappedTypes.d.ts +0 -17
  161. package/lib/esm/shared/MappedTypes.d.ts.map +0 -1
  162. package/lib/esm/shared/MappedTypes.js.map +0 -1
  163. package/lib/esm/shared/Metadata.d.ts +0 -291
  164. package/lib/esm/shared/Metadata.d.ts.map +0 -1
  165. package/lib/esm/shared/Metadata.js.map +0 -1
  166. package/lib/esm/shared/Utils.d.ts +0 -61
  167. package/lib/esm/shared/Utils.d.ts.map +0 -1
  168. package/lib/esm/shared/Utils.js.map +0 -1
  169. package/lib/esm/shared/Values.d.ts +0 -107
  170. package/lib/esm/shared/Values.d.ts.map +0 -1
  171. package/lib/esm/shared/Values.js +0 -152
  172. package/lib/esm/shared/Values.js.map +0 -1
  173. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
  174. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
  175. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -137
  176. package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
  177. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +0 -122
  178. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
  179. package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
  180. package/lib/esm/shared/ecsql-snippets/index.d.ts +0 -3
  181. package/lib/esm/shared/ecsql-snippets/index.d.ts.map +0 -1
  182. package/lib/esm/shared/ecsql-snippets/index.js +0 -7
  183. package/lib/esm/shared/ecsql-snippets/index.js.map +0 -1
  184. /package/lib/{cjs/shared → shared}/ConcatenatedValue.d.ts +0 -0
  185. /package/lib/{esm/shared → shared}/ConcatenatedValue.js +0 -0
  186. /package/lib/{cjs/shared → shared}/Event.d.ts +0 -0
  187. /package/lib/{esm/shared → shared}/Event.js +0 -0
  188. /package/lib/{cjs/shared → shared}/Formatting.d.ts +0 -0
  189. /package/lib/{cjs/shared → shared}/Logging.d.ts +0 -0
  190. /package/lib/{esm/shared → shared}/MappedTypes.js +0 -0
package/README.md CHANGED
@@ -16,47 +16,48 @@ The namespace defines all the [EC](https://www.itwinjs.org/bis/ec/) types that P
16
16
 
17
17
  ### `ECSchemaProvider` & `getClass`
18
18
 
19
- - `ECSchemaProvider` is an interface for something that knows how to get an [ECSchema](https://www.itwinjs.org/bis/ec/ec-schema/) from an iModel. The package itself doesn't provide an implementation for this interface and instead relies on `@itwin/presentation-core-interop` to do that.
19
+ - `ECSchemaProvider` is an interface for something that knows how to get an [ECSchema](https://www.itwinjs.org/bis/ec/ec-schema/) from an iModel, or check if one class is the same as, or derives from, another. The package itself doesn't provide an implementation for this interface and instead relies on `@itwin/presentation-core-interop` to do that.
20
20
 
21
21
  - `getClass` is an utility function that makes it easier to get an `EC.Class`, given an `ECSchemaProvider` and a full class name.
22
22
 
23
23
  Example usage:
24
24
 
25
25
  ```ts
26
- import { SchemaContext } from "@itwin/ecschema-metadata";
26
+ import { IModelConnection } from "@itwin/core-frontend";
27
27
  import { createECSchemaProvider } from "@itwin/presentation-core-interop";
28
28
  import { ECSchemaProvider, getClass } from "@itwin/presentation-shared";
29
29
 
30
- const schemas = new SchemaContext();
31
- const schemaProvider: ECSchemaProvider = createECSchemaProvider(schemas);
30
+ const iModelConnection: IModelConnection = ...; // obtain the IModelConnection instance
31
+ const schemaProvider: ECSchemaProvider = createECSchemaProvider(iModelConnection);
32
32
 
33
33
  // get schema and a class from it
34
34
  const ecSchema = await schemaProvider.getSchema("MySchema");
35
- const ecClassFromSchema = await ecSchema.getClass("MyClass");
35
+ const ecClassFromSchema = ecSchema.getClass("MyClass");
36
36
 
37
37
  // ... or use the `getClass` utility to get straight to the class
38
38
  const ecClassFromUtility = await getClass(schemaProvider, "MySchema.MyClass");
39
+
40
+ // check whether one class derives from another
41
+ const isGeometricElement = await schemaProvider.classDerivesFrom("MySchema.MyClass", "BisCore.GeometricElement");
39
42
  ```
40
43
 
41
- ### `ECClassHierarchyInspector` & `createCachingECClassHierarchyInspector`
44
+ ### Hidden classes
42
45
 
43
- - `ECClassHierarchyInspector` is an interface for something that knows how to check whether one `EC.Class` derives from another. While that can be achieved through `ECSchemaProvider` by getting an `EC.Class` and calling its `is` method, using this interface provides a more streamlined and, possibly, more efficient way to do the check. In addition, the `ECClassHierarchyInspector.classDerivesFrom` returns a `Promise<boolean> | boolean`, which lets the implementation return the result synchronously, if it's already known.
46
+ Classes may be hidden from users through `CoreCustomAttributes.HiddenClass` and `CoreCustomAttributes.HiddenSchema` custom attributes. Instances of such classes shouldn't be shown in the UI, unless their class is selected explicitly.
44
47
 
45
- - `createCachingECClassHierarchyInspector` is a factory method that creates `ECClassHierarchyInspector` instance that uses a LRU cache to store the check results. In Presentation library use cases, class inheritance checks are done very frequently to warrant caching these results.
48
+ - `ECSchemaProvider.getHiddenClassesTree` returns a `HiddenClassesTreeNode` tree of classes, derived from the given class, whose visibility differs from their base class. The given class is the visibility boundary: `HiddenClass` attributes on it and on its base classes are ignored. The tree includes both hidden classes and their explicitly shown descendants. Building the tree requires traversing the whole derived classes' hierarchy, so implementations are expected to cache the result. The provider created by `createECSchemaProvider` from `@itwin/presentation-core-interop` caches it for the provider's lifetime. Create one provider per iModel and share it between consumers; after schema changes, recreate the provider and consumers holding it.
46
49
 
47
- Example usage:
50
+ - `createHiddenClassesTree` builds the tree for `ECSchemaProvider.getHiddenClassesTree` implementations. It doesn't cache the result.
48
51
 
49
- ```ts
50
- import { createCachingECClassHierarchyInspector, ECClassHierarchyInspector } from "@itwin/presentation-shared";
52
+ Use `ECSql.createHiddenClassesFilter` to exclude instances of hidden classes in ECSQL queries.
51
53
 
52
- const classHierarchyInspector: ECClassHierarchyInspector = createCachingECClassHierarchyInspector({
53
- // provide `ECSchemaProvider` that will be used to access iModels schemas
54
- schemaProvider: getMetadataProvider(),
55
- // tell how many entries should be cached in LRU cache (0 or `undefined` stand for "no caching")
56
- cacheSize: 100,
57
- });
58
- const isGeometricElement = await classHierarchyInspector.classDerivesFrom("MySchema.MyClass", "BisCore.GeometricElement");
59
- ```
54
+ ### `ECClassHierarchyInspector` & `createCachingECClassHierarchyInspector` (deprecated)
55
+
56
+ > **Deprecated:** `ECClassHierarchyInspector` and `createCachingECClassHierarchyInspector` are deprecated. `ECSchemaProvider` now exposes a `classDerivesFrom` method directly, so a separate class hierarchy inspector is no longer needed.
57
+
58
+ - `ECClassHierarchyInspector` is an interface for something that knows how to check whether one `EC.Class` derives from another. The same capability is now available directly on `ECSchemaProvider` via its `classDerivesFrom` method. Like the inspector, `ECSchemaProvider.classDerivesFrom` returns a `Promise<boolean> | boolean`, which lets the implementation return the result synchronously when it's already known.
59
+
60
+ - `createCachingECClassHierarchyInspector` is a factory method that creates an `ECClassHierarchyInspector` instance that uses a LRU cache to store the check results. It is no longer needed - use `ECSchemaProvider.classDerivesFrom` instead.
60
61
 
61
62
  ## ECSql
62
63
 
@@ -265,6 +266,19 @@ The ECSql utilities group contains a number of functions to help create complex
265
266
  // `
266
267
  ```
267
268
 
269
+ - `createHiddenClassesFilter` - creates a filter that excludes instances of classes, derived from the given base class and hidden through `HiddenClass` or `HiddenSchema` custom attributes. The base class is the visibility boundary: it's never excluded, `HiddenClass` attributes on it and on its base classes are ignored, and classes outside its hierarchy are not affected. The hidden classes tree is requested from the schema provider once (see `ECSchemaProvider.getHiddenClassesTree`), and the filter can create conditions for multiple class aliases. Each condition is an empty string when nothing needs to be excluded.
270
+
271
+ Example usage:
272
+
273
+ ```ts
274
+ import { ECSql } from "@itwin/presentation-shared";
275
+
276
+ const filter = await ECSql.createHiddenClassesFilter({ schemaProvider, baseClassName: "MySchema.MyClass" });
277
+ const condition = filter.createWhereClause("x");
278
+ // condition = "[x].[ECClassId] IS NOT ([MySchema].[MyHiddenClass])"
279
+ const ecsql = `SELECT x.ECInstanceId FROM MySchema.MyClass x ${condition ? `WHERE ${condition}` : ""}`;
280
+ ```
281
+
268
282
  ## Values
269
283
 
270
284
  The APIs in Values group contain various value types and utilities to work with them.
@@ -312,7 +326,7 @@ The APIs in Values group contain various value types and utilities to work with
312
326
  }
313
327
  ```
314
328
 
315
- The package delivers 3 implementations of `IInstanceLabelSelectClauseFactory` that can be created using the following factory methods: `createDefaultInstanceLabelSelectClauseFactory`, `createClassBasedInstanceLabelSelectClauseFactory`, `createBisInstanceLabelSelectClauseFactory`.
329
+ The package delivers 4 implementations of `IInstanceLabelSelectClauseFactory` that can be created using the following factory methods: `createDefaultInstanceLabelSelectClauseFactory`, `createClassBasedInstanceLabelSelectClauseFactory`, `createBisInstanceLabelSelectClauseFactory`, `createIModelInstanceLabelSelectClauseFactory`.
316
330
 
317
331
  ### `createDefaultInstanceLabelSelectClauseFactory`
318
332
 
@@ -340,11 +354,11 @@ This label selectors factory doesn't create labels on its own, but allows assign
340
354
  Example usage:
341
355
 
342
356
  ```ts
343
- import { createClassBasedInstanceLabelSelectClauseFactory, ECClassHierarchyInspector } from "@itwin/presentation-shared";
357
+ import { createClassBasedInstanceLabelSelectClauseFactory, ECSchemaProvider } from "@itwin/presentation-shared";
344
358
 
345
- const classHierarchyInspector: ECClassHierarchyInspector = getClassHierarchyInspector();
359
+ const imodelAccess: ECSchemaProvider = getSchemaProvider();
346
360
  const labelsFactory = createClassBasedInstanceLabelSelectClauseFactory({
347
- classHierarchyInspector,
361
+ imodelAccess,
348
362
  clauses: [
349
363
  {
350
364
  className: "MySchema.MyClass",
@@ -371,10 +385,28 @@ This label selectors factory creates labels according to [BIS instance label rul
371
385
  Example usage:
372
386
 
373
387
  ```ts
374
- import { createBisInstanceLabelSelectClauseFactory, ECClassHierarchyInspector } from "@itwin/presentation-shared";
388
+ import { createBisInstanceLabelSelectClauseFactory, ECSchemaProvider } from "@itwin/presentation-shared";
389
+
390
+ const imodelAccess: ECSchemaProvider = getSchemaProvider();
391
+ const labelsFactory = createBisInstanceLabelSelectClauseFactory({ imodelAccess });
392
+ const ecsql = `SELECT ${await labelsFactory.createSelectClause({ classAlias: "element" })} AS [Label] FROM [BisCore].[Element] AS [element]`;
393
+ // ...
394
+ ```
395
+
396
+ ### `createIModelInstanceLabelSelectClauseFactory`
397
+
398
+ This label selectors factory reads `InstanceLabelOverride` rules from `PresentationRules` rulesets embedded in
399
+ the iModel and compiles them into ECSQL label selectors. Rules are loaded lazily on first use and cached per
400
+ factory instance. When the `PresentationRules` schema is absent from the iModel, the factory transparently
401
+ falls back to a configurable default (by default `createBisInstanceLabelSelectClauseFactory`).
402
+
403
+ Example usage:
404
+
405
+ ```ts
406
+ import { createIModelInstanceLabelSelectClauseFactory } from "@itwin/presentation-shared";
375
407
 
376
- const classHierarchyInspector: ECClassHierarchyInspector = getClassHierarchyInspector();
377
- const labelsFactory = createBisInstanceLabelSelectClauseFactory({ classHierarchyInspector });
408
+ // `imodelAccess` must satisfy `ECSqlQueryExecutor & ECSchemaProvider`
409
+ const labelsFactory = createIModelInstanceLabelSelectClauseFactory({ imodelAccess });
378
410
  const ecsql = `SELECT ${await labelsFactory.createSelectClause({ classAlias: "element" })} AS [Label] FROM [BisCore].[Element] AS [element]`;
379
411
  // ...
380
412
  ```
@@ -388,8 +420,8 @@ Example usage:
388
420
  ```ts
389
421
  import { Logger as ITwinJsLogger } from "@itwin/core-bentley";
390
422
  import { createLogger } from "@itwin/presentation-core-interop";
391
- import { ILogger } from "@itwin/presentation-shared";
392
423
  import { setLogger as setHierarchiesLogger } from "@itwin/presentation-hierarchies";
424
+ import { ILogger } from "@itwin/presentation-shared";
393
425
 
394
426
  // create an `ILogger` from iTwin.js `Logger`
395
427
  const logger: ILogger = createLogger(ITwinJsLogger);
@@ -0,0 +1,24 @@
1
+ export * as ECSql from "./shared/ecsql-snippets/index.js";
2
+ export { ConcatenatedValue, ConcatenatedValuePart } from "./shared/ConcatenatedValue.js";
3
+ export { eachValueFrom } from "./shared/EachValueFrom.js";
4
+ export { ECSqlBinding } from "./shared/ECSqlCore.js";
5
+ export type { ECSqlQueryDef, ECSqlQueryExecutor, ECSqlQueryReaderOptions, ECSqlQueryRow } from "./shared/ECSqlCore.js";
6
+ export type { IPrimitiveValueFormatter } from "./shared/Formatting.js";
7
+ export { createDefaultValueFormatter, formatConcatenatedValue } from "./shared/Formatting.js";
8
+ export type { IInstanceLabelSelectClauseFactory } from "./shared/InstanceLabelSelectClauseFactory.js";
9
+ export { parseInstanceLabel } from "./shared/InstanceLabelSelectClauseFactory.js";
10
+ export { createDefaultInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js";
11
+ export { createClassBasedInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js";
12
+ export { createBisInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js";
13
+ export { createIModelInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js";
14
+ export type { ILogger, LogFunction, LogLevel } from "./shared/Logging.js";
15
+ export { NOOP_LOGGER } from "./shared/Logging.js";
16
+ export type { ArrayElement, DeepReadonly, OmitOverUnion, Props } from "./shared/MappedTypes.js";
17
+ export type { ArrayValueDescriptor, EC, ECClassHierarchyInspector, ECSchemaProvider, HiddenClassesTreeNode, NavigationValueDescriptor, PrimitiveValueDescriptor, PrimitiveValueType, RelationshipPath, StructValueDescriptor, ValueDescriptor, } from "./shared/Metadata.js";
18
+ export { createCachingECClassHierarchyInspector, getClass, } from "./shared/Metadata.js";
19
+ export { createHiddenClassesTree } from "./shared/HiddenClasses.js";
20
+ export { createMainThreadReleaseOnTimePassedHandler, julianToDateTime, normalizeFullClassName, parseFullClassName, releaseMainThread, trimWhitespace, } from "./shared/Utils.js";
21
+ export { InstanceKey, PrimitiveValue, TypedPrimitiveValue } from "./shared/Values.js";
22
+ export type { ArrayValue, StructValue, NavigationValue, Value, Point2dValue, Point3dValue } from "./shared/Values.js";
23
+ export type { Event, RaisableEvent, EventArgs, EventListener } from "./shared/Event.js";
24
+ //# sourceMappingURL=presentation-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation-shared.d.ts","sourceRoot":"","sources":["../src/presentation-shared.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACvH,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,YAAY,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,6CAA6C,EAAE,MAAM,kFAAkF,CAAC;AACjJ,OAAO,EAAE,gDAAgD,EAAE,MAAM,qFAAqF,CAAC;AACvJ,OAAO,EAAE,yCAAyC,EAAE,MAAM,8EAA8E,CAAC;AACzI,OAAO,EAAE,4CAA4C,EAAE,MAAM,iFAAiF,CAAC;AAC/I,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChG,YAAY,EACV,oBAAoB,EACpB,EAAE,EAEF,yBAAyB,EACzB,gBAAgB,EAChB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,sCAAsC,EACtC,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,0CAA0C,EAC1C,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACtF,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtH,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,22 @@
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 * as ECSql from "./shared/ecsql-snippets/index.js";
6
+ export { ConcatenatedValue, ConcatenatedValuePart } from "./shared/ConcatenatedValue.js";
7
+ export { eachValueFrom } from "./shared/EachValueFrom.js";
8
+ export { ECSqlBinding } from "./shared/ECSqlCore.js";
9
+ export { createDefaultValueFormatter, formatConcatenatedValue } from "./shared/Formatting.js";
10
+ export { parseInstanceLabel } from "./shared/InstanceLabelSelectClauseFactory.js";
11
+ export { createDefaultInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js";
12
+ export { createClassBasedInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js";
13
+ export { createBisInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js";
14
+ export { createIModelInstanceLabelSelectClauseFactory } from "./shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js";
15
+ export { NOOP_LOGGER } from "./shared/Logging.js";
16
+ export {
17
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
18
+ createCachingECClassHierarchyInspector, getClass, } from "./shared/Metadata.js";
19
+ export { createHiddenClassesTree } from "./shared/HiddenClasses.js";
20
+ export { createMainThreadReleaseOnTimePassedHandler, julianToDateTime, normalizeFullClassName, parseFullClassName, releaseMainThread, trimWhitespace, } from "./shared/Utils.js";
21
+ export { InstanceKey, PrimitiveValue, TypedPrimitiveValue } from "./shared/Values.js";
22
+ //# sourceMappingURL=presentation-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation-shared.js","sourceRoot":"","sources":["../src/presentation-shared.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,KAAK,KAAK,MAAM,kCAAkC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAE9F,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAClF,OAAO,EAAE,6CAA6C,EAAE,MAAM,kFAAkF,CAAC;AACjJ,OAAO,EAAE,gDAAgD,EAAE,MAAM,qFAAqF,CAAC;AACvJ,OAAO,EAAE,yCAAyC,EAAE,MAAM,8EAA8E,CAAC;AACzI,OAAO,EAAE,4CAA4C,EAAE,MAAM,iFAAiF,CAAC;AAE/I,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBlD,OAAO;AACL,4DAA4D;AAC5D,sCAAsC,EACtC,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EACL,0CAA0C,EAC1C,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcatenatedValue.d.ts","sourceRoot":"","sources":["../../src/shared/ConcatenatedValue.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;;;;;GASG;AACH,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,MAAM,CAAC;AAErF,cAAc;AAEd,yBAAiB,qBAAqB,CAAC;IACrC,cAAc;IACd,SAAgB,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,IAAI,MAAM,CAEpE;IAED,cAAc;IACd,SAAgB,WAAW,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,IAAI,mBAAmB,CAEpF;IAED,cAAc;IACd,SAAgB,mBAAmB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,IAAI,iBAAiB,CAE1F;CACF;AAED;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;AAExD,cAAc;AAEd,yBAAiB,iBAAiB,CAAC;IACjC;;;;;OAKG;IACH,SAAsB,SAAS,CAAC,KAAK,EAAE;QACrC,yBAAyB;QACzB,KAAK,EAAE,iBAAiB,CAAC;QACzB,qDAAqD;QACrD,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5F,6EAA6E;QAC7E,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYlB;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConcatenatedValue.js","sourceRoot":"","sources":["../../src/shared/ConcatenatedValue.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAgBhG,cAAc;AACd,2DAA2D;AAC3D,MAAM,KAAW,qBAAqB,CAerC;AAfD,WAAiB,qBAAqB;IACpC,cAAc;IACd,SAAgB,QAAQ,CAAC,IAA2B;QAClD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC;IAClC,CAAC;IAFe,sBAAA,QAAQ,WAEvB,CAAA;IAED,cAAc;IACd,SAAgB,WAAW,CAAC,IAA2B;QACrD,OAAO,CAAC,CAAE,IAA4B,CAAC,IAAI,CAAC;IAC9C,CAAC;IAFe,sBAAA,WAAW,cAE1B,CAAA;IAED,cAAc;IACd,SAAgB,mBAAmB,CAAC,IAA2B;QAC7D,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAFe,sBAAA,mBAAmB,sBAElC,CAAA;AACH,CAAC,EAfgB,qBAAqB,KAArB,qBAAqB,QAerC;AAUD,cAAc;AACd,2DAA2D;AAC3D,MAAM,KAAW,iBAAiB,CA2BjC;AA3BD,WAAiB,iBAAiB;IAChC;;;;;OAKG;IACI,KAAK,UAAU,SAAS,CAAC,KAO/B;QACC,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;QAClD,OAAO,CACL,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,IAAI,qBAAqB,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,OAAO,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CACH,CACF,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC1B,CAAC;IAnBqB,kBAAA,SAAS,YAmB9B,CAAA;AACH,CAAC,EA3BgB,iBAAiB,KAAjB,iBAAiB,QA2BjC"}
@@ -1,4 +1,5 @@
1
1
  import type { Id64String } from "@itwin/core-bentley";
2
+ import type { TypedPrimitiveValue } from "./Values.js";
2
3
  /**
3
4
  * Defines an ECSql binding consisting of a value and its type. Necessary to differentiate between numeric
4
5
  * types and `Id64String` vs `string`.
@@ -16,7 +17,7 @@ export type ECSqlBinding = {
16
17
  value?: Id64String;
17
18
  } | {
18
19
  type: "idset";
19
- value?: Id64String[];
20
+ value?: ReadonlyArray<Id64String> | ReadonlySet<Id64String>;
20
21
  } | {
21
22
  type: "string";
22
23
  value?: string;
@@ -34,6 +35,14 @@ export type ECSqlBinding = {
34
35
  z: number;
35
36
  };
36
37
  };
38
+ /**
39
+ * Helpers for creating ECSQL bindings.
40
+ * @public
41
+ */
42
+ export declare namespace ECSqlBinding {
43
+ /** Creates an ECSQL binding for the supplied typed primitive value. */
44
+ function create({ value, type }: TypedPrimitiveValue): ECSqlBinding;
45
+ }
37
46
  /**
38
47
  * Defines an ECSQL query and its bindings.
39
48
  * @public
@@ -48,9 +57,14 @@ export interface ECSqlQueryDef {
48
57
  ecsql: string;
49
58
  /**
50
59
  * Values to bind to the query.
60
+ *
61
+ * Provide bindings either as an array or as a record:
62
+ * - `ECSqlBinding[]` binds values by parameter position.
63
+ * - `Record<string, ECSqlBinding>` binds values by parameter name, where each key is the ECSQL parameter name.
64
+ *
51
65
  * @see https://www.itwinjs.org/learning/ecsql/#ecsql-parameters
52
66
  */
53
- bindings?: ECSqlBinding[];
67
+ bindings?: ECSqlBinding[] | Record<string, ECSqlBinding>;
54
68
  }
55
69
  /**
56
70
  * Defines requested ECSQL result row format.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSqlCore.d.ts","sourceRoot":"","sources":["../../src/shared/ECSqlCore.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,UAAU,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,GAC9E;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GACrD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAC;AAErE;;;GAGG;AAEH,yBAAiB,YAAY,CAAC;IAC5B,uEAAuE;IACvE,SAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,mBAAmB,GAAG,YAAY,CAqBzE;CACF;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,KAAK,mBAAmB,GAAG,oBAAoB,GAAG,SAAS,CAAC;AAE5D;;;;GAIG;AACH,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,CAAC;IAC5B,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC;CAC9B;AAED;;;;GAIG;AACH,KAAK,gBAAgB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,uBAAuB,GAAG,gBAAgB,CAAC;CAC7F"}
@@ -0,0 +1,37 @@
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
+ * Helpers for creating ECSQL bindings.
7
+ * @public
8
+ */
9
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
10
+ export var ECSqlBinding;
11
+ (function (ECSqlBinding) {
12
+ /** Creates an ECSQL binding for the supplied typed primitive value. */
13
+ function create({ value, type }) {
14
+ switch (type) {
15
+ case "Boolean":
16
+ return { type: "boolean", value };
17
+ case "Integer":
18
+ return { type: "int", value };
19
+ case "Long":
20
+ return { type: "long", value };
21
+ case "Double":
22
+ return { type: "double", value };
23
+ case "Id":
24
+ return { type: "id", value };
25
+ case "String":
26
+ return { type: "string", value };
27
+ case "DateTime":
28
+ return { type: "string", value: value instanceof Date ? value.toISOString() : value.toString() };
29
+ case "Point2d":
30
+ return { type: "point2d", value };
31
+ case "Point3d":
32
+ return { type: "point3d", value };
33
+ }
34
+ }
35
+ ECSqlBinding.create = create;
36
+ })(ECSqlBinding || (ECSqlBinding = {}));
37
+ //# sourceMappingURL=ECSqlCore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ECSqlCore.js","sourceRoot":"","sources":["../../src/shared/ECSqlCore.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAoBhG;;;GAGG;AACH,2DAA2D;AAC3D,MAAM,KAAW,YAAY,CAwB5B;AAxBD,WAAiB,YAAY;IAC3B,uEAAuE;IACvE,SAAgB,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAuB;QACzD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpC,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;YAChC,KAAK,MAAM;gBACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YACjC,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACnC,KAAK,IAAI;gBACP,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC/B,KAAK,QAAQ;gBACX,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YACnC,KAAK,UAAU;gBACb,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YACnG,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpC,KAAK,SAAS;gBACZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;IArBe,aAAA,MAAM,SAqBrB,CAAA;AACH,CAAC,EAxBgB,YAAY,KAAZ,YAAY,QAwB5B"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The subscription operations required by `eachValueFrom`.
3
+ *
4
+ * @public
5
+ */
6
+ export interface Subscribable<T> {
7
+ /**
8
+ * Subscribes to stream notifications.
9
+ */
10
+ subscribe(observer: {
11
+ next: (value: T) => void;
12
+ error: (reason: unknown) => void;
13
+ complete: () => void;
14
+ }): {
15
+ unsubscribe: () => void;
16
+ };
17
+ }
18
+ /**
19
+ * Converts a subscribable stream into an async iterator.
20
+ *
21
+ * This is pretty much a combination of:
22
+ * - https://github.com/benlesh/rxjs-for-await/blob/94f9cf9cb015ac3700dfd1850eb81d36962eb70f/src/index.ts#L33,
23
+ * - https://github.com/ReactiveX/rxjs/blob/2587ee852eb43eeb0883a7787bac2944d823392b/packages/observable/src/observable.ts#L922.
24
+ *
25
+ * Our implementation uses a linked list rather than an array to store values, which is more efficient.
26
+ *
27
+ * @public
28
+ */
29
+ export declare function eachValueFrom<T>(source: Subscribable<T>): AsyncIterableIterator<T>;
30
+ //# sourceMappingURL=EachValueFrom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EachValueFrom.d.ts","sourceRoot":"","sources":["../../src/shared/EachValueFrom.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE;QAAE,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;QAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG;QACzG,WAAW,EAAE,MAAM,IAAI,CAAC;KACzB,CAAC;CACH;AAED;;;;;;;;;;GAUG;AACH,wBAAuB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CA0DzF"}
@@ -0,0 +1,115 @@
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 deferreds
6
+ /**
7
+ * Converts a subscribable stream into an async iterator.
8
+ *
9
+ * This is pretty much a combination of:
10
+ * - https://github.com/benlesh/rxjs-for-await/blob/94f9cf9cb015ac3700dfd1850eb81d36962eb70f/src/index.ts#L33,
11
+ * - https://github.com/ReactiveX/rxjs/blob/2587ee852eb43eeb0883a7787bac2944d823392b/packages/observable/src/observable.ts#L922.
12
+ *
13
+ * Our implementation uses a linked list rather than an array to store values, which is more efficient.
14
+ *
15
+ * @public
16
+ */
17
+ export async function* eachValueFrom(source) {
18
+ const deferreds = new Queue();
19
+ const values = new Queue();
20
+ let error;
21
+ let completed = false;
22
+ const subs = source.subscribe({
23
+ next: (value) => {
24
+ const deferred = deferreds.pop();
25
+ if (deferred) {
26
+ deferred.resolve({ value, done: false });
27
+ }
28
+ else {
29
+ values.push(value);
30
+ }
31
+ },
32
+ error: (err) => {
33
+ error = err;
34
+ for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {
35
+ deferred.reject(err);
36
+ }
37
+ },
38
+ complete: () => {
39
+ completed = true;
40
+ for (let deferred = deferreds.pop(); deferred !== undefined; deferred = deferreds.pop()) {
41
+ deferred.resolve({ value: undefined, done: true });
42
+ }
43
+ },
44
+ });
45
+ try {
46
+ while (true) {
47
+ if (!values.isEmpty) {
48
+ // The queue is non-empty, so this is an actual buffered value — possibly a legitimately
49
+ // emitted `undefined`, which is why emptiness is checked explicitly rather than by
50
+ // comparing the popped value to `undefined`.
51
+ yield values.pop();
52
+ continue;
53
+ }
54
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
55
+ if (completed) {
56
+ return;
57
+ }
58
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
59
+ if (error) {
60
+ // eslint-disable-next-line @typescript-eslint/only-throw-error
61
+ throw error;
62
+ }
63
+ const result = await new Promise((resolve, reject) => {
64
+ deferreds.push({ resolve, reject });
65
+ });
66
+ if (result.done) {
67
+ return;
68
+ }
69
+ yield result.value;
70
+ }
71
+ }
72
+ catch (err) {
73
+ throw err;
74
+ }
75
+ finally {
76
+ subs.unsubscribe();
77
+ }
78
+ }
79
+ class QueueEntry {
80
+ value;
81
+ next;
82
+ constructor(value, next) {
83
+ this.value = value;
84
+ this.next = next;
85
+ }
86
+ }
87
+ class Queue {
88
+ _front;
89
+ _back;
90
+ get isEmpty() {
91
+ return this._front === undefined;
92
+ }
93
+ push(item) {
94
+ const entry = new QueueEntry(item);
95
+ if (this._back) {
96
+ this._back.next = entry;
97
+ }
98
+ this._back = entry;
99
+ if (!this._front) {
100
+ this._front = entry;
101
+ }
102
+ }
103
+ pop() {
104
+ if (!this._front) {
105
+ return undefined;
106
+ }
107
+ const value = this._front.value;
108
+ this._front = this._front.next;
109
+ if (!this._front) {
110
+ this._back = undefined;
111
+ }
112
+ return value;
113
+ }
114
+ }
115
+ //# sourceMappingURL=EachValueFrom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EachValueFrom.js","sourceRoot":"","sources":["../../src/shared/EachValueFrom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Event.d.ts","sourceRoot":"","sources":["../../src/shared/Event.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,KAAK,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAC5E,WAAW,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,MAAM,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,SAAS,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,MAAM,IAAI,CAAE,SAAQ,KAAK,CAAC,SAAS,CAAC;IAC9G,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,SAAS,EAAE,IAAI,MAAM,SAAS,KAAK,CAAC,MAAM,SAAS,CAAC,GAAG,SAAS,GAAG,KAAK,CAAC;AAEzG;;;GAGG;AACH,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Event.js","sourceRoot":"","sources":["../../../src/shared/Event.ts"],"names":[],"mappings":"AAAA;;;gGAGgG"}
1
+ {"version":3,"file":"Event.js","sourceRoot":"","sources":["../../src/shared/Event.ts"],"names":[],"mappings":"AAAA;;;gGAGgG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Formatting.d.ts","sourceRoot":"","sources":["../../src/shared/Formatting.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAyB,MAAM,wBAAwB,CAAC;AAGlF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,KAAK,EAAE,mBAAmB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvF;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAAC;IAClC,cAAc,EAAE,wBAAwB,CAAC;CAC1C,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,2BAA2B,IAAI,wBAAwB,CAkBtE"}
@@ -21,10 +21,7 @@ export async function formatConcatenatedValue(props) {
21
21
  partFormatter: async (part) => {
22
22
  // strings are converted to typed strings
23
23
  if (ConcatenatedValuePart.isString(part)) {
24
- part = {
25
- value: part,
26
- type: "String",
27
- };
24
+ part = { value: part, type: "String" };
28
25
  }
29
26
  // finally, use provided value formatter to create a string from `TypedPrimitiveValue`
30
27
  return valueFormatter(part);
@@ -64,7 +61,10 @@ export function createDefaultValueFormatter() {
64
61
  return result;
65
62
  }
66
63
  }
67
- assert(typeof value.value === "undefined" || typeof value.value === "boolean" || typeof value.value === "number" || typeof value.value === "string");
64
+ assert(typeof value.value === "undefined" ||
65
+ typeof value.value === "boolean" ||
66
+ typeof value.value === "number" ||
67
+ typeof value.value === "string");
68
68
  return value.value.toString();
69
69
  };
70
70
  }
@@ -85,7 +85,11 @@ function applyNumericFormatting(value) {
85
85
  }
86
86
  function applyDatesFormatting(value) {
87
87
  function getDate(julianOrDate) {
88
- return typeof julianOrDate === "number" ? julianToDateTime(julianOrDate) : typeof julianOrDate === "string" ? new Date(julianOrDate) : julianOrDate;
88
+ return typeof julianOrDate === "number"
89
+ ? julianToDateTime(julianOrDate)
90
+ : typeof julianOrDate === "string"
91
+ ? new Date(julianOrDate)
92
+ : julianOrDate;
89
93
  }
90
94
  if (value.type !== "DateTime") {
91
95
  return undefined;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Formatting.js","sourceRoot":"","sources":["../../src/shared/Formatting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { EC, ECSchemaProvider, HiddenClassesTreeNode } from "./Metadata.js";
2
+ /**
3
+ * Creates a tree of classes, derived from the given class, whose visibility is changed through `HiddenClass`
4
+ * or `HiddenSchema` custom attributes. See `HiddenClassesTreeNode` for details on the tree structure.
5
+ * The selected class is the visibility boundary: `HiddenClass` attributes on it and on its base classes are ignored, so
6
+ * it and its descendants are visible unless a descendant is hidden through its own `HiddenClass` attribute or
7
+ * the `HiddenSchema` attribute of its schema.
8
+ *
9
+ * The function traverses the whole derived classes' hierarchy of the given class, which may be expensive. It's
10
+ * meant to be used by `ECSchemaProvider.getHiddenClassesTree` implementations, which are expected to cache the result.
11
+ *
12
+ * @throws Error if the selected class or any of its derived classes' schemas can't be found.
13
+ * @public
14
+ */
15
+ export declare function createHiddenClassesTree(props: {
16
+ /** Schema provider used to look up the selected class and its derived classes. */
17
+ schemaProvider: Pick<ECSchemaProvider, "getSchema">;
18
+ /** Full name of the class whose derived classes should be inspected. */
19
+ selectClassName: EC.FullClassNameDotNotation;
20
+ }): Promise<HiddenClassesTreeNode[]>;
21
+ //# sourceMappingURL=HiddenClasses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiddenClasses.d.ts","sourceRoot":"","sources":["../../src/shared/HiddenClasses.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEjF;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,kFAAkF;IAClF,cAAc,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;IACpD,wEAAwE;IACxE,eAAe,EAAE,EAAE,CAAC,wBAAwB,CAAC;CAC9C,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAGnC"}
@@ -0,0 +1,52 @@
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 { firstValueFrom, from, groupBy, map, mergeMap, ReplaySubject, toArray } from "rxjs";
6
+ import { getClass } from "./Metadata.js";
7
+ import { parseFullClassName } from "./Utils.js";
8
+ /**
9
+ * Creates a tree of classes, derived from the given class, whose visibility is changed through `HiddenClass`
10
+ * or `HiddenSchema` custom attributes. See `HiddenClassesTreeNode` for details on the tree structure.
11
+ * The selected class is the visibility boundary: `HiddenClass` attributes on it and on its base classes are ignored, so
12
+ * it and its descendants are visible unless a descendant is hidden through its own `HiddenClass` attribute or
13
+ * the `HiddenSchema` attribute of its schema.
14
+ *
15
+ * The function traverses the whole derived classes' hierarchy of the given class, which may be expensive. It's
16
+ * meant to be used by `ECSchemaProvider.getHiddenClassesTree` implementations, which are expected to cache the result.
17
+ *
18
+ * @throws Error if the selected class or any of its derived classes' schemas can't be found.
19
+ * @public
20
+ */
21
+ export async function createHiddenClassesTree(props) {
22
+ const selectClass = await getClass(props.schemaProvider, props.selectClassName);
23
+ return firstValueFrom(collectHiddenClassesTreeNodes(props.schemaProvider, selectClass, "show").pipe(toArray()));
24
+ }
25
+ function collectHiddenClassesTreeNodes(schemaProvider, parentClass, parentState) {
26
+ return from(parentClass.getDerivedClassNames({ onlyDirect: true })).pipe(map(parseFullClassName), groupBy(({ schemaName }) => schemaName, {
27
+ element: ({ className }) => className,
28
+ connector: () => new ReplaySubject(),
29
+ }), mergeMap((classNames) => from(schemaProvider.getSchema(classNames.key)).pipe(mergeMap((schema) => {
30
+ if (!schema) {
31
+ throw new Error(`Schema "${classNames.key}" not found.`);
32
+ }
33
+ return classNames.pipe(mergeMap((className) => {
34
+ const ecClass = schema.getClass(className);
35
+ if (!ecClass) {
36
+ throw new Error(`Class "${className}" not found in schema "${classNames.key}".`);
37
+ }
38
+ const schemaState = schema.isHidden ? "hide" : undefined;
39
+ const classState = ecClass.isHidden === true ? "hide" : ecClass.isHidden === false ? "show" : undefined;
40
+ const effectiveState = classState ?? schemaState ?? parentState;
41
+ if (effectiveState === parentState) {
42
+ return collectHiddenClassesTreeNodes(schemaProvider, ecClass, parentState);
43
+ }
44
+ return collectHiddenClassesTreeNodes(schemaProvider, ecClass, effectiveState).pipe(toArray(), map((children) => ({
45
+ fullName: ecClass.fullName,
46
+ state: effectiveState,
47
+ children,
48
+ })));
49
+ }));
50
+ }))));
51
+ }
52
+ //# sourceMappingURL=HiddenClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HiddenClasses.js","sourceRoot":"","sources":["../../src/shared/HiddenClasses.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKhD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAK7C;IACC,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;IAChF,OAAO,cAAc,CAAC,6BAA6B,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAClH,CAAC;AAOD,SAAS,6BAA6B,CACpC,cAAmD,EACnD,WAAqB,EACrB,WAAyB;IAEzB,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACtE,GAAG,CAAC,kBAAkB,CAAC,EACvB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE;QACtC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS;QACrC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,aAAa,EAAU;KAC7C,CAAC,EACF,QAAQ,CAAC,CAAC,UAAU,EAAE,EAAE,CACtB,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACjD,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE;QAClB,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC,GAAG,cAAc,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,UAAU,CAAC,IAAI,CACpB,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,UAAU,SAAS,0BAA0B,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC;YACnF,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAE,MAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;YACpE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YACxG,MAAM,cAAc,GAAG,UAAU,IAAI,WAAW,IAAI,WAAW,CAAC;YAChE,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;gBACnC,OAAO,6BAA6B,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;YAC7E,CAAC;YACD,OAAO,6BAA6B,CAAC,cAAc,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,IAAI,CAChF,OAAO,EAAE,EACT,GAAG,CACD,CAAC,QAAQ,EAAE,EAAE,CACX,CAAC;gBACC,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,KAAK,EAAE,cAAc;gBACrB,QAAQ;aACT,CAAqD,CACzD,CACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CACH,CACF,CACF,CAAC;AACJ,CAAC"}