@sap/cds 5.9.8 → 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 +252 -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 +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 +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 +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 +127 -41
  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 +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 +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 +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 +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,20 +0,0 @@
1
- const _queueName = ({ appName, appID, ownNamespace }) => {
2
- const shrunkAppID = appID.substring(0, 4)
3
- return ownNamespace ? `${ownNamespace}/${appName}/${shrunkAppID}` : `${appName}/${shrunkAppID}`
4
- }
5
-
6
- const queueName = (options, optionsApp = {}) => {
7
- const namespace = options.credentials && options.credentials.namespace
8
- if (options.queue && options.queue.name) {
9
- if (namespace) return options.queue.name.replace(/\$namespace/g, namespace)
10
- return options.queue.name
11
- }
12
- const ownNamespace = namespace
13
- return _queueName({
14
- appName: optionsApp.appName || 'CAP',
15
- appID: optionsApp.appID || '00000000',
16
- ownNamespace
17
- })
18
- }
19
-
20
- module.exports = { queueName }
@@ -1,7 +0,0 @@
1
- import sdkCore from '@sap-cloud-sdk/core'
2
- export interface DestinationOptions extends Omit<sdkCore.DestinationOptions, 'selectionStrategy'> {
3
- /*
4
- * @see https://sap.github.io/cloud-sdk/api/1.50.0/modules/sap_cloud_sdk_core#DestinationSelectionStrategies
5
- */
6
- selectionStrategy?: 'alwaysProvider' | 'alwaysSubscriber' | 'subscriberFirst'
7
- }
@@ -1,33 +0,0 @@
1
- const cds = require('../_runtime/cds')
2
-
3
- const express = require('express')
4
- const { graphqlHTTP } = require('express-graphql')
5
- const { makeExecutableSchema } = require('@graphql-tools/schema')
6
-
7
- const { generate } = require('./schema')
8
- const { fieldResolver, createRootResolvers } = require('./resolvers')
9
-
10
- class GraphQLAdapter extends express.Router {
11
- constructor(services, options) {
12
- super()
13
- const mergedOptions = { ...defaultOptions, ...options }
14
-
15
- const path = mergedOptions.path
16
- delete mergedOptions.path
17
-
18
- const applicationServices = Object.values(services).filter(service => service instanceof cds.ApplicationService)
19
-
20
- const typeDefs = generate(applicationServices)
21
- const resolvers = createRootResolvers(applicationServices)
22
-
23
- const schema = makeExecutableSchema({ typeDefs, resolvers })
24
-
25
- this.use(path, graphqlHTTP({ fieldResolver, schema, ...mergedOptions }))
26
- }
27
- }
28
-
29
- const defaultOptions = {
30
- path: '/graphql'
31
- }
32
-
33
- module.exports = GraphQLAdapter
@@ -1,69 +0,0 @@
1
- const { SCALAR_TYPES } = require('./graphql')
2
-
3
- // TODO own scalar types
4
- const CDS_TO_GRAPHQL_TYPES = {
5
- 'cds.Binary': SCALAR_TYPES.STRING,
6
- 'cds.Boolean': SCALAR_TYPES.BOOLEAN,
7
- 'cds.Date': SCALAR_TYPES.STRING,
8
- 'cds.DateTime': SCALAR_TYPES.STRING,
9
- 'cds.Decimal': SCALAR_TYPES.FLOAT,
10
- 'cds.DecimalFloat': SCALAR_TYPES.FLOAT,
11
- 'cds.Double': SCALAR_TYPES.STRING,
12
- 'cds.Integer': SCALAR_TYPES.INT,
13
- 'cds.Integer64': SCALAR_TYPES.STRING,
14
- 'cds.LargeBinary': SCALAR_TYPES.STRING,
15
- 'cds.LargeString': SCALAR_TYPES.STRING,
16
- 'cds.String': SCALAR_TYPES.STRING,
17
- 'cds.Time': SCALAR_TYPES.STRING,
18
- 'cds.Timestamp': SCALAR_TYPES.STRING,
19
- 'cds.UUID': SCALAR_TYPES.ID
20
- }
21
-
22
- const ARGUMENT = {
23
- INPUT: 'input',
24
- FILTER: 'filter',
25
- ORDER_BY: 'orderBy',
26
- TOP: 'top',
27
- SKIP: 'skip'
28
- }
29
-
30
- const HELPER_TYPES = {
31
- SORT_DIRECTION: 'SortDirection'
32
- }
33
-
34
- const EQUALITY_OPERATOR = {
35
- EQ: 'eq',
36
- NE: 'ne',
37
- GT: 'gt',
38
- GE: 'ge',
39
- LE: 'le',
40
- LT: 'lt'
41
- }
42
-
43
- const STRING_MATCH_OPERATOR = {
44
- STARTSWITH: 'startswith',
45
- ENDSWITH: 'endswith',
46
- CONTAINS: 'contains'
47
- }
48
-
49
- const MUTATION_PREFIX = {
50
- CREATE: 'create',
51
- UPDATE: 'update',
52
- DELETE: 'delete'
53
- }
54
-
55
- const INPUT_OBJECT_SUFFIX = {
56
- INPUT: 'input',
57
- CREATE: 'C',
58
- UPDATE: 'U'
59
- }
60
-
61
- module.exports = {
62
- CDS_TO_GRAPHQL_TYPES,
63
- ARGUMENT,
64
- HELPER_TYPES,
65
- EQUALITY_OPERATOR,
66
- STRING_MATCH_OPERATOR,
67
- MUTATION_PREFIX,
68
- INPUT_OBJECT_SUFFIX
69
- }
@@ -1,18 +0,0 @@
1
- const { EQUALITY_OPERATOR, STRING_MATCH_OPERATOR } = require('./adapter')
2
-
3
- const GQL_TO_CDS_QL_OPERATOR = {
4
- [EQUALITY_OPERATOR.EQ]: '=',
5
- [EQUALITY_OPERATOR.NE]: '<>',
6
- [EQUALITY_OPERATOR.GT]: '>',
7
- [EQUALITY_OPERATOR.GE]: '>=',
8
- [EQUALITY_OPERATOR.LE]: '<=',
9
- [EQUALITY_OPERATOR.LT]: '<'
10
- }
11
-
12
- const GQL_TO_CDS_STRING_MATCH_OPERATOR = {
13
- [STRING_MATCH_OPERATOR.STARTSWITH]: 'like',
14
- [STRING_MATCH_OPERATOR.ENDSWITH]: 'like',
15
- [STRING_MATCH_OPERATOR.CONTAINS]: 'like'
16
- }
17
-
18
- module.exports = { GQL_TO_CDS_QL_OPERATOR, GQL_TO_CDS_STRING_MATCH_OPERATOR }
@@ -1,33 +0,0 @@
1
- const GQL_ROOT = {
2
- QUERY: 'Query',
3
- MUTATION: 'Mutation'
4
- }
5
-
6
- const GQL_KEYWORDS = {
7
- TYPE: 'type',
8
- ENUM: 'enum',
9
- INPUT: 'input'
10
- }
11
-
12
- const SCALAR_TYPES = {
13
- INT: 'Int',
14
- FLOAT: 'Float',
15
- STRING: 'String',
16
- BOOLEAN: 'Boolean',
17
- ID: 'ID'
18
- }
19
-
20
- // String starts with [ and ends with ]
21
- // Capture group captures in between brackets
22
- const GQL_LIST_REGEX = /^\[(.+)\]$/
23
-
24
- const AST_NODE_KIND = {
25
- ListValue: 'ListValue',
26
- ObjectValue: 'ObjectValue',
27
- ObjectField: 'ObjectField',
28
- FragmentSpread: 'FragmentSpread',
29
- Variable: 'Variable',
30
- Name: 'Name'
31
- }
32
-
33
- module.exports = { GQL_ROOT, GQL_KEYWORDS, SCALAR_TYPES, GQL_LIST_REGEX, AST_NODE_KIND }
@@ -1 +0,0 @@
1
- # GraphQL Protocol Adapter
@@ -1,20 +0,0 @@
1
- const cds = require('../../../../lib')
2
-
3
- const { ARGUMENT } = require('../../constants/adapter')
4
- const { getArgumentByName, astToEntries } = require('../parse/ast2cqn')
5
- const { entriesStructureToEntityStructure } = require('./utils')
6
-
7
- module.exports = async (service, entityFQN, selection) => {
8
- let query = service.create(entityFQN)
9
-
10
- const input = getArgumentByName(selection.arguments, ARGUMENT.INPUT)
11
- const entries = entriesStructureToEntityStructure(service, entityFQN, astToEntries(input))
12
- query.entries(entries)
13
-
14
- const result = await service.tx(tx => {
15
- cds.context = tx
16
- return tx.run(query)
17
- })
18
-
19
- return Array.isArray(result) ? result : [result]
20
- }
@@ -1,29 +0,0 @@
1
- const cds = require('../../../../lib')
2
-
3
- const { ARGUMENT } = require('../../constants/adapter')
4
- const { getArgumentByName, astToWhere } = require('../parse/ast2cqn')
5
-
6
- module.exports = async (service, entityFQN, selection) => {
7
- let query = service.delete(entityFQN)
8
-
9
- const filter = getArgumentByName(selection.arguments, ARGUMENT.FILTER)
10
- if (filter) {
11
- query.where(astToWhere(filter))
12
- }
13
-
14
- let result
15
- try {
16
- result = await service.tx(tx => {
17
- cds.context = tx
18
- return tx.run(query)
19
- })
20
- } catch (e) {
21
- if (e.code === 404) {
22
- result = 0
23
- } else {
24
- throw e
25
- }
26
- }
27
-
28
- return result
29
- }
@@ -1,6 +0,0 @@
1
- const executeCreate = require('./create')
2
- const executeRead = require('./read')
3
- const executeUpdate = require('./update')
4
- const executeDelete = require('./delete')
5
-
6
- module.exports = { executeCreate, executeRead, executeUpdate, executeDelete }
@@ -1,30 +0,0 @@
1
- const cds = require('../../../../lib')
2
-
3
- const { ARGUMENT } = require('../../constants/adapter')
4
- const { getArgumentByName, astToColumns, astToWhere, astToOrderBy, astToLimit } = require('../parse/ast2cqn')
5
-
6
- module.exports = async (service, entityFQN, selection) => {
7
- let query = service.read(entityFQN)
8
- query.columns(astToColumns(selection.selectionSet.selections))
9
-
10
- const filter = getArgumentByName(selection.arguments, ARGUMENT.FILTER)
11
- if (filter) {
12
- query.where(astToWhere(filter))
13
- }
14
-
15
- const orderBy = getArgumentByName(selection.arguments, ARGUMENT.ORDER_BY)
16
- if (orderBy) {
17
- query.orderBy(astToOrderBy(orderBy))
18
- }
19
-
20
- const top = getArgumentByName(selection.arguments, ARGUMENT.TOP)
21
- const skip = getArgumentByName(selection.arguments, ARGUMENT.SKIP)
22
- if (top) {
23
- query.limit(astToLimit(top, skip))
24
- }
25
-
26
- return await service.tx(tx => {
27
- cds.context = tx
28
- return tx.run(query)
29
- })
30
- }
@@ -1,42 +0,0 @@
1
- const cds = require('../../../../lib')
2
-
3
- const { ARGUMENT } = require('../../constants/adapter')
4
- const { getArgumentByName, astToColumns, astToWhere, astToEntries } = require('../parse/ast2cqn')
5
- const { entriesStructureToEntityStructure } = require('./utils')
6
-
7
- module.exports = async (service, entityFQN, selection) => {
8
- const filter = getArgumentByName(selection.arguments, ARGUMENT.FILTER)
9
-
10
- const queryBeforeUpdate = service.read(entityFQN)
11
- queryBeforeUpdate.columns(astToColumns(selection.selectionSet.selections))
12
-
13
- if (filter) {
14
- queryBeforeUpdate.where(astToWhere(filter))
15
- }
16
-
17
- const query = service.update(entityFQN)
18
-
19
- if (filter) {
20
- query.where(astToWhere(filter))
21
- }
22
-
23
- const input = getArgumentByName(selection.arguments, ARGUMENT.INPUT)
24
- const entries = entriesStructureToEntityStructure(service, entityFQN, astToEntries(input))
25
- query.with(entries)
26
-
27
- let resultBeforeUpdate
28
- const result = await service.tx(async tx => {
29
- cds.context = tx
30
- // read needs to be done before the update, otherwise the where clause might become invalid (case that properties in where clause are updated by the mutation)
31
- resultBeforeUpdate = await tx.run(queryBeforeUpdate)
32
-
33
- if (resultBeforeUpdate.length === 0) {
34
- return []
35
- }
36
-
37
- return tx.run(query)
38
- })
39
-
40
- // Merge selected fields with updated data
41
- return resultBeforeUpdate.map(original => ({ ...original, ...result }))
42
- }
@@ -1,36 +0,0 @@
1
- const getEntityNameWithoutServicePrefix = (service, entityFQN) => entityFQN.replace(`${service.name}.`, '')
2
-
3
- const getEntityByFQN = (service, entityFQN) => service.entities[getEntityNameWithoutServicePrefix(service, entityFQN)]
4
-
5
- const objectStructureToEntityStructure = (service, entityFQN, entry) => {
6
- const entity = getEntityByFQN(service, entityFQN)
7
- for (const [k, v] of Object.entries(entry)) {
8
- const element = entity.elements[k]
9
- if (element.isComposition || element.isAssociation) {
10
- if (Array.isArray(v)) {
11
- if (element.is2one) {
12
- entry[k] = v[0]
13
- }
14
- } else if (typeof v === 'object') {
15
- if (element.is2many) {
16
- entry[k] = [v]
17
- }
18
- }
19
- entriesStructureToEntityStructure(service, element.target, v)
20
- }
21
- }
22
- return entry
23
- }
24
-
25
- const entriesStructureToEntityStructure = (service, entityFQN, entries) => {
26
- if (Array.isArray(entries)) {
27
- for (const entry of entries) {
28
- objectStructureToEntityStructure(service, entityFQN, entry)
29
- }
30
- } else {
31
- objectStructureToEntityStructure(service, entityFQN, entries)
32
- }
33
- return entries
34
- }
35
-
36
- module.exports = { entriesStructureToEntityStructure }
@@ -1,5 +0,0 @@
1
- // The GraphQL.js defaultFieldResolver does not support returning aliased values that resolve to fields with aliases
2
- module.exports = (source, args, context, info) => {
3
- const responseKey = info.fieldNodes[0].alias ? info.fieldNodes[0].alias.value : info.fieldName
4
- return source[responseKey]
5
- }
@@ -1,7 +0,0 @@
1
- const fieldResolver = require('./field')
2
- const createRootResolvers = require('./root')
3
-
4
- module.exports = {
5
- fieldResolver,
6
- createRootResolvers
7
- }
@@ -1,23 +0,0 @@
1
- const cds = require('../../_runtime/cds')
2
- const LOG = cds.log('graphql')
3
-
4
- const { MUTATION_PREFIX } = require('../constants/adapter')
5
- const { cdsName } = require('../utils')
6
- const { executeCreate, executeUpdate, executeDelete } = require('./crud')
7
-
8
- const GQL_MUTATION_REGEX = new RegExp(`^(${Object.values(MUTATION_PREFIX).join('|')})_(.+)$`)
9
-
10
- const actionToExecuteFunction = {
11
- [MUTATION_PREFIX.CREATE]: executeCreate,
12
- [MUTATION_PREFIX.UPDATE]: executeUpdate,
13
- [MUTATION_PREFIX.DELETE]: executeDelete
14
- }
15
-
16
- module.exports = async (service, gqlName, field) => {
17
- const { 1: mutationAction, 2: gqlNameWithoutAction } = gqlName.match(GQL_MUTATION_REGEX)
18
- const entityFQN = `${service.name}.${cdsName(gqlNameWithoutAction)}`
19
-
20
- LOG.log(`mutation on ${entityFQN}`)
21
-
22
- return await actionToExecuteFunction[mutationAction](service, entityFQN, field)
23
- }
@@ -1,52 +0,0 @@
1
- const { isVariable, isListValue, isObjectValue } = require('../utils')
2
- const fragmentSpreadSelections = require('./fragment')
3
- const substituteVariable = require('./variable')
4
- const removeMetaFieldsFromSelections = require('./meta')
5
-
6
- const traverseObjectValue = (info, objectValue) =>
7
- objectValue.fields.map(field => traverseArgumentOrObjectField(info, field))
8
-
9
- const traverseListValue = (info, listValue) => {
10
- for (let i = 0; i < listValue.values.length; i++) {
11
- const value = listValue.values[i]
12
- if (isVariable(value)) {
13
- listValue.values[i] = substituteVariable(info, value)
14
- } else if (isObjectValue(value)) {
15
- traverseObjectValue(info, value)
16
- }
17
- }
18
- }
19
-
20
- const traverseArgumentOrObjectField = (info, argumentOrObjectField) => {
21
- const value = argumentOrObjectField.value
22
- if (isVariable(value)) {
23
- argumentOrObjectField.value = substituteVariable(info, value)
24
- } else if (isListValue(value)) {
25
- traverseListValue(info, value)
26
- } else if (isObjectValue(value)) {
27
- traverseObjectValue(info, value)
28
- }
29
- }
30
-
31
- const traverseSelectionSet = (info, selectionSet) => {
32
- selectionSet.selections = fragmentSpreadSelections(info, selectionSet.selections)
33
- selectionSet.selections = removeMetaFieldsFromSelections(selectionSet.selections)
34
- selectionSet.selections.map(field => traverseField(info, field))
35
- }
36
-
37
- const traverseField = (info, field) => {
38
- if (field.selectionSet) {
39
- traverseSelectionSet(info, field.selectionSet)
40
- }
41
-
42
- field.arguments.map(arg => traverseArgumentOrObjectField(info, arg))
43
- }
44
-
45
- const traverseFieldNodes = (info, fieldNodes) => fieldNodes.map(fieldNode => traverseField(info, fieldNode))
46
-
47
- module.exports = info => {
48
- // REVISIT: JSON.parse(JSON.stringify(obj)) breaks buffers
49
- const deepClonedFieldNodes = JSON.parse(JSON.stringify(info.fieldNodes))
50
- traverseFieldNodes(info, deepClonedFieldNodes)
51
- return deepClonedFieldNodes
52
- }
@@ -1,11 +0,0 @@
1
- const { isFragmentSpread } = require('../utils')
2
-
3
- const getFragmentDefinitionForFragmentSpread = (info, fragmentSpread) => info.fragments[fragmentSpread.name.value]
4
-
5
- const substituteFragment = (info, fragmentSpread) =>
6
- getFragmentDefinitionForFragmentSpread(info, fragmentSpread).selectionSet.selections
7
-
8
- const fragmentSpreadSelections = (info, selections) =>
9
- selections.flatMap(selection => (isFragmentSpread(selection) ? substituteFragment(info, selection) : [selection]))
10
-
11
- module.exports = fragmentSpreadSelections
@@ -1,39 +0,0 @@
1
- const { AST_NODE_KIND } = require('../../../constants/graphql')
2
-
3
- const valueToGenericScalarValue = value => ({
4
- kind: 'GenericScalarValue',
5
- value
6
- })
7
-
8
- const keyToName = key => ({
9
- kind: AST_NODE_KIND.Name,
10
- value: key
11
- })
12
-
13
- const keyValueToObjectField = (k, v) => ({
14
- kind: AST_NODE_KIND.ObjectField,
15
- name: keyToName(k),
16
- value: variableToValue(v)
17
- })
18
-
19
- const objectToObjectValue = object => ({
20
- kind: AST_NODE_KIND.ObjectValue,
21
- fields: Object.entries(object).map(([k, v]) => keyValueToObjectField(k, v))
22
- })
23
-
24
- const arrayToListValue = array => ({
25
- kind: AST_NODE_KIND.ListValue,
26
- values: array.map(a => objectToObjectValue(a))
27
- })
28
-
29
- const variableToValue = variable => {
30
- if (Array.isArray(variable)) {
31
- return arrayToListValue(variable)
32
- } else if (typeof variable === 'object') {
33
- return objectToObjectValue(variable)
34
- } else {
35
- return valueToGenericScalarValue(variable)
36
- }
37
- }
38
-
39
- module.exports = variableValue => variableToValue(variableValue)
@@ -1,3 +0,0 @@
1
- const enrichAST = require('./enrich')
2
-
3
- module.exports = { enrichAST }
@@ -1,4 +0,0 @@
1
- const removeMetaFieldsFromSelections = selections =>
2
- selections.filter(selection => selection.name.value !== '__typename')
3
-
4
- module.exports = removeMetaFieldsFromSelections
@@ -1,7 +0,0 @@
1
- const objectToAST = require('./fromObject')
2
-
3
- const getVariableValueForVariable = (info, variable) => info.variableValues[variable.name.value]
4
-
5
- const substituteVariable = (info, variable) => objectToAST(getVariableValueForVariable(info, variable))
6
-
7
- module.exports = substituteVariable
@@ -1,44 +0,0 @@
1
- const { getArgumentByName } = require('./utils')
2
- const astToWhere = require('./where')
3
- const astToOrderBy = require('./orderBy')
4
- const astToLimit = require('./limit')
5
- const { ARGUMENT } = require('../../../constants/adapter')
6
-
7
- const astToColumns = selections => {
8
- let columns = []
9
-
10
- for (const selection of selections) {
11
- const column = { ref: [selection.name.value] }
12
- if (selection.alias) {
13
- column.as = selection.alias.value
14
- }
15
-
16
- if (selection.selectionSet && selection.selectionSet.selections) {
17
- const columns = astToColumns(selection.selectionSet.selections)
18
- // columns is empty if only __typename was selected (which was filtered out in the enriched AST)
19
- column.expand = columns.length > 0 ? columns : ['*']
20
- }
21
-
22
- const filter = getArgumentByName(selection.arguments, ARGUMENT.FILTER)
23
- if (filter) {
24
- column.where = astToWhere(filter)
25
- }
26
-
27
- const orderBy = getArgumentByName(selection.arguments, ARGUMENT.ORDER_BY)
28
- if (orderBy) {
29
- column.orderBy = astToOrderBy(orderBy)
30
- }
31
-
32
- const top = getArgumentByName(selection.arguments, ARGUMENT.TOP)
33
- const skip = getArgumentByName(selection.arguments, ARGUMENT.SKIP)
34
- if (top) {
35
- column.limit = astToLimit(top, skip)
36
- }
37
-
38
- columns.push(column)
39
- }
40
-
41
- return columns
42
- }
43
-
44
- module.exports = astToColumns
@@ -1,31 +0,0 @@
1
- const { isListValue, isObjectValue } = require('../utils')
2
-
3
- const parseObjectField = objectField => {
4
- const value = objectField.value
5
- if (isListValue(value)) {
6
- return parseListValue(value)
7
- } else if (isObjectValue(value)) {
8
- return parseObjectValue(value)
9
- } else {
10
- return value.value
11
- }
12
- }
13
-
14
- const parseObjectValue = objectValue =>
15
- objectValue.fields.reduce((entry, objectField) => {
16
- entry[objectField.name.value] = parseObjectField(objectField)
17
- return entry
18
- }, {})
19
-
20
- const parseListValue = listValue => listValue.values.map(value => parseObjectValue(value))
21
-
22
- const astToEntries = inputArg => {
23
- const value = inputArg.value
24
- if (isListValue(value)) {
25
- return parseListValue(value)
26
- } else if (isObjectValue(value)) {
27
- return parseObjectValue(value)
28
- }
29
- }
30
-
31
- module.exports = astToEntries
@@ -1,8 +0,0 @@
1
- const { getArgumentByName } = require('./utils')
2
- const astToColumns = require('./columns')
3
- const astToWhere = require('./where')
4
- const astToOrderBy = require('./orderBy')
5
- const astToLimit = require('./limit')
6
- const astToEntries = require('./entries')
7
-
8
- module.exports = { getArgumentByName, astToColumns, astToWhere, astToOrderBy, astToLimit, astToEntries }
@@ -1,6 +0,0 @@
1
- const astToLimit = (topArg, skipArg) => ({
2
- rows: { val: topArg.value.value },
3
- offset: { val: (skipArg && skipArg.value.value) || 0 }
4
- })
5
-
6
- module.exports = astToLimit
@@ -1,24 +0,0 @@
1
- const { isListValue, isObjectValue } = require('../utils')
2
-
3
- const objectFieldToOrderBy = objectField => ({
4
- ref: [objectField.name.value],
5
- sort: objectField.value.value
6
- })
7
-
8
- const parseObjectValue = objectValue => {
9
- // OrderBy objects are supposed to contain only a single field
10
- return objectFieldToOrderBy(objectValue.fields[0])
11
- }
12
-
13
- const parseListValue = listValue => listValue.values.map(value => parseObjectValue(value))
14
-
15
- const astToOrderBy = orderByArg => {
16
- const value = orderByArg.value
17
- if (isListValue(value)) {
18
- return parseListValue(value)
19
- } else if (isObjectValue(value)) {
20
- return [parseObjectValue(value)]
21
- }
22
- }
23
-
24
- module.exports = astToOrderBy
@@ -1,3 +0,0 @@
1
- const getArgumentByName = (args, name) => args.find(arg => arg.name.value === name)
2
-
3
- module.exports = { getArgumentByName }