@sap/cds 8.9.3 → 9.0.2

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 (622) hide show
  1. package/CHANGELOG.md +122 -680
  2. package/LICENSE +15 -21
  3. package/README.md +1 -1
  4. package/_i18n/i18n_sl.properties +3 -3
  5. package/_i18n/messages.properties +1 -1
  6. package/app/index.js +1 -1
  7. package/bin/serve.js +17 -19
  8. package/eslint.config.mjs +7 -1
  9. package/lib/compile/etc/_localized.js +3 -24
  10. package/lib/compile/etc/yaml.js +6 -15
  11. package/lib/compile/for/odata.js +2 -2
  12. package/lib/compile/load.js +15 -4
  13. package/lib/compile/minify.js +1 -0
  14. package/lib/compile/to/edm-files.js +4 -33
  15. package/lib/compile/to/hdbtabledata.js +16 -3
  16. package/lib/compile/to/sql.js +1 -2
  17. package/lib/core/classes.js +1 -0
  18. package/lib/core/linked-csn.js +8 -8
  19. package/lib/dbs/cds-deploy.js +4 -3
  20. package/lib/env/cds-env.js +9 -9
  21. package/lib/env/cds-requires.js +23 -50
  22. package/lib/env/defaults.js +15 -44
  23. package/lib/env/schemas/cds-package.js +1 -1
  24. package/lib/i18n/index.js +1 -0
  25. package/lib/i18n/locale.js +41 -0
  26. package/lib/index.js +25 -15
  27. package/lib/log/cds-error.js +12 -3
  28. package/lib/log/cds-log.js +43 -18
  29. package/lib/log/format/aspects/als.js +2 -15
  30. package/lib/plugins.js +11 -11
  31. package/lib/ql/CREATE.js +1 -1
  32. package/lib/ql/DELETE.js +1 -1
  33. package/lib/ql/DROP.js +1 -1
  34. package/lib/ql/INSERT.js +9 -18
  35. package/lib/ql/SELECT.js +12 -19
  36. package/lib/ql/UPDATE.js +1 -1
  37. package/lib/ql/UPSERT.js +1 -0
  38. package/lib/ql/Whereable.js +7 -6
  39. package/lib/ql/cds-ql.js +0 -12
  40. package/lib/ql/cds.ql-Query.js +28 -68
  41. package/lib/ql/cds.ql-infer.js +97 -108
  42. package/lib/ql/resolve.js +2 -3
  43. package/lib/req/context.js +5 -4
  44. package/lib/req/request.js +46 -42
  45. package/lib/req/response.js +5 -9
  46. package/lib/req/spawn.js +38 -0
  47. package/lib/req/validate.js +9 -8
  48. package/lib/srv/bindings.js +2 -1
  49. package/lib/srv/cds-connect.js +5 -2
  50. package/lib/srv/cds-serve.js +0 -2
  51. package/lib/srv/cds.Service.js +146 -86
  52. package/lib/srv/middlewares/auth/ias-auth.js +99 -88
  53. package/lib/srv/middlewares/auth/jwt-auth.js +44 -57
  54. package/lib/srv/middlewares/cds-context.js +1 -1
  55. package/lib/srv/middlewares/ctx-model.js +1 -1
  56. package/lib/srv/middlewares/errors.js +34 -42
  57. package/lib/srv/protocols/hcql.js +35 -25
  58. package/lib/srv/protocols/index.js +0 -9
  59. package/lib/srv/protocols/odata-v4.js +1 -6
  60. package/lib/srv/srv-dispatch.js +29 -31
  61. package/lib/srv/srv-handlers.js +14 -46
  62. package/lib/srv/srv-methods.js +15 -37
  63. package/lib/srv/srv-tx.js +19 -25
  64. package/lib/test/cds-test.js +4 -263
  65. package/lib/utils/cds-utils.js +18 -2
  66. package/lib/utils/tar.js +6 -8
  67. package/lib/utils/unit.js +19 -0
  68. package/libx/_runtime/.eslintrc +1 -1
  69. package/libx/_runtime/cds-services/util/assert.js +2 -72
  70. package/libx/_runtime/cds.js +13 -6
  71. package/libx/_runtime/common/Service.js +33 -75
  72. package/libx/_runtime/common/aspects/any.js +0 -38
  73. package/libx/_runtime/common/constants/events.js +5 -13
  74. package/libx/_runtime/common/generic/auth/autoexpose.js +10 -24
  75. package/libx/_runtime/common/generic/auth/capabilities.js +23 -20
  76. package/libx/_runtime/common/generic/auth/expand.js +3 -3
  77. package/libx/_runtime/common/generic/auth/index.js +3 -3
  78. package/libx/_runtime/common/generic/auth/insertOnly.js +3 -3
  79. package/libx/_runtime/common/generic/auth/readOnly.js +4 -4
  80. package/libx/_runtime/common/generic/auth/requires.js +4 -4
  81. package/libx/_runtime/common/generic/auth/restrict.js +12 -29
  82. package/libx/_runtime/common/generic/auth/service.js +3 -3
  83. package/libx/_runtime/common/generic/auth/utils.js +2 -12
  84. package/libx/_runtime/common/generic/crud.js +22 -53
  85. package/libx/_runtime/common/generic/etag.js +18 -31
  86. package/libx/_runtime/common/generic/input.js +51 -123
  87. package/libx/_runtime/common/generic/paging.js +4 -4
  88. package/libx/_runtime/common/generic/sorting.js +8 -19
  89. package/libx/_runtime/common/generic/stream-only.js +26 -0
  90. package/libx/_runtime/common/generic/stream.js +16 -48
  91. package/libx/_runtime/common/generic/temporal.js +15 -6
  92. package/libx/_runtime/common/utils/binary.js +1 -26
  93. package/libx/_runtime/common/utils/compareJson.js +1 -2
  94. package/libx/_runtime/common/utils/cqn.js +15 -14
  95. package/libx/_runtime/common/utils/differ.js +121 -44
  96. package/libx/_runtime/common/utils/keys.js +4 -5
  97. package/libx/_runtime/common/utils/postProcess.js +2 -2
  98. package/libx/_runtime/common/utils/propagateForeignKeys.js +21 -36
  99. package/libx/_runtime/common/utils/resolveView.js +106 -142
  100. package/libx/_runtime/common/utils/rewriteAsterisks.js +45 -12
  101. package/libx/_runtime/common/utils/streamProp.js +3 -9
  102. package/libx/_runtime/common/utils/waitingTime.js +13 -1
  103. package/libx/_runtime/fiori/lean-draft.js +174 -196
  104. package/libx/_runtime/messaging/common-utils/connections.js +1 -1
  105. package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +1 -0
  106. package/libx/_runtime/messaging/enterprise-messaging-utils/registerEndpoints.js +3 -3
  107. package/libx/_runtime/messaging/enterprise-messaging.js +2 -2
  108. package/libx/_runtime/messaging/file-based.js +2 -4
  109. package/libx/_runtime/messaging/redis-messaging.js +1 -1
  110. package/libx/_runtime/messaging/service.js +5 -19
  111. package/libx/_runtime/remote/Service.js +20 -33
  112. package/libx/_runtime/remote/utils/client.js +7 -25
  113. package/libx/_runtime/remote/utils/cloudSdkProvider.js +8 -13
  114. package/libx/_runtime/remote/utils/data.js +3 -34
  115. package/libx/_runtime/types/api.js +0 -8
  116. package/libx/_runtime/ucl/Service.js +1 -9
  117. package/libx/common/utils/path.js +2 -3
  118. package/libx/common/utils/streaming.js +2 -1
  119. package/libx/http/HttpRequest.js +13 -0
  120. package/libx/{odata/middleware → http}/body-parser.js +7 -5
  121. package/libx/http/location.js +41 -0
  122. package/libx/http/put.js +36 -0
  123. package/libx/odata/ODataAdapter.js +25 -59
  124. package/libx/odata/index.js +10 -23
  125. package/libx/odata/middleware/batch.js +29 -20
  126. package/libx/odata/middleware/create.js +6 -13
  127. package/libx/odata/middleware/delete.js +0 -4
  128. package/libx/odata/middleware/error.js +83 -27
  129. package/libx/odata/middleware/metadata.js +14 -25
  130. package/libx/odata/middleware/operation.js +10 -26
  131. package/libx/odata/middleware/read.js +10 -18
  132. package/libx/odata/middleware/stream.js +14 -34
  133. package/libx/odata/middleware/update.js +17 -26
  134. package/libx/odata/parse/afterburner.js +20 -16
  135. package/libx/odata/parse/cqn2odata.js +3 -1
  136. package/libx/odata/parse/grammar.peggy +221 -114
  137. package/libx/odata/parse/parser.js +1 -1
  138. package/libx/odata/utils/index.js +10 -38
  139. package/libx/odata/utils/metadata.js +1 -4
  140. package/libx/odata/utils/normalizeTimeData.js +4 -7
  141. package/libx/odata/utils/readAfterWrite.js +1 -1
  142. package/libx/{outbox/OutboxRunner.js → queue/TaskRunner.js} +17 -22
  143. package/libx/queue/index.js +530 -0
  144. package/libx/rest/RestAdapter.js +43 -82
  145. package/libx/rest/middleware/create.js +35 -33
  146. package/libx/rest/middleware/delete.js +9 -7
  147. package/libx/rest/middleware/error.js +11 -18
  148. package/libx/rest/middleware/operation.js +44 -137
  149. package/libx/rest/middleware/parse.js +114 -130
  150. package/libx/rest/middleware/read.js +23 -21
  151. package/libx/rest/middleware/update.js +20 -32
  152. package/libx/rest/middleware/upsert.js +31 -0
  153. package/libx/rest/pre-processing.js +8 -18
  154. package/package.json +6 -7
  155. package/srv/outbox.cds +1 -0
  156. package/bin/test.js +0 -125
  157. package/lib/env/plugins.js +0 -18
  158. package/lib/req/cds-context.js +0 -52
  159. package/lib/req/locale.js +0 -35
  160. package/lib/srv/cds.ServiceClient.js +0 -96
  161. package/lib/srv/cds.ServiceProvider.js +0 -20
  162. package/lib/srv/protocols/okra.js +0 -22
  163. package/lib/test/axios.js +0 -63
  164. package/lib/test/data.js +0 -52
  165. package/lib/test/expect.js +0 -343
  166. package/lib/test/reporter.js +0 -176
  167. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +0 -275
  168. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +0 -217
  169. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +0 -101
  170. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +0 -79
  171. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/debug.js +0 -6
  172. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/delete.js +0 -60
  173. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +0 -161
  174. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/language.js +0 -7
  175. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +0 -59
  176. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +0 -602
  177. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +0 -64
  178. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +0 -238
  179. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +0 -327
  180. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/applyToCQN.js +0 -243
  181. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/boundToCQN.js +0 -43
  182. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/createToCQN.js +0 -37
  183. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/deleteToCQN.js +0 -36
  184. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +0 -250
  185. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +0 -81
  186. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/orderByToCQN.js +0 -51
  187. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +0 -389
  188. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/searchToCQN.js +0 -43
  189. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -35
  190. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/updateToCQN.js +0 -38
  191. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +0 -217
  192. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FeatureSupport.js +0 -70
  193. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/FullQualifiedName.js +0 -94
  194. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAction.js +0 -139
  195. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlActionImport.js +0 -82
  196. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAliasInfo.js +0 -44
  197. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotation.js +0 -104
  198. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlAnnotations.js +0 -71
  199. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlComplexType.js +0 -133
  200. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainer.js +0 -142
  201. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityContainerInfo.js +0 -37
  202. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntitySet.js +0 -107
  203. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEntityType.js +0 -177
  204. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumMember.js +0 -61
  205. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlEnumType.js +0 -105
  206. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunction.js +0 -149
  207. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlFunctionImport.js +0 -105
  208. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlInclude.js +0 -68
  209. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlIncludeAnnotation.js +0 -71
  210. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlJsonProvider.js +0 -1365
  211. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationProperty.js +0 -190
  212. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlNavigationPropertyBinding.js +0 -37
  213. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlOnDelete.js +0 -70
  214. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlParameter.js +0 -227
  215. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProperty.js +0 -250
  216. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlPropertyRef.js +0 -49
  217. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlProvider.js +0 -190
  218. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReference.js +0 -97
  219. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReferentialConstraint.js +0 -60
  220. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlReturnType.js +0 -216
  221. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSchema.js +0 -328
  222. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlSingleton.js +0 -84
  223. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTerm.js +0 -320
  224. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/CsdlTypeDefinition.js +0 -193
  225. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationExpression.js +0 -73
  226. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlAnnotationPathExpression.js +0 -33
  227. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlApplyExpression.js +0 -105
  228. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlArithmeticExpression.js +0 -72
  229. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlBinaryExpression.js +0 -110
  230. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCastExpression.js +0 -188
  231. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlCollectionExpression.js +0 -48
  232. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlConstantExpression.js +0 -116
  233. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIfExpression.js +0 -62
  234. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlIsOfExpression.js +0 -200
  235. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementExpression.js +0 -42
  236. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlLabeledElementReferenceExpression.js +0 -31
  237. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlModelElementPathExpression.js +0 -29
  238. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNavigationPropertyPathExpression.js +0 -31
  239. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNegationExpression.js +0 -27
  240. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNotExpression.js +0 -31
  241. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlNullExpression.js +0 -18
  242. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPathExpression.js +0 -32
  243. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyPathExpression.js +0 -32
  244. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlPropertyValueExpression.js +0 -55
  245. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlRecordExpression.js +0 -54
  246. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUnknownExpression.js +0 -44
  247. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/csdl/annotationExpression/CsdlUrlRefExpression.js +0 -31
  248. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmBindingTarget.js +0 -163
  249. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmFaceted.js +0 -136
  250. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperation.js +0 -205
  251. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmOperationImport.js +0 -126
  252. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/AbstractEdmStructuredType.js +0 -275
  253. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Edm.js +0 -775
  254. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAction.js +0 -15
  255. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmActionImport.js +0 -39
  256. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotation.js +0 -106
  257. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmAnnotations.js +0 -57
  258. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmComplexType.js +0 -48
  259. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +0 -455
  260. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntitySet.js +0 -43
  261. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityType.js +0 -119
  262. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumMember.js +0 -69
  263. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEnumType.js +0 -117
  264. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunction.js +0 -39
  265. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmFunctionImport.js +0 -59
  266. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmInclude.js +0 -65
  267. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmIncludeAnnotation.js +0 -48
  268. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmKeyPropertyRef.js +0 -79
  269. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationProperty.js +0 -182
  270. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmNavigationPropertyBinding.js +0 -46
  271. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmOnDelete.js +0 -44
  272. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmParameter.js +0 -22
  273. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveType.js +0 -31
  274. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmPrimitiveTypeKind.js +0 -70
  275. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProperty.js +0 -39
  276. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmProvider.js +0 -399
  277. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReference.js +0 -88
  278. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReferentialConstraint.js +0 -71
  279. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmReturnType.js +0 -14
  280. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSchema.js +0 -355
  281. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmSingleton.js +0 -15
  282. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTerm.js +0 -75
  283. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmType.js +0 -95
  284. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeDefinition.js +0 -121
  285. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmTypeFactory.js +0 -28
  286. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmVocabularyTermType.js +0 -41
  287. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/KeyFactory.js +0 -67
  288. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/Target.js +0 -56
  289. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/TransientStructuredType.js +0 -244
  290. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/AnnotationExpressionFactory.js +0 -130
  291. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationExpression.js +0 -28
  292. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmAnnotationPathExpression.js +0 -42
  293. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmApplyExpression.js +0 -85
  294. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmArithmeticExpression.js +0 -92
  295. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmBinaryExpression.js +0 -96
  296. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCastExpression.js +0 -129
  297. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmCollectionExpression.js +0 -52
  298. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmConstantExpression.js +0 -83
  299. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIfExpression.js +0 -103
  300. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmIsOfExpression.js +0 -125
  301. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementExpression.js +0 -83
  302. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmLabeledElementReferenceExpression.js +0 -41
  303. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmModelElementPathExpression.js +0 -35
  304. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNavigationPropertyPathExpression.js +0 -37
  305. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNegationExpression.js +0 -70
  306. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNotExpression.js +0 -75
  307. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmNullExpression.js +0 -50
  308. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPathExpression.js +0 -38
  309. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyPathExpression.js +0 -37
  310. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmPropertyValueExpression.js +0 -72
  311. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmRecordExpression.js +0 -100
  312. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUnknownExpression.js +0 -72
  313. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/annotationExpression/EdmUrlRefExpression.js +0 -73
  314. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/AbstractError.js +0 -82
  315. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalArgumentError.js +0 -58
  316. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/IllegalCallError.js +0 -21
  317. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/NotImplementedError.js +0 -19
  318. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriQueryOptionSemanticError.js +0 -49
  319. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSemanticError.js +0 -48
  320. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/errors/UriSyntaxError.js +0 -65
  321. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/ContentTypeInfo.js +0 -105
  322. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonContentTypeInfo.js +0 -83
  323. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/JsonFormat.js +0 -141
  324. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/format/RepresentationKind.js +0 -251
  325. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeader.js +0 -42
  326. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpHeaderReader.js +0 -318
  327. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpMethod.js +0 -25
  328. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/HttpStatusCode.js +0 -52
  329. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/http/Preferences.js +0 -32
  330. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/index.js +0 -69
  331. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/logging/LoggerFacade.js +0 -183
  332. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/AliasExpression.js +0 -47
  333. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ApplyParser.js +0 -946
  334. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/BinaryExpression.js +0 -124
  335. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandItem.js +0 -76
  336. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpandParser.js +0 -384
  337. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/Expression.js +0 -46
  338. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ExpressionParser.js +0 -1988
  339. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FilterParser.js +0 -34
  340. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/FunctionParameterParser.js +0 -106
  341. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyPredicateParser.js +0 -155
  342. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/KeyValueParser.js +0 -213
  343. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/LiteralExpression.js +0 -43
  344. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MemberExpression.js +0 -44
  345. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/MethodExpression.js +0 -146
  346. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByItem.js +0 -53
  347. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/OrderByParser.js +0 -69
  348. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/ResourcePathParser.js +0 -848
  349. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SearchParser.js +0 -127
  350. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectItem.js +0 -80
  351. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/SelectParser.js +0 -294
  352. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/TypeLiteralExpression.js +0 -28
  353. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UnaryExpression.js +0 -64
  354. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +0 -65
  355. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriInfo.js +0 -165
  356. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParameter.js +0 -107
  357. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriParser.js +0 -350
  358. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriResource.js +0 -602
  359. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriTokenizer.js +0 -1156
  360. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateExpression.js +0 -164
  361. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/AggregateTransformation.js +0 -38
  362. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/BottomTopTransformation.js +0 -93
  363. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeExpression.js +0 -52
  364. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ComputeTransformation.js +0 -38
  365. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ConcatTransformation.js +0 -38
  366. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/CustomFunctionTransformation.js +0 -59
  367. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/ExpandTransformation.js +0 -37
  368. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/FilterTransformation.js +0 -37
  369. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByItem.js +0 -71
  370. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/GroupByTransformation.js +0 -58
  371. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/IdentityTransformation.js +0 -17
  372. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/OrderByTransformation.js +0 -37
  373. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SearchTransformation.js +0 -37
  374. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/SkipTransformation.js +0 -37
  375. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/TopTransformation.js +0 -37
  376. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/apply/Transformation.js +0 -53
  377. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/info.md +0 -116
  378. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +0 -667
  379. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueEncoder.js +0 -349
  380. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +0 -545
  381. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ParameterValidator.js +0 -124
  382. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +0 -743
  383. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/ServiceFactory.js +0 -234
  384. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchContext.js +0 -351
  385. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchErrorInfo.js +0 -61
  386. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchExitHandler.js +0 -239
  387. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchProcessor.js +0 -281
  388. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchValidator.js +0 -133
  389. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/batch/BatchedRequestExecutor.js +0 -92
  390. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ComponentManager.js +0 -63
  391. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Context.js +0 -96
  392. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Dispatcher.js +0 -147
  393. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequest.js +0 -458
  394. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataRequestInBatch.js +0 -147
  395. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponse.js +0 -314
  396. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/OdataResponseInBatch.js +0 -83
  397. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpRequest.js +0 -175
  398. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/PlainHttpResponse.js +0 -106
  399. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/RequestContract.js +0 -111
  400. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseContract.js +0 -111
  401. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +0 -240
  402. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/Service.js +0 -417
  403. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ServiceResolutions.js +0 -24
  404. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ApplicationHttpReader.js +0 -157
  405. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchJsonDeserializer.js +0 -171
  406. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/BatchRequestListBuilder.js +0 -196
  407. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Cache.js +0 -154
  408. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ContentDeserializer.js +0 -222
  409. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DataReader.js +0 -220
  410. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/DeserializerFactory.js +0 -240
  411. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/HeaderReader.js +0 -133
  412. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/LineReader.js +0 -61
  413. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/MultipartReader.js +0 -419
  414. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/PartReader.js +0 -99
  415. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/Reader.js +0 -52
  416. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/deserializer/ResourceJsonDeserializer.js +0 -673
  417. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ApplicationError.js +0 -108
  418. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/BadRequestError.js +0 -21
  419. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/ConflictError.js +0 -11
  420. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/DeserializationError.js +0 -19
  421. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/InternalServerError.js +0 -20
  422. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/MethodNotAllowedError.js +0 -17
  423. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotAcceptableError.js +0 -21
  424. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/NotFoundError.js +0 -33
  425. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionFailedError.js +0 -11
  426. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/PreconditionRequiredError.js +0 -11
  427. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/SerializationError.js +0 -19
  428. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/errors/UnauthorizedError.js +0 -17
  429. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/AcceptTypeInfo.js +0 -86
  430. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/CharsetInfo.js +0 -76
  431. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatDescription.js +0 -43
  432. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/FormatManager.js +0 -91
  433. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/RequestContentNegotiator.js +0 -62
  434. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/format/ResponseContentNegotiator.js +0 -321
  435. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/BatchHandler.js +0 -36
  436. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/MetadataHandler.js +0 -21
  437. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/handler/ServiceHandler.js +0 -25
  438. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/CustomPreference.js +0 -31
  439. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HeaderInfo.js +0 -79
  440. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeader.js +0 -59
  441. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpHeaderReader.js +0 -452
  442. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/HttpStatusCode.js +0 -117
  443. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/Preferences.js +0 -222
  444. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/http/PreferencesApplied.js +0 -199
  445. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/index.js +0 -37
  446. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/Command.js +0 -31
  447. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandExecutor.js +0 -94
  448. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/CommandFactory.js +0 -203
  449. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestControlCommand.js +0 -52
  450. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ConditionalRequestPreValidationCommand.js +0 -59
  451. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ContentNegotiatorCommand.js +0 -70
  452. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugContentNegotiatorCommand.js +0 -59
  453. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugDeserializingCommand.js +0 -44
  454. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +0 -51
  455. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DeserializingCommand.js +0 -69
  456. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DispatcherCommand.js +0 -95
  457. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorContentNegotiatorCommand.js +0 -44
  458. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ErrorSerializingCommand.js +0 -51
  459. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/EventListenerCommand.js +0 -59
  460. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/LocaleNegotiatorCommand.js +0 -56
  461. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OdataVersionValidationCommand.js +0 -41
  462. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/OperationValidationCommand.js +0 -34
  463. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/ParsePreferHeaderCommand.js +0 -47
  464. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +0 -47
  465. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsParserCommand.js +0 -43
  466. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/QueryOptionsValidationCommand.js +0 -62
  467. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/RequestContentValidationCommand.js +0 -51
  468. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SendResponseCommand.js +0 -37
  469. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +0 -159
  470. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +0 -90
  471. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetStatuscodeCommand.js +0 -51
  472. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/UriParserCommand.js +0 -47
  473. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/logging/DebugLogger.js +0 -97
  474. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ApplicationHttpWriter.js +0 -65
  475. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchJsonSerializer.js +0 -46
  476. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/BatchMultipartSerializer.js +0 -113
  477. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +0 -405
  478. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugHtmlSerializer.js +0 -302
  479. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/DebugJsonSerializer.js +0 -515
  480. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +0 -47
  481. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorSerializer.js +0 -39
  482. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorXmlSerializer.js +0 -98
  483. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ExpressionTreeImage.js +0 -404
  484. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MetadataXmlSerializer.js +0 -1416
  485. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/MultipartWriter.js +0 -202
  486. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/NextLinkSerializer.js +0 -330
  487. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ResourceJsonSerializer.js +0 -1220
  488. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +0 -484
  489. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ServiceJsonSerializer.js +0 -89
  490. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +0 -612
  491. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/debugview.html +0 -157
  492. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/BufferedWriter.js +0 -59
  493. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/ExpandHelper.js +0 -96
  494. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/MetadataCache.js +0 -136
  495. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/PerformanceMonitor.js +0 -221
  496. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/utils/UriHelper.js +0 -157
  497. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/ConditionalRequestValidator.js +0 -79
  498. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/OperationValidator.js +0 -199
  499. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/RequestValidator.js +0 -392
  500. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/validator/VersionValidator.js +0 -62
  501. package/libx/_runtime/cds-services/adapter/odata-v4/to.js +0 -51
  502. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +0 -331
  503. package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +0 -159
  504. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +0 -404
  505. package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +0 -55
  506. package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +0 -86
  507. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +0 -107
  508. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +0 -64
  509. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +0 -385
  510. package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +0 -12
  511. package/libx/_runtime/cds-services/util/errors.js +0 -15
  512. package/libx/_runtime/common/aspects/relation.js +0 -40
  513. package/libx/_runtime/common/composition/data.js +0 -370
  514. package/libx/_runtime/common/composition/delete.js +0 -313
  515. package/libx/_runtime/common/composition/index.js +0 -22
  516. package/libx/_runtime/common/composition/insert.js +0 -108
  517. package/libx/_runtime/common/composition/tree.js +0 -275
  518. package/libx/_runtime/common/composition/update.js +0 -354
  519. package/libx/_runtime/common/composition/utils.js +0 -95
  520. package/libx/_runtime/common/error/constants.js +0 -20
  521. package/libx/_runtime/common/error/entry.js +0 -36
  522. package/libx/_runtime/common/error/frontend.js +0 -199
  523. package/libx/_runtime/common/error/index.js +0 -12
  524. package/libx/_runtime/common/error/log.js +0 -35
  525. package/libx/_runtime/common/error/standardError.js +0 -11
  526. package/libx/_runtime/common/error/utils.js +0 -18
  527. package/libx/_runtime/common/generic/auth/constants.js +0 -17
  528. package/libx/_runtime/common/generic/put.js +0 -85
  529. package/libx/_runtime/common/utils/columns.js +0 -177
  530. package/libx/_runtime/common/utils/compareJsonOLD.js +0 -280
  531. package/libx/_runtime/common/utils/cqn2cqn4sql.js +0 -1039
  532. package/libx/_runtime/common/utils/data.js +0 -16
  533. package/libx/_runtime/common/utils/dollar.js +0 -27
  534. package/libx/_runtime/common/utils/generateOnCond.js +0 -127
  535. package/libx/_runtime/common/utils/onlyKeysRemain.js +0 -10
  536. package/libx/_runtime/common/utils/path.js +0 -20
  537. package/libx/_runtime/common/utils/quotingStyles.js +0 -29
  538. package/libx/_runtime/common/utils/restrictions.js +0 -67
  539. package/libx/_runtime/common/utils/search2cqn4sql.js +0 -37
  540. package/libx/_runtime/common/utils/searchToLike.js +0 -56
  541. package/libx/_runtime/common/utils/stream.js +0 -103
  542. package/libx/_runtime/common/utils/ucsn.js +0 -119
  543. package/libx/_runtime/common/utils/union.js +0 -31
  544. package/libx/_runtime/common/utils/unionCqnTemplate.js +0 -174
  545. package/libx/_runtime/db/Service.js +0 -93
  546. package/libx/_runtime/db/data-conversion/post-processing.js +0 -175
  547. package/libx/_runtime/db/expand/expand-v2.js +0 -147
  548. package/libx/_runtime/db/expand/expandCQNToJoin.js +0 -1775
  549. package/libx/_runtime/db/expand/index.js +0 -13
  550. package/libx/_runtime/db/expand/rawToExpanded.js +0 -250
  551. package/libx/_runtime/db/generic/create.js +0 -30
  552. package/libx/_runtime/db/generic/delete.js +0 -18
  553. package/libx/_runtime/db/generic/index.js +0 -25
  554. package/libx/_runtime/db/generic/input.js +0 -227
  555. package/libx/_runtime/db/generic/read.js +0 -16
  556. package/libx/_runtime/db/generic/rewrite.js +0 -68
  557. package/libx/_runtime/db/generic/structured.js +0 -92
  558. package/libx/_runtime/db/generic/update.js +0 -97
  559. package/libx/_runtime/db/generic/virtual.js +0 -83
  560. package/libx/_runtime/db/query/delete.js +0 -39
  561. package/libx/_runtime/db/query/index.js +0 -13
  562. package/libx/_runtime/db/query/insert.js +0 -21
  563. package/libx/_runtime/db/query/read.js +0 -97
  564. package/libx/_runtime/db/query/run.js +0 -30
  565. package/libx/_runtime/db/query/update.js +0 -94
  566. package/libx/_runtime/db/result/InsertResult.js +0 -87
  567. package/libx/_runtime/db/sql-builder/BaseBuilder.js +0 -65
  568. package/libx/_runtime/db/sql-builder/CreateBuilder.js +0 -212
  569. package/libx/_runtime/db/sql-builder/DeleteBuilder.js +0 -87
  570. package/libx/_runtime/db/sql-builder/DropBuilder.js +0 -63
  571. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +0 -345
  572. package/libx/_runtime/db/sql-builder/FunctionBuilder.js +0 -232
  573. package/libx/_runtime/db/sql-builder/InsertBuilder.js +0 -494
  574. package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -135
  575. package/libx/_runtime/db/sql-builder/SelectBuilder.js +0 -482
  576. package/libx/_runtime/db/sql-builder/UpdateBuilder.js +0 -207
  577. package/libx/_runtime/db/sql-builder/UpsertBuilder.js +0 -25
  578. package/libx/_runtime/db/sql-builder/annotations.js +0 -50
  579. package/libx/_runtime/db/sql-builder/arrayed.js +0 -4
  580. package/libx/_runtime/db/sql-builder/dataTypes.js +0 -59
  581. package/libx/_runtime/db/sql-builder/dollar.js +0 -37
  582. package/libx/_runtime/db/sql-builder/index.js +0 -28
  583. package/libx/_runtime/db/sql-builder/sqlFactory.js +0 -104
  584. package/libx/_runtime/db/utils/coloredTxCommands.js +0 -7
  585. package/libx/_runtime/db/utils/columns.js +0 -41
  586. package/libx/_runtime/db/utils/deep.js +0 -71
  587. package/libx/_runtime/db/utils/generateAliases.js +0 -160
  588. package/libx/_runtime/db/utils/localized.js +0 -77
  589. package/libx/_runtime/db/utils/normalizeTimeData.js +0 -98
  590. package/libx/_runtime/db/utils/stream.js +0 -41
  591. package/libx/_runtime/hana/Service.js +0 -173
  592. package/libx/_runtime/hana/conversion.js +0 -73
  593. package/libx/_runtime/hana/customBuilder/CustomCreateBuilder.js +0 -11
  594. package/libx/_runtime/hana/customBuilder/CustomDeleteBuilder.js +0 -17
  595. package/libx/_runtime/hana/customBuilder/CustomDropBuilder.js +0 -12
  596. package/libx/_runtime/hana/customBuilder/CustomExpressionBuilder.js +0 -23
  597. package/libx/_runtime/hana/customBuilder/CustomFunctionBuilder.js +0 -34
  598. package/libx/_runtime/hana/customBuilder/CustomReferenceBuilder.js +0 -38
  599. package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +0 -90
  600. package/libx/_runtime/hana/customBuilder/index.js +0 -11
  601. package/libx/_runtime/hana/driver.js +0 -205
  602. package/libx/_runtime/hana/dynatrace.js +0 -130
  603. package/libx/_runtime/hana/execute.js +0 -429
  604. package/libx/_runtime/hana/localized.js +0 -39
  605. package/libx/_runtime/hana/pool.js +0 -186
  606. package/libx/_runtime/hana/search.js +0 -20
  607. package/libx/_runtime/hana/search2Contains.js +0 -106
  608. package/libx/_runtime/hana/search2cqn4sql.js +0 -98
  609. package/libx/_runtime/hana/streaming.js +0 -248
  610. package/libx/_runtime/messaging/Outbox.js +0 -15
  611. package/libx/_runtime/sqlite/Service.js +0 -153
  612. package/libx/_runtime/sqlite/conversion.js +0 -47
  613. package/libx/_runtime/sqlite/convertAssocToOneManaged.js +0 -60
  614. package/libx/_runtime/sqlite/convertDraftAdminPathExpression.js +0 -74
  615. package/libx/_runtime/sqlite/customBuilder/CustomExpressionBuilder.js +0 -24
  616. package/libx/_runtime/sqlite/customBuilder/CustomFunctionBuilder.js +0 -102
  617. package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +0 -16
  618. package/libx/_runtime/sqlite/customBuilder/CustomUpsertBuilder.js +0 -47
  619. package/libx/_runtime/sqlite/customBuilder/index.js +0 -49
  620. package/libx/_runtime/sqlite/execute.js +0 -345
  621. package/libx/_runtime/sqlite/localized.js +0 -49
  622. package/libx/outbox/index.js +0 -307
