@sap/cds-compiler 2.13.8 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +155 -1594
  2. package/bin/cdsc.js +144 -66
  3. package/doc/CHANGELOG_ARCHIVE.md +1592 -0
  4. package/doc/CHANGELOG_BETA.md +3 -4
  5. package/doc/CHANGELOG_DEPRECATED.md +35 -1
  6. package/doc/{DeprecatedOptions.md → DeprecatedOptions_v2.md} +3 -1
  7. package/doc/Versioning.md +20 -1
  8. package/lib/api/.eslintrc.json +2 -2
  9. package/lib/api/main.js +237 -122
  10. package/lib/api/options.js +17 -88
  11. package/lib/api/validate.js +12 -16
  12. package/lib/base/keywords.js +216 -109
  13. package/lib/base/message-registry.js +152 -37
  14. package/lib/base/messages.js +145 -83
  15. package/lib/base/model.js +44 -2
  16. package/lib/base/optionProcessorHelper.js +19 -0
  17. package/lib/checks/actionsFunctions.js +7 -5
  18. package/lib/checks/annotationsOData.js +11 -32
  19. package/lib/checks/arrayOfs.js +1 -34
  20. package/lib/checks/cdsPersistence.js +1 -0
  21. package/lib/checks/elements.js +6 -6
  22. package/lib/checks/invalidTarget.js +1 -1
  23. package/lib/checks/nonexpandableStructured.js +1 -1
  24. package/lib/checks/queryNoDbArtifacts.js +2 -1
  25. package/lib/checks/selectItems.js +5 -1
  26. package/lib/checks/types.js +4 -2
  27. package/lib/checks/utils.js +2 -2
  28. package/lib/checks/validator.js +4 -5
  29. package/lib/compiler/assert-consistency.js +16 -10
  30. package/lib/compiler/base.js +1 -0
  31. package/lib/compiler/builtins.js +98 -9
  32. package/lib/compiler/checks.js +22 -70
  33. package/lib/compiler/define.js +61 -13
  34. package/lib/compiler/extend.js +79 -14
  35. package/lib/compiler/finalize-parse-cdl.js +46 -29
  36. package/lib/compiler/index.js +100 -37
  37. package/lib/compiler/moduleLayers.js +7 -0
  38. package/lib/compiler/populate.js +19 -18
  39. package/lib/compiler/propagator.js +7 -4
  40. package/lib/compiler/resolve.js +297 -234
  41. package/lib/compiler/shared.js +107 -102
  42. package/lib/compiler/tweak-assocs.js +16 -11
  43. package/lib/compiler/utils.js +5 -0
  44. package/lib/edm/annotations/genericTranslation.js +93 -21
  45. package/lib/edm/csn2edm.js +230 -115
  46. package/lib/edm/edm.js +305 -226
  47. package/lib/edm/edmPreprocessor.js +509 -438
  48. package/lib/edm/edmUtils.js +31 -45
  49. package/lib/gen/Dictionary.json +98 -22
  50. package/lib/gen/language.checksum +1 -1
  51. package/lib/gen/language.interp +10 -30
  52. package/lib/gen/language.tokens +105 -114
  53. package/lib/gen/languageLexer.interp +1 -34
  54. package/lib/gen/languageLexer.js +889 -1007
  55. package/lib/gen/languageLexer.tokens +95 -106
  56. package/lib/gen/languageParser.js +20786 -22199
  57. package/lib/json/csnVersion.js +10 -11
  58. package/lib/json/from-csn.js +59 -51
  59. package/lib/json/to-csn.js +10 -10
  60. package/lib/language/antlrParser.js +2 -2
  61. package/lib/language/docCommentParser.js +62 -39
  62. package/lib/language/errorStrategy.js +52 -40
  63. package/lib/language/genericAntlrParser.js +348 -229
  64. package/lib/language/language.g4 +629 -653
  65. package/lib/language/multiLineStringParser.js +14 -42
  66. package/lib/language/textUtils.js +44 -0
  67. package/lib/main.d.ts +46 -43
  68. package/lib/main.js +108 -79
  69. package/lib/model/csnRefs.js +34 -7
  70. package/lib/model/csnUtils.js +337 -332
  71. package/lib/model/enrichCsn.js +1 -0
  72. package/lib/model/revealInternalProperties.js +30 -10
  73. package/lib/model/sortViews.js +32 -31
  74. package/lib/modelCompare/compare.js +6 -6
  75. package/lib/optionProcessor.js +73 -46
  76. package/lib/render/.eslintrc.json +1 -1
  77. package/lib/render/DuplicateChecker.js +4 -7
  78. package/lib/render/manageConstraints.js +70 -2
  79. package/lib/render/toCdl.js +1042 -882
  80. package/lib/render/toHdbcds.js +195 -245
  81. package/lib/render/toRename.js +44 -22
  82. package/lib/render/toSql.js +225 -241
  83. package/lib/render/utils/common.js +145 -15
  84. package/lib/render/utils/sql.js +20 -19
  85. package/lib/sql-identifier.js +6 -0
  86. package/lib/transform/db/.eslintrc.json +4 -3
  87. package/lib/transform/db/associations.js +2 -2
  88. package/lib/transform/db/cdsPersistence.js +5 -15
  89. package/lib/transform/db/constraints.js +4 -2
  90. package/lib/transform/db/expansion.js +22 -16
  91. package/lib/transform/db/flattening.js +109 -80
  92. package/lib/transform/db/transformExists.js +7 -7
  93. package/lib/transform/db/views.js +9 -6
  94. package/lib/transform/draft/.eslintrc.json +2 -2
  95. package/lib/transform/draft/db.js +6 -6
  96. package/lib/transform/draft/odata.js +6 -7
  97. package/lib/transform/forHanaNew.js +62 -48
  98. package/lib/transform/forOdataNew.js +49 -50
  99. package/lib/transform/localized.js +31 -20
  100. package/lib/transform/odata/toFinalBaseType.js +16 -14
  101. package/lib/transform/odata/typesExposure.js +146 -198
  102. package/lib/transform/odata/utils.js +1 -38
  103. package/lib/transform/transformUtilsNew.js +67 -84
  104. package/lib/transform/translateAssocsToJoins.js +7 -3
  105. package/lib/transform/universalCsn/.eslintrc.json +2 -2
  106. package/lib/transform/universalCsn/coreComputed.js +16 -9
  107. package/lib/transform/universalCsn/universalCsnEnricher.js +60 -10
  108. package/lib/utils/file.js +3 -3
  109. package/lib/utils/moduleResolve.js +13 -6
  110. package/lib/utils/timetrace.js +20 -21
  111. package/package.json +35 -4
  112. package/share/messages/message-explanations.json +2 -1
  113. package/share/messages/syntax-expected-integer.md +37 -0
  114. package/doc/ApiMigration.md +0 -237
  115. package/doc/CommandLineMigration.md +0 -58
  116. package/doc/ErrorMessages.md +0 -175
  117. package/doc/FioriAnnotations.md +0 -94
  118. package/doc/ODataTransformation.md +0 -273
  119. package/lib/backends.js +0 -529
  120. package/lib/fix_antlr4-8_warning.js +0 -56
  121. package/lib/transform/odata/attachPath.js +0 -96
  122. package/lib/transform/odata/expandStructKeysInAssociations.js +0 -59
  123. package/lib/transform/odata/generateForeignKeyElements.js +0 -261
  124. package/lib/transform/odata/referenceFlattener.js +0 -296
  125. package/lib/transform/odata/sortByAssociationDependency.js +0 -105
  126. package/lib/transform/odata/structuralPath.js +0 -72
  127. package/lib/transform/odata/structureFlattener.js +0 -171
