@meshmakers/octo-meshboard 3.4.1430 → 3.4.1440

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.
@@ -1,4 +1,4 @@
1
- import { FieldFilterOperatorsDto, CkTypeSelectorService, RuntimeEntitySelectDataSource as RuntimeEntitySelectDataSource$2, RuntimeEntityDialogDataSource as RuntimeEntityDialogDataSource$2, DeleteStrategiesDto, AssociationModOptionsDto, CkModelService, QueryModeDto, GraphDirectionDto, AttributeSelectorService, GraphQL, GetCkTypeAvailableQueryColumnsDtoGQL, SortOrdersDto, SeriesResolutionSignalDto, HealthService, TENANT_ID_PROVIDER, AssetRepoService, JobManagementService } from '@meshmakers/octo-services';
1
+ import { FieldFilterOperatorsDto, CkTypeSelectorService, RuntimeEntitySelectDataSource, RuntimeEntityDialogDataSource, DeleteStrategiesDto, AssociationModOptionsDto, CkModelService, QueryModeDto, GraphDirectionDto, AttributeSelectorService, GraphQL, GetCkTypeAvailableQueryColumnsDtoGQL, SortOrdersDto, SeriesResolutionSignalDto, HealthService, TENANT_ID_PROVIDER, AssetRepoService, JobManagementService } from '@meshmakers/octo-services';
2
2
  export { RuntimeEntityDialogDataSource, RuntimeEntitySelectDataSource, TENANT_ID_PROVIDER } from '@meshmakers/octo-services';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Injectable, inject, EventEmitter, forwardRef, Output, Input, ViewChild, ChangeDetectionStrategy, Component, Injector, EnvironmentInjector, ApplicationRef, signal, computed, effect, untracked, Directive, ElementRef, NgZone, makeEnvironmentProviders, provideAppInitializer, InjectionToken } from '@angular/core';
@@ -557,8 +557,8 @@ class RuntimeEntitySelectorComponent {
557
557
  this.selectedCkType = ckType;
558
558
  this.selectedEntity = null;
559
559
  // Create new data sources for entity selection
560
- this.entityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
561
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
560
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
561
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
562
562
  this.ckTypeSelected.emit(ckType);
563
563
  this.emitValue();
564
564
  }
