@sap/cds 7.9.4 → 8.0.4

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 (276) hide show
  1. package/CHANGELOG.md +128 -3659
  2. package/_i18n/i18n_en_US_saptrc.properties +113 -0
  3. package/_i18n/i18n_zh_CN.properties +7 -4
  4. package/app/index.css +129 -0
  5. package/app/index.html +16 -64
  6. package/app/index.js +14 -9
  7. package/bin/args.js +34 -0
  8. package/bin/serve.js +18 -24
  9. package/bin/test.js +97 -0
  10. package/common.cds +5 -12
  11. package/eslint.config.mjs +133 -0
  12. package/lib/auth/basic-auth.js +16 -20
  13. package/lib/auth/dummy-auth.js +1 -1
  14. package/lib/auth/ias-auth.js +9 -41
  15. package/lib/auth/index.js +1 -14
  16. package/lib/auth/jwt-auth.js +10 -40
  17. package/lib/compile/cds-compile.js +1 -2
  18. package/lib/compile/cdsc.js +21 -26
  19. package/lib/compile/etc/_localized.js +1 -6
  20. package/lib/compile/etc/csv.js +1 -1
  21. package/lib/compile/etc/properties.js +1 -1
  22. package/lib/compile/for/java.js +1 -1
  23. package/lib/compile/for/lean_drafts.js +4 -6
  24. package/lib/compile/for/nodejs.js +1 -1
  25. package/lib/compile/parse.js +4 -0
  26. package/lib/compile/resolve.js +4 -4
  27. package/lib/compile/to/edm-files.js +16 -23
  28. package/lib/compile/to/hana.js +27 -0
  29. package/lib/compile/to/json.js +1 -1
  30. package/lib/compile/to/sql.js +5 -1
  31. package/lib/compile/to/yaml.js +3 -3
  32. package/lib/dbs/cds-deploy.js +4 -2
  33. package/lib/env/cds-env.js +10 -14
  34. package/lib/env/cds-requires.js +30 -13
  35. package/lib/env/defaults.js +46 -16
  36. package/lib/env/plugins.js +1 -1
  37. package/lib/env/schemas/cds-rc.js +8 -4
  38. package/lib/env/schemas/index.js +7 -7
  39. package/lib/env/serviceBindings.js +1 -1
  40. package/lib/index.js +12 -10
  41. package/lib/lazy.js +1 -1
  42. package/lib/linked/classes.js +36 -8
  43. package/lib/linked/entities.js +2 -10
  44. package/lib/linked/models.js +2 -1
  45. package/lib/linked/validate.js +292 -0
  46. package/lib/log/cds-error.js +0 -6
  47. package/lib/log/cds-log.js +3 -3
  48. package/lib/log/format/json.js +1 -1
  49. package/lib/log/service/index.js +0 -1
  50. package/lib/plugins.js +2 -2
  51. package/lib/ql/Query.js +2 -10
  52. package/lib/ql/SELECT.js +1 -1
  53. package/lib/ql/Whereable.js +3 -2
  54. package/lib/req/cds-context.js +14 -25
  55. package/lib/req/context.js +23 -25
  56. package/lib/req/request.js +1 -34
  57. package/lib/req/user.js +47 -35
  58. package/lib/srv/bindings.js +1 -1
  59. package/lib/srv/cds-connect.js +4 -4
  60. package/lib/srv/cds-serve.js +2 -2
  61. package/lib/srv/factory.js +1 -1
  62. package/lib/srv/middlewares/cds-context.js +11 -22
  63. package/lib/srv/middlewares/ctx-model.js +2 -3
  64. package/lib/srv/middlewares/errors.js +41 -8
  65. package/lib/srv/middlewares/index.js +3 -3
  66. package/lib/srv/middlewares/trace.js +0 -2
  67. package/lib/srv/protocols/hcql.js +15 -10
  68. package/lib/srv/protocols/http.js +44 -49
  69. package/lib/srv/protocols/index.js +1 -23
  70. package/lib/srv/protocols/odata-v4.js +12 -74
  71. package/lib/srv/protocols/rest.js +1 -13
  72. package/lib/srv/srv-api.js +0 -20
  73. package/lib/srv/srv-dispatch.js +3 -2
  74. package/lib/srv/srv-handlers.js +22 -11
  75. package/lib/srv/srv-methods.js +2 -2
  76. package/lib/srv/srv-models.js +3 -36
  77. package/lib/test/expect.js +343 -0
  78. package/lib/test/index.js +2 -0
  79. package/lib/test/reporter.js +176 -0
  80. package/lib/utils/axios.js +10 -9
  81. package/lib/utils/cds-test.js +85 -36
  82. package/lib/utils/cds-utils.js +54 -7
  83. package/lib/utils/check-version.js +0 -4
  84. package/lib/utils/colors.js +49 -0
  85. package/lib/utils/data.js +5 -4
  86. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +2 -7
  87. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +3 -30
  88. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +6 -12
  89. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +1 -3
  90. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +0 -1
  91. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +4 -7
  92. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +12 -6
  93. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +2 -4
  94. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/applyToCQN.js +1 -0
  95. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +1 -1
  96. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +0 -1
  97. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +1 -3
  98. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +1 -1
  99. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmStructuredType.js +1 -2
  100. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ResourceJsonDeserializer.js +5 -0
  101. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +1 -1
  102. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +9 -43
  103. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +0 -1
  104. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +8 -3
  105. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +4 -2
  106. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +1 -3
  107. package/libx/_runtime/cds-services/util/assert.js +1 -1
  108. package/libx/_runtime/cds.js +10 -3
  109. package/libx/_runtime/common/Service.js +12 -32
  110. package/libx/_runtime/common/aspects/any.js +1 -0
  111. package/libx/_runtime/common/code-ext/execute.js +1 -1
  112. package/libx/_runtime/common/code-ext/worker.js +0 -1
  113. package/libx/_runtime/common/composition/data.js +0 -1
  114. package/libx/_runtime/common/composition/delete.js +0 -1
  115. package/libx/_runtime/common/composition/tree.js +0 -1
  116. package/libx/_runtime/common/composition/update.js +3 -3
  117. package/libx/_runtime/common/error/frontend.js +21 -12
  118. package/libx/_runtime/common/error/log.js +36 -0
  119. package/libx/_runtime/common/error/utils.js +2 -5
  120. package/libx/_runtime/common/generic/auth/autoexpose.js +18 -17
  121. package/libx/_runtime/common/generic/auth/expand.js +1 -1
  122. package/libx/_runtime/common/generic/auth/readOnly.js +1 -2
  123. package/libx/_runtime/common/generic/auth/restrict.js +23 -42
  124. package/libx/_runtime/common/generic/auth/restrictions.js +2 -7
  125. package/libx/_runtime/common/generic/auth/utils.js +91 -88
  126. package/libx/_runtime/common/generic/crud.js +6 -5
  127. package/libx/_runtime/common/generic/etag.js +7 -12
  128. package/libx/_runtime/common/generic/input.js +70 -68
  129. package/libx/_runtime/common/generic/paging.js +1 -0
  130. package/libx/_runtime/common/generic/sorting.js +1 -0
  131. package/libx/_runtime/common/generic/temporal.js +8 -2
  132. package/libx/_runtime/common/i18n/index.js +1 -1
  133. package/libx/_runtime/common/i18n/messages.properties +3 -1
  134. package/libx/_runtime/common/utils/binary.js +8 -2
  135. package/libx/_runtime/common/utils/compareJson.js +5 -1
  136. package/libx/_runtime/common/utils/copy.js +6 -11
  137. package/libx/_runtime/common/utils/cqn2cqn4sql.js +16 -14
  138. package/libx/_runtime/common/utils/differ.js +3 -6
  139. package/libx/_runtime/common/utils/keys.js +77 -18
  140. package/libx/_runtime/common/utils/postProcess.js +12 -15
  141. package/libx/_runtime/common/utils/propagateForeignKeys.js +0 -1
  142. package/libx/_runtime/common/utils/resolveView.js +2 -3
  143. package/libx/_runtime/common/utils/restrictions.js +45 -17
  144. package/libx/_runtime/common/utils/rewriteAsterisks.js +1 -8
  145. package/libx/_runtime/common/utils/stream.js +3 -16
  146. package/libx/_runtime/common/utils/streamProp.js +8 -18
  147. package/libx/_runtime/common/utils/structured.js +1 -1
  148. package/libx/_runtime/common/utils/ucsn.js +0 -2
  149. package/libx/_runtime/db/Service.js +0 -72
  150. package/libx/_runtime/db/data-conversion/post-processing.js +0 -1
  151. package/libx/_runtime/db/expand/expandCQNToJoin.js +9 -9
  152. package/libx/_runtime/db/expand/rawToExpanded.js +0 -8
  153. package/libx/_runtime/db/generic/input.js +3 -8
  154. package/libx/_runtime/db/generic/rewrite.js +1 -0
  155. package/libx/_runtime/db/query/read.js +2 -2
  156. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +0 -1
  157. package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
  158. package/libx/_runtime/db/utils/columns.js +2 -6
  159. package/libx/_runtime/fiori/lean-draft.js +138 -56
  160. package/libx/_runtime/hana/Service.js +0 -1
  161. package/libx/_runtime/hana/driver.js +1 -1
  162. package/libx/_runtime/hana/dynatrace.js +1 -2
  163. package/libx/_runtime/hana/pool.js +11 -21
  164. package/libx/_runtime/hana/streaming.js +0 -1
  165. package/libx/_runtime/messaging/common-utils/AMQPClient.js +0 -1
  166. package/libx/_runtime/messaging/common-utils/authorizedRequest.js +1 -1
  167. package/libx/_runtime/messaging/common-utils/normalizeIncomingMessage.js +1 -1
  168. package/libx/_runtime/messaging/enterprise-messaging-utils/getTenantInfo.js +1 -1
  169. package/libx/_runtime/messaging/enterprise-messaging-utils/registerEndpoints.js +19 -33
  170. package/libx/_runtime/messaging/event-broker.js +54 -27
  171. package/libx/_runtime/messaging/file-based.js +3 -3
  172. package/libx/_runtime/messaging/http-utils/token.js +1 -1
  173. package/libx/_runtime/messaging/kafka.js +2 -2
  174. package/libx/_runtime/messaging/redis-messaging.js +0 -1
  175. package/libx/_runtime/remote/Service.js +25 -25
  176. package/libx/_runtime/remote/utils/client.js +4 -5
  177. package/libx/_runtime/remote/utils/cloudSdkProvider.js +0 -3
  178. package/libx/_runtime/remote/utils/data.js +0 -1
  179. package/libx/_runtime/sqlite/Service.js +1 -2
  180. package/libx/_runtime/ucl/Service.js +37 -78
  181. package/libx/common/assert/index.js +22 -21
  182. package/libx/common/assert/type-relaxed.js +39 -0
  183. package/libx/common/assert/utils.js +3 -2
  184. package/libx/common/assert/validation.js +3 -8
  185. package/libx/common/utils/index.js +5 -0
  186. package/libx/common/utils/path.js +51 -0
  187. package/libx/odata/ODataAdapter.js +126 -0
  188. package/libx/odata/index.js +15 -2
  189. package/libx/odata/middleware/batch.js +320 -84
  190. package/libx/odata/middleware/body-parser.js +33 -0
  191. package/libx/odata/middleware/create.js +44 -59
  192. package/libx/odata/middleware/delete.js +23 -12
  193. package/libx/odata/middleware/error.js +30 -6
  194. package/libx/odata/middleware/metadata.js +38 -26
  195. package/libx/odata/middleware/operation.js +93 -69
  196. package/libx/odata/middleware/parse.js +6 -8
  197. package/libx/odata/middleware/read.js +117 -93
  198. package/libx/odata/middleware/service-document.js +22 -19
  199. package/libx/odata/middleware/stream.js +54 -56
  200. package/libx/odata/middleware/update.js +79 -87
  201. package/libx/odata/parse/afterburner.js +191 -175
  202. package/libx/odata/parse/cqn2odata.js +5 -5
  203. package/libx/odata/parse/grammar.peggy +27 -20
  204. package/libx/odata/parse/multipartToJson.js +17 -9
  205. package/libx/odata/parse/parser.js +1 -1
  206. package/libx/odata/utils/etag.js +14 -6
  207. package/libx/odata/utils/index.js +84 -12
  208. package/libx/odata/utils/metadata.js +161 -0
  209. package/libx/odata/utils/postProcess.js +89 -0
  210. package/libx/odata/utils/readAfterWrite.js +134 -17
  211. package/libx/odata/utils/result.js +36 -142
  212. package/libx/outbox/index.js +4 -3
  213. package/libx/rest/RestAdapter.js +115 -182
  214. package/libx/rest/middleware/create.js +28 -24
  215. package/libx/rest/middleware/delete.js +7 -10
  216. package/libx/rest/middleware/error.js +26 -16
  217. package/libx/rest/middleware/operation.js +48 -41
  218. package/libx/rest/middleware/parse.js +128 -126
  219. package/libx/rest/middleware/read.js +20 -27
  220. package/libx/rest/middleware/update.js +26 -31
  221. package/package.json +17 -8
  222. package/server.js +4 -2
  223. package/apis/cds.d.ts +0 -3
  224. package/apis/core.d.ts +0 -21
  225. package/apis/cqn.d.ts +0 -18
  226. package/apis/csn.d.ts +0 -21
  227. package/apis/events.d.ts +0 -18
  228. package/apis/internal/inference.d.ts +0 -18
  229. package/apis/linked.d.ts +0 -18
  230. package/apis/log.d.ts +0 -20
  231. package/apis/models.d.ts +0 -18
  232. package/apis/ql.d.ts +0 -18
  233. package/apis/reflect.d.ts +0 -32
  234. package/apis/server.d.ts +0 -18
  235. package/apis/services.d.ts +0 -22
  236. package/bin/cds-serve.js +0 -56
  237. package/lib/compile/to/gql.js +0 -15
  238. package/lib/srv/protocols/_legacy.js +0 -44
  239. package/lib/utils/jest.js +0 -43
  240. package/libx/_runtime/auth/index.js +0 -193
  241. package/libx/_runtime/auth/strategies/JWT.js +0 -37
  242. package/libx/_runtime/auth/strategies/basic.js +0 -20
  243. package/libx/_runtime/auth/strategies/dummy.js +0 -14
  244. package/libx/_runtime/auth/strategies/ias-auth.js +0 -1
  245. package/libx/_runtime/auth/strategies/mock.js +0 -77
  246. package/libx/_runtime/auth/strategies/xssecUtils.js +0 -93
  247. package/libx/_runtime/auth/strategies/xsuaa.js +0 -38
  248. package/libx/_runtime/common/perf/index.js +0 -19
  249. package/libx/_runtime/common/utils/ensureIEEE754.js +0 -29
  250. package/libx/_runtime/fiori/draft.js +0 -2
  251. package/libx/_runtime/fiori/generic/activate.js +0 -190
  252. package/libx/_runtime/fiori/generic/before.js +0 -201
  253. package/libx/_runtime/fiori/generic/cancel.js +0 -19
  254. package/libx/_runtime/fiori/generic/delete.js +0 -21
  255. package/libx/_runtime/fiori/generic/edit.js +0 -157
  256. package/libx/_runtime/fiori/generic/index.js +0 -25
  257. package/libx/_runtime/fiori/generic/new.js +0 -82
  258. package/libx/_runtime/fiori/generic/patch.js +0 -101
  259. package/libx/_runtime/fiori/generic/prepare.js +0 -57
  260. package/libx/_runtime/fiori/generic/read.js +0 -1340
  261. package/libx/_runtime/fiori/generic/readOverDraft.js +0 -146
  262. package/libx/_runtime/fiori/utils/csn.js +0 -13
  263. package/libx/_runtime/fiori/utils/delete.js +0 -114
  264. package/libx/_runtime/fiori/utils/handler.js +0 -264
  265. package/libx/_runtime/fiori/utils/lockInfo.js +0 -27
  266. package/libx/_runtime/fiori/utils/req.js +0 -23
  267. package/libx/_runtime/fiori/utils/stream.js +0 -36
  268. package/libx/_runtime/fiori/utils/where.js +0 -254
  269. package/libx/_runtime/index.js +0 -22
  270. package/libx/odata/utils/handler.js +0 -120
  271. package/libx/odata/utils/metaInfo.js +0 -410
  272. package/libx/odata/utils/path.js +0 -75
  273. package/libx/rest/RestRequest.js +0 -32
  274. package/libx/rest/index.js +0 -3
  275. package/libx/rest/readme.md +0 -1
  276. /package/libx/common/assert/{type.js → type-strict.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -4,16 +4,139 @@
4
4
  - The format is based on [Keep a Changelog](http://keepachangelog.com/).
5
5
  - This project adheres to [Semantic Versioning](http://semver.org/).
6
6
 
7
+ ## Version 8.0.4 - 2024-07-19
7
8
 
8
- ## Version 7.9.4 - 2024-07-18
9
+ ### Fixed
10
+
11
+ - Atomicity group handling in `$batch`
12
+ - `$batch` im combination with `commit` hooks
13
+ - `continue-on-error` preference for JSON `$batch`
14
+
15
+ ## Version 8.0.3 - 2024-07-12
16
+
17
+ ### Added
18
+
19
+ - Translations for the technical SAP language `1Q` used in support scenarios, for example for translation issues. See https://sapui5.hana.ondemand.com/sdk/#/topic/91f21f176f4d1014b6dd926db0e91070 for more.
20
+
21
+ ### Fixed
22
+
23
+ - Empty feature set by switched off feature toggles
24
+ - Allow deviating response types for `$batch`, e. g. input `multipart` and output `json`
25
+
26
+ ## Version 8.0.2 - 2024-07-09
27
+
28
+ ### Added
29
+
30
+ - `express` is now an optional peer dependency, to indicate to applications to install it as part of their dependencies. It is needed for all runtime scenarios, but can be omitted for pure designtime cases like `cds compile` calls.
31
+
32
+ ### Changed
33
+
34
+ - Creation via draft by association is forbidden with `403` response.
35
+ - New OData adapter captures input of `$search` as plain val without applying OData grammar.
36
+ - ´not null´ is not validated for action/function params. Use `@mandatory` instead.
37
+ - REST adapter rejects unknown input if not annotated with `@open`. Previously, it removed the unknown elements from the payload.
9
38
 
10
39
  ### Fixed
11
40
 
12
- - View resolving for `cds.features.lean_draft`
41
+ - `cds.test` recommends version 7 of `chai-as-promised`. Version 8 is ESM-only and does not work with `cds.test` at the moment.
42
+ - Loading of `cds.plugins` now respects the (internal!) property `cds.env.plugins` again.
43
+ - Proper error handling for invalid draft requests in combination with `$apply`
44
+ - Usage of `Date` values in `cds.ql` expressions
13
45
  - Error in `enterprise-messaging` deploy script
46
+ - Error handling for bad navigation properties (like in `$orderby=prop1/prop2`) in new OData adapter
14
47
  - Properly forward path expression infront of lamda functions for `odata-v2` remote services
15
- - OData queries selecting the same column with `$count=true`
16
- - Closed higher end of version range for dependency on `cds-types`
48
+
49
+ ### Removed
50
+
51
+ - Type information is no longer shipped as part of `@sap/cds`. Instead, the `@cap-js/cds-types` package has to be explicitly installed as devDependency for projects requiring type support. Installing the package is sufficient to add type support back in.
52
+ - Invalid annotations `@Common.FieldControl.Mandatory` and `@FieldControl.Mandatory` → use `@Common.FieldControl: #Mandatory` instead
53
+ - Invalid annotations `@Common.FieldControl.ReadOnly` and `@FieldControl.ReadOnly` → use `@Common.FieldControl: #ReadOnly` instead
54
+
55
+ ## Version 8.0.1 - 2024-06-20
56
+
57
+ ### Fixed
58
+
59
+ - always enforce `attic` profile
60
+
61
+ ## Version 8.0.0 - 2024-06-19
62
+
63
+ ### Added
64
+
65
+ - Profile `[attic]` to quickly test with deprecated features like so `CDS_ENV=attic cds watch` or `CDS_ENV=attic jest`.
66
+ - New OData Adapter: Default location header for actions that return an entity (custom handler must set the response status code to 201)
67
+ - New `cds.utils` methods `.stack()` and `.location()` to get the stack trace and location of the caller (not publicly released yet).
68
+ - Protected the methods inherited from `LinkedDefinitions` prototype against accidental and undetected interpretation and usage as CSN element: An error is thrown, when trying to access one of the usual CSN properties, like `.name`, `.kind`, `.type`, ... on them.
69
+ - Escaping single quotes with doubled ones `''` in `.properties` files
70
+ - Support for `@sap/xssec^4`
71
+ - New OData and REST adapter pass error to next such that a custom error middleware added to `cds.middlewares.after` is called
72
+ + Note: The custom middleware must preceed the default error middleware (if it remains), e.g., by adding via `unshift()`
73
+ - Support for extensibility scenarios in RESTful protocol adapters
74
+ - The built-in CORS middleware can be enabled explicitly with `cds.server.cors = true`. By default, this is `false` if in production.
75
+ - Remote Service: `useCache` destination option is enabled by default
76
+ - New model processor `cds.compile.to.hana` to generate `.hdbtable`, `.hdbview` files including migration table support.
77
+ - Added `cds.requires.connectivity` indicating whether SAP BTP Connectivity service is required.
78
+ - Support inline where conditions in `@restrict` like `where: (prop = $user.id)`.
79
+
80
+ ### Changed
81
+
82
+ - Meant for tests only: `cds.User.default` points to a singleton instance of `cds.User` instead of a class now.
83
+ - Never public: `express.Request.user` or `.tenant` must not be used anywhere
84
+ > NOTE: that was never public nor guaranteed to exist at all!
85
+ > Always only use `cds.Request.user/tenant` or `cds.context.user/tenant`.
86
+ - Never public: `cds.Request.protocol` was 'odata-v4' and is now 'odata'.
87
+ - Errors sent to clients now include a stack trace in the `stack` property during development and in tests
88
+ > NEVER test with `.toEqual()` but always only with `.toMatchObject()`.
89
+ - Node.js 18 is now the minimum required Node.js version. Version 16 is no longer supported.
90
+ - `cds.fiori.draft_deletion_timeout` is enabled with default value `30d`
91
+ - `srv.on('error')` is only invoked for errors during `srv.dispatch()`, i.e., for errors that occur while the respective request is being processed by a service instance
92
+ + Specifically, `srv.on('error')` is no longer invoked for an error that occurs in the protocol adapter. Instead, use a custom middleware added to the beginning of `cds.middlewares.after`.
93
+ + This change does not affect the legacy OData adapter.
94
+ - In `bypass_draft`, direct active modifications now have event `CREATE` instead of `NEW`.
95
+ - `cds compile --to serviceinfo` returns the correct URL path for Java applications.
96
+ - The default index page is no longer served if `NODE_ENV` is set to `production`. Set `cds.server.index = true` to restore previous behavior.
97
+ - Delete deprecated cds build stub.
98
+ - Multiple entries in `cds.requires.<name>.vcap` are now ANDed instead of ORed, so that e.g. multiple bound services of the same kind can be filtered more easily. For example, `{ "vcap": { "label": "xsuaa", "tag": "broker" }}` can be used to only bind an XSUAA instance (out of many) with the `xsuaa` label AND the `broker` tag.
99
+ - Role `cds.Subscriber` removed from predefined mock users.
100
+ - REST adapter uses managed transactions
101
+ - The default index page got a new design.
102
+ - Syntax error in batch body is handled as bad request
103
+
104
+ ### Fixed
105
+
106
+ - Failing logins with internal pre-release versions from git main branches.
107
+ - Prevent inconsistent ordering when selecting messages from outbox
108
+ - Creating child-nodes with `@Core.Immutable` fields
109
+ - ETag handling in draft cancel
110
+ - `if-none-match` with asterisk in update handler
111
+ - `odata.mediaContentType` for empty stream is always `null`
112
+ - `$select/$expand` large binaries by draft edit and activate does not return large binaries
113
+ - Error message for actions/functions with wrong path
114
+ - Direct `READ` of entities that are `@cds.autoexposed` when the `cds.env.features.odata_new_adapter` flag is set to `true`
115
+ - Reject `PATCH` requests where foreign keys cannot be determined statically or where multiple entities need to be updated
116
+ - actions / functions bound to a collection of entities in case `cds.features.odata_new_parser` is enabled
117
+ - `cds.compile.to.hana` generates `afterImage` only if migration tables exist.
118
+
119
+ ### Removed
120
+
121
+ - Legacy leftovers for old middlewares: `ExtensedModel:middleware4` (in combination with extensibility)
122
+ - Legacy request header `x-correlationid` which was ajways just a misspelled variant of `x-correlation-id`.
123
+ - Legacy configuration option `cds.requires.middlewares = false`
124
+ - Legacy configuration option `cds.features.serve_on_root = true`
125
+ - Legacy draft implementation `cds.fiori.lean_draft = false`
126
+ - Legacy API `req.user.locale`. Use `req.locale` instead.
127
+ - Legacy API `req.user.tenant`. Use `req.tenant` instead.
128
+ - Legacy configuration `cds.drafts.cancellationTimeout`. Use `cds.fiori.draft_lock_timeout` instead.
129
+ - Legacy annotation `@assert.enum`. Use `@assert.range` instead.
130
+ - Legacy properties of `cds.Request`: `req.tokenInfo`, `req._.shared`, and `req.attr`
131
+ - Legacy type facade files from `@sap/cds/apis/...`. Use `@sap/cds` as only type import.
132
+ - Legacy quirks mode. From now on, `cds.ql` generates spec compliant `ref` paths in INSERT/UPDATE/DELETE CQNs. The database services expect the same.
133
+ + Use `{ INSERT: { into: { ref: ['Authors']}}}` instead of `{ INSERT: { into: 'Authors' }}`
134
+ + Use `{ UPDATE: { entity: { ref: ['Authors']}}}` instead of `{ UPDATE: { entity: 'Authors' }}`
135
+ + Use `{ DELETE: { from: { ref: ['Authors']}}}` instead of `{ DELETE: { from: 'Authors' }}`
136
+ - Deprecated csn entity proxy `<entity>_texts`. Use `<entity>.texts` instead.
137
+ - Deprecated built-in `cds.compile.to.gql` and `cds.compile.to.graphql` compile targets. These are provided by `@cap-js/graphql` plugin versions >= 0.9.0.
138
+ - Deprecated API `srv.stream`. Use `SELECT` with a single `cds.LargeBinary` column instead.
139
+
17
140
 
18
141
  ## Version 7.9.3 - 2024-06-27
19
142
 
@@ -508,7 +631,7 @@ POST /Orders
508
631
  - Improve error message for unsupported transformations with `$apply`
509
632
  - For database dialect H2, specialized, localized views for languages `de` and `fr` are no longer generated.
510
633
  - Authentication kinds `jwt`, `xsuaa`, and `ias` throw an error during bootstrapping if the necessary credentials are
511
- unavailable.
634
+ unavailable.
512
635
  Previously, a warning was logged, and authentication was skipped.
513
636
  See `cds bind`/ Hybrid Testing in CAPire for how to combine local development and cloud resources.
514
637
  - The Typescript definitions now make use of the default export.
@@ -684,3657 +807,3 @@ parser now removes all unneeded `*`.
684
807
  - `cds deploy --to hana` is now part of `@sap/cds-dk`.
685
808
  - Deprecated compat mode `cds.env.features.cds_tx_protection = false`
686
809
  - Beta `AuditLogService` and out-of-the-box audit logging. Use the plugin `@cap-js/audit-logging` instead.
687
-
688
- ## Version 6.8.4 - 2023-06-14
689
-
690
- ### Fixed
691
-
692
- - `$metadata` requests for multitenant applications
693
-
694
- ## Version 6.8.3 - 2023-06-13
695
-
696
- ### Fixed
697
-
698
- - `cds build` no longer reports CAP Java Classic runtime usage by mistake.
699
- - `cds version` prints the local `@sap/cds` version, even if called from a different `@sap/cds` installation.
700
- - User challenges handling in case of `cds.env.requires.auth.restrict_all_services: false`
701
-
702
- ## Version 6.8.2 - 2023-05-26
703
-
704
- ### Fixed
705
-
706
- - EDMX texts for extended tenants based on `@sap/cds-mtx` now appear correctly again.
707
- - `@assert.range` for DateTime/Date/Time/Timestamp
708
- - Nested `$expand` OData query to the `texts` compiler-generated composition for entities with localized elements.
709
- For example, similar OData requests `Entity?$expand=items($expand=item($expand=texts))` now should work as expected.
710
- - `req.subject` would occasionally be incorrect when a query had been executed prior to it.
711
- - cds plugins are also fetched from the development dependencies (`devDependencies`) section in `package.json`
712
- - `cds build` now correctly resolves complex models of mtx extension projects
713
-
714
- ## Version 6.8.1 - 2023-05-04
715
-
716
- ### Fixed
717
-
718
- - DROP statements for SQLite and PostgreSQL no longer miss a comma at the end
719
-
720
- ## Version 6.8.0 - 2023-05-02
721
-
722
- ### Added
723
-
724
- - Global cds-dk version is now included in tabular output of `cds v -i`.
725
- - Audit logging support for the OAuth2 Plan
726
- - Feature flag to limit the maximum number of requests in an OData batch request. The max number can be specified with a number in `cds.odata.batch_limit`.
727
- - Custom authentication in `enterprise-messaging`
728
- - Requests with lambda expressions are rejected by remote services of kind `odata-v2`
729
- - `cds build` ignores invalid entries in `undeploy.json`
730
- - New `minorUnit` element in `sap.common.Currencies` for how many fractions the minor unit takes (e.g., `0` or `2`). See https://www.npmjs.com/package/@sap/cds-common-content for matching content.
731
- - Support for `$user.<attr> is null` and `$user.<attr> is not null` in `@restrict.where`. `is null` matches `null` and `[]`, `is not null` matches arrays with at least one entry as well as `!= null` if no array.
732
- - Plugins are now also fetched from `devDependencies`, unless `NODE_ENV === 'production'`
733
- - Plugins can now provide `cds` configurations in their package.json.
734
- - Support in OData entities with special letters (like ó,â,ü) in names.
735
-
736
- ### Changed
737
-
738
- - Texts for _Country_ are changed to _Country/Region_ in `@sap.common.Countries`
739
- - Resolved an issue where selection strategies of destination options in multitenant applications were not working correctly, resulting in runtime errors.
740
- The fix relies on the `@sap-cloud-sdk/connectivity` npm package to be installed.
741
- - Precision of timestamp used in outbox message increased to 100 nanoseconds (`YYYY-MM-DD hh:mm:ss.nnnnnnn`)
742
- - When another user locks a draft, the error message now includes the username of that user
743
-
744
- ### Fixed
745
-
746
- - Fix exported types of the `cds` core API
747
- - cds build uses the correct path if no project dir is given
748
- - Read after write for updates on-to-one navigation
749
- - Error in $orderBy in combination with @Core.MediaType property
750
- - Fixes in lean-draft
751
- - Fixed an issue where the combined `$search` and `$expand` query and localized data was returning empty results on SAP HANA
752
- - Tests using `cds.test` no longer crash with a segmentation fault if `injectGlobals: false` is set in the Jest configuration.
753
- - Handlers registered with `cds.on('shutdown')` are now called with an `err` argument if the shutdown happened in response to uncaught exceptions or unhandled rejected Promises.
754
- - Log output on uncaught exceptions, or unhandled rejected Promises now is done via `cds.log` instead of `console`.
755
- - New config option `cds.env.server.force_exit_timeout` allows to configure the timeout in ms, after which we force-exit the server (default: 1111) if it didn't do so as expected after a prior `server.close()`. Values `false` or `0` disable force-exit.
756
- - Require custom auth relative to project root when using pluggable middlewares
757
-
758
- ## Version 6.7.2 - 2023-04-24
759
-
760
- ### Fixed
761
-
762
- - Try to destroy nonexistent socket in case of custom streaming implementation
763
- - Draft: Missing field `IsActiveEntity` in target path of error messages during `draftActivate`
764
- - Minor fixes for `cds.fiori.lean_draft`
765
- - Error in media type check when no `Content-Type` header is found
766
-
767
- ## Version 6.7.1 - 2023-04-14
768
-
769
- ### Changed
770
-
771
- - Calling a parameterized view without params error now results in the status code 400 with an improved error message.
772
-
773
- ### Fixed
774
-
775
- - cds build error CreateListFromArrayLike
776
- - Disabling of arbitrary user config in mock auth config using `"users": { "*": false }`
777
- - Various fixes for `cds.fiori.lean_draft`
778
- - User attributes that look like numbers are quoted in SQL clause for `@restrict`
779
-
780
- ## Version 6.7.0 - 2023-03-28
781
-
782
- ### Added
783
-
784
- - Config `cds.ql.quirks_mode` as a compatibility flag to still support behaviors which are undocumented or even against the specifications, for example, CQN:
785
- ```js
786
- let q = INSERT.into('Books')
787
- //> According to CQN spec should return:
788
- {SELECT:{from:{ref:['Books']}}}
789
- //> But today returns:
790
- {SELECT:{from:'Books'}}
791
- ```
792
- The default in cds6 is `true` → to be changed to `false` with cds7.
793
- - `cds build` now checks extension point restrictions defined by the SaaS app provider. `cds build` fails if any restrictions are violated.
794
- - Typings for `cds.spawn()`
795
- - Typings for `entity.drafts`
796
- - Typings for Winston logger
797
- - Typings for `cds.context`
798
- - Typings for `service.on`, `service.before`, and `service.after` for actions and CRUD events
799
- - CLI command `cds env` now allows property paths with `/` instead of `.`, which allows usages like that:
800
- ```sh
801
- cds env requires/cds.xt.ModelProviderService
802
- ```
803
- - `cds.env` now allows to statically set/add profiles via `cds.profile` and `cds.profiles` in package.json.
804
- - `cds.env` now also supports using profiles in preset definitions, i.e., in `cds.requires.kinds`.
805
- - `cds deploy` prints a warning when using Cloud Foundry client version less than 8.
806
- - `req.subject` to conveniently operate on the subjects targeted by the request. Example usage:
807
- SELECT.one.from(req.subject) //> returns single
808
- SELECT.from(req.subject) //> returns array
809
- UPDATE(req.subject) //> updates one or many
810
- DELETE(req.subject) //> deletes one or many
811
- - `cds-serve` as a future replacement for `cds serve` in npm scripts. Applications can adopt this now to ease the transition to the next major version.
812
-
813
- ### Changed
814
-
815
- - CQL types now attach additional functionality to entities where appropriate
816
- - `cds.log().trace()` now logs stack traces in `DEBUG` level, before that was on `TRACE`/`SILLY` level only
817
- - Plain SQL queries now have `req.event === undefined`. Formerly this had non-deterministic values.
818
- - Plain SQL queries don't allow registering custom handlers, other than for event `'*'`.
819
- - Plain SQL queries are only supported on database services, not on application services.
820
- - CQN representation of `columns=*` is not allowed anymore, instead `columns=['*']` should be used. This also applies to expand.
821
- - Only draft roots can be created via direct, non-navigation OData `POST` requests.
822
- - Flag `cds.features.fiori_preview` changed to `cds.fiori.preview`. The old flag still works as well.
823
- - Flag `cds.features.fiori_routes` changed to `cds.fiori.routes`. The old flag still works as well.
824
-
825
- ### Fixed
826
-
827
- - Specifying a key in `SELECT.from(...)` is now typed to produce a single result instead of an array of results
828
- - Proper handling of `IsActiveEntity` in error paths
829
- - For cloud events using AMQP, the type is set to `application/cloudevents+json`
830
- - Use `message` property in typings.
831
- - Typings for `cds.on('bootstrap', app => {app.use(...)`
832
- - Return types for `User` and `delete` in typescript
833
- - Typings for connect options
834
- - Typings for `req.error`
835
- - Deployment in sidecar
836
- - Error with restricting an entity and requesting it with `$apply` in combination with aggregate
837
- - Combined usage of `$skiptoken` and `$skip`
838
- - Error `package.json file is missing` in mtx extension builds
839
- - CLI commands w/ unknown arguments (`cds --foo`) fail again with a proper error message
840
-
841
- ## Version 6.6.2 - 2023-03-17
842
-
843
- ### Fixed
844
-
845
- - Exception during `cds deploy` without mtx
846
- - Service name specified with `cds deploy --to hana:serviceName` takes precedence over environment variables.
847
-
848
- ## Version 6.6.1 - 2023-03-09
849
-
850
- ### Added
851
-
852
- - `cds.xt.TENANT_UPDATED` event is emitted once a tenant is extended
853
-
854
- ### Fixed
855
-
856
- - `TypeError` when using the query API with an unknown target in x4 flavor
857
- - The setting for `cds.requires['cds.xt.DeploymentService'].lazyT0` is now recognized in the VS Code schema validation.
858
- - The HDI deployment `stdout` logs are now only visible for `DEBUG` level if triggered via `cds-mtxs`. They are also streamed to `logs/<tenant>.log` in case you need the full deployment output, even without `DEBUG` enabled.
859
- - `.forUpdate` when used for etags
860
- - Prevent `TypeError` if an existing draft does not have admin data
861
- - Outbound-streaming error handling
862
-
863
- ## Version 6.6.0 - 2023-02-27
864
-
865
- ### Added
866
-
867
- - Improved error handling for `cds build` if the SaaS base model is missing in an extension project.
868
- - Support for reliable paging using `$skiptoken`. Can be activated via `cds.query.limit.reliablePaging = true`
869
- - Built-in models are now added to existing model options of custom build tasks.
870
-
871
- ### Changed
872
-
873
- - `cds.serve(ServiceName)` (and `cds serve -s ServiceName`) now exactly serve services with the given names. Previously, all services that ended with the given name were served as well, e.g., `MyServiceName` and `ServiceName`, which might be problematic for applications that bootstrap services one by one.
874
- - Optimize `@cds.persistence.journal` filtering for `last-dev` CSN file.
875
-
876
- ### Fixed
877
-
878
- - `cds deploy --to hana` no longer calls `cds bind` when `VCAP_SERVICES` is provided, for example, via `default-env.json`.
879
- - `$search` on an entity without String elements
880
- - Only elements from type `cds.String` are searchable when combining `$apply` and `$search`
881
- - Error message for missing database connection in draft case
882
- - Extensibility with in-memory Sqlite
883
- - OData adapter error messages
884
- - Columns in navigation path are now added to the SELECT.columns in the new parser
885
- - Application service calls on draft-enabled entities using aliases
886
- - Custom mtxs build tasks now use the correct default `src` folder value.
887
- - `cds build` adds a `.hdiconfig` file when creating SAP HANA migration tables if none exists.
888
- - UPSERTs using reserved keywords
889
- - Fix outbound-streaming error handling
890
- - Rollback transaction if inbound streaming fails
891
- - Custom database initialization in `db/init.js` now skips the `t0` tenant for multitenant apps.
892
- - Concurrent etag calculation for UPDATE and DELETE
893
- - Typings for `cds.delete()`
894
- - CQN for `not` operator with OData functions
895
- - Expand on composition of aspect for draft-enabled entities
896
- - Better error messages are provided for errors with HTTP status codes `400`, `500`, and `501`
897
-
898
- ## Version 6.5.0 - 2023-01-27
899
-
900
- ### Added
901
-
902
- - New aspect `sap.common.TextsAspect` in common.cds
903
- - New syntax for collection-bound entities
904
-
905
- ### Changed
906
-
907
- - Successive calls to `SELECT.where()` wraps existing clause in brackets if it contains `or`. E.g.
908
- ```js
909
- SELECT.from `X` .where `x` .or `y` .where `z`
910
- //> SELECT from X where (x or y) and z`
911
- ```
912
- - `cds build` for SAP HANA now adds an `engines.node` version to the generated `db/package.json`. This will help in the future when runtime environments change their default to some version higher than the one supported by `@sap/hdi-deploy`.
913
- - `cds build` checks the consistency of built-in models for Java projects. An error is logged if some model files cannot successfully be resolved, indicating that a required npm module might be missing.
914
- - Status code of draft actions are set in respective handler instead of protocol adapter
915
- - `cds deploy --dry` no longer loads the `sqlite3` module by mistake. This fixes a regression when building Java projects. As a side effect, a file with the name `undefined` was created in the project root folder.
916
- - Internal representation of pseudo roles `internal-user` and `system-user`
917
-
918
- ### Fixed
919
-
920
- - Resolve i18n folders from the root directory
921
- - Types for `cds.test`
922
- - Types for `srv.send`
923
- - Optimized Search: Search queries for localized entities will now use default values if no localized data is found in the corresponding localized tables on SAP HANA. Correct aliasing by search queries with navigation.
924
- - Resolution of `type of` references during minify in bootstrap
925
- - Generation of odata-v2 URL in case of select=* in `urlify()`
926
- - Build resets changed `cds.env` and `cds.root` when finished
927
- - Expand error when using infix filters
928
- - CDS configuration schema validation for `@sap/cds-mtxs`
929
- - Typings for QL API
930
- - Return types of asynchronous service API
931
-
932
- ## Version 6.4.1 - 2022-01-16
933
-
934
- ### Fixed
935
-
936
- - `cds build` correctly creates a `resources.tgz` file for MTXS projects on Windows
937
- - `cds.deploy` for SAP HANA now doesn't try to search for a globally installed `@sap/hdi-deploy` if there's no `npm` installed, e.g., on a Node.js server without `npm`
938
- - Signature for `cds.ql.UPSERT`
939
- - Signature for `<srv>.delete().where()`
940
- - Signature for `SELECT.alias`
941
- - `UPSERT` requests for SQLite if only keys are provided
942
- - `cds.test` doesn't log database resets with `autoReset` enabled anymore
943
- - The `cds.deploy` output for SAP HANA is now correctly formatted in Kibana
944
- - SAP HANA stored procedures containing implicit selects
945
- - Shorthand configuration for `graphql` in `cds.env.protocols`
946
- - If `cds.env.protocols` is set, `cds.requires.middlewares` is automatically turned on
947
- - `cds.context` middleware is split to initial handling of request correlation and user propagation
948
- - Fix view resolving and managed data for UPSERT
949
- - `cds.linked` supports polymorphic self links like in: `action foo( self: [many] $self, ...)`
950
- - Error with `@odata.draft.enabled` and `@restrict`
951
- - Skip mandatory check on navigation properties for write requests
952
-
953
- ## Version 6.4.0 - 2022-12-15
954
-
955
- ### Added
956
-
957
- - Signatures for `ql.UPSERT`
958
- - Runtime support for flat database UPSERTs
959
- - `enterprise-messaging`: Support for `@sap/cds-mtxs`
960
- - `persistent-outbox`: Support for parallel processing with option `parallel: true` as well as pluggable processor functions through `service.outbox.process` (beta)
961
- - `cds version` now also lists packages with `@cap-js/` prefix from dependencies
962
- - `cds.context.http` is now available for webhook-based requests
963
- - `cds build` for SAP HANA migration tables now only saves model entities annotated with `@cds.persistence.journal` as `last-dev` version.
964
- - `cds deploy` now uses the `VCAP_SERVICES` environment variable (if set), and skips `cf` operations in this case
965
- - Support for timestamp precision greater than 3 digits of fractional seconds
966
-
967
- ### Changed
968
-
969
- - Added several missing signatures in CQN types that are now in accordance with the current documentation.
970
- - `.columns(…)` of both `cql.SELECT` and `cql.INSERT` give improved code completion when paired when appropriate type definitions are present
971
- - Status code of error messages caused by empty `not null` fields is changed from `400` to `500` on database layer. As a result, the error message `Value is required` in production will be replaced by `Internal server error` in the HTTP response.
972
- - Underscores in environment variables can now be escaped by two `__` to set keys in `cds.env`. For example, use `CDS_FEATURES_WITH__MOCKS=...` to set `features.with_mocks`. Note that previously, this ended up as `features: { with_: { mocks:... }}`, so in rare cases, it might yield unexpected results.
973
- - `persistent-outbox`: Only programming errors lead to `process.exit()`, unrecoverable ones are only logged, and their `attempts` are updated to `options.maxAttempts`
974
- - Global configuration of CSRF-token handling for remote services `cds.env.features.fetch_csrf` is deprecated. Instead, please use `csrf: true/false` and `csrfInBatch: true/false` in the configuration of your remote services. These options will allow to configure CSRF-token handling for each remote service separately.
975
- - `cds build` no longer creates `engines` entry in package.json in case none has been defined. The Node.js version matched the minimal supported version of the CDS runtime and might, therefore already be outdated.
976
- - For streamlined MTX, `@sap/cds` now uses the custom SAP Service Manager client built into `@sap/cds-mtxs`
977
- - Require new package `@cap-js/graphql` for `cds compile -2 graphql`
978
-
979
- ### Fixed
980
-
981
- - Type `expr` of CQN can now describe function calls
982
- - Added missing optional `options` parameter in signature of `cds.serve`
983
- - `cds deploy` handles empty result from `cf` call correctly
984
- - When using CQL projections with array types, the type of the projection variable will now be correctly inferred as a single element of that array
985
- - `cds deploy` logs without label
986
- - Localized draft requests with nested expand in the case of `to many` now return localized data
987
- - Protected service root for REST adapter
988
- - `cds build` logs tar error message
989
- - Resolve view only with renamed fields in `orderBy` case
990
- - In case of `$apply`, no default values for `top` or `skip` are set in subselects
991
- - Environment variables like `cds.requires.<service>.kind...` now consistently override services set in, e.g. `package.json`
992
- - Expand of composition backlink now accesses draft instance instead of active
993
- - Performance of server bootstrap for services with lots of entities
994
- - Error with virtual properties in expand combined with draft
995
- - `req.tenant` is properly propagated by custom authentication in odata and rest
996
- - Error with `SiblingEntity` in draft
997
- - Quoting of keys typed as `cds.String` in error targets. Error targets are a relative resource path to correlate error
998
- messages with the corresponding text input filed in the UI in an OData HTTP error response body for errors, warnings,
999
- and info messages. For example:
1000
- - Error with `GET` on `actions`
1001
-
1002
- ```diff
1003
- HTTP/1.1 400 Bad Request
1004
- OData-Version: 4.0
1005
- content-type: application/json;odata.metadata=minimal
1006
- Connection: close
1007
- Content-Length: 145
1008
-
1009
- {
1010
- "error": {
1011
- "code": "400",
1012
- "message": "Value is required",
1013
- - "target": "items(ID=string-key-1)/text",
1014
- + "target": "items(ID='string-key-1')/text",
1015
- "@Common.numericSeverity": 4
1016
- }
1017
- }
1018
- ```
1019
-
1020
- - Application crash if batched Uri uses invalid percent-encoding
1021
- - `cds build` for SAP HANA no longer produces `hdbtabledata` for CSV files that refer to non-existing entities. This can be the case for imported content packages that bring CSV files for entities not used in the application model.
1022
- - `cds build` for SAP HANA now gives precedence for CSV files from application layer. This is important for imported content packages that bring CSV files that shall be overwritten in the application layer.
1023
- - `cds build` for Java no longer adds the service `cds.xt.MTXServices` to the application model.
1024
- - `cds build` no longer fails when creating large resource TAR archives for MTXS projects.
1025
-
1026
- ### Removed
1027
-
1028
- - Removed `PreconditionFailedError` when sending a request with an `if-match` header on an entity without an ETag
1029
- - Check for forbidden deep operations for associations on database layer. All non-key fields for associations provided by request are ignored. Please check https://cap.cloud.sap/docs/guides/providing-services#associations-vs-compositions for more information. Note that this is a breaking change for applications that rely on checks for forbidden deep operations by runtime.
1030
-
1031
- ## Version 6.3.2 - 2022-11-21
1032
-
1033
- ### Fixed
1034
-
1035
- - `cds deploy` reports errors correctly
1036
- - Reference resolution in QL API
1037
- - `cds.parse.path` to correctly handle special characters
1038
- - `cds build` issues on Windows: build with a large number of files and build on Git Bash.
1039
- - `odata` as default protocol for enabled middlewares feature
1040
-
1041
- ## Version 6.3.1 - 2022-11-04
1042
-
1043
- ### Fixed
1044
-
1045
- - `cds build` no longer reports false positive validation errors for built-in MTX models like `@sap/cds/srv/mtx` or `@sap/cds-mtxs/srv/bootstrap`
1046
- - `cds deploy` handles empty result from `cf` call correctly
1047
- - `$search` fails on columns composed by a CQL expression that uses the SAP HANA `coalesce` predicate
1048
- - Draft ownership was erroneously checked for bound actions on active instances
1049
- - `cds watch/run/serve --with-mocks` no longer start randomly with missing mocked services. This could happen if previous runs crashed with errors and left a bad state in the local service registry.
1050
-
1051
- ## Version 6.3.0 - 2022-10-28
1052
-
1053
- ### Added
1054
-
1055
- - Additional type signatures for service methods in the query API
1056
- - In case of an error in a batch request, the @Core.ContentID is added to the details of the error message
1057
- - Extensibility: Use i18n files from extensions in edmx calculation
1058
- - In messaging, you can listen to all messages in a queue by subscribing to `'*'`
1059
- - Improved Log formatting for Cloud Foundry
1060
- - In remote services: Correct OData type conversion when using an imported csn
1061
- - Types for `SELECT.forUpdate({wait})`
1062
-
1063
- - `cds.ql` now provides a dedicated method `.alias()` to choose table aliases, e.g.:
1064
- ```js
1065
- SELECT.from(Authors).alias(a)
1066
- ```
1067
- > Note: unfortunately we can't use method `.as()` instead of `.alias()` for compatibility reasons
1068
-
1069
- - `cds.ql` now supports constructing queries with `where exists` clauses, e.g.:
1070
- ```js
1071
- SELECT.from(Authors).where({exists:'books'})
1072
- SELECT.from(Authors).where({'not exists':'books'})
1073
- SELECT.from(Authors).alias('a').where({ exists: // or 'not exists'
1074
- SELECT.from(Books).where({author_ID:{ref:['a','ID']}})
1075
- })
1076
- ```
1077
- > Note: last query is equivalent to first
1078
- - `cds compile` and `cds deploy` now also support dialect `h2`
1079
- - New (easier) `jwt` and `xsuaa` authentication middleware for pluggable middlewares
1080
-
1081
- ### Changed
1082
-
1083
- - In `enterprise-messaging`, emitting CloudEvents messages sets the HTTP header `Content-Type: application/cloudevents+json`
1084
- - Added type definition for `cds.User`
1085
-
1086
- ### Fixed
1087
-
1088
- - Change signature of cqn `SELECT.limit.offset` and `SELECT.limit.rows` to `val` instead of `number`
1089
- - Parsing of store procedure SQL calls, including the schema name. For example, `CALL "SCHEMA"."PROC"(?)` and `CALL SCHEMA.PROC(?)`
1090
- - Add property name in the error message on validation of the value
1091
- - Kibana and Cloud Foundry formatter: do not log cookie header value
1092
- - Missing SQL aliases for `$search` queries combined with `$orderBy` query option
1093
- - The return value of `cds.connect` is now correctly typed as a `Promise`
1094
- - `req.data` is no longer modified for remote services in the case of `odata-v2` inserts
1095
- - `cds.localize` no longer ignores i18n files defined within CDS model scope and outside project scope
1096
- - Don't modify query in `fioriGenericRead` handler
1097
-
1098
- ## Version 6.2.3 - 2022-10-21
1099
-
1100
- ### Fixed
1101
-
1102
- - New continuation for incoming messages
1103
- - `cds.test` no longer fails if used in ESM modules with `mocha` (`ERR_REQUIRE_ESM` error)
1104
- - Collection-bound actions/functions don't need draft ownership check
1105
-
1106
- ## Version 6.2.2 - 2022-10-13
1107
-
1108
- ### Fixed
1109
-
1110
- - Fix environment variable `OLD_MTX`, allowing `cds build` to create artifacts for classic `@sap/cds-mtx` library
1111
-
1112
- ## Version 6.2.1 - 2022-10-05
1113
-
1114
- ### Fixed
1115
-
1116
- - In the CDS configuration, custom profiles now have precedence over the (implicit) default `[development]` profile, irrespective of insertion order.
1117
- - `cds test` is now compatible with new `axios` 1.x
1118
-
1119
- ## Version 6.2.0 - 2022-10-04
1120
-
1121
- ### Added
1122
-
1123
- - Types for using tagged template variants of several CQL constructs
1124
- - Types for calling shortcut versions of CQL constructs (`SELECT(...)` in addition to `SELECT.from(...)`, etc.)
1125
- - Types for `cds.test`
1126
- - Types for `cds.log().setFormat()`
1127
- - Support for `redis-messaging` (beta)
1128
- - Log the cds version when starting the server
1129
- - Support for non-root entities as the main draft entity
1130
- - Support for IAS authentication using kind `ias-auth`
1131
- - Warning if multiple installations of `@sap/cds` were found when serving requests
1132
- - Wildcard expansion `('*')` of properties in QL is now typed
1133
- - Support for extended models in custom transactions and background processes
1134
- - `cds build` logs detailed error messages if required service models cannot be resolved or aren't defined in custom build tasks.
1135
- - Support for additional data types `cds.UInt8`, `cds.Int16`, `cds.Int32`, `cds.Int64`
1136
- - Typings for `cds.utils`, `req.entity`
1137
- - Optimized server startup for projects with large models and high numbers of services.
1138
- Can be switched off by setting config `cds.features.precompile_edms = false` in case of problems.
1139
- - Set default header to `application/octet-stream` while sending binary to remote
1140
- - OData temporal query params `$at`, `$from`, `$to`, `$toInclusive` can be used in custom handlers
1141
- - Reserved keywords from compiler api available at `cds.compile.to.[cdl, sql.sqlite]`
1142
- - Improved `winston` integration in `cds.log`
1143
-
1144
- ### Changed
1145
-
1146
- - `cds.debug()` now returns undefined instead of falsy if debug is switched off. This allows usages like that:
1147
- ```js
1148
- const DEBUG = cds.debug('whatever')
1149
- DEBUG?.(...)
1150
- ```
1151
- - All MTX-related modules have been refactored and moved to `@sap/cds-mtxs`.
1152
- Ensure to also upgrade to the latest version of `@sap/cds-mtxs` when upgrading `@sap/cds` to avoid any breaking change effects.
1153
- - SQLite database file endings have been changed to `.sqlite`, so third-party tools (e.g. VS Code extensions) can deduce the file type.
1154
- - Method `disconnect()` in db services empties db pool w/o removing db services. In special cases (like tests), cleaning-up db service should be done manually while deleting `cds.services.db` and `cds.db`.
1155
- - Prefer HANA driver that is required in package.json of project root
1156
-
1157
- ### Fixed
1158
-
1159
- - Queries like `SELECT.from(Foo).where({a:1}).or({b:2}).and({c:3})` erroneously resulted in `SELECT from Foo where (a=1 or b=2) and c=3`
1160
- - Signatures for QN `order_by` expressions are now in line with the capire doc
1161
- - Signatures for QL operations are now more specific
1162
- - `basic-auth` does not inherit users of `mocked-auth`
1163
- - `cds.localize` now ignores i18n files defined outside the project scope.
1164
- - Allow `@Capabilities.NavigationRestrictions.RestrictedProperties` to be specified in the format `{ InsertRestrictions: { Insertable: false } }`
1165
- - Bound actions/functions while calling remote service
1166
- - `$search`: Search on localized projections/views does not always return the localized data
1167
- - `cds push` now shows better output for failed extension validations
1168
- - Aliased parameters in REST parser
1169
- - `cds.deploy` now logs the correct filename for multitenant SQLite
1170
- - HDI configuration data (e.g., `./cfg`, `.hdiignore`) and HANA native artifacts have not always been copied into the `sdc` folder of an MTX sidecar module
1171
- - OData URL to CQN parser (`cds.env.features.odata_new_parser`) now supports functions with no arguments
1172
- - Runtime exception for `PATCH` HTTP request with an empty payload body and read-only field
1173
- - Streams in draft caused SQL error
1174
- - Better response state handling during `cds deploy` to Cloud Foundry.
1175
- - Draft: patch on draft-enabled entity with a composition of one
1176
- - Maximum stack trace exceeded in generic audit logging implementation
1177
- - The protocol adapter logs the decoded URI or the original one if it is invalid
1178
- - REST: reject action calls with round brackets (parentheses). For example, the request `/Books(1)/bookShelf.CatalogService.rate()` is now rejected.
1179
- - `cds deploy` and `cds run/serve/watch` no longer print terminal escape sequences (`x1b...`) if they run non-interactively.
1180
- - Some fields in entities like `path` generated invalid SQL
1181
-
1182
- ## Version 6.1.3 - 2022-09-13
1183
-
1184
- ### Added
1185
-
1186
- - Configuration to change maximum body size in bytes for remote requests: `cds.env.remote.max_body_length: 1000` sets it to 1 MB
1187
-
1188
- ### Changed
1189
-
1190
- - For structured input, foreign keys are generated as non-enumerable properties on application-service layer
1191
-
1192
- ### Fixed
1193
-
1194
- - Deep insert/update/upsert requests where the key of an association is provided in a structured format will not be rejected anymore if the target has default or mandatory fields
1195
- - For some configurations, mtxs services were bootstrapped twice
1196
-
1197
- ## Version 6.1.2 - 2022-09-05
1198
-
1199
- ### Fixed
1200
-
1201
- - Missing key insertion from where clauses in references for deep update statements
1202
- - Prevent duplicate entries for some `INSERT` statements
1203
- - Log details were not properly displayed in Kibana
1204
- - getCsn in model-provider if `cds.requires.toggles` is false
1205
- - HTTP calls in messaging have the correct content length
1206
- - Performance issue for OData <entity>/$count requests
1207
- - Typescript definition for SQL-native variant of `srv.run`, like `srv.run('SELECT * from Authors where name like ?',['%Poe%'])`
1208
- - Typescript definitions for `srv.run( [query] )` and `srv.send( {query, headers} )`
1209
- - Typescript definitions for `cds.log` are improved, and level indicators like `cds.log()._debug` added
1210
- - Typescript definitions for `tx` now carry additional service methods
1211
- - `cds login` now returns errors with better root cause messages
1212
- - `$expand` requests for to-one associations that do not select the foreign key
1213
- - `UPDATE` statement accepts empty objects: `UPDATE('Foo').with({ bar: {} })`
1214
- - URI encoding of parameters in remote service calls
1215
-
1216
- ## Version 6.1.1 - 2022-08-24
1217
-
1218
- ### Added
1219
- - The configuration schema now includes `cds.extends` and `new-fields` (in `cds.xt.ExtensibilityService`)
1220
- - Ability to run extension validations as part of `cds lint`
1221
- - The `/-/cds/login` endpoint now also supports client credentials authentication
1222
- - `srv.run(fn)` now accepts a function as first argument, which will be run in an active outer transaction, if any, or in a newly created one. This is in contrast to `srv.tx(fn)`, which always creates a new tx.
1223
- ```js
1224
- cds.run (tx => { // nested operations are guaranteed to run in a tx
1225
- await INSERT.into (Foo, ...)
1226
- await INSERT.into (Bar, ...)
1227
- })
1228
- ```
1229
-
1230
- ### Fixed
1231
-
1232
- - Erroneous checks for `join` in `SELECT.from(SELECT.from('xxx'))`
1233
- - Virtual fields with default values in draft context
1234
- - View resolving without model information doesn't crash
1235
- - Unable to upload large attachments. Uploading a large attachment (base64 encoded) caused a runtime exception.
1236
- - `cds.Query.then()` is using `AsyncResource.runInAsyncScope` from now on. &rarr; this avoids callstacks being cut off, e.g. in debuggers.
1237
- - `cds.tx()` and `cds.context` have been fixed to avoid accidental fallbacks to auto-commit mode.
1238
- - HDI configuration data (e.g. `./cfg`, `.hdiignore`) is now included in the `resources.tgz` file which is required for Streamlined MTX.
1239
- - `cds deploy` accepts in addition to `VCAP_SERVICES` also `TARGET_CONTAINER` and `SERVICE_REPLACEMENTS` from vcap file when using `--vcap-file` parameter.
1240
- - `cds build` doesn't duplicate CSV files that are contained in `db/src/**`.
1241
- - Typescript issues in `apis/log.d.ts`
1242
- - `cds build` adds OS agnostic base model path to generated feature CSN.
1243
- - Unhandled promise rejection in `expand` handling
1244
- - `cds.context.model` middleware is not mounted for not extensible services
1245
- - `cds.context` continuation was sometimes not reset in REST adapter
1246
-
1247
- ## Version 6.1.0 - 2022-08-10
1248
-
1249
- ### Added
1250
-
1251
- - Support for `@sap/cds-mtxs` in `enterprise-messaging`
1252
- - Detailed information about pool state: `borrowed`, `pending`, `size`, `available`, `max` to the timeout error
1253
- - Odata v2 payloads for `cds.Time` are converted from hh:mm:ss to PThhHmmMssS e.g. 12:34:56 to PT12H34M56S if provided in hh:mm:ss format
1254
- - Odata v2 payloads for `cds.Integer` are converted to String if not provided as String
1255
- - New OData parser supports aliased parameters e.g. `...function(ID=@p)?@p=5`
1256
- - Support for locale "en_US_x_saprigi"
1257
- - Parameter `rows` in ql API function `limit` can be omitted for remote services, e.g. `SELECT.limit(undefined, 5)`
1258
- - New OData parser supports $filter with "in" operator, e.g. `$filter=ID in (1,2,3)`
1259
- - `cds build` copies `package.json` and `.cdsrc.json` into _main folder of MTX sidecar app.
1260
- - New OData parser supports null parameter in function/action, e.g `/findBooks(author=1,title=null)`
1261
- - New environment variable `schemas` contains locations for json schemas validating `package.json`, `.cdsrc.json` and `.cdsrc-private.json` in VS Code
1262
- - `cds.test` can now listen on a fixed port by way of additional arguments '--port', '<PORT_NUMBER>
1263
- - `cds.requires.db.kind = 'sql-mt'` is introduced as a shorthand for
1264
- ```js
1265
- "db": {
1266
- "kind": "sqlite",
1267
- "[production]": {
1268
- "kind": "hana-mt"
1269
- }
1270
- }
1271
- ```
1272
- - `cds build` support for Streamlined MTX extension projects based on build task `mtx-extension`
1273
- - TS definitions for `SELECT.forSharedLock` and `SELECT.forUpdate`
1274
- - TS definitions for `log`
1275
- - Support for new cds build task option `deploy-format`. Java apps may use this option instead of the corresponding global CDS config option.
1276
- - The `ExtensibilityService` serves an endpoint to retrieve a subdomain-specific JWT, which is used by `cds login`
1277
- - The endpoint `/-/cds/extensibility/push` now checks restrictions for new extensions. The configuration is added to the `cds.xt.ExtensibilityService`
1278
- ```js
1279
- "requires": {
1280
- "cds.xt.ExtensibilityService": {
1281
- "element-prefix": ["Z_", "ZZ_"],
1282
- "namespace-blocklist": ["com.sap.", "sap."],
1283
- "extension-allowlist": [
1284
- {
1285
- "for": ["my.bookshop"],
1286
- "kind": "entity",
1287
- "new-fields": 2
1288
- },
1289
- {
1290
- "for": ["CatalogService"],
1291
- "new-entities": 2
1292
- }
1293
- ]
1294
- }
1295
- }
1296
- ```
1297
- - `cds build` validates required service models `@sap/**` for MTX sidecar app and logs an ERROR if some couldn't be resolved.
1298
- - Configuration schema for many properties of the `cds` configuration block in `package.json` or `.cdsrc.json`, especially for `cds.requires...`
1299
-
1300
- ### Changed
1301
-
1302
- - Streamlined calculation of the difference for `DELETE` queries using `req.diff()`
1303
- - Improved error messages for rest / new odata parser
1304
- - Adjust types for `SELECT.from` and `SELECT.one` to accept array classes as well
1305
- - No `"` added around search values in OData v2 e.g. Foo?search=name is passed through as is
1306
- - If an entity can not be read after write (e.g. insert only entity) no error is shown in the log
1307
- - Throw not supported error for pagination in `$expand`
1308
-
1309
- ### Fixed
1310
-
1311
- - Wrong context in `tx.run(query)` when `query` is an array
1312
- - We now detect and ignore erroneous attempts to re-register framework-generated stubs as handlers for custom actions/functions.
1313
- - Emits with `persistent-outbox` also work with manual transactions
1314
- - You can now use `cds.ql` fluent API to query tables not in the model, but in database.
1315
- For example, within `cap/samples/bookshop` this works now:
1316
- ```sql
1317
- await SELECT.from('sqlite_master')
1318
- await cds.read('sqlite_master')
1319
- ```
1320
- Caveat: The following undocumented usage of unqualified names happened to work in the past.
1321
- But this was very fragile and caused lots of issues, and therefore was removed:
1322
- ```sql
1323
- await SELECT.from('Books')
1324
- await cds.read('Books')
1325
- ```
1326
- Always use qualified names or reflected definitions instead:
1327
- ```sql
1328
- const Books = 'sap.capire.bookshop.Books'
1329
- await SELECT.from(Books)
1330
- await cds.read(Books)
1331
- ```
1332
- ```sql
1333
- const {Books} = cds.entities ('sap.capire.bookshop')
1334
- await SELECT.from(Books)
1335
- await cds.read(Books)
1336
- ```
1337
- - Wrong results for expand to many without `orderBy`
1338
- - `cds deploy` api endpoint regex for cli now ignores trailing version info in url
1339
- - Default values no longer overwrite payload values on fields of new drafts
1340
- - Unmanaged to-one navigation caused malformed SQL statement in draft
1341
- - `cds.compile.to.serviceinfo` fix failure to detect Java services if `odataV4.endpoint.path` or `odataV2.endpoint.path` missing in `cds` configuration in `application.yaml`
1342
- - Data type conversion did not work in some expand cases
1343
- - Failed connection to SAP HANA with no or malformed credentials was leading to credentials being written to the log
1344
- - `cds build` no longer fails with an error `no such file` if one of the following files has been defined in some `srv` subfolder - `package.json, package-lock.json, .cdsrc.json, .npmrc`
1345
- - Tar issue on Windows: 'The command line is too long'.
1346
- - `$search`: Lifecycle issue that causes an empty search result when the `$search` and `$expand` query options were combined
1347
- - Operator `IN` with Tagged Template String Literals e.g.:
1348
- ```sql
1349
- SELECT.from(Object).where`userId IN ${aUserIDs}`
1350
- ```
1351
- - `cds build` now uses a closed version range in the node engines version of the deployed application's `package.json`
1352
- - `cds build` no longer generates EDMX files for services that aren't odata protocol enabled
1353
- - `cds deploy` handles orgs and spaces containing commas correctly
1354
- - Incorrect decoding of special characters when reading data of type `cds.LargeString` from SAP HANA using `hdb@^0.19.5` driver
1355
- - The payload is added to the delete request in rest adapter as `req.data`
1356
-
1357
- ## Version 6.0.4 - 2022-07-20
1358
-
1359
- ### Fixed
1360
-
1361
- - Local mocking of external services using `cds watch`
1362
-
1363
- ## Version 6.0.3 - 2022-07-14
1364
-
1365
- ### Changed
1366
-
1367
- - On Business Application Studio, `@sap/cds` now rejects starting on Node 12, as it does locally. This avoids cryptic follow-up errors.
1368
-
1369
- ### Fixed
1370
-
1371
- - Generic handlers for draft-related operations will trigger a READ event afterwards
1372
- - `file-based-messaging` only watches the file when at least one handler is registered
1373
- - `--vap-file` parameter of `cds deploy` is available again
1374
- - `cds build` no longer throws an error if `@sap/cds-mtx` library (classic MTX) isn't installed locally.
1375
- - `cds.spawn` no longer tries to reuse a transaction
1376
- - Custom query parameter caused bad request on certain characters in REST adapter
1377
- - `cds-ts` no longer fails with an `ERR_UNKNOWN_FILE_EXTENSION` error
1378
- - Timeouts when sending string payloads to remote services
1379
- - `cds.context.http` for `$batch` using atomicity groups
1380
-
1381
- ## Version 6.0.2 - 2022-07-06
1382
-
1383
- ### Fixed
1384
-
1385
- - Jest tests do not fail any longer because of logs during app shutdown
1386
- - `cds build` now uses the correct `mtx/sidecar` context. This avoids redundant `cds-mtxs` npm dependency for Java projects.
1387
-
1388
- ## Version 6.0.1 - 2022-07-05
1389
-
1390
- ### Added
1391
-
1392
- - Config option `cds.env.server.port` allows to configure the port to use (in addition to `process.env.PORT` and CLI option `--port`)
1393
-
1394
- ### Changed
1395
-
1396
- - Plugins cannot be loaded as ES modules, but need to remain CommonJS modules
1397
-
1398
- ### Fixed
1399
-
1400
- - Removed debug log about shutdown from `cds serve`
1401
- - Hiding timeout error in production mode
1402
-
1403
- ## Version 6.0.0 - 2022-06-30
1404
-
1405
- ### Added
1406
-
1407
- - Listeners for `commit` events on the request object are now awaited
1408
- - Experimental support for ECMAScript modules (ESM): You can now write your custom code, i.e.,
1409
- service implementations, `server.js`, `db/init.js` using ES6 `import` statements.
1410
- **Note though** that this is _experimental_ for now. Known limitation: _jest_ doesn't
1411
- support dynamic imports, which are required for that.
1412
-
1413
- - Improved `cds.error` to allow these using variants:
1414
- ```js
1415
- cds.error `Message with formatted: ${{foo:'bar'}}`
1416
- cds.error ({ message, code, ... })
1417
- cds.error (message, { code, ... })
1418
- let e = new cds.error(...) //> will not throw
1419
- ```
1420
- > Calling `cds.error()` with `new` returns the newly created Error,
1421
- > while calling it without `new` it throws immediately. The latter is
1422
- > useful for usages like that:
1423
-
1424
- - Improved `req.error` to always turn each recorded error into an instance of `Error` with its own stack trace.
1425
- Multiple errors are finally thrown as an array of these errors with `.message = 'MULTIPLE_ERRORS'`
1426
- and `.details = this` (the latter is for compatibility to former releases).
1427
-
1428
- - Public API for `cds.User.roles`: For example, this allows to construct new instances of `cds.User` like so:
1429
- ```js
1430
- let user = new cds.User ({ id:'me', roles:['admin'] })
1431
- user.is('admin') //> true
1432
- ```
1433
-
1434
- - Public API for `cds.context.tx`: This provides access to the current global root `tx`, if any.
1435
- (This replaces the former undocumented `req._tx`)
1436
-
1437
- - Public API `cds.User.anonymous` and `cds.User.privileged` which are sealed instances you can use directly
1438
- instead of always passing `new cds.UserPrivileged`.
1439
-
1440
- - Public API `cds.context.http` to reliably access inbound http `req` and `res` objects.
1441
-
1442
- - Persistent outbox now contains last error and timestamp of last attempt
1443
- - Enable PUT requests for UPDATE queries with CQN for remote services
1444
- - Support for new major version 2 of SAP Cloud SDK
1445
- - Support for the `@assert.target` annotation for managed-to-one associations
1446
- - Support for `FOR SHARE LOCK` on SAP HANA to acquire shared locks on the queried records so that the locked records
1447
- stay intact until the transaction is committed or rolled back.
1448
- - Consistent error information for remote batch requests
1449
- - `cds.env` now supports expanding scalar `cds.requires` entries from `cds.requires.kinds` as follows:
1450
- ```jsonc
1451
- { "cds": {
1452
- "requires": {
1453
- "mtx-sidecar": true,
1454
- "db": "sql",
1455
- "kinds": {
1456
- "sql": {/* detailed config for sql */},
1457
- "mtx-sidecar": {/* detailed config */},
1458
- }
1459
- }
1460
- }}
1461
- ```
1462
- - Support for mTLS in `enterprise-messaging-shared` and `message-queuing`
1463
- - Allow empty publish and subscribe prefixes for SAP Event Mesh when using the format `cloudevents`
1464
- - Custom type `sap.common.Locale` in common.cds
1465
- - Ordering by aggregated value for draft-enabled active entity
1466
- - `cds build` support for model provider service-based resource deployment.
1467
- - Remote service:
1468
- + Conversion of OData V2 (`"kind": "odata-v2"`) function and action results to OData V4 format
1469
- + Conversion of binary data in CQN queries to `base64url` in URL and payload
1470
- + Key predicate is omitted for single-key entities in resulting URL (e.g. `GET /Foo(1)` instead of `GET /Foo(ID=1)`)
1471
- + Support of views with parameters
1472
- - Add `@odata.mediaContentType` if selecting stream property
1473
- - Kubernetes service bindings: Support for servicebinding.io and SAP BTP Service Operator based bindings
1474
- - `cds build` copies an existing `.npmrc` file located in the root or srv folder of your project into the deployment folder (usually `gen/srv`). This allows for dedicated npm configuration in cloud environments. Can be switched off by cds build option `contentNpmrc`.
1475
- - `cds build` copies an existing `.cdsrc.json` file located in the root or srv folder of your project into the deployment folder (usually `gen/srv`). The effective CDS configuration is created from the `.cdsrc.json` and CDS configuration defined in the `package.json` file. Can be switched off by cds build option `contentCdsrcJson`.
1476
- - Beta OData URL to CQN parser (`cds.env.features.odata_new_parser = true`):
1477
- + `@odata.context` is derived without using okra, not yet supported:
1478
- + `$expand=*` query option
1479
- + Support for actions and functions
1480
- + Further `$apply` transformations supported
1481
- + (nested) `concat` transformations
1482
- + `orderBy` transformation
1483
- + `top` & `skip` transformation
1484
- + `identity` transformation
1485
- - Log `BEGIN`/`COMMIT`/`ROLLBACK` commands when using SAP HANA as the underlying database
1486
- - Binary data in payload is validated to be RFC-4648 and OData ABNF conformed
1487
- - Support multiple media (streaming) properties in one entity
1488
- - Support for annotation `@protocol:'none'` to mark services as internal
1489
- - New build task aliases `java` and `nodejs` deprecating `java-cf`and `node-cf`, which are still supported for compatibility reasons.
1490
- - New shutdown event sent by `cds serve` (beta)
1491
- - $filter in $expand for remote services
1492
- - Mapping of aliases in $expand for remote services
1493
-
1494
- ### Changed
1495
-
1496
- - `@sap/cds` can now be loaded from different install locations like any other module, i.e. `@require('@sap/cds')` will no longer return the same singleton instance.
1497
- - SAP Cloud SDK is now only an optional dependency and must be installed manually
1498
- - Improved `cds.context` implementation to use `AsyncLocalStorage` instead of plain `async_hooks` (-> [see Node.js docs](https://nodejs.org/api/async_context.html)); APIs stay the same.
1499
- - Improved `cds.tx(tx=>{ ... })`: The new `tx` will be set as `cds.context.tx` for the function body's continuation,
1500
- so all nested service or database operations will be executed within this transaction automatically.
1501
- - Node.js 14.15 is now the minimum required Node.js version. Version 12 is no longer supported.
1502
- - Node.js 14.15 is now enforced on loading of `@sap/cds`, for example, on server startup.
1503
- - Improve error messages in messaging management
1504
- - `cds.env.requires` formerly inherited from `cds.env.requires.kinds`. This is not the case anymore; hence things like this worked before but don't anymore:
1505
- ```js
1506
- let sql = cds.requires.sql //> is undefined now
1507
- let sql = cds.requires.kinds.sql //> use this instead
1508
- ```
1509
- Alternatively you can add this to your cds config:
1510
- ```json
1511
- { "cds": { "requires": { "sql": true } }}
1512
- ```
1513
- - Details of errors from remote services are now in property `reason` (before it was `innererror`)
1514
- - `innererror` is not removed from OData error response
1515
- - The `file` option of file-based messaging is now on top level (before it was in `credentials`)
1516
- - Optimized Search: `cds.env.features.optimized_search=true` is now the default behavior.
1517
- - `cds build` no longer generates CF manifest files for Nodejs and HANA db deployer modules.
1518
- - `cds build` no longer supports WebIDE Fullstack compatibility mode. Consequently, SAP HANA artifacts and service EDMX files for Fiori modules might no longer be correctly generated.
1519
- - Remote services: Batched `GET` requests will not fetch CSRF tokens
1520
- - CQN now uses `xpr` correctly instead of brackets in `where`
1521
- - `process.exit` is called again by `cds run/serve` and `watch`, to gain a reliable `exit` event for cleanup tasks. Before, this would be spoiled by apps that do not shut down the event loop properly.
1522
- - `cds build` no longer filters `./` file dependencies from package.json in the build output.
1523
- - Fiori preview no longer supports URL pattern with `service` and `entity` query parameters, e.g. `$fiori-preview?service=...&entity=...`. These URLs were created back in `@sap/cds` 3.x.
1524
- - `cds build` no longer copies the `node_modules` folder into the deployment folder (usually `gen/db/**` and `gen/srv/**`).
1525
- - Set default tenant to `undefined` in single-tenant mode
1526
- - Handle foreign keys of to-one associations which should be set to `null` on db layer
1527
- - `cds build` uses the native `fs` functions instead of `fs-extra`.
1528
- - `cds build` supports initial data in CSV files that are located in any 'csv' or 'data' subfolder of some CDS model file. This also implies CSV files stored in reuse modules. Now, this behaviour is consistent with SQLite deployment. If the location of some CSV file has changed, a deployment error might be returned. In that case previously deployed `hdbtabledata` files have to be undeployed.
1529
- - `cds deploy` reads Cloud Foundry file `config.json` to get org and space information.
1530
- - New REST adapter replaced old (limited) implementation
1531
- - Default behavior for runtime integrity checks. From now on no integrity checks will be done by default.
1532
- Note that this is a breaking change for applications that rely on automatic integrity checks by runtime. We recommend using `cds.env.features.assert_integrity`: `db` to switch on database integrity constraints. The value `app` can be used as fallback to previous behavior.
1533
- - `cds build` no longer copies `.env` or `default-env.json` files into the deployment folder.
1534
- - OData `POST`, `PATCH`, and `PUT` requests and draft-related `draftEdit` and `draftActivate` actions are now followed by an additional `READ` request to the application service. Consequently, affected functionality:
1535
- + It is now sufficient to have a custom `READ` handler in order to adjust the response (e.g., to handle virtual properties) of the modification request.
1536
- + A user is now required to be authorized to read updated data e.g. a user having a role restricted with "INSERT-only" annotation pattern will get empty results in response to `POST` request.
1537
- + For compatibility reasons, `req._` of the modification request is uplinked to `req._` of the follow-up `READ` request so that one still can access original `req._.req/res` request objects of the modification request within the corresponding `READ` handlers.
1538
- + Modification logs are now followed by corresponding access logs.
1539
- + More details can be found in cds v6.0.0 release notes.
1540
- - Message for PreconditionFailedError is now configurable in messages.properties
1541
- - Remove circular references in Kibana logging
1542
- - Error sanitization in production is skipped for custom errors with HTTP code `5xx`. From now on, an app developer can return any error message to the client.
1543
- Note that this is a breaking change for applications that rely on error sanitization for custom errors in production. The behavior of errors thrown by CAP framework is unchanged.
1544
-
1545
- ### Fixed
1546
-
1547
- - We don't rely on `global.cds` anymore -> allows to load and correctly work with multiple versions of `cds`
1548
- - Improved shutdown for AMQP connections and file listeners
1549
- - Using `CQL` with a tagged template string `SELECT from Foo { null as boo }` threw an exception.
1550
- - In case of `MULTIPLE_ERRORS` throw an `Error` instead of an object
1551
- - `cds build` ensures correct precedence of feature annotations. Fixes `Duplicate assignment` compilation errors.
1552
- - Compatibility with former support to find service `@impl: 'relative/to/cdw'`.
1553
- - Views on views with parameters where erroneously inherited params through `cds.linked()`.
1554
- - Authentication: Return HTTP `404 Not Found` rather than `204 No Content` status code for invalid requests.
1555
- For example, given the following request `/ReqAdmin(1)/toIntermediate/toa` and assuming that the `toIntermediate` instance does not exist,
1556
- the runtime returned an HTTP `204 No Content` success status response code indicating that the request has succeeded.
1557
- In such scenarios, now the HTTP `404 Not Found` status code is returned rather than `204 No Content`.
1558
- - Errors from HTTP requests sent via `cds.test.axios` now are the original Axios errors, i.e. including properties like `request` and `response`, with stack traces from caller.
1559
- - Errors constructed and thrown by `req.reject()` now have a stack starting at the code calling `req.reject()`.
1560
- - Auth annotations `@restrict` and `@requires` with empty array do not allow access anymore
1561
- - Delete on restricted singleton caused request to fail
1562
- - Add workaround of typescript not complete literal unions, specially when union strings.
1563
- - Accidental handling of non-proxy entities as they would have been proxies (`cds.env.odata.proxies`) in expands
1564
- - Boolean keys are properly parsed into JS boolean values
1565
- - Navigation path segments with aliased keys in structured mode (OData flavors `w4` and `x4`) when using beta OData URL to CQN parser (`cds.env.features.odata_new_parser`)
1566
- - All entities in `@sap/cds/common` have now proper CDS doc comments
1567
- - `cds build` uses `package.json` and `package-lock.json` files located in `srv` folder for deployment if existing. Before, `package.json` and `package-lock.json` files of the project root folder have always been taken.
1568
- - Pass options from `cds.parse.expr` to `cdsc.parse.expr`.
1569
- - Avoid error that is caused, e.g., in a streaming scenario when there is an issue while processing the stream. Trying to change/send the response object could cause a crash because the response was sent already.
1570
- - Correct URL generation for `Integer64` and `Decimal` for remote services
1571
- - Operation parameters from structured type and annotated with @open are not filtered from the input query
1572
- - Services are secured by default in production. Can be disabled via feature flag `cds.env.requires.auth.restrict_all_services: false` or by using `mocked-auth`.
1573
- - Optimized Search: Exception when searching on views using built-in SQL SAP HANA functions
1574
- - In some cases, custom error handlers were not called for rest
1575
- - `cds build` adds newline at EOF for `hdbmigrationtable` files
1576
- - Static values in on condition were ignored when inserting on navigation
1577
- - Removed entity key validation by POST request in rest
1578
- - `$count=false` returned count
1579
- - `odata_new_parser`: `format=json` allowed as query parameter, other formats not supported and returning 501, trailing `?` allowed e.g. `/Employees?`
1580
- - `odata_new_parser`: Piped use of same transformations is now supported, like `/Students?$apply=filter(BIRTHYEAR ge 2000)/groupby((UNIVERSITY),aggregate(SUBJECT with countdistinct as distinctSubjects))/filter(UNIVERSITY eq 'Hamburg')`
1581
- - `odata_new_parser`: Behavior of piped transformations while using `topcount` or `bottomcount` is now correct
1582
- - Better error message for missing `exists` predicate in `@restrict.where`
1583
- - Reading raw Binary data provided as a `base64` (standard or url-safe) string by means of a `$value` query option
1584
- - Selecting a navigation with `$select` ended up in database error
1585
- - `cds.compile` no longer fails for cds sources that contain the `file:` pattern
1586
- - $select=IsActiveEntity did not work on draft enabled entity, when requesting active data via navigation
1587
- - not equal operator `<>` treated the same way as `!=`
1588
- - `cds.localize` now respects custom i18n file names (which is not recommended though)
1589
- - `cds version` now handles array-valued entries for `folders.db`and `folders.srv` gracefully when looking for MTX sidecar
1590
- - OData access of entities named `get` and `set`
1591
- - missing brackets for OR condition in `.where()` when requesting by navigation
1592
- - `cds build` now correctly supports Node.js apps that do not have a service module defined. In these cases, the build task's _src_ folder has to be configured as "."
1593
- - `cds build <dir>` is now correctly executed if called by npm script or mta build.
1594
- - `cds deploy` now shows a better error message on INSERT errors (on SQLite).
1595
-
1596
- ### Removed
1597
-
1598
- - Deprecated option to send synchronous requests via `srv.emit()` -> use `srv.send()` for that
1599
- - Deprecated feature flag `cds.env.features.implicit_sorting`
1600
- - Deprecated feature flag `cds.env.features.update_managed_properties`
1601
- - Deprecated feature flag `cds.env.features.resolve_views`
1602
- - Deprecated feature flag `cds.env.features.spaced_columns`
1603
- - Deprecated feature flag `cds.env.features.throw_diff_error`
1604
- - Deprecated feature flag `cds.env.features.delay_assert_deep_assoc`
1605
- - Deprecated feature flag `cds.env.features.auto_fetch_expand_keys`
1606
- - Deprecation warning for query parameters `sap-valid-from` and `sap-valid-to`
1607
- - Built-in graphql support &rarr; moved to new `@sap/cds-graphql`
1608
- - Deprecated feature flag `cds.env.features.extract_vals`
1609
- - Support for CQN `where in` syntax `{ val: [1, 2, 3] }` without `list`. Use `{ list: [{ val: 1 }, { val: 2 }, { val: 3 }] }` instead.
1610
- - Support for selects in restrict entries, e.g. `where : 'exists (select 1 from MyTable where a = b)'` is not allowed anymore
1611
- - Input validation for deep `INSERT`/`UPDATE` for associations in the service layer
1612
- - Support for `@odata.contained` annotation. Use Compositions instead.
1613
- - Support for `@odata.on.insert/update` annotation. Use `cds.on.insert/update` instead.
1614
- - Support for expressions in references, for example: `ref: ['foo as bar']`).
1615
- - Generic support of `$expand` and `$select` OData query options for custom actions and functions
1616
-
1617
- ## Version 5.9.8 - 2022-06-24
1618
-
1619
- ### Fixed
1620
-
1621
- - Application model is now again properly updated after extension activation
1622
- - Avoid crashes during `cds version` when `folders.db` or `folders.srv` are array-valued instead of strings
1623
- - `cds build` correctly validates MTX extension allow lists and doesn't log false positive warning messages
1624
-
1625
- ## Version 5.9.7 - 2022-06-13
1626
-
1627
- ### Fixed
1628
-
1629
- - Deleting a parent will delete all compositions, also texts
1630
- - Views with aliased elements in `orderBy`
1631
-
1632
- ## Version 5.9.6 - 2022-05-24
1633
-
1634
- ### Fixed
1635
-
1636
- - Ignored requests in batch requests
1637
- - `pool` module for logger facade is separated from `hana` database logger. Timeout error by acquiring client from pool is now enhanced with `_poolState` providing current pool attibutes.
1638
- - Multiple errors did not have correct HTTP response status code
1639
- - `POST|PUT|PATCH` requests with `charset` directive in `Content-Type` header (e.g., `Content-Type: application/json; charset=utf-8`) no longer issues an error "Invalid content type" in REST adapters
1640
- - Call SAP HANA procedure:
1641
- + accepted are any symbols in a procedure name if it is delimited with a double quotation (`"`)
1642
- + fixed results for table output parameters when using `@sap/hana-client`; **limitation**: output parameters in a `CALL` statement must follow the same order used in a stored procedure definition
1643
- - `@odata.context` considers `cds.env.odata.contextAbsoluteUrl` when requesting an OData Service
1644
-
1645
- ## Version 5.9.5 - 2022-05-09
1646
-
1647
- ### Fixed
1648
-
1649
- - `HDB_TCP_KEEP_ALIVE_IDLE` config
1650
- - A combination of `!=` operator and `or` in `where` clauses of `@restrict` annotations or when adjusting `req.query` in custom handlers (OData services only)
1651
- - Programmatic calls to bound actions/functions do have keys in `req.data` again if compat flag `cds.env.features.keys_in_data_compat` is set
1652
-
1653
- ## Version 5.9.4 - 2022-05-02
1654
-
1655
- ### Fixed
1656
-
1657
- - Error messages are improved if no `passport` module was found or if no `xsuaa` service binding is available
1658
- - Issue fixed for `srv.get()`. It was returning `TypeError` in plain REST usage for external services, e.g. `srv.get('/some/arbitrary/path/111')`
1659
- - Allow unrestricted services to run unauthenticated, removing the `Unable to require required package/file "passport"` error. Totally not recommended in production. Note that though this restores pre 5.9.0 behavior, this will come again starting in 6.0.
1660
- - Audit logging of sensitive data in a composition child if its parent is annotated with `@PersonalData.EntitySemantics: 'Other'` and has no data privacy annotations other than `@PersonalData.FieldSemantics: 'DataSubjectID'` annotating a corresponding composition, for example:
1661
- ```js
1662
- annotate Customers with @PersonalData : {
1663
- DataSubjectRole : 'Address',
1664
- EntitySemantics : 'Other'
1665
- } {
1666
- addresses @PersonalData.FieldSemantics: 'DataSubjectID';
1667
- }
1668
- annotate CustomerPostalAddress with @PersonalData : {
1669
- DataSubjectRole : 'Address',
1670
- EntitySemantics : 'DataSubject'
1671
- } {
1672
- ID @PersonalData.FieldSemantics : 'DataSubjectID';
1673
- street @PersonalData.IsPotentiallyPersonal;
1674
- town @PersonalData.IsPotentiallySensitive;
1675
- }
1676
- ```
1677
-
1678
- ## Version 5.9.3 - 2022-04-25
1679
-
1680
- ### Fixed
1681
-
1682
- - Since 5.8.2 `req.target` for requests like `srv.put('/MyService.entity')` is defined, but `req.query` undefined (before `req.target` was also undefined). This was leading to accessing undefined, which has been fixed.
1683
- - Custom actions with names conflicting with methods from service base classes, e.g. `run()`, could lead to hard-to-detect errors. This is now detected and avoided with a warning.
1684
- - Typed methods for custom actions were erroneously applied to `cds.db` service, which led to server crashes, for example, when the action was named `deploy()`.
1685
- - Invalid batch requests were further processed after error response was already sent to client, leading to an InternalServerError
1686
- - Full support of `SELECT` queries with operator expressions (`xpr`)
1687
-
1688
- ## Version 5.9.2 - 2022-04-07
1689
-
1690
- ### Fixed
1691
-
1692
- - i18n translation for errors did not work correctly in some cases
1693
- - Normalization in custom `getRestrictions`
1694
- - Throw exception by `INSERT` into HANA queries if number of provided rows deviates from number of affected rows returned by hdb to prevent data losses
1695
- - Handler detection for extended services
1696
- - Speed-up in localization handling
1697
- - Draft: navigation via an association to many from a non-draft enabled entity to a draft-enabled entity
1698
- - Limited support of `SELECT` queries with operator expressions (`xpr`)
1699
-
1700
- ## Version 5.9.1 - 2022-03-31
1701
-
1702
- ### Fixed
1703
-
1704
- - Function arguments might be escaped too often
1705
- - URL encoding for remote services for CQN queries
1706
- - `cds serve` during development again redirects URLs for UI apps in a folder with the same name as a service, so `/foo/webapp` would redirect to `/foo` again. This got broken in 5.8.3.
1707
- - Endless loop in localization handling
1708
- - Ensure service implementation while extending entity from the service
1709
- - Post-processing of custom draft queries
1710
- - `cds build` no longer omits unused CDS type definitions, leading to Java compiler errors
1711
-
1712
- ## Version 5.9.0 - 2022-03-25
1713
-
1714
- ### Added
1715
-
1716
- - Enable custom audit logging implementation by subclassing or prepending `cds.AuditLogService`
1717
- - Log authentication/authorization traces, for example, authentication strategy and access control decisions to facilitate troubleshooting in debug mode.
1718
- - Bound functions and actions calls with odata-v2 from remote service
1719
- - Beta support for procedure calls with table output data (SAP HANA only)
1720
- + Both hdb and `@sap/hana-client` currently do not support parameter metadata for table output. To provide the functionality anyways, CAP must fetch the metadata itself. As this is not CAP's expertise, the feature is only beta.
1721
- + All parameters must be named or unnamed, that is `CALL EXAMPLE_PROC(PARAM_1 => ?,PARAM_2 => ?)` or `CALL EXAMPLE_PROC(?,?)`
1722
- - Alpha `cds.ApplicationService.getRestrictions(definition, event, user)`, which returns the applicable restrictions for the current request as follows:
1723
- + `null`: unrestricted access
1724
- + `[]`: no applicable restrictions -> no access
1725
- + `[{ grant: '...', to: ['...'], where: '...' }, ...]`: applicable restrictions with grant normalized to strings
1726
- + That is, `grant: ['CREATE', 'UPDATE']` in model becomes `[{ grant: 'CREATE' }, { grant: 'UPDATE' }]`
1727
- + Promise resolving to any of the above (needed for CAS override)
1728
- - Internal model provider service can be used for obtaining dynamic csn, including features and key user extensions
1729
- - Support insert of SQL snippets for HANA migration tables using @sql.append and @sql.prepend annotations.
1730
- - Support for the `@odata.draft.enclosed` annotation on associations targeted via navigation — previously only supported for `$expand`
1731
- - Pseudo role `internal-user` for technical user tokens acquired from own XSUAA instance
1732
- - Include globally-installed cds-dk version in output of `cds version`.
1733
- - Include version of cds-mtx in output of `cds version`, if available.
1734
- - Feature toggle support in `cds build` for cloud deployments. Create language bundles and parsed CSN for all features.
1735
- - Support for `@Aggregation.default` in new OData parser (`cds.env.features.odata_new_parser = true`)
1736
-
1737
- ### Changed
1738
-
1739
- - Cleaned up `cds.env.requires` towards a consistent usage:
1740
- + Moved all entries of `cds.requires` to `cds.requires.kinds` → `cds.requires` is empty now by default, but has `cds.requires.kinds` as prototype, so e.g. `cds.requires.sql` will still return a match.
1741
- + Added support for db-specific `cds.requires.db.deploy-format` → deprecating `cds.hana.deploy-format` (which is still supported for compatibility)
1742
- + Introduced `cds.requires.kinds.hana-cloud` as `{kind:hana, deploy-format:hdbtable}` → to be used by default for production
1743
- + Changed `cds.requires.audit-log` to be consistent to all other; also got moved to `cds.requires.kinds.audit-log`, so it is no longer activated by default.
1744
- + Added support for `cds.requires.foo: true` with `foo` being a preset/prototype entry in `cds.requires.kinds` → allows to more easily switch on pre-configured services.
1745
- - Update-managed properties (`@cds.on.update`) are always updated
1746
- + Example: `UPDATE('Books').set({}).where({ ID: 1 })` leads to new modifiedAt and modifiedBy
1747
- + Does not apply to nested entities that are only preserved by specifying their primary keys in the data
1748
- + Deactivate during two month grace period via compact feature flag `cds.env.features.update_managed_properties = false`
1749
- - Response no longer contains keys neither technical draft properties (e.g. `HasDraftEntity` or `InProcessByUser`) in expanded data if they were not requested explicitly when using `cds.Service` API
1750
- + Example:
1751
- ```js
1752
- > await srv.read('Authors', a => { a.name, a.books(b => { b.title }) }).where({ ID: 1 })
1753
- // -> "old behaviour" result
1754
- [{ name: 'Emily Brontë', books: [{ title: 'Wuthering Heights', ID: 201 }] }]
1755
- // -> "new behaviour" result
1756
- [{ name: 'Emily Brontë', books: [{ title: 'Wuthering Heights' }] }]
1757
- ```
1758
- + Technical draft properties are not automatically fetched also on a root level
1759
- + Deactivate during two month grace period via compat feature flag `cds.env.features.auto_fetch_expand_keys = true`
1760
- - Access control is checked in generic handlers (rather than handlers materialized on app startup)
1761
- - Expand restriction check moved to pre-before phase
1762
- - The active state of an entity is read instead of the draft state when navigating from a draft entity to a draft-enabled entity via an association.
1763
- - Authentication middleware is always mounted (used to be only for restricted services)
1764
- - Fiori preview now uses the Horizon theme
1765
- - 'Preview' links in generic index.html page no longer get the word _preview_ appended automatically, allowing for more flexible naming. Link providers should make sure to add the _preview_ word if necessary.
1766
- - Don't throw error in GraphQL adapter if update mutation filter does not match any entries (to be consistent with delete mutations)
1767
- - Remote call of unbound action/function returns octet-stream instead of string by default
1768
- - Default pool's behavior has been changed from `FIFO` (queue) to `LIFO` (stack). Can be changed in pool configuration.
1769
- - `cds run/serve` now gracefully shuts down the HTTP server before exiting. Custom handlers for signals like `SIGTERM` or `SIGINT` can now be processed.
1770
- - `cds build` no longer creates `COMMENT` statements for HANA if doc comments are present in CDS models. The statements caused superfluous table migrations during HANA deployments.
1771
-
1772
- ### Fixed
1773
-
1774
- - Logging of failed requests to remote services was incompatible to Elasticsearch
1775
- - `cds serve --project <dir>` didn't serve static web resources from `<dir>`
1776
- - `cds serve -p <dir>` was meant to be a shortcut for `cds serve --project <dir>`
1777
- - Messaging: Use correct kind for logging
1778
- - Incorrect return values for update-managed properties (`@cds.on.update`) of child entities that were not changed in request
1779
- - `$filter` with navigation to-one eq null
1780
- - Calculation of `DraftIsProcessedByMe` when navigating to `DraftAdministrativeData`
1781
- - Inbound streaming with media type annotated as `@Core.Computed`
1782
- - Pass column expression into `SELECT()` (example: `SELECT('SUBSTRING(locale,0,2) as loc').from(<entity>)`)
1783
- - Annotation `@cds.api.ignore` ignores key in new parser
1784
- - Inconsistencies in actions and functions API
1785
- - Opening root transaction in `srv.run` if none exists
1786
- - Glitches in handling of `req.user.tenant` and `req.user.locale`
1787
- - Flattened keys in URL are resolved correctly if they are unique in new REST adapter
1788
- - Actions and functions in REST adapter
1789
- - Empty string as key does not work in new parser
1790
- - Requesting property of an entity caused error in new parser
1791
- - The SQLite CSV import now imports `"true"` and `"false"` as strings instead of Booleans
1792
- - Fixed loading mechanism for custom build task handlers
1793
- - `req.diff()` for `UPDATE` on a view with renamed property in `orderBy`
1794
- - `$user.<attr>` for managed properties (`@cds.on.insert`/`@cds.on.update`)
1795
- - GraphQL `__typename` meta field if it is the only selected field of an association/composition
1796
- - Command shortcuts like `cds c` are now handled properly if executed in an NPM script
1797
- - ETag is not included in expanded entities using `$select`, for example: `Books(1)?$expand=author($select=ID)`
1798
- - `cds.compile.to...` no longer crashes if called with a CSN that has a dangling ref
1799
- - Requests to remote services via navigation path without explicit `$select`, but having `$expand` query option
1800
- - `cds.compile` correctly supports reserved namespaces like `cds.foundation`.
1801
- - `cds.compile.to.serviceinfo` now uses the correct configuration for the base URL paths for Java services
1802
- - `cds deploy --to sqlite` correctly localizes texts in deployed views. Before not all localized texts have been correctly resolved.
1803
- - `cds deploy --to hana` reports missing org or space info with a better message.
1804
- - Using combinations of `.` and `_` in CSN definition names
1805
-
1806
- ### Removed
1807
-
1808
- - Redundant locale implementation
1809
-
1810
- ## Version 5.8.4 - 2022-03-17
1811
-
1812
- ### Fixed
1813
-
1814
- - `UPDATE` singleton entity does not require to provide singleton keys in a payload
1815
- - CQN queries with operator expressions (`xpr`) in ON-conditions of unmanaged associations and compositions
1816
-
1817
- ## Version 5.8.3 - 2022-03-01
1818
-
1819
- ### Fixed
1820
-
1821
- - `queries` property for application-defined destinations of remote services
1822
- - `cds serve --watch` no longer fails if `@sap/cds-dk` is installed only globally
1823
- - `cds serve` during development longer redirects URLs with similar path segments from different services, like `/service/one` and `/service`
1824
- - `cds deploy --to sqlite` now ignores a `_texts.csv` file again if there is a language-specific file like `_texts_en.csv` present
1825
- - Using logical blocks (surrounded with `(` and `)`) in ON-conditions of unmanaged associations and compositions
1826
- - Skip "with parameters" clause if no order by clause or all columns in the order by clause are not strings when using parametrized views on SAP HANA
1827
- - Limited support for binary data in OData
1828
- - Using of `base64` encoded string values in `WHERE IN` on SAP HANA
1829
- - `base64url` values in `@odata.context` annotation
1830
- - `cds.context` is set in GraphQL adapter
1831
- - Using payloads with `@odata.type` annotating primitive properties no longer crashes the application. `#` in type value may be omitted. Example:
1832
-
1833
- ```json
1834
- {
1835
- "ID": 201,
1836
- "title@odata.type": "#String",
1837
- "title": "Wuthering Heights",
1838
- "stock@odata.type": "Int32",
1839
- "stock": 12
1840
- }
1841
- ```
1842
-
1843
- - Unicode support for i18n bundles
1844
-
1845
- ## Version 5.8.2 - 2022-02-22
1846
-
1847
- ### Fixed
1848
-
1849
- - Crash if error does not have a stack in Kibana logging
1850
- - Allow short names for bound operations in odata-server
1851
- - Performance issue during deep operations
1852
- - Resolving views with parameters
1853
- - Expanding association-to-many within draft union scenario
1854
- - Erroneous invalidation of deep `INSERT|UPDATE|DELETE` operations if root entity has managed to-one association to non-writable view
1855
- - Handling of falsy results when sending requests to remote services
1856
- - Resolving foreign key propagations for views with union
1857
-
1858
- ## Version 5.8.1 - 2022-02-11
1859
-
1860
- ### Fixed
1861
-
1862
- - Use single transaction for update mutations in GraphQL adapter
1863
- - ODATA to CQN parser returned not selected keys in `@odata.context`
1864
- - Draft: `$expand` with special draft columns in `$orderBy` for active entities
1865
- - Reading distinct values of draft enabled entity
1866
- - Handling of LOB data on HANA
1867
- - Fix streaming draft by navigation
1868
- - Empty to-many arrays are not removed from req.data for inserts
1869
- - `$filter` query option in structured mode (OData flavors `w4` and `x4`)
1870
- + Using JSON-stringified objects no longer occasionally crashes an application
1871
- + Filtering on a structured element with `ne null` condition also selects data having some `null` properties within
1872
- - Rest: `Content-type` header is set to `text/plain` for primitive data types in response (except for `Boolean`)
1873
-
1874
- ## Version 5.8.0 - 2022-01-27
1875
-
1876
- ### Added
1877
-
1878
- - Custom `server.js` don't have to export `cds.server` anymore -> we use that by default now.
1879
- - In `cds.requires`: Support to replace primitive values with objects
1880
- - Support filter functions on renamed properties from external service
1881
- - Results of database queries use `big.js` for values of type `cds.Decimal` and `cds.Integer64` if enabled via `cds.env.features.bigjs`
1882
- - Support lambda in `$filter` in `$expand`
1883
- - Support for `GET` requests on service root in REST adapter (old and new)
1884
- - Support for `HEAD` requests in REST adapter (old and new)
1885
- - New hook `req.before('commit')`
1886
- - Draft (Access control for bound actions): Only the user that is the owner of the draft can execute its bound actions.
1887
- - Check that all keys are provided in REST adapter
1888
- - Restrict access to all services via `cds.env.requires.auth.restrict_all_services = true`
1889
- - That is, all unrestricted services (i.e., w/o own `@requires`) are treated as having `@requires: 'authenticated-user'`
1890
- - Threshold for automatically sending GET requests as `$batch` (beta, cf. @sap/cds@5.6.0) can be configured per remote service via `cds.env.requires.<srv>.max_get_url_length` (if not configured on service, the global config applies)
1891
- - Limited support for binary data in OData
1892
- - In payloads, the binary data must be a base64 encoded string
1893
- - In URLs, the binary data must have the following format: `binary'<url-safe base64 encoded>'`, e.g., `$filter=ID eq binary'Q0FQIE5vZGUuanM='`
1894
- - The use of binary data in some advanced constructs like `$apply` and `/any()` may be limited
1895
- - On SQLite, the base64 encoded string is stored in the database
1896
- - It’s strongly discouraged to use binary data as keys. See "Primary Keys — Best Practices" in the documentation.
1897
- - Support for OData annotation `@Core.ContentDisposition.Type` with `attachment` as the default value
1898
- - Support for returning custom stream objects in custom handlers (beta):
1899
- - Example:
1900
-
1901
- ```js
1902
- return {
1903
- value: instanceof Readable || null,
1904
- $mediaContentType = 'image/jpeg',
1905
- $mediaContentDispositionFilename = 'foo.bar', // > optional
1906
- $mediaContentDispositionType = 'inline' // > optional
1907
- }
1908
- ```
1909
-
1910
- ### Changed
1911
-
1912
- - `cds deploy --to hana` now uses `cf curl` instead of `cf` command natively
1913
- - Event Mesh: In multitenancy mode, messaging artifacts are also deployed for provider accounts (unless the service option `deployForProvider` is set to `false`)
1914
- - Status code in case of multiple errors (rules apply in order):
1915
- + If all errors have the same status code, that status code is used
1916
- + If there is at least one 5xx status code, the resulting status code is 500
1917
- + If there is at least one 4xx status code, the resulting status code is 400
1918
- + If none of the rules apply, the resulting status code is 500
1919
- - Ignore the `If-Match` HTTP request header for `UPDATE`/`DELETE` requests whose target entities are not annotated with the `@odata.etag` annotation.
1920
- - I18n template strings now are replaced in EDMX documents such that they can occur multiple times. For example, the `{i18n>key1} - {i18n>key2}` template results in `value1 - value2`, while previously only the first string was replaced, leading to `value1 - {i18n>key2}`. This is helpful for the [`Template` strings of `UI.ConnectedFields`](https://github.com/SAP/odata-vocabularies/blob/ac9fe832df9b8c8d35517c637dba7c0ac2753b0f/vocabularies/UI.xml#L168).
1921
-
1922
- ### Fixed
1923
-
1924
- - At Node.js runtime, the `development` configuration profile is no longer active if `CDS_ENV` is set to `production` and `NODE_ENV` is undefined
1925
- - Enterprise Messaging: The user is now privileged for AMQP
1926
- - `cds.spawn` also works with synchronous functions
1927
- - Foreign keys in parent are set to `null` when deleting composition of one
1928
- - `cds version` now always prints the version of `@sap/cds-dk`, especially if `cds version` was called from within an npm script, i.e. not from `cds-dk`'s CLI.
1929
- - Better error message in case destination of Remote Service isn’t found
1930
- - Differentiate between draft already exists and entity locked
1931
- - OData adapter: roll back transaction before re-throwing standard error in case of atomicity group
1932
- - Results of actions/functions do not ignore custom data when using `$expand` query option
1933
- - `req.data` is available in custom error handler in case of deserialization error thrown by legacy OData server
1934
- - Joining entities with renamed foreign keys (limited to single-level projections)
1935
- - Requests with draft and `$expand=*` caused problems in some cases
1936
- - `cds serve` during development longer redirects URLs with similar path segments like `/browse/123/browse/` to e.g. `/browse/`
1937
- - Post-processing for renamed columns in expand
1938
- - Deploy to SAP HANA: passing of options to `hdi-deploy` via `HDI_DEPLOY_OPTIONS` now possible
1939
- - Keys as path segments in beta OData to CQN parser
1940
- - OData V2 Remote Service (`"kind": "odata-v2"`):
1941
- + Request data properties of types `cds.Date`, `cds.DateTime`, and `cds.Timestamp` are converted accordingly to OData V2 specification
1942
- + Response data properties of types `cds.Decimal`, `cds.DecimalFloat` (deprecated) and `cds.Integer64` are handled properly when using `Accept` header with `IEEE754Compatible=true/false` and `ExponentialDecimals=true/false` format parameters
1943
-
1944
- ## Version 5.7.6 - 2022-02-23
1945
-
1946
- ### Fixed
1947
-
1948
- - `draftActivate` action does not return children if not requested
1949
-
1950
- ## Version 5.7.5 - 2022-01-14
1951
-
1952
- ### Fixed
1953
-
1954
- - Instance-based restriction for activation of draft-enabled entities using `or` in restriction
1955
- - Messaging: Duplicate handler execution if application service registered events twice
1956
- - Post of a deeply nested sub-entity with structured parent keys
1957
- - Negating lambda expressions in OData using the `not` operator
1958
- - Event Mesh: Redelivery count when using AMQP
1959
- - OData requests using lambda expressions on localized data
1960
- - `cds.db.exists` wrongly generated a `SELECT * FROM ...` for OData flavor x4
1961
- - Return localized texts on draft activate
1962
- - Unicode characters in unquoted search terms in beta OData to CQN parser
1963
-
1964
- ## Version 5.7.4 - 2021-12-22
1965
-
1966
- ### Fixed
1967
-
1968
- - Complex `@restrict.where: 'exists [...] or (... or ...) or ...'` in draft union scenario no longer crashes the application
1969
- - Sanitization of null values for `cds.RemoteService`
1970
- - Handling of boolean values in draft union scenario with `$expand` query option
1971
- - `_4odata` flag in CQN stays non-enumerable when forwarding to another application service
1972
- - Handling of type references on properties of associations in `cds.minify`
1973
-
1974
- ## Version 5.7.3 - 2021-12-16
1975
-
1976
- ### Fixed
1977
-
1978
- - Message Queuing now accepts `amqp` options
1979
- - OData requests using lambda expressions with `contains` function
1980
- - Result of OData query option `$count=true` when using `$apply`
1981
- - `$filter` with navigation to-one equals value crashes
1982
- - `$skiptoken` query option allows using arbitrary symbols except of `&` with beta OData URL to CQN parser (`cds.env.features.odata_new_parser`). In this non-integer value case, the value won’t be parsed into CQN.
1983
- - Function names in `$filter` can now be case insensitive (as per OData 4.01)
1984
- - `$count` in `$expand` caused server to crash
1985
-
1986
- ## Version 5.7.2 - 2021-12-09
1987
-
1988
- ### Fixed
1989
-
1990
- - Instance-based restriction for activation of draft-enabled entities
1991
- - `.columns('*')` on projections of remote services using renamed properties
1992
- - GraphQL filters on nested fields are now applied correctly
1993
- - Performance degradation during the processing of `where exists`
1994
- - Read drafts via navigation with complex filter expression
1995
-
1996
- ## Version 5.7.1 - 2021-12-06
1997
-
1998
- ### Fixed
1999
-
2000
- - Draft (OData flavors `w4`, `x4`, and `v4` with structs): Flags `HasActiveEntity`, `HasDraftEntity`, and `IsActiveEntity` are now included in the HTTP response for GET requests.
2001
- - Instance-based restriction on entities using localized fields in draft
2002
- - Results of actions/functions do not ignore nested data if query options are present
2003
-
2004
- ## Version 5.7.0 - 2021-12-03
2005
-
2006
- ### Added
2007
-
2008
- - Deferred emitting via persistent outbox, enabled through service `outbox` of kind `persistent-outbox`
2009
- - Support for compiler-generated referential constraints (beta)
2010
- + Activate via `cds.env.features.assert_integrity: '<preset>'`
2011
- + Available presets:
2012
- + `off`: no database constraints and no runtime checks
2013
- + `app`: runtime checks by default
2014
- + `db`: database constraints by default
2015
- + "by default": if not excluded, the runtime check or database constraint applies
2016
- + "opt-in": if included, the runtime check or database constraint applies
2017
- + Behavior can be overridden via `@assert.integrity: <true/false/'RT'/'DB'>` on property, entity, or service level (lowest applies)
2018
- - Allow `--with-mocks` in production via `cds.env.features.with_mocks = true`
2019
- - Set media type from content-type header while inbound streaming
2020
- - Support for navigations with `$count` in `$filter`, for example `GET Entity?$filter=toMany/$count gt 0`
2021
- - Draft: Generate UUIDs for request payloads to which extra data items are added (without the UUID keys) in a custom application handler.
2022
- - Generate GraphQL schema via `cds compile -2 gql` (alpha)
2023
- - Log requests to remote services if the respective log level is set to `debug`
2024
- - Beta OData URL to CQN parser (`cds.env.features.odata_new_parser`):
2025
- + Support for `$skiptoken` query option
2026
- + Limited support for `$apply` query option
2027
- + Supported are the following transformations and their combinations: `aggregate`, `groupby`, `topcount`, `bottomcount`, `filter`, `search`
2028
- + Not supported:
2029
- + Transformations `topsum`, `bottomsum`, `toppercent`, `bottompercent`, `expand`, `concat`, `compute`, `identity`
2030
- + `rollup` and `$all` in `groupby` transformation
2031
- + Filter function `isdefined`
2032
- + Custom aggregation methods, arithmetic operators (`add`, `sub`, `mul`, and so on), and keyword `from` in `aggregate` transformation
2033
- + OData vocabulary for Data Aggregation, `@Aggregation.default` annotation
2034
- + Out of scope:
2035
- + Draft handling
2036
- - Out-of-the-box audit logging for draft enabled entities
2037
- - Support for `@sap/instance-manager`'s hybrid mode
2038
- + Enable via `cds.env.features.hybrid_instance_manager`
2039
- + Respective version of `@sap/instance-manager` required
2040
- - `cds.minify()` (alpha) as static method
2041
- - Annotation `@open` for actions in new Rest Adapter
2042
- - Audit logging (`cds.env.features.audit_personal_data`) supports annotation `@PersonalData.EntitySemantics: 'Other'` and allows an arbitrary composition of entities with respect to `@PersonalData.EntitySemantics` annotations
2043
-
2044
- ### Changed
2045
-
2046
- - `if-match` and `if-none-match` headers are ignored for entities without etags
2047
- - Improve response time of `SELECT` queries that check referential integrity by adding an upper bound `LIMIT 1`
2048
- - Leaner implementation for `sap-statistics`
2049
- - Leading and trailing whitespaces are allowed for `$search` query parameter
2050
- - Insert / Update of Composition of one with empty object is not allowed for non UUID keys
2051
- - Search behavior of whitespaces changed as follows:
2052
- + Searches for plain whitespace, for example, `"$search= "` matches the complete data set.
2053
- + Searches for whitespace surrounded by double-quotes, for example, `$search=" "` matches all entries containing whitespaces.
2054
- - In single-tenant mode, the default SQLite database is used, regardless of `context.tenant`
2055
- - `cds build` for Node.js projects now copies `package-lock.json` files into the staging folder (usually `gen/srv`). This allows the execution of `npm ci` there.
2056
- - Relaxed UUIDs in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
2057
- - Authentication strategies `dummy` and `mock` no longer require `passport`
2058
- - In production, debug logs of `cds.DatabaseService` and `cds.RemoteService` have sanitized values
2059
- + Deactivate via `cds.env.log.sanitize_values = false`
2060
-
2061
- ### Fixed
2062
-
2063
- - Path resolution for references in sub-selects
2064
- - Where exists without infix filter, e.g., `@restrict.where: 'exists author'`
2065
- - `@restrict.where: 'exists [...]'` in draft union scenario
2066
- - Select query with path exists predicates, for example, `WHERE EXISTS books[year = 2000].pages[wordcount > 1000]`
2067
- - Proper registration of audit log event handlers
2068
- - Draft: Generate foreign keys for request payloads to which extra data items are added in a custom application handler.
2069
- - `cds build` correctly merges `hdbmigrationtable` files that have multiple new migration versions defined.
2070
- - `cds.test` converts response data of failed requests to JSON to prevent lost error details
2071
- - Instance-based restriction for draft enabled entities
2072
- - Delete requests for localized with compositions
2073
- - Ignore input for static and calculated fields during draft activate
2074
- - Clear extension map entry on error during CSN fetching
2075
- - Do not ignore errors during diff calculation
2076
- - Requests to mocked remote service when using custom service name with `.service` property
2077
- - Rollback on already backrolled or committed transactions are ignored
2078
- - Rollback handling in spawned background job
2079
- - `cds.spawn()` throws error if passed option is an instance of `cds.EventContext`
2080
- - Delete `timestamp` from options passed to `cds.spawn()` (transactions create their own timestamp)
2081
- - Type error during programmatic action/function call if no params defined
2082
- - Fully qualified bound actions/ functions in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
2083
- - Draft handling: `GET` requests with navigation via `SiblingEntity` and expand to-one
2084
- - No audit log if sensitive data not selected
2085
- - Kibana formatter: do not log authorization header value
2086
- - Audit logging (`cds.env.features.audit_personal_data`) no longer crashes the application
2087
- + when using the same entity as a composition child in different parent entities
2088
- + when accessing a not existing entity
2089
-
2090
- ### Removed
2091
-
2092
- - Deprecated feature flags `cds.env.runtime.skipWithParameters` and `cds.env.features.skip_with_parameters`. Use `cds.env.features.with_parameters` instead.
2093
-
2094
- ## Version 5.6.4 - 2021-11-23
2095
-
2096
- ### Fixed
2097
-
2098
- - Preserve log level in Kibana formatter
2099
- - RFC 3986 compliant segment recognition in beta URL to CQN parser (`cds.env.features.odata_new_parser`)
2100
- - Support for `$skiptoken` OData query option when using beta URL to CQN parser (`cds.env.features.odata_new_parser`)
2101
- - OData requests with `$skip` and without `$top` query option to services with defined default limit (`cds.query.limit.default`)
2102
- - Creating entities with binary keys. Currently, the binary keys may be provided only as Node.js `Buffer` instances using a custom handler.
2103
- - Requests with a payload containing nested arrayed elements no longer crash the application
2104
-
2105
- ## Version 5.6.3 - 2021-11-15
2106
-
2107
- ### Fixed
2108
-
2109
- - `cds run` does not fail if `cds.requires.multitenancy` is explicitly set to `false`
2110
- - Calculation of `DraftIsCreatedByMe` or `DraftIsProcessedByMe` when expanding or navigating to `DraftAdministrativeData`
2111
- - Nested `any` in `$filter` query option
2112
- - Crash on draft activate after draft edit for not existing composition of one if no explicit DB service is defined
2113
- - Typescript definition of `srv.delete` no longer leads to a duplication error
2114
-
2115
- ## Version 5.6.2 - 2021-11-08
2116
-
2117
- ### Fixed
2118
-
2119
- - Handle arrayed elements using templating mechanism
2120
- - OData requests to `$count` endpoint of ETag enabled entity
2121
- - `cds.test` does no longer crash if executed in `cds repl` on a remote service call
2122
- - Crash on draft activate after draft edit for not existing composition of one
2123
- - Ensure request correlation (with default server)
2124
- - `<entity>.texts` points to real text entity
2125
- - Draft union with expand to to-one and to-many
2126
- - No columns in draft lock statement (i.e., use `SELECT 1`)
2127
-
2128
- ## Version 5.6.1 - 2021-11-02
2129
-
2130
- ### Fixed
2131
-
2132
- - UAA credentials lookup
2133
- - Revert return type validation for `cds.String` for compatibility with older `@sap/cds-mtx` versions
2134
- - Messaging: Ill-defined incoming AMQP messages will not crash the app
2135
- - `cds compile -l` does no longer crash if called without `--to` option
2136
-
2137
- ## Version 5.6.0 - 2021-10-29
2138
-
2139
- ### Added
2140
-
2141
- - New REST protocol adapter (beta)
2142
- + Makes use of the beta OData URL to CQN parser. Hence, almost all OData requests are supported (see limitations below).
2143
- + Activate via `cds.env.features.rest_new_adapter = true`
2144
- + Out of scope (compared to OData protocol adapter):
2145
- + OData query option `$apply`
2146
- + Batch requests (with or without atomicity groups)
2147
- + Draft handling
2148
- - New GraphQL protocol adapter (alpha)
2149
- + Serves single endpoint for all services based on `served` event at `/graphql` (subject to change).
2150
- + Activate via `cds.env.features.graphql = true`
2151
- + Required additional dependencies: `@graphql-tools/schema`, `express-graphql`, and `graphql`
2152
- + Not meant for productive use! For example, authentication and authorization are out of scope.
2153
- - Support of the following features when using beta OData URL to CQN parser (`cds.env.features.odata_new_parser`):
2154
- + REST-style URLs (example: `GET /Foo/1`)
2155
- + `$expand=*` query option on different nested expand levels (`$levels` isn’t yet supported)
2156
- + Draft handling
2157
- + Structured keys
2158
- + Streaming
2159
- + Navigation to primitive properties without `$value` query option
2160
- - Optimized Search: Support `$filter` query option in combination with optimize `$search` and localized data (when the environment variable `cds.env.features.optimized_search` is set to `true`)
2161
- - `GET` requests support static values in ON-conditions of composition parents when using unmanaged backlinks
2162
- - `destinationOptions` can be configured for Remote Services
2163
- + Example:
2164
- ```json
2165
- {"cds":{"requires":{
2166
- "S4": {
2167
- "destinationOptions": {
2168
- "selectionStrategy": "subscriberFirst",
2169
- ...
2170
- }
2171
- }
2172
- }}}
2173
- ```
2174
- - `forwardAuthToken` can be configured for Remote Services
2175
- + Example:
2176
- ```json
2177
- {"cds":{"requires":{
2178
- "credentials": {
2179
- "url": "...",
2180
- "forwardAuthToken": true
2181
- }
2182
- }
2183
- }}}
2184
- ```
2185
- - File to store private project settings `.cdsrc-private.json` (shouldn’t be checked in source code management)
2186
- - Read additional configuration from JSON files or directory structures using `CDS_CONFIG` env variable
2187
- - Missing typescript definitions for services' `.send` shortcuts `get`, `put`, `post`, `patch`, and `delete`
2188
- - Build VCAP_SERVICES env variable dynamically for compatibility (`cds.env.features.emulate_vcap_services`)
2189
- - GET requests to Remote OData Service are automatically sent as `$batch` if the generated URL is too long
2190
- + Can be configured via `cds.env.remote.max_get_url_length` (beta, default: 1028).
2191
- - Provide ETag in response headers in case of `prefer: return=minimal`
2192
- - Kibana formatter: log the user's id via `cds.env.log.user = true` (beta)
2193
- + Consider the data privacy implications!
2194
- - Experimental support for uiflex running locally on sqlite by setting `cds.requires.extensibility.kind = uiflex`
2195
- - Minified `cds.model` (deactivate via `cds.env.features.skip_unused = false`)
2196
-
2197
- ### Changed
2198
-
2199
- - Query API: Specified keys are now part of the target path, e.g. `SELECT.from('Books', 1)` will move the key condition into `SELECT.from.ref`.
2200
- + Deactivate during two-month grace period via compat feature flag `cds.env.features.keys_into_where = true`
2201
- - Removed duplicate integrity checks
2202
- - Optimized search: Optimize queries for non-localized elements
2203
- - OData to CQN parsing changed to enable remote service consumption. As a side effect, application code in `srv.on('READ', handler)` custom handlers relaying on CQN might need to be adapted. The following has changed:
2204
- - Previously, columns in `req.query.SELECT.columns` were always defined. Now, in case there is no `$select` and `$expand` query options in the OData query, `req.query.SELECT.columns` is `undefined`.
2205
- - Previously, if the `$expand` query option was specified in the OData query, all elements of the expanded navigation property were listed explicitly in the CQN query. Now, an `*` (asterisk) is listed instead.
2206
- - Non-specified columns are resolved at database layer
2207
- - `cds deploy` no longer enforces the presence of SAP CommonCryptoLib (checked with env variable `SECUDIR`) on Windows since it uses now the built-in security libraries
2208
- - Target keys are not included in the body when sending `PATCH` requests to external services
2209
-
2210
- ### Fixed
2211
-
2212
- - Audit logging of non-string values
2213
- - Query API compilation error when keys start with `{`
2214
- - Handling of wrong Edm.DateTimeOffset values
2215
- - Using UUIDs in search with beta OData URL to CQN parser (`cds.env.features.odata_new_parser`)
2216
- - Runtime exception for READ requests with deeply nested navigation and structured keys, for example:
2217
- `GET foo/Bar/b708ad6c-2dd4-40d5-91c0-2e3eacf306d2/Info/sales(a='1010',b='10',c='00')/functions(functionName='error')`
2218
- - The check for the minimum Node.js version now properly enforces version 12.18, i.e. aborts server startup.
2219
- - `cds.test` fails with a clearer error message if the server wasn't started at all
2220
- - Audit logging for modification of personal or sensitive data when using same entity as a composition child in different parent entities
2221
- - Deleting an entity defined with managed composition of one, whereas a dependent entity is defined as having an independent managed association to its composition parent no longer crashes the application
2222
- - Audit logging for entities having arrayed elements
2223
- - Filtering for `cds.Date` on Remote OData V2 services
2224
- - Crash when `rollup` function was used in groupBy in OData requests
2225
- - Or for $filter with IsActiveEntity=true for access to active entities
2226
- - Reading draft-enabled entity with `$expand` targeting non-draft associations
2227
- - Delete with sub-select
2228
- - Runtime exception when streaming property annotated with `@Core.MediaType: 'application/json'`
2229
- - Reading streams via navigation when entity containing large data is a part of a draft-enabled composition tree
2230
- - Read draft entity with nested exists restriction
2231
- - Activate draft of entity having `to-one` and `to-many` compositions
2232
- - Caching issue that causes the OData `omit-values` preference in `Prefer` HTTP headers to misbehaves
2233
- - Deletion of draft instances if multiple draft enabled entities are used within one service
2234
- - Queries with `contains` filter targeting a remote OData v2 service
2235
- - Schema evolution support for nested CDS entities in `cds build`
2236
- - I18n texts with quotes and other special characters get escaped correctly if they appear in XML and JSON documents
2237
- - Execution of plain SQL statements on SQLite
2238
- - `Content-Disposition` header is now URL encoded
2239
-
2240
- ### Removed
2241
-
2242
- - Usage of `@sap/xsenv` is superseded with `cds.env` in node.js cds-runtime
2243
- - `@odata.on.insert/update` and `#user/now` are deprecated and will be removed in the next major version. Use `@cds.on.insert/update` and `$user/now` instead.
2244
-
2245
- ## Version 5.5.5 - 2021-10-20
2246
-
2247
- ### Fixed
2248
-
2249
- - Action parameters set to null
2250
- - Restrictions with "where exists" clause and filter on ambiguous fields
2251
- - Nulled user attribute in restrictions with "where exists" clause
2252
- - Wait for all queries to settle during deep operation
2253
-
2254
- ## Version 5.5.4 - 2021-10-12
2255
-
2256
- ### Fixed
2257
-
2258
- - Backwards compatibility for `cds.tx({ user: new User ({ tenant, locale }) })`
2259
- - Transaction API fix: `cds.tx ({ tenant }, tx => { ... })` instead of `cds.tx (tx => { ... }, { tenant })`
2260
- - Writable and reliable `query._target`
2261
- - `req.target` in REST with navigations in URL
2262
-
2263
- ## Version 5.5.3 - 2021-10-06
2264
-
2265
- ### Fixed
2266
-
2267
- - Resolving of views for view definitions using aliases
2268
- - `cds.test` in `cds repl` no longer yields an error with the `beforeEach` function not found
2269
- - Aliasing in case of draft union when expanding more than one `to-one` association
2270
- - Resolving of views if intermediate views are defined in database namespace
2271
-
2272
- ## Version 5.5.2 - 2021-09-29
2273
-
2274
- ### Fixed
2275
-
2276
- - `$expand` requests with virtual fields with the same name in root and child
2277
- - Requests expanding `DraftAdministrativeData` when compound keys are used
2278
- - `SELECT.columns` with an empty array as argument
2279
- - Queries with complex lambda filters
2280
-
2281
- ## Version 5.5.1 - 2021-09-24
2282
-
2283
- ### Added
2284
-
2285
- - Support for casting SQL function input
2286
-
2287
- ### Fixed
2288
-
2289
- - Typo in `DELETE` method of `cds.test`
2290
- - View resolving for intermediate queries
2291
- - Result post-processing for renamed expands
2292
- - Don't use placeholder values for `null`
2293
-
2294
- ## Version 5.5.0 - 2021-09-23
2295
-
2296
- ### Added
2297
-
2298
- - Support for minified models
2299
- - Messaging: Support for string payloads
2300
- - Messaging: Webhooks use 'application/json' as the default content type
2301
- - Messaging: If senders don't use `data` as a property of the payload, then the whole payload is interpreted as `data`
2302
- - Messaging: Support for `$namespace` placeholer in queue name
2303
- - Support for deletable singletons with `@odata.singleton.nullable`
2304
- - Remote requests set the `accept-language` header according to the original request or the user's locale
2305
- - Support for choosing data source names different from names of respective service definitions.
2306
- + Example:
2307
- ```json
2308
- {"cds":{"requires":{
2309
- "S4": {
2310
- "model": "...", "service": "API_BUSINESS_PARTNER"
2311
- }
2312
- }}}
2313
- ```
2314
- - When calling `cds.tx()` to create new transactions, this now automatically inherits the current event context from `cds.context`. In case that creates issues set `cds.env.features.cds_tx_inheritance = false` to restore the former behaviour. You can still overwrite individual context settings, for example:
2315
- ```js
2316
- const tx = cds.tx() // inherits tenant and user
2317
- const tx = cds.tx({ // inherits tenant
2318
- user: new cds.User.Privileged
2319
- })
2320
- ```
2321
- - Method `cds.tx()` now allows to pass a function which will be executed within a new managed transaction, with `tx.commit/rollback()` handled automatically. For example:
2322
- ```js
2323
- await cds.tx (tx => {
2324
- await tx.insert (...)
2325
- await tx.read (...)
2326
- })
2327
- ```
2328
- is equivalent to:
2329
- ```js
2330
- const tx = cds.tx ()
2331
- try {
2332
- await tx.insert (...)
2333
- await tx.read (...)
2334
- await tx.commit()
2335
- } catch {
2336
- await tx.rollback()
2337
- }
2338
- ```
2339
- - Method `cds.tx({user})` now allows specifying a user as a plain string, for example:
2340
- ```js
2341
- cds.tx ({ user:'me' })
2342
- ```
2343
- is equivalent to:
2344
- ```js
2345
- cds.tx ({ user: new cds.User('me') })
2346
- ```
2347
- - Newly introduced method `cds.spawn()` allows correctly and conveniently spawning background jobs from within event handlers. Thereby ensuring a detached fully-managed ACID transaction set as `cds.context` for each execution of the background job, inheriting the current event context from the outer `cds.context` by default. Usage options:
2348
- ```js
2349
- cds.spawn (async ()=>{
2350
- await INSERT.into ('Ticker') ...
2351
- })
2352
- ```
2353
- ```js
2354
- cds.spawn (async ()=>{
2355
- await INSERT.into ('Ticker') ...
2356
- },{ after: 111 /* ms */ })
2357
- ```
2358
- ```js
2359
- let n=0, handle = cds.spawn (async ()=>{
2360
- await INSERT.into ('Ticker') ...
2361
- if (++n>9) clearTimeout (handle)
2362
- },{ every: 111 /* ms */ })
2363
- ```
2364
- ```js
2365
- cds.spawn (async ()=>{
2366
- await INSERT.into ('Ticker') ...
2367
- },{ // inherits tenant
2368
- every: 111 /* ms */,
2369
- user: new cds.User.Privileged
2370
- })
2371
- ```
2372
- - Default server is CORS-enabled for all origins if not in production
2373
- - Default lock acquire timeout for `SELECT FOR UPDATE` via `cds.env.sql.lock_acquire_timeout`
2374
- - Optimized search: Support `groupby` for localized data (when the environment variable `cds.env.features.optimized_search` is set to `true` on SAP HANA)
2375
- - Out-of-the-box audit logging for deep structures without own association to data subject
2376
- + limited to one data subject per role per composition tree
2377
- - Support for reading streams via `GET /<Entity>(<ID>)/$value`
2378
- - Draft choreography: support of navigation with `SiblingEntity`
2379
- - Support for where exists with infix filters in `@restrict`
2380
- - Support annotation `@Capabilities.ExpandRestrictions.NonExpandableProperties`
2381
- - `@Core.ContentID` added to OData error responses if `content-id` header is specified
2382
- - New OData URL to CQN parser (`cds.env.features.odata_new_parser`):
2383
- + support of navigation to primitive properties using `$value`
2384
- + support of `not` operator with string functions (`contains`, `startswith`, `endswith`)
2385
- - Support for default values for virtual fields
2386
- - Payload for non-writable navigation targets removed from `req.data`
2387
- - `cds build` supports i18n message bundles for Java and Nodejs apps and a default CSN format option for Java
2388
- - View resolving considers renaming of foreign keys and `excluding` names when `columns` are explicitly provided in CQN
2389
- - Resilient acquire for SAP HANA via `cds.env.requires.db.connection_attempts = <number>` (alpha; hard max of 3 enforced)
2390
-
2391
- ### Changed
2392
-
2393
- - Messaging: Webhooks will always generate tokens
2394
- - Messaging: In multitenancy mode, messaging artifacts are only deployed to subscribers (unless the service option `deployForProvider` is set to `true`)
2395
- - Messaging: Incoming messages without corresponding handlers aren’t acknowledged
2396
- - If a service executes a query targeting a projection on one of its entities, the query is resolved along with projections to an entity known by the executing service. The result is post-processed to reflect the expected result of the incoming query. The reason is that no handlers of the executing service were executed as they didn’t know the query target.
2397
- + Deactivate during two-month grace period via compat feature flag `cds.env.features.resolve_views = false`
2398
- - Use `@sap/cds-compiler`'s `smartId` function to determine whether a reference needs to be quoted.
2399
- + Allows the use of non-word characters in column names, for example `entity Foo { ![bar/bz]: String; }`.
2400
- + Support for columns with spaces with feature flag `cds.env.features.spaced_columns`.
2401
- + Note: Restrictions in other layers (example: OData's simple identifier schema) still apply.
2402
- + Note: Expressions in references (example: `ref: ['foo as bar']`) currently works but were never intended to and will be removed in future versions.
2403
- - Clear draft data based on their draft UUID instead of via deep delete
2404
- - Support `@sap/cds-compiler`'s changes for DB constraints: managed and unmanaged compositions of one behave like associations. This means that only `$self`-managed composition of one gets `DELETE CASCADE` constraint. Since all other "2one" cases require extra `DELETE` handled by the runtime, that constraint is ignored.
2405
- - Value with regards to date and time functions aren’t converted to strings in the OData protocol adapter
2406
- - No placeholders for `LIMIT` to enable statement caching during pagination
2407
- - Arrayed elements stringified in DB layer
2408
- - Return values of handlers will have precedence over database reads
2409
- - Error of a failed request to a Remote Service contains now the response payload if available
2410
- - Configuring ad-hoc destinations via `credentials.url` is now allowed in `NODE_ENV=production`
2411
- - New OData URL to CQN parser (`cds.env.features.odata_new_parser`):
2412
- + CQN for `$select` and `$expand` columns
2413
-
2414
- ### Fixed
2415
-
2416
- - `SELECT.from (Foo, f => f.bar('*').where(...))` resulted in a runtime exception
2417
- - Preserved locales are now considered when accessing database tables
2418
- - Integrity checks for compositions by draft enabled entities
2419
- - Constant columns must not be quoted anymore, i.e. `{ val: "'myValue'", as: "myColumn"}` must be changed to `{ val: "myValue", as: "myColumn" }`
2420
- - Accidental `tx.run()` after prior `tx.commit/rollback()` lead to acquired connections not returned to pool. This is detected and disallowed now. In case that creates issues set `cds.env.features.cds_tx_protection = false` to restore the former behaviour.
2421
- - Structured keys are correctly resolved with pegjs-based parser
2422
- - Template processing for columns with spaces in their name
2423
- - Deep delete with recursions in composition tree (with limited recursion depth)
2424
- - Draft edit with recursions in composition tree (with limited recursion depth)
2425
- - `emit` for messaging services now also works in custom express middlewares
2426
- - `req.query` is a CQN object (previously array with one entry) in case of batch insert in REST adapter
2427
- - HasActiveEntity flag with expand
2428
- - `compile.to.serviceinfo` now honors default Java endpoint paths if none are configured in `application.yaml`
2429
- - `PATCH` request to a non-existent entity annotated with the `@PersonalData` annotation
2430
- - `req.diff()` while deep updating via composition
2431
- - Convert data type of elements in sub-entities (to one association) when forwarding responses to external services
2432
- - Update children of a composition of many (`INSERT > DELETE`) with `PATCH/PUT` having at the same time another association to one composition child respects foreign key constraints.
2433
- - Handling of virtual fields used in the `$filter` query option of navigation requests
2434
- - Copy texts in default language from active to draft table on draft edit
2435
- - Optimized search: Escape double quotation marks and backslashes (when the environment variable `cds.env.features.optimized_search` is set to `true`)
2436
- - Update for multiple rows
2437
- - Expand during draft union
2438
- - Validate content type for `$batch` requests
2439
- - Support for `SELECT` statements in `where` clauses when resolving views
2440
- - `INSERT.rows()` doesn’t silently fill in `INSERT.entries` anymore &rarr; use `INSERT.entries()` to do so instead.
2441
- - `UPDATE(Foo).with({foo:{'=':'bar'})` erroneously produced:
2442
- ```js
2443
- {UPDATE:{..., with:{foo:{ref:['bar']}}}} //> wrong
2444
- ```
2445
- instead of:
2446
- ```js
2447
- {UPDATE:{..., data:{foo:'bar'}}} // correct
2448
- ```
2449
- &rarr; to produce the ref, use one of:
2450
- ```js
2451
- UPDATE(Foo).with ({foo:{ref:['bar']}})
2452
- UPDATE(Foo).with `foo=bar`
2453
- ```
2454
- - `UPDATE.with` property stays undefined until actually filled with data
2455
- - Differentiate between require and initialize error of audit logging client
2456
- - The built-in model tree-shaking erroneously deleted explicitly modeled `.texts` entities
2457
- - Actions and functions with `Integer` response type in REST services
2458
- - Occasional drop of conditions in `WHERE` depending on the value when using structured types
2459
- - `PATCH` fixed for singletons and when having a keyless, for example, managed to-one navigation path
2460
- - Internal server error when forwarding a query to an external service whose target entity doesn’t contain keys
2461
- - Nested where exists in `@restrict` via navigation (CRUD-only; beta)
2462
- - Expand to one in draft union
2463
- - Patch to auto exposed entity through composition of aspect from SAP Fiori Elements
2464
- - Diff for delete in draft
2465
- - Streaming requests on views with joins no longer crash the application
2466
-
2467
- ### Removed
2468
-
2469
- - Direct usage of body-parser
2470
- - Queries constructed from `cds.ql` do not have the _internal_ property `cqn` anymore
2471
- - Inofficial variant `SELECT({'expand(foo)':['a','b']})` is not supported anymore
2472
- &rarr; use one of these official APIs for expands instead:
2473
- ```js
2474
- SELECT(x => { x.a, x.foo (f =>{ f.b, f.c }) })
2475
- SELECT(['a',{ref:['foo'], expand:['b','c']}])
2476
- ```
2477
- - Inofficial variant `SELECT.orderBy('foo','desc')` is not supported anymore
2478
- &rarr; use one of these official APIs instead:
2479
- ```js
2480
- SELECT.from(Foo).orderBy({foo:'desc'})
2481
- SELECT.from(Foo).orderBy('foo desc')
2482
- ```
2483
- - Inofficial variant `SELECT.orderBy('foo, bar desc')` is not supported anymore
2484
- &rarr; use one of these official APIs instead:
2485
- ```js
2486
- SELECT.from(Foo).orderBy({foo:1,bar:-1})
2487
- SELECT.from(Foo).orderBy('foo','bar desc')
2488
- SELECT.from(Foo).orderBy `foo, bar desc`
2489
- ```
2490
- - Inofficial variant `SELECT.where({ or: [{ foo: 'bar' }, { foo: 'baz' }] })` is not supported anymore
2491
- &rarr; use one of these official APIs instead:
2492
- ```js
2493
- SELECT.from(Foo).where({ foo: 'bar', or: { foo: 'baz' } })
2494
- SELECT.from(Foo).where `foo='bar' or foo='baz'`
2495
- ```
2496
- - Usage of SQL window functions during expand on SAP HANA
2497
- - Hidden symbol for where clause elements originating from `@restrict`
2498
- - Error masking gate keeper for `cds.env.log.levels.cli`
2499
-
2500
- ## Version 5.4.6 - 2021-09-18
2501
-
2502
- ### Added
2503
-
2504
- - Support for nested where exists in `@restrict` (CRUD-only; beta)
2505
-
2506
- ### Fixed
2507
-
2508
- - Inverse transition mapping calculation
2509
- - Skip empty structures during deep update
2510
-
2511
- ## Version 5.4.5 - 2021-09-15
2512
-
2513
- ### Fixed
2514
-
2515
- - Processing of null elements during deep update
2516
- - Performance issue during template processing
2517
-
2518
- ## Version 5.4.4 - 2021-09-09
2519
-
2520
- ### Fixed
2521
-
2522
- - For drafts, the query parameter `$top=0` in combination with `$count=true` now returns the correct `@odata.count` value
2523
- - Deep delete with composition of one with structured key in target
2524
- - Implicit delete of child with structured key
2525
- - Update of deeply nested entity with structured key
2526
- - Order by join column during draft union
2527
- - Skip calculated properties while following projections
2528
- - The `with parameters` clause is now correctly handled in sub-selects if the locale parameter exceeds three characters
2529
- - Statement already finalized error on SQLite
2530
-
2531
- ## Version 5.4.3 - 2021-08-16
2532
-
2533
- ### Fixed
2534
-
2535
- - Skip calculated properties while following projections
2536
- - Unrestricted subclauses in `@restrict.where`
2537
- - Safe access to `cds.env.log.levels.cli`
2538
-
2539
- ## Version 5.4.2 - 2021-08-11
2540
-
2541
- ### Fixed
2542
-
2543
- - Where condition in draft union in case of multiple keys
2544
- - Handling of nulled properties in Service Consumption
2545
- - Requests to Remote Services returning `text/html` result in an error
2546
- - View resolving is more robust for path expressions
2547
- - Skip foreign properties (e.g., mixins via associations) while following projections
2548
- - UPDATE entity with composition to aspect with structure type property
2549
-
2550
- ## Version 5.4.1 - 2021-08-03
2551
-
2552
- ### Fixed
2553
-
2554
- - Erroneously added Brazilian Portuguese (`pt_BR`) removed from the list of normalized locales
2555
-
2556
- ## Version 5.4.0 - 2021-08-02
2557
-
2558
- ### Added
2559
-
2560
- - Messaging: Support for format `cloudevents`
2561
- - Messaging: Support for `@topic`
2562
- - Messaging: Support for `subscribePrefix` and `publishPrefix`
2563
- - Support for `ReadByKeyRestrictions` annotations
2564
- - Support for OData `omit-values` preference in `Prefer` HTTP header
2565
- - Object variant of service methods
2566
- - Brazilian Portuguese (`pt_BR`) is now on the list of [normalized locales](https://cap.cloud.sap/docs/guides/i18n#normalized-locales)
2567
- - Support for actions and functions on Remote Service
2568
-
2569
- ### Changed
2570
-
2571
- - In multitenant `enterprise-messaging`: If a tenant subscribes, the messaging artifact generation is awaited. In your provisioning service configuration, make sure to set `onSubscriptionAsync` to `true` and `callbackTimeoutMillis` to more than 10 minutes.
2572
- - In `enterprise-messaging`: Messages are sent via HTTP
2573
- - Computed values are preserved during draft activate
2574
- - Messaging: No more topic manipulation per default
2575
- - For consistency reasons `cds build` now determines the default model path using cds resolve
2576
- - Match XSUAA's user attribute value `$UNRESTRICTED` case insensitive
2577
- - CDS build now uses new CDS logging facade to allow for consistent logging behaviour across the different CDS modules
2578
-
2579
- ### Fixed
2580
-
2581
- - Disable persistency check for requests without a target
2582
- - Expand at draft edit
2583
- - Remove restriction for `$search` queries not accepting brackets
2584
- - Select query with infix filter in custom handler
2585
- - Order by on same named properties of different associations in draft
2586
- - Allow to call bound actions and functions of read-only entities
2587
- - Writing draft-enabled entities with composition of aspects (a.k.a. managed compositions)
2588
- - Expand to autoexposed association/composition in draft case
2589
- - `cds.parse.xpr()` always returns an array
2590
- - Allow boolean options in `cds build` CLI
2591
- - Integrity check in case of bulk query execution
2592
-
2593
- ### Removed
2594
-
2595
- - Messaging: The topic prefix `topic:` is deprecated
2596
- - Messaging: No default headers for format not equal to `cloudevents`
2597
-
2598
- ## Version 5.3.3 - 2021-07-28
2599
-
2600
- ### Fixed
2601
-
2602
- - Validation of arrayed parameters of actions and functions
2603
- - Skip not-to-be-audited entities in composition tree
2604
- - In draft, `<entity>.texts` can be used without explicit exposure
2605
-
2606
- ## Version 5.3.2 - 2021-07-16
2607
-
2608
- ### Added
2609
-
2610
- - `enterprise-messaging`: Experimental support to send messages via HTTP (`emitPerHTTP: true`)
2611
-
2612
- ### Changed
2613
-
2614
- - Aligned Node.js and Java auditlog APIs
2615
- - `enterprise-messaging`: No topic manipulation for outbound events beginning with a different namespace
2616
-
2617
- ### Fixed
2618
-
2619
- - Call `init()` and register custom handlers for every new `cds.ApplicationService` created in extensibility scenarios
2620
- - Structured keys for deep operations in OData flavor `x4`
2621
- - Wrong user in messaging requests coming from webhooks
2622
- - Improvements in log formatter for Kibana:
2623
- + Remove redundant metadata information
2624
- + Add information from `req.headers`
2625
- + Treat error-like objects like errors
2626
- + Custom fields (alpha)
2627
- - Minor fix for *optimized search* on SAP HANA
2628
-
2629
- ## Version 5.3.1 - 2021-07-12
2630
-
2631
- ### Changed
2632
-
2633
- - Task `@sap/cds-runtime/lib/messaging/deploy.js` moved to `@sap/cds/tasks/enterprise-messaging-deploy.js` after module merge
2634
- - Parse OData lambda expression on collection of scalars with equals operator (i.e., `.../any(d:d = "<val>")`) to CQN with `contains` (pegjs-based parser only)
2635
-
2636
- ### Fixed
2637
-
2638
- - Improved error message in case custom `server.js` doesn't export a function
2639
- - Kibana formatter: `stacktrace` as array of strings
2640
- - Bootstrapping for feature toggles
2641
- - Deep operations for certain composition constellations
2642
- - Aliasing on SQL layer for OData `ne` operator
2643
- - Fixed scope issues in manual deployment for messaging
2644
- - Projections with infix filters and cardinality changes are safely ignored during `CREATE`/`UPDATE`
2645
- - Resolving of views if underlying projection has explicit aliases
2646
-
2647
- ## Version 5.3.0 - 2021-07-07
2648
-
2649
- ### Added
2650
-
2651
- - `cds serve` and `cds deploy` now also load `.ts` Typescript files if started with [`ts-node`](https://www.npmjs.com/package/ts-node)
2652
- - Log formatter for Kibana (beta) via `cds.env.features.kibana_formatter`
2653
- - First version of the `AuditLogService` (beta)
2654
- + Supported events: `dataAccessLog`, `dataModificationLog`, `configChangeLog`, and `securityLog`
2655
- + Usage: `const AuditLogService = await cds.connect.to('audit-log'); await AuditLogService.emit/send('<event>', <data>)`
2656
- + Out-of-the-box audit logging for modification of personal data and access to sensitive personal data via `cds.env.features.audit_personal_data`
2657
- - Support for deep updates with compositions of one in `UPDATE(...).with(...)`
2658
- - Support for logical events in `composite-messaging`
2659
- - Initial support for generating OData V2 queries
2660
- - Preserve `DraftAdministrativeData_DraftUUID` if OData v2 client (indicated by `@sap/cds-odata-v2-adapter-proxy`)
2661
- - Use placeholder values for numbers with `cds.env.features.parameterized_numbers` (alpha)
2662
- - Support for argument-less SQL functions (e.g., `current_date`)
2663
- - Performance optimization: Resolve localized texts for `$search` queries at runtime (alternative to localized views resolution) to avoid the performance overhead of the SQL `coalesce` function in filter operations. To enable this *experimental feature* for SAP HANA, you can set the `cds.env.features.optimized_search` environment variable to `true`
2664
- - Performance optimization: Optimize `$search` queries using the `CONTAINS` predicate instead of the `LIKE` predicate in the `WHERE` clause of a `SELECT` statement. To enable this *experimental feature* for SAP HANA, you can set the `cds.env.features.optimized_search` environment variable to `true`
2665
- - OData lambda expressions in `$filter`:
2666
- + Basic support of structured types (`cds.env.odata.flavor = x4`) on SAP HANA
2667
- + Support of navigation paths on SAP HANA, for example, `GET /Books?$filter=author/books/all(d:d/stock gt 10)`
2668
-
2669
- ### Changed
2670
-
2671
- - Custom build tasks are no longer restricted to `@SAP` namespace.
2672
- - CDS build tasks of type `fiori` are no longer copying files located in the UI module folder into the deployment staging folder.
2673
- - Leaner error messages for unsuccessful remote service calls
2674
- - Incoming messages now contain a privileged user
2675
- - `SELECT.where(...)` generates CQN with list of values for `in` operator
2676
- - Always use flag `u` during input validation via `@assert.format`
2677
- - Intermediate CQN format for lambda expressions with preceding navigation path
2678
- - Better error messages for draft enabled entities
2679
-
2680
- ### Fixed
2681
-
2682
- - Projecting data works also for projections where one field maps to multiple entries
2683
- - `SELECT` queries without user-specified columns only modify draft columns if the entity is draft-enabled.
2684
- - Generated `index.html` erroneously showed entries for `contained` entities from managed compositions.
2685
- - Use OData simple identifier format for links to entity sets in generated `index.html`.
2686
- - `cds build` logged duplicate compilation errors for the identical `.cds` file, but with different relative path names.
2687
- - `cds serve` no longer tries to redirect Fiori URLs starting with `$` to service URLs.
2688
- - `cds build` now supports `HANA Table data properties files` in SaaS applications. These files haven’t been copied into the sidecar folder.
2689
- - `cds deploy --dry` generates DROP/CREATE DDL statements with an order that also H2 can handle, i.e. with dependant views dropped before basic views.
2690
- - `cds build` now correctly handles symbolic links for nodejs projects on Windows.
2691
- - `cds build` now correctly filters CDS source files when building SaaS applications.
2692
- - Deploy endpoint for messaging artifacts includes the needed roles
2693
- - Detection of mocked services and forced resolving of views
2694
- - `POST/PATCH/PUT` requests on `Composition of many` with association as key and custom `on` conditions
2695
- - `$expand` on entities with `.` in name
2696
- - Filter on external service when using `ne null`
2697
- - Primitive property access of Singletons defined without keys via URL like `/Singleton/name`
2698
- - Expand and navigation in draft-enabled entity with composition of aspects
2699
- - `@Core.ContentDisposition.Filename` instead of `@Core.ContentDisposition`
2700
- - Select query with `$count` with combination with `$search`
2701
- - Parsing of `Timestamp`, `DateTime` and `Date` values in OData request when using beta URL to CQN parser (`cds.env.features.odata_new_parser`)
2702
- - Reset temporal session contexts
2703
- - Caching of runtime aspects
2704
- - Handling of foreign keys as well as an input validation when using nested associations as keys
2705
- - Transaction handling in case of multiple changesets
2706
- - Hana procedure call with output parameter
2707
- - Skip foreign key propagation if target is annotated with `@cds.persistence.skip`
2708
- - Values misidentified as operators in `$search`
2709
- - Ensure UTC valus are written to DB
2710
- - Etag handling in case of action with `$select`
2711
- - Fix draft related issues in odata2cqn
2712
- - Where clause in `@restrict` gets duplicated if `$search` query option is used
2713
-
2714
- ## Version 5.2.0 - 2021-05-31
2715
-
2716
- ### Fixed
2717
-
2718
- - Virtual fields are not filtered out before application service handlers
2719
- - Clarification: the minimum required Node.js version is 12.18. Versions < 12.18 might not work.
2720
- - `cds build` supports validation of `extension-allowlist` which is replacing `entity-whitelist` or `service-whitelist` with cds-mtx 2.0. Warnings are no longer returned if neither entity-whitelist nor service-whitelist is defined.
2721
- - `cds compile -2 sql/edmx` erroneously wrote excessive compiler output to stderr
2722
- - Resolve the correct `enterprise-messaging-shared` credentials from VCAP_SERVICES by default
2723
- - `cds compile --to sql` now completes the last SQL statement with a proper semicolon
2724
-
2725
- ## Version 5.1.5 - 2021-05-21
2726
-
2727
- ### Added
2728
-
2729
- - `cds build` adds `engines.node` version to `package.json` if not present, in order to match the minimum required node version of CDS.
2730
- - Generate an invocation context identifier (`cds.context.id`) if none can be derived
2731
-
2732
- ### Changed
2733
-
2734
- - Better support for UI tools to get metadata for projects with both a Node.js and Java server
2735
-
2736
- ### Fixed
2737
-
2738
- - Match locales in all upper-case (for example `ZH-CN` instead of `zh-CN`)
2739
- - Key elements got lost in `cds.linked` when using type refs referring to other key elements
2740
- - Tree shaking erroneously removed types `Foo` when only referred to by type refs like `bar : Foo:bar`
2741
- - Fixed an error in transaction handling, that lead to db connections not released in rare cases
2742
- - SQL names option gets properly propagated
2743
- - No longer erroneously exclude entities explicitly marked with `cds.persistence:{table, skip:false}`, as in [cap/samples/suppliers](https://github.com/SAP-samples/cloud-cap-samples/blob/6b08826af51651f6b31fce8454fbadd23c634b85/suppliers/srv/mashup.cds#L46)
2744
-
2745
- ## Version 5.1.4 - 2021-05-12
2746
-
2747
- ### Fixed
2748
-
2749
- - Error when using complex type references, as in:
2750
- ```swift
2751
- entity Foo { bar: Tic:tac.toe; }
2752
- entity Tic { tac: Composition of { toe:String } }
2753
- ```
2754
-
2755
- ## Version 5.1.3 - 2021-05-12
2756
-
2757
- ### Fixed
2758
-
2759
- - `cds` does not check for the min. Node.js on BAS, for now
2760
-
2761
- ## Version 5.1.2 - 2021-05-12
2762
-
2763
- ### Fixed
2764
-
2765
- - `cds compile --for odata` now honors the OData version again
2766
- - `cds compile --for odata` now honors the SQL naming mode (`sql.names`) again
2767
- - `cds serve` does not run in an infinite bootstrap loop if `cds.server()` is called in `server.js`
2768
-
2769
- ## Version 5.1.1 - 2021-05-07
2770
-
2771
- ### Fixed
2772
-
2773
- - `cds build` is now always adding `.hdbview, .hdbtable, .hdbconstraint or .hdbindex` plugin mappings to `.hdiconfig` to avoid that deployment is failing in case such files exist in an already deployed container, but are no longer generated.
2774
- - `cds compile --dest <dir>` no longer crashes creating the destination folder
2775
-
2776
- ## Version 5.1.0 - 2021-05-05
2777
-
2778
- ### Added
2779
-
2780
- - Custom error handler via `srv.on('error', function (err, req) { ... })` (beta)
2781
- + Synchronous modification of passed error only
2782
- - `cds.log.format()` for custom log formatting
2783
-
2784
- ### Fixed
2785
-
2786
- - `cds build` now correctly handles `message.properties` files used for Nodejs runtime messages if these files have been defined in an i18n content folder located at project root.
2787
- - Nodejs custom handlers are now correctly resolved if a dedicated destination folder has been configured for the build task.
2788
- - Now, the `.csv` file reader correctly closes open file descriptors to avoid memory leaks during `cds build`.
2789
-
2790
- ### Changed
2791
-
2792
- - Clean up obsolete compiler option `snapi`.
2793
- - `cds build` is no longer validating Nodejs custom service handlers that have been registered using service `@impl` annotation.
2794
-
2795
- ## Version 4.6.6 - 2021-05-05
2796
-
2797
- ### Fixed
2798
-
2799
- - Now, the `.csv` file reader correctly closes open file descriptors to avoid memory leaks during `cds build`.
2800
- - Fixed i18n handling causing `cds build` to fail with error message `bundle is not iterable`.
2801
- - Nodejs custom handlers are now correctly resolved if a dedicated destination folder has been configured for the build task.
2802
-
2803
- ## Version 5.0.7 - 2021-04-21
2804
-
2805
- ### Fixed
2806
-
2807
- - Internal test stabilizations
2808
-
2809
- ## Version 5.0.6 - 2021-04-16
2810
-
2811
- ### Fixed
2812
-
2813
- - `cds build` no longer fails with `TypeError: x.startsWith is not a function` in some situations
2814
-
2815
- ## Version 5.0.5 - 2021-04-15
2816
-
2817
- ### Changed
2818
-
2819
- - Internal errors are no longer decorated with `Please report this`. People interpreted the text as to only include the stack trace in error reports and to omit other valuable context information.
2820
-
2821
- ### Fixed
2822
-
2823
- - `cds build` now correctly creates the deployment layout for multitenant applications (sdc folder contents) that have dedicated folder paths configured for db, srv, and app modules.
2824
- - `cds deploy --to sqlite` now ignores a `_texts.csv` file again if there is a language-specific file like `_texts_en.csv` present
2825
- - `cds env` no longer fails to parse `.env` files with JSON values containing `=` characters
2826
-
2827
- ## Version 5.0.4 - 2021-04-07
2828
-
2829
- ### Fixed
2830
-
2831
- - `cds build` no longer fails with a `task.apply is not a function` error when used in an npm script.
2832
-
2833
- ## Version 5.0.3 - 2021-04-06
2834
-
2835
- ### Fixed
2836
-
2837
- - `cds.compile` got thoroughly cleaned up and enhanced as the single API to compile models
2838
- - `cds.compile.to.cdl` was missing in 5.0.2
2839
- - `cds build` no longer uses reflected CSN which caused odata and EDMX transformation to fail.
2840
- As a consequence language specific EDMX files were missing.
2841
-
2842
- ### Removed
2843
-
2844
- The following undocumented, internal functions have been removed.
2845
- In case you spotted and used them, please replace as given below.
2846
-
2847
- - `cds.compile.cdl` &rarr; use `cds.compile` instead
2848
- - `cds.compile.to.parsed.csn` &rarr; use `cds.parse` instead
2849
- - `cds.compile.to.xtended.csn` &rarr; use `cds.compile` instead
2850
- - `cds.compile.to.inferred.csn` &rarr; use `cds.compile` instead
2851
- - `cds.compile.to.hdi` &rarr; use `cds.compile.to.hdbtable` instead
2852
- - `cds.compile.to.hana` &rarr; use `cds.compile.to.hdbcds` instead
2853
- - `cds.compile.to.xsuaa` &rarr; still available in CLI thru `cds compile -2 xsuaa`
2854
- - `cds.compile.to.serviceinfo` &rarr; still available in CLI thru `cds compile -2 serviceinfo`
2855
- - `cds.compile.to['edmx-v2']` &rarr; still available in CLI thru `cds compile -2 edmx-v2`
2856
- - `cds.compile.to['edmx-v4']` &rarr; still available in CLI thru `cds compile -2 edmx-v4`
2857
- - `cds.compile.to['edmx-w4']` &rarr; still available in CLI thru `cds compile -2 edmx-w4`
2858
- - `cds.compile.to['edmx-x4']` &rarr; still available in CLI thru `cds compile -2 edmx-x4`
2859
-
2860
-
2861
- ## Version 5.0.2 - 2021-03-30
2862
-
2863
- ### Added
2864
-
2865
- - Ensure correlation id and set intermediate `cds.context` in default `server.js`
2866
-
2867
- ### Fixed
2868
-
2869
- - `cds build` no longer aborts for CAP Java SDK based projects with `compiler version 2 not supported` message.
2870
-
2871
- ## Version 5.0.1 - 2021-03-25
2872
-
2873
- ### Added
2874
-
2875
- - `cds.load.properties` and `cds.parse.properties` to load and parse content in .properties format
2876
- - `cds.load.csv` and `cds.parse.csv` to load and parse csv content
2877
- - `CDL`, `CQL`, and `CXL` as new global methods for tagged template strings generating [CSN], [CQN], or [CXN] objects
2878
- - Fluent API classes provided through `cds.ql` also support tagged template strings now in these methods: `SELECT`, `SELECT.from`, `SELECT.where`, `UPDATE`, `UPDATE.with`, `UPDATE.where`, `INSERT.into`, `DELETE.from`, `DELETE.where`
2879
-
2880
- Example:
2881
- ```js
2882
- let Authors = SELECT `ID` .from `Authors` .where `name like ${'%Brontë%'}`
2883
- let Books = SELECT `ID,title` .from `Books` .where `author_ID in ${Authors}`
2884
- await UPDATE`Books`.with`x = x-${amount}`.where`ID=${ID}`
2885
- ```
2886
-
2887
- ### Changed
2888
-
2889
- - Minimum required Node.js version is now 12. Support for Node.js 10 is dropped.
2890
- - `req.timestamp` is a Date object now; was a UNIX epoch integer before, i.e., Date.now()
2891
-
2892
- ### Fixed
2893
-
2894
- - Fixed race conditions in `cds.serve` leading to broken services
2895
- - Fixed typos in API type definitions
2896
- - Fixed `cds.reflect.forall` for CSN extensions
2897
- - Fixed orphaned `_texts` proxies, causing init from csv to fail with "no such table" errors
2898
-
2899
- ## Version 5.0.0 - 2021-03-19
2900
-
2901
- ### Added
2902
-
2903
- - MTX APIs are now automatically served when `cds.requires.multitenancy` exists. This renders an application-level server start script for multitenancy unnecessary.
2904
- - Auto-connect to a live reload server started by `cds watch`
2905
- - `cds.parse` now offers tagged template strings. E.g. const {CDL,CQL,CXL} = cds.parse; CQL`SELECT from Books where stock > 111`.
2906
- - `cds.log` now supports config options for Loggers and log levels via `cds.env.log`
2907
- - `cds.entity.draft` as a stable way to read from draft data
2908
- - `cds.linked` now correctly links, events, action params and results, which were not linked before
2909
- - `cds.env.features.skip_unused = 'all'` removes all definitions from csn which are not reachable by defined services. Especially when using comprehensive reuse models, like ODM, this significantly reduces both, memory consumption as well as excess tables and views in databases
2910
-
2911
- ### Changed
2912
-
2913
- - Upgraded major version of dependency `@sap/cds-compiler`
2914
- - `cds.requires.db.multiTenant` is deprecated. Multitenancy can now be enabled by adding a `cds.requires.multitenancy` configuration.
2915
- - `cds deploy --to hana` no longer adds a driver for SAP HANA to `package.json`. This can be done with `cds add hana`.
2916
- - `cds deploy --to hana` no longer adds configuration for SAP HANA to `package.json`. This can be done with `cds add hana`.
2917
- - `cds deploy --to hana` drops support for the classic CAP Java runtime, i.e. longer writes credentials for SAP HANA to `connection.properties`.
2918
- - Fiori preview now [loads and shows data initially](https://sapui5.hana.ondemand.com/1.84.0/#/topic/1cf5c7f5b81c4cb3ba98fd14314d4504) in its list page
2919
- - I18n template strings now are replaced in EDMX documents such that they retain their surrounding string. For example, the `"{i18n>key1} - {i18n>key2}"` template results in `"value1 - value2"`, while previously the first match replaced the entire string, leading to `"value1"`. This is helpful for the [`Template` strings of `UI.ConnectedFields`](https://github.com/SAP/odata-vocabularies/blob/ac9fe832df9b8c8d35517c637dba7c0ac2753b0f/vocabularies/UI.xml#L168).
2920
- - CDS drops compiler v2 support for classic CAP Java runtime projects. `cds build` returns an error if compiler version 2 is used. For further details regarding migration to CAP Java SDK runtime see https://cap.cloud.sap/docs/java/migration.
2921
-
2922
- ### Fixed
2923
-
2924
- - `cds.connect.to` no longer returns `undefined` in concurrent cases where `connect` is called again while a datasource is about to be connected.
2925
- - `cds.log` formerly wrote log and debug output to stderr, now writes that to stdout
2926
- - `cds.server` now accepts port `0` as a number
2927
- - Race conditions in `cds.serve` and `cds.connect` lead to wrong Service instances to lost handler registrations
2928
-
2929
- ### Removed
2930
-
2931
- - Compiler non-snapi support &rarr; see `cds.env.features.snapi` option
2932
- - In recent releases we added methods `cds.compile.to.hdbtabledata` and `cds.compile.to.hdbmigration`, intentionally undocumented, as they were meant to be private. Nobody should ever have used these methods, hence nobody should be affected by their removal.
2933
-
2934
- ## Version 4.6.5 - 2021-03-12
2935
-
2936
- ### Fixed
2937
-
2938
- - `cds build` now correctly parses `.hdbtablemigration` files on Windows
2939
- - `compile --to serviceinfo` no longer crashes for Spring configuration in multi-root `yaml` files
2940
-
2941
- ## Version 4.6.4 - 2021-03-01
2942
-
2943
- ### Fixed
2944
-
2945
- - Fix call to `to.hdi.migration` compiler API
2946
- - `cds build` for SAP HANA now correctly passes `sql_mapping` options to new hdimigration compiler API.
2947
-
2948
- ## Version 4.6.3 - 2021-02-26
2949
-
2950
- ### Added
2951
-
2952
- - [beta] `cds build` for SAP HANA now provides schema evolution support for multitenant application extensions.
2953
-
2954
- ### Fixed
2955
-
2956
- - `cds compile --to serviceinfo` returns better results for Java projects
2957
- - `cds.connect.to('srv-missing')` called twice with `srv-missing` not configured, would have failed with an error on the first call, but got stuck in the Promise chain for all subsequent calls.
2958
- - `.after` handlers are called with result based on request, e.g., array for collection and object for entity, instead of always array
2959
- - Deactivate during two month grace period via compat feature flag `cds.env.features.arrayed_after = true`
2960
-
2961
- ## Version 4.6.1 - 2021-02-11
2962
-
2963
- ### Added
2964
-
2965
- - [beta] `cds build` for SAP HANA now supports the generation of `hdbmigrationtable` design-time artifacts for big volume tables allowing for schema evolution capabilities. Model entities annotated with `@cds.persistence.journal` will be deployed as `hdbmigrationtable` artifacts instead of `hdbtable`.
2966
-
2967
- ## Version 4.5.3 - 2021-02-19
2968
-
2969
- ### Fixed
2970
-
2971
- - `cds deploy` and `build` now refer to the latest HDI deployer which supports Node.js 14
2972
-
2973
- ## Version 4.5.2 - 2021-02-17
2974
-
2975
- ### Fixed
2976
-
2977
- - `cds serve --with-mocks` now also works in `production` environment if `cds.features.mocked_bindings` is true. Previously, mocks were always disabled in `production`.
2978
- - `cds serve` now only fires the `listening` event once
2979
- - `cds build` redacts cds configuration data in log messages
2980
-
2981
- ## Version 4.5.1 - 2021-02-01
2982
-
2983
- ### Fixed
2984
-
2985
- - Update `@sap/cds-runtime` dependency
2986
-
2987
- ## Version 4.5.0 - 2021-02-01
2988
-
2989
- ### Added
2990
-
2991
- - `cds.server` provides an option to switch off automatically generated `index.html` served at `/`:
2992
- Do that in a custom `server.js`:
2993
- ```js
2994
- const cds = require('@sap/cds')
2995
- // ...
2996
- module.exports = (o) => cds.server({ ...o, index:false })
2997
- ```
2998
- - The default `index.html` now honors the system's setting for dark mode.
2999
- - Former package `@sap/cds-reflect` is now embedded in `@sap/cds`
3000
-
3001
- ### Changed
3002
-
3003
- - Fiori preview is now disabled if `NODE_ENV` is `production`, to avoid any runtime overhead there. You can enable it with configuration `cds.features.fiori_preview: true`.
3004
-
3005
- ### Fixed
3006
-
3007
- - `cds build` now correctly supports multitenant applications defining multiple database modules, e.g. one database for tenant related data and one for shared data.
3008
- - `cds deploy --to hana` does no longer fail with an invalid service name error if '.' is used in the MTA ID.
3009
-
3010
- ## Version 4.4.10 - 2021-01-18
3011
-
3012
- ### Changed
3013
-
3014
- - `cds build` for SAP HANA now only filters csv files if it's needed, e.g. if they contain comment lines.
3015
-
3016
- ## Version 4.4.9 - 2021-01-12
3017
-
3018
- ### Fixed
3019
- - `cds build` for SAP HANA no longer fails sporadically with `ENOENT` when writing CSV files.
3020
-
3021
-
3022
- ## Version 4.4.8 - 2021-01-07
3023
-
3024
- ### Fixed
3025
-
3026
- - Add missing setter for `user.locale`
3027
-
3028
- ## Version 4.4.7 - 2020-12-18
3029
-
3030
- ### Fixed
3031
-
3032
- - `cds build` for Java now also creates a default edmx file (the one w/o language suffix) if the `cds.i18n.languages` array is configured with a set of languages. Runtime systems expect this file.
3033
- - `cds build` now skips empty lines in CSV files when preparing SAP HANA deployment. This doesn’t happens if the build target folder is `.`, because there CSV files are sources that are not touched.
3034
- - `cds build` for SAP HANA now writes CSV files more reliably, avoiding sporadic `ENOENT` errors.
3035
-
3036
- ## Version 4.4.6 - 2020-12-08
3037
-
3038
- ### Fixed
3039
-
3040
- - Compat `.emit()` for synchronous events with object as first parameter
3041
-
3042
- ## Version 4.4.5 - 2020-12-07
3043
-
3044
- ### Fixed
3045
-
3046
- - Revert of _cds serve --at / now can overwrite the default /index.html route_, which caused problems in some applications
3047
-
3048
- ## Version 4.4.4 - 2020-12-04
3049
-
3050
- ### Added
3051
-
3052
- - `cds.User.default` allows to override the default user, e.g. to be `cds.User.Privileged` in tests. By default this is `cds.User.Anonymous`.
3053
-
3054
- ### Changed
3055
-
3056
- - `cds compile` and `build` now do a faster localization of edmx files. If there are no text keys inside these files, the content is no longer duplicated in memory.
3057
- - `cds serve --at /` now can overwrite the default `/index.html` route
3058
-
3059
-
3060
- ## Version 4.4.3 - 2020-12-03
3061
-
3062
- ### Fixed
3063
-
3064
- - `srv.on` can now be used for async events w/o having to call `next` in each handler
3065
- - `srv.emit` constructs instances of `cds.Event` from given arguments, as intended
3066
- - `srv.send` constructs instances of `cds.Request` from given arguments
3067
- - Revert of: `cds build` filters `i18n` files for nodejs staging builds
3068
-
3069
- ## Version 4.4.2 - 2020-12-01
3070
-
3071
- ### Added
3072
-
3073
- - `cds.context` always allows access to the current request context when running in Node v12.18 and higher. It uses Node.js' `async_hooks` API for so-called continuation-local storage, and supercedes the need for `srv.tx(req)` in custom handlers.
3074
- - Custom functions/actions can now be implemented with plain JavaScript methods in subclasses of `cds.Service`
3075
-
3076
- ### Changed
3077
-
3078
- - `cds.unfold` was long-term deprecated, and removed now &rarr; use `cds.compile`
3079
- - `cds.config` was long-term deprecated, and removed now &rarr; use `cds.env`
3080
- - `cds.session` was long-term deprecated, and removed now &rarr; use `cds.db`
3081
-
3082
- ## Version 4.4.1 - 2020-11-27
3083
-
3084
- ### Fixed
3085
-
3086
- - When two services `Foo` and `FooBar` were defined, with one services's name being a substring of the other service's name,
3087
- it may have happened that the same EDMX, i.e. that of `FooBar`, was erroneously returned for both.
3088
- - On Windows, the index page now shows normalized links to embedded html pages, i.e. `foo/bar.html` instead of `foo\bar.html`.
3089
- - `cds build` now consistently uses build target folder `'.'` as default for Java projects - also if custom build tasks have been defined.
3090
- - Requests that contain `*` as `Accept-Language` header value do no longer fail.
3091
-
3092
- ## Version 4.4.0 - 2020-11-18
3093
-
3094
- ### Changed
3095
-
3096
- - Propagate correlation id header to subrequests
3097
-
3098
- ### Fixed
3099
-
3100
- - `cds.debug` now reacts on the `DEBUG` environment variable set in a `.env` file
3101
- - `cds build` filters `i18n` files for nodejs staging builds
3102
- - Language headers with values `en-US-x-[saptrc, sappsd]` are now mapped to user locale `en-US-[saptrc, sappsd]`.
3103
- - Messages are kept in their respective request (i.e., not propagated to the request's context, if exists)
3104
- - Log requests in atomicity groups
3105
- - `cds build` now creates correct custom handler path for nodejs projects in WebIDE fullstack.
3106
-
3107
- ## Version 4.3.2 - 2020-12-18
3108
-
3109
- ### Fixed
3110
-
3111
- - use `@sap/cds-runtime~2.6`
3112
-
3113
- ## Version 4.3.1 - 2020-11-20
3114
-
3115
- ### Fixed
3116
-
3117
- - `cds build` now creates correct custom handler path for nodejs projects in WebIDE fullstack.
3118
-
3119
- ## Version 4.3.0 - 2020-11-03
3120
-
3121
- ### Added
3122
-
3123
- - Helper function `cds.utils.uuid` to generate a UUID
3124
- - Support `SELECT[...].limit(0, ...)`
3125
- - `hdbtabledata` generation can be disabled using `cds build` task option `skipHdbtabledataGeneration`.
3126
-
3127
- ### Changed
3128
-
3129
- - Optimized `cds build` performance when creating OData EDMX output.
3130
-
3131
- ### Fixed
3132
-
3133
- - `cds build` now classifies the severity of compile messages the same way as the low-level compiler. As a consequence, messages with severity _warning_ might now be classified as _error_.
3134
- - Now, cds CLI logs errors based on _log-level_ setting.
3135
- - `cds compile --to sql` no longer creates SQLite-specific views if in `hana` SQL dialect
3136
- - The `node-cf` build task of `cds build` now also filters `./` file dependencies from package.json in the build output.
3137
-
3138
-
3139
- # Version 4.2.8 - 2020-10-27
3140
-
3141
- ### Fixed
3142
-
3143
- - `cds compile --to edmx --dest` creates files with `.xml` ending again.
3144
-
3145
-
3146
- # Version 4.2.7 - 2020-10-26
3147
-
3148
- ### Fixed
3149
-
3150
- - SAP Fiori Elements preview finds the `express` package again in the case where no `express` is installed in the application's `node_modules`.
3151
-
3152
-
3153
- # Version 4.2.6 - 2020-10-26
3154
-
3155
- ### Fixed
3156
-
3157
- - `cds run` finds the `express` package again in the case where no `express` is installed in the application's `node_modules`.
3158
-
3159
-
3160
- # Version 4.2.5 - 2020-10-23
3161
-
3162
- ### Fixed
3163
-
3164
- - `cds compile --to edmx-v2` and `edmx-v4` now again write to the folder given with `--dest`.
3165
-
3166
-
3167
- # Version 4.2.4 - 2020-10-16
3168
-
3169
- ### Fixed
3170
-
3171
- - `cds compile --to edmx-v2/4` no longer crashes
3172
- - `cds watch` no longer shows an error in absence of model files
3173
- - `cds build` no longer fails with an error about module './old/compile'
3174
- - Stack trace of some errors have been improved
3175
- - The `.hdiconfig` file created by `cds build` now includes SAP HANA artifact types from undeploy.json
3176
-
3177
- # Version 4.2.3 - 2020-10-12
3178
-
3179
- ### Fixed
3180
-
3181
- - Leading `#` comments in CSV files sporadically caused `cds build` to fail on Windows with error `EPERM: operation not permitted`.
3182
- - Method `req.user.is()` returns boolean
3183
-
3184
- # Version 4.2.2 - 2020-10-07
3185
-
3186
- ## Added
3187
-
3188
- - `cds.env.odata.containment` to use OData v4 Containment NavigationProperties feature
3189
- - `cds.env.odata.structs` to preserve struct elements as ComplexTypes in OData EDMX instead of flattening
3190
- - `cds.env.odata.refs` which uses NavigationProperties in OData EDMX instead of adding foreign keys
3191
- - `cds.env.odata.proxies` to add proxy EntityTypes for external Association targets
3192
- - `cds.env.odata.flavors` which contain presets for the afore-mentioned flags
3193
- - `cds.env.odata.flavor` to choose from the afore-mentioned presets
3194
- - `cds.load` option `plain` replacing former option `clean` (which still is silently supported for compatibility).
3195
- - `cds.get` now supports option `flavor` with values: `files` | `sources` | `parsed` | `resolved` | `compiled`.
3196
- - `sap.common.Currencies`, `Countries`, and `Languages` now have their `code` element annotated with `@Common.Text` pointing to the `name`. In SAP Fiori's value list with fixed values, this will show the `name` rather than the code itself. As before, this only has an effect if `@Common.TextArrangement` is set to `#TextOnly` on the entity the code list is used as `ValueList` for.
3197
-
3198
- ## Changed
3199
-
3200
- - Replaced `cds.PrivilegedUser` with `cds.User.Privileged`
3201
- - `cuid` in `@sap/cds/common` is now defined as an `aspect` to align it with the other definitions. The previous definition as `abstract entity` is equivalent and was only needed for historic reasons.
3202
- - `cds deploy --to sqlite` now skips columns from csv files if the header value is empty. This allows for ad-hoc 'disabling' of columns. For SAP HANA, the generated `hdbtabledata` files now also skip empty columns, restoring the behavior from cds 3.
3203
- - `cds deploy --to sqlite` has aligned its escaping rules for parsing csv data with SAP HANA's `hdbtabledata`. A `"` character can be escaped by another `"` as before, but only if contained in a quoted string, i.e. `"A""B"` leads to `A"B`, while `A""B` stays `A""B`, and `""` results in an empty string.
3204
-
3205
- ## Fixed
3206
-
3207
- - A `manifest.yml` file is now also generated for nodejs applications if a sqlite database is used.
3208
- - `cds build` did not correctly validate custom service handler implementations, warnings have been logged by mistake.
3209
- - The default memory size for nodejs applications has been increased in `manifest.yml` to avoid out-of-memory issues for cloud native deployments.
3210
- - `cds build` is now correctly creating external CSN output for Java multi-tenant applications.
3211
-
3212
- # Version 4.1.10 - 2020-09-11
3213
-
3214
- ## Added
3215
-
3216
- - Much like SQLite deployment, `cds deploy --to hana` and `cds build` can now cope with leading `#` comments in csv files, i.e. the comments get removed before deployment.
3217
- - `cds deploy` now can handle empty strings in CSV values (use `""`)
3218
-
3219
- ## Fixed
3220
- - `cds v` and `cds --version` now work again when called from `npm run` or `npx`.
3221
-
3222
-
3223
- # Version 4.1.9 - 2020-09-02
3224
-
3225
- ## Added
3226
-
3227
- - `cds.PrivilegedUser`, e.g., for transactions with super user
3228
-
3229
- # Version 4.1.8 - 2020-09-02
3230
-
3231
- ## Changed
3232
-
3233
- - The `node-cf` build task of `cds build` now removes file dependencies in `package.json` in the build output. These are anyways not resolvable on CF, but are handy at build time to [refer to other CDS modules](https://github.com/SAP-samples/cloud-cap-samples/blob/6fdd91b8c810d4367aa6dfc0a91e06dc467686ed/bookshop/package.json#L6).
3234
- - `cds deploy --to sqlite` can now cope with leading `#` comments in csv files
3235
- - `cds version --all` now includes `@sap/cds-sidecar-client`
3236
-
3237
- ## Fixed
3238
-
3239
- - `cds.entities` w/o namespace parameter now works properly when running out of a compiled model (aka `csn.json` aka 'on Cloud Foundry').
3240
- - `cds deploy --to hana` now also handles SAP HANA Cloud services on trial, which are created by the `hana` broker (in contrast to the `hanatrial` broker which still provisions older SAP HANA instances).
3241
- - `cds deploy --to hana` no longer uses `cf marketplace`, which has changed its parameters in CF CLI v7.
3242
- - SAP Fiori Elements preview's html no longer provokes Javascript errors in the SAP Fiori client.
3243
- - For DB services of kind `sql` the service implementation is now set correctly in the cds configuration. Previously, `sql` services got a `sqlite` implementation even if they were set to `hana` in production.
3244
- - Custom event handlers that do not register with a path (only with event and function) no longer crash the runtime
3245
- - In Typescript typings, the API declaration for `cds.load` and the `bootstrap` event is now fixed.
3246
-
3247
- # Version 4.1.7 - 2020-08-17
3248
-
3249
- ## Added
3250
-
3251
- - Shortcut to class `cds.ApplicationService` in cds facade
3252
- - Shortcut to class `cds.DatabaseService` in cds facade
3253
- - Shortcut to class `cds.RemoteService` in cds facade
3254
- - Shortcut to class `cds.MessagingService` in cds facade
3255
- - Shortcut to class `cds.Event` as new base class of `cds.Request`
3256
-
3257
- ## Fixed
3258
-
3259
- - Race condition on two parallel `cds.connect` to same service
3260
- - **`cds deploy --no-save`** extends the list of files it does not modify to `package.json`, `default-env.json` and `connection.properties`
3261
- - **Add meaningful error message if hdi-deploy cannot be loaded** &mdash; during `cds deploy --to hana`.
3262
-
3263
- # Version 4.1.6 - 2020-08-07
3264
-
3265
- ## Added
3266
-
3267
- - `req.notify()` as a new varient besides `req.info()`, which should display as toaster notifications on Fiori elements or other UIs.
3268
-
3269
- ## Fixed
3270
-
3271
- - `req.target` for unbound actions/functions is now `undefined` again, as documented
3272
- - Handlers registered with `srv.on(<CRUD>, 'Some/path', ...)` were never invoked
3273
- - Queries to remote services via `srv.on(..., ()=> other.read('Something'))` weren't sent to remote
3274
-
3275
- # Version 4.1.5 - 2020-07-31
3276
-
3277
- ## Removed
3278
-
3279
- The following changes affect undocumented internal implementations, and hence should not affect CAP-based projects.
3280
- Nevertheless, they are listed here for your reference.
3281
-
3282
- - `db.disconnect()` &rarr; no replacement; no need to disconnect before shutdown.
3283
- - `db.run(()=>{})` &rarr; use `cds.run([...multiple queries])` instead.
3284
-
3285
-
3286
- ## Changed
3287
-
3288
- - **Most CLI commands have moved** to `@sap/cds-dk`. Make sure to install the latest version with `npm i -g @sap/cds-dk`.
3289
-
3290
- - **Default OData version** in `cds configuration` is now `v4`. For `Node.js` projects and `Java` projects using new stack the cds configuration of `odata.version = 'v4'` is no longer required. For `Java` projects using old Java stack, OData v2 will still be used.
3291
-
3292
- - **Always do `await cds.connect.to()`** &mdash; in former versions `cds.connect.to()` returned some magic thenables, meant to ease the [_Promise Hell_](https://medium.com/@pyrolistical/how-to-get-out-of-promise-hell-8c20e0ab0513); now it always returns plain-standard Promises. Likely you never used this undocumented former behaviour, but in case: Just ensure to always call `cds.connect` with `await`.
3293
-
3294
- - **Deprecated `cds.connect()`** &mdash; please prefer `cds.connect.to('db')` instead, which has the very same effect but is more in line with the notion of potentially working with multiple database services.
3295
-
3296
- - **Deprecated `cds.hana.syntax` configuration**. Use `cds.hana.deploy-format`=`hdbtable` instead to switch deployment from `hdbcds` to `hdbtable` for SAP HANA Cloud.
3297
-
3298
- - **Faster generation of `hdbtabledata` files** from csv data. It no longer tries to check the existence of element or column names. Such checks are anyways done during SAP HANA deployment. This behavior is now symmetrical to SQLite deployment.
3299
-
3300
- - **Removed legacy cds build system** &mdash; the fallback using `cds.features.build.legacy` is no longer supported.
3301
-
3302
- - **`cds deploy --to hana` changes kind** to `hana` only if it is not already `sql`.
3303
-
3304
- - **Consistent default naming scheme for applications and services deployed to CF** across the following `cds` commands `build`, `deploy`, `init` and `add`. For an application named `myapp` the SAP HANA deployer app name is `myapp-db-deployer`, the SAP HANA DB service name is `myapp-db`. `cds build` now generates the application manifest file with a different name `manifest.yml`.
3305
-
3306
- - **`cds build`** no longer creates service metadata for the UI service binding by default. For SAP Web IDE Full-Stack compatibility a corresponding metadata.xml is still generated. A `fiori` build task has to be defined otherwise.
3307
-
3308
- - **`cds build` creates `hana` build results only** if either a corresponding build task has been configured or if kind `hana` or kind `sql` has been defined. A `production` build is required for the latter. A fallback is used for Web IDE Fullstack and legacy build configs.
3309
-
3310
- ## Added
3311
-
3312
- - **Common `cds.service.factory`** &mdash; `cds.serve` and `cds.connect` now use a common `cds.service.factory` to construct instances of `cds.Service`, as well as adding custom-provided handlers and implementations. This applies the same consistent ways to register new implementations via `cds.env.requires` options, model annotations `@impl` and `@kind`, or the well known `.cds`/`.js` sibling files mechanism.
3313
-
3314
- - **Common `cds.Service` base class** &mdash; `cds.Service` is the newly introduced common base class for all connected or provided services &mdash; i.e. all service instances contructed thru `cds.service.factory`. It provides uniform consumption APIs, as well as event handling APIs and capabilities for all services.
3315
-
3316
- - **Custom `cds.Service` subclasses** &mdash; besides providing `cds.service.impl` functions as of before, custom service implementations can now return subclasses of `cds.Service`, thereby plugging into the framework even more.
3317
-
3318
- - **New `srv.after('each', row => ...)`** &mdash; the former technique to register per-row handlers `srv.after('READ', each => ...)` broke when code was minified. The new method using pseudo event `'each'` is minifier-safe.
3319
-
3320
- - **New `srv.prepend(srv => ...)`** &mdash; use `srv.prepend(...)` to register event handlers to be executed _before_ the already reistered handlers. For example, extensions of reused implementations sometimes need to use this.
3321
-
3322
- - **Reflect `srv.events`** &mdash; base class `cds.Service` provides a new getter `srv.events` to reflect on declared events in the service definition, similar to the already existing `srv.entities`, `srv.types` and `srv.operations`.
3323
-
3324
- - **Experimental `cds.ql(req)`** &mdash; event handlers can now use the like of `const {SELECT} = cds.ql(req)` to ensure transaction-managed and tenant-isolated execution of queries, instead of `srv.tx(req)`. **Note** though, that this is an **experimental** feature, which might change or be removed in future versions.
3325
-
3326
- - **Using `await` in `cds repl`** &mdash; we now support using `await` directly on `cds repl` prompt inputs. This feature is provided through [Node's _--experimental-repl-await_ option](https://nodejs.org/api/repl.html#repl_await_keyword).
3327
-
3328
- - **CLI shortcut `--odata <v2|v4|x4>`** &mdash; the newly introduced general CLI option _**--odata** <v2/v4>_ acts as a shortcut to _--odata-version <v2/v4>_. In addition, _--odata **x4**_ acts as shortcut to _--odata-version v4 --odata-format structured --odata-containement true_.
3329
-
3330
- - **`cds build --production`** &mdash; builds the project using the `production` profile - same when `NODE_ENV` or `CDS_ENV` environment variable is set to `production`. This will create HANA deployment artifacts if `kind: "sql"` has been defined.
3331
-
3332
- - **`cds build --for <hana|java-cf|node-cf|mtx> --opts <...>`** &mdash; now supports execution of auto-created or configured build tasks. Individual properties can be overwritten by passing corresponding CLI options, defaults are used otherwise. For example, `cds build --for hana --dest target --opts model=[data,srv,app]`. **Note:** The parameter `options-model` has been deprecated use `--opts model=[...]`instead.
3333
-
3334
- - The set of languages that is honored for the `i18n.json` language pack can now be configured through `i18n.languages`. Default is still `all`, which means the sum of language files found next to models.
3335
-
3336
- ## Fixed
3337
- - SAP Fiori Elements preview is now working again with the latest version of SAP UI5.
3338
-
3339
- - **Use latest SAP CommonCryptoLib help** &mdash; when SAP CommonCryptoLib is missing during `cds deploy --to hana`.
3340
-
3341
- - `sql_mapping` is only written to `csn.json` if the classic Java runtime and no default naming is used.
3342
-
3343
- - SAP Fiori Elements dev support in `cds run` now also honors `/v2` URLs. These are installed by default by the `@sap/cds-odata-v2-adapter-proxy`.
3344
-
3345
- - npm scripts that wrap around cds-dk commands like `cds watch` now also work on Windows. Previously they couldn't find the cds command.
3346
-
3347
- - When extracting the base model of a multi-tenant application `cds build` now ensures that only files having project scope are copied, a warning is logged otherwise.
3348
-
3349
- - `cds build` now no longer crashes if exactly one custom language is given in `options.lang` of the `java-cf` build task.
3350
-
3351
- - `cds compile` now fails with a non-zero exit code in case of compilation errors.
3352
-
3353
- # Version 3.35.0 - 2020-05-08
3354
-
3355
- ## Changed
3356
- - The new compiler implementation, a.k.a SNAPI, is now the default. Can be disabled with `cds.features.snapi=false`.
3357
-
3358
- # Version 3.34.3 - 2020-06-19
3359
-
3360
- ## Changed
3361
-
3362
- - Faster generation of `hdbtabledata` files from csv data. It no longer tries to check the existence of element or column names. Such checks are anyways done during SAP HANA deployment. This behavior is now symmetrical to SQLite deployment.
3363
-
3364
- # Version 3.34.2 - 2020-05-30
3365
-
3366
- ## Changed
3367
-
3368
- - Use `cds.hana.deploy-format`=`hdbtable` instead of `cds.hana.syntax` to switch deployment from `hdbcds` to `hdbtable` for SAP HANA Cloud.
3369
- - `cds run` now supports relative `dataSource` URLs in SAP UI5 manifests again, so that UI5 apps can be served w/o approuter. This support is only active in development mode.
3370
- - `cds deploy --to hana` changes kind to `hana` only if it is not already `sql`
3371
-
3372
- ## Fixed
3373
-
3374
- - The `UI.Identification` annotation for `sap.common.CodeList` got a correct value, pointing to its `name` element.
3375
- - Configuration `requires.<foo>.credentials.destination` is now preserved again when running with `VCAP_SERVICES`. In version 3.34.1 it was cleared.
3376
- - Entities annotated with `@cds.persistence.skip:if-unused` (like `sap.common.Languages`) now again are skipped when compiling to SAP HANA output. This got broken in previous versions when using the new compiler APIs.
3377
- - `sql_mapping` is again written to `csn.json` as it's required by classic Java runtime.
3378
- - `default-env.json` is now read even in production, which is in line with the behavior of other modules that honor this file. Real prod environments like CF will still overwrite these defaults.
3379
- - `cds build` caused error `invalid option` &mdash; when passing command line options like `log-level`, `src` or `for`.
3380
-
3381
- # Version 3.34.0 - 2020-04-27
3382
-
3383
- ## Added
3384
-
3385
- - `cds version` option `-ls` prints an `npm ls` subtree.
3386
- - `cds serve` / `run` now also accept package names as arguments, e.g. `cds serve --project @capire/bookshop`.
3387
- - `cds compile` option `--parse` provides minimal, parsed-only CSN output.
3388
- - New Node.js method `cds.compile()` allows compiling CDS sources in-process.
3389
- - `cds build` now supports cds configuration `requires.db.kind:"sql"` which allows seamless production deployments using HANA db and development deployments using sqlite db.
3390
- - Default maximum query size limit of 1000 (overridable via `@cds.query.limit.max`).
3391
- - Improved error message during `cds deploy` on Windows when `SAP CommonCryptoLib` is missing.
3392
- - `cds build` now checks that `entity-whitelist` and `service-whitelist` have been defined for SaaS applications - a warning is reported otherwise. `cds build` will fail if invalid entries exist.
3393
- - Parameter `--vcap-file` lets `cds deploy --to hana` use an existing `default-env.json` file for the deployment credentials, instead of always creating new credentials from Cloud Foundry. Note that this is a beta feature.
3394
- - `cds build --log-level` allows to choose which messages to see, default log level is `warn`.
3395
- - Labels of `@sap/cds/common` texts are now available in many languages
3396
-
3397
- ## Changed
3398
-
3399
- - Node.js method `cds.parse()` has been changed to now truely return parsed-only models, with extensions not applied yet.
3400
- **Note:** If you'need the former (erroneous) behaviour, please use `cds.compile` for that from now on.
3401
- - Node.js method `cds.get()` now returns parsed-only models; same as `cds.parse()`.
3402
- - `cds serve` / `run` / `watch` now reduce logging of details for the bound DB on connect, leading to less clutter.
3403
- - Precision for `validTo` and `validFrom` defined in the `temporal` aspect in `@sap/cds/common` changed from `DateTime` to `Timestamp`.
3404
- - Some administrative fields of SAP Fiori draft documents are now hidden on the UI. The rest got labels.
3405
- - Renamed cds configuration setting `features.messageLevel` to `log-level` to be consistent with command line option, e.g. `cds build --log-level`.
3406
-
3407
- - `cds extend` and `cds activate` commands have been moved to `@sap/cds-dk`. `cds disconnect` has been moved there under a different name.
3408
-
3409
- ## Fixed
3410
- - `cds build` - improvements in the area of error handling and error reporting.
3411
- - `cds env` and Node.js runtime now properly complete configuration like `requires.db.kind.sql` with VCAP_SERVICES, so that in `production` an SAP HANA service is bound.
3412
- - `cds build` now localizes edmx files properly if `cds.env.features.snapi` is turned on.
3413
- - `cds deploy --to hana` no longer crashes if called with `NODE_ENV=production`.
3414
-
3415
- ## Removed
3416
-
3417
- # Version 3.33.1 - 2020-03-24
3418
-
3419
- ## Fixed
3420
- - `cds build` now correctly supports options.model definitions of type string
3421
- - Details navigation in Fiori preview works again since it's pinned to SAP UI5 1.73. Actual cause still needs to be investigated.
3422
- - `cds deploy` now adds `@sap/hana-client` to package.json instead of `hdb`.
3423
- - `cds deploy` adds kind `sql` to requires section.
3424
-
3425
- # Version 3.33.0 - 2020-03-19
3426
-
3427
- ## Added
3428
- - `cds deploy` uses information from existing `default-env.json`.
3429
-
3430
- - `cds version` now also lists all dependencies of your local package.json and has an updated CLI commend help, documenting option `--all`.
3431
- - `cds compile` option `--docs` preserve contents of `/** ... */` doc comments in CSN output as well as in EDMX outputs (as _Core.Description_ annotations).
3432
- - `cds compile` option `--clean` tells the compiler to not add any derived information, but return a CSN which reflects only what was actually found in a `.cds` source.
3433
- - `cds serve` option `--watch` starts the specific serve command in nodemon watch mode
3434
- - Node.js: `cds.env` now supports camel case env variables as well as dot-notated keys in `.env`
3435
-
3436
- ## Changed
3437
-
3438
- - Labels for the `createdAt` and `changedAt` in the `@sap/cds/common#managed` entity have been adjusted to reflect the SAP Fiori design guidelines.
3439
- - `cds build` now delegates to the modular build system by default (known as `cds build/all`). The modular build system is compatible, but supports additional features, e.g. staging build, SAP HANA Cloud Edition support, populating initial data from .csv by generating .hdbtabledata files, etc. The legacy build is still available as a fallback in case of issues - use setting `cds.features.build.legacy: true` or ENV variable `CDS_FEATURES_BUILD_LEGACY=true`.
3440
-
3441
- ## Fixed
3442
-
3443
- - `cds build` now correctly logs warnings returned by cds compiler. The message log level can be customized using cds configuration setting `cds.features.messageLevel` - default is `warn`.
3444
- - `cds.env.roots` now properly picks up a changed value of `cds.env.folders`
3445
- - `hdbtabledata` is no longer generated for entities that are marked with `@cds.persistence.skip`
3446
-
3447
- ## Removed
3448
-
3449
-
3450
- # Version 3.32.0 - 2020-03-06
3451
-
3452
- ## Fixed
3453
- - An issue where all Node.js runtime sessions where disconnected when one tenant offboarded.
3454
-
3455
-
3456
- # Version 3.31.2 - 2020-03-05
3457
-
3458
- ## Fixed
3459
- - `cds deploy` does not crash if _texts.csv is provided for skipped entities
3460
- - `cds serve foo.cds` does no longer load same model twice
3461
- - `cds compile --to edmx` no longer creates files with csn instead of edmx content in case no language bundles are found
3462
- - Both `cds env` and `cds compile` no longer write terminal escape sequences if only stdout is redirected, but not stderr.
3463
- - No longer enforce Node.js version 8 in `db/package.json`. Cloud Foundry environment does not support it anymore, as this version is out of maintenance.
3464
-
3465
-
3466
- # Version 3.31.1 - 2020-02-26
3467
-
3468
-
3469
- ## Fixed
3470
-
3471
- - Removed `npm-shrinkwrap.json`
3472
-
3473
-
3474
- # Version 3.31.0 - 2020-02-25
3475
-
3476
- ## Added
3477
-
3478
- Generation of `hdbtabledata` files now reports if CSV file names don't match entity names, and if header names don't match element names in an entity. Watch out for such logs in case CSV files are not deployed to SAP HANA.
3479
-
3480
- ## Fixed
3481
-
3482
- - `cds compile --to hdbtabledata` no longer crashes with `_texts.csv` files referring to a non-`localized` entity
3483
- - `cds build/all` adds `app` folder to the list of model folders for HANA database builds. Draft tables are missing if the corresponding annotation model is missing.
3484
-
3485
-
3486
- # Version 3.30.0 - 2020-02-10
3487
-
3488
- ## Added
3489
-
3490
- - `cds compile --log-level` allows to choose which messages to see
3491
- - `cds deploy --dry` prints DDL statements to stdout instead of executing them
3492
- - `cds deploy --with-mocks` also adds tables for required services
3493
- - `cds serve --mocked` allows mocking individual required services
3494
- - ( &rarr; learn more about these things using `cds help ...` )
3495
- - `cds.env` now also loads from `.env` files in properties format
3496
- - [`cds.resolve/load('*')`](https://cap.cloud.sap/docs/node.js/api#cds-load) resolves or loads all models in a project including those for required services. It ist controlled and configurable through `cds.env.folders` and `.roots``. Try this in `cds repl` launched from your project root to see that in action:
3497
- ```js
3498
- cds.env.folders // = folders db, srv, app by default
3499
- cds.env.roots // + schema and services in cwd
3500
- cds.resolve('*',false) // + models in cds.env.requires
3501
- cds.resolve('*') // > the resolved existing files
3502
- ```
3503
-
3504
- - Added `cds.debug(<id>)` as a convenient helper for debug output controlled by `process.env.DEBUG`. For example, use it as follows:
3505
- ```js
3506
- const DEBUG = cds.debug('my-module')
3507
- DEBUG && DEBUG ('my debug info:', foo, ...)
3508
- ```
3509
- ```sh
3510
- > DEBUG=my-module cds run
3511
- ```
3512
-
3513
- - Added `cds.error(<msg>)` as a convenient helper for throwing errors whose stack traces start from the actual point of invocation. For example, use it as follows:
3514
- ```js
3515
- const {error} = cds
3516
- if (...) throw error `Something's wrong with ${whatever}`
3517
- const foo = bar || error `Bar is missing!` // short circuit exits
3518
- ```
3519
-
3520
- ## Changed
3521
-
3522
- This version brings a major refactoring and streamlining of service runtime implementations,
3523
- which stays fully compatible regarding all documented APIs but in case you used internal
3524
- not documented (non-)APIs, you should know these:
3525
-
3526
- Removed undocumented features
3527
-
3528
- - Annotation `@source` from models loaded for runtime
3529
- - Property `cds.serve.app` &rarr; use `cds.app` instead
3530
- - Property `source` from CSN entity/view definition objects
3531
-
3532
- > It's very unlikely that you ever used these undocumented internal features at all.
3533
- > In case you did, this should never have been done and you should fix that asap.
3534
-
3535
-
3536
- Deprecated features (&rarr; might get removed in upcoming versions)
3537
-
3538
- - Property `cds.session` &rarr; use `cds.db` instead
3539
- - Property `cds.options` &rarr; use `cds.db.options` instead
3540
- - Property `cds.unfold` &rarr; use `cds.compile` instead
3541
- - Property `cds.config` &rarr; use `cds.env` instead
3542
-
3543
- > These properties actually where duplicates to the mentioned alternatives.
3544
-
3545
-
3546
- `cds run` and `cds watch` have been re-implemented as convenience shortcuts to `cds serve`, which acts as the central orchestrator for bootstrapping now. (&rarr; see `cds run ?` or `cds watch ?` to learn more)
3547
-
3548
- `cds serve` now optionally bootstraps from project-local `./server.js` or `./srv/server.js`, if exist, thus giving more control while still benefitting from `cds serve`'s intrinsic support for options like `--in-memory` or `--with-mocks`.
3549
-
3550
- `cds serve` now uses `cds.load('*')` to load a single effective model once, assigned to `cds.model`, and reused for db as well as all provided and required services . As that avoids loading models redundantly, it drastically improves both, bootstrapping performance as well as memory consumption.
3551
-
3552
- `cds deploy` does not (have to) register the default models to `package.json` anymore. For example, unlike before, `cds deploy -2 sqlite` will merely add an entry: `db:{kind:'sqlite'}`, without an additional `model` property anymore.
3553
-
3554
- `cds deploy --to hana` does not create `connection.properties` file any longer, but only modify existing one
3555
-
3556
- `modifiedAt` and `modifiedBy` from `@sap/cds/common`
3557
- - Are now mutable for OData, i.e. no longer carry the `@Core.Immutable: true` annotation.
3558
- - Are set by the Node.js runtime whenever the respective row was modified, i.e. also during `CREATE` operations.
3559
-
3560
- Support for `cds init` is now moved to `@sap/cds-dk`.
3561
-
3562
- ## Fixed
3563
-
3564
- - There was a bug in that caused a service names `FooBarV2` to erroneously be mapped to mount point `/foo-barv2` instead of `/foo-bar-v2` as intended and was the case before. &rarr; in case you started a project in this interims phase and had a service name with that pattern you may encounter this fix as an incompatible change, but it's actually reverting to the former compatible way.
3565
-
3566
- - `cds.env` erroneously overrode profiled entries depending on properties order
3567
-
3568
- - Fiori preview now uses latest version of SAP UI5 again
3569
-
3570
- - `cds deploy` verifies returned service key to ensure target service is not of type `managed`.
3571
-
3572
-
3573
-
3574
-
3575
- # Version 3.21.3 - 2020-02-05
3576
- ## Fixed
3577
- - Fiori preview no longer catches service URLs with an arbitrary prefix (e.g. `/foo/browse` instead of just `/browse`).
3578
-
3579
-
3580
- # Version 3.21.1 - 2020-01-07
3581
- ## Fixed
3582
- - SAP Fiori Elements preview no longer crashes since it's pinned to SAP UI5 1.72.3. Actual cause still needs to be investigated.
3583
-
3584
- ## Version 3.21.0 - 2019-12-11
3585
-
3586
- - `cds add`, `import`, and `watch` now print installation hints if `@sap/cds-dk` is not installed
3587
-
3588
- - Experimental option `hana.syntax=hdi` to create `hdbtable` files instead of `hdbcds`. May still change!
3589
-
3590
-
3591
- ## Changed
3592
-
3593
- - In development mode, the `mock` authorization strategy is automatically activated with two fake users `alice` and `bob`, which allows for out-of-the-box testing of `@requires` annotations. This means that, unlike before, the `JWT` authorization strategy needs to be activated explicitly (through `{auth: { passport: { strategy: 'mock' }}}`. In production, no change is required.
3594
-
3595
- - You might see a `MODULE_NOT_FOUND` error for `@sap/xsenv` in case you use the `JWT` strategy but have not bound any xsuaa service. In this case either bind such a service instance, add the `@sap/xsenv` dependency, or use a different strategy like `mock`. The trigger of this error is `@sap/xssec` 2.2.4 no longer requiring `@sap/xsenv`.
3596
-
3597
- - Renovated and streamlined `cds init`. It prints a hint now if it's called with old-style parameters, as well as that it wants to be used from `@sap/cds-dk`. Check out `cds help init` for more.
3598
-
3599
- - Removed the experimental `--args` parameter of `cds compile`. This turned out to be cumbersome to use in shells. Replacement is the standard configuration mechanism, e.g. use an environment variable `CDS_FOO_BAR` to activate option `cds.foo.bar`.
3600
-
3601
- ## Fixed
3602
- - `SELECT.one/distinct(Fool,[...])` failed when passing an array for columns as argument two
3603
-
3604
-
3605
-
3606
- # Version 3.20.1 - 2019-11-26
3607
- ## Fixed
3608
- - Fix 'duplicate versions' errors by loading `@sap/cds` again from the current project if possible.
3609
-
3610
- # Version 3.20.0 - 2019-11-19
3611
-
3612
- ## Added
3613
- - Mention xsuaa in help of `cds compile`
3614
-
3615
- ## Fixed
3616
- - Typings for `UPDATE` function no longer contain duplicates.
3617
-
3618
- ## Also see
3619
- - Changes of `@sap/cds-compiler` 1.20.3
3620
- - Changes of `@sap/cds-ql` 1.21.0
3621
- - Changes of `@sap/cds-services` 1.21.0
3622
- - Changes of `@sap/cds-messaging` 1.4.0
3623
- - Changes of `@sap/generator-cds` 2.10.2
3624
-
3625
-
3626
-
3627
- # Version 3.18.4 - 2019-11-15
3628
-
3629
- ## Fixed
3630
- - `.cfignore` files now get created by `cds build/all` to improve the overall deployment turnaround
3631
- of `cf push`. Also, this avoids failures of CF node.js buildpack trying to rebuild sqlite binaries.
3632
- - Generated `manifest.yaml` files for Cloud Foundry now contain a `path` attribute that allows
3633
- pushing from an outside folder. Also, they specify reduced memory requirements.
3634
- - Generated `manifest.yaml` for HDI deployer does not create a route, and specifies a valid `health-check-type`.
3635
- - `cds deploy --to hana` now also includes models in the `srv` folder.
3636
- - `cds deploy` no longer writes model folders to `package.json` that do not exist.
3637
-
3638
-
3639
- # Version 3.19.0 - 2019-10-31
3640
-
3641
- ## Added
3642
- - Deployments for sqlite and SAP HANA now find CSV files in the form `_texts_LOCALE.csv`,
3643
- like `Books_texts_fr.csv`. This file layout allows splitting translated texts into one file
3644
- per language.
3645
- - Deployment for sqlite now also imports initial data from JSON files
3646
- - `cds version` has learned about `@sap/cds-dk`
3647
-
3648
- ## Fixed
3649
- - `cds watch --help` works again, if used from `@sap/cds-dk`
3650
-
3651
-
3652
- # Version 3.18.3 - 2019-10-28
3653
- ## Fixed
3654
- - Fixed a crash in `cds run --watch` with changing directories.
3655
- - `cds watch` is now also found if called from an NPM script.
3656
- - `cds watch` now uses the same lookup paths for models as `cds run`
3657
-
3658
-
3659
- # Version 3.18.1 - 2019-10-17
3660
- ## Fixed
3661
- - Fixed a crash during sqlite deployment if there were csv files that did not match an entity name
3662
- - `cds deploy --to hana` now does a build for SAP HANA even if no matching build task is available.
3663
- - `cds deploy` now tries to add `.gitignore` entries only once
3664
- - In `@source` annotations of csn.json files generated for cloud deployments,
3665
- now posix file paths (with `/`) are written, and no Windows paths.
3666
- - `cds serve` and `run` now shuts down gracefully in case of `SIGHUP` signals emitted by
3667
- e.g. the VS Code terminal.
3668
- - `cds watch` now is found even if `@sap/cds-dk` is not installed locally.
3669
-
3670
- ## Also see
3671
- - Changes of `@sap/cds-ql` 1.19.2
3672
- - Changes of `@sap/cds-services` 1.19.1
3673
- - Changes of `@sap/cds-messaging` 1.2.1
3674
-
3675
-
3676
- # Version 3.18.0 - 2019-10-09
3677
-
3678
- ## Added
3679
- - Compiler options for SAP HANA backend can now be set in configuration in the `cdsc.toHana` block
3680
- (e.g. `cds.cdsc.toHana.joins`)
3681
- - `service.tx()` as a shortcut for `service.transaction()`
3682
-
3683
- ## Fixed
3684
- - `cds deploy --to hana` now adds the tunnel address to the JDBC URL
3685
- - Boolean and number values from `default-env.json` now are accepted in configuration (`cds env`)
3686
- - For applications deployed to Cloud Foundry, custom handlers are now properly resolved using their names.
3687
- - `cds serve`/`run` now properly log `$batch` requests of OData
3688
-
3689
- ## Also see
3690
- - Changes of `@sap/cds-compiler` 1.19.1
3691
- - Changes of `@sap/cds-messaging` 1.2.0
3692
- - Changes of `@sap/cds-ql` 1.19.1
3693
- - Changes of `@sap/cds-reflect` 2.8.0
3694
- - Changes of `@sap/cds-rest` 1.2.0
3695
- - Changes of `@sap/cds-services` 1.19.0
3696
- - Changes of `@sap/generator-cds` 2.9.0
3697
-
3698
-
3699
- # Version 3.17.8 - 2019-09-25
3700
-
3701
- ## Fixed
3702
-
3703
- - `UPDATE(entity, key)` statement
3704
-
3705
-
3706
- # Version 3.17.7 - 2019-09-24
3707
-
3708
- ## Fixed
3709
-
3710
- - `cds deploy`
3711
-
3712
-
3713
- # Version 3.17.6 - 2019-09-23
3714
-
3715
- ## Changed
3716
-
3717
- - Improved `cds env`
3718
-
3719
-
3720
- # Version 3.17.5 - 2019-09-20
3721
-
3722
- ## Fixed
3723
-
3724
- - `cds deploy` did not work properly
3725
-
3726
-
3727
- # Version 3.17.4 - 2019-09-19
3728
-
3729
- ## Also see
3730
- - Changes of `@sap/cds-rest` 1.1.2
3731
-
3732
-
3733
- # Version 3.17.3 - 2019-09-19
3734
-
3735
- ## Fixed
3736
-
3737
- - `cds deploy --to hana`
3738
-
3739
-
3740
- # Version 3.17.2 - 2019-09-19
3741
-
3742
- ## Also see
3743
- - Changes of `@sap/cds-services` 1.18.2
3744
- - Changes of `@sap/generator-cds` 2.8.2
3745
-
3746
-
3747
- # Version 3.17.1 - 2019-09-18
3748
-
3749
- ## Also see
3750
- - Changes of `@sap/cds-compiler` 1.18.2
3751
- - Changes of `@sap/cds-ql` 1.18.2
3752
- - Changes of `@sap/cds-services` 1.18.1
3753
-
3754
-
3755
- # Version 3.17.0 - 2019-09-10
3756
-
3757
- ## Added
3758
- - `cds run` has learned a new `--watch` option, which provides automatic restarts of the server on file changes. [nodemon](https://www.npmjs.com/package/nodemon) package is required for this to work.
3759
-
3760
- ## Fixed
3761
- - `cds deploy` now writes `true` and `false` values in csv files as boolean to sqlite
3762
- - Console output of `cds run` now waits until the server is really up and running before it declares success.
3763
- - `cds deploy` and `build/all` do not write `hdbtabledata` files if some are already present.
3764
-
3765
- ## Also see
3766
- - Changes of `@sap/cds-compiler` 1.18.1
3767
- - Changes of `@sap/cds-ql` 1.18.1
3768
- - Changes of `@sap/cds-reflect` 2.7.1
3769
- - Changes of `@sap/cds-services` 1.18.0
3770
- - Changes of `@sap/generator-cds` 2.8.1
3771
-
3772
-
3773
-
3774
- # Version 3.16.2 - 2019-08-27
3775
-
3776
- ## Also see
3777
- - Changes of `@sap/cds-compiler` 1.17.1
3778
-
3779
-
3780
-
3781
- # Version 3.16.0 - 2019-08-22
3782
-
3783
- ## Added
3784
- - `cds run` has learned a new `--in-memory` option, which connects and deploys to an SQLite in-memory database. There is no need to call `cds deploy` before.
3785
- - `cds deploy --to hana` now can also be executed in Java projects
3786
- - `cds run`'s index.html got a favicon, to give a visual clue in browsers.
3787
- - `cds.requires.<datasource>.model` configuration can now also point to a node.js module, e.g. `@my/module`.
3788
- Previously, only a relative file path was supported.
3789
- - Improved logging of query objects
3790
- - `cds compile` now understands `--to edmx-v2` and `--to edmx-v4` to produce OData metadata of versions 2 or 4, respectively.
3791
-
3792
- ## Changed
3793
- - SAP Fiori Elements preview in `cds run` now is only added if OData services are being served.
3794
- For other protocols like `rest`, no SAP Fiori Elements preview is provided. Same holds true for the `$metadata` link.
3795
- - `cds compile` now behaves better in non-TTY scenarios (e.g. when piping to files). It writes a proper JSON
3796
- string instead of a Javascript object. Previously, one had to enforce JSON using the `--to json` processor. Compare e.g. the output of `cds compile model.cds` to `cds compile model.cds > model.json`.
3797
-
3798
- ## Fixed
3799
- - Fiori preview in `cds run` now also works for services with namespaces
3800
- - In services of CF marketplace, `cds deploy --to hana` now only accepts services with plan `hdi-shared`.
3801
- Previously, it could get confused with services of type `hana` but of other (non-HDI) plans.
3802
- - Localized edmx files are now produced also for i18n.json files.
3803
-
3804
- ## Also see
3805
- - Changes of `@sap/cds-compiler` 1.17.0
3806
- - Changes of `@sap/cds-ql` 1.17.0
3807
- - Changes of `@sap/cds-services` 1.17.0
3808
- - Changes of `@sap/generator-cds` 2.7.0
3809
-
3810
-
3811
-
3812
- # Version 3.15.0 - 2019-07-26
3813
-
3814
- ## Added
3815
- - `hdbtabledata` files are now generated automatically as part of `cds deploy --to hana` for given set of CSV files. CSV file names must follow the pattern `<namespace>-entity.csv` (same as for SQLite deployment) and be located in `db/csv` or `db/data`.
3816
- - For Node.js, multiple configuration profiles can now be activated at the same time, e.g. by setting both `NODE_ENV` and `CDS_ENV`, or by setting a multi-value list: `CDS_ENV=profile1,profile2`.
3817
- - New labels for `sap.common.*.code` and `sap.common.Currencies.symbol` (part of `@sap/cds/common`).
3818
- - Better message for `Duplicate definition` errors, where the same `cds` file is referenced from different locations.
3819
- To fix this, check all dependencies to `@sap/cds` in your package.json and those of reused packages and ensure they allow deduped use of `@sap/cds`.
3820
-
3821
- ## Also see
3822
- - Changes of `@sap/cds-compiler` 1.16.1
3823
- - Changes of `@sap/cds-ql` 1.16.0
3824
- - Changes of `@sap/cds-services` 1.16.0
3825
- - Changes of `@sap/generator-cds` 2.6.1
3826
-
3827
-
3828
- # Version 3.14.0 - 2019-07-11
3829
-
3830
- ## Added
3831
- - Support for `SELECT.distinct.from(Foo)` and `SELECT.one.from(Foo)` queries in Node.js
3832
- - [Beta] `cds deploy --to hana` deploys to SAP HANA on Cloud Foundry
3833
- - For Node.js, `cds env` now activates the `development` profile automatically,
3834
- unless `CDS_ENV` or `NODE_ENV` are set. This is in line with `NODE_ENV` defaulting to `development`.
3835
-
3836
- ## Also see
3837
- - Changes of `@sap/cds-ql` 1.15.0
3838
- - Changes of `@sap/cds-services` 1.15.0
3839
- - Changes of `@sap/generator-cds` 2.5.0
3840
-
3841
-
3842
- # Version 3.13.0 - 2019-06-26
3843
-
3844
- ## Added
3845
- - `cds serve` now provides a preview of the services in a list page of SAP Fiori Elements
3846
-
3847
- ## Changed
3848
- - `cds serve` now yields an error if there are no services defined in the model
3849
-
3850
- ## Also see
3851
- - Changes of `@sap/cds-compiler` 1.15.0
3852
- - Changes of `@sap/cds-ql` 1.14.0
3853
- - Changes of `@sap/cds-services` 1.14.0
3854
- - Changes of `@sap/generator-cds` 2.4.11
3855
-
3856
-
3857
-
3858
- # Version 3.12.0 - 2019-06-17
3859
-
3860
- ## Added
3861
- - On request, `cds build/all` now generates OData EDMX files for node.js services
3862
- - Performance optimizations for `cds build/all`
3863
-
3864
- ## Fixed
3865
- - `cds deploy` no longer fails if `data` dir is not present
3866
- - `cds build/all` no longer prints a message if `mta.yaml` does not exist
3867
-
3868
-
3869
- ## Also see
3870
- - Changes of `@sap/cds-compiler` 1.14.1
3871
- - Changes of `@sap/cds-ql` 1.13.0
3872
- - Changes of `@sap/cds-services` 1.13.0
3873
-
3874
-
3875
- # Version 3.11.1 - 2019-06-03
3876
-
3877
- ## Fixed
3878
- - `cds deploy` honors saved datasource configuration again
3879
- - localization works again for sqlite datasources defined in `package.json`
3880
-
3881
-
3882
- # Version 3.11.0 - 2019-06-03
3883
-
3884
- ## Added
3885
-
3886
- - `cds deploy` now also finds `.csv` files in imported reuse packages
3887
- - Better error messages for various `cds` CLI calls
3888
-
3889
- ## Changed
3890
- - `cds build/all` for Node.js projects generates proper CSN in `gen/csn.json`.
3891
- A warning is emitted if `cds serve` is run with the previous format. Rebuild the project if you see this warning.
3892
-
3893
- ## Also see
3894
- - Changes of `@sap/cds-compiler` 1.14.0
3895
- - Changes of `@sap/cds-ql` 1.12.0
3896
- - Changes of `@sap/cds-services` 1.12.0
3897
- - Changes of `@sap/generator-cds` 2.4.10
3898
-
3899
- # Version 3.10.0 - 2019-05-21
3900
-
3901
- ## Added
3902
- - Tables and view for localized entities are created by default now, both for SAP HANA and SQLite.
3903
- - Internal errors are now marked as such in all CLI commands, with a request to report them.
3904
-
3905
- ## Changed
3906
- - `cds compile --service all` no longer fails in case no services are found.
3907
- This better matches higher level commands like `cds build` that should not fail in this instance.
3908
- Note that `--service Foo` fails as before in case `Foo` is not found.
3909
- - `cds run` and `cds serve` now serve the generic index page at `/`, while previously this was `/$index`.
3910
- - `cds build/all` now auto-creates build tasks from `mta.yaml` definition if no build tasks have been
3911
- defined in `.cdsrc.json`. If no `mta.yaml` file exists, cds configuration data respectively defaults
3912
- are used for build task configuration.
3913
-
3914
- ## Fixed
3915
- - CLI now shows compilation warnings in all commands, e.g. in `build`, `deploy`, or `compile`.
3916
- Previously warnings were only shown in case of compilation errors.
3917
- - `cds help` no longer inserts terminal escape sequences if stdout is redirected to a file.
3918
- - Errors in custom handlers are no longer shadowed in `cds serve` or `cds run`.
3919
-
3920
- ## Also see
3921
- - Changes of `@sap/cds-compiler` 1.13.4
3922
- - Changes of `@sap/cds-ql` 1.11.1
3923
- - Changes of `@sap/cds-reflect` 2.5.0
3924
- - Changes of `@sap/cds-services` 1.11.1
3925
- - Changes of `@sap/generator-cds` 2.4.8
3926
-
3927
-
3928
-
3929
- # Version 3.9.0 - 2019-05-08
3930
-
3931
- ## Added
3932
- - `cds.serve` now reads passport for services from `auth.passport` configuration property
3933
-
3934
- ## Fixed
3935
- - `cds.compile` now really skips entities marked with `if-unused`
3936
- - Build tasks are now listed with `cds env`
3937
- - `cds serve` now supports the `--at`, `--to`, and `--with` arguments as specified.
3938
- - `cds deploy --to sqlite` now better handles csv files with empty values
3939
-
3940
- ## Also see
3941
- - Changes of `@sap/cds-compiler` 1.12.0
3942
- - Changes of `@sap/cds-ql` 1.10.2
3943
- - Changes of `@sap/cds-reflect` 2.5.0
3944
- - Changes of `@sap/cds-services` 1.10.2
3945
- - Changes of `@sap/generator-cds` 2.4.6
3946
-
3947
-
3948
-
3949
- # Version 3.8.1 - 2019-04-30
3950
-
3951
- ## Fixed
3952
- - Texts in deep annotations, e.g. `@UI.Facet`, are now properly localized in OData metadata
3953
-
3954
-
3955
- # Version 3.8.0 - 2019-04-09
3956
-
3957
- ## Fixed
3958
- - Make tests run on Windows again
3959
- - Various fixes in `cds build/all`
3960
- - Adjustments to latest compiler for localizing models
3961
- - `.hdbcds` and `.hdbtabledata` files are now copied over in `cds build/all`
3962
-
3963
- ## Also see
3964
- - Changes of `@sap/cds-compiler` 1.11.0
3965
- - Changes of `@sap/cds-ql` 1.8.1
3966
- - Changes of `@sap/cds-services` 1.8.1
3967
- - Changes of `@sap/generator-cds` 2.4.4
3968
-
3969
-
3970
-
3971
- # Version 3.7.1 - 2019-03-25
3972
-
3973
- ## Fixed
3974
- - `cds serve` now honors `newCsn` configuration when serving from precompiled csn.json files.
3975
- - `cds init` creates samples correctly when project already contains files.
3976
- - `cds build` for node.js projects will now show up compilation errors. Formatting has been improved as well.
3977
- - Better support for finding `cds` executable in VSCode.
3978
-
3979
-
3980
- ## Also see
3981
- - Changes of `@sap/cds-compiler` 1.10.0
3982
- - Changes of `@sap/cds-ql` 1.7.1
3983
- - Changes of `@sap/cds-services` 1.7.2
3984
- - Changes of `@sap/generator-cds` 2.4.4
3985
-
3986
-
3987
-
3988
- # Version 3.6.0 - 2019-02-27
3989
-
3990
- ## Added
3991
- - In `cds init`:
3992
- - Add modules via `cds init --modules` to an existing project.
3993
- - Do not allow project creation via `cds init` outside of current working folder, e.g. init ../../some/where/else is not allowed.
3994
- - No output at all (not even error messages) when using `cds init --quiet`.
3995
- - Create a module folder using `cds init --modules...` even if it is empty based on the supplied options.
3996
- - Parameter `--modules` only supports one folder of each type.
3997
- - Alpha support for `@cds.odata.valuelist`: Adding `@cds.odata.valuelist` to `@cds.autoexposed` entities will automatically equip all associations referring to such entities with a corresponding `@Common.ValueList.entity`
3998
-
3999
- ## Changed
4000
- - Simplified code lists: removed superfluous types `LanguageCode`, `CountryCode`, and `CurrencyCode` from `@sap/cds/common`
4001
- - `cds build/all` now does `--clean` by default and is less verbose in its output
4002
-
4003
- ## Fixed
4004
- - `cds.load` no longer fails if reading in a CSN file in version `0.1.0`
4005
-
4006
- ## Also see
4007
- - Changes of `@sap/cds-compiler` 1.9.0
4008
- - Changes of `@sap/cds-reflect` 2.4.0
4009
- - Changes of `@sap/cds-ql` 1.6.0
4010
- - Changes of `@sap/cds-services` 1.6.0
4011
- - Changes of `@sap/generator-cds` 2.4.0
4012
-
4013
-
4014
-
4015
- # Version 3.5.2 - 2019-02-20
4016
-
4017
- ## Fixed
4018
- - Node.js projects created with `cds init` now
4019
- - Bind the service module to an HDI service in `mta.yaml`.
4020
- - Invoke CDS build when building the database module.
4021
- - No longer create old-style `service` configuration in `package.json`.
4022
- - For datasources with kind `hana` we now also find `hanatrial` services in trial landscapes by matching their tag `hana`.
4023
-
4024
-
4025
-
4026
- # Version 3.5.1 - 2019-02-14
4027
-
4028
- ## Fixed
4029
- - In `cds serve` service providers where added twice to the express app. This is fixed.
4030
- - In the logs of `cds serve` false warnings on SAP Fiori Elements requests are now gone.
4031
- - `cds serve` no longer fails on localization for unbound actions.
4032
- - The project template was fixed to properly wire up the connection to SAP HANA.
4033
-
4034
- ## Also see
4035
- - Changes of `@sap/cds-compiler` 1.8.1
4036
- - Changes of `@sap/cds-ql` 1.5.1
4037
- - Changes of `@sap/cds-services` 1.5.2
4038
- - Changes of `@sap/generator-cds` 2.3.7
4039
-
4040
-
4041
-
4042
- # Version 3.5.0 - 2019-02-07
4043
-
4044
- ## Added
4045
- - `cds compile -2 xsuaa` now generates default values for `xsappname` and `tenant-mode`
4046
- - All commands now can be called with `--help`, where previously only `cds help <command>` was allowed.
4047
-
4048
- ## Changed
4049
- - The minimum required Node.js version is now set more specifically to _8.9_ LTS. Previously, just Node.js 8 was mentioned.
4050
- - The `cds build/all` (experimental build command for Node.js) emits a warning for existing projects to add build task configuration. Watch out for such a warning in the console and follow its instructions.
4051
-
4052
- ## Fixed
4053
- - Service handlers are now also found on CF if CDS models are served from a `csn.json` file instead as from `.cds` sources.
4054
- - An issue where projects w/o `db` dir could not be built using `cds build`.
4055
- - Unclear documentation of `cds deploy` on where it looks up the data source.
4056
- - `cds env` to load configuration profiles in lower-prio files (`.cdsrc.json`) with higher precedence than default configuration in higher-prio files (`package.json`).
4057
-
4058
- ## Also see
4059
- - Changes of `@sap/cds-compiler` 1.8.0
4060
- - Changes of `@sap/cds-reflect` 2.3.0
4061
- - Changes of `@sap/cds-ql` 1.5.0
4062
- - Changes of `@sap/cds-services` 1.5.0
4063
- - Changes of `@sap/generator-cds` 2.3.6
4064
-
4065
-
4066
- # Version 3.4.1 - 2019-01-24
4067
-
4068
- ## Fixed
4069
-
4070
- - Restore cds-compiler `.version`
4071
-
4072
- ## Also see
4073
- - Changes of `@sap/cds-compiler` 1.7.1
4074
- - Changes of `@sap/cds-reflect` 2.2.1
4075
- - Changes of `@sap/cds-ql` 1.4.0
4076
- - Changes of `@sap/cds-services` 1.4.0
4077
- - Changes of `@sap/generator-cds` 2.2.0
4078
-
4079
-
4080
- # Version 3.4.0 - 2019-01-22
4081
-
4082
- ## Added
4083
-
4084
- - `cds.env` supports loading from `default-env.json`
4085
- - Support base models for `cds compile -2 xsuaa`
4086
-
4087
- ## Also see
4088
- - Changes of `@sap/cds-compiler` 1.7.0
4089
- - Changes of `@sap/cds-reflect` 2.2.0
4090
- - Changes of `@sap/cds-ql` 1.4.0
4091
- - Changes of `@sap/cds-services` 1.4.0
4092
- - Changes of `@sap/generator-cds` 2.2.0
4093
-
4094
-
4095
- # Version 3.3.0 - 2019-01-11
4096
-
4097
- ## Also see
4098
- - Changes of `@sap/cds-compiler` 1.6.0
4099
- - Changes of `@sap/cds-reflect` 2.1.0
4100
- - Changes of `@sap/cds-ql` 1.3.0
4101
- - Changes of `@sap/cds-services` 1.3.0
4102
- - Changes of `@sap/generator-cds` 2.2.0
4103
-
4104
-
4105
- # Version 3.2.0 - 2018-12-21
4106
- ## Changed
4107
- - cdsc 2sql output may also contain .types
4108
- - Add labels to CodeLists in common.cds
4109
- - Improved cds error messages
4110
-
4111
- ## Also see
4112
- - Changes of `@sap/cds-compiler` 1.6.0
4113
- - Changes of `@sap/cds-reflect` 2.1.0
4114
- - Changes of `@sap/cds-ql` 1.2.0
4115
- - Changes of `@sap/cds-services` 1.2.0
4116
- - Changes of `@sap/generator-cds` 2.2.0
4117
-
4118
-
4119
- # Version 3.1.1 - 2018-12-13
4120
- ## Changed
4121
- - Better console output from cds compile
4122
-
4123
- ## Fixed
4124
- - cds.compile ignored configured odata.version
4125
-
4126
- ## Also see
4127
- - Changes of `@sap/cds-compiler` 1.6.0
4128
- - Changes of `@sap/cds-reflect` 2.1.0
4129
- - Changes of `@sap/cds-ql` 1.1.0
4130
- - Changes of `@sap/cds-services` 1.1.0
4131
- - Changes of `@sap/generator-cds` 2.2.0
4132
-
4133
-
4134
- # Version 3.0.0
4135
- ## Changed
4136
- - Reworked configuration options to center around required 'data sources'.
4137
- - As an example see the snippted that e.g. `cds deploy --to sqlite:my.db` generates into `package.json`.
4138
- - The former `cds` options from `package.json` are deprectated but still supported.
4139
- - Clean up of many Node.js APIs, mainly for `cds.serve` and `cds.connect`. See the [Javacript APIs documentation](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/a131984aefe94ff884e6b6819ee76bd9.html) for details.
4140
- - Node.js 8 is now the minimum required runtime version.
4141
- - Simplified `cds init`. By default it creates a plain project suitable for local CDS development.
4142
-
4143
- ## Added
4144
- - `cds env` allows for inspecting the effective configuration
4145
-
4146
- ## Also see
4147
- - Changes of `@sap/cds-compiler` 1.5.0
4148
- - Changes of `@sap/cds-reflect` 2.0.0
4149
- - Changes of `@sap/cds-ql` 1.0.0
4150
- - Changes of `@sap/cds-services` 1.0.0
4151
- - Changes of `@sap/generator-cds` 2.0.0
4152
-
4153
-
4154
- # Version 2.11.2
4155
- ## Fixes
4156
- - During `cds init/new` only install `@sap/generator-cds` 1.x
4157
-
4158
-
4159
- # Version 2.11.0
4160
- ## Added
4161
- - Reuse aspect `cuid` to `@sap/cds/common`
4162
- - Support for smart to-many Associations finding backlinks automatically (&rarr;not for production!)
4163
- - Support to fill DBs with initial data from CSV files (fetched from folder `db/csv/`)
4164
- - New CLI command `cds run` - today a mere wrapper for `cds serve all` but meant to serve microservice test scenarios
4165
- - `cds deploy` can be configured not to modify `package.json` through the `--no-save` option.
4166
-
4167
- ## Also see
4168
- - Changes of `@sap/cds-compiler` 1.2.0
4169
- - Changes of `@sap/cds-reflect` 1.8.0
4170
- - Changes of `@sap/cds-ql` 0.12.0
4171
- - Changes of `@sap/cds-services` 0.12.0
4172
-
4173
-
4174
- # Version 2.10.3
4175
- ## Fixes
4176
- - During `cds init/new` only install `@sap/generator-cds` 1.x
4177
-
4178
-
4179
- # Version 2.10.0
4180
- ## Added
4181
- - Support for Fiori Draft
4182
-
4183
- ## Fixes
4184
- - Enhanced server.js to also include links to entities
4185
-
4186
- ## Also see
4187
- - Changes of `@sap/cds-compiler` 1.1.3
4188
- - Changes of `@sap/cds-reflect` 1.7.0
4189
- - Changes of `@sap/cds-ql` 0.11.0
4190
- - Changes of `@sap/cds-services` 0.11.0
4191
-
4192
-
4193
- # Version 2.9.1
4194
- ## Fixes
4195
- - `cds build` no longer blocks if running inside a Maven build.
4196
-
4197
-
4198
- # Version 2.9.0
4199
- ## Added
4200
- - `common.cds` model got annotations for title, description, and value lists.
4201
- - `cds` executable now can read from stdin, e.g. `echo 'entity Foo {ID:UUID;}' | cds -2 sql`
4202
- - `cds -2 sql` now outputs plain (non-HANA) SQL. Use `-2 hana` for HANA SQL.
4203
- - `cds config` shows the current CDS configuration. Use `cds help config` to learn more.
4204
-
4205
- ## Fixes
4206
- - Entities from `common.cds` like `Languages`, `Countries`, and `Currencies` are now only persisted to the database if they are actually used.
4207
-
4208
- ## Also see
4209
- - Changes of `@sap/cds-compiler` 1.1.2
4210
- - Changes of `@sap/cds-reflect` 1.6.0
4211
- - Changes of `@sap/cds-ql` 0.10.0
4212
- - Changes of `@sap/cds-services` 0.10.1
4213
-
4214
-
4215
- # Version 2.8.0
4216
- ## Added
4217
- - Support was added to build node.js service modules
4218
- - `cds init` has been reimplemented with a better commandline experience, along with updated templates. Plugin `@sap/generator-cds`, which is required for `cds init`, is now automatically installed when `init` is called for the first time. `cds new` is still available and is now just a synonym for `init`.
4219
-
4220
- ## Also see
4221
- - Changes of `@sap/cds-compiler` 1.1.1
4222
- - Changes of `@sap/cds-services` 0.9.0
4223
- - Changes of `@sap/cds-ql` 0.9.0
4224
-
4225
-
4226
- # Version 2.7.0
4227
- ## Also see
4228
- - Changes of `@sap/cds-compiler` 1.0.32
4229
- - Changes of `@sap/cds-services` 0.8.1
4230
- - Changes of `@sap/cds-ql` 0.8.1
4231
-
4232
-
4233
- # Version 2.6.0
4234
- ## Also see
4235
- - Changes of `@sap/cds-compiler` 1.0.31
4236
- - Changes of `@sap/cds-services` 0.7.0
4237
- - Changes of `@sap/cds-ql` 0.7.0
4238
-
4239
-
4240
- # Version 2.5.1
4241
- ## Also see
4242
- - Changes of `@sap/cds-services` 0.6.0
4243
- - Changes of `@sap/cds-ql` 0.6.0
4244
-
4245
-
4246
- # Version 2.5.0
4247
- ## Added
4248
- - Instead of compiling each `.cds` service file separately, `cds build` now combines all those files from the same folder, creating only one `csn.json` file for them.
4249
-
4250
- ## Fixes
4251
- - Shortcuts of `cds init` work again
4252
-
4253
- ## Also see
4254
- - Changes of `@sap/cds-compiler` 1.0.30
4255
- - Changes of `@sap/cds-services` 0.5.0
4256
- - Changes of `@sap/cds-ql` 0.5.0
4257
-
4258
-
4259
- # Version 2.4.2
4260
- Same as version 2.3.2, but including the generic service provider for Node.js (`@sap/cds-services` and `@sap/cds-ql`).
4261
-
4262
-
4263
- # Version 2.3.2
4264
- ## Changed
4265
- - The default for SQL name mapping is changed to `plain`. This means that
4266
- - The name of a table/view in the database catalog is obtained from the name of the corresponding entity in the CDS model in the following way:
4267
- - replace all "." by "_"
4268
- - convert everything to upper case
4269
- - The name of a table/view column in the database catalog is obtained from the name of the corresponding entity element in the csn in the following way:
4270
- - convert everything to upper case
4271
-
4272
- Note that this is a breaking change for appliations that rely on the previous value of `quoted`. In order to get this value back, add the following to `package.json`: `"cds": { "data": { "sql_mapping" : "quoted" } }`
4273
-
4274
- ## Fixes
4275
- - Special output formatting in CLI is only done for `cds eval` and `cds repl`, but not for programmatic usage.
4276
- - Links to external documentation are now point to correct help documents.
4277
-
4278
- ## Also see
4279
- - Changes of `@sap/cds-compiler` 1.0.30
4280
-
4281
-
4282
-
4283
- # Version 2.3.0
4284
- ## Added
4285
- - SQL names can now be configured with `{ data: {sql_mapping: "plain/quoted"} }`. Default is `quoted`, but will be changed to `plain` soon. If you need to stay with `quoted` in the futute, e.g. due to data compatibility reasons, you can configure this mode already now.
4286
-
4287
- ## Fixes
4288
- - The `csn.json` file produced by `cds build` now contains the properly unfolded model for OData. Previously this was the normalized model, which led to runtime errors in the Java service provider.
4289
- - Invalid configuration data in `package.json` now leads to a build error again.
4290
- - Console output of `cds build` now presents files paths sorted.
4291
-
4292
- ## Also see
4293
- - Changes of CDS compiler 1.0.27
4294
-
4295
-
4296
-
4297
- # Version 2.2.0
4298
- ## Added
4299
- - CDS configuration in `package.json` can now be omitted if you follow the standard project layout, i.e. if you place your model files in `db/`, `srv/`, and `app/` folders.
4300
-
4301
- ## Changed
4302
- - Previously data models needed to include import statements to the service models (e.g. `using from '../srv'`), so that the Java runtime could use these service views on the DB to execute queries. The views are now included automatically, so that you can remove the explicit `using` clauses.
4303
- - Calling just `cds` on the command line now prints its help. The previously started REPL is now available with `cds repl` (or just `cds r`).
4304
-
4305
- ## Fixes
4306
- - Some cds commands failed on Windows. This is fixed.
4307
-
4308
- ## Also see
4309
- - Changes of CDS compiler 1.0.24
4310
-
4311
-
4312
-
4313
- # Version 2.1.0
4314
- ## Added
4315
- - Service edmx files are now written to UI app folders if their manifest.json contains a reference to the service. This allows Web IDE's annotation modeler to work on up to date service files.
4316
- - The results of `cds.compile.to...` commands are now automatically formatted if called in `cds -e...` or cds repl. You don't need to append `console.log` to the call chain.
4317
-
4318
- ## Fixes
4319
- - Language properties are now found in all folders, also ones that are outside of the current module
4320
- - csn.json is written with line breaks and indentation
4321
-
4322
- ## Also see
4323
- - Changes of CDS compiler 1.0.21
4324
-
4325
-
4326
- # Version 2.0.0
4327
- ## Added
4328
- - All-new command-line interface. See `cds help` for information on the available commands.
4329
- - `cds compile` exposes CDS model transformations with various options.
4330
- - `cds build` automatically writes localized edmx files.
4331
- - `cds build` now writes the version to the build log.
4332
- - `cds version` does the usual thing.
4333
- - `cds init` scaffolds CDS projects.
4334
- - CDS repl (read-eval-print-loop): just type `cds` and play with CDS API.
4335
-
4336
- ## Fixes
4337
- Too many to mention :)
4338
-
4339
- ## Also see
4340
- - Changes of CDS compiler 1.0.19