@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,10 +1,9 @@
1
- const { fs } = require('@sap/cds-foss')
1
+ const fs = require('fs')
2
2
  const path = require('path')
3
3
  const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
4
- const { getHanaDbModuleDescriptor } = require('../../mtaUtil')
5
4
  const { OUTPUT_MODE_RESULT_ONLY, BUILD_OPTION_OUTPUT_MODE, SKIP_HDBTABLEDATA_GENERATION, SKIP_PACKAGE_JSON_GENERATION,
6
- SKIP_MANIFEST_GENERATION, CONTENT_MANIFEST, CONTENT_PACKAGE_JSON, CONTENT_HDBTABLEDATA } = require('../../constants')
7
- const { BuildError, setProperty, relativePaths, getProperty } = require('../../util')
5
+ CONTENT_PACKAGE_JSON, CONTENT_HDBTABLEDATA, CSV_FILE_DETECTION, CONTENT_ENV, CONTENT_DEFAULT_ENV_JSON, CONTENT_NODE_MODULES } = require('../../constants')
6
+ const { BuildError, relativePaths } = require('../../util')
8
7
  const CSV = require('../../csv-reader')
9
8
  const to_hdbmigration = require('./2migration')
10
9
  const to_hdbtabledata = require('./2tabledata')
@@ -20,7 +19,6 @@ const FILE_EXT_HDBMIGRATIONTABLE = ".hdbmigrationtable"
20
19
  const FILE_NAME_HDICONFIG = ".hdiconfig"
21
20
  const FILE_NAME_HDINAMESPACE = ".hdinamespace"
22
21
  const FILE_NAME_PACKAGE_JSON = "package.json"
23
- const FILE_NAME_MANIFEST_YML = "manifest.yml"
24
22
  const PATH_LAST_DEV_CSN = "last-dev/csn.json"
25
23
  const FILE_NAME_UNDEPLOY_JSON = "undeploy.json"
26
24
 
@@ -32,10 +30,17 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
32
30
  dest: this.task.dest,
33
31
  hana: []
34
32
  }
33
+
35
34
  // set unified option values in order to easy access later on
36
- this.task.options[CONTENT_MANIFEST] = !this.hasBuildOption(CONTENT_MANIFEST, false) && !this.hasBuildOption(SKIP_MANIFEST_GENERATION, true) ? true : false
35
+ // default value: true
37
36
  this.task.options[CONTENT_PACKAGE_JSON] = !this.hasBuildOption(CONTENT_PACKAGE_JSON, false) && !this.hasBuildOption(SKIP_PACKAGE_JSON_GENERATION, true) ? true : false
38
37
  this.task.options[CONTENT_HDBTABLEDATA] = !this.hasBuildOption(CONTENT_HDBTABLEDATA, false) && !this.hasBuildOption(SKIP_HDBTABLEDATA_GENERATION, true) ? true : false
38
+ this.task.options[CSV_FILE_DETECTION] = !this.hasBuildOption(CSV_FILE_DETECTION, false) ? true : false
39
+
40
+ // default value: false
41
+ this.task.options[CONTENT_NODE_MODULES] = this.hasBuildOption(CONTENT_NODE_MODULES, true) ? true : false
42
+ this.task.options[CONTENT_ENV] = this.hasBuildOption(CONTENT_ENV, true) ? true : false
43
+ this.task.options[CONTENT_DEFAULT_ENV_JSON] = this.hasBuildOption(CONTENT_DEFAULT_ENV_JSON, true) ? true : false
39
44
 
40
45
  this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
41
46
  }
@@ -49,22 +54,15 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
49
54
  const plugins = await this._compileToHana(model)
50
55
 
51
56
  if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
