@sap/cds 5.9.8 → 6.0.3

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 (381) hide show
  1. package/CHANGELOG.md +277 -20
  2. package/apis/services.d.ts +1 -1
  3. package/app/fiori/preview.js +2 -6
  4. package/app/index.js +3 -3
  5. package/bin/build/buildTaskEngine.js +17 -15
  6. package/bin/build/buildTaskFactory.js +29 -19
  7. package/bin/build/buildTaskHandler.js +27 -11
  8. package/bin/build/buildTaskProvider.js +2 -4
  9. package/bin/build/buildTaskProviderFactory.js +11 -16
  10. package/bin/build/constants.js +14 -6
  11. package/bin/build/csv-reader.js +2 -1
  12. package/bin/build/index.js +12 -18
  13. package/bin/build/provider/buildTaskHandlerEdmx.js +3 -39
  14. package/bin/build/provider/buildTaskHandlerFeatureToggles.js +149 -0
  15. package/bin/build/provider/buildTaskHandlerInternal.js +2 -3
  16. package/bin/build/provider/buildTaskProviderInternal.js +108 -239
  17. package/bin/build/provider/fiori/index.js +2 -2
  18. package/bin/build/provider/hana/2migration.js +11 -11
  19. package/bin/build/provider/hana/2tabledata.js +3 -3
  20. package/bin/build/provider/hana/index.js +89 -99
  21. package/bin/build/provider/hana/migrationtable.js +4 -3
  22. package/bin/build/provider/java/index.js +101 -0
  23. package/bin/build/provider/java-cf/index.js +1 -101
  24. package/bin/build/provider/mtx/index.js +83 -41
  25. package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
  26. package/bin/build/provider/mtx-sidecar/index.js +110 -0
  27. package/bin/build/provider/node-cf/index.js +1 -308
  28. package/bin/build/provider/nodejs/index.js +189 -0
  29. package/bin/build/util.js +21 -31
  30. package/bin/cds.js +5 -3
  31. package/bin/deploy/to-hana/cfUtil.js +31 -6
  32. package/bin/deploy/to-hana/gitUtil.js +5 -3
  33. package/bin/deploy/to-hana/hana.js +15 -13
  34. package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
  35. package/bin/mtx/in-cds.js +19 -7
  36. package/bin/serve.js +49 -22
  37. package/bin/utils/log.js +13 -30
  38. package/bin/version.js +4 -3
  39. package/common.cds +61 -16
  40. package/lib/compile/cdsc.js +3 -2
  41. package/lib/compile/etc/_localized.js +15 -14
  42. package/lib/compile/for/drafts.js +3 -4
  43. package/lib/compile/for/java.js +13 -10
  44. package/lib/compile/for/nodejs.js +8 -8
  45. package/lib/compile/for/odata.js +7 -12
  46. package/lib/compile/for/sql.js +5 -6
  47. package/lib/compile/index.js +5 -4
  48. package/lib/compile/load.js +9 -11
  49. package/lib/compile/minify.js +8 -5
  50. package/lib/compile/parse.js +4 -2
  51. package/lib/compile/resolve.js +18 -15
  52. package/lib/compile/to/edm.js +0 -1
  53. package/lib/compile/to/gql.js +3 -2
  54. package/lib/compile/to/json.js +24 -17
  55. package/lib/connect/bindings.js +3 -2
  56. package/lib/connect/index.js +5 -5
  57. package/lib/core/classes.js +74 -2
  58. package/lib/core/entities.js +52 -3
  59. package/lib/core/reflect.js +2 -1
  60. package/lib/deploy.js +10 -8
  61. package/lib/env/defaults.js +4 -3
  62. package/lib/env/index.js +71 -31
  63. package/lib/env/presets.js +1 -14
  64. package/lib/env/requires.js +71 -20
  65. package/lib/env/serviceBindings.js +147 -0
  66. package/lib/i18n/localize.js +22 -23
  67. package/lib/index.js +148 -144
  68. package/lib/log/errors.js +55 -12
  69. package/lib/log/format/kibana.js +1 -1
  70. package/lib/log/index.js +4 -0
  71. package/lib/ql/SELECT.js +7 -2
  72. package/lib/ql/Whereable.js +8 -2
  73. package/lib/ql/index.js +2 -2
  74. package/lib/req/assert.js +71 -0
  75. package/lib/req/cds-context.js +38 -70
  76. package/lib/req/context.js +34 -21
  77. package/lib/req/request.js +12 -18
  78. package/lib/req/response.js +6 -2
  79. package/lib/req/user.js +30 -22
  80. package/lib/serve/Service-api.js +17 -12
  81. package/lib/serve/Service-dispatch.js +5 -9
  82. package/lib/serve/Service-methods.js +4 -3
  83. package/lib/serve/Transaction.js +24 -21
  84. package/lib/serve/adapters.js +15 -5
  85. package/lib/serve/factory.js +22 -20
  86. package/lib/serve/index.js +51 -54
  87. package/lib/utils/axios.js +8 -12
  88. package/lib/utils/index.js +13 -4
  89. package/lib/utils/resources/index.js +1 -44
  90. package/lib/utils/resources/tar.js +2 -1
  91. package/lib/utils/tests.js +13 -15
  92. package/libx/_runtime/.eslintrc +1 -1
  93. package/libx/_runtime/audit/Service.js +6 -4
  94. package/libx/_runtime/audit/generic/personal/access.js +19 -43
  95. package/libx/_runtime/audit/generic/personal/index.js +40 -34
  96. package/libx/_runtime/audit/generic/personal/modification.js +11 -9
  97. package/libx/_runtime/audit/generic/personal/utils.js +13 -6
  98. package/libx/_runtime/audit/utils/v2.js +6 -3
  99. package/libx/_runtime/auth/index.js +71 -66
  100. package/libx/_runtime/auth/strategies/JWT.js +3 -2
  101. package/libx/_runtime/auth/strategies/mock.js +54 -53
  102. package/libx/_runtime/auth/strategies/xssecUtils.js +3 -4
  103. package/libx/_runtime/auth/strategies/xsuaa.js +3 -2
  104. package/libx/_runtime/auth/utils.js +2 -15
  105. package/libx/_runtime/cds-services/adapter/odata-v4/Dispatcher.js +127 -41
  106. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +9 -5
  107. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
  108. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +25 -45
  109. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +10 -14
  110. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +9 -5
  111. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +4 -2
  112. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +60 -53
  113. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +2 -2
  114. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +21 -26
  115. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +8 -15
  116. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +29 -41
  117. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +1 -4
  118. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +13 -13
  119. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -7
  120. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +24 -1
  121. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +1 -1
  122. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +4 -3
  123. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +4 -5
  124. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +4 -3
  125. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +5 -3
  126. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +2 -0
  127. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +1 -1
  128. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +1 -1
  129. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +1 -1
  130. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +1 -1
  131. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +3 -2
  132. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +3 -1
  133. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +1 -0
  134. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +3 -3
  135. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +36 -25
  136. package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +97 -92
  137. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +382 -0
  138. package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +1 -4
  139. package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +5 -6
  140. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +82 -21
  141. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +3 -11
  142. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +91 -69
  143. package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +27 -6
  144. package/libx/_runtime/cds-services/adapter/rest/utils/validation-checks.js +7 -17
  145. package/libx/_runtime/cds-services/services/Service.js +17 -76
  146. package/libx/_runtime/cds-services/services/utils/columns.js +6 -4
  147. package/libx/_runtime/cds-services/services/utils/compareJson.js +1 -53
  148. package/libx/_runtime/cds-services/services/utils/differ.js +15 -19
  149. package/libx/_runtime/cds-services/util/assert.js +107 -34
  150. package/libx/_runtime/cds.js +1 -31
  151. package/libx/_runtime/common/aspects/Association.js +40 -54
  152. package/libx/_runtime/common/aspects/any.js +61 -6
  153. package/libx/_runtime/common/aspects/entity.js +19 -79
  154. package/libx/_runtime/common/composition/data.js +2 -2
  155. package/libx/_runtime/common/composition/delete.js +8 -7
  156. package/libx/_runtime/common/composition/tree.js +10 -10
  157. package/libx/_runtime/common/composition/update.js +3 -2
  158. package/libx/_runtime/common/constants/events.js +13 -0
  159. package/libx/_runtime/common/error/entry.js +9 -3
  160. package/libx/_runtime/common/error/frontend.js +13 -19
  161. package/libx/_runtime/common/error/index.js +8 -3
  162. package/libx/_runtime/common/generic/auth/capabilities.js +2 -1
  163. package/libx/_runtime/common/generic/auth/constants.js +1 -4
  164. package/libx/_runtime/common/generic/auth/requires.js +1 -1
  165. package/libx/_runtime/common/generic/auth/restrict.js +12 -28
  166. package/libx/_runtime/common/generic/auth/restrictions.js +12 -4
  167. package/libx/_runtime/common/generic/auth/utils.js +2 -1
  168. package/libx/_runtime/common/generic/crud.js +9 -60
  169. package/libx/_runtime/common/generic/etag.js +41 -7
  170. package/libx/_runtime/common/generic/input.js +128 -66
  171. package/libx/_runtime/common/generic/paging.js +9 -3
  172. package/libx/_runtime/common/generic/put.js +2 -2
  173. package/libx/_runtime/common/generic/sorting.js +7 -3
  174. package/libx/_runtime/common/generic/temporal.js +0 -5
  175. package/libx/_runtime/common/i18n/messages.properties +2 -1
  176. package/libx/_runtime/common/utils/binary.js +69 -0
  177. package/libx/_runtime/common/utils/cqn.js +39 -14
  178. package/libx/_runtime/common/utils/cqn2cqn4sql.js +93 -59
  179. package/libx/_runtime/common/utils/csn.js +87 -85
  180. package/libx/_runtime/common/utils/dollar.js +8 -7
  181. package/libx/_runtime/common/utils/draft.js +1 -1
  182. package/libx/_runtime/common/utils/foreignKeyPropagations.js +23 -7
  183. package/libx/_runtime/common/utils/generateOnCond.js +2 -1
  184. package/libx/_runtime/common/utils/keys.js +30 -13
  185. package/libx/_runtime/common/utils/postProcessing.js +6 -1
  186. package/libx/_runtime/common/utils/quotingStyles.js +0 -23
  187. package/libx/_runtime/common/utils/resolveStructured.js +23 -26
  188. package/libx/_runtime/common/utils/resolveView.js +4 -1
  189. package/libx/_runtime/common/utils/rewriteAsterisks.js +3 -0
  190. package/libx/_runtime/common/utils/search2cqn4sql.js +4 -13
  191. package/libx/_runtime/common/utils/searchToLike.js +9 -13
  192. package/libx/_runtime/common/utils/streamProp.js +35 -0
  193. package/libx/_runtime/common/utils/structured.js +12 -18
  194. package/libx/_runtime/common/utils/template.js +3 -5
  195. package/libx/_runtime/common/utils/templateProcessor.js +22 -14
  196. package/libx/_runtime/common/utils/unionCqnTemplate.js +4 -14
  197. package/libx/_runtime/db/Service.js +2 -1
  198. package/libx/_runtime/db/expand/expand-v2.js +2 -2
  199. package/libx/_runtime/db/expand/expandCQNToJoin.js +7 -6
  200. package/libx/_runtime/db/generic/input.js +14 -17
  201. package/libx/_runtime/db/generic/integrity.js +1 -2
  202. package/libx/_runtime/db/generic/update.js +14 -1
  203. package/libx/_runtime/db/query/read.js +0 -1
  204. package/libx/_runtime/db/query/update.js +1 -1
  205. package/libx/_runtime/db/sql-builder/BaseBuilder.js +1 -1
  206. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +5 -31
  207. package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
  208. package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -9
  209. package/libx/_runtime/db/sql-builder/SelectBuilder.js +11 -10
  210. package/libx/_runtime/db/sql-builder/UpdateBuilder.js +2 -2
  211. package/libx/_runtime/db/sql-builder/annotations.js +1 -2
  212. package/libx/_runtime/db/utils/coloredTxCommands.js +5 -0
  213. package/libx/_runtime/db/utils/columns.js +1 -1
  214. package/libx/_runtime/db/utils/propagateForeignKeys.js +10 -2
  215. package/libx/_runtime/extensibility/activate.js +69 -0
  216. package/libx/_runtime/extensibility/add.js +41 -0
  217. package/libx/_runtime/extensibility/addExtension.js +68 -0
  218. package/libx/_runtime/extensibility/defaults.js +39 -0
  219. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformREAD.js +0 -0
  220. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformRESULT.js +2 -2
  221. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformWRITE.js +2 -2
  222. package/libx/_runtime/extensibility/push.js +61 -0
  223. package/libx/_runtime/extensibility/service.js +21 -0
  224. package/libx/_runtime/extensibility/{uiflex/utils.js → utils.js} +39 -3
  225. package/libx/_runtime/extensibility/validation.js +53 -0
  226. package/libx/_runtime/extensibility/views.js +12 -0
  227. package/libx/_runtime/fiori/generic/activate.js +2 -4
  228. package/libx/_runtime/fiori/generic/before.js +17 -29
  229. package/libx/_runtime/fiori/generic/cancel.js +2 -4
  230. package/libx/_runtime/fiori/generic/delete.js +2 -4
  231. package/libx/_runtime/fiori/generic/edit.js +4 -16
  232. package/libx/_runtime/fiori/generic/index.js +31 -0
  233. package/libx/_runtime/fiori/generic/new.js +5 -21
  234. package/libx/_runtime/fiori/generic/patch.js +10 -15
  235. package/libx/_runtime/fiori/generic/prepare.js +13 -22
  236. package/libx/_runtime/fiori/generic/read.js +148 -163
  237. package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
  238. package/libx/_runtime/fiori/utils/handler.js +10 -22
  239. package/libx/_runtime/fiori/utils/where.js +1 -4
  240. package/libx/_runtime/hana/Service.js +14 -7
  241. package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +1 -1
  242. package/libx/_runtime/hana/dynatrace.js +2 -2
  243. package/libx/_runtime/hana/localized.js +7 -6
  244. package/libx/_runtime/hana/pool.js +9 -6
  245. package/libx/_runtime/hana/search.js +2 -3
  246. package/libx/_runtime/hana/{searchToContains.js → search2Contains.js} +5 -2
  247. package/libx/_runtime/hana/search2cqn4sql.js +20 -17
  248. package/libx/_runtime/index.js +2 -6
  249. package/libx/_runtime/messaging/AMQPWebhookMessaging.js +30 -22
  250. package/libx/_runtime/messaging/common-utils/AMQPClient.js +4 -3
  251. package/libx/_runtime/messaging/common-utils/appId.js +9 -0
  252. package/libx/_runtime/messaging/common-utils/authorizedRequest.js +2 -18
  253. package/libx/_runtime/messaging/common-utils/connections.js +1 -1
  254. package/libx/_runtime/messaging/enterprise-messaging-shared.js +2 -2
  255. package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +305 -231
  256. package/libx/_runtime/messaging/enterprise-messaging-utils/cloudEvents.js +2 -2
  257. package/libx/_runtime/messaging/enterprise-messaging-utils/options-management.js +15 -8
  258. package/libx/_runtime/messaging/enterprise-messaging-utils/options-messaging.js +57 -14
  259. package/libx/_runtime/messaging/enterprise-messaging.js +14 -19
  260. package/libx/_runtime/messaging/file-based.js +3 -1
  261. package/libx/_runtime/messaging/http-utils/token.js +18 -6
  262. package/libx/_runtime/messaging/message-queuing-utils/options-management.js +22 -12
  263. package/libx/_runtime/messaging/message-queuing-utils/options-messaging.js +27 -14
  264. package/libx/_runtime/messaging/message-queuing.js +138 -85
  265. package/libx/_runtime/messaging/outbox/utils.js +13 -7
  266. package/libx/_runtime/messaging/redis-messaging.js +0 -1
  267. package/libx/_runtime/messaging/service.js +4 -1
  268. package/libx/_runtime/remote/Service.js +24 -18
  269. package/libx/_runtime/remote/utils/client.js +90 -48
  270. package/libx/_runtime/remote/utils/data.js +23 -6
  271. package/libx/_runtime/sqlite/Service.js +14 -13
  272. package/libx/_runtime/sqlite/convertAssocToOneManaged.js +2 -0
  273. package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +1 -0
  274. package/libx/_runtime/sqlite/execute.js +3 -9
  275. package/libx/_runtime/types/api.js +23 -11
  276. package/libx/common/utils/ucsn.js +15 -9
  277. package/libx/odata/afterburner.js +109 -29
  278. package/libx/odata/cqn2odata.js +48 -9
  279. package/libx/odata/grammar.pegjs +263 -156
  280. package/libx/odata/index.js +21 -9
  281. package/libx/odata/parseToCqn.js +8 -5
  282. package/libx/odata/parser.js +1 -1
  283. package/libx/odata/utils.js +13 -3
  284. package/libx/rest/RestAdapter.js +173 -113
  285. package/libx/rest/RestRequest.js +3 -2
  286. package/libx/rest/middleware/create.js +8 -6
  287. package/libx/rest/middleware/delete.js +6 -13
  288. package/libx/rest/middleware/error.js +1 -1
  289. package/libx/rest/middleware/input.js +6 -6
  290. package/libx/rest/middleware/operation.js +8 -3
  291. package/libx/rest/middleware/parse.js +3 -3
  292. package/libx/rest/middleware/payload.js +12 -0
  293. package/libx/rest/middleware/read.js +12 -2
  294. package/libx/rest/middleware/update.js +3 -3
  295. package/package.json +4 -6
  296. package/server.js +3 -44
  297. package/srv/extensibility-service.cds +56 -0
  298. package/srv/extensibility-service.js +1 -0
  299. package/srv/extensions.cds +8 -0
  300. package/srv/model-provider.cds +59 -0
  301. package/srv/model-provider.js +163 -0
  302. package/srv/mtx.cds +2 -0
  303. package/srv/mtx.js +22 -0
  304. package/srv/outbox.cds +2 -0
  305. package/tasks/enterprise-messaging-deploy.js +19 -12
  306. package/lib/serve/Service-compat.js +0 -36
  307. package/libx/_runtime/audit/generic/personal/constants.js +0 -4
  308. package/libx/_runtime/auth/strategies/dwc.js +0 -45
  309. package/libx/_runtime/cds-services/adapter/odata-v4/utils/dispatcherUtils.js +0 -56
  310. package/libx/_runtime/cds-services/adapter/rest/Rest.js +0 -183
  311. package/libx/_runtime/cds-services/adapter/rest/RestRequest.js +0 -67
  312. package/libx/_runtime/cds-services/adapter/rest/handlers/create.js +0 -82
  313. package/libx/_runtime/cds-services/adapter/rest/handlers/delete.js +0 -39
  314. package/libx/_runtime/cds-services/adapter/rest/handlers/operation.js +0 -63
  315. package/libx/_runtime/cds-services/adapter/rest/handlers/read.js +0 -52
  316. package/libx/_runtime/cds-services/adapter/rest/handlers/update.js +0 -81
  317. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/index.js +0 -56
  318. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/utils.js +0 -33
  319. package/libx/_runtime/cds-services/adapter/rest/to.js +0 -8
  320. package/libx/_runtime/cds-services/adapter/rest/utils/binary.js +0 -50
  321. package/libx/_runtime/cds-services/adapter/rest/utils/data.js +0 -117
  322. package/libx/_runtime/cds-services/adapter/rest/utils/header-checks.js +0 -14
  323. package/libx/_runtime/cds-services/adapter/rest/utils/key-value-utils.js +0 -30
  324. package/libx/_runtime/cds-services/adapter/rest/utils/parse-url.js +0 -250
  325. package/libx/_runtime/cds-services/adapter/rest/utils/result.js +0 -26
  326. package/libx/_runtime/cds-services/services/utils/handlerUtils.js +0 -200
  327. package/libx/_runtime/common/aspects/utils.js +0 -152
  328. package/libx/_runtime/common/toggles/handler.js +0 -21
  329. package/libx/_runtime/common/utils/extensibilityUtils.js +0 -18
  330. package/libx/_runtime/extensibility/mps/index.js +0 -5
  331. package/libx/_runtime/extensibility/mps/service.js +0 -111
  332. package/libx/_runtime/extensibility/mps/tar.js +0 -42
  333. package/libx/_runtime/extensibility/mps/utils.js +0 -11
  334. package/libx/_runtime/extensibility/uiflex/index.js +0 -54
  335. package/libx/_runtime/extensibility/uiflex/service.js +0 -276
  336. package/libx/_runtime/messaging/common-utils/naming-conventions.js +0 -20
  337. package/libx/_runtime/remote/utils/client-types.d.ts +0 -7
  338. package/libx/gql/GraphQLAdapter.js +0 -33
  339. package/libx/gql/constants/adapter.js +0 -69
  340. package/libx/gql/constants/cds.js +0 -18
  341. package/libx/gql/constants/graphql.js +0 -33
  342. package/libx/gql/readme.md +0 -1
  343. package/libx/gql/resolvers/crud/create.js +0 -20
  344. package/libx/gql/resolvers/crud/delete.js +0 -29
  345. package/libx/gql/resolvers/crud/index.js +0 -6
  346. package/libx/gql/resolvers/crud/read.js +0 -30
  347. package/libx/gql/resolvers/crud/update.js +0 -42
  348. package/libx/gql/resolvers/crud/utils/index.js +0 -36
  349. package/libx/gql/resolvers/field.js +0 -5
  350. package/libx/gql/resolvers/index.js +0 -7
  351. package/libx/gql/resolvers/mutation.js +0 -23
  352. package/libx/gql/resolvers/parse/ast/enrich.js +0 -52
  353. package/libx/gql/resolvers/parse/ast/fragment.js +0 -11
  354. package/libx/gql/resolvers/parse/ast/fromObject.js +0 -39
  355. package/libx/gql/resolvers/parse/ast/index.js +0 -3
  356. package/libx/gql/resolvers/parse/ast/meta.js +0 -4
  357. package/libx/gql/resolvers/parse/ast/variable.js +0 -7
  358. package/libx/gql/resolvers/parse/ast2cqn/columns.js +0 -44
  359. package/libx/gql/resolvers/parse/ast2cqn/entries.js +0 -31
  360. package/libx/gql/resolvers/parse/ast2cqn/index.js +0 -8
  361. package/libx/gql/resolvers/parse/ast2cqn/limit.js +0 -6
  362. package/libx/gql/resolvers/parse/ast2cqn/orderBy.js +0 -24
  363. package/libx/gql/resolvers/parse/ast2cqn/utils/index.js +0 -3
  364. package/libx/gql/resolvers/parse/ast2cqn/where.js +0 -70
  365. package/libx/gql/resolvers/parse/utils/index.js +0 -8
  366. package/libx/gql/resolvers/query.js +0 -13
  367. package/libx/gql/resolvers/root.js +0 -34
  368. package/libx/gql/schema/generate.js +0 -18
  369. package/libx/gql/schema/index.js +0 -5
  370. package/libx/gql/schema/mutation.js +0 -76
  371. package/libx/gql/schema/query.js +0 -108
  372. package/libx/gql/schema/typeDefMap.js +0 -45
  373. package/libx/gql/schema/utils/index.js +0 -54
  374. package/libx/gql/utils/index.js +0 -12
  375. package/libx/rest/middleware/auth.js +0 -20
  376. package/libx/rest/middleware/content.js +0 -19
  377. package/srv/flex.cds +0 -21
  378. package/srv/flex.js +0 -1
  379. package/srv/mps.cds +0 -23
  380. package/srv/mps.js +0 -1
  381. package/srv/outbox.js +0 -0
