@sap/cds 5.9.6 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. package/CHANGELOG.md +266 -20
  2. package/apis/services.d.ts +1 -1
  3. package/app/fiori/preview.js +2 -6
  4. package/app/index.js +3 -3
  5. package/bin/build/buildTaskEngine.js +17 -15
  6. package/bin/build/buildTaskFactory.js +29 -19
  7. package/bin/build/buildTaskHandler.js +27 -11
  8. package/bin/build/buildTaskProvider.js +2 -4
  9. package/bin/build/buildTaskProviderFactory.js +11 -16
  10. package/bin/build/constants.js +14 -6
  11. package/bin/build/csv-reader.js +2 -1
  12. package/bin/build/index.js +12 -18
  13. package/bin/build/provider/buildTaskHandlerEdmx.js +3 -39
  14. package/bin/build/provider/buildTaskHandlerFeatureToggles.js +149 -0
  15. package/bin/build/provider/buildTaskHandlerInternal.js +2 -3
  16. package/bin/build/provider/buildTaskProviderInternal.js +108 -239
  17. package/bin/build/provider/fiori/index.js +2 -2
  18. package/bin/build/provider/hana/2migration.js +11 -11
  19. package/bin/build/provider/hana/2tabledata.js +3 -3
  20. package/bin/build/provider/hana/index.js +89 -99
  21. package/bin/build/provider/hana/migrationtable.js +4 -3
  22. package/bin/build/provider/java/index.js +101 -0
  23. package/bin/build/provider/java-cf/index.js +1 -101
  24. package/bin/build/provider/mtx/index.js +90 -53
  25. package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
  26. package/bin/build/provider/mtx-sidecar/index.js +80 -0
  27. package/bin/build/provider/node-cf/index.js +1 -308
  28. package/bin/build/provider/nodejs/index.js +189 -0
  29. package/bin/build/util.js +19 -31
  30. package/bin/cds.js +5 -3
  31. package/bin/deploy/to-hana/cfUtil.js +31 -6
  32. package/bin/deploy/to-hana/gitUtil.js +5 -3
  33. package/bin/deploy/to-hana/hana.js +9 -10
  34. package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
  35. package/bin/mtx/in-cds.js +19 -7
  36. package/bin/serve.js +56 -21
  37. package/bin/utils/log.js +13 -30
  38. package/bin/version.js +5 -4
  39. package/common.cds +61 -16
  40. package/lib/compile/cdsc.js +3 -2
  41. package/lib/compile/etc/_localized.js +15 -14
  42. package/lib/compile/for/drafts.js +3 -4
  43. package/lib/compile/for/java.js +13 -10
  44. package/lib/compile/for/nodejs.js +8 -8
  45. package/lib/compile/for/odata.js +7 -12
  46. package/lib/compile/for/sql.js +5 -6
  47. package/lib/compile/index.js +5 -4
  48. package/lib/compile/load.js +9 -11
  49. package/lib/compile/minify.js +8 -5
  50. package/lib/compile/parse.js +4 -2
  51. package/lib/compile/resolve.js +18 -15
  52. package/lib/compile/to/edm.js +0 -1
  53. package/lib/compile/to/gql.js +3 -2
  54. package/lib/compile/to/json.js +24 -17
  55. package/lib/connect/bindings.js +3 -2
  56. package/lib/connect/index.js +5 -5
  57. package/lib/core/classes.js +74 -2
  58. package/lib/core/entities.js +52 -3
  59. package/lib/core/reflect.js +2 -1
  60. package/lib/deploy.js +11 -8
  61. package/lib/env/defaults.js +4 -3
  62. package/lib/env/index.js +71 -31
  63. package/lib/env/presets.js +1 -14
  64. package/lib/env/requires.js +70 -20
  65. package/lib/env/serviceBindings.js +147 -0
  66. package/lib/i18n/localize.js +22 -23
  67. package/lib/index.js +148 -144
  68. package/lib/log/errors.js +55 -12
  69. package/lib/log/format/kibana.js +1 -1
  70. package/lib/log/index.js +4 -0
  71. package/lib/ql/SELECT.js +7 -2
  72. package/lib/ql/Whereable.js +8 -2
  73. package/lib/ql/index.js +2 -2
  74. package/lib/req/assert.js +71 -0
  75. package/lib/req/cds-context.js +38 -70
  76. package/lib/req/context.js +34 -21
  77. package/lib/req/request.js +12 -18
  78. package/lib/req/response.js +6 -2
  79. package/lib/req/user.js +30 -22
  80. package/lib/serve/Service-api.js +17 -12
  81. package/lib/serve/Service-dispatch.js +5 -9
  82. package/lib/serve/Service-methods.js +4 -3
  83. package/lib/serve/Transaction.js +24 -21
  84. package/lib/serve/adapters.js +15 -5
  85. package/lib/serve/factory.js +23 -20
  86. package/lib/serve/index.js +51 -54
  87. package/lib/utils/axios.js +8 -12
  88. package/lib/utils/index.js +3 -3
  89. package/lib/utils/resources/index.js +1 -44
  90. package/lib/utils/resources/tar.js +2 -1
  91. package/lib/utils/tests.js +13 -15
  92. package/libx/_runtime/.eslintrc +1 -1
  93. package/libx/_runtime/audit/Service.js +6 -4
  94. package/libx/_runtime/audit/generic/personal/access.js +19 -43
  95. package/libx/_runtime/audit/generic/personal/index.js +40 -34
  96. package/libx/_runtime/audit/generic/personal/modification.js +11 -9
  97. package/libx/_runtime/audit/generic/personal/utils.js +13 -6
  98. package/libx/_runtime/audit/utils/v2.js +6 -3
  99. package/libx/_runtime/auth/index.js +71 -66
  100. package/libx/_runtime/auth/strategies/JWT.js +3 -2
  101. package/libx/_runtime/auth/strategies/mock.js +54 -53
  102. package/libx/_runtime/auth/strategies/xssecUtils.js +3 -4
  103. package/libx/_runtime/auth/strategies/xsuaa.js +3 -2
  104. package/libx/_runtime/auth/utils.js +2 -15
  105. package/libx/_runtime/cds-services/adapter/odata-v4/Dispatcher.js +128 -42
  106. package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +6 -3
  107. package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
  108. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +10 -45
  109. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +5 -9
  110. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +9 -5
  111. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +4 -2
  112. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +60 -53
  113. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +1 -1
  114. package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +15 -21
  115. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +8 -15
  116. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +29 -41
  117. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +1 -4
  118. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +13 -13
  119. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -7
  120. package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +24 -1
  121. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +1 -1
  122. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +4 -3
  123. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +4 -5
  124. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +4 -3
  125. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +5 -3
  126. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +2 -0
  127. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +1 -1
  128. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +1 -1
  129. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +1 -1
  130. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +1 -1
  131. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +3 -2
  132. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +3 -1
  133. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +1 -0
  134. package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +3 -3
  135. package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +36 -25
  136. package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +100 -91
  137. package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +382 -0
  138. package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +1 -4
  139. package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +5 -6
  140. package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +77 -21
  141. package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +3 -11
  142. package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +91 -69
  143. package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +27 -6
  144. package/libx/_runtime/cds-services/adapter/rest/utils/validation-checks.js +7 -17
  145. package/libx/_runtime/cds-services/services/Service.js +17 -76
  146. package/libx/_runtime/cds-services/services/utils/columns.js +6 -4
  147. package/libx/_runtime/cds-services/services/utils/compareJson.js +1 -53
  148. package/libx/_runtime/cds-services/services/utils/differ.js +15 -19
  149. package/libx/_runtime/cds-services/util/assert.js +107 -34
  150. package/libx/_runtime/cds.js +1 -31
  151. package/libx/_runtime/common/aspects/Association.js +40 -54
  152. package/libx/_runtime/common/aspects/any.js +61 -6
  153. package/libx/_runtime/common/aspects/entity.js +19 -79
  154. package/libx/_runtime/common/composition/data.js +2 -2
  155. package/libx/_runtime/common/composition/delete.js +16 -18
  156. package/libx/_runtime/common/composition/tree.js +10 -10
  157. package/libx/_runtime/common/composition/update.js +3 -2
  158. package/libx/_runtime/common/constants/events.js +15 -0
  159. package/libx/_runtime/common/error/entry.js +9 -3
  160. package/libx/_runtime/common/error/frontend.js +13 -19
  161. package/libx/_runtime/common/error/index.js +8 -3
  162. package/libx/_runtime/common/generic/auth/capabilities.js +2 -1
  163. package/libx/_runtime/common/generic/auth/constants.js +1 -4
  164. package/libx/_runtime/common/generic/auth/requires.js +1 -1
  165. package/libx/_runtime/common/generic/auth/restrict.js +12 -28
  166. package/libx/_runtime/common/generic/auth/restrictions.js +12 -4
  167. package/libx/_runtime/common/generic/auth/utils.js +2 -1
  168. package/libx/_runtime/common/generic/crud.js +9 -60
  169. package/libx/_runtime/common/generic/etag.js +41 -7
  170. package/libx/_runtime/common/generic/input.js +128 -66
  171. package/libx/_runtime/common/generic/paging.js +9 -3
  172. package/libx/_runtime/common/generic/put.js +2 -2
  173. package/libx/_runtime/common/generic/sorting.js +11 -4
  174. package/libx/_runtime/common/generic/temporal.js +0 -5
  175. package/libx/_runtime/common/i18n/messages.properties +2 -1
  176. package/libx/_runtime/common/utils/binary.js +69 -0
  177. package/libx/_runtime/common/utils/cqn.js +39 -14
  178. package/libx/_runtime/common/utils/cqn2cqn4sql.js +93 -59
  179. package/libx/_runtime/common/utils/csn.js +87 -85
  180. package/libx/_runtime/common/utils/dollar.js +8 -7
  181. package/libx/_runtime/common/utils/draft.js +1 -1
  182. package/libx/_runtime/common/utils/foreignKeyPropagations.js +23 -7
  183. package/libx/_runtime/common/utils/generateOnCond.js +2 -1
  184. package/libx/_runtime/common/utils/keys.js +30 -13
  185. package/libx/_runtime/common/utils/postProcessing.js +6 -1
  186. package/libx/_runtime/common/utils/quotingStyles.js +0 -23
  187. package/libx/_runtime/common/utils/resolveStructured.js +23 -26
  188. package/libx/_runtime/common/utils/resolveView.js +4 -1
  189. package/libx/_runtime/common/utils/rewriteAsterisks.js +3 -0
  190. package/libx/_runtime/common/utils/search2cqn4sql.js +4 -13
  191. package/libx/_runtime/common/utils/searchToLike.js +9 -13
  192. package/libx/_runtime/common/utils/streamProp.js +35 -0
  193. package/libx/_runtime/common/utils/structured.js +12 -18
  194. package/libx/_runtime/common/utils/template.js +3 -5
  195. package/libx/_runtime/common/utils/templateProcessor.js +22 -14
  196. package/libx/_runtime/common/utils/unionCqnTemplate.js +4 -14
  197. package/libx/_runtime/db/Service.js +2 -1
  198. package/libx/_runtime/db/expand/expand-v2.js +2 -2
  199. package/libx/_runtime/db/expand/expandCQNToJoin.js +7 -6
  200. package/libx/_runtime/db/generic/input.js +14 -17
  201. package/libx/_runtime/db/generic/integrity.js +1 -2
  202. package/libx/_runtime/db/generic/update.js +14 -1
  203. package/libx/_runtime/db/query/read.js +0 -1
  204. package/libx/_runtime/db/query/update.js +1 -1
  205. package/libx/_runtime/db/sql-builder/BaseBuilder.js +1 -1
  206. package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +5 -31
  207. package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
  208. package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -9
  209. package/libx/_runtime/db/sql-builder/SelectBuilder.js +11 -10
  210. package/libx/_runtime/db/sql-builder/UpdateBuilder.js +2 -2
  211. package/libx/_runtime/db/sql-builder/annotations.js +1 -2
  212. package/libx/_runtime/db/utils/coloredTxCommands.js +5 -0
  213. package/libx/_runtime/db/utils/columns.js +1 -1
  214. package/libx/_runtime/db/utils/propagateForeignKeys.js +10 -2
  215. package/libx/_runtime/extensibility/activate.js +69 -0
  216. package/libx/_runtime/extensibility/add.js +41 -0
  217. package/libx/_runtime/extensibility/addExtension.js +68 -0
  218. package/libx/_runtime/extensibility/defaults.js +39 -0
  219. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformREAD.js +0 -0
  220. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformRESULT.js +2 -2
  221. package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformWRITE.js +2 -2
  222. package/libx/_runtime/extensibility/push.js +61 -0
  223. package/libx/_runtime/extensibility/service.js +21 -0
  224. package/libx/_runtime/extensibility/{uiflex/utils.js → utils.js} +39 -3
  225. package/libx/_runtime/extensibility/validation.js +53 -0
  226. package/libx/_runtime/extensibility/views.js +12 -0
  227. package/libx/_runtime/fiori/generic/activate.js +6 -4
  228. package/libx/_runtime/fiori/generic/before.js +17 -29
  229. package/libx/_runtime/fiori/generic/cancel.js +2 -4
  230. package/libx/_runtime/fiori/generic/delete.js +2 -4
  231. package/libx/_runtime/fiori/generic/edit.js +3 -7
  232. package/libx/_runtime/fiori/generic/index.js +31 -0
  233. package/libx/_runtime/fiori/generic/new.js +2 -4
  234. package/libx/_runtime/fiori/generic/patch.js +4 -8
  235. package/libx/_runtime/fiori/generic/prepare.js +2 -4
  236. package/libx/_runtime/fiori/generic/read.js +137 -162
  237. package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
  238. package/libx/_runtime/fiori/utils/handler.js +10 -5
  239. package/libx/_runtime/fiori/utils/where.js +1 -4
  240. package/libx/_runtime/hana/Service.js +14 -7
  241. package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +1 -1
  242. package/libx/_runtime/hana/dynatrace.js +2 -2
  243. package/libx/_runtime/hana/localized.js +7 -6
  244. package/libx/_runtime/hana/pool.js +9 -6
  245. package/libx/_runtime/hana/search.js +2 -3
  246. package/libx/_runtime/hana/{searchToContains.js → search2Contains.js} +5 -2
  247. package/libx/_runtime/hana/search2cqn4sql.js +20 -17
  248. package/libx/_runtime/index.js +2 -6
  249. package/libx/_runtime/messaging/AMQPWebhookMessaging.js +11 -2
  250. package/libx/_runtime/messaging/common-utils/AMQPClient.js +4 -3
  251. package/libx/_runtime/messaging/common-utils/appId.js +9 -0
  252. package/libx/_runtime/messaging/common-utils/authorizedRequest.js +2 -18
  253. package/libx/_runtime/messaging/common-utils/connections.js +1 -1
  254. package/libx/_runtime/messaging/enterprise-messaging-shared.js +2 -2
  255. package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +305 -231
  256. package/libx/_runtime/messaging/enterprise-messaging-utils/cloudEvents.js +2 -2
  257. package/libx/_runtime/messaging/enterprise-messaging-utils/options-management.js +15 -8
  258. package/libx/_runtime/messaging/enterprise-messaging-utils/options-messaging.js +57 -14
  259. package/libx/_runtime/messaging/enterprise-messaging.js +14 -19
  260. package/libx/_runtime/messaging/file-based.js +2 -1
  261. package/libx/_runtime/messaging/http-utils/token.js +18 -6
  262. package/libx/_runtime/messaging/message-queuing-utils/options-management.js +22 -12
  263. package/libx/_runtime/messaging/message-queuing-utils/options-messaging.js +27 -14
  264. package/libx/_runtime/messaging/message-queuing.js +138 -85
  265. package/libx/_runtime/messaging/outbox/utils.js +13 -7
  266. package/libx/_runtime/messaging/redis-messaging.js +0 -1
  267. package/libx/_runtime/messaging/service.js +4 -1
  268. package/libx/_runtime/remote/Service.js +24 -18
  269. package/libx/_runtime/remote/utils/client.js +84 -46
  270. package/libx/_runtime/remote/utils/data.js +23 -6
  271. package/libx/_runtime/sqlite/Service.js +14 -13
  272. package/libx/_runtime/sqlite/convertAssocToOneManaged.js +2 -0
  273. package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +1 -0
  274. package/libx/_runtime/sqlite/execute.js +3 -9
  275. package/libx/_runtime/types/api.js +23 -11
  276. package/libx/common/utils/ucsn.js +15 -9
  277. package/libx/odata/afterburner.js +109 -29
  278. package/libx/odata/cqn2odata.js +48 -9
  279. package/libx/odata/grammar.pegjs +261 -157
  280. package/libx/odata/index.js +21 -9
  281. package/libx/odata/parseToCqn.js +8 -5
  282. package/libx/odata/parser.js +1 -1
  283. package/libx/odata/utils.js +13 -3
  284. package/libx/rest/RestAdapter.js +173 -113
  285. package/libx/rest/RestRequest.js +3 -2
  286. package/libx/rest/middleware/create.js +8 -6
  287. package/libx/rest/middleware/delete.js +6 -13
  288. package/libx/rest/middleware/error.js +1 -1
  289. package/libx/rest/middleware/input.js +6 -6
  290. package/libx/rest/middleware/operation.js +8 -3
  291. package/libx/rest/middleware/parse.js +3 -3
  292. package/libx/rest/middleware/payload.js +12 -0
  293. package/libx/rest/middleware/read.js +12 -2
  294. package/libx/rest/middleware/update.js +3 -3
  295. package/package.json +4 -6
  296. package/server.js +3 -44
  297. package/srv/extensibility-service.cds +56 -0
  298. package/srv/extensibility-service.js +1 -0
  299. package/srv/extensions.cds +8 -0
  300. package/srv/model-provider.cds +59 -0
  301. package/srv/model-provider.js +163 -0
  302. package/srv/mtx.cds +2 -0
  303. package/srv/mtx.js +22 -0
  304. package/srv/outbox.cds +2 -0
  305. package/tasks/enterprise-messaging-deploy.js +19 -12
  306. package/lib/serve/Service-compat.js +0 -36
  307. package/libx/_runtime/audit/generic/personal/constants.js +0 -4
  308. package/libx/_runtime/auth/strategies/dwc.js +0 -45
  309. package/libx/_runtime/cds-services/adapter/odata-v4/utils/dispatcherUtils.js +0 -56
  310. package/libx/_runtime/cds-services/adapter/rest/Rest.js +0 -183
  311. package/libx/_runtime/cds-services/adapter/rest/RestRequest.js +0 -67
  312. package/libx/_runtime/cds-services/adapter/rest/handlers/create.js +0 -82
  313. package/libx/_runtime/cds-services/adapter/rest/handlers/delete.js +0 -39
  314. package/libx/_runtime/cds-services/adapter/rest/handlers/operation.js +0 -63
  315. package/libx/_runtime/cds-services/adapter/rest/handlers/read.js +0 -52
  316. package/libx/_runtime/cds-services/adapter/rest/handlers/update.js +0 -81
  317. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/index.js +0 -56
  318. package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/utils.js +0 -33
  319. package/libx/_runtime/cds-services/adapter/rest/to.js +0 -8
  320. package/libx/_runtime/cds-services/adapter/rest/utils/binary.js +0 -50
  321. package/libx/_runtime/cds-services/adapter/rest/utils/data.js +0 -117
  322. package/libx/_runtime/cds-services/adapter/rest/utils/header-checks.js +0 -14
  323. package/libx/_runtime/cds-services/adapter/rest/utils/key-value-utils.js +0 -30
  324. package/libx/_runtime/cds-services/adapter/rest/utils/parse-url.js +0 -250
  325. package/libx/_runtime/cds-services/adapter/rest/utils/result.js +0 -26
  326. package/libx/_runtime/cds-services/services/utils/handlerUtils.js +0 -200
  327. package/libx/_runtime/common/aspects/utils.js +0 -152
  328. package/libx/_runtime/common/toggles/handler.js +0 -21
  329. package/libx/_runtime/common/utils/extensibilityUtils.js +0 -18
  330. package/libx/_runtime/extensibility/mps/index.js +0 -5
  331. package/libx/_runtime/extensibility/mps/service.js +0 -111
  332. package/libx/_runtime/extensibility/mps/tar.js +0 -42
  333. package/libx/_runtime/extensibility/mps/utils.js +0 -11
  334. package/libx/_runtime/extensibility/uiflex/index.js +0 -54
  335. package/libx/_runtime/extensibility/uiflex/service.js +0 -276
  336. package/libx/_runtime/messaging/common-utils/naming-conventions.js +0 -20
  337. package/libx/_runtime/remote/utils/client-types.d.ts +0 -7
  338. package/libx/gql/GraphQLAdapter.js +0 -33
  339. package/libx/gql/constants/adapter.js +0 -69
  340. package/libx/gql/constants/cds.js +0 -18
  341. package/libx/gql/constants/graphql.js +0 -33
  342. package/libx/gql/readme.md +0 -1
  343. package/libx/gql/resolvers/crud/create.js +0 -20
  344. package/libx/gql/resolvers/crud/delete.js +0 -29
  345. package/libx/gql/resolvers/crud/index.js +0 -6
  346. package/libx/gql/resolvers/crud/read.js +0 -30
  347. package/libx/gql/resolvers/crud/update.js +0 -42
  348. package/libx/gql/resolvers/crud/utils/index.js +0 -36
  349. package/libx/gql/resolvers/field.js +0 -5
  350. package/libx/gql/resolvers/index.js +0 -7
  351. package/libx/gql/resolvers/mutation.js +0 -23
  352. package/libx/gql/resolvers/parse/ast/enrich.js +0 -52
  353. package/libx/gql/resolvers/parse/ast/fragment.js +0 -11
  354. package/libx/gql/resolvers/parse/ast/fromObject.js +0 -39
  355. package/libx/gql/resolvers/parse/ast/index.js +0 -3
  356. package/libx/gql/resolvers/parse/ast/meta.js +0 -4
  357. package/libx/gql/resolvers/parse/ast/variable.js +0 -7
  358. package/libx/gql/resolvers/parse/ast2cqn/columns.js +0 -44
  359. package/libx/gql/resolvers/parse/ast2cqn/entries.js +0 -31
  360. package/libx/gql/resolvers/parse/ast2cqn/index.js +0 -8
  361. package/libx/gql/resolvers/parse/ast2cqn/limit.js +0 -6
  362. package/libx/gql/resolvers/parse/ast2cqn/orderBy.js +0 -24
  363. package/libx/gql/resolvers/parse/ast2cqn/utils/index.js +0 -3
  364. package/libx/gql/resolvers/parse/ast2cqn/where.js +0 -70
  365. package/libx/gql/resolvers/parse/utils/index.js +0 -8
  366. package/libx/gql/resolvers/query.js +0 -13
  367. package/libx/gql/resolvers/root.js +0 -34
  368. package/libx/gql/schema/generate.js +0 -18
  369. package/libx/gql/schema/index.js +0 -5
  370. package/libx/gql/schema/mutation.js +0 -76
  371. package/libx/gql/schema/query.js +0 -108
  372. package/libx/gql/schema/typeDefMap.js +0 -45
  373. package/libx/gql/schema/utils/index.js +0 -54
  374. package/libx/gql/utils/index.js +0 -12
  375. package/libx/rest/middleware/auth.js +0 -20
  376. package/libx/rest/middleware/content.js +0 -19
  377. package/srv/flex.cds +0 -21
  378. package/srv/flex.js +0 -1
  379. package/srv/mps.cds +0 -23
  380. package/srv/mps.js +0 -1
  381. package/srv/outbox.js +0 -0
