@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.
- package/CHANGELOG.md +736 -1
- package/README.md +59 -27
- package/lib/presentation-shared.d.ts +24 -0
- package/lib/presentation-shared.d.ts.map +1 -0
- package/lib/presentation-shared.js +22 -0
- package/lib/presentation-shared.js.map +1 -0
- package/lib/shared/ConcatenatedValue.d.ts.map +1 -0
- package/lib/shared/ConcatenatedValue.js.map +1 -0
- package/lib/{cjs/shared → shared}/ECSqlCore.d.ts +16 -2
- package/lib/shared/ECSqlCore.d.ts.map +1 -0
- package/lib/shared/ECSqlCore.js +37 -0
- package/lib/shared/ECSqlCore.js.map +1 -0
- package/lib/shared/EachValueFrom.d.ts +30 -0
- package/lib/shared/EachValueFrom.d.ts.map +1 -0
- package/lib/shared/EachValueFrom.js +115 -0
- package/lib/shared/EachValueFrom.js.map +1 -0
- package/lib/shared/Event.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Event.js.map +1 -1
- package/lib/shared/Formatting.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Formatting.js +10 -6
- package/lib/shared/Formatting.js.map +1 -0
- package/lib/shared/HiddenClasses.d.ts +21 -0
- package/lib/shared/HiddenClasses.d.ts.map +1 -0
- package/lib/shared/HiddenClasses.js +52 -0
- package/lib/shared/HiddenClasses.js.map +1 -0
- package/lib/{esm/shared → shared}/InstanceLabelSelectClauseFactory.d.ts +3 -63
- package/lib/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/InstanceLabelSelectClauseFactory.js +27 -0
- package/lib/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/Logging.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Logging.js +2 -1
- package/lib/shared/Logging.js.map +1 -0
- package/lib/shared/MappedTypes.d.ts +55 -0
- package/lib/shared/MappedTypes.d.ts.map +1 -0
- package/lib/shared/MappedTypes.js.map +1 -0
- package/lib/shared/Metadata.d.ts +572 -0
- package/lib/shared/Metadata.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Metadata.js +7 -3
- package/lib/shared/Metadata.js.map +1 -0
- package/lib/{cjs/shared → shared}/Utils.d.ts +6 -7
- package/lib/shared/Utils.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Utils.js +21 -27
- package/lib/shared/Utils.js.map +1 -0
- package/lib/shared/Values.d.ts +144 -0
- package/lib/shared/Values.d.ts.map +1 -0
- package/lib/shared/Values.js +121 -0
- package/lib/shared/Values.js.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts +40 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js +66 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +174 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js +177 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
- package/lib/{cjs/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +10 -2
- package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.js +22 -8
- package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
- package/lib/shared/ecsql-snippets/index.d.ts +4 -0
- package/lib/shared/ecsql-snippets/index.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/index.js +8 -0
- package/lib/shared/ecsql-snippets/index.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +48 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +60 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +37 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
- package/lib/{esm/shared/ECSqlCore.js → shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js} +4 -1
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +332 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/Utils.d.ts +7 -0
- package/lib/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/Utils.js +21 -0
- package/lib/shared/instance-label-factory-impls/Utils.js.map +1 -0
- package/package.json +22 -31
- package/lib/cjs/package.json +0 -1
- package/lib/cjs/presentation-shared.d.ts +0 -17
- package/lib/cjs/presentation-shared.d.ts.map +0 -1
- package/lib/cjs/presentation-shared.js +0 -71
- package/lib/cjs/presentation-shared.js.map +0 -1
- package/lib/cjs/shared/ConcatenatedValue.d.ts.map +0 -1
- package/lib/cjs/shared/ConcatenatedValue.js +0 -49
- package/lib/cjs/shared/ConcatenatedValue.js.map +0 -1
- package/lib/cjs/shared/ECSqlCore.d.ts.map +0 -1
- package/lib/cjs/shared/ECSqlCore.js +0 -7
- package/lib/cjs/shared/ECSqlCore.js.map +0 -1
- package/lib/cjs/shared/Event.d.ts.map +0 -1
- package/lib/cjs/shared/Event.js +0 -7
- package/lib/cjs/shared/Event.js.map +0 -1
- package/lib/cjs/shared/Formatting.d.ts.map +0 -1
- package/lib/cjs/shared/Formatting.js +0 -114
- package/lib/cjs/shared/Formatting.js.map +0 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts +0 -133
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +0 -166
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
- package/lib/cjs/shared/Logging.d.ts.map +0 -1
- package/lib/cjs/shared/Logging.js +0 -20
- package/lib/cjs/shared/Logging.js.map +0 -1
- package/lib/cjs/shared/MappedTypes.d.ts +0 -17
- package/lib/cjs/shared/MappedTypes.d.ts.map +0 -1
- package/lib/cjs/shared/MappedTypes.js +0 -7
- package/lib/cjs/shared/MappedTypes.js.map +0 -1
- package/lib/cjs/shared/Metadata.d.ts +0 -291
- package/lib/cjs/shared/Metadata.d.ts.map +0 -1
- package/lib/cjs/shared/Metadata.js +0 -53
- package/lib/cjs/shared/Metadata.js.map +0 -1
- package/lib/cjs/shared/Utils.d.ts.map +0 -1
- package/lib/cjs/shared/Utils.js +0 -114
- package/lib/cjs/shared/Utils.js.map +0 -1
- package/lib/cjs/shared/Values.d.ts +0 -107
- package/lib/cjs/shared/Values.d.ts.map +0 -1
- package/lib/cjs/shared/Values.js +0 -155
- package/lib/cjs/shared/Values.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -140
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +0 -260
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/index.d.ts +0 -3
- package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/index.js +0 -18
- package/lib/cjs/shared/ecsql-snippets/index.js.map +0 -1
- package/lib/esm/presentation-shared.d.ts +0 -17
- package/lib/esm/presentation-shared.d.ts.map +0 -1
- package/lib/esm/presentation-shared.js +0 -14
- package/lib/esm/presentation-shared.js.map +0 -1
- package/lib/esm/shared/ConcatenatedValue.d.ts +0 -46
- package/lib/esm/shared/ConcatenatedValue.d.ts.map +0 -1
- package/lib/esm/shared/ConcatenatedValue.js.map +0 -1
- package/lib/esm/shared/ECSqlCore.d.ts +0 -94
- package/lib/esm/shared/ECSqlCore.d.ts.map +0 -1
- package/lib/esm/shared/ECSqlCore.js.map +0 -1
- package/lib/esm/shared/Event.d.ts +0 -27
- package/lib/esm/shared/Event.d.ts.map +0 -1
- package/lib/esm/shared/Formatting.d.ts +0 -44
- package/lib/esm/shared/Formatting.d.ts.map +0 -1
- package/lib/esm/shared/Formatting.js.map +0 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +0 -160
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
- package/lib/esm/shared/Logging.d.ts +0 -27
- package/lib/esm/shared/Logging.d.ts.map +0 -1
- package/lib/esm/shared/Logging.js.map +0 -1
- package/lib/esm/shared/MappedTypes.d.ts +0 -17
- package/lib/esm/shared/MappedTypes.d.ts.map +0 -1
- package/lib/esm/shared/MappedTypes.js.map +0 -1
- package/lib/esm/shared/Metadata.d.ts +0 -291
- package/lib/esm/shared/Metadata.d.ts.map +0 -1
- package/lib/esm/shared/Metadata.js.map +0 -1
- package/lib/esm/shared/Utils.d.ts +0 -61
- package/lib/esm/shared/Utils.d.ts.map +0 -1
- package/lib/esm/shared/Utils.js.map +0 -1
- package/lib/esm/shared/Values.d.ts +0 -107
- package/lib/esm/shared/Values.d.ts.map +0 -1
- package/lib/esm/shared/Values.js +0 -152
- package/lib/esm/shared/Values.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -137
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +0 -122
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/index.d.ts +0 -3
- package/lib/esm/shared/ecsql-snippets/index.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/index.js +0 -7
- package/lib/esm/shared/ecsql-snippets/index.js.map +0 -1
- /package/lib/{cjs/shared → shared}/ConcatenatedValue.d.ts +0 -0
- /package/lib/{esm/shared → shared}/ConcatenatedValue.js +0 -0
- /package/lib/{cjs/shared → shared}/Event.d.ts +0 -0
- /package/lib/{esm/shared → shared}/Event.js +0 -0
- /package/lib/{cjs/shared → shared}/Formatting.d.ts +0 -0
- /package/lib/{cjs/shared → shared}/Logging.d.ts +0 -0
- /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 {
|
|
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
|
|
31
|
-
const schemaProvider: ECSchemaProvider = createECSchemaProvider(
|
|
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 =
|
|
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
|
-
###
|
|
44
|
+
### Hidden classes
|
|
42
45
|
|
|
43
|
-
|
|
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
|
-
- `
|
|
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
|
-
|
|
50
|
+
- `createHiddenClassesTree` builds the tree for `ECSchemaProvider.getHiddenClassesTree` implementations. It doesn't cache the result.
|
|
48
51
|
|
|
49
|
-
|
|
50
|
-
import { createCachingECClassHierarchyInspector, ECClassHierarchyInspector } from "@itwin/presentation-shared";
|
|
52
|
+
Use `ECSql.createHiddenClassesFilter` to exclude instances of hidden classes in ECSQL queries.
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
|
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,
|
|
357
|
+
import { createClassBasedInstanceLabelSelectClauseFactory, ECSchemaProvider } from "@itwin/presentation-shared";
|
|
344
358
|
|
|
345
|
-
const
|
|
359
|
+
const imodelAccess: ECSchemaProvider = getSchemaProvider();
|
|
346
360
|
const labelsFactory = createClassBasedInstanceLabelSelectClauseFactory({
|
|
347
|
-
|
|
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,
|
|
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
|
-
|
|
377
|
-
const labelsFactory =
|
|
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":["
|
|
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" ||
|
|
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"
|
|
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"}
|