@@ -8,31 +8,17 @@ function validateOptions(_options)
8
8
  {
9
9
  if(!_options.isV2 && !_options.isV4)
10
10
  {
11
- // csn2edm expects "version" to be a top-level property of options
11
+ // csn2edm expects "odataVersion" to be a top-level property of options
12
12
  // set to 'v4' as default, override with value from incoming options
13
- // (here version comes inside "toOdata")
14
- const options = Object.assign({ version: 'v4'}, _options);
15
- if (options.toOdata) {
16
- if(options.toOdata.version)
17
- options.version = options.toOdata.version;
18
- if(options.toOdata.odataFormat)
19
- options.odataFormat = options.toOdata.odataFormat;
20
- if(options.toOdata.odataContainment)
21
- options.odataContainment = options.toOdata.odataContainment;
22
- if(options.toOdata.odataForeignKeys)
23
- options.odataForeignKeys = options.toOdata.odataForeignKeys;
24
- if(options.toOdata.odataV2PartialConstr)
25
- options.odataV2PartialConstr = options.toOdata.odataV2PartialConstr;
26
- // global flag that indicates whether or not FKs shall be rendered in general
27
- // V2/V4 flat: yes
28
- // V4/struct: depending on odataForeignKeys
29
- options.renderForeignKeys =
30
- options.version === 'v4' ? options.odataFormat === 'structured' && !!options.odataForeignKeys : true;
13
+ const options = Object.assign({ odataVersion: 'v4'}, _options);
14
+ // global flag that indicates whether or not FKs shall be rendered in general
15
+ // V2/V4 flat: yes
16
+ // V4/struct: depending on odataForeignKeys
17
+ options.renderForeignKeys =
18
+ options.odataVersion === 'v4' ? options.odataFormat === 'structured' && !!options.odataForeignKeys : true;
31
19
 
32
- }
33
-
34
- const v2 = options.version.match(/v2/i) !== null;
35
- const v4 = options.version.match(/v4/i) !== null;
20
+ const v2 = options.odataVersion.match(/v2/i) !== null;
21
+ const v4 = options.odataVersion.match(/v4/i) !== null;
36
22
 
37
23
  options.v = [v2, v4];
38
24
  options.isStructFormat = options.odataFormat && options.odataFormat === 'structured';
@@ -401,7 +387,7 @@ function finalizeReferentialConstraints(csn, assocCsn, options, info)
401
387
  if(options.isV2() && intersect(renderedKeys, remainingPrincipalRefs).length !== renderedKeys.length)
402
388
  if(options.odataV2PartialConstr) {
403
389
  info('odata-spec-violation-constraints',
404
- ['definitions', assocCsn._parent.name, 'elements', assocCsn.name], { api: 'OData V2' });
390
+ ['definitions', assocCsn._parent.name, 'elements', assocCsn.name], { version: '2.0' });
405
391
  }
406
392
  else {
407
393
  assocCsn._constraints.constraints = {};
@@ -439,7 +425,7 @@ function finalizeReferentialConstraints(csn, assocCsn, options, info)
439
425
  if(options.isV2() && intersect(renderedKeys, remainingPrincipalRefs).length !== renderedKeys.length) {
440
426
  if(options.odataV2PartialConstr) {
441
427
  info('odata-spec-violation-constraints',
442
- ['definitions', assocCsn._parent.name, 'elements', assocCsn.name], { api: 'OData V2' } );
428
+ ['definitions', assocCsn._parent.name, 'elements', assocCsn.name], { version: '2.0' } );
443
429
  }
444
430
  else {
445
431
  assocCsn._constraints.constraints = {};
@@ -467,7 +453,7 @@ function finalizeReferentialConstraints(csn, assocCsn, options, info)
467
453
  return (elt &&
468
454
  elt.type &&
469
455
  (!options.isFlatFormat || options.isFlatFormat && isBuiltinType(elt.type)) &&
470
- !['cds.Association', 'cds.Composition'].includes(elt.type) &&
456
+ !(elt.type === 'cds.Association' || elt.type === 'cds.Composition') &&
471
457
  isEdmPropertyRendered(elt, options));
472
458
  }
473
459
  }
@@ -522,12 +508,14 @@ function determineMultiplicity(csn)
522
508
  return [srcCardinality, tgtCardinality];
523
509
  }