@@ -1,30 +1,76 @@
1
1
  /* eslint-disable no-empty */
2
- const { fs } = require('@sap/cds-foss')
2
+ const fs = require('fs')
3
3
  const path = require('path')
4
- const { BUILD_TASK_HANA, FOLDER_GEN } = require('../../constants')
5
- const { WARNING } = require('../../buildTaskHandler')
6
4
  const BuildTaskProviderInternal = require("../buildTaskProviderInternal")
7
5
  const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
6
+ const { isStreamlinedMtx } = require('../../util')
7
+ const ResourcesTarProvider = require('./resourcesTarBuilder')
8
8
 
9
+ const { BUILD_TASK_HANA, FOLDER_GEN } = require('../../constants')
10
+ const { WARNING } = require('../../buildTaskHandler')
9
11
  const FOLDER_SDC = "sdc"
10
12
  const FOLDER_NODE_MODULES = "node_modules"
11
13
  const FOLDER_TEMPLATES = "tpl"
12
14
 
13
15
  class MtxModuleBuilder extends BuildTaskHandlerEdmx {
14
16
  get priority() {
15
- // should be scheduled after all other build tasks are finished
17
+ // should be scheduled after 'hana' build tasks are finished
16
18
  return BuildTaskHandlerEdmx.PRIORITY_MIN_VALUE
17
19
  }
18
20
  init() {
19
21
  super.init()
20
- if (this.buildOptions.root === this.buildOptions.target) {
21
- this.task.dest = path.join(this.task.dest, FOLDER_GEN, FOLDER_SDC)
22
+ if (isStreamlinedMtx(this.cds)) {
23
+ this._delegate = new StreamlinedMtxBuilder(this)
22
24
  } else {
23
- this.task.dest = path.join(this.task.dest, FOLDER_SDC)
25
+ this._delegate = new ClassicMtxBuilder(this)
26
+ }
27
+ }
28
+
29
+ async build() {
30
+ return this._delegate.build()
31
+ }
32
+
33
+ async clean() {
34
+ return this._delegate.clean()
35
+ }
36
+ }
37
+
38
+ class StreamlinedMtxBuilder {
39
+ constructor(handler) {
40
+ this._handler = handler
41
+ }
42
+ async build() {
43
+ // Non-sidecar scenario: model-provider is implemented by the Nodejs app itself (default for Nodejs).
44
+ // Only create resources TAR, compiled CSN(s) are created by the Nodejs app build task.
45
+ const dest = this._handler.env.get("build.target") !== "." ? this._handler.task.dest : path.join(this._handler.task.dest, FOLDER_GEN)
46
+ const model = await this._handler.model()
47
+ if (!model) {
48
+ return
49
+ }
50
+ return new ResourcesTarProvider(this._handler).writeTar(dest, model)
51
+ }
52
+ async clean() {
53
+ // staging build content is deleted by BuildTaskEngine
54
+ if (this._handler.buildOptions.root === this._handler.buildOptions.target) {
55
+ // remove 'gen' folder
56
+ return fs.promises.rm(path.join(this._handler.task.dest, FOLDER_GEN), { force: true, recursive: true })
24
57
  }
25
58
  }
59
+ }
60
+
61
+ class ClassicMtxBuilder {
62
+ constructor(handler) {
63
+ this._handler = handler
64
+ }
65
+
26
66
  async build() {
27
- const model = await this.model()
67
+ if (this._handler.env.get("requires.toggles") === true) {
68
+ throw new Error("Feature toggles are only supported by Streamlined MTX")
69
+ }
70
+
71
+ const buildOptions = this._handler.buildOptions
72
+ const destSdc = buildOptions.root === buildOptions.target ? path.join(this._handler.task.dest, FOLDER_GEN, FOLDER_SDC) : path.join(this._handler.task.dest, FOLDER_SDC)
73
+ const model = await this._handler.model()
28
74
  if (!model) {
29
75
  return
30
76
  }
@@ -38,33 +84,29 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
38
84
  // copy base model sources
39
85
  await Promise.all(model.$sources.map(src => {
40
86
  if (src.includes(FOLDER_NODE_MODULES)) {
41
- return this.copy(src).to(src.substr(src.indexOf(FOLDER_NODE_MODULES)))
87
+ return this._handler.copy(src).to(path.join(destSdc, src.substr(src.indexOf(FOLDER_NODE_MODULES))))
42
88
  } else {
43
- const relSrc = path.relative(this.buildOptions.root, src)
89
+ const relSrc = path.relative(buildOptions.root, src)
44
90
  if (relSrc.startsWith("..")) {
45
- this.logger.warn(`model file is out of project scope, skipping file ${src}`)
91
+ this._handler.logger.warn(`model file is out of project scope, skipping file ${src}`)
46
92
  return Promise.resolve()
47
93
  }
48
- return this.copy(src).to(relSrc)
94
+ return this._handler.copy(src).to(path.join(destSdc, relSrc))
49
95
  }
50
96
  }))
51
97
 
52
98
  // collect and write language bundles into single i18n.json file
53
- await this.collectLanguageBundles(model, this.task.dest)
99
+ await this._handler.collectLanguageBundles(model, destSdc)
54
100
 
55
101
  // copy native hana content and templates
56
- await this._copyNativeContent(this.task.src, this.task.dest, tenantDbPath)
102
+ await this._copyNativeContent(this._handler.task.src, destSdc, tenantDbPath)
57
103
  }
58
104
 
59
105
  async clean() {
60
106
  // staging build content is deleted by BuildTaskEngine
61
- if (this.buildOptions.root === this.buildOptions.target) {
62
- // delete entire folder 'gen'
63
- const genDest = path.dirname(this.task.dest)
64
- if (path.basename(genDest) === FOLDER_GEN) {
65
- this.logger._debug && this.logger.debug(`Deleting build target folder ${genDest}`)
66
- await fs.remove(genDest)
67
- }
107
+ if (this._handler.buildOptions.root === this._handler.buildOptions.target) {
108
+ // remove 'gen' folder
109
+ return fs.promises.rm(path.join(this._handler.task.dest, FOLDER_GEN), { force: true, recursive: true })
68
110
  }
69
111
  }
70
112
 
@@ -78,13 +120,13 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
78
120
 
79
121
  if (tenantDbPath) {
80
122
  // copy any static HANA artifacts, e.g. .csv files
81
- const dbDest = path.resolve(dest, path.relative(this.buildOptions.root, tenantDbPath))
123
+ const dbDest = path.resolve(dest, path.relative(this._handler.buildOptions.root, tenantDbPath))
82
124
  await this._copyNativeHanaContent(tenantDbPath, dbDest)
83
125
  }
84
126
  }
85
127
 
86
128
  async _copyNativeHanaContent(src, dest) {
87
- return super.copyNativeContent(src, dest, (entry) => {
129
+ return this._handler.copyNativeContent(src, dest, (entry) => {
88
130
  if (fs.statSync(entry).isDirectory()) {
89
131
  const folderName = path.basename(entry)
90
132
  return folderName !== FOLDER_NODE_MODULES
@@ -95,7 +137,7 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
95
137
  }
96
138
 
97
139
  async _copyTemplates(src, dest) {
98
- return super.copyNativeContent(src, dest, (entry) => {
140
+ return this._handler.copyNativeContent(src, dest, (entry) => {
99
141
  if (fs.statSync(entry).isFile()) {
100
142
  return /\.cds$/.test(path.basename(entry))
101
143
  }
@@ -113,13 +155,13 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
113
155
  * @param {Object} model - the reflected csn for this SaaS application
114
156
  */
115
157
  _validateExtensionAllowLists(model, tenantDbPath) {
116
- let entityWhitelist = this.env.get("mtx.entity-whitelist")
117
- let serviceWhitelist = this.env.get("mtx.service-whitelist")
118
- let extensionAllowlist = this.env.get("mtx.extension-allowlist")
158
+ let entityWhitelist = this._handler.env.get("mtx.entity-whitelist")
159
+ let serviceWhitelist = this._handler.env.get("mtx.service-whitelist")
160
+ let extensionAllowlist = this._handler.env.get("mtx.extension-allowlist")
119
161
 
120
162
  // for java projects mtx configuration is part of sidecar config
121
163
  if (!entityWhitelist && !serviceWhitelist && !extensionAllowlist && tenantDbPath) {
122
- const dbEnv = this.env.for("cds", tenantDbPath)
164
+ const dbEnv = this._handler.env.for("cds", tenantDbPath)
123
165
  if (dbEnv && dbEnv.get("mtx")) {
124
166
  entityWhitelist = dbEnv.get("mtx.entity-whitelist")
125
167
  serviceWhitelist = dbEnv.get("mtx.service-whitelist")
@@ -127,52 +169,47 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
127
169
  }
128
170
  }
129
171
 
172
+ function isValid(e, pattern, nsPattern, kind) {
173
+ return e && e.name && (e.name === pattern || (nsPattern && e.name.startsWith(nsPattern))) && (!kind || e.kind === kind)
174
+ }
175
+
130
176
  if (extensionAllowlist || entityWhitelist || serviceWhitelist) {
131
177
  const invalidEntries = new Set()
132
- const reflected = this.cds.reflect(model)
133
- const services = reflected.services
134
- const entities = Object.values(reflected.entities)
178
+ const reflected = this._handler.cds.reflect(model)
135
179
 
136
180
  if (Array.isArray(extensionAllowlist)) {
137
181
  extensionAllowlist.forEach(allowListEntry => {
138
182
  if (Array.isArray(allowListEntry.for)) {
139
183
  allowListEntry.for.forEach(pattern => {
140
184
  if (pattern !== '*') {
141
- const nsPattern = pattern + '.'
142
- if (allowListEntry.kind === 'service') {
143
- if (!services.some(service => service.name === pattern || service.name.startsWith(nsPattern))) {
144
- invalidEntries.add(pattern)
145
- }
146
- } else {
147
- if (!entities.some(entity => entity.name === pattern || entity.name.startsWith(nsPattern))) {
148
- invalidEntries.add(pattern)
149
- }
185
+ if (!reflected.find(e => isValid(e, pattern, pattern + '.', allowListEntry.kind))) {
186
+ invalidEntries.add(pattern)
150
187
  }
151
188
  }
152
189
  })
153
190
  }
154
191
  })
155
192
  if (invalidEntries.size > 0) {
156
- this.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
193
+ this._handler.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
157
194
  }
158
195
  } else if (Array.isArray(entityWhitelist) || Array.isArray(serviceWhitelist)) {
159
196
  // validate whitelist entries
160
197
  if (Array.isArray(entityWhitelist)) {
161
198
  entityWhitelist.forEach(name => {
162
- if (!entities.some(entity => entity.name === name && entity.kind === 'entity')) {
199
+ if (!reflected.find(e => isValid(e, name, null, "entity"))) {
163
200
  invalidEntries.add(name)
164
201
  }
165
202
  })
166
203
  }
167
204
  if (Array.isArray(serviceWhitelist)) {
168
205
  serviceWhitelist.forEach(name => {
169
- if (!services.some(service => service.name === name && service.kind === 'service')) {
206
+ if (!reflected.find(e => isValid(e, name, null, "service"))) {
170
207
  invalidEntries.add(name)
171
208
  }
172
209
  })
173
210
  }
174
211
  if (invalidEntries.size > 0) {
175
- this.pushMessage(`Invalid entries found in 'entity-whitelist' or 'service-whitelist' - [${[...invalidEntries].join(', ')}]`, WARNING) //NOSONAR
212
+ this._handler.pushMessage(`Invalid entries found in 'entity-whitelist' or 'service-whitelist' - [${[...invalidEntries].join(', ')}]`, WARNING) //NOSONAR
176
213
  }
177
214
  }
178
215
  }
@@ -185,29 +222,29 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
185
222
  * @returns {string} the src folder of the tenant db module
186
223
  */
187
224
  async _getHanaTenantDbPath() {
188
- let tasks = this.buildOptions.tasks || []
189
- const modelPaths = this.resolveModel()
225
+ let tasks = this._handler.buildOptions.tasks || []
226
+ const modelPaths = this._handler.resolveModel()
190
227
 
191
228
  // ensure that the hana task is contained even if this mtx task has been executed solely using "cds build --for mtx"
192
229
  if (!tasks.find(task => task.for === BUILD_TASK_HANA)) {
193
230
  //mtx task might have been executed as separate task
194
- tasks = this.env.get("build.tasks") || []
231
+ tasks = this._handler.env.get("build.tasks") || []
195
232
  if (tasks.length === 0) {
196
- const provider = new BuildTaskProviderInternal(this.cds, this.logger)
197
- tasks = await provider.lookupTasks(this.buildOptions)
233
+ const provider = new BuildTaskProviderInternal(this._handler.cds, this._handler.logger)
234
+ await provider.lookupTasks(tasks, this._handler.buildOptions)
198
235
  }
199
236
  }
200
237
  // the SaaS app might use a tenant aware db as well as a shared db deployed using static hdi-deployer
201
238
  // pick the hana build task refering to the tenant aware db - the src path has to be contained in this build task's model options
202
- const hanaDbPaths = tasks.filter(task => task.for === BUILD_TASK_HANA).map(hanaTask => path.resolve(this.buildOptions.root, hanaTask.src || this.env.folders.db))
239
+ const hanaDbPaths = tasks.filter(task => task.for === BUILD_TASK_HANA).map(hanaTask => path.resolve(this._handler.buildOptions.root, hanaTask.src || this._handler.env.folders.db))
203
240
  let tenantDbPath = hanaDbPaths.find(hanaDbPath => hanaDbPaths.length === 1 || modelPaths.some(modelPath => path.dirname(modelPath) === hanaDbPath))
204
241
 
205
242
  if (!tenantDbPath) {
206
- tenantDbPath = path.join(this.buildOptions.root, this.env.folders.db)
243
+ tenantDbPath = path.join(this._handler.buildOptions.root, this._handler.env.folders.db)
207
244
  if (hanaDbPaths.length === 0) {
208
- this.pushMessage(`no 'hana' build task found, use default location '${tenantDbPath}'`, WARNING)
245
+ this._handler.pushMessage(`no 'hana' build task found, use default location '${tenantDbPath}'`, WARNING)
209
246
  } else {
210
- this.pushMessage(`no 'hana' build task found matching model scope '${this.task.options.model}', use default location '${tenantDbPath}'`, WARNING)
247
+ this._handler.pushMessage(`no 'hana' build task found matching model scope '${this._handler.task.options.model}', use default location '${tenantDbPath}'`, WARNING)
211
248
  }
212
249
  }
213
250
  return tenantDbPath
@@ -0,0 +1,68 @@
1
+ const fs = require('fs')
2
+ const path = require('path')
3
+ const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
4
+
5
+ const { BUILD_TASK_HANA } = require('../../constants')
6
+ const { WARNING, INFO } = require('../../buildTaskHandler')
7
+ const TAR_NAME = 'resources.tgz'
8
+
9
+ class ResourcesTarBuilder {
10
+ constructor(handler) {
11
+ this._handler = handler
12
+ }
13
+
14
+ async packTar(model) {
15
+ let resourceRoot = await this._getHanaTenantDbDest()
16
+ let files
17
+ if (resourceRoot) {
18
+ const hanaSrcFolder = path.join(resourceRoot, 'src')
19
+ const undeployJson = path.join(resourceRoot, 'undeploy.json')
20
+
21
+ // hana build task has already been executed
22
+ files = BuildTaskHandlerInternal._find(resourceRoot, (res) => {
23
+ if (res === undeployJson) {
24
+ return true
25
+ }
26
+ if (res.startsWith(hanaSrcFolder)) {
27
+ return true
28
+ }
29
+ return false
30
+ })
31
+ } else {
32
+ resourceRoot = path.join(this._handler.buildOptions.root, this._handler.env.folders.db)
33
+ const deploy = require('../../../../lib/deploy')
34
+ files = Object.keys(await deploy.resources(model))
35
+ }
36
+ if (files.length > 0) {
37
+ const { packTarArchive } = require('../../../../lib/utils/resources')
38
+ return packTarArchive(files, resourceRoot, false)
39
+ } else {
40
+ this._handler.pushMessage("No deployment resources found - skip resource.tgz", WARNING)
41
+ }
42
+ }
43
+
44
+ async writeTar(dest, model) {
45
+ const buffer = await this.packTar(model)
46
+ if (buffer) {
47
+ await this._handler.write(buffer).to(path.join(dest, TAR_NAME))
48
+ }
49
+ await fs.promises.mkdir(dest, { recursive: true })
50
+ }
51
+
52
+ /**
53
+ * Returns the build tasks of this project - either user defined or calculated by BuildTaskFactory.
54
+ * A build task of type 'hana' is enforced in order to copy existing native hana artifacts later on.
55
+ *
56
+ * @returns {string} the src folder of the tenant db module
57
+ */
58
+ async _getHanaTenantDbDest() {
59
+ const buildOptions = this._handler.buildOptions
60
+ let hanaTask = buildOptions.tasks ? buildOptions.tasks.find(task => task.for === BUILD_TASK_HANA) : undefined
61
+ if (!hanaTask) {
62
+ this._handler.pushMessage(`Found SQLite database configuration. Ensure that productive cloud deployments requiring SAP HANA database are built with 'production' profile.`, INFO)
63
+ return null
64
+ }
65
+ return hanaTask.dest
66
+ }
67
+ }
68
+ module.exports = ResourcesTarBuilder
@@ -0,0 +1,80 @@
1
+ /* eslint-disable no-empty */
2
+ const path = require('path')
3
+ const { FOLDER_GEN } = require('../../constants')
4
+ const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
5
+ const NodeCfModuleBuilder = require('../nodejs')
6
+ const ResourcesTarProvider = require('../mtx/resourcesTarBuilder')
7
+ const { INFO } = require('../buildTaskHandlerInternal')
8
+
9
+ const DEFAULT_MAIN_FOLDER = "_main"
10
+
11
+ class MtxSidecarModuleBuilder extends NodeCfModuleBuilder {
12
+ get priority() {
13
+ // should be scheduled after 'hana' build tasks are finished
14
+ return BuildTaskHandlerInternal.PRIORITY_MIN_VALUE
15
+ }
16
+ init() {
17
+ super.init()
18
+ if (this.buildOptions.root === this.buildOptions.target) {
19
+ this.task.dest = path.join(this.task.dest, FOLDER_GEN)
20
+ }
21
+ }
22
+
23
+ async build() {
24
+ // Sidecar scenario: model-provider is implemented as separate Nodejs app.
25
+ // Create resources TAR AND and compiled CSN(s) for the sidecar app.
26
+ // build.target=".": 'dest' -> 'model-provider/gen'
27
+ // build.target="gen": 'dest' -> 'gen/model-provider'
28
+ const sidecarEnv = this.env.for("cds", this.task.src)
29
+
30
+ // 1. build node application
31
+ await this._buildNodeApp(sidecarEnv)
32
+
33
+ // 2. build main application
34
+ await this._buildMainApp(sidecarEnv)
35
+ }
36
+
37
+ async _buildNodeApp(sidecarEnv) {
38
+ const sources = []
39
+ for (const name in sidecarEnv.requires) {
40
+ const service = sidecarEnv.requires[name]
41
+ if (service.model) {
42
+ sources.push(service.model)
43
+ }
44
+ }
45
+ const model = await this.cds.load(sources, this.options)
46
+ const destSidecar = this.task.dest
47
+ const destSidecarSrc = path.join(destSidecar, this.env.folders.srv)
48
+
49
+ await this.compileToJson(model, destSidecarSrc)
50
+ await this.collectLanguageBundles(model, destSidecarSrc)
51
+ await this._copyProjectRootContent(this.task.src, destSidecar)
52
+ }
53
+
54
+ async _buildMainApp(sidecarEnv) {
55
+ let main = sidecarEnv.requires['cds.xt.ModelProviderService']?.root
56
+ if (!main) {
57
+ throw new Error("Invalid sidecar configuration - model-provider.root configuration missing")
58
+ }
59
+ const profiles = this.env.get("profiles") || []
60
+ if (!profiles.includes("production") && !profiles.includes("prod")) {
61
+ main = DEFAULT_MAIN_FOLDER
62
+ // root should represent the production use case and not development
63
+ this.pushMessage(`Sidecar main application build results are created in folder '${main}'. Use the 'production' profile if the folder is configured differently.`, INFO)
64
+ }
65
+ const destRoot = this.task.dest
66
+ const destMain = path.join(destRoot, main)
67
+ const destMainSrv = path.join(destMain, this.env.folders.srv)
68
+ const csn = await this.model()
69
+ if (!csn) {
70
+ return
71
+ }
72
+ const { dictionary, sources } = await this.compileAll(csn, destMainSrv, destMain)
73
+ await this.collectAllLanguageBundles(dictionary, sources, destMainSrv, destMain)
74
+
75
+ // create resources TAR
76
+ // resources are determined based on available database build task, SQLite as fallback
77
+ await new ResourcesTarProvider(this).writeTar(destMain, csn)
78
+ }
79
+ }
80
+ module.exports = MtxSidecarModuleBuilder