@salesforce/lds-adapters-uiapi 1.409.0 → 1.410.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.
@@ -14,7 +14,7 @@ export interface CreateRecordConfig {
14
14
  allowSaveOnDuplicate?: boolean;
15
15
  apiName?: string;
16
16
  fields: {
17
- [key: string]: string | number | null | boolean;
17
+ [key: string]: string | number | null | boolean | Array<string>;
18
18
  };
19
19
  }
20
20
  export declare const createResourceParams: (config: CreateRecordConfig) => resources_postUiApiRecords_ResourceRequestConfig;
@@ -9,7 +9,7 @@ export interface GetDuplicatesConfig {
9
9
  allowSaveOnDuplicate?: boolean;
10
10
  apiName?: string;
11
11
  fields: {
12
- [key: string]: string | number | null | boolean;
12
+ [key: string]: string | number | null | boolean | Array<string>;
13
13
  };
14
14
  }
15
15
  export declare const createResourceParams: (config: GetDuplicatesConfig) => resources_postUiApiPredupe_ResourceRequestConfig;
@@ -15,7 +15,7 @@ export interface UpdateRecordConfig {
15
15
  allowSaveOnDuplicate?: boolean;
16
16
  apiName?: string;
17
17
  fields: {
18
- [key: string]: string | number | null | boolean;
18
+ [key: string]: string | number | null | boolean | Array<string>;
19
19
  };
20
20
  }
21
21
  export declare const createResourceParams: (config: UpdateRecordConfig) => resources_patchUiApiRecordsByRecordId_ResourceRequestConfig;
@@ -14,7 +14,7 @@ export interface ResourceRequestConfig {
14
14
  allowSaveOnDuplicate?: boolean;
15
15
  apiName?: string;
16
16
  fields: {
17
- [key: string]: string | number | null | boolean;
17
+ [key: string]: string | number | null | boolean | Array<string>;
18
18
  };
19
19
  };
20
20
  headers: {
@@ -5,7 +5,7 @@ export interface ResourceRequestConfig {
5
5
  allowSaveOnDuplicate?: boolean;
6
6
  apiName?: string;
7
7
  fields: {
8
- [key: string]: string | number | null | boolean;
8
+ [key: string]: string | number | null | boolean | Array<string>;
9
9
  };
10
10
  };
11
11
  }
@@ -12,7 +12,7 @@ export interface ResourceRequestConfig {
12
12
  allowSaveOnDuplicate?: boolean;
13
13
  apiName?: string;
14
14
  fields: {
15
- [key: string]: string | number | null | boolean;
15
+ [key: string]: string | number | null | boolean | Array<string>;
16
16
  };
17
17
  };
18
18
  }
@@ -1,5 +1,5 @@
1
1
  import { IngestPath as $64$luvio_engine_IngestPath, Luvio as $64$luvio_engine_Luvio, Store as $64$luvio_engine_Store, FragmentSelection as $64$luvio_engine_FragmentSelection, ResourceIngest as $64$luvio_engine_ResourceIngest, DurableStoreKeyMetadataMap as $64$luvio_engine_DurableStoreKeyMetadataMap, NormalizedKeyMetadata as $64$luvio_engine_NormalizedKeyMetadata } from '@luvio/engine';
2
- export declare const VERSION = "407608b4e55f1dea2ccc5360add230ef";
2
+ export declare const VERSION = "007ce71d6f58daae426cab2d4cb7d5a2";
3
3
  export declare function validate(obj: any, path?: string): TypeError | null;
4
4
  export declare const RepresentationType: string;
5
5
  export declare function normalize(input: RecordInputRepresentation, existing: RecordInputRepresentationNormalized, path: $64$luvio_engine_IngestPath, luvio: $64$luvio_engine_Luvio, store: $64$luvio_engine_Store, timestamp: number): RecordInputRepresentationNormalized;
@@ -20,7 +20,7 @@ export interface RecordInputRepresentationNormalized {
20
20
  apiName?: string;
21
21
  /** Field values. When this representation is deserialized from JSON, the values will be typed as JsonNode, delaying full deserialization until the resource executes, which knows the expected data types. In the case of invocation through CiJ directly, the field values should be typed as the expected data types. */
22
22
  fields: {
23
- [key: string]: string | number | null | boolean;
23
+ [key: string]: string | number | null | boolean | Array<string>;
24
24
  };
25
25
  }