@@ -55,7 +55,7 @@ const _getParent = (req, service) => {
55
55
  keyPredicateText = keyPredicate.getText()
56
56
 
57
57
  if (keyPredicateName === 'IsActiveEntity') {
58
- parent.IsActiveEntity = keyPredicateText
58
+ parent.IsActiveEntity = keyPredicateText === 'true'
59
59
  } else {
60
60
  parent.keyName = keyPredicateName
61
61
  parent.keyValue = keyPredicateText
@@ -104,7 +104,7 @@ const _getSelectDraftDataCqn = (entityName, where) => {
104
104
 
105
105
  const _getDraftDataFromExistingDraft = async (req, service, parent = _getParent(req, service)) => {
106
106
  if (parent) {
107
- if (parent.IsActiveEntity === 'false') {
107
+ if (parent.IsActiveEntity === false) {
108
108
  const parentWhere = [{ ref: [parent.keyName] }, '=', { val: parent.keyValue }]
109
109
  const query = _getSelectDraftDataCqn(parent.entityName, parentWhere)
110
110
  const result = await cds.tx(req).run(query)
@@ -125,7 +125,7 @@ const _addDraftDataFromExistingDraft = async (req, service) => {
125
125
  const result = await _getDraftDataFromExistingDraft(req, service, parent)
126
126
 
127
127
  if (parent) {
128
- if (parent.IsActiveEntity === 'false') {
128
+ if (parent.IsActiveEntity === false) {
129
129
  _validateDraft(req, result)
130
130
  _addDraftDataToContext(req, result)
131
131
  return result
@@ -139,21 +139,14 @@ const _addDraftDataFromExistingDraft = async (req, service) => {
139
139
  return result
140
140
  }
141
141
 
142
- const _addGeneratedDraftUUID = async req => {
143
- req._draftMetadata = req._draftMetadata || {}
144
- req.data.DraftAdministrativeData_DraftUUID = cds.utils.uuid()
145
- req._draftMetadata.DraftUUID = req.data.DraftAdministrativeData_DraftUUID
146
- }
147
-
148
142
  /**
149
143
  * Generic Handler for before NEW requests.
150
- *
151
- * @param req
152
144
  */
153
145
  const _new = async function (req) {
154
- if (isDraftActivateAction(req)) return
146
+ if (isDraftActivateAction(req)) return // REVISIT: How can NEW be draftActivate???
155
147
 
156
148
  if (isNavigationToMany(req)) {
149
+ // REVISIT: How can NEW be a navigation to many?
157
150
  const result = await _addDraftDataFromExistingDraft(req, this)
158
151
 
159
152
  // in order to fix corner case where active subitems are created in draft case
@@ -161,13 +154,13 @@ const _new = async function (req) {
161
154
  return
162
155
  }
163
156
 
164
- _addGeneratedDraftUUID(req)
157
+ req._draftMetadata = req._draftMetadata || {}
158
+ req.data.DraftAdministrativeData_DraftUUID = cds.utils.uuid()
159
+ req._draftMetadata.DraftUUID = req.data.DraftAdministrativeData_DraftUUID
165
160
  }
166
161
 
167
162
  /**
168
163
  * Generic Handler for before PATCH and UPDATE requests.
169
- *
170
- * @param req
171
164
  */
172
165
  const _patchUpdate = async function (req) {
173
166
  if (isDraftActivateAction(req)) return
@@ -180,8 +173,6 @@ const _patchUpdate = async function (req) {
180
173
 
181
174
  /**
182
175
  * Generic Handler for before DELETE and CANCEL requests.
183
- *
184
- * @param req
185
176
  */
186
177
  const _deleteCancel = async function (req) {
187
178
  await _addDraftDataFromExistingDraft(req, this)
@@ -209,16 +200,13 @@ const _registerBoundActionHandlers = function (entityName, actions) {
209
200
  }
210
201
  }
211
202
 
212
- module.exports = cds.service.impl(function () {
213
- _new._initial = true
214
- _patchUpdate._initial = true
215
- _deleteCancel._initial = true
216
- const entities = Object.values(this.entities).filter(e => e._isDraftEnabled)
217
-
218
- for (const entity of entities) {
219
- this.before('NEW', entity, _new)
220
- this.before(['PATCH', 'UPDATE'], entity, _patchUpdate)
221
- this.before(['DELETE', 'CANCEL'], entity, _deleteCancel)
222
- _registerBoundActionHandlers.call(this, entity.name, entity.actions)
223
- }
203
+ _new._initial = true
204
+ _patchUpdate._initial = true
205
+ _deleteCancel._initial = true
206
+
207
+ module.exports = cds.service.impl((srv, entity) => {
208
+ srv.before('NEW', entity, _new)
209
+ srv.before(['PATCH', 'UPDATE'], entity, _patchUpdate)
210
+ srv.before(['DELETE', 'CANCEL'], entity, _deleteCancel)
211
+ _registerBoundActionHandlers.call(srv, entity.name, entity.actions)
224
212
  })
@@ -12,8 +12,6 @@ const _handler = function (req) {
12
12
  return deleteDraft(req, this)
13
13
  }
14
14
 
15
- module.exports = cds.service.impl(function () {
16
- for (const entity of Object.values(this.entities).filter(e => e._isDraftEnabled)) {
17
- this.on('CANCEL', entity, _handler)
18
- }
15
+ module.exports = cds.service.impl(function (srv, entity) {
16
+ srv.on('CANCEL', entity, _handler)
19
17
  })
@@ -14,8 +14,6 @@ const _handler = function (req) {
14
14
  return deleteDraft(req, this, true)
15
15
  }
16
16
 
17
- module.exports = cds.service.impl(function () {
18
- for (const entity of Object.values(this.entities).filter(e => e._isDraftEnabled)) {
19
- this.on('DELETE', entity, _handler)
20
- }
17
+ module.exports = cds.service.impl(function (srv, entity) {
18
+ srv.on('DELETE', entity, _handler)
21
19
  })
@@ -4,14 +4,7 @@ const { INSERT, SELECT, DELETE } = cds.ql
4
4
  const { getCompositionTree } = require('../../common/composition')
5
5
  const { getColumns } = require('../../cds-services/services/utils/columns')
6
6
  const { getTransition } = require('../../common/utils/resolveView')
7
- const {
8
- draftIsLocked,
9
- ensureDraftsSuffix,
10
- ensureNoDraftsSuffix,
11
- getSubCQNs,
12
- setStatusCodeAndHeader,
13
- filterKeys
14
- } = require('../utils/handler')
7
+ const { draftIsLocked, ensureDraftsSuffix, ensureNoDraftsSuffix, getSubCQNs, filterKeys } = require('../utils/handler')
15
8
  const { isActiveEntityRequested, getKeyData } = require('../utils/where')
16
9
 
17
10
  const _getDraftColumns = draftUUID => ({
@@ -163,14 +156,9 @@ const _handler = async function (req) {
163
156
  }
164
157
 
165
158
  await Promise.all(insertCQNs.map(CQN => dbtx.run(CQN)))
166
- setStatusCodeAndHeader(req._.odataRes, rootWhere, req.target.name.replace(`${this.name}.`, ''), false)
167
- return Object.assign({}, results[0][0], { HasDraftEntity: false, HasActiveEntity: true, IsActiveEntity: false })
159
+ return results[0][0]
168
160
  }
169
161
 
170
- module.exports = cds.service.impl(function () {
171
- const entities = Object.values(this.entities).filter(e => e._isDraftEnabled)
172
-
173
- for (const entity of entities) {
174
- this.on('EDIT', entity, _handler)
175
- }
162
+ module.exports = cds.service.impl(function (srv, entity) {
163
+ srv.on('EDIT', entity, _handler)
176
164
  })
@@ -0,0 +1,31 @@
1
+ const cds = require('../../cds')
2
+
3
+ exports.impl = cds.service.impl(function () {
4
+ const entities = Object.values(this.entities).filter(entity => entity._isDraftEnabled)
5
+ if (entities.length === 0) return
6
+
7
+ for (const each of entities) {
8
+ _before(this, each)
9
+ _new(this, each)
10
+ _patch(this, each)
11
+ _cancel(this, each)
12
+ _edit(this, each)
13
+ _prepare(this, each)
14
+ _activate(this, each)
15
+ _delete(this, each)
16
+ }
17
+
18
+ _readOverDraft(this) // registers an on READ * handler
19
+ for (const each of entities) _read(this, each) // have to go last
20
+ })
21
+
22
+ const _before = require('../../fiori/generic/before')
23
+ const _new = require('../../fiori/generic/new')
24
+ const _patch = require('../../fiori/generic/patch')
25
+ const _cancel = require('../../fiori/generic/cancel')
26
+ const _edit = require('../../fiori/generic/edit')
27
+ const _prepare = require('../../fiori/generic/prepare')
28
+ const _activate = require('../../fiori/generic/activate')
29
+ const _readOverDraft = require('../../fiori/generic/readOverDraft')
30
+ const _read = require('../../fiori/generic/read')
31
+ const _delete = require('../../fiori/generic/delete')
@@ -4,7 +4,7 @@ const { INSERT, SELECT, UPDATE } = cds.ql
4
4
  const onDraftActivate = require('./activate')._handler
5
5
  const { isNavigationToMany } = require('../utils/req')
6
6
  const { getKeysCondition } = require('../utils/where')
7
- const { removeDraftUUIDIfNecessary, ensureDraftsSuffix } = require('../utils/handler')
7
+ const { ensureDraftsSuffix } = require('../utils/handler')
8
8
  const { DRAFT_COLUMNS_MAP } = require('../../common/constants/draft')
9
9
 
10
10
  const _getUpdateDraftAdminCQN = ({ user, timestamp }, draftUUID) => {
@@ -74,30 +74,14 @@ const _handler = async function (req, next) {
74
74
  : _getInsertDraftAdminCQN(req, req.data.DraftAdministrativeData_DraftUUID)
75
75
  const insertDataCQN = _getInsertDataCQN(req, req.data.DraftAdministrativeData_DraftUUID)
76
76
 
77
- // read data as on db and return
78
- const columns = Object.keys(req.target.elements)
79
- .map(e => req.target.elements[e])
80
- .filter(e => !e.isAssociation)
81
- .map(e => e.name)
82
- const readInsertDataCQN = SELECT.from(insertDataCQN.INSERT.into).columns(columns)
83
- readInsertDataCQN.where(getKeysCondition(req.target, req.data))
84
-
85
77
  const dbtx = cds.tx(req)
86
78
 
87
79
  await Promise.all([dbtx.run(adminDataCQN), dbtx.run(insertDataCQN)])
88
80
 
89
- const result = await dbtx.run(readInsertDataCQN)
90
- if (result.length === 0) {
91
- req.reject(404)
92
- }
93
-
94
- removeDraftUUIDIfNecessary(req)(result[0])
95
-
96
- return result[0]
81
+ req._.readAfterWrite = true
82
+ return { ...req.data, IsActiveEntity: false }
97
83
  }
98
84
 
99
- module.exports = cds.service.impl(function () {
100
- for (const entity of Object.values(this.entities).filter(e => e._isDraftEnabled)) {
101
- this.on('NEW', entity, _handler)
102
- }
85
+ module.exports = cds.service.impl(function (srv, entity) {
86
+ srv.on('NEW', entity, _handler)
103
87
  })
@@ -12,7 +12,7 @@ const { getKeysCondition } = require('../utils/where')
12
12
  const { getColumns } = require('../../cds-services/services/utils/columns')
13
13
  const { DRAFT_COLUMNS_CQN } = require('../../common/constants/draft')
14
14
 
15
- const _getSelectCQN = (model, { data, target: { name } }, keysCondition, checkUser = true) => {
15
+ const _getSelectCQN = (model, { target: { name } }, keysCondition, checkUser = true) => {
16
16
  const activeName = ensureNoDraftsSuffix(name)
17
17
  const draftName = ensureDraftsSuffix(name)
18
18
 
@@ -29,7 +29,7 @@ const _getSelectCQN = (model, { data, target: { name } }, keysCondition, checkUs
29
29
  }
30
30
 
31
31
  // REVISIT: support navigation to one
32
- return SELECT.from(draftName)
32
+ return SELECT.one(draftName)
33
33
  .columns(columns)
34
34
  .join('DRAFT.DraftAdministrativeData')
35
35
  .on([
@@ -64,32 +64,27 @@ const _getUpdateDraftCQN = ({ query, target: { name } }, keysCondition) => {
64
64
  * @param req
65
65
  */
66
66
  const _handler = async function (req) {
67
- if (req.data.IsActiveEntity === 'true') req.reject(400, 'Patch can only be applied to a draft entity')
67
+ if (req.data.IsActiveEntity === true) req.reject(400, 'Patch can only be applied to a draft entity')
68
68
 
69
69
  const keysCondition = getKeysCondition(req.target, req.data)
70
70
  const dbtx = cds.tx(req)
71
71
  let result = await dbtx.run(_getSelectCQN(this.model, req, keysCondition))
72
72
 
73
73
  // Potential timeout scenario supported
74
- if (result[0].draftAdmin_inProcessByUser && result[0].draftAdmin_inProcessByUser !== req.user.id) {
74
+ if (result.draftAdmin_inProcessByUser && result.draftAdmin_inProcessByUser !== req.user.id) {
75
75
  // REVISIT: security log?
76
76
  req.reject(403)
77
77
  }
78
78
 
79
79
  const updateDraftCQN = _getUpdateDraftCQN(req, keysCondition)
80
- const updateDraftAdminCQN = getUpdateDraftAdminCQN(req, result[0].DraftAdministrativeData_DraftUUID)
80
+ const updateDraftAdminCQN = getUpdateDraftAdminCQN(req, result.DraftAdministrativeData_DraftUUID)
81
81
 
82
82
  await Promise.all([dbtx.run(updateDraftCQN), dbtx.run(updateDraftAdminCQN)])
83
- result = await dbtx.run(_getSelectCQN(this.model, req, keysCondition, false))
84
- if (result.length === 0) req.reject(404)
85
- removeDraftUUIDIfNecessary(req)(result[0])
86
- return result[0]
87
- }
83
+ req._.readAfterWrite = true
88
84
 
89
- module.exports = cds.service.impl(function () {
90
- const entities = Object.values(this.entities).filter(e => e._isDraftEnabled)
85
+ return { ...req.data, IsActiveEntity: false }
86
+ }
91
87
 
92
- for (const entity of entities) {
93
- this.on('PATCH', entity, _handler)
94
- }
88
+ module.exports = cds.service.impl(function (srv, entity) {
89
+ srv.on('PATCH', entity, _handler)
95
90
  })
@@ -5,8 +5,6 @@ const { isActiveEntityRequested } = require('../utils/where')
5
5
  const { ensureDraftsSuffix, ensureNoDraftsSuffix } = require('../utils/handler')
6
6
  const { getColumns } = require('../../cds-services/services/utils/columns')
7
7
 
8
- const { DRAFT_COLUMNS_CQN } = require('../../common/constants/draft')
9
-
10
8
  /**
11
9
  * Generic Handler for PreparationAction requests.
12
10
  * In case of success it returns the prepared draft entry.
@@ -19,15 +17,14 @@ const _handler = async function (req) {
19
17
  }
20
18
 
21
19
  const target = ensureDraftsSuffix(req.target.name)
22
- const columns = [
23
- ...getColumns(this.model.definitions[ensureNoDraftsSuffix(req.target.name)], {
24
- removeIgnore: true,
25
- filterVirtual: true
26
- }).map(obj => obj.name),
27
- ...DRAFT_COLUMNS_CQN.filter(column => column.ref[0] !== 'DraftAdministrativeData_DraftUUID')
28
- ]
20
+ const columns = getColumns(this.model.definitions[ensureNoDraftsSuffix(req.target.name)], {
21
+ keysOnly: true,
22
+ removeIgnore: true,
23
+ filterVirtual: true,
24
+ onlyNames: true
25
+ })
29
26
  columns.push({ ref: ['DRAFT.DraftAdministrativeData', 'inProcessByUser'], as: 'draftAdmin_inProcessByUser' })
30
- const select = SELECT.from(target)
27
+ const select = SELECT.one(target)
31
28
  .columns(columns)
32
29
  .join('DRAFT.DraftAdministrativeData')
33
30
  .on([
@@ -36,22 +33,16 @@ const _handler = async function (req) {
36
33
  { ref: ['DRAFT.DraftAdministrativeData', 'DraftUUID'] }
37
34
  ])
38
35
  .where(req.query.SELECT.from.ref[0].where)
39
-
40
36
  const result = await cds.tx(req).run(select)
41
-
42
- if (result.length === 0) req.reject(404)
43
-
44
- if (result[0].draftAdmin_inProcessByUser !== req.user.id) {
37
+ if (!result) req.reject(404)
38
+ if (result.draftAdmin_inProcessByUser !== req.user.id) {
45
39
  // REVISIT: security log?
46
40
  req.reject(403, 'DRAFT_LOCKED_BY_ANOTHER_USER')
47
41
  }
48
- delete result[0].draftAdmin_inProcessByUser
49
-
50
- return result[0]
42
+ delete result.draftAdmin_inProcessByUser
43
+ return result
51
44
  }
52
45
 
53
- module.exports = cds.service.impl(function () {
54
- for (const entity of Object.values(this.entities).filter(e => e._isDraftEnabled)) {
55
- this.on('draftPrepare', entity, _handler)
56
- }
46
+ module.exports = cds.service.impl(function (srv, entity) {
47
+ srv.on('draftPrepare', entity, _handler)
57
48
  })