@sap/cds 5.9.6 → 6.0.1

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 +266 -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 +90 -53
  25. package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
  26. package/bin/build/provider/mtx-sidecar/index.js +80 -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 +19 -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 +9 -10
  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 +56 -21
  37. package/bin/utils/log.js +13 -30
  38. package/bin/version.js +5 -4
  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 +11 -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 +70 -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 +23 -20
  86. package/lib/serve/index.js +51 -54
  87. package/lib/utils/axios.js +8 -12
  88. package/lib/utils/index.js +3 -3
  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 +128 -42
  106. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +6 -3
  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 +10 -45
  109. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +5 -9
  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 +1 -1
  114. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +15 -21
  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 +100 -91
  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 +77 -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 +16 -18
  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 +15 -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 +11 -4
  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 +6 -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 +3 -7
  232. package/libx/_runtime/fiori/generic/index.js +31 -0
  233. package/libx/_runtime/fiori/generic/new.js +2 -4
  234. package/libx/_runtime/fiori/generic/patch.js +4 -8
  235. package/libx/_runtime/fiori/generic/prepare.js +2 -4
  236. package/libx/_runtime/fiori/generic/read.js +137 -162
  237. package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
  238. package/libx/_runtime/fiori/utils/handler.js +10 -5
  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 +11 -2
  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 +2 -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 +84 -46
  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 +261 -157
  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