524
510
 
525
- function mapCdsToEdmType(csn, messageFunctions, isV2=false, isMediaType=false)
511
+ function mapCdsToEdmType(csn, messageFunctions, isV2=false, isMediaType=false, location=undefined)
526
512
  {
513
+ if(location === undefined)
514
+ location = csn.$path;
527
515
  const { error } = messageFunctions || { error: ()=>true };
528
516
  let cdsType = csn.type;
529
517
  if(cdsType === undefined) {
530
- error(null, csn.$location, `no type found`);
518
+ error(null, location, `no type found`);
531
519
  return '<NOTYPE>';
532
520
  }
533
521
  if(!isBuiltinType(cdsType))
@@ -582,7 +570,7 @@ function mapCdsToEdmType(csn, messageFunctions, isV2=false, isMediaType=false)
582
570
  */
583
571
  }[cdsType];
584
572
  if (edmType == undefined) {
585
- error(null, csn.$path, { type: cdsType }, `No EDM type available for $(TYPE)`);
573
+ error(null, location, { type: cdsType }, `No EDM type available for $(TYPE)`);
586
574
  }
587
575
  if(isV2)
588
576
  {
@@ -590,9 +578,6 @@ function mapCdsToEdmType(csn, messageFunctions, isV2=false, isMediaType=false)
590
578
  edmType = 'Edm.DateTime';
591
579
  if (edmType === 'Edm.TimeOfDay')
592
580
  edmType = 'Edm.Time';
593
- if(['cds.hana.ST_POINT', 'cds.hana.ST_GEOMETRY'].includes(cdsType)) {
594
- error(null, csn.$path, { type: cdsType }, `OData V2 does not support Geometry data types, $(TYPE) can't be mapped`);
595
- }
596
581
  }