52
- // TODO: option 'mtxOriginalSrc' is only a workaround as native hana content part of reuse modules is still an open issue!
53
- // The option is set by mtx build_helper - the path refers to the base model: 'node_modules/_base/<dbDir>'
54
- // All files except *.cds files will be copied from base model folder to '#this.task.dest/src/**'.
55
- // Note:
56
- // Native hana artifacts are currently not supported by extensions - thus content copied from the base model cannot overwrite
57
- // content defined by the extension.
58
- if (getProperty(this.task, "options.build.mtxOriginalSrc")) {
59
- const baseModelDbSrcPath = path.join(this.buildOptions.root, this.task.options.build.mtxOriginalSrc)
60
- if (await fs.pathExists(baseModelDbSrcPath)) {
61
- await this._copyNativeContent(baseModelDbSrcPath, dest)
62
- }
57
+ if (this.hasBuildOption(CSV_FILE_DETECTION, false)) {
58
+ await this._copyResources(src, dest)
59
+ } else {
60
+ await this._copyResourcesExt(src, dest, model)
63
61
  }
64
62
 
65
- await this._copyNativeContent(src, dest)
66
63
  await this._writeHdiConfig(plugins)
67
64
  await this._writeHdiNamespace()
65
+
68
66
  // TODO disabled as this contradicts the MTX domain concept which allows partial app deployments
69
67
  //await this._writeUndeployJson()
70
68
 
@@ -74,10 +72,6 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
74
72
  if (this.hasBuildOption(CONTENT_PACKAGE_JSON, true)) {
75
73
  await this._writePackageJson()
76
74
  }
77
- if (this.hasBuildOption(CONTENT_MANIFEST, true)) {
78
- await this._writeManifestYml()
79
- await this._writeCfIgnore()
80
- }
81
75
  }
82
76
  return this._result
83
77
  }
@@ -91,7 +85,50 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
91
85
  if (this.isStagingBuild()) {
92
86
  return super.clean()
93
87
  }
94
- return fs.remove(this.task.options.compileDest)
88
+ return fs.promises.rm(this.task.options.compileDest, { force: true, recursive: true })
89
+ }
90
+
91
+ /**
92
+ * Copies all files located at <src> (except HANA artefacts not contained in <db>/src/**) to the folder <dest>.
93
+ * '*.csv' files are read based on the corresponding CDS model file location and copied as flat list into folder '<dest>/src/gen>'.
94
+ *
95
+ * @param {string} src
96
+ * @param {string} dest
97
+ * @param {Object} model
98
+ */
99
+ async _copyResourcesExt(src, dest, model) {
100
+ const deploy = require('../../../../lib/deploy')
101
+ const resources = Object.keys(await deploy.resources(model))
102
+ const csvPath = path.join(src, "data")
103
+ // determine subfolder name used by the application for backward compatibility
104
+ const csvFolder = resources.some(res => res && res.startsWith(csvPath)) ? "data" : "csv"
105
+
106
+ // 1. copy csv files into 'src/gen/data' or 'src/gen/csv' subfolder
107
+ const promises = []
108
+ resources.forEach(res => {
109
+ if (res && /\.csv$/.test(res)) {
110
+ promises.push(this.copy(res).to(path.join(this.task.options.compileDest, csvFolder, path.basename(res))))
111
+ }
112
+ })
113
+ await Promise.all(promises)
114
+
115
+ // 2. copy files except *.cds, *.csv, .env, default-env.json, ./node_modules/**
116
+ let blockList = "\\.cds$|\\.csv$|\\.hdbtabledata$"
117
+ blockList += this.hasBuildOption(CONTENT_ENV, false) ? "|\\.env($|\\..*$)" : ""
118
+ blockList += this.hasBuildOption(CONTENT_DEFAULT_ENV_JSON, false) ? "|default-env\\.json$" : ""
119
+ blockList = new RegExp(blockList)
120
+ const dbSrc = path.join(src, 'src')
121
+
122
+ await this.copyNativeContent(src, dest, (entry) => {
123
+ if (entry.startsWith(dbSrc)) {
124
+ // entire native content
125
+ return true
126
+ }
127
+ if (fs.statSync(entry).isDirectory()) {
128
+ return !/(\/|\\)node_modules(\/|\\)?$/.test(entry) || this.hasBuildOption(CONTENT_NODE_MODULES, true)
129
+ }
130
+ return !blockList.test(entry)
131
+ })
95
132
  }
96
133
 
97
134
  /**
@@ -101,21 +138,19 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
101
138
  * @param {string} src
102
139
  * @param {string} dest
103
140
  */