@@ -1,70 +0,0 @@
1
- const { STRING_MATCH_OPERATOR } = require('../../../constants/adapter')
2
- const { GQL_TO_CDS_QL_OPERATOR, GQL_TO_CDS_STRING_MATCH_OPERATOR } = require('../../../constants/cds')
3
- const { isListValue, isObjectValue } = require('../utils')
4
-
5
- const stringMatchOperatorToLikeString = (operator, string) => {
6
- switch (operator) {
7
- case STRING_MATCH_OPERATOR.STARTSWITH:
8
- return `${string}%`
9
- case STRING_MATCH_OPERATOR.ENDSWITH:
10
- return `%${string}`
11
- case STRING_MATCH_OPERATOR.CONTAINS:
12
- return `%${string}%`
13
- }
14
- }
15
-
16
- const arrayInsertBetweenFlat = (array, element) => {
17
- return [...array].flatMap((e, index) => (index < array.length - 1 ? [e, element] : [e])).flat()
18
- }
19
-
20
- const joinedXprFrom_xprs = (_xprs, operator) => {
21
- return { xpr: arrayInsertBetweenFlat(_xprs, operator) }
22
- }
23
-
24
- const gqlOperatorToCdsOperator = gqlOperator =>
25
- GQL_TO_CDS_QL_OPERATOR[gqlOperator] || GQL_TO_CDS_STRING_MATCH_OPERATOR[gqlOperator]
26
-
27
- const gqlValueToCdsValue = (cdsOperator, gqlOperator, gqlValue) =>
28
- cdsOperator === 'like' ? stringMatchOperatorToLikeString(gqlOperator, gqlValue) : gqlValue
29
-
30
- const objectFieldTo_xpr = (objectField, columnName) => {
31
- const gqlOperator = objectField.name.value
32
- const cdsOperator = gqlOperatorToCdsOperator(gqlOperator)
33
- const gqlValue = objectField.value.value
34
- const cdsValue = gqlValueToCdsValue(cdsOperator, gqlOperator, gqlValue)
35
-
36
- return [{ ref: [columnName] }, cdsOperator, { val: cdsValue }]
37
- }
38
-
39
- const parseObjectField = (objectField, columnName) => {
40
- const value = objectField.value
41
- const name = objectField.name.value
42
- if (isListValue(value)) {
43
- return parseListValue(value, name)
44
- } else if (isObjectValue(value)) {
45
- return parseObjectValue(value, name)
46
- } else {
47
- return objectFieldTo_xpr(objectField, columnName)
48
- }
49
- }
50
-
51
- const parseObjectValue = (objectValue, columnName) => {
52
- const _xprs = objectValue.fields.map(field => parseObjectField(field, columnName))
53
- return _xprs.length === 1 ? _xprs[0] : joinedXprFrom_xprs(_xprs, 'and')
54
- }
55
-
56
- const parseListValue = (listValue, columnName) => {
57
- const _xprs = listValue.values.map(value => parseObjectValue(value, columnName))
58
- return _xprs.length === 1 ? _xprs[0] : joinedXprFrom_xprs(_xprs, 'or')
59
- }
60
-
61
- const astToWhere = filterArg => {
62
- const value = filterArg.value
63
- if (isListValue(value)) {
64
- return parseListValue(value)
65
- } else if (isObjectValue(value)) {
66
- return parseObjectValue(value)
67
- }
68
- }
69
-
70
- module.exports = astToWhere
@@ -1,8 +0,0 @@
1
- const { AST_NODE_KIND } = require('../../../constants/graphql')
2
-
3
- const isFragmentSpread = value => value.kind === AST_NODE_KIND.FragmentSpread
4
- const isListValue = value => value.kind === AST_NODE_KIND.ListValue
5
- const isObjectValue = value => value.kind === AST_NODE_KIND.ObjectValue
6
- const isVariable = value => value.kind === AST_NODE_KIND.Variable
7
-
8
- module.exports = { isFragmentSpread, isListValue, isObjectValue, isVariable }
@@ -1,13 +0,0 @@
1
- const cds = require('../../_runtime/cds')
2
- const LOG = cds.log('graphql')
3
-
4
- const { cdsName } = require('../utils')
5
- const { executeRead } = require('./crud')
6
-
7
- module.exports = async (service, gqlName, field) => {
8
- const entityFQN = `${service.name}.${cdsName(gqlName)}`
9
-
10
- LOG.log(`query on ${entityFQN}`)
11
-
12
- return await executeRead(service, entityFQN, field)
13
- }
@@ -1,34 +0,0 @@
1
- const { gqlName } = require('../utils')
2
- const resolveQuery = require('./query')
3
- const resolveMutation = require('./mutation')
4
- const { enrichAST } = require('./parse/ast')
5
-
6
- const wrapResolver = (service, resolver) => (root, args, context, info) => {
7
- const response = {}
8
-
9
- const enrichedFieldNodes = enrichAST(info)
10
-
11
- for (const fieldNode of enrichedFieldNodes) {
12
- for (const field of fieldNode.selectionSet.selections) {
13
- const gqlName = field.name.value
14
- const responseKey = field.alias ? field.alias.value : gqlName
15
-
16
- response[responseKey] = resolver(service, gqlName, field)
17
- }
18
- }
19
-
20
- return response
21
- }
22
-
23
- module.exports = services => {
24
- const Query = {}
25
- const Mutation = {}
26
-
27
- for (const service of services) {
28
- const gqlServiceName = gqlName(service.name)
29
- Query[gqlServiceName] = wrapResolver(service, resolveQuery)
30
- Mutation[gqlServiceName] = wrapResolver(service, resolveMutation)
31
- }
32
-
33
- return { Query, Mutation }
34
- }
@@ -1,18 +0,0 @@
1
- const { typeDefMapToMutationStringArray } = require('./mutation')
2
- const { typeDefMapToQueryStringArray } = require('./query')
3
- const { servicesToTypeDefMap } = require('./typeDefMap')
4
-
5
- const typeDefMapToSchemaString = typeDefs => {
6
- let schema = []
7
-
8
- schema.push(...typeDefMapToQueryStringArray(typeDefs))
9
-
10
- schema.push(...typeDefMapToMutationStringArray(typeDefs))
11
-
12
- return schema.join('\n')
13
- }
14
-
15
- module.exports = services => {
16
- const typeDefMap = servicesToTypeDefMap(services)
17
- return typeDefMapToSchemaString(typeDefMap)
18
- }
@@ -1,5 +0,0 @@
1
- const generate = require('./generate')
2
-
3
- module.exports = {
4
- generate
5
- }
@@ -1,76 +0,0 @@
1
- const { ARGUMENT, MUTATION_PREFIX, INPUT_OBJECT_SUFFIX } = require('../constants/adapter')
2
- const { GQL_ROOT, GQL_KEYWORDS, SCALAR_TYPES } = require('../constants/graphql')
3
- const { generateSchemaObject, typeToArgumentType, isTypeScalar, appendSuffixToType } = require('./utils')
4
-
5
- const typeDefMapToMutationStringArray = typeDefs => {
6
- let schema = []
7
-
8
- // Create root mutation (containing services)
9
- schema.push(
10
- ...generateSchemaObject(
11
- GQL_KEYWORDS.TYPE,
12
- GQL_ROOT.MUTATION,
13
- Object.keys(typeDefs).reduce((fields, serviceName) => {
14
- fields[serviceName] = `${serviceName}_${INPUT_OBJECT_SUFFIX.INPUT}`
15
- return fields
16
- }, {})
17
- )
18
- )
19
-
20
- // Create types for mutations from services (each containing entities)
21
- for (const [serviceName, entities] of Object.entries(typeDefs)) {
22
- const fields = {}
23
- for (const entityName of Object.keys(entities)) {
24
- const entityNameWithoutServicePrefix = entityName.replace(`${serviceName}_`, '')
25
-
26
- const createMutationName = `${MUTATION_PREFIX.CREATE}_${entityNameWithoutServicePrefix}`
27
- const createMutationArgs = `(${ARGUMENT.INPUT}: [${entityName}_${INPUT_OBJECT_SUFFIX.CREATE}]!)`
28
- fields[`${createMutationName}${createMutationArgs}`] = `[${entityName}]`
29
-
30
- const updateMutationName = `${MUTATION_PREFIX.UPDATE}_${entityNameWithoutServicePrefix}`
31
- const updateMutationArgs = `(${ARGUMENT.FILTER}: ${typeToArgumentType(entityName, ARGUMENT.FILTER)}, ${
32
- ARGUMENT.INPUT
33
- }: ${entityName}_${INPUT_OBJECT_SUFFIX.UPDATE}!)`
34
- fields[`${updateMutationName}${updateMutationArgs}`] = `[${entityName}]`
35
-
36
- const deleteMutationName = `${MUTATION_PREFIX.DELETE}_${entityNameWithoutServicePrefix}`
37
- const deleteMutationArgs = `(${ARGUMENT.FILTER}: ${typeToArgumentType(entityName, ARGUMENT.FILTER)})`
38
- fields[`${deleteMutationName}${deleteMutationArgs}`] = SCALAR_TYPES.INT
39
- }
40
- schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, `${serviceName}_${INPUT_OBJECT_SUFFIX.INPUT}`, fields))
41
- }
42
-
43
- // Create input types for create mutations from entities (each containing elements)
44
- for (const entities of Object.values(typeDefs)) {
45
- for (const [entityName, elements] of Object.entries(entities)) {
46
- const fields = {}
47
- for (const [elementName, elementType] of Object.entries(elements)) {
48
- if (isTypeScalar(elementType)) {
49
- fields[elementName] = elementType
50
- } else {
51
- fields[elementName] = appendSuffixToType(elementType, INPUT_OBJECT_SUFFIX.CREATE)
52
- }
53
- }
54
- schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${INPUT_OBJECT_SUFFIX.CREATE}`, fields))
55
- }
56
- }
57
-
58
- // Create input types for update mutations from entities (each containing elements)
59
- for (const entities of Object.values(typeDefs)) {
60
- for (const [entityName, elements] of Object.entries(entities)) {
61
- const fields = {}
62
- for (const [elementName, elementType] of Object.entries(elements)) {
63
- if (isTypeScalar(elementType)) {
64
- fields[elementName] = elementType
65
- } else {
66
- fields[elementName] = appendSuffixToType(elementType, INPUT_OBJECT_SUFFIX.UPDATE)
67
- }
68
- }
69
- schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${INPUT_OBJECT_SUFFIX.UPDATE}`, fields))
70
- }
71
- }
72
-
73
- return schema
74
- }
75
-
76
- module.exports = { typeDefMapToMutationStringArray }
@@ -1,108 +0,0 @@
1
- const { ARGUMENT, HELPER_TYPES, EQUALITY_OPERATOR, STRING_MATCH_OPERATOR } = require('../constants/adapter')
2
- const { GQL_ROOT, GQL_KEYWORDS, SCALAR_TYPES } = require('../constants/graphql')
3
- const {
4
- generateSchemaObject,
5
- typeToArgumentType,
6
- generateArgumentsForType,
7
- isTypeScalar,
8
- typeWithoutListBrackets
9
- } = require('./utils')
10
-
11
- const generateScalarFilterTypes = () => Object.values(SCALAR_TYPES).flatMap(scalarType => fullFilter(scalarType))
12
-
13
- const fullFilter = type => {
14
- const operations = Object.values(EQUALITY_OPERATOR)
15
- if (type === SCALAR_TYPES.STRING) {
16
- operations.push(...Object.values(STRING_MATCH_OPERATOR))
17
- }
18
- const entries = operations.reduce((acc, operation) => {
19
- acc[operation] = type
20
- return acc
21
- }, {})
22
- return generateSchemaObject(GQL_KEYWORDS.INPUT, `${type}_${ARGUMENT.FILTER}`, entries)
23
- }
24
-
25
- const typeDefMapToQueryStringArray = typeDefs => {
26
- let schema = []
27
-
28
- // Create root query (containing services)
29
- schema.push(
30
- ...generateSchemaObject(
31
- GQL_KEYWORDS.TYPE,
32
- GQL_ROOT.QUERY,
33
- Object.keys(typeDefs).reduce((fields, serviceName) => {
34
- fields[serviceName] = serviceName
35
- return fields
36
- }, {})
37
- )
38
- )
39
-
40
- // Create types from services (each containing entities)
41
- for (const [serviceName, entities] of Object.entries(typeDefs)) {
42
- const fields = {}
43
- for (const entityName of Object.keys(entities)) {
44
- const entityNameWithoutServicePrefix = entityName.replace(`${serviceName}_`, '')
45
- const argsString = generateArgumentsForType(entityName, [
46
- ARGUMENT.FILTER,
47
- ARGUMENT.ORDER_BY,
48
- ARGUMENT.TOP,
49
- ARGUMENT.SKIP
50
- ])
51
- fields[`${entityNameWithoutServicePrefix}${argsString}`] = `[${entityName}]`
52
- }
53
- schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, serviceName, fields))
54
- }
55
-
56
- // Create types from entities (each containing elements)
57
- for (const entities of Object.values(typeDefs)) {
58
- for (const [entityName, elements] of Object.entries(entities)) {
59
- const fields = {}
60
- for (const [elementName, elementType] of Object.entries(elements)) {
61
- const argsString = generateArgumentsForType(elementType, [
62
- ARGUMENT.FILTER,
63
- ARGUMENT.ORDER_BY,
64
- ARGUMENT.TOP,
65
- ARGUMENT.SKIP
66
- ])
67
- fields[`${elementName}${argsString}`] = elementType
68
- }
69
- schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, entityName, fields))
70
- }
71
- }
72
-
73
- // Create filter input types for scalars
74
- schema.push(...generateScalarFilterTypes())
75
-
76
- // Create filter input types for entity types
77
- for (const entities of Object.values(typeDefs)) {
78
- for (const [entityName, elements] of Object.entries(entities)) {
79
- const fields = {}
80
- for (const [elementName, elementType] of Object.entries(elements)) {
81
- if (isTypeScalar(typeWithoutListBrackets(elementType))) {
82
- fields[elementName] = typeToArgumentType(elementType, ARGUMENT.FILTER)
83
- }
84
- }
85
- if (Object.keys(fields).length > 0) {
86
- schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${ARGUMENT.FILTER}`, fields))
87
- }
88
- }
89
- }
90
-
91
- // Create sort direction enum types for order by
92
- schema.push(...generateSchemaObject(GQL_KEYWORDS.ENUM, HELPER_TYPES.SORT_DIRECTION, ['asc', 'desc']))
93
-
94
- // Create orderBy input types for entity types
95
- for (const entities of Object.values(typeDefs)) {
96
- for (const [entityName, elements] of Object.entries(entities)) {
97
- const fields = {}
98
- for (const [elementName, elementType] of Object.entries(elements)) {
99
- fields[elementName] = typeToArgumentType(elementType, ARGUMENT.ORDER_BY)
100
- }
101
- schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${ARGUMENT.ORDER_BY}`, fields))
102
- }
103
- }
104
-
105
- return schema
106
- }
107
-
108
- module.exports = { typeDefMapToQueryStringArray }
@@ -1,45 +0,0 @@
1
- const { CDS_TO_GRAPHQL_TYPES } = require('../constants/adapter')
2
- const { gqlName } = require('../utils')
3
-
4
- const servicesToTypeDefMap = services => {
5
- const typeDefs = {}
6
-
7
- // Create nested map of services, their entities, and their respective elements
8
- for (const service of services) {
9
- const serviceDefs = (typeDefs[gqlName(service.name)] = {})
10
-
11
- const serviceNamePrefix = `${service.name}.`
12
- const entitiesKV = Object.entries(service.model.definitions).filter(
13
- // eslint-disable-next-line no-unused-vars
14
- ([k, _]) => k.startsWith(serviceNamePrefix) && service.model.definitions[k].kind === 'entity'
15
- )
16
-
17
- // eslint-disable-next-line no-unused-vars
18
- for (const [_, entity] of entitiesKV) {
19
- const def = (serviceDefs[gqlName(entity.name)] = {})
20
- for (const ele of Object.values(entity.elements)) {
21
- if (ele.name.startsWith('up_') || ele.name === 'localized' || ele.name === 'texts') {
22
- continue
23
- } else if (ele.isAssociation || ele.isComposition) {
24
- if (!ele.target.startsWith(serviceNamePrefix)) {
25
- // TODO entities in other namespaces
26
- continue
27
- }
28
- def[ele.name] = ele.is2one ? gqlName(ele.target) : `[${gqlName(ele.target)}]`
29
- } else if (ele.elements) {
30
- // TODO structured types
31
- continue
32
- } else {
33
- if (CDS_TO_GRAPHQL_TYPES[ele._type]) {
34
- def[ele.name] = CDS_TO_GRAPHQL_TYPES[ele._type]
35
- }
36
- // TODO aspects
37
- }
38
- }
39
- }
40
- }
41
-
42
- return typeDefs
43
- }
44
-
45
- module.exports = { servicesToTypeDefMap }
@@ -1,54 +0,0 @@
1
- const { ARGUMENT, HELPER_TYPES } = require('../../constants/adapter')
2
- const { GQL_LIST_REGEX, SCALAR_TYPES } = require('../../constants/graphql')
3
-
4
- const generateSchemaObject = (type, name, fields) => {
5
- const schema = [`${type} ${name} {`]
6
- if (Array.isArray(fields)) {
7
- schema.push(...fields.map(e => ` ${e}`))
8
- } else {
9
- schema.push(...Object.entries(fields).map(([k, v]) => ` ${k}: ${v}`))
10
- }
11
- schema.push('}', '')
12
- return schema
13
- }
14
-
15
- const generateArgumentsForType = (type, args) =>
16
- `(${args.map(action => `${action}: ${typeToArgumentType(type, action)}`).join(', ')})`
17
-
18
- const typeToArgumentType = (type, action) => {
19
- switch (action) {
20
- case ARGUMENT.FILTER:
21
- return appendSuffixToType(type, ARGUMENT.FILTER, true)
22
- case ARGUMENT.ORDER_BY:
23
- return isTypeScalar(type) ? HELPER_TYPES.SORT_DIRECTION : appendSuffixToType(type, ARGUMENT.ORDER_BY, true)
24
- case ARGUMENT.TOP:
25
- return SCALAR_TYPES.INT
26
- case ARGUMENT.SKIP:
27
- return SCALAR_TYPES.INT
28
- }
29
- }
30
-
31
- const isTypeScalar = type => Object.values(SCALAR_TYPES).includes(type)
32
-
33
- const isTypeList = type => type.match(GQL_LIST_REGEX)
34
-
35
- // Type without list brackets even if type isn't a list
36
- const typeWithoutListBrackets = type => type.replace(GQL_LIST_REGEX, '$1')
37
-
38
- const appendSuffixToType = (type, suffix, forceToList) => {
39
- if (isTypeList(type) || forceToList) {
40
- return `[${typeWithoutListBrackets(type)}_${suffix}]`
41
- } else {
42
- return `${type}_${suffix}`
43
- }
44
- }
45
-
46
- module.exports = {
47
- generateSchemaObject,
48
- generateArgumentsForType,
49
- typeToArgumentType,
50
- isTypeScalar,
51
- isTypeList,
52
- typeWithoutListBrackets,
53
- appendSuffixToType
54
- }
@@ -1,12 +0,0 @@
1
- const cdsName = gqlName => {
2
- return gqlName.replace(/_/g, '.')
3
- }
4
-
5
- const gqlName = cdsName => {
6
- return cdsName.replace(/\./g, '_')
7
- }
8
-
9
- module.exports = {
10
- cdsName,
11
- gqlName
12
- }
@@ -1,20 +0,0 @@
1
- const { UNAUTHORIZED, FORBIDDEN, getRequiresAsArray } = require('../../_runtime/auth/utils')
2
-
3
- module.exports = (req, res, next) => {
4
- if (!req._srv._requires) req._srv._requires = getRequiresAsArray(req._srv.definition)
5
-
6
- const { _requires: requires } = req._srv
7
-
8
- if (req.path !== '/' && requires.length > 0 && !requires.some(r => req.user.is(r))) {
9
- // > unauthorized or forbidden?
10
- if (req.user._is_anonymous) {
11
- if (req.user._challenges) res.set('WWW-Authenticate', req.user._challenges.join(';'))
12
- // REVISIT: security log in else case?
13
- throw UNAUTHORIZED
14
- }
15
- // REVISIT: security log?
16
- throw FORBIDDEN
17
- }
18
-
19
- next()
20
- }
@@ -1,19 +0,0 @@
1
- const PPP = { POST: 1, PUT: 1, PATCH: 1 }
2
- const UPDATE = { PUT: 1, PATCH: 1 }
3
-
4
- module.exports = (req, res, next) => {
5
- if (PPP[req.method]) {
6
- const contentType = req.headers['content-type'] && req.headers['content-type'].split(';')
7
- if (
8
- contentType &&
9
- (!contentType[0].match(/^application\/json$/) || (typeof contentType[1] === 'string' && !contentType[1]))
10
- ) {
11
- throw { statusCode: 415, code: '415', message: 'INVALID_CONTENT_TYPE_ONLY_JSON' }
12
- }
13
- if (UPDATE[req.method] && Array.isArray(req.body)) {
14
- throw { statusCode: 400, code: '400', message: `INVALID_${req.method}` }
15
- }
16
- }
17
-
18
- next()
19
- }
package/srv/flex.cds DELETED
@@ -1,21 +0,0 @@
1
- namespace cds_r; //> cds system tables
2
-
3
- type JSON: String;
4
-
5
- @protocol: 'rest'
6
- service ExtensibilityService @(path:'/-/cds/extensibility') {
7
- action addExtension(extensions : array of String); // TODO: change to array of CSN extensions
8
- action activate(tenant: String);
9
- action activateProject(tenant: String, extension: array of { filename: String; model: JSON }, undeployExtension: Boolean);
10
- }
11
-
12
- entity Extensions {
13
- key ID : UUID;
14
- csn : String;
15
- activated : Boolean; // <-- status / enum ?
16
- }
17
-
18
- // @open type Extension {
19
- // extend: String;
20
- // elements:{ /* */ }
21
- // }
package/srv/flex.js DELETED
@@ -1 +0,0 @@
1
- module.exports = require('../libx/_runtime/extensibility/uiflex/service')
package/srv/mps.cds DELETED
@@ -1,23 +0,0 @@
1
- namespace cds_r; //> cds system tables
2
-
3
- type TenantID : String;
4
- @open type CSN {};
5
- type XML : String;
6
- type Locale : String;
7
- type TAR : LargeBinary;
8
-
9
- /**
10
- * Used by CAP runtimes to retrieve tenant-specific variants of
11
- * deployed models used to serve requests.
12
- */
13
- @(requires : [
14
- 'mtcallback'
15
- ])
16
- @protocol: 'rest'
17
- service ModelProviderService @(path:'/-/cds/model-provider') {
18
- action isExtended(tenant : TenantID) returns Boolean;
19
- action getCsn(tenant : TenantID, toggles : array of String, flavor: String enum { nodejs; java; }) returns CSN;
20
- action getOdataCsn(tenant : TenantID, toggles : array of String) returns CSN; // REVISIT: Replace by getCsn(..., flavor=node/java)
21
- action getEdmx(tenant : TenantID, toggles : array of String, serviceName : String, locale : Locale, odataFlavor : String) returns XML;
22
- action getResources(flat : Boolean) returns TAR;
23
- }
package/srv/mps.js DELETED
@@ -1 +0,0 @@
1
- module.exports = require('../libx/_runtime/extensibility/mps/service')
package/srv/outbox.js DELETED
File without changes