@@ -1,50 +1,29 @@
1
+ const cds = require('../cds')
2
+ const LOG = cds.log('fiori|drafts')
3
+
4
+ const { Object_keys } = cds.utils
5
+
1
6
  const { Readable, PassThrough } = require('stream')
2
- const cds = require('../cds'),
3
- { Object_keys } = cds.utils
4
7
 
5
8
  const { getPageSize, commonGenericPaging } = require('../common/generic/paging')
6
9
  const { handler: commonGenericSorting } = require('../common/generic/sorting')
7
10
  const { addEtagColumns } = require('../common/utils/etag')
8
-
9
- const { calculateLocationHeader } = require('../../odata/utils')
10
11
  const { handleStreamProperties } = require('../common/utils/streamProp')
11
12
 
12
- const LOG = cds.log('fiori|drafts')
13
- const original = Symbol('original')
14
- const DRAFT_PARAMS = Symbol('draftParams')
15
- const AGGREGATION_FUNCTIONS = ['sum', 'min', 'max', 'avg', 'average', 'count']
16
-
17
- const calcTimeMs = timeout => {
18
- const match = timeout.match(/^([0-9]+)(w|d|h|hrs|min)$/)
19
- if (!match) return
20
-
21
- const [, val, t] = match
22
- switch (t) {
23
- case 'w':
24
- return val * 1000 * 3600 * 24 * 7
13
+ const location4 = require('../../http/location')
25
14
 
26
- case 'd':
27
- return val * 1000 * 3600 * 24
15
+ const $original = Symbol('original')
16
+ const $draftParams = Symbol('draftParams')
28
17
 
29
- case 'h':
30
- case 'hrs':
31
- return val * 1000 * 3600
32
-
33
- case 'min':
34
- return val * 1000 * 60
35
-
36
- default:
37
- return val
38
- }
39
- }
18
+ const AGGREGATION_FUNCTIONS = ['sum', 'min', 'max', 'avg', 'average', 'count']
40
19
 