104
- async _copyNativeContent(src, dest) {
141
+ async _copyResources(src, dest) {
105
142
  const dbCsvDir = path.join(src, "csv")
106
143
  const dbDataDir = path.join(src, "data")
107
144
  const csvDirs = [dbCsvDir, dbDataDir]
108
145
  const regex = RegExp('\\.cds$|\\.csv$|\\.hdbtabledata$')
109
146
  const regexData = RegExp('\\.csv$|\\.hdbtabledata$')
110
-
111
- await super.copyNativeContent(src, dest, (entry) => {
147
+ await this.copyNativeContent(src, dest, (entry) => {
112
148
  if (fs.statSync(entry).isDirectory()) {
113
- return true // using common filter for folders
149
+ return !/(\/|\\)node_modules(\/|\\)?$/.test(entry)
114
150
  }
115
151
  return (!regex.test(entry) && entry !== this.env.build.outputfile) ||
116
- (regexData.test(entry) && !entry.startsWith(dbCsvDir) && !entry.startsWith(dbCsvDir))
117
- }) || []
118
-
152
+ (regexData.test(entry) && !entry.startsWith(dbCsvDir) && !entry.startsWith(dbDataDir))
153
+ })
119
154
  // handle *.csv and *.hdbtabledata located in '<dbSrc>/data' and '<dbSrc>/csv' folder
120
155
  const allFiles = csvDirs.reduce((acc, csvDir) => {
121
156
  return acc.concat(BuildTaskHandlerInternal._find(csvDir, (entry) => {
@@ -145,18 +180,18 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
145
180
  async _compileToHdbtabledata(model, dest) { //NOSONAR
146
181
  const tabledataDirs = new Set()
147
182
  const destSrcDir = path.join(dest, "src")
148
- const csvFiles = BuildTaskHandlerInternal._find(destSrcDir, (entry) => {
183
+
184
+ const allCsvFiles = BuildTaskHandlerInternal._find(destSrcDir, (entry) => {
149
185
  if (fs.statSync(entry).isDirectory()) {
150
186
  return true
151
187
  }
152
- const extName = path.extname(entry)
153
- if (extName === FILE_EXT_HDBTABLEDATA) {
188
+ if (/\.hdbtabledata$/.test(entry)) {
154
189
  tabledataDirs.add(path.dirname(entry))
155
190
  }
156
- return extName === FILE_EXT_CSV
191
+ return /\.csv$/.test(entry)
157
192
  })
158
- if (csvFiles.length > 0) {
159
- const csvDirs = csvFiles.map(path.dirname).reduce((dirs, dir) => {
193
+ if (allCsvFiles.length > 0) {
194
+ const csvDirs = allCsvFiles.map(path.dirname).reduce((dirs, dir) => {
160
195
  if (!tabledataDirs.has(dir) && !dirs.includes(dir)) { // exclude any dir where a tabledata is present
161
196
  dirs.push(dir)
162
197
  }
@@ -165,7 +200,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
165
200
 
166
201
  // ODM csv data comes with license comments, so strip these
167
202
  if (!this.hasBuildOption("stripCsvComments", false)) {
168
- await this._stripCsvComments(csvFiles)
203
+ await this._stripCsvComments(allCsvFiles)
169
204
  }
170
205
 
171
206
  const promises = []
@@ -214,7 +249,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
214
249
  if (this.hasCdsEnvOption('features.journal', false) || format === 'hdbcds') {
215
250
  await this._compileToHdb(model, pluginTypes, format)
216
251
  } else {
217
- await this._compileToHdbmigration(model, pluginTypes)
252
+ await this._compileToHdbmigration(model, pluginTypes, format)
218
253
  }
219
254
  return pluginTypes
220
255
  }
@@ -237,7 +272,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
237
272
  await Promise.all(promises)
238
273
  }
239
274
 
240
- async _compileToHdbmigration(model, pluginTypes) {
275
+ async _compileToHdbmigration(model, pluginTypes, format) {
241
276
  const relDestDir = path.relative(this.task.dest, this.task.options.compileDest)
242
277
  const relDbDestDir = path.relative(this.buildOptions.root, this.task.options.compileDest)
243
278
  const dbSrcDir = path.join(this.task.src, "src")
@@ -248,12 +283,11 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
248
283
  const promises = []
249
284
  const migrationTableFiles = []
250
285
 
251
- if (await fs.pathExists(lastDevCsnDir)) {
252
- lastDev = await fs.readJSON(lastDevCsnDir, 'utf-8')
286
+ if (fs.existsSync(lastDevCsnDir)) {
287
+ lastDev = JSON.parse((await fs.promises.readFile(lastDevCsnDir, 'utf-8')).toString())
253
288
  }
254
- // enforces sqlNames option for compiler in tests
255
- // pass options from cds env
256
- const options = { ...this.options(), logger: this.logger, sql_mapping: this.env.sql.names }
289
+ // enforces sqlNames option for compiler in tests, pass options from cds env, ensures that the correct format is taken
290
+ const options = { ...this.options(), logger: this.logger, sql_mapping: this.env.sql.names, "deploy-format": format }
257
291
 
258
292
  const compilationResult = await to_hdbmigration(model, lastDev, dbSrcDir, options)
259
293
  const definitions = compilationResult.definitions
@@ -279,7 +313,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
279
313
  }
280
314
  if (suffix === FILE_EXT_HDBTABLE) {
281
315
  // issue an error in case a .hdbmigrationtable file already exists
282
- if (await fs.pathExists(path.join(dbSrcDir, name + FILE_EXT_HDBMIGRATIONTABLE))) {
316
+ if (fs.existsSync(path.join(dbSrcDir, name + FILE_EXT_HDBMIGRATIONTABLE))) {
283
317
  this.pushMessage(`Multiple files exist defining the same HANA artifact - [${path.join(relDbSrcDir, name + FILE_EXT_HDBMIGRATIONTABLE)}, ${path.join(relDbDestDir, file)}].\nEither annotate the model entity using @cds.persistence.journal or undeploy the file [${path.join('src', name + FILE_EXT_HDBMIGRATIONTABLE)}] using an undeploy.json file.`, ERROR)
284
318
  }
285
319
  }
@@ -300,7 +334,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
300
334
 
301
335
  async _writePackageJson() {
302
336
  const packageJson = path.join(this.task.src, "package.json")
303
- const exists = await fs.pathExists(packageJson)
337
+ const exists = fs.existsSync(packageJson)
304
338
 
305
339
  if (exists) {
306
340
  this.logger._debug && this.logger.debug(`skip create [${relativePaths(this.buildOptions.root, packageJson)}], already existing`)
@@ -356,8 +390,8 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
356
390
  const undeployJsonSrc = path.join(this.task.src, FILE_NAME_UNDEPLOY_JSON)
357
391
  const templateEntries = await this._readTemplateAsJson(FILE_NAME_UNDEPLOY_JSON)
358
392
  let newEntries = []
359
- if (await fs.pathExists(undeployJsonSrc)) {
360
- newEntries = await fs.readJSON(undeployJsonSrc, 'utf-8')
393
+ if (fs.existsSync(undeployJsonSrc)) {
394
+ newEntries = await JSON.parse((await fs.promises.readFile(undeployJsonSrc, 'utf-8')).toString())
361
395
  newEntries = Array.isArray(newEntries) ? newEntries : []
362
396
  templateEntries.forEach(entry => {
363
397
  if (!newEntries.includes(entry)) {
@@ -377,64 +411,20 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
377
411
  }
378
412
  }
379
413
 
380
- /**
381
- * Create .cfignore file only for staging build.
382
- * This is to have a fast-turnaround at development
383
- */
384
- async _writeCfIgnore() {
385
- if (this.isStagingBuild()) {
386
- const content = `node_modules/\n`
387
- await this.write(content).to(path.join(this.task.dest, '.cfignore'))
388
- }
389
- }
390
-
391
- async _writeManifestYml() {
392
- if (!this.isStagingBuild()) {
393
- return
394
- }
395
- if (await fs.pathExists(path.join(this.task.src, FILE_NAME_MANIFEST_YML)) || await fs.pathExists(path.join(this.task.src, 'manifest.yml'))) {
396
- this.logger.debug('skip cf manifest generation, already existing')
397
- return
398
- }
399
- try {
400
- const descriptor = await getHanaDbModuleDescriptor(this.buildOptions.root, path.basename(this.task.src), this.logger)
401
- const MANIFEST_YML_CONTENT = `---
402
- applications:
403
- - name: ${descriptor.appName}
404
- path: .
405
- no-route: true
406
- health-check-type: process
407
- memory: 256M
408
- buildpacks:
409
- - nodejs_buildpack
410
- services:
411
- - ${descriptor.hdiServiceName}`
412
-
413
- this.logger.debug("Cloud Foundry service binding required for HDI container. To create a service use CF command")
414
- this.logger._debug && this.logger.debug(` cf cs hana hdi-shared ${descriptor.hdiServiceName}`)
415
-
416
- await this.write(MANIFEST_YML_CONTENT).to(path.join(this.task.dest, FILE_NAME_MANIFEST_YML))
417
- } catch (e) {
418
- if (e.name === 'YAMLSyntaxError') {
419
- this.logger.error("Failed to parse [mta.yaml] - skip manifest.yml generation")
420
- }
421
- this.logger.error(e)
422
- }
423
- }
424
-
425
414
  async _readTemplateAsJson(template) {
426
415
  const templatePath = path.join(__dirname, 'template', template)
427
- return fs.readJSON(templatePath, 'utf-8').catch((error) => {
428
- this.logger.error(`Failed to read template [${templatePath}]`)
429
- return Promise.reject(error)
430
- })
416
+ return fs.promises.readFile(templatePath, 'utf-8').then(f => JSON.parse(f.toString()))
417
+ .catch((error) => {
418
+ this.logger.error(`Failed to read template [${templatePath}]`)
419
+ return Promise.reject(error)
420
+ })
431
421
  }
432
422
 
433
423
  async _readTypesFromUndeployJson() {
434
424
  const result = new Set()
435
425
  const file = path.join(this.task.src, "undeploy.json")
436
- if (await fs.pathExists(file)) {
437
- const undeployList = await fs.readJSON(file)
426
+ if (fs.existsSync(file)) {
427
+ const undeployList = JSON.parse((await fs.promises.readFile(file)).toString())
438
428
  if (Array.isArray(undeployList)) {
439
429
  undeployList.forEach(entry => result.add(path.extname(entry)))
440
430
  }
@@ -1,10 +1,11 @@
1
- const { fs } = require('@sap/cds-foss')
1
+ const fs = require('fs').promises
2
+ const {existsSync} = require('fs')
2
3
  class MigrationTableParser {
3
4
  constructor() {
4
5
  }
5
6
 
6
7
  async read(filePath, options = { encoding: 'utf8' }) {
7
- if (await fs.pathExists(filePath)) {
8
+ if (existsSync(filePath)) {
8
9
  return this.parse((await fs.readFile(filePath, options)).replace(/\r\n/g, '\n'))
9
10
  }
10
11
  return null
@@ -289,7 +290,7 @@ class MigrationTableModel {
289
290
  return idxBase
290
291
  }
291
292
 
292
- /**
293
+ /**
293
294
  * Migrations are identical if the corresponding DDL statements are identical,
294
295
  * ignoring order and ignoring comments.
295
296
  */
@@ -0,0 +1,101 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+
4
+ const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
5
+ const { isOldJavaStack, BuildError } = require('../../util')
6
+
7
+ const { BUILD_OPTION_OUTPUT_MODE, ODATA_VERSION, ODATA_VERSION_V2, OUTPUT_MODE_RESULT_ONLY, FILE_EXT_CDS, SKIP_ASSERT_COMPILER_V2, CONTENT_LANGUAGE_BUNDLES, CONTENT_DEFAULT_CSN } = require('../../constants')
8
+ const { INFO } = require('../../buildTaskHandler')
9
+
10
+ const DEFAULT_COMPILE_DEST_FOLDER = path.normalize('src/main/resources/edmx')
11
+
12
+ class JavaCfModuleBuilder extends BuildTaskHandlerEdmx {
13
+ init() {
14
+ super.init()
15
+ this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
16
+ }
17
+
18
+ async build() {
19
+ const { src, dest } = this.task
20
+
21
+ const odataOptions = {
22
+ version: this.env.get(ODATA_VERSION)
23
+ }
24
+
25
+ if (await isOldJavaStack([src, this.buildOptions.root])) {
26
+ if (!this._isCompilerV1() && !this.env.get(`build.${SKIP_ASSERT_COMPILER_V2}`)) {
27
+ throw new BuildError('CDS compiler version 2 does no longer support the classic CAP Java runtime. It is recommended to migrate to the current CAP Java runtime SDK. See https://cap.cloud.sap/docs/java/migration for more.')
28
+ }
29
+ // default is now v4 and not v2 anymore, so warn and overwrite with v2 if using default
30
+ if (!this.env.for('cds', this.buildOptions.root, false).get(ODATA_VERSION)) {
31
+ odataOptions.version = ODATA_VERSION_V2
32
+ this.pushMessage('Forcing OData v2 for building though the default is v4. Make sure to define OData v2 in cds configuration.', INFO)
33
+ }
34
+
35
+ // 'sql_mapping' and 'cds.persinstence.name' annotations are required by old java stack
36
+ if (this.env.sql.names !== 'plain') {
37
+ odataOptions.sql_mapping = this.env.sql.names
38
+ }
39
+ }
40
+
41
+ const model = await this.model()
42
+ if (!model) {
43
+ return this._result
44
+ }
45
+
46
+ const odata = await this._compileForOdata(model, this.task.options.compileDest, odataOptions)
47
+ await this.compileToEdmx(odata, this.task.options.compileDest, odataOptions)
48
+
49
+ if (this.hasBuildOption(CONTENT_LANGUAGE_BUNDLES, true)) {
50
+ // collect and write language bundles into single i18n.json file
51
+ await this.collectLanguageBundles(model, this.task.dest)
52
+ }
53
+ if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
54
+ await this._copyNativeContent(src, dest)
55
+ }
56
+ return this._result
57
+ }
58
+
59
+ async clean() {
60
+ if (this.isStagingBuild()) {
61
+ await super.clean()
62
+ return
63
+ }
64
+ this.logger._debug && this.logger.debug(`Deleting build target folder ${this.task.options.compileDest}`)
65
+ await fs.promises.rm(this.task.options.compileDest, {force: true, recursive: true})
66
+ }
67
+
68
+ async _copyNativeContent(src, dest) {
69
+ return super.copyNativeContent(src, dest, (entry) => {
70
+ if (fs.statSync(entry).isDirectory()) {
71
+ return true // using common filter for folders
72
+ } else {
73
+ const extname = path.extname(entry)
74
+ return extname !== FILE_EXT_CDS
75
+ }
76
+ })
77
+ }
78
+
79
+ async _compileForOdata(model, csnDest, compileOptions) {
80
+ // csn for service providers
81
+ const m = this.cds.compile.for.java(model, {
82
+ ...this._options4odata(),
83
+ ...compileOptions
84
+ })
85
+
86
+ // adding csn to build result containing @source and _where persisted properties
87
+ if (this.hasBuildOption(CONTENT_DEFAULT_CSN, true)) { //default true or undefined
88
+ await this.compileToJson(model, csnDest)
89
+ } else {
90
+ await this.compileToJson(m, csnDest)
91
+ }
92
+ return m
93
+ }
94
+
95
+ _isCompilerV1() {
96
+ const version = this.cds.compiler.version()
97
+ const match = version.match(/(\d+)\.?(\d*)\.?(\d*)/)
98
+ return match && match[1] === 1
99
+ }
100
+ }
101
+ module.exports = JavaCfModuleBuilder
@@ -1,101 +1 @@
1
- const { fs } = require('@sap/cds-foss')
2
- const path = require('path')
3
-
4
- const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
5
- const { isOldJavaStack, BuildError } = require('../../util')
6
-
7
- const { BUILD_OPTION_OUTPUT_MODE, ODATA_VERSION, ODATA_VERSION_V2, OUTPUT_MODE_RESULT_ONLY, FILE_EXT_CDS, SKIP_ASSERT_COMPILER_V2, CONTENT_LANGUAGE_BUNDLES, CONTENT_DEFAULT_CSN } = require('../../constants')
8
- const { INFO } = require('../../buildTaskHandler')
9
-
10
- const DEFAULT_COMPILE_DEST_FOLDER = path.normalize('src/main/resources/edmx')
11
-
12
- class JavaCfModuleBuilder extends BuildTaskHandlerEdmx {
13
- init() {
14
- super.init()
15
- this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
16
- }
17
-
18
- async build() {
19
- const { src, dest } = this.task
20
-
21
- const odataOptions = {
22
- version: this.env.get(ODATA_VERSION)
23
- }
24
-
25
- if (await isOldJavaStack([src, this.buildOptions.root])) {
26
- if (!this._isCompilerV1() && !this.env.get(`build.${SKIP_ASSERT_COMPILER_V2}`)) {
27
- throw new BuildError('CDS compiler version 2 does no longer support the classic CAP Java runtime. It is recommended to migrate to the current CAP Java runtime SDK. See https://cap.cloud.sap/docs/java/migration for more.')
28
- }
29
- // default is now v4 and not v2 anymore, so warn and overwrite with v2 if using default
30
- if (!this.env.for('cds', this.buildOptions.root, false).get(ODATA_VERSION)) {
31
- odataOptions.version = ODATA_VERSION_V2
32
- this.pushMessage('Forcing OData v2 for building though the default is v4. Make sure to define OData v2 in cds configuration.', INFO)
33
- }
34
-
35
- // 'sql_mapping' and 'cds.persinstence.name' annotations are required by old java stack
36
- if (this.env.sql.names !== 'plain') {
37
- odataOptions.sql_mapping = this.env.sql.names
38
- }
39
- }
40
-
41
- const model = await this.model()
42
- if (!model) {
43
- return this._result
44
- }
45
-
46
- const odata = await this._compileForOdata(model, this.task.options.compileDest, odataOptions)
47
- await this.compileToEdmx(odata, this.task.options.compileDest, odataOptions)
48
-
49
- if (this.hasBuildOption(CONTENT_LANGUAGE_BUNDLES, true)) {
50
- // collect and write language bundles into single i18n.json file
51
- await this.collectLanguageBundles(model, this.task.dest)
52
- }
53
- if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
54
- await this._copyNativeContent(src, dest)
55
- }
56
- return this._result
57
- }
58
-
59
- async clean() {
60
- if (this.isStagingBuild()) {
61
- await super.clean()
62
- return
63
- }
64
- this.logger._debug && this.logger.debug(`Deleting build target folder ${this.task.options.compileDest}`)
65
- await fs.remove(this.task.options.compileDest)
66
- }
67
-
68
- async _copyNativeContent(src, dest) {
69
- return super.copyNativeContent(src, dest, (entry) => {
70
- if (fs.statSync(entry).isDirectory()) {
71
- return true // using common filter for folders
72
- } else {
73
- const extname = path.extname(entry)
74
- return extname !== FILE_EXT_CDS
75
- }
76
- })
77
- }
78
-
79
- async _compileForOdata(model, csnDest, compileOptions) {
80
- // csn for service providers
81
- const m = this.cds.compile.for.java(model, {
82
- ...this._options4odata(),
83
- ...compileOptions
84
- })
85
-
86
- // adding csn to build result containing @source and _where persisted properties
87
- if (this.hasBuildOption(CONTENT_DEFAULT_CSN, true)) { //default true or undefined
88
- await this.compileToJson(model, csnDest)
89
- } else {
90
- await this.compileToJson(m, csnDest)
91
- }
92
- return m
93
- }
94
-
95
- _isCompilerV1() {
96
- const { version } = require('@sap/cds-compiler/package.json')
97
- const match = version.match(/(\d+)\.?(\d*)\.?(\d*)/)
98
- return match && match[1] === 1
99
- }
100
- }
101
- module.exports = JavaCfModuleBuilder
1
+ module.exports = require('../java')