@sap/cds 5.9.8 → 6.0.3

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