597
582
  else // isV4
598
583
  {
@@ -606,31 +591,32 @@ function mapCdsToEdmType(csn, messageFunctions, isV2=false, isMediaType=false)
606
591
  function addTypeFacets(node, csn)
607
592
  {
608
593
  const isV2 = node.v2;
594
+ const decimalTypes = {'cds.Decimal':1, 'cds.DecimalFloat':1, 'cds.hana.SMALLDECIMAL':1};
609
595
  if (csn.length != null)
610
- node.MaxLength = csn.length;
596
+ node.setEdmAttribute('MaxLength', csn.length);
611
597
  if (csn.scale !== undefined)
612
- node.Scale = csn.scale;
598
+ node.setEdmAttribute('Scale', csn.scale);
613
599
  // else if (csn.type === 'cds.hana.SMALLDECIMAL' && !isV2)
614
- // node.Scale = 'floating';
600
+ // node._edmAttributes.Scale = 'floating';
615
601
 
616
602
  if (csn.precision != null)
617
- node.Precision = csn.precision;
603
+ node.setEdmAttribute('Precision', csn.precision);
618
604
  // else if (csn.type === 'cds.hana.SMALLDECIMAL' && !isV2)
619
605
  // node.Precision = 16;
620
- else if (csn.type === 'cds.Timestamp' && node.Type === 'Edm.DateTimeOffset')
621
- node.Precision = 7;
622
- if([ 'cds.Decimal', 'cds.DecimalFloat', 'cds.hana.SMALLDECIMAL' ].includes(csn.type)) {
606
+ else if (csn.type === 'cds.Timestamp' && node._edmAttributes.Type === 'Edm.DateTimeOffset')
607
+ node.setEdmAttribute('Precision', 7);
608
+ if(csn.type in decimalTypes) {
623
609
  if(isV2) {
624
610
  // no prec/scale or scale is 'floating'/'variable'
625
- if(!(csn.precision || csn.scale) || ['floating', 'variable'].includes(csn.scale)) {
611
+ if(!(csn.precision || csn.scale) || (csn.scale === 'floating' || csn.scale === 'variable')) {
626
612
  node.setXml( { 'sap:variable-scale': true } );
627
- delete node.Scale;
613
+ node.removeEdmAttribute('Scale');
628
614
  }
629
615
  }
630
616
  else {
631
617
  // map both floating and variable to => variable
632
- if(node.Scale === 'floating')
633
- node.Scale = 'variable';
618
+ if(node._edmAttributes.Scale === 'floating')
619
+ node.setEdmAttribute('Scale', 'variable');
634
620
  if(!csn.precision && !csn.scale)
635
621
  // if Decimal has no p, s set scale 'variable'
636
622
  node.setXml( { Scale: 'variable' } ); // floating is V4.01
@@ -638,9 +624,9 @@ function addTypeFacets(node, csn)
638
624
  }
639
625
  // Unicode unused today
640
626
  if(csn.unicode)
641
- node.Unicode = csn.unicode;
627
+ node.setEdmAttribute('Unicode', csn.unicode);
642
628
  if(csn.srid)
643
- node.SRID = csn.srid;
629
+ node.setEdmAttribute('SRID', csn.srid);
644
630
  }
645
631
 
646
632
 
@@ -658,6 +658,7 @@
658
658
  "Type": "Common.FieldControlType",
659
659
  "AppliesTo": [
660
660
  "Property",
661
+ "Parameter",
661
662
  "Record",
662
663
  "EntityType"
663
664
  ]
@@ -1026,7 +1027,9 @@
1026
1027
  ]
1027
1028
  },
1028
1029
  "Common.RecursiveHierarchy": {
1029
- "Type": "Common.RecursiveHierarchyType"
1030
+ "Type": "Common.RecursiveHierarchyType",
1031
+ "$deprecated": true,
1032
+ "$deprecationText": "Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead"
1030
1033
  },
1031
1034
  "Common.CreatedAt": {
1032
1035
  "Type": "Edm.DateTimeOffset",
@@ -1380,8 +1383,49 @@
1380
1383
  "Core.GeometryFeature": {
1381
1384
  "Type": "Core.GeometryFeatureType"
1382
1385
  },
1383
- "Graph.links": {
1384
- "Type": "Collection(Graph.link)",
1386
+ "DataIntegration.Extractable": {
1387
+ "Type": "Edm.Boolean",
1388
+ "AppliesTo": [
1389
+ "EntitySet"
1390
+ ]
1391
+ },
1392
+ "DataIntegration.OriginalDataType": {
1393
+ "Type": "Edm.String",
1394
+ "AppliesTo": [
1395
+ "Property"
1396
+ ]
1397
+ },
1398
+ "DataIntegration.OriginalName": {
1399
+ "Type": "Edm.String"
1400
+ },
1401
+ "DataIntegration.ConversionExit": {
1402
+ "Type": "Edm.String",
1403
+ "AppliesTo": [
1404
+ "Property"
1405
+ ]
1406
+ },
1407
+ "DataIntegration.SourceSystem": {
1408
+ "Type": "Edm.String",
1409
+ "AppliesTo": [
1410
+ "Container"
1411
+ ]
1412
+ },
1413
+ "DataIntegration.DeltaMethod": {
1414
+ "Type": "DataIntegration.DeltaMethodType",
1415
+ "AppliesTo": [
1416
+ "EntitySet"
1417
+ ]
1418
+ },
1419
+ "Graph.traceId": {
1420
+ "Type": "Edm.String",
1421
+ "$experimental": true
1422
+ },
1423
+ "Graph.Details": {
1424
+ "Type": "Graph.DetailsType",
1425
+ "$experimental": true
1426
+ },
1427
+ "Hierarchy.RecursiveHierarchy": {
1428
+ "Type": "Hierarchy.RecursiveHierarchyType",
1385
1429
  "AppliesTo": [
1386
1430
  "EntityType"
1387
1431
  ],
@@ -1393,6 +1437,17 @@
1393
1437
  "Record"
1394
1438
  ]
1395
1439
  },
1440
+ "JSON.Schema": {
1441
+ "Type": "JSON.JSON",
1442
+ "AppliesTo": [
1443
+ "EntityType",
1444
+ "Parameter",
1445
+ "Property",
1446
+ "ReturnType",
1447
+ "Term",
1448
+ "TypeDefinition"
1449
+ ]
1450
+ },
1396
1451
  "Measures.ISOCurrency": {
1397
1452
  "Type": "Edm.String",
1398
1453
  "AppliesTo": [
@@ -1713,7 +1768,8 @@
1713
1768
  "Type": "Core.Tag",
1714
1769
  "AppliesTo": [
1715
1770
  "Property",
1716
- "PropertyValue"
1771
+ "PropertyValue",
1772
+ "Parameter"
1717
1773
  ]
1718
1774
  },
1719
1775
  "UI.Placeholder": {
@@ -1898,14 +1954,14 @@
1898
1954
  ]
1899
1955
  },
1900
1956
  "Validation.OpenPropertyTypeConstraint": {
1901
- "Type": "Collection(Core.QualifiedTypeName)",
1957
+ "Type": "Collection(Validation.SingleOrCollectionType)",
1902
1958
  "AppliesTo": [
1903
1959
  "ComplexType",
1904
1960
  "EntityType"
1905
1961
  ]
1906
1962
  },
1907
1963
  "Validation.DerivedTypeConstraint": {
1908
- "Type": "Collection(Core.QualifiedTypeName)",
1964
+ "Type": "Collection(Validation.SingleOrCollectionType)",
1909
1965
  "AppliesTo": [
1910
1966
  "EntitySet",
1911
1967
  "Singleton",
@@ -2740,7 +2796,9 @@
2740
2796
  "ExternalNodeKeyProperty": "Edm.PropertyPath",
2741
2797
  "NodeDescendantCountProperty": "Edm.PropertyPath",
2742
2798
  "NodeDrillStateProperty": "Edm.PropertyPath"
2743
- }
2799
+ },
2800
+ "$deprecated": true,
2801
+ "$deprecationText": "Use terms [Aggregation.RecursiveHierarchy](https://github.com/oasis-tcs/odata-vocabularies/blob/main/vocabularies/Org.OData.Aggregation.V1.md#RecursiveHierarchy) and [Hierarchy.RecursiveHierarchy](https://github.com/SAP/odata-vocabularies/blob/main/vocabularies/Hierarchy.md#RecursiveHierarchy) instead"
2744
2802
  },
2745
2803
  "Common.NumericMessageSeverityType": {
2746
2804
  "$kind": "TypeDefinition",
@@ -3122,22 +3180,31 @@
3122
3180
  "UnderlyingType": "Edm.String",
3123
3181
  "MaxLength": "128"
3124
3182
  },
3125
- "Graph.link": {
3183
+ "DataIntegration.DeltaMethodType": {
3184
+ "$kind": "EnumType",
3185
+ "IsFlags": "true",
3186
+ "Members": [
3187
+ "INSERT",
3188
+ "UPDATE",
3189
+ "DELETE"
3190
+ ]
3191
+ },
3192
+ "Graph.DetailsType": {
3126
3193
  "$kind": "ComplexType",
3127
3194
  "Properties": {
3128
- "title": "Edm.String",
3129
- "alias": "Edm.String",
3130
- "target": "Edm.String",
3131
- "parameters": "Collection(Graph.binding)",
3132
- "filter": "Collection(Graph.binding)"
3195
+ "url": "Edm.String",
3196
+ "body": "JSON.JSON"
3133
3197
  },
3134
3198
  "$experimental": true
3135
3199
  },
3136
- "Graph.binding": {
3200
+ "Hierarchy.RecursiveHierarchyType": {
3137
3201
  "$kind": "ComplexType",
3138
3202
  "Properties": {
3139
- "source": "Edm.PropertyPath",
3140
- "target": "Edm.PropertyPath"
3203
+ "ExternalKeyProperty": "Edm.PropertyPath",
3204
+ "DescendantCountProperty": "Edm.PropertyPath",
3205
+ "DrillStateProperty": "Edm.PropertyPath",
3206
+ "SiblingRankProperty": "Edm.PropertyPath",
3207
+ "PreorderRankProperty": "Edm.PropertyPath"
3141
3208
  },
3142
3209
  "$experimental": true
3143
3210
  },
@@ -3147,6 +3214,10 @@
3147
3214
  "width": "Edm.String"
3148
3215
  }
3149
3216
  },
3217
+ "JSON.JSON": {
3218
+ "$kind": "TypeDefinition",
3219
+ "UnderlyingType": "Edm.Stream"
3220
+ },
3150
3221
  "Measures.DurationGranularityType": {
3151
3222
  "$kind": "TypeDefinition",
3152
3223
  "UnderlyingType": "Edm.String"
@@ -3176,6 +3247,7 @@
3176
3247
  "TypeNamePlural": "Edm.String",
3177
3248
  "Title": "UI.DataFieldAbstract",
3178
3249
  "Description": "UI.DataFieldAbstract",
3250
+ "Image": "Edm.Stream",
3179
3251
  "ImageUrl": "Edm.String",
3180
3252
  "TypeImageUrl": "Edm.String",
3181
3253
  "Initials": "Edm.String"
@@ -3623,7 +3695,7 @@
3623
3695
  "$kind": "ComplexType",
3624
3696
  "BaseType": "UI.DataFieldAbstract",
3625
3697
  "Properties": {
3626
- "Value": "Edm.PrimitiveType",
3698
+ "Value": "Edm.Untyped",
3627
3699
  "Label": "Edm.String",
3628
3700
  "Criticality": "UI.CriticalityType",
3629
3701
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3634,8 +3706,8 @@
3634
3706
  "$kind": "ComplexType",
3635
3707
  "BaseType": "UI.DataField",
3636
3708
  "Properties": {
3637
- "Action": "Common.QualifiedName",
3638
3709
  "Value": "Edm.PrimitiveType",
3710
+ "Action": "Common.QualifiedName",
3639
3711
  "Label": "Edm.String",
3640
3712
  "Criticality": "UI.CriticalityType",
3641
3713
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3646,10 +3718,10 @@
3646
3718
  "$kind": "ComplexType",
3647
3719
  "BaseType": "UI.DataField",
3648
3720
  "Properties": {
3721
+ "Value": "Edm.PrimitiveType",
3649
3722
  "SemanticObject": "Edm.String",
3650
3723
  "Action": "Edm.String",
3651
3724
  "Mapping": "Collection(Common.SemanticObjectMappingType)",
3652
- "Value": "Edm.PrimitiveType",
3653
3725
  "Label": "Edm.String",
3654
3726
  "Criticality": "UI.CriticalityType",
3655
3727
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3660,8 +3732,8 @@
3660
3732
  "$kind": "ComplexType",
3661
3733
  "BaseType": "UI.DataField",
3662
3734
  "Properties": {
3663
- "Target": "Edm.NavigationPropertyPath",
3664
3735
  "Value": "Edm.PrimitiveType",
3736
+ "Target": "Edm.NavigationPropertyPath",
3665
3737
  "Label": "Edm.String",
3666
3738
  "Criticality": "UI.CriticalityType",
3667
3739
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3672,9 +3744,9 @@
3672
3744
  "$kind": "ComplexType",
3673
3745
  "BaseType": "UI.DataField",
3674
3746
  "Properties": {
3747
+ "Value": "Edm.PrimitiveType",
3675
3748
  "Url": "Edm.String",
3676
3749
  "UrlContentType": "Edm.String",
3677
- "Value": "Edm.PrimitiveType",
3678
3750
  "Label": "Edm.String",
3679
3751
  "Criticality": "UI.CriticalityType",
3680
3752
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3685,8 +3757,8 @@
3685
3757
  "$kind": "ComplexType",
3686
3758
  "BaseType": "UI.DataField",
3687
3759
  "Properties": {
3688
- "Actions": "Collection(UI.DataField)",
3689
3760
  "Value": "Edm.PrimitiveType",
3761
+ "Actions": "Collection(UI.DataField)",
3690
3762
  "Label": "Edm.String",
3691
3763
  "Criticality": "UI.CriticalityType",
3692
3764
  "CriticalityRepresentation": "UI.CriticalityRepresentationType",
@@ -3901,6 +3973,10 @@
3901
3973
  "path": "Edm.NavigationPropertyPath",
3902
3974
  "target": "Edm.NavigationPropertyPath"
3903
3975
  }
3976
+ },
3977
+ "Validation.SingleOrCollectionType": {
3978
+ "$kind": "TypeDefinition",
3979
+ "UnderlyingType": "Edm.String"
3904
3980
  }
3905
3981
  }
3906
3982
  }
@@ -1 +1 @@
1
- 78ff41e0af1a8064856dea9850968eb6
1
+ dd18d05cabbe93eabf1bd17b83add5ee