41
20
  const _config_to_ms = (config, _default) => {
42
21
  const timeout = cds.env.fiori?.[config]
43
22
  let timeout_ms
44
23
  if (timeout === true) {
45
- timeout_ms = calcTimeMs(_default)
24
+ timeout_ms = cds.utils._unit.time2ms(_default)
46
25
  } else if (typeof timeout === 'string') {
47
- timeout_ms = calcTimeMs(timeout)
26
+ timeout_ms = cds.utils._unit.time2ms(timeout)
48
27
  if (!timeout_ms)
49
28
  throw new Error(`
50
29
  ${timeout} is an invalid value for \`cds.fiori.${config}\`.
@@ -167,7 +146,7 @@ const _promiseAll = async array => {
167
146
  }
168
147
 
169
148
  const _isCount = query => query.SELECT.columns?.length === 1 && query.SELECT.columns[0].func === 'count'
170
- const entity_keys = entity =>
149
+ const _entityKeys = entity =>
171
150
  Object_keys(entity.keys).filter(key => key !== 'IsActiveEntity' && !entity.keys[key].isAssociation)
172
151
 
173
152
  const _inProcessByUserXpr = lockShiftedNow => ({
@@ -239,7 +218,7 @@ const _cleanUpOldDrafts = (service, tenant) => {
239
218
 
240
219
  const draftRootIds = await Promise.all(
241
220
  draftRoots.map(draftRoot =>
242
- SELECT.from(draftRoot, entity_keys(draftRoot)).where(`DraftAdministrativeData_DraftUUID IN`, expiredDraftsIds)
221
+ SELECT.from(draftRoot, _entityKeys(draftRoot)).where(`DraftAdministrativeData_DraftUUID IN`, expiredDraftsIds)
243
222
  )
244
223
  )
245
224
 
@@ -320,46 +299,45 @@ const _replaceStreams = result => {
320
299
  }
321
300
  }
322
301
 
302
+ // REVISIT: Can we do a regular handler function instead of monky patching?
323
303
  const h = cds.ApplicationService.prototype.handle
324
-
325
- cds.ApplicationService.prototype.handle = async function (req) {
326
- const handle = h.bind(this)
327
-
304
+ const handle = async function (req) {
328
305
  if (req.event === 'DISCARD') req.event = 'CANCEL'
329
- if (req.event === 'SAVE') {
306
+ else if (req.event === 'SAVE') {
330
307
  req.event = 'draftActivate'
331
308
  req.query ??= SELECT.from(req.target, req.data) //> support simple srv.send('SAVE',entity,...)
332
309
  }
333
- if (
334
- !req.query ||
335
- // REVISIT: Currently all requests in an Object Page to nested composition targets, e.g. Incidents(ID)/conversation are also Draft Requests which seems wrong overkill -> is that required?
336
- // req.path.includes('/') ||
337
- req.query[DRAFT_PARAMS] ||
338
- (!req.query.SELECT &&
339
- !req.query.INSERT &&
340
- // !req.query.UPSERT && // skip UPSERTs (might have an additional INSERT)
341
- !req.query.UPDATE &&
342
- !req.query.DELETE)
343
- ) {
344
- return handle(req)
345
- }
346
310
 
347
- const _etagValidationType = req.headers['if-match']
348
- ? 'if-match'
349
- : req.headers['if-none-match']
350
- ? 'if-none-match'
351
- : undefined
311
+ // Fast exit for non-draft requests
312
+ // REVISIT: should also start with else, but then this test fails: cds/tests/_runtime/odata/__tests__/integration/draft-custom-handlers.test.js
313
+ if (!req.query) return h.call(this, req)
314
+ else if ($draftParams in req.query) return h.call(this, req)
315
+ /* prettier-ignore */ else if (!(
316
+ // Note: we skip UPSERTs as these might have an additional INSERT
317
+ 'SELECT' in req.query ||
318
+ 'INSERT' in req.query ||
319
+ 'UPDATE' in req.query ||
320
+ 'DELETE' in req.query
321
+ )) return h.call(this, req)
322
+ // TODO: also skip quickly if no draft-enabled entities are involved ?!?
323
+ // TODO: also skip quickly if no isActiveEntity is part of the query ?!?
324
+ // TODO: also skip quickly for CREATE request not from Fiori clients ???
325
+
326
+ // rewrite event if necessary
327
+ if (req.protocol && req.target.drafts && req.event in { CREATE: 1, DELETE: 1 }) {
328
+ if (req.event === 'CREATE' && req.data.IsActiveEntity !== true) req.event = 'NEW'
329
+ if (req.event === 'DELETE' && req.data.IsActiveEntity === false) req.event = 'CANCEL'
330
+ }
352
331
 
353
332
  const query = _cleansed(req.query, this.model)
354
333
  _cleanseParams(req.params, req.target)
355
334
  if (req.data) _cleanseParams(req.data, req.target)
356
- const draftParams = query[DRAFT_PARAMS]
335
+ const draftParams = query[$draftParams]
357
336
 
358
337
  const _newReq = (req, query, draftParams, { event, headers }) => {
359
338
  // REVISIT: This is a bit hacky -> better way?
360
339
  query._target = undefined
361
- query.target = undefined
362
- query[DRAFT_PARAMS] = draftParams
340
+ query[$draftParams] = draftParams
363
341
 
364
342
  // REVISIT: This is extremely bad. We should be able to just create a copy without such hacks.
365
343
  const _req = cds.Request.for(req._) // REVISIT: this causes req._.data of WRITE reqs copied to READ reqs
@@ -372,7 +350,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
372
350
  // If we create a `READ` event based on a modifying request, we delete data
373
351
  if (event === 'READ' && req.event !== 'READ') delete _req.data // which we fix here -> but this is an ugly workaround
374
352
 
375
- _req.target = cds.infer(query, this.model.definitions)
353
+ _req.target = cds.infer.target(query)
376
354
  _req.query = query
377
355
  _req.event =
378
356
  event ||
@@ -399,7 +377,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
399
377
 
400
378
  const run = (query, options = {}) => {
401
379
  const _req = _newReq(req, query, draftParams, options)
402
- return handle(_req)
380
+ return h.call(this, _req)
403
381
  }
404
382
 
405
383
  if (req.event === 'READ') {
@@ -409,7 +387,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
409
387
  !req.query._target.drafts
410
388
  ) {
411
389
  req.query = query
412
- return handle(req)
390
+ return h.call(this, req)
413
391
  }
414
392
 
415
393
  // apply paging and sorting on original query for protocol adapters relying on it
@@ -464,7 +442,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
464
442
  if (!containsDraftRoot) req.reject({ code: 403, statusCode: 403, message: 'DRAFT_MODIFICATION_ONLY_VIA_ROOT' })
465
443
 
466
444
  const isDirectAccess = typeof req.query.INSERT.into === 'string' || req.query.INSERT.into.ref?.length === 1
467
- const data = Object.assign({}, req.data) // IsActiveEntity is not enumerable
445
+ const data = Array.isArray(req.data) ? [...req.data] : Object.assign({}, req.data) // IsActiveEntity is not enumerable
468
446
  const draftsRootRef =
469
447
  typeof query.INSERT.into === 'string'
470
448
  ? [req.target.drafts.name]
@@ -477,8 +455,8 @@ cds.ApplicationService.prototype.handle = async function (req) {
477
455
  }
478
456
 
479
457
  // direct access and req.data contains keys: check if root has no draft with that keys
480
- if (isDirectAccess && entity_keys(query._target).every(k => k in data)) {
481
- const keyData = entity_keys(query._target).reduce((res, k) => {
458
+ if (isDirectAccess && _entityKeys(query._target).every(k => k in data)) {
459
+ const keyData = _entityKeys(query._target).reduce((res, k) => {
482
460
  res[k] = req.data[k]
483
461
  return res
484
462
  }, {})
@@ -489,7 +467,9 @@ cds.ApplicationService.prototype.handle = async function (req) {
489
467
 
490
468
  const cqn = INSERT.into(query.INSERT.into).entries(data)
491
469
  await run(cqn, { event: 'CREATE' })
492
- const result = { ...data, IsActiveEntity: true }
470
+ const result = Array.isArray(data)
471
+ ? data.map(d => ({ ...d, IsActiveEntity: true }))
472
+ : { ...data, IsActiveEntity: true }
493
473
  req.data = result //> make keys available via req.data (as with normal crud)
494
474
  return result
495
475
  }
@@ -518,7 +498,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
518
498
  req.reject({ code: 403, statusCode: 403, message: 'ACTIVE_MODIFICATION_VIA_DRAFT' })
519
499
  }
520
500
 
521
- const result = await handle(_req)
501
+ const result = await h.call(this, _req)
522
502
  req.data = result //> make keys available via req.data (as with normal crud)
523
503
  return result
524
504
  }
@@ -536,7 +516,8 @@ cds.ApplicationService.prototype.handle = async function (req) {
536
516
  if (query.DELETE.where) draftQuery.where(query.DELETE.where)
537
517
 
538
518
  // Deletion of active instance outside draft tree, no need to check for draft
539
- if (!draftQuery.target?.isDraft) {
519
+ const target = cds.infer.target(draftQuery) // FIXME: this should not be neccessary, does it?
520
+ if (!target?.isDraft) {
540
521
  await run(query)
541
522
  return req.data
542
523
  }
@@ -583,8 +564,14 @@ cds.ApplicationService.prototype.handle = async function (req) {
583
564
  ])
584
565
  .where(query.SELECT.where)
585
566
  const res = await run(draftQuery)
586
- if (!res)
567
+ if (!res) {
568
+ const _etagValidationType = req.headers['if-match']
569
+ ? 'if-match'
570
+ : req.headers['if-none-match']
571
+ ? 'if-none-match'
572
+ : undefined
587
573
  req.reject(_etagValidationType ? { code: 412, statusCode: 412 } : { code: 'DRAFT_NOT_EXISTING', statusCode: 404 })
574
+ }
588
575
  if (!cds.context.user._is_privileged && res.DraftAdministrativeData?.InProcessByUser !== cds.context.user.id) {
589
576
  req.reject({
590
577
  code: 403,
@@ -616,27 +603,17 @@ cds.ApplicationService.prototype.handle = async function (req) {
616
603
  DELETE.from('DRAFT.DraftAdministrativeData').where({ DraftUUID: DraftAdministrativeData_DraftUUID })
617
604
  ])
618
605
 
619
- if (!HasActiveEntity) {
620
- // REVISIT: we need to use okra API here because it must be set in the batched request
621
- // status code must be set in handler to allow overriding for FE V2
606
+ if (req.res) {
607
+ // status code must be set in handler to allow overriding for FE V2
622
608
  // REVISIT: needs reworking for new adapter, especially re $batch
623
- if (req._?.odataRes) {
624
- req._?.odataRes?.setStatusCode(201, { overwrite: true })
625
- } else if (req.res) {
626
- req.res.status(201)
627
- }
628
- }
609
+ if (!HasActiveEntity) req.res.status(201)
629
610
 
630
- if (cds.env.features.odata_new_adapter && req.res) {
631
611
  const read_result = await _readAfterDraftAction.bind(this)({
632
612
  req,
633
613
  payload: res,
634
614
  action: 'draftActivate'
635
615
  })
636
- req.res.set(
637
- 'location',
638
- '../' + calculateLocationHeader(req.target, this, read_result || { ...res, IsActiveEntity: true })
639
- )
616
+ req.res.set('location', '../' + location4(req.target, this, read_result || { ...res, IsActiveEntity: true }))
640
617
 
641
618
  if (read_result == null) req.res.status(204)
642
619
 
@@ -658,11 +635,27 @@ cds.ApplicationService.prototype.handle = async function (req) {
658
635
  req.reject({ code: 403, statusCode: 403 })
659
636
  }
660
637
  const _req = _newReq(req, query, draftParams, { event: req.event })
661
- const result = await handle(_req)
638
+ const result = await h.call(this, _req)
662
639
  return result
663
640
  }
664
641
 
665
642
  if (req.event === 'PATCH' || (req.event === 'UPDATE' && req.target.drafts)) {
643
+ // also delete `IsActiveEntity` for references
644
+ const _rmIsActiveEntity = (data, target) => {
645
+ delete data.IsActiveEntity
646
+ for (const assoc in target.associations) {
647
+ const val = data[assoc]
648
+ if (val && typeof val === 'object') {
649
+ const _target = req.target.associations[assoc]._target
650
+ if (Array.isArray(val)) {
651
+ val.forEach(v => _rmIsActiveEntity(v, _target))
652
+ } else {
653
+ _rmIsActiveEntity(val, _target)
654
+ }
655
+ }
656
+ }
657
+ }
658
+ _rmIsActiveEntity(req.data, req.target)
666
659
  if (draftParams.IsActiveEntity === false) {
667
660
  LOG.debug('patch draft')
668
661
 
@@ -689,9 +682,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
689
682
  })
690
683
  .where({ DraftUUID: res.DraftAdministrativeData_DraftUUID })
691
684
 
692
- const updateData = { ...req.data }
693
- delete updateData.IsActiveEntity
694
- await run(UPDATE({ ref: draftsRef }).data(updateData))
685
+ await run(UPDATE({ ref: draftsRef }).data(req.data))
695
686
  req.data.IsActiveEntity = false
696
687
  return req.data
697
688
  }
@@ -723,7 +714,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
723
714
 
724
715
  req.query = query
725
716
 
726
- return handle(req)
717
+ return h.call(this, req)
727
718
  }
728
719
 
729
720
  // REVISIT: It's not optimal to first calculate the whole result array and only later
@@ -731,7 +722,7 @@ cds.ApplicationService.prototype.handle = async function (req) {
731
722
  // especially since the current db driver always adds those fields.
732
723
  // Once we switch to the new driver, we'll adapt it.
733
724
  const _requested = (result, query) => {
734
- const originalQuery = query[original]
725
+ const originalQuery = query[$original]
735
726
  if (!result || !originalQuery) return result
736
727
  const all = ['HasActiveEntity', 'HasDraftEntity']
737
728
 
@@ -815,7 +806,7 @@ const Read = {
815
806
  !query.SELECT.columns.some(c => c === '*') &&
816
807
  !query.SELECT.columns.some(c => c.func && AGGREGATION_FUNCTIONS.includes(c.func))
817
808
  ) {
818
- const keys = entity_keys(query._target)
809
+ const keys = _entityKeys(query._target)
819
810
  for (const key of keys) {
820
811
  if (!query.SELECT.columns.some(c => c.ref?.[0] === key)) query.SELECT.columns.push({ ref: [key] })
821
812
  }
@@ -857,7 +848,7 @@ const Read = {
857
848
  draftsQuery.SELECT.count = undefined
858
849
  draftsQuery.SELECT.orderBy = undefined
859
850
  draftsQuery.SELECT.limit = null
860
- draftsQuery.SELECT.columns = entity_keys(query._target).map(k => ({ ref: [k] }))
851
+ draftsQuery.SELECT.columns = _entityKeys(query._target).map(k => ({ ref: [k] }))
861
852
 
862
853
  const drafts = await draftsQuery.where({ HasActiveEntity: true })
863
854
  const res = await Read.onlyActives(run, query.where(Read.whereNotIn(query._target, drafts)), {
@@ -911,7 +902,7 @@ const Read = {
911
902
  query._drafts.SELECT.limit = null // we need all entries for the keys to properly select actives (count)
912
903
  const isCount = _isCount(query._drafts)
913
904
  if (isCount) {
914
- query._drafts.SELECT.columns = entity_keys(query._target).map(k => ({ ref: [k] }))
905
+ query._drafts.SELECT.columns = _entityKeys(query._target).map(k => ({ ref: [k] }))
915
906
  }
916
907
  if (!query._drafts.SELECT.columns) query._drafts.SELECT.columns = ['*']
917
908
  if (!query._drafts.SELECT.columns.some(c => c.ref?.[0] === 'HasActiveEntity')) {
@@ -963,7 +954,7 @@ const Read = {
963
954
  }
964
955
  }
965
956
 
966
- const queryElements = cds.infer.elements4(query.SELECT.columns, query.source)
957
+ const queryElements = query.elements
967
958
  const actives = await run(query.where(Read.whereNotIn(query._target, ownDrafts)))
968
959
  const removeColumns = (columns, toRemoveCols) => {
969
960
  if (!toRemoveCols) return
@@ -1014,7 +1005,7 @@ const Read = {
1014
1005
 
1015
1006
  // runtime sort required
1016
1007
  if (orderByExpr && ownDrafts.length > 0 && actives.length > 0) {
1017
- const locale = cds.context.locale.replaceAll('_', '-')
1008
+ const locale = cds.context.locale?.replaceAll('_', '-')
1018
1009
  const collatorMap = new Map()
1019
1010
  const elementNamesToSort = orderByExpr.map(orderByExp => orderByExp.ref.join('_'))
1020
1011
 
@@ -1077,7 +1068,7 @@ const Read = {
1077
1068
  c => c.ref && ['DraftAdministrativeData', 'DraftAdministrativeData_DraftUUID'].includes(c.ref[0])
1078
1069
  )
1079
1070
  : [{ ref: ['DraftAdministrativeData_DraftUUID'] }]
1080
- draftsQuery.SELECT.columns = entity_keys(query._target)
1071
+ draftsQuery.SELECT.columns = _entityKeys(query._target)
1081
1072
  .map(k => ({ ref: [k] }))
1082
1073
  .concat(additionalCols)
1083
1074
  draftsQuery.where({
@@ -1114,7 +1105,7 @@ const Read = {
1114
1105
  whereNotIn: (target, data) => Read.whereIn(target, data, true),
1115
1106
 
1116
1107
  whereIn: (target, data, not = false) => {
1117
- const keys = entity_keys(target)
1108
+ const keys = _entityKeys(target)
1118
1109
  const dataArray = data ? (Array.isArray(data) ? data : [data]) : []
1119
1110
  if (not && !dataArray.length) return []
1120
1111
  if (keys.length === 1) {
@@ -1137,7 +1128,7 @@ const Read = {
1137
1128
  if (!actives.length) return []
1138
1129
  const drafts = cds.ql.clone(query._drafts)
1139
1130
  drafts.SELECT.where = Read.whereIn(query._target, actives)
1140
- const newColumns = entity_keys(query._target).map(k => ({ ref: [k] }))
1131
+ const newColumns = _entityKeys(query._target).map(k => ({ ref: [k] }))
1141
1132
  if (
1142
1133
  !drafts.SELECT.columns ||
1143
1134
  drafts.SELECT.columns.some(c => c === '*' || c.ref?.[0] === 'DraftAdministrativeData_DraftUUID')
@@ -1149,6 +1140,7 @@ const Read = {
1149
1140
  drafts.SELECT.count = undefined
1150
1141
  drafts.SELECT.search = undefined
1151
1142
  drafts.SELECT.one = undefined
1143
+ drafts.SELECT.recurse = undefined
1152
1144
  return drafts
1153
1145
  },
1154
1146
 
@@ -1176,7 +1168,7 @@ const Read = {
1176
1168
  const dataArray = Read._makeArray(data)
1177
1169
  if (!dataArray.length) return
1178
1170
  const hash = row =>
1179
- entity_keys(target)
1171
+ _entityKeys(target)
1180
1172
  .map(k => row[k])
1181
1173
  .reduce((res, curr) => res + '|$|' + curr, '')
1182
1174
  const hashMap = new Map()
@@ -1219,7 +1211,7 @@ function _cleanseParams(params, target) {
1219
1211
  if (key === 'IsActiveEntity') {
1220
1212
  const value = params[key]
1221
1213
  delete params[key]
1222
- Object.defineProperty(params, key, { value, enumerable: false, writeable: true })
1214
+ Object.defineProperty(params, key, { value, enumerable: false, writeable: true, configurable: true })
1223
1215
  }
1224
1216
  }
1225
1217
  }
@@ -1268,7 +1260,7 @@ function _cleansed(query, model) {
1268
1260
  draftSelect.from = {
1269
1261
  ref: [root.id ? { ...root, id: draft.name } : draft.name, ...tail]
1270
1262
  }
1271
- cds.infer(draftsQuery, model.definitions)
1263
+ cds.infer.target(draftsQuery)
1272
1264
 
1273
1265
  // draftsQuery._target = draftsQuery._target?.drafts || draftsQuery._target
1274
1266
  if (querySelect.columns && query._target.drafts) {
@@ -1295,7 +1287,7 @@ function _cleansed(query, model) {
1295
1287
  draftSelect.columns = _tweakAdminExpand(draftSelect.columns)
1296
1288
  }
1297
1289
 
1298
- draftsQuery[DRAFT_PARAMS] = draftParams
1290
+ draftsQuery[$draftParams] = draftParams
1299
1291
  Object.defineProperty(q, '_drafts', { value: draftsQuery })
1300
1292
  return draftsQuery
1301
1293
  }
@@ -1308,8 +1300,8 @@ function _cleansed(query, model) {
1308
1300
  })
1309
1301
  }
1310
1302
 
1311
- q[DRAFT_PARAMS] = draftParams
1312
- q[original] = query
1303
+ q[$draftParams] = draftParams
1304
+ q[$original] = query
1313
1305
  return q
1314
1306
 
1315
1307
  function _cleanseQuery(query, draftParams, model) {
@@ -1508,10 +1500,30 @@ function expandStarStar(target, draftActivate, recursion = new Map()) {
1508
1500
  return columns
1509
1501
  }
1510
1502
 
1511
- async function onNewCleanse(req) {
1512
- cds.validate(req.data, req.target, { insert: true })
1503
+ async function beforeNew(req) {
1504
+ function _cleanseData(data, target) {
1505
+ if (!data) return
1506
+ delete data.IsActiveEntity
1507
+ if (!target) return data
1508
+
1509
+ // Also support deep insertions
1510
+ for (const key in data) {
1511
+ if (data[key] && target.elements[key].isAssociation) delete data[key].IsActiveEntity
1512
+ if (!target.elements[key]?.isComposition) continue
1513
+ // do array trick
1514
+ if (Array.isArray(data[key])) data[key] = data[key].map(v => _cleanseData(v, target.elements[key]._target))
1515
+ else if (typeof data[key] === 'object') {
1516
+ data[key] = _cleanseData(data[key], target.elements[key]._target)
1517
+ }
1518
+ }
1519
+
1520
+ return data
1521
+ }
1522
+ _cleanseData(req.data, req.target)
1513
1523
  }
1514
- onNewCleanse._initial = true
1524
+
1525
+ beforeNew._initial = true
1526
+
1515
1527
  async function onNew(req) {
1516
1528
  LOG.debug('new draft')
1517
1529
 
@@ -1564,7 +1576,7 @@ async function onNew(req) {
1564
1576
  })
1565
1577
  .where({ DraftUUID })
1566
1578
 
1567
- const _setDraftUUIDandHasActiveEntity = (obj, target) => {
1579
+ const _setDraftColumns = (obj, target) => {
1568
1580
  const newObj = Object.assign({}, obj, { DraftAdministrativeData_DraftUUID: DraftUUID, HasActiveEntity: false })
1569
1581
  if (!target) return newObj
1570
1582
 
@@ -1573,19 +1585,18 @@ async function onNew(req) {
1573
1585
  if (!target.elements[key]?.isComposition) continue
1574
1586
  // do array trick
1575
1587
  if (Array.isArray(newObj[key]))
1576
- newObj[key] = newObj[key].map(v => _setDraftUUIDandHasActiveEntity(v, target.elements[key]._target))
1588
+ newObj[key] = newObj[key].map(v => _setDraftColumns(v, target.elements[key]._target))
1577
1589
  else if (typeof newObj[key] === 'object') {
1578
- newObj[key] = _setDraftUUIDandHasActiveEntity(newObj[key], target.elements[key]._target)
1590
+ newObj[key] = _setDraftColumns(newObj[key], target.elements[key]._target)
1579
1591
  }
1580
1592
  }
1581
1593
 
1582
1594
  return newObj
1583
1595
  }
1584
1596
 
1585
- const draftData = _setDraftUUIDandHasActiveEntity(req.query.INSERT.entries[0], req.target)
1597
+ const draftData = _setDraftColumns(req.query.INSERT.entries[0], req.target)
1586
1598
 
1587
- delete draftData.IsActiveEntity
1588
- const draftCQN = INSERT.into(req.target).entries(draftData)
1599
+ const draftCQN = INSERT.into(req.subject).entries(draftData)
1589
1600
 
1590
1601
  await _promiseAll([adminDataCQN, this.run(draftCQN)])
1591
1602
 
@@ -1602,7 +1613,7 @@ async function onEdit(req) {
1602
1613
  req.query ??= SELECT.from(req.target, req.data).where({ IsActiveEntity: true }) //> support simple srv.send('EDIT',entity,...)
1603
1614
 
1604
1615
  // use symbol for _draftParams
1605
- const draftParams = req.query[DRAFT_PARAMS] || { IsActiveEntity: true } // REVISIT: can draftParams in the edit caser ever be undefined or other than IsActiveEntity=true ?
1616
+ const draftParams = req.query[$draftParams] || { IsActiveEntity: true } // REVISIT: can draftParams in the edit caser ever be undefined or other than IsActiveEntity=true ?
1606
1617
  if (req.query.SELECT.from.ref.length > 1 || draftParams.IsActiveEntity !== true) {
1607
1618
  req.reject({
1608
1619
  code: 400,
@@ -1648,7 +1659,7 @@ async function onEdit(req) {
1648
1659
  })
1649
1660
 
1650
1661
  // prevent service to check for own user
1651
- existingDraft[DRAFT_PARAMS] = draftParams
1662
+ existingDraft[$draftParams] = draftParams
1652
1663
 
1653
1664
  const selectActiveCQN = SELECT.one.from({ ref: req.query.SELECT.from.ref }).columns(cols)
1654
1665
  selectActiveCQN.SELECT.localized = false
@@ -1663,7 +1674,7 @@ async function onEdit(req) {
1663
1674
  // ensuring there is no waiting time for other users attempting to edit the same record
1664
1675
  // concurrently.
1665
1676
  if (this._datasource === cds.db) {
1666
- const keys = entity_keys(req.target)
1677
+ const keys = _entityKeys(req.target)
1667
1678
  const keyData = _getKeyData(keys, req.query.SELECT.from.ref[0].where)
1668
1679
  const rootWhere = keys.reduce((res, key) => {
1669
1680
  res[key] = keyData[key]
@@ -1689,7 +1700,7 @@ async function onEdit(req) {
1689
1700
  })()
1690
1701
  const activeLockCQN = SELECT.from(lockTarget, [1]).where(lockWhere).forUpdate({ wait: 0 })
1691
1702
  activeLockCQN.SELECT.localized = false
1692
- activeLockCQN[DRAFT_PARAMS] = draftParams
1703
+ activeLockCQN[$draftParams] = draftParams
1693
1704
 
1694
1705
  try {
1695
1706
  await activeLockCQN
@@ -1709,7 +1720,7 @@ async function onEdit(req) {
1709
1720
  } else {
1710
1721
  const activeLockCQN = SELECT.from({ ref: req.query.SELECT.from.ref }, [1]).forUpdate({ wait: 0 })
1711
1722
  activeLockCQN.SELECT.localized = false
1712
- activeLockCQN[DRAFT_PARAMS] = draftParams
1723
+ activeLockCQN[$draftParams] = draftParams
1713
1724
 
1714
1725
  // Locking the underlying database table is effective only when the database is not
1715
1726
  // hosted on an external service. This is because the active data might be stored in
@@ -1729,6 +1740,7 @@ async function onEdit(req) {
1729
1740
  }
1730
1741
 
1731
1742
  if (!res) req.reject({ code: 404, statusCode: 404 })
1743
+
1732
1744
  const preserveChanges = req.data?.PreserveChanges
1733
1745
  const inProcessByUser = draft?.DraftAdministrativeData?.InProcessByUser
1734
1746
 
@@ -1742,7 +1754,7 @@ async function onEdit(req) {
1742
1754
  ])
1743
1755
  }
1744
1756
 
1745
- if (!cds.env.features.stream_compat && !cds.env.features.binary_draft_compat) _replaceStreams(res)
1757
+ if (!cds.env.features.binary_draft_compat) _replaceStreams(res)
1746
1758
 
1747
1759
  const timestamp = cds.context.timestamp.toISOString() // REVISIT: toISOString should be done on db layer
1748
1760
  await INSERT.into('DRAFT.DraftAdministrativeData').entries({
@@ -1772,16 +1784,13 @@ async function onEdit(req) {
1772
1784
  req.res.status(201)
1773
1785
  }
1774
1786
 
1775
- if (cds.env.features.odata_new_adapter && req.res) {
1787
+ if (req.res) {
1776
1788
  const read_result = await _readAfterDraftAction.bind(this)({
1777
1789
  req,
1778
1790
  payload: res,
1779
1791
  action: 'draftEdit'
1780
1792
  })
1781
- req.res.set(
1782
- 'location',
1783
- '../' + calculateLocationHeader(req.target, this, read_result || { ...res, IsActiveEntity: false })
1784
- )
1793
+ req.res.set('location', '../' + location4(req.target, this, read_result || { ...res, IsActiveEntity: false }))
1785
1794
 
1786
1795
  if (read_result == null) req.res.status(204)
1787
1796
 
@@ -1796,7 +1805,7 @@ async function onCancel(req) {
1796
1805
 
1797
1806
  req.query ??= DELETE(req.target, req.data) //> support simple srv.send('CANCEL',entity,...)
1798
1807
  const activeRef = _redirectRefToActives(req.query.DELETE.from.ref, this.model)
1799
- const draftParams = req.query[DRAFT_PARAMS] || { IsActiveEntity: false } // REVISIT: can draftParams in the cancel case ever be undefined or other than IsActiveEntity=false ?
1808
+ const draftParams = req.query[$draftParams] || { IsActiveEntity: false } // REVISIT: can draftParams in the cancel case ever be undefined or other than IsActiveEntity=false ?
1800
1809
 
1801
1810
  const draftQuery = SELECT.one
1802
1811
  .from({ ref: req.query.DELETE.from.ref })
@@ -1841,7 +1850,7 @@ async function onCancel(req) {
1841
1850
  async function onPrepare(req) {
1842
1851
  LOG.debug('prepare draft')
1843
1852
 
1844
- const draftParams = req.query[DRAFT_PARAMS]
1853
+ const draftParams = req.query[$draftParams]
1845
1854
  if (req.query.SELECT.from.ref.length > 1 || draftParams.IsActiveEntity !== false) {
1846
1855
  req.reject({
1847
1856
  code: 400,
@@ -1856,7 +1865,7 @@ async function onPrepare(req) {
1856
1865
  d`.*`, d.DraftAdministrativeData(a => a.InProcessByUser)
1857
1866
  })
1858
1867
  .where(where)
1859
- draftQuery[DRAFT_PARAMS] = draftParams
1868
+ draftQuery[$draftParams] = draftParams
1860
1869
  const data = await draftQuery
1861
1870
  if (!data) req.reject({ code: 404, statusCode: 404 })
1862
1871
  if (!cds.context.user._is_privileged && data.DraftAdministrativeData?.InProcessByUser !== req.user.id)
@@ -1912,78 +1921,47 @@ const _readAfterDraftAction = async function ({ req, payload, action }) {
1912
1921
  }
1913
1922
  }
1914
1923
 
1915
- // REVISIT: Looking at the simplified impls, I wonder if there's really much added convenience.
1916
- // Even more as these events are very rarely sent from programmatic clients, if at all, but rather from Fiori clients only.
1917
- cds.extend(cds.ApplicationService).with(
1918
- class {
1919
- new(draft, key) {
1920
- return {
1921
- then: (r, e) => this.send('NEW', draft, key).then(r, e),
1922
- for: key => this.send('EDIT', typeof draft === 'string' ? draft.replace(/\.drafts$/, '') : draft.actives, key)
1923
- }
1924
- }
1925
- edit(active, key) {
1926
- return this.send('EDIT', active, key)
1927
- }
1928
- save(draft, key) {
1929
- return this.send('SAVE', draft, key)
1930
- }
1931
- cancel(draft, key) {
1932
- return this.send('CANCEL', draft, key)
1933
- }
1934
- discard(draft, key) {
1935
- return this.send('DISCARD', draft, key)
1936
- }
1937
- }
1938
- )
1939
-
1940
- module.exports = {
1941
- impl() {
1942
- // REVISIT: don't pollute services... -> do we really need this?
1943
- Object.defineProperty(this, '_datasource', { value: cds.db })
1944
-
1945
- function _wrapped(handler, isActiveEntity) {
1946
- const fn = function (req, next) {
1947
- if (!req.target?.drafts || (isActiveEntity && req.target.isDraft) || (!isActiveEntity && !req.target.isDraft))
1948
- return next?.()
1949
- return handler.call(this, req, next)
1950
- }
1951
- if (handler._initial) fn._initial = true
1952
- return fn
1953
- }
1924
+ module.exports = cds.service.impl(function () {
1925
+ if (!this.entities?.DraftAdministrativeData) return
1954
1926
 
1955
- // Also runs those handlers if they're annotated with @odata.draft.enabled through extensibility
1956
- this.before('NEW', '*', _wrapped(onNewCleanse, false))
1957
- this.on('NEW', '*', _wrapped(onNew, false))
1958
- this.on('EDIT', '*', _wrapped(onEdit, true))
1959
- this.on('CANCEL', '*', _wrapped(onCancel, false))
1960
- this.on('draftPrepare', '*', _wrapped(onPrepare, false))
1961
-
1962
- async function fioriReadCompat(req, next) {
1963
- if (!req.target) return next()
1964
- const data = await next()
1965
- if (!data) return data
1966
- let _key
1967
- for (const key in req.target.keys) {
1968
- if (key === 'IsActiveEntity') continue
1969
- _key = key
1970
- break
1971
- }
1972
- const _addIsActiveEntity = (data, IsActiveEntity) => {
1973
- if (Array.isArray(data)) return data.map(d => _addIsActiveEntity(d, IsActiveEntity))
1974
- if (_key in data) data.IsActiveEntity = IsActiveEntity
1975
- }
1976
- _addIsActiveEntity(data, !req.target?.isDraft)
1977
- return data
1927
+ // REVISIT: don't pollute services... -> do we really need this?
1928
+ Object.defineProperty(this, '_datasource', { value: cds.db })
1929
+
1930
+ this.new = function (draft, key) {
1931
+ return {
1932
+ then: (r, e) => this.send('NEW', draft, key).then(r, e),
1933
+ for: key => this.send('EDIT', typeof draft === 'string' ? draft.replace(/\.drafts$/, '') : draft.actives, key)
1978
1934
  }
1935
+ }
1936
+ this.edit = function (active, key) {
1937
+ return this.send('EDIT', active, key)
1938
+ }
1939
+ this.save = function (draft, key) {
1940
+ return this.send('SAVE', draft, key)
1941
+ }
1942
+ this.cancel = function (draft, key) {
1943
+ return this.send('CANCEL', draft, key)
1944
+ }
1945
+ this.discard = function (draft, key) {
1946
+ return this.send('DISCARD', draft, key)
1947
+ }
1979
1948
 
1980
- if (cds.env.fiori.draft_compat) {
1981
- // register after read handlers to add `IsActiveEntity`,
1982
- // so stakeholders have access to it when calling next()
1949
+ this.handle = handle
1983
1950
 
1984
- // to check if data contains a key value
1985
- this.on('READ', '*', _wrapped(fioriReadCompat, true))
1986
- this.on('READ', '*', _wrapped(fioriReadCompat, false))
1951
+ function _wrapped(handler, isActiveEntity) {
1952
+ const fn = function handle_draft_requests(req, next) {
1953
+ if (!req.target?.drafts || (isActiveEntity && req.target.isDraft) || (!isActiveEntity && !req.target.isDraft))
1954
+ return next?.()
1955
+ return handler.call(this, req, next)
1987
1956
  }
1957
+ if (handler._initial) fn._initial = true
1958
+ return fn
1988
1959
  }
1989
- }
1960
+
1961
+ // Also runs those handlers if they're annotated with @odata.draft.enabled through extensibility
1962
+ this.on('NEW', '*', _wrapped(onNew, false))
1963
+ this.prepend(s => s.before('NEW', '*', _wrapped(beforeNew, false)))
1964
+ this.on('EDIT', '*', _wrapped(onEdit, true))
1965
+ this.on('CANCEL', '*', _wrapped(onCancel, false))
1966
+ this.on('draftPrepare', '*', _wrapped(onPrepare, false))
1967
+ })