@sap/cds-compiler 4.9.6 → 4.9.8

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 CHANGED
@@ -7,6 +7,13 @@
7
7
  Note: `beta` fixes, changes and features are usually not listed in this ChangeLog but [here](doc/CHANGELOG_BETA.md).
8
8
  The compiler behavior concerning `beta` features can change at any time without notice.
9
9
 
10
+ ## Version 4.9.8 - 2024-07-29
11
+
12
+ ### Fixed
13
+
14
+ - compiler: Fix extensions with bound actions using an explicit binding parameter in `parseCdl` CSN.
15
+ - to.edm(x): No `Nullable` attribute for `$ReturnType` of `Collection(<entity type>)` [OData V4 CSDL, section 12.8 Return Type](https://docs.oasis-open.org/odata/odata-csdl-xml/v4.01/odata-csdl-xml-v4.01.html#sec_ReturnType)
16
+
10
17
  ## Version 4.9.6 - 2024-07-15
11
18
 
12
19
  ### Fixed
@@ -1203,7 +1203,9 @@ function define( model ) {
1203
1203
  const type = first?.type || first?.items?.type; // this sequence = no derived type
1204
1204
  const path = type?.path;
1205
1205
  if (path?.length === 1 && path[0]?.id === '$self') { // TODO: no where: ?
1206
- const { $self } = main.$tableAliases;
1206
+ const $self = main.$tableAliases?.$self ||
1207
+ main.kind === 'extend' && { name: { id: '$self' } };
1208
+ // remark: an extend has no "table alias" `$self` (relevant for parse-cdl)
1207
1209
  setLink( type, '_artifact', $self );
1208
1210
  setLink( path[0], '_artifact', $self );
1209
1211
  }
package/lib/edm/edm.js CHANGED
@@ -882,12 +882,20 @@ function getEdm( options, messageFunctions ) {
882
882
  class ReturnType extends PropertyBase {
883
883
  constructor(version, csn) {
884
884
  super(version, {}, csn);
885
+ // CSDL 12.8: If the return type is a collection of entity types,
886
+ // the Nullable attribute has no meaning and MUST NOT be specified.
887
+ if (csn.$NoNullableProperty)
888
+ delete this._edmAttributes.Nullable;
885
889
  }
886
890
 
887
891
  // we need Name but NO $kind, can't use standard to JSON()
888
892
  toJSON() {
889
893
  const json = Object.create(null);
890
894
  this.toJSONattributes(json);
895
+ // CSDL 12.8: If the return type is a collection of entity types,
896
+ // the Nullable attribute has no meaning and MUST NOT be specified.
897
+ if (this._csn.$NoNullableProperty)
898
+ delete json.$Nullable;
891
899
  return json;
892
900
  }
893
901
  }
@@ -1892,7 +1892,7 @@ function initializeModel( csn, _options, messageFunctions, requestedServiceNames
1892
1892
  mapCdsToEdmProp(def);
1893
1893
  annotateAllowedValues(def, defLocation);
1894
1894
  if (def.returns) {
1895
- markCollection(def.returns);
1895
+ markCollection(def.returns, true);
1896
1896
  mapCdsToEdmProp(def.returns);
1897
1897
  annotateAllowedValues(def.returns, [ ...defLocation, 'returns' ]);
1898
1898
  }
@@ -1905,16 +1905,20 @@ function initializeModel( csn, _options, messageFunctions, requestedServiceNames
1905
1905
  rewriteAnnotationExpressions(member);
1906
1906
  if (member.returns) {
1907
1907
  edmUtils.assignAnnotation(member.returns, '@Core.Description', member.returns.doc);
1908
- markCollection(member.returns);
1908
+ markCollection(member.returns, true);
1909
1909
  mapCdsToEdmProp(member.returns);
1910
1910
  annotateAllowedValues(member.returns, [ ...location, 'returns' ]);
1911
1911
  rewriteAnnotationExpressions(member.returns);
1912
1912
  }
1913
1913
  }, defLocation);
1914
1914
  // mark members that need to be rendered as collections
1915
- function markCollection( obj ) {
1915
+ function markCollection( obj, isReturns ) {
1916
1916
  const items = obj.items || csn.definitions[obj.type] && csn.definitions[obj.type].items;
1917
1917
  if (items) {
1918
+ edmUtils.assignProp(obj, '$NoNullableProperty',
1919
+ isReturns && items.type &&
1920
+ !isBuiltinType(items.type) &&
1921
+ csn.definitions[items.type]?.kind === 'entity');
1918
1922
  edmUtils.assignProp(obj, '_NotNullCollection', items.notNull !== undefined ? items.notNull : true);
1919
1923
  edmUtils.assignProp(obj, '$isCollection', true);
1920
1924
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sap/cds-compiler",
3
- "version": "4.9.6",
3
+ "version": "4.9.8",
4
4
  "description": "CDS (Core Data Services) compiler and backends",
5
5
  "homepage": "https://cap.cloud.sap/",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -28,7 +28,7 @@
28
28
  "gentest3": "cross-env MAKEREFS=${MAKEREFS:-'true'} mocha --reporter-option maxDiffSize=0 test3/testRefFiles.js",
29
29
  "coverage": "cross-env nyc mocha --reporter-option maxDiffSize=0 test/ test3/testRefFiles.js && nyc report --reporter=lcov",
30
30
  "coverage:piper": "cross-env nyc mocha --reporter test/TestMochaReporter.js --reporter-options mochaFile=./coverage/TEST-results.xml --reporter-option maxDiffSize=0 --timeout 10000 test/ test3/ && nyc report --reporter=cobertura && nyc report --reporter=lcov",
31
- "lint": "eslint bin/ benchmark/ lib/ test/ test3/ scripts/ types/ && node scripts/linter/lintGrammar.js && node scripts/linter/lintTests.js test3/ && node scripts/linter/lintMessages.js && node scripts/linter/lintMessageIdCoverage.js lib/ && markdownlint README.md CHANGELOG.md doc/ internalDoc/ && cd share/messages && markdownlint . && cd ../../ && node scripts/check-changelog.js",
31
+ "lint": "eslint bin/ benchmark/ lib/ test/ test3/ scripts/ && node scripts/linter/lintGrammar.js && node scripts/linter/lintTests.js test3/ && node scripts/linter/lintMessages.js && node scripts/linter/lintMessageIdCoverage.js lib/ && markdownlint README.md CHANGELOG.md doc/ internalDoc/ && cd share/messages && markdownlint . && cd ../../ && node scripts/check-changelog.js",
32
32
  "tslint": "tsc --pretty -p .",
33
33
  "updateVocs": "node scripts/odataAnnotations/generateDictMain.js && npm run generateAllRefs",
34
34
  "updateTocs": "node scripts/update-toc.js",