@@ -598,8 +598,8 @@ class RuntimeEntitySelectorComponent {
598
598
  if (ckType) {
599
599
  this.selectedCkType = ckType;
600
600
  // Create data sources
601
- this.entityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
602
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
601
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
602
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
603
603
  // Set the CK Type in the selector
604
604
  if (this.ckTypeSelector) {
605
605
  this.ckTypeSelector.writeValue(ckType);
@@ -2775,6 +2775,7 @@ const GetDashboardEntityDocumentDto = gql `
2775
2775
  rtId
2776
2776
  ckTypeId
2777
2777
  rtWellKnownName
2778
+ rtDisplayName
2778
2779
  rtCreationDateTime
2779
2780
  rtChangedDateTime
2780
2781
  attributes(resolveEnumValuesToNames: true) {
@@ -3450,6 +3451,7 @@ const GetAssociationTargetsDocumentDto = gql `
3450
3451
  rtId
3451
3452
  ckTypeId
3452
3453
  rtWellKnownName
3454
+ rtDisplayName
3453
3455
  attributes(attributeNames: $attributeNames, resolveEnumValuesToNames: true) {
3454
3456
  items {
3455
3457
  attributeName
@@ -3772,6 +3774,7 @@ class MeshBoardDataService {
3772
3774
  rtId: entity.rtId,
3773
3775
  ckTypeId: entity.ckTypeId,
3774
3776
  rtWellKnownName: entity.rtWellKnownName ?? undefined,
3777
+ rtDisplayName: entity.rtDisplayName ?? undefined,
3775
3778
  rtCreationDateTime: entity.rtCreationDateTime ?? undefined,
3776
3779
  rtChangedDateTime: entity.rtChangedDateTime ?? undefined,
3777
3780
  attributes,
@@ -4047,6 +4050,7 @@ class MeshBoardDataService {
4047
4050
  rtId: t.rtId,
4048
4051
  ckTypeId: t.ckTypeId,
4049
4052
  rtWellKnownName: t.rtWellKnownName ?? undefined,
4053
+ rtDisplayName: t.rtDisplayName ?? undefined,
4050
4054
  attributes: (t.attributes?.items ?? [])
4051
4055
  .filter((a) => a !== null && a.attributeName !== null)
4052
4056
  .map(a => ({
@@ -4745,8 +4749,8 @@ class EntityCardConfigDialogComponent {
4745
4749
  this.selectedCkType = ckType;
4746
4750
  this.selectedEntity = null; // Reset entity when type changes
4747
4751
  // Create new data sources for the selected type
4748
- this.entityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
4749
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
4752
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
4753
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
4750
4754
  }
4751
4755
  onCkTypeCleared() {
4752
4756
  this.selectedCkType = null;
@@ -6647,8 +6651,8 @@ class KpiConfigDialogComponent {
6647
6651
  onCkTypeSelected(ckType) {
6648
6652
  this.selectedCkType = ckType;
6649
6653
  this.selectedEntity = null;
6650
- this.entityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
6651
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
6654
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
6655
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
6652
6656
  // Load available attributes for this CK type (fullName is required for the GraphQL query)
6653
6657
  this.loadAvailableAttributes(ckType.fullName);
6654
6658
  }
@@ -8435,7 +8439,7 @@ class EntityAssociationsWidgetComponent {
8435
8439
  }
8436
8440
  else {
8437
8441
  expanded.add(key);
8438
- // Load target attributes when expanding, if configured
8442
+ // Load the targets (display names, plus attributes when configured) on expand
8439
8443
  this.loadTargetAttributes(group);
8440
8444
  }
8441
8445
  this._expandedGroups.set(expanded);
@@ -8454,7 +8458,7 @@ class EntityAssociationsWidgetComponent {
8454
8458
  return cached.map(t => ({
8455
8459
  rtId: t.rtId,
8456
8460
  ckTypeId: t.ckTypeId,
8457
- displayName: t.rtWellKnownName || t.rtId,
8461
+ displayName: t.rtDisplayName || t.rtWellKnownName || t.rtId,
8458
8462
  attributes: t.attributes
8459
8463
  }));
8460
8464
  }
@@ -8508,9 +8512,10 @@ class EntityAssociationsWidgetComponent {
8508
8512
  return `${group.direction}-${group.roleId}-${group.targetType}`;
8509
8513
  }
8510
8514
  loadTargetAttributes(group) {
8511
- const targetAttributePaths = this.config?.targetAttributePaths;
8512
- if (!targetAttributePaths?.length)
8513
- return;
8515
+ // Always fetch on expand, also without configured target attributes: the
8516
+ // same query carries each target's rtDisplayName, and the fallback list
8517
+ // built from the bare association rows can only show rtIds.
8518
+ const targetAttributePaths = this.config?.targetAttributePaths ?? [];
8514
8519
  const cacheKey = this.getGroupCacheKey(group);
8515
8520
  // Skip if already cached or loading
8516
8521
  if (this._targetAttributesCache().has(cacheKey) || this._loadingTargetGroups().has(cacheKey))
@@ -8667,102 +8672,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
8667
8672
  }]
8668
8673
  }], ctorParameters: () => [{ type: i1.Apollo }] });
8669
8674
 
8670
- /**
8671
- * Data source for entity autocomplete - filters by ckTypeId
8672
- */
8673
- let RuntimeEntitySelectDataSource$1 = class RuntimeEntitySelectDataSource {
8674
- getEntitiesByCkTypeGQL;
8675
- ckTypeId;
8676
- constructor(getEntitiesByCkTypeGQL, ckTypeId) {
8677
- this.getEntitiesByCkTypeGQL = getEntitiesByCkTypeGQL;
8678
- this.ckTypeId = ckTypeId;
8679
- }
8680
- async onFilter(filter, take) {
8681
- const result = await firstValueFrom(this.getEntitiesByCkTypeGQL.fetch({
8682
- variables: {
8683
- ckTypeId: this.ckTypeId,
8684
- first: take ?? 10,
8685
- fieldFilters: [
8686
- { attributePath: 'rtId', operator: FieldFilterOperatorsDto.LikeDto, comparisonValue: filter }
8687
- ]
8688
- }
8689
- }));
8690
- const items = (result.data?.runtime?.runtimeEntities?.items ?? [])
8691
- .filter((item) => item !== null)
8692
- .map(item => ({
8693
- rtId: item.rtId,
8694
- ckTypeId: item.ckTypeId,
8695
- rtWellKnownName: item.rtWellKnownName ?? undefined,
8696
- displayName: item.rtWellKnownName || item.rtId
8697
- }));
8698
- return {
8699
- totalCount: result.data?.runtime?.runtimeEntities?.totalCount ?? 0,
8700
- items
8701
- };
8702
- }
8703
- onDisplayEntity(entity) {
8704
- return entity.displayName;
8705
- }
8706
- getIdEntity(entity) {
8707
- return entity.rtId;
8708
- }
8709
- };
8710
- /**
8711
- * Dialog data source for entity selection grid
8712
- */
8713
- let RuntimeEntityDialogDataSource$1 = class RuntimeEntityDialogDataSource {
8714
- getEntitiesByCkTypeGQL;
8715
- ckTypeId;
8716
- constructor(getEntitiesByCkTypeGQL, ckTypeId) {
8717
- this.getEntitiesByCkTypeGQL = getEntitiesByCkTypeGQL;
8718
- this.ckTypeId = ckTypeId;
8719
- }
8720
- getColumns() {
8721
- return [
8722
- { field: 'rtId', displayName: 'RT-ID' },
8723
- { field: 'rtWellKnownName', displayName: 'Name' },
8724
- { field: 'ckTypeId', displayName: 'CK Type' }
8725
- ];
8726
- }
8727
- fetchData(options) {
8728
- // Build field filters for text search
8729
- const fieldFilters = [];
8730
- if (options.textSearch && options.textSearch.trim()) {
8731
- fieldFilters.push({
8732
- attributePath: 'rtId',
8733
- operator: FieldFilterOperatorsDto.LikeDto,
8734
- comparisonValue: options.textSearch.trim()
8735
- });
8736
- }
8737
- return from(this.getEntitiesByCkTypeGQL.fetch({
8738
- variables: {
8739
- ckTypeId: this.ckTypeId,
8740
- first: options.take,
8741
- after: options.skip > 0 ? btoa(`arrayconnection:${options.skip - 1}`) : undefined,
8742
- fieldFilters: fieldFilters.length > 0 ? fieldFilters : undefined
8743
- }
8744
- })).pipe(map(result => {
8745
- const items = (result.data?.runtime?.runtimeEntities?.items ?? [])
8746
- .filter((item) => item !== null)
8747
- .map(item => ({
8748
- rtId: item.rtId,
8749
- ckTypeId: item.ckTypeId,
8750
- rtWellKnownName: item.rtWellKnownName ?? undefined,
8751
- displayName: item.rtWellKnownName || item.rtId
8752
- }));
8753
- return {
8754
- data: items,
8755
- totalCount: result.data?.runtime?.runtimeEntities?.totalCount ?? 0
8756
- };
8757
- }));
8758
- }
8759
- onDisplayEntity(entity) {
8760
- return entity.displayName;
8761
- }
8762
- getIdEntity(entity) {
8763
- return entity.rtId;
8764
- }
8765
- };
8766
8675
  /**
8767
8676
  * Configuration dialog for EntityWithAssociations widget.
8768
8677
  * Allows selecting a CK Type, runtime entity, direction filters, and role filters.
@@ -8891,7 +8800,8 @@ class AssociationsConfigDialogComponent {
8891
8800
  rtId: entity.rtId,
8892
8801
  ckTypeId: entity.ckTypeId,
8893
8802
  rtWellKnownName: entity.rtWellKnownName ?? undefined,
8894
- displayName: entity.rtWellKnownName || entity.rtId
8803
+ rtDisplayName: entity.rtDisplayName,
8804
+ displayName: entity.rtDisplayName
8895
8805
  };
8896
8806
  }
8897
8807
  }
@@ -8905,8 +8815,8 @@ class AssociationsConfigDialogComponent {
8905
8815
  this.selectedRoles = [];
8906
8816
  this.selectedEntityAttributes = [];
8907
8817
  // Create data sources for entity selection
8908
- this.entityDataSource = new RuntimeEntitySelectDataSource$1(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
8909
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$1(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
8818
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
8819
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
8910
8820
  // Load available association roles and entity attributes in parallel
8911
8821
  await Promise.all([
8912
8822
  this.loadAssociationRoles(ckType.rtCkTypeId),
@@ -11578,8 +11488,8 @@ class GaugeConfigDialogComponent {
11578
11488
  onCkTypeSelected(ckType) {
11579
11489
  this.selectedCkType = ckType;
11580
11490
  this.selectedEntity = null;
11581
- this.entityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, ckType.fullName);
11582
- this.entityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
11491
+ this.entityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, ckType.fullName);
11492
+ this.entityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, ckType.rtCkTypeId);
11583
11493
  // Load available attributes for this CK type (fullName is required for the GraphQL query)
11584
11494
  this.loadAvailableAttributes(ckType.fullName);
11585
11495
  }
@@ -27322,102 +27232,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.5", ngImpor
27322
27232
  args: ['containerRef']
27323
27233
  }] } });
27324
27234
 
27325
- /**
27326
- * Data source for entity autocomplete - filters by ckTypeId
27327
- */
27328
- class RuntimeEntitySelectDataSource {
27329
- getEntitiesByCkTypeGQL;
27330
- ckTypeId;
27331
- constructor(getEntitiesByCkTypeGQL, ckTypeId) {
27332
- this.getEntitiesByCkTypeGQL = getEntitiesByCkTypeGQL;
27333
- this.ckTypeId = ckTypeId;
27334
- }
27335
- async onFilter(filter, take) {
27336
- const result = await firstValueFrom(this.getEntitiesByCkTypeGQL.fetch({
27337
- variables: {
27338
- ckTypeId: this.ckTypeId,
27339
- first: take ?? 10,
27340
- fieldFilters: filter ? [
27341
- { attributePath: 'rtId', operator: FieldFilterOperatorsDto.LikeDto, comparisonValue: filter }
27342
- ] : undefined
27343
- }
27344
- }));
27345
- const items = (result.data?.runtime?.runtimeEntities?.items ?? [])
27346
- .filter((item) => item !== null)
27347
- .map(item => ({
27348
- rtId: item.rtId,
27349
- ckTypeId: item.ckTypeId,
27350
- rtWellKnownName: item.rtWellKnownName ?? undefined,
27351
- displayName: item.rtWellKnownName || item.rtId
27352
- }));
27353
- return {
27354
- totalCount: result.data?.runtime?.runtimeEntities?.totalCount ?? 0,
27355
- items
27356
- };
27357
- }
27358
- onDisplayEntity(entity) {
27359
- return entity.displayName;
27360
- }
27361
- getIdEntity(entity) {
27362
- return entity.rtId;
27363
- }
27364
- }
27365
- /**
27366
- * Dialog data source for entity selection grid
27367
- */
27368
- class RuntimeEntityDialogDataSource {
27369
- getEntitiesByCkTypeGQL;
27370
- ckTypeId;
27371
- constructor(getEntitiesByCkTypeGQL, ckTypeId) {
27372
- this.getEntitiesByCkTypeGQL = getEntitiesByCkTypeGQL;
27373
- this.ckTypeId = ckTypeId;
27374
- }
27375
- getColumns() {
27376
- return [
27377
- { field: 'rtId', displayName: 'RT-ID' },
27378
- { field: 'rtWellKnownName', displayName: 'Name' },
27379
- { field: 'ckTypeId', displayName: 'CK Type' }
27380
- ];
27381
- }
27382
- fetchData(options) {
27383
- // Build field filters for text search
27384
- const fieldFilters = [];
27385
- if (options.textSearch && options.textSearch.trim()) {
27386
- fieldFilters.push({
27387
- attributePath: 'rtId',
27388
- operator: FieldFilterOperatorsDto.LikeDto,
27389
- comparisonValue: options.textSearch.trim()
27390
- });
27391
- }
27392
- return from(this.getEntitiesByCkTypeGQL.fetch({
27393
- variables: {
27394
- ckTypeId: this.ckTypeId,
27395
- first: options.take,
27396
- after: options.skip > 0 ? btoa(`arrayconnection:${options.skip - 1}`) : undefined,
27397
- fieldFilters: fieldFilters.length > 0 ? fieldFilters : undefined
27398
- }
27399
- })).pipe(map(result => {
27400
- const items = (result.data?.runtime?.runtimeEntities?.items ?? [])
27401
- .filter((item) => item !== null)
27402
- .map(item => ({
27403
- rtId: item.rtId,
27404
- ckTypeId: item.ckTypeId,
27405
- rtWellKnownName: item.rtWellKnownName ?? undefined,
27406
- displayName: item.rtWellKnownName || item.rtId
27407
- }));
27408
- return {
27409
- data: items,
27410
- totalCount: result.data?.runtime?.runtimeEntities?.totalCount ?? 0
27411
- };
27412
- }));
27413
- }
27414
- onDisplayEntity(entity) {
27415
- return entity.displayName;
27416
- }
27417
- getIdEntity(entity) {
27418
- return entity.rtId;
27419
- }
27420
- }
27421
27235
  /**
27422
27236
  * Configuration dialog for Process Widget.
27423
27237
  * Allows selecting a stored diagram, display options, and data binding.
@@ -27716,10 +27530,11 @@ class ProcessConfigDialogComponent {
27716
27530
  await this.loadAttributesForCkType(this.initialBindingCkTypeId);
27717
27531
  // Pre-select entity if provided
27718
27532
  if (this.initialBindingRtId) {
27719
- // Create a mock entity item - the actual display name will be updated when the combobox loads
27533
+ // Placeholder item labelled by its rtId - the display name arrives when the combobox loads
27720
27534
  this.selectedEntity = {
27721
27535
  rtId: this.initialBindingRtId,
27722
27536
  ckTypeId: this.initialBindingCkTypeId,
27537
+ rtDisplayName: this.initialBindingRtId,
27723
27538
  displayName: this.initialBindingRtId
27724
27539
  };
27725
27540
  }
@@ -31365,8 +31180,8 @@ class EntitySelectorEditorComponent {
31365
31180
  }
31366
31181
  updateDefaultEntityDataSources() {
31367
31182
  if (this.editCkTypeId) {
31368
- this.defaultEntityDataSource = new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, this.editCkTypeId);
31369
- this.defaultEntityDialogDataSource = new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, this.editCkTypeId);
31183
+ this.defaultEntityDataSource = new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, this.editCkTypeId);
31184
+ this.defaultEntityDialogDataSource = new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, this.editCkTypeId);
31370
31185
  }
31371
31186
  else {
31372
31187
  this.defaultEntityDataSource = null;
@@ -31452,10 +31267,10 @@ class EntitySelectorToolbarComponent {
31452
31267
  for (const selector of this.entitySelectors) {
31453
31268
  // Reuse cached data source if same CK type
31454
31269
  if (!this.dataSourceCache.has(selector.ckTypeId)) {
31455
- this.dataSourceCache.set(selector.ckTypeId, new RuntimeEntitySelectDataSource$2(this.getEntitiesByCkTypeGQL, selector.ckTypeId));
31270
+ this.dataSourceCache.set(selector.ckTypeId, new RuntimeEntitySelectDataSource(this.getEntitiesByCkTypeGQL, selector.ckTypeId));
31456
31271
  }
31457
31272
  if (!this.dialogDataSourceCache.has(selector.ckTypeId)) {
31458
- this.dialogDataSourceCache.set(selector.ckTypeId, new RuntimeEntityDialogDataSource$2(this.getEntitiesByCkTypeGQL, selector.ckTypeId));
31273
+ this.dialogDataSourceCache.set(selector.ckTypeId, new RuntimeEntityDialogDataSource(this.getEntitiesByCkTypeGQL, selector.ckTypeId));
31459
31274
  }
31460
31275
  this.selectorDataSources.set(selector.id, this.dataSourceCache.get(selector.ckTypeId));
31461
31276
  this.selectorDialogDataSources.set(selector.id, this.dialogDataSourceCache.get(selector.ckTypeId));
@@ -34045,7 +33860,12 @@ class MeshBoardViewComponent {
34045
33860
  // variable resolution so widgets bound to this selector can scope their
34046
33861
  // stream-data query by the resolved source rtIds.
34047
33862
  await this.resolveEntitySelectorScopeRtIds(selector, rtId);
34048
- return entity.rtWellKnownName || entity.rtId;
33863
+ // Label the selection the way the pick dialog does: by the engine's
33864
+ // display name (the type's displayNameRule — "2026" for a fiscal year),
33865
+ // not the well-known name, which most entities do not carry. Without it
33866
+ // a board opened on its defaultRtId showed the raw rtId in the toolbar
33867
+ // until the user re-picked the very same entity.
33868
+ return entity.rtDisplayName || entity.rtWellKnownName || entity.rtId;
34049
33869
  }
34050
33870
  catch (error) {
34051
33871
  console.error(`Error resolving entity selector '${selector.id}':`, error);