26
26
  /**
@@ -33,6 +33,6 @@ export interface RecordInputRepresentation {
33
33
  allowSaveOnDuplicate?: boolean;
34
34
  apiName?: string;
35
35
  fields: {
36
- [key: string]: string | number | null | boolean;
36
+ [key: string]: string | number | null | boolean | Array<string>;
37
37
  };
38
38
  }
@@ -6550,6 +6550,9 @@ function generateRecordInputForUpdate(record, objectInfo) {
6550
6550
  }
6551
6551
  function isRecordInputFieldValue(unknown) {
6552
6552
  const type = typeof unknown;
6553
+ if (Array.isArray(unknown)) {
6554
+ return unknown.every((entry) => typeof entry === 'string');
6555
+ }
6553
6556
  return unknown === null || type === 'string' || type === 'number' || type === 'boolean';
6554
6557
  }
6555
6558
  /**
@@ -27531,6 +27534,18 @@ function typeCheckConfig$w(untrustedConfig) {
27531
27534
  untrustedConfig_fields_object[key] = untrustedConfig_fields_prop;
27532
27535
  }
27533
27536
  }
27537
+ if (ArrayIsArray$1(untrustedConfig_fields_prop)) {
27538
+ const untrustedConfig_fields_prop_array = [];
27539
+ for (let i = 0, arrayLength = untrustedConfig_fields_prop.length; i < arrayLength; i++) {
27540
+ const untrustedConfig_fields_prop_item = untrustedConfig_fields_prop[i];
27541
+ if (typeof untrustedConfig_fields_prop_item === 'string') {
27542
+ untrustedConfig_fields_prop_array.push(untrustedConfig_fields_prop_item);
27543
+ }
27544
+ }
27545
+ if (untrustedConfig_fields_object !== undefined) {
27546
+ untrustedConfig_fields_object[key] = untrustedConfig_fields_prop_array;
27547
+ }
27548
+ }
27534
27549
  }
27535
27550
  if (untrustedConfig_fields_object !== undefined && Object.keys(untrustedConfig_fields_object).length >= 0) {
27536
27551
  config.fields = untrustedConfig_fields_object;
@@ -64517,12 +64532,29 @@ function validate$b(obj, path = 'RecordInputRepresentation') {
64517
64532
  if (obj_fields_prop_union3_error != null) {
64518
64533
  obj_fields_prop_union3 = obj_fields_prop_union3_error.message;
64519
64534
  }
64520
- if (obj_fields_prop_union0 && obj_fields_prop_union1 && obj_fields_prop_union2 && obj_fields_prop_union3) {
64535
+ let obj_fields_prop_union4 = null;
64536
+ const obj_fields_prop_union4_error = (() => {
64537
+ if (!ArrayIsArray(obj_fields_prop)) {
64538
+ return new TypeError('Expected "array" but received "' + typeof obj_fields_prop + '" (at "' + path_fields_prop + '")');
64539
+ }
64540
+ for (let i = 0; i < obj_fields_prop.length; i++) {
64541
+ const obj_fields_prop_item = obj_fields_prop[i];
64542
+ const path_fields_prop_item = path_fields_prop + '[' + i + ']';
64543
+ if (typeof obj_fields_prop_item !== 'string') {
64544
+ return new TypeError('Expected "string" but received "' + typeof obj_fields_prop_item + '" (at "' + path_fields_prop_item + '")');
64545
+ }
64546
+ }
64547
+ })();
64548
+ if (obj_fields_prop_union4_error != null) {
64549
+ obj_fields_prop_union4 = obj_fields_prop_union4_error.message;
64550
+ }
64551
+ if (obj_fields_prop_union0 && obj_fields_prop_union1 && obj_fields_prop_union2 && obj_fields_prop_union3 && obj_fields_prop_union4) {
64521
64552
  let message = 'Object doesn\'t match union (at "' + path_fields_prop + '")';
64522
64553
  message += '\n' + obj_fields_prop_union0.split('\n').map((line) => '\t' + line).join('\n');
64523
64554
  message += '\n' + obj_fields_prop_union1.split('\n').map((line) => '\t' + line).join('\n');
64524
64555
  message += '\n' + obj_fields_prop_union2.split('\n').map((line) => '\t' + line).join('\n');
64525
64556
  message += '\n' + obj_fields_prop_union3.split('\n').map((line) => '\t' + line).join('\n');
64557
+ message += '\n' + obj_fields_prop_union4.split('\n').map((line) => '\t' + line).join('\n');
64526
64558
  return new TypeError(message);
64527
64559
  }
64528
64560
  }
@@ -67146,6 +67178,18 @@ function typeCheckConfig$4(untrustedConfig) {
67146
67178
  untrustedConfig_fields_object[key] = untrustedConfig_fields_prop;
67147
67179
  }
67148
67180
  }
67181
+ if (ArrayIsArray$1(untrustedConfig_fields_prop)) {
67182
+ const untrustedConfig_fields_prop_array = [];
67183
+ for (let i = 0, arrayLength = untrustedConfig_fields_prop.length; i < arrayLength; i++) {
67184
+ const untrustedConfig_fields_prop_item = untrustedConfig_fields_prop[i];
67185
+ if (typeof untrustedConfig_fields_prop_item === 'string') {
67186
+ untrustedConfig_fields_prop_array.push(untrustedConfig_fields_prop_item);
67187
+ }
67188
+ }
67189
+ if (untrustedConfig_fields_object !== undefined) {
67190
+ untrustedConfig_fields_object[key] = untrustedConfig_fields_prop_array;
67191
+ }
67192
+ }
67149
67193
  }
67150
67194
  if (untrustedConfig_fields_object !== undefined && Object.keys(untrustedConfig_fields_object).length >= 0) {
67151
67195
  config.fields = untrustedConfig_fields_object;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/lds-adapters-uiapi",
3
- "version": "1.409.0",
3
+ "version": "1.410.0",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "description": "Wire adapters for record related UI API endpoints",
6
6
  "main": "dist/es/es2018/uiapi-records-service.js",
@@ -69,14 +69,14 @@
69
69
  },
70
70
  "dependencies": {
71
71
  "@luvio/graphql-parser": "0.158.7",
72
- "@salesforce/lds-adapters-onestore-graphql": "^1.409.0",
73
- "@salesforce/lds-bindings": "^1.409.0",
74
- "@salesforce/lds-default-luvio": "^1.409.0"
72
+ "@salesforce/lds-adapters-onestore-graphql": "^1.410.0",
73
+ "@salesforce/lds-bindings": "^1.410.0",
74
+ "@salesforce/lds-default-luvio": "^1.410.0"
75
75
  },
76
76
  "devDependencies": {
77
- "@salesforce/lds-compiler-plugins": "^1.409.0",
78
- "@salesforce/lds-jest": "^1.409.0",
79
- "@salesforce/lds-store-binary": "^1.409.0"
77
+ "@salesforce/lds-compiler-plugins": "^1.410.0",
78
+ "@salesforce/lds-jest": "^1.410.0",
79
+ "@salesforce/lds-store-binary": "^1.410.0"
80
80
  },
81
81
  "luvioBundlesize": [
82
82
  {
@@ -28827,4 +28827,4 @@ register({
28827
28827
  });
28828
28828
 
28829
28829
  export { configurationForGraphQLAdapters as configuration, graphql, factory$1 as graphqlAdapterFactory, graphqlBatch, graphqlBatch_imperative, graphql_deprecated, graphql_imperative, graphql_imperative_deprecated, graphql_imperative_onestore, graphql_onestore, graphql_state_manager, refreshGraphQL, refreshGraphQL_deprecated };
28830
- // version: 1.409.0-355a528ce3
28830
+ // version: 1.410.0-7c228ee347
package/sfdc/index.js CHANGED
@@ -27033,6 +27033,18 @@ function typeCheckConfig$u(untrustedConfig) {
27033
27033
  untrustedConfig_fields_object[key] = untrustedConfig_fields_prop;
27034
27034
  }
27035
27035
  }
27036
+ if (ArrayIsArray$1(untrustedConfig_fields_prop)) {
27037
+ const untrustedConfig_fields_prop_array = [];
27038
+ for (let i = 0, arrayLength = untrustedConfig_fields_prop.length; i < arrayLength; i++) {
27039
+ const untrustedConfig_fields_prop_item = untrustedConfig_fields_prop[i];
27040
+ if (typeof untrustedConfig_fields_prop_item === 'string') {
27041
+ untrustedConfig_fields_prop_array.push(untrustedConfig_fields_prop_item);
27042
+ }
27043
+ }
27044
+ if (untrustedConfig_fields_object !== undefined) {
27045
+ untrustedConfig_fields_object[key] = untrustedConfig_fields_prop_array;
27046
+ }
27047
+ }
27036
27048
  }
27037
27049
  if (untrustedConfig_fields_object !== undefined && Object.keys(untrustedConfig_fields_object).length >= 0) {
27038
27050
  config.fields = untrustedConfig_fields_object;
@@ -36462,12 +36474,29 @@ function validate$7(obj, path = 'RecordInputRepresentation') {
36462
36474
  if (obj_fields_prop_union3_error != null) {
36463
36475
  obj_fields_prop_union3 = obj_fields_prop_union3_error.message;
36464
36476
  }
36465
- if (obj_fields_prop_union0 && obj_fields_prop_union1 && obj_fields_prop_union2 && obj_fields_prop_union3) {
36477
+ let obj_fields_prop_union4 = null;
36478
+ const obj_fields_prop_union4_error = (() => {
36479
+ if (!ArrayIsArray(obj_fields_prop)) {
36480
+ return new TypeError('Expected "array" but received "' + typeof obj_fields_prop + '" (at "' + path_fields_prop + '")');
36481
+ }
36482
+ for (let i = 0; i < obj_fields_prop.length; i++) {
36483
+ const obj_fields_prop_item = obj_fields_prop[i];
36484
+ const path_fields_prop_item = path_fields_prop + '[' + i + ']';
36485
+ if (typeof obj_fields_prop_item !== 'string') {
36486
+ return new TypeError('Expected "string" but received "' + typeof obj_fields_prop_item + '" (at "' + path_fields_prop_item + '")');
36487
+ }
36488
+ }
36489
+ })();
36490
+ if (obj_fields_prop_union4_error != null) {
36491
+ obj_fields_prop_union4 = obj_fields_prop_union4_error.message;
36492
+ }
36493
+ if (obj_fields_prop_union0 && obj_fields_prop_union1 && obj_fields_prop_union2 && obj_fields_prop_union3 && obj_fields_prop_union4) {
36466
36494
  let message = 'Object doesn\'t match union (at "' + path_fields_prop + '")';
36467
36495
  message += '\n' + obj_fields_prop_union0.split('\n').map((line) => '\t' + line).join('\n');
36468
36496
  message += '\n' + obj_fields_prop_union1.split('\n').map((line) => '\t' + line).join('\n');
36469
36497
  message += '\n' + obj_fields_prop_union2.split('\n').map((line) => '\t' + line).join('\n');
36470
36498
  message += '\n' + obj_fields_prop_union3.split('\n').map((line) => '\t' + line).join('\n');
36499
+ message += '\n' + obj_fields_prop_union4.split('\n').map((line) => '\t' + line).join('\n');
36471
36500
  return new TypeError(message);
36472
36501
  }
36473
36502
  }
@@ -39090,6 +39119,18 @@ function typeCheckConfig$4(untrustedConfig) {
39090
39119
  untrustedConfig_fields_object[key] = untrustedConfig_fields_prop;
39091
39120
  }
39092
39121
  }
39122
+ if (ArrayIsArray$1(untrustedConfig_fields_prop)) {
39123
+ const untrustedConfig_fields_prop_array = [];
39124
+ for (let i = 0, arrayLength = untrustedConfig_fields_prop.length; i < arrayLength; i++) {
39125
+ const untrustedConfig_fields_prop_item = untrustedConfig_fields_prop[i];
39126
+ if (typeof untrustedConfig_fields_prop_item === 'string') {
39127
+ untrustedConfig_fields_prop_array.push(untrustedConfig_fields_prop_item);
39128
+ }
39129
+ }
39130
+ if (untrustedConfig_fields_object !== undefined) {
39131
+ untrustedConfig_fields_object[key] = untrustedConfig_fields_prop_array;
39132
+ }
39133
+ }
39093
39134
  }
39094
39135
  if (untrustedConfig_fields_object !== undefined && Object.keys(untrustedConfig_fields_object).length >= 0) {
39095
39136
  config.fields = untrustedConfig_fields_object;
@@ -40342,4 +40383,4 @@ withDefaultLuvio((luvio) => {
40342
40383
  });
40343
40384
 
40344
40385
  export { API_NAMESPACE, VERSION$1i as FieldValueRepresentationVersion, InMemoryRecordRepresentationQueryEvaluator, MRU, RepresentationType$J as ObjectInfoDirectoryEntryRepresentationType, RepresentationType$O as ObjectInfoRepresentationType, RECORD_FIELDS_KEY_JUNCTION, RECORD_ID_PREFIX, RECORD_REPRESENTATION_NAME, RECORD_VIEW_ENTITY_ID_PREFIX, RECORD_VIEW_ENTITY_REPRESENTATION_NAME, RepresentationType$V as RecordRepresentationRepresentationType, TTL$z as RecordRepresentationTTL, RepresentationType$V as RecordRepresentationType, VERSION$1g as RecordRepresentationVersion, keyPrefix as UiApiNamespace, buildRecordRepKeyFromId, getFieldApiNamesArray as coerceFieldIdArray, coerceLayoutModeArray, getLayoutTypeArray as coerceLayoutTypeArray, getObjectApiName$1 as coerceObjectId, getObjectApiNamesArray as coerceObjectIdArray, configurationForRestAdapters as configuration, createContentDocumentAndVersion, createContentVersion, createIngestRecordWithFields, createLDSAdapterWithPrediction, createListInfo, createRecord, createRelatedListAdapterWithPrediction, createRelatedListPlusAdapterWithPrediction, deleteListInfo, deleteRecord, executeBatchRecordOperations, extractRecordIdFromStoreKey, getActionOverrides, getActionOverrides_imperative, getAllApps, getAllApps_imperative, getAppDetails, getAppDetails_imperative, getDuplicateConfiguration, getDuplicateConfiguration_imperative, getDuplicates, getDuplicates_imperative, getFlexipageFormulaOverrides, getFlexipageFormulaOverrides_imperative, getGlobalActions, getGlobalActions_imperative, getKeywordSearchResults, getKeywordSearchResults_imperative, getLayout, getLayoutUserState, getLayoutUserState_imperative, getLayout_imperative, getListInfoByName, getListInfoByNameAdapterFactory, getListInfoByName_imperative, getListInfosByName, getListInfosByName_imperative, getListInfosByObjectName, getListInfosByObjectNameAdapterFactory, getListInfosByObjectName_imperative, getListObjectInfo, getListObjectInfoAdapterFactory, getListObjectInfo_imperative, getListPreferences, getListPreferences_imperative, getListRecordsByName, factory$a as getListRecordsByNameAdapterFactory, getListRecordsByName_imperative, getListUi, getListUi_imperative, getLookupActions, getLookupActions_imperative, getLookupMetadata, getLookupMetadata_imperative, getLookupRecords, getLookupRecords_imperative, getNavItems, getNavItems_imperative, getObjectCreateActions, getObjectCreateActions_imperative, getObjectInfo, getObjectInfoAdapterFactory, getObjectInfoDirectoryAdapterFactory, getObjectInfo_imperative, getObjectInfos, getObjectInfosAdapterFactory, getObjectInfos_imperative, getPathLayout, getPathLayout_imperative, getPicklistValues, getPicklistValuesByRecordType, getPicklistValuesByRecordType_imperative, getPicklistValues_imperative, getQuickActionDefaults, getQuickActionDefaults_imperative, getQuickActionInfo, getQuickActionInfo_imperative, getQuickActionLayout, getQuickActionLayout_imperative, getRecord, getRecordActions, getRecordActionsAdapterFactory, getRecordActions_imperative, factory$f as getRecordAdapterFactory, getRecordAvatars, getRecordAvatarsAdapterFactory, getRecordAvatars_imperative, getRecordCreateDefaults, getRecordCreateDefaults_imperative, getRecordEditActions, getRecordEditActions_imperative, getRecordId18, getRecordId18Array, getRecordIngestionOverride, getRecordNotifyChange, getRecordTemplateClone, getRecordTemplateClone_imperative, getRecordTemplateCreate, getRecordTemplateCreate_imperative, getRecordUi, getRecordUi_imperative, getRecord_imperative, getRecords, getRecordsAdapterFactory, getRecords_imperative, getRelatedListActions, getRelatedListActionsAdapterFactory, getRelatedListActions_imperative, getRelatedListCount, getRelatedListCount_imperative, getRelatedListInfo, getRelatedListInfoAdapterFactory, getRelatedListInfoBatch, getRelatedListInfoBatchAdapterFactory, getRelatedListInfoBatch_imperative, getRelatedListInfo_imperative, getRelatedListPreferences, getRelatedListPreferencesBatch, getRelatedListPreferencesBatch_imperative, getRelatedListPreferences_imperative, getRelatedListRecordActions, getRelatedListRecordActions_imperative, getRelatedListRecords, getRelatedListRecordsAdapterFactory, getRelatedListRecordsBatch, getRelatedListRecordsBatchAdapterFactory, getRelatedListRecordsBatch_imperative, getRelatedListRecords_imperative, getRelatedListsActions, getRelatedListsActionsAdapterFactory, getRelatedListsActions_imperative, getRelatedListsCount, getRelatedListsCount_imperative, getRelatedListsInfo, getRelatedListsInfoAdapterFactory, getRelatedListsInfo_imperative, getResponseCacheKeys as getResponseCacheKeysContentDocumentCompositeRepresentation, getSearchFilterMetadata, getSearchFilterMetadata_imperative, getSearchFilterOptions, getSearchFilterOptions_imperative, getSearchResults, getSearchResults_imperative, getTypeCacheKeys$X as getTypeCacheKeysRecord, ingest as ingestContentDocumentCompositeRepresentation, ingest$H as ingestObjectInfo, ingest$B as ingestQuickActionExecutionRepresentation, ingest$O as ingestRecord, instrument, isStoreKeyRecordViewEntity, isSupportedEntity, keyBuilder as keyBuilderContentDocumentCompositeRepresentation, keyBuilderFromType as keyBuilderFromTypeContentDocumentCompositeRepresentation, keyBuilderFromType$E as keyBuilderFromTypeRecordRepresentation, keyBuilder$1Y as keyBuilderObjectInfo, keyBuilder$1R as keyBuilderQuickActionExecutionRepresentation, keyBuilder$29 as keyBuilderRecord, notifyAllListInfoSummaryUpdateAvailable, notifyAllListRecordUpdateAvailable, notifyListInfoSummaryUpdateAvailable, notifyListInfoUpdateAvailable, notifyListRecordCollectionUpdateAvailable, notifyListViewSummaryUpdateAvailable, notifyQuickActionDefaultsUpdateAvailable, notifyRecordUpdateAvailable, performQuickAction, performUpdateRecordQuickAction, refresh, registerPrefetcher, updateLayoutUserState, updateListInfoByName, updateListPreferences, updateRecord, updateRecordAvatar, updateRelatedListInfo, updateRelatedListPreferences };
40345
- // version: 1.409.0-355a528ce3
40386
+ // version: 1.410.0-7c228ee347
@@ -445,6 +445,9 @@ function generateRecordInputForUpdate(record, objectInfo) {
445
445
  }
446
446
  function isRecordInputFieldValue(unknown) {
447
447
  const type = typeof unknown;
448
+ if (Array.isArray(unknown)) {
449
+ return unknown.every((entry) => typeof entry === 'string');
450
+ }
448
451
  return unknown === null || type === 'string' || type === 'number' || type === 'boolean';
449
452
  }
450
453
  /**
package/src/raml/api.raml CHANGED
@@ -995,6 +995,7 @@ types:
995
995
  - Picklist
996
996
  - Reference
997
997
  - String
998
+ - String[]
998
999
  - TextArea
999
1000
  - Time
1000
1001
  - Url
@@ -3537,7 +3538,7 @@ types:
3537
3538
  type: object
3538
3539
  properties:
3539
3540
  //:
3540
- type: string | number | nil | boolean # TODO: hand rolled
3541
+ type: string | number | nil | boolean | string[] # TODO: hand rolled
3541
3542
  RecordLayoutComponentRepresentation:
3542
3543
  description: Concrete record layout component.
3543
3544
  discriminatorValue: EmptySpace # TODO hand rolled