@sap/cds-dk 10.1.1 → 10.2.0

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 (870) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/bin/add.js +7 -2
  3. package/bin/bind.js +0 -2
  4. package/bin/bindings.js +35 -0
  5. package/bin/build.js +11 -6
  6. package/bin/compile/index.js +1 -0
  7. package/bin/completion/index.js +10 -448
  8. package/bin/completion/scripts/cds.fish +24 -16
  9. package/bin/completion/scripts/cds.ps1 +26 -25
  10. package/bin/completion/scripts/cds.sh +22 -19
  11. package/bin/completion/scripts/cds.zsh +22 -19
  12. package/bin/deploy/index.js +1 -1
  13. package/bin/deploy/to-hana/hana.js +5 -4
  14. package/bin/env.js +0 -1
  15. package/bin/eval.js +9 -5
  16. package/bin/export.js +6 -4
  17. package/bin/help/export.md +28 -4
  18. package/bin/import.js +6 -5
  19. package/bin/inspect.js +0 -1
  20. package/bin/login.js +28 -3
  21. package/bin/repl.js +82 -26
  22. package/bin/run.js +6 -7
  23. package/bin/serve.js +6 -7
  24. package/bin/up.js +7 -2
  25. package/bin/upgrade/steps/install.js +6 -6
  26. package/bin/watch/index.js +1 -0
  27. package/lib/build/index.js +11 -7
  28. package/lib/build/plugins/featureToggles.js +2 -2
  29. package/lib/build/plugins/hana/index.js +1 -1
  30. package/lib/build/plugins/helm/files/subcharts/web-application/Chart.yaml +1 -1
  31. package/lib/build/plugins/helm/files/subcharts/web-application/templates/_helpers.tpl +7 -0
  32. package/lib/build/plugins/helm/files/subcharts/web-application/templates/api-rule.yaml +1 -0
  33. package/lib/build/plugins/helm/files/subcharts/web-application/templates/service-binding.yaml +4 -4
  34. package/lib/build/plugins/helm/files/subcharts/web-application/values.schema.json +13 -0
  35. package/lib/build/plugins/helm/files/subcharts/web-application/values.yaml +7 -1
  36. package/lib/build/plugins/internal.js +0 -26
  37. package/lib/build/plugins/java/index.js +5 -1
  38. package/lib/build/plugins/nodejs/index.js +13 -4
  39. package/lib/build/util.js +4 -5
  40. package/lib/cds.js +8 -2
  41. package/lib/env/schemas/cds-rc.js +5 -0
  42. package/lib/import/importapi.js +2 -3
  43. package/lib/init/constants.js +1 -1
  44. package/lib/init/index.js +8 -3
  45. package/lib/init/merge.js +21 -17
  46. package/lib/init/plugin.js +1 -1
  47. package/lib/init/projectReader.js +13 -10
  48. package/lib/init/registries/mta.js +0 -6
  49. package/lib/init/template/ai/index.js +4 -4
  50. package/lib/init/template/ams/files/extensionDeveloper.dcl +6 -0
  51. package/lib/init/template/ams/files/mta.yaml.hbs +6 -0
  52. package/lib/init/template/ams/files/sidecar.package.json.hbs +5 -0
  53. package/lib/init/template/ams/index.js +42 -40
  54. package/lib/init/template/app-frontend/files/mta.yaml.hbs +2 -0
  55. package/lib/init/template/app-frontend/files/ui5.yaml.hbs +0 -4
  56. package/lib/init/template/app-frontend/index.js +29 -24
  57. package/lib/init/template/application-logging/index.js +6 -6
  58. package/lib/init/template/approuter/files/xs-app.json.hbs +22 -0
  59. package/lib/init/template/approuter/index.js +20 -13
  60. package/lib/init/template/attachments/index.js +3 -3
  61. package/lib/init/template/audit-logging/index.js +4 -4
  62. package/lib/init/template/cloud-logging/index.js +12 -6
  63. package/lib/init/template/completion/completionSetup.js +19 -6
  64. package/lib/init/template/connectivity/index.js +3 -3
  65. package/lib/init/template/data/as-csv.js +7 -4
  66. package/lib/init/template/data/as-json.js +77 -20
  67. package/lib/init/template/destination/index.js +12 -9
  68. package/lib/init/template/dynatrace/index.js +5 -5
  69. package/lib/init/template/enterprise-messaging/index.js +10 -7
  70. package/lib/init/template/enterprise-messaging-shared/index.js +4 -4
  71. package/lib/init/template/event-mesh/index.js +3 -0
  72. package/lib/init/template/extensibility/index.js +2 -2
  73. package/lib/init/template/extension/index.js +26 -0
  74. package/lib/init/template/github-actions/index.js +3 -3
  75. package/lib/init/template/hana/files/package.json.hbs +3 -2
  76. package/lib/init/template/hana/index.js +5 -5
  77. package/lib/init/template/hana-serverless/index.js +3 -3
  78. package/lib/init/template/html5-repo/files/mta.yaml.hbs +2 -0
  79. package/lib/init/template/html5-repo/files/ui5.yaml.hbs +0 -4
  80. package/lib/init/template/html5-repo/index.js +68 -40
  81. package/lib/init/template/http/index.js +1 -1
  82. package/lib/init/template/ias/index.js +7 -7
  83. package/lib/init/template/initial/files/.gitignore.hbs +1 -0
  84. package/lib/init/template/kafka/index.js +3 -3
  85. package/lib/init/template/kyma/index.js +7 -9
  86. package/lib/init/template/malware-scanner/index.js +3 -3
  87. package/lib/init/template/mta/index.js +6 -3
  88. package/lib/init/template/multitenancy/index.js +6 -7
  89. package/lib/init/template/notifications/index.js +2 -2
  90. package/lib/init/template/portal/index.js +16 -10
  91. package/lib/init/template/postgres/index.js +5 -5
  92. package/lib/init/template/react/files/index.html.hbs +1 -1
  93. package/lib/init/template/react/files/package.json.hbs +3 -2
  94. package/lib/init/template/react/files/src/{App.jsx.hbs → App.{{jsxExtension}}.hbs} +8 -2
  95. package/lib/init/template/react/files/src/{main.jsx → main.{{jsxExtension}}.hbs} +2 -2
  96. package/lib/init/template/react/index.js +23 -4
  97. package/lib/init/template/react/typescript/src/vite-env.d.ts +1 -0
  98. package/lib/init/template/react/typescript/tsconfig.json.hbs +16 -0
  99. package/lib/init/template/redis/index.js +2 -2
  100. package/lib/init/template/side-by-side-extensibility/index.js +6 -3
  101. package/lib/init/template/typescript/files/tsconfig.json +3 -1
  102. package/lib/init/template/vue/files/index.html.hbs +1 -1
  103. package/lib/init/template/vue/files/package.json.hbs +2 -1
  104. package/lib/init/template/vue/files/src/App.vue.hbs +8 -2
  105. package/lib/init/template/vue/index.js +20 -4
  106. package/lib/init/template/vue/typescript/tsconfig.json +11 -0
  107. package/lib/init/template/workzone-standard/files/mta.yaml.hbs +2 -2
  108. package/lib/init/template/workzone-standard/index.js +30 -28
  109. package/lib/init/template/xsuaa/files/mta.yaml.hbs +1 -1
  110. package/lib/init/template/xsuaa/files/values.yaml.hbs +1 -1
  111. package/lib/init/template/xsuaa/index.js +34 -22
  112. package/lib/mtx/auth_manager.js +8 -2
  113. package/lib/mtx/browser_login.js +181 -0
  114. package/lib/mtx/params.js +6 -0
  115. package/lib/mtx/settings_manager.js +29 -4
  116. package/lib/util/cf.js +44 -8
  117. package/lib/util/fs.js +2 -2
  118. package/node_modules/@cap-js/db-service/CHANGELOG.md +23 -0
  119. package/node_modules/@cap-js/db-service/lib/cqn2pql.js +4 -0
  120. package/node_modules/@cap-js/db-service/lib/cqn2sql.js +3 -0
  121. package/node_modules/@cap-js/db-service/lib/cqn4sql.js +17 -28
  122. package/node_modules/@cap-js/db-service/lib/infer/index.js +20 -27
  123. package/node_modules/@cap-js/db-service/package.json +1 -1
  124. package/node_modules/@cap-js/openapi/cds-plugin.js +12 -0
  125. package/node_modules/@cap-js/openapi/index.js +3 -1
  126. package/node_modules/@cap-js/openapi/lib/compile/csdl2openapi.js +652 -413
  127. package/node_modules/@cap-js/openapi/lib/compile/diagram.js +16 -13
  128. package/node_modules/@cap-js/openapi/lib/compile/index.js +10 -7
  129. package/node_modules/@cap-js/openapi/lib/compile/property-util.js +51 -0
  130. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/importOpenAPI.js +12 -9
  131. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/index.js +4 -3
  132. package/node_modules/@cap-js/openapi/package.json +71 -3
  133. package/node_modules/@cap-js/sqlite/CHANGELOG.md +18 -0
  134. package/node_modules/@cap-js/sqlite/package.json +3 -3
  135. package/node_modules/@isaacs/fs-minipass/LICENSE +15 -0
  136. package/node_modules/@isaacs/fs-minipass/README.md +71 -0
  137. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts +118 -0
  138. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts.map +1 -0
  139. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +430 -0
  140. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js.map +1 -0
  141. package/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +3 -0
  142. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts +118 -0
  143. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts.map +1 -0
  144. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js +420 -0
  145. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js.map +1 -0
  146. package/node_modules/@isaacs/fs-minipass/dist/esm/package.json +3 -0
  147. package/node_modules/@isaacs/fs-minipass/package.json +72 -0
  148. package/node_modules/@sap/cds/CHANGELOG.md +71 -1
  149. package/node_modules/@sap/cds/_i18n/messages_ar.properties +1 -0
  150. package/node_modules/@sap/cds/_i18n/messages_bg.properties +1 -0
  151. package/node_modules/@sap/cds/_i18n/messages_cs.properties +1 -0
  152. package/node_modules/@sap/cds/_i18n/messages_da.properties +1 -0
  153. package/node_modules/@sap/cds/_i18n/messages_de.properties +1 -0
  154. package/node_modules/@sap/cds/_i18n/messages_el.properties +1 -0
  155. package/node_modules/@sap/cds/_i18n/messages_en.properties +1 -0
  156. package/node_modules/@sap/cds/_i18n/messages_es.properties +1 -0
  157. package/node_modules/@sap/cds/_i18n/messages_es_MX.properties +1 -0
  158. package/node_modules/@sap/cds/_i18n/messages_fi.properties +1 -0
  159. package/node_modules/@sap/cds/_i18n/messages_fr.properties +1 -0
  160. package/node_modules/@sap/cds/_i18n/messages_he.properties +1 -0
  161. package/node_modules/@sap/cds/_i18n/messages_hr.properties +1 -0
  162. package/node_modules/@sap/cds/_i18n/messages_hu.properties +1 -0
  163. package/node_modules/@sap/cds/_i18n/messages_it.properties +1 -0
  164. package/node_modules/@sap/cds/_i18n/messages_ja.properties +1 -0
  165. package/node_modules/@sap/cds/_i18n/messages_kk.properties +1 -0
  166. package/node_modules/@sap/cds/_i18n/messages_ko.properties +1 -0
  167. package/node_modules/@sap/cds/_i18n/messages_ms.properties +1 -0
  168. package/node_modules/@sap/cds/_i18n/messages_nl.properties +1 -0
  169. package/node_modules/@sap/cds/_i18n/messages_no.properties +1 -0
  170. package/node_modules/@sap/cds/_i18n/messages_pl.properties +1 -0
  171. package/node_modules/@sap/cds/_i18n/messages_pt.properties +1 -0
  172. package/node_modules/@sap/cds/_i18n/messages_ro.properties +1 -0
  173. package/node_modules/@sap/cds/_i18n/messages_ru.properties +1 -0
  174. package/node_modules/@sap/cds/_i18n/messages_sh.properties +1 -0
  175. package/node_modules/@sap/cds/_i18n/messages_sk.properties +1 -0
  176. package/node_modules/@sap/cds/_i18n/messages_sl.properties +1 -0
  177. package/node_modules/@sap/cds/_i18n/messages_sv.properties +1 -0
  178. package/node_modules/@sap/cds/_i18n/messages_th.properties +1 -0
  179. package/node_modules/@sap/cds/_i18n/messages_tr.properties +1 -0
  180. package/node_modules/@sap/cds/_i18n/messages_uk.properties +1 -0
  181. package/node_modules/@sap/cds/_i18n/messages_vi.properties +1 -0
  182. package/node_modules/@sap/cds/_i18n/messages_zh_CN.properties +1 -0
  183. package/node_modules/@sap/cds/_i18n/messages_zh_TW.properties +1 -0
  184. package/node_modules/@sap/cds/app/index-client.js +164 -0
  185. package/node_modules/@sap/cds/app/index.css +598 -87
  186. package/node_modules/@sap/cds/app/index.html +54 -30
  187. package/node_modules/@sap/cds/app/index.js +311 -67
  188. package/node_modules/@sap/cds/app/table.html +226 -0
  189. package/node_modules/@sap/cds/app/table.js +302 -0
  190. package/node_modules/@sap/cds/bin/serve.js +3 -2
  191. package/node_modules/@sap/cds/common.cds +3 -3
  192. package/node_modules/@sap/cds/eslint.config.mjs +2 -0
  193. package/node_modules/@sap/cds/lib/compile/cdsc.js +7 -0
  194. package/node_modules/@sap/cds/lib/compile/for/embeddings.js +27 -0
  195. package/node_modules/@sap/cds/lib/compile/load.js +2 -2
  196. package/node_modules/@sap/cds/lib/compile/minify.js +17 -2
  197. package/node_modules/@sap/cds/lib/compile/parse.js +3 -0
  198. package/node_modules/@sap/cds/lib/compile/resolve.js +16 -14
  199. package/node_modules/@sap/cds/lib/core/classes.js +1 -0
  200. package/node_modules/@sap/cds/lib/dbs/cds-deploy.js +4 -5
  201. package/node_modules/@sap/cds/lib/env/cds-env.js +132 -70
  202. package/node_modules/@sap/cds/lib/env/cds-requires/auth-strategies.js +62 -0
  203. package/node_modules/@sap/cds/lib/env/cds-requires/databases.js +49 -0
  204. package/node_modules/@sap/cds/lib/env/cds-requires/embeddings.js +8 -0
  205. package/node_modules/@sap/cds/lib/env/cds-requires/index.js +27 -0
  206. package/node_modules/@sap/cds/lib/env/cds-requires/messaging.js +82 -0
  207. package/node_modules/@sap/cds/lib/env/cds-requires/platform.js +23 -0
  208. package/node_modules/@sap/cds/lib/env/cds-requires/queues.js +34 -0
  209. package/node_modules/@sap/cds/lib/env/cds-requires/services.js +32 -0
  210. package/node_modules/@sap/cds/lib/env/defaults.js +9 -1
  211. package/node_modules/@sap/cds/lib/i18n/files.js +4 -4
  212. package/node_modules/@sap/cds/lib/i18n/locale.js +1 -1
  213. package/node_modules/@sap/cds/lib/index.js +9 -9
  214. package/node_modules/@sap/cds/lib/log/cds-log.js +3 -3
  215. package/node_modules/@sap/cds/lib/ql/SELECT.js +2 -0
  216. package/node_modules/@sap/cds/lib/ql/UPDATE.js +1 -1
  217. package/node_modules/@sap/cds/lib/ql/cds.ql-Query.js +4 -1
  218. package/node_modules/@sap/cds/lib/ql/core/@types/cqn.d.ts +146 -0
  219. package/node_modules/@sap/cds/lib/ql/core/@types/exprs.d.ts +51 -0
  220. package/node_modules/@sap/cds/lib/ql/core/@types/index.d.ts +29 -0
  221. package/node_modules/@sap/cds/lib/ql/core/@types/package.json +7 -0
  222. package/node_modules/@sap/cds/lib/ql/core/@types/ql/delete.d.ts +8 -0
  223. package/node_modules/@sap/cds/lib/ql/core/@types/ql/insert.d.ts +19 -0
  224. package/node_modules/@sap/cds/lib/ql/core/@types/ql/select.d.ts +24 -0
  225. package/node_modules/@sap/cds/lib/ql/core/@types/ql/update.d.ts +10 -0
  226. package/node_modules/@sap/cds/lib/ql/core/@types/query.d.ts +18 -0
  227. package/node_modules/@sap/cds/lib/ql/core/cql/parser.min.js +1 -0
  228. package/node_modules/@sap/cds/lib/ql/core/lib/index.js +69 -0
  229. package/node_modules/@sap/cds/lib/ql/core/lib/ql/cache.js +34 -0
  230. package/node_modules/@sap/cds/lib/ql/core/lib/ql/call-action.js +6 -0
  231. package/node_modules/@sap/cds/lib/ql/core/lib/ql/delete.js +8 -0
  232. package/node_modules/@sap/cds/lib/ql/core/lib/ql/insert.js +26 -0
  233. package/node_modules/@sap/cds/lib/ql/core/lib/ql/select.js +22 -0
  234. package/node_modules/@sap/cds/lib/ql/core/lib/ql/update.js +26 -0
  235. package/node_modules/@sap/cds/lib/ql/core/lib/query.js +85 -0
  236. package/node_modules/@sap/cds/lib/ql/core/lib/xl/fluent.js +47 -0
  237. package/node_modules/@sap/cds/lib/ql/core/lib/xl/ttl.js +24 -0
  238. package/node_modules/@sap/cds/lib/ql/core/license +201 -0
  239. package/node_modules/@sap/cds/lib/ql/core/package.json +24 -0
  240. package/node_modules/@sap/cds/lib/ql/core/readme.md +99 -0
  241. package/node_modules/@sap/cds/lib/ql/core/upstream.json +5 -0
  242. package/node_modules/@sap/cds/lib/req/spawn.js +1 -1
  243. package/node_modules/@sap/cds/lib/srv/bindings.js +111 -115
  244. package/node_modules/@sap/cds/lib/srv/cds-connect.js +11 -10
  245. package/node_modules/@sap/cds/lib/srv/cds-serve.js +16 -7
  246. package/node_modules/@sap/cds/lib/srv/cds.Service.js +13 -7
  247. package/node_modules/@sap/cds/lib/srv/factory.js +8 -10
  248. package/node_modules/@sap/cds/lib/srv/middlewares/auth/ias-auth.js +35 -32
  249. package/node_modules/@sap/cds/lib/srv/middlewares/auth/jwt-auth.js +5 -1
  250. package/node_modules/@sap/cds/lib/srv/middlewares/auth/mocked-users.js +1 -1
  251. package/node_modules/@sap/cds/lib/srv/protocols/hcql.js +230 -79
  252. package/node_modules/@sap/cds/lib/srv/protocols/http.js +7 -3
  253. package/node_modules/@sap/cds/lib/srv/protocols/index.js +7 -2
  254. package/node_modules/@sap/cds/lib/srv/srv-dispatch.js +2 -2
  255. package/node_modules/@sap/cds/lib/utils/cds-utils.js +37 -0
  256. package/node_modules/@sap/cds/lib/utils/csv-reader.js +2 -2
  257. package/node_modules/@sap/cds/libx/_runtime/common/generic/assert.js +18 -27
  258. package/node_modules/@sap/cds/libx/_runtime/common/generic/crud.js +8 -2
  259. package/node_modules/@sap/cds/libx/_runtime/common/utils/cqn.js +1 -1
  260. package/node_modules/@sap/cds/libx/_runtime/common/utils/rewriteAsterisks.js +1 -1
  261. package/node_modules/@sap/cds/libx/_runtime/fiori/lean-draft.js +122 -85
  262. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/authorizedRequest.js +24 -1
  263. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/normalizeIncomingMessage.js +1 -1
  264. package/node_modules/@sap/cds/libx/_runtime/messaging/kafka.js +1 -1
  265. package/node_modules/@sap/cds/libx/_runtime/remote/Service.js +2 -2
  266. package/node_modules/@sap/cds/libx/_runtime/remote/utils/client.js +3 -2
  267. package/node_modules/@sap/cds/libx/_runtime/remote/utils/query.js +11 -6
  268. package/node_modules/@sap/cds/libx/http/location.js +10 -11
  269. package/node_modules/@sap/cds/libx/odata/middleware/create.js +4 -0
  270. package/node_modules/@sap/cds/libx/odata/middleware/metadata.js +1 -1
  271. package/node_modules/@sap/cds/libx/odata/middleware/operation.js +3 -0
  272. package/node_modules/@sap/cds/libx/odata/middleware/parse.js +9 -0
  273. package/node_modules/@sap/cds/libx/odata/middleware/read.js +7 -1
  274. package/node_modules/@sap/cds/libx/odata/middleware/update.js +5 -1
  275. package/node_modules/@sap/cds/libx/odata/parse/afterburner.js +3 -3
  276. package/node_modules/@sap/cds/libx/odata/parse/multipartToJson.js +1 -1
  277. package/node_modules/@sap/cds/libx/odata/utils/ieee754.js +20 -0
  278. package/node_modules/@sap/cds/libx/queue/SchedulingService.js +4 -0
  279. package/node_modules/@sap/cds/libx/queue/api.js +1 -1
  280. package/node_modules/@sap/cds/libx/queue/index.js +46 -10
  281. package/node_modules/@sap/cds/libx/queue/processing.js +52 -16
  282. package/node_modules/@sap/cds/libx/queue/utils.js +3 -0
  283. package/node_modules/@sap/cds/libx/rest/RestAdapter.js +1 -0
  284. package/node_modules/@sap/cds/package.json +2 -2
  285. package/node_modules/@sap/cds/server.js +1 -0
  286. package/node_modules/@sap/cds/srv/ucl-service.cds +1 -0
  287. package/node_modules/@sap/cds/tasks/enterprise-messaging-deploy.js +13 -5
  288. package/node_modules/@sap/cds-compiler/CHANGELOG.md +83 -0
  289. package/node_modules/@sap/cds-compiler/bin/cdsse.js +1 -1
  290. package/node_modules/@sap/cds-compiler/doc/EffectiveCSN.md +3314 -0
  291. package/node_modules/@sap/cds-compiler/lib/api/main.js +9 -6
  292. package/node_modules/@sap/cds-compiler/lib/api/options.js +3 -3
  293. package/node_modules/@sap/cds-compiler/lib/{model → base}/csnUtils.js +5 -5
  294. package/node_modules/@sap/cds-compiler/lib/base/message-registry.js +54 -6
  295. package/node_modules/@sap/cds-compiler/lib/base/optionProcessor.js +4 -4
  296. package/node_modules/@sap/cds-compiler/lib/{model → base}/sortViews.js +1 -1
  297. package/node_modules/@sap/cds-compiler/lib/checks/assocOutsideService.js +1 -1
  298. package/node_modules/@sap/cds-compiler/lib/checks/checkForTypes.js +1 -1
  299. package/node_modules/@sap/cds-compiler/lib/checks/checkPathsInStoredCalcElement.js +1 -1
  300. package/node_modules/@sap/cds-compiler/lib/checks/elements.js +37 -3
  301. package/node_modules/@sap/cds-compiler/lib/checks/enricher.js +1 -1
  302. package/node_modules/@sap/cds-compiler/lib/checks/existsInForbiddenPlaces.js +1 -1
  303. package/node_modules/@sap/cds-compiler/lib/checks/hasPersistedElements.js +1 -1
  304. package/node_modules/@sap/cds-compiler/lib/checks/manyExpand.js +1 -1
  305. package/node_modules/@sap/cds-compiler/lib/checks/manyNavigations.js +1 -1
  306. package/node_modules/@sap/cds-compiler/lib/checks/onConditions.js +1 -1
  307. package/node_modules/@sap/cds-compiler/lib/checks/parameters.js +1 -1
  308. package/node_modules/@sap/cds-compiler/lib/checks/queryNoDbArtifacts.js +1 -1
  309. package/node_modules/@sap/cds-compiler/lib/checks/selectItems.js +1 -1
  310. package/node_modules/@sap/cds-compiler/lib/checks/structuredAnnoExpressions.js +1 -1
  311. package/node_modules/@sap/cds-compiler/lib/checks/typeParameters.js +1 -1
  312. package/node_modules/@sap/cds-compiler/lib/checks/types.js +1 -1
  313. package/node_modules/@sap/cds-compiler/lib/checks/validator.js +1 -1
  314. package/node_modules/@sap/cds-compiler/lib/compiler/assert-consistency.js +20 -12
  315. package/node_modules/@sap/cds-compiler/lib/compiler/builtins.js +9 -4
  316. package/node_modules/@sap/cds-compiler/lib/compiler/checks.js +50 -0
  317. package/node_modules/@sap/cds-compiler/lib/compiler/define.js +303 -323
  318. package/node_modules/@sap/cds-compiler/lib/compiler/dictionaries.js +5 -0
  319. package/node_modules/@sap/cds-compiler/lib/compiler/extend.js +1015 -1177
  320. package/node_modules/@sap/cds-compiler/lib/compiler/generate.js +55 -42
  321. package/node_modules/@sap/cds-compiler/lib/compiler/populate.js +74 -45
  322. package/node_modules/@sap/cds-compiler/lib/compiler/propagator.js +1 -0
  323. package/node_modules/@sap/cds-compiler/lib/compiler/resolve.js +6 -4
  324. package/node_modules/@sap/cds-compiler/lib/compiler/shared.js +30 -49
  325. package/node_modules/@sap/cds-compiler/lib/compiler/utils.js +32 -18
  326. package/node_modules/@sap/cds-compiler/lib/edm/annotations/edmJson.js +3 -3
  327. package/node_modules/@sap/cds-compiler/lib/edm/annotations/genericTranslation.js +2 -2
  328. package/node_modules/@sap/cds-compiler/lib/edm/annotations/preprocessAnnotations.js +2 -3
  329. package/node_modules/@sap/cds-compiler/lib/edm/csn2edm.js +1 -1
  330. package/node_modules/@sap/cds-compiler/lib/edm/edm.js +6 -7
  331. package/node_modules/@sap/cds-compiler/lib/edm/edmAnnoPreprocessor.js +1 -1
  332. package/node_modules/@sap/cds-compiler/lib/edm/edmInboundChecks.js +1 -1
  333. package/node_modules/@sap/cds-compiler/lib/edm/edmPreprocessor.js +1 -1
  334. package/node_modules/@sap/cds-compiler/lib/edm/edmUtils.js +12 -7
  335. package/node_modules/@sap/cds-compiler/lib/gen/CdlGrammar.checksum +1 -1
  336. package/node_modules/@sap/cds-compiler/lib/gen/CdlParser.js +15 -15
  337. package/node_modules/@sap/cds-compiler/lib/gen/Dictionary.json +7 -0
  338. package/node_modules/@sap/cds-compiler/lib/json/from-csn.js +30 -30
  339. package/node_modules/@sap/cds-compiler/lib/json/to-csn.js +2 -1
  340. package/node_modules/@sap/cds-compiler/lib/main.js +4 -1
  341. package/node_modules/@sap/cds-compiler/lib/parsers/AstBuildingParser.js +42 -15
  342. package/node_modules/@sap/cds-compiler/lib/render/DuplicateChecker.js +37 -11
  343. package/node_modules/@sap/cds-compiler/lib/render/manageConstraints.js +1 -1
  344. package/node_modules/@sap/cds-compiler/lib/render/toCdl.js +11 -6
  345. package/node_modules/@sap/cds-compiler/lib/render/toRename.js +1 -1
  346. package/node_modules/@sap/cds-compiler/lib/render/toSql.js +74 -24
  347. package/node_modules/@sap/cds-compiler/lib/render/utils/common.js +1 -1
  348. package/node_modules/@sap/cds-compiler/lib/render/utils/operators.js +81 -0
  349. package/node_modules/@sap/cds-compiler/lib/render/utils/sql.js +17 -10
  350. package/node_modules/@sap/cds-compiler/lib/transform/db/assertUnique.js +1 -1
  351. package/node_modules/@sap/cds-compiler/lib/transform/db/associations.js +3 -4
  352. package/node_modules/@sap/cds-compiler/lib/transform/db/assocsToQueries/transformExists.js +1 -1
  353. package/node_modules/@sap/cds-compiler/lib/transform/db/backlinks.js +2 -2
  354. package/node_modules/@sap/cds-compiler/lib/transform/db/cdsPersistence.js +1 -1
  355. package/node_modules/@sap/cds-compiler/lib/transform/db/constraints.js +6 -5
  356. package/node_modules/@sap/cds-compiler/lib/transform/db/expansion.js +7 -1
  357. package/node_modules/@sap/cds-compiler/lib/transform/db/flattening.js +2 -2
  358. package/node_modules/@sap/cds-compiler/lib/{modelCompare/compare.js → transform/db/migration/diffModels.js} +5 -5
  359. package/node_modules/@sap/cds-compiler/lib/{modelCompare/utils/filter.js → transform/db/migration/filterDiff.js} +2 -2
  360. package/node_modules/@sap/cds-compiler/lib/transform/db/processSqlServices.js +1 -1
  361. package/node_modules/@sap/cds-compiler/lib/transform/db/rewriteCalculatedElements.js +1 -1
  362. package/node_modules/@sap/cds-compiler/lib/transform/db/temporal.js +1 -1
  363. package/node_modules/@sap/cds-compiler/lib/transform/db/views.js +2 -6
  364. package/node_modules/@sap/cds-compiler/lib/transform/draft/db.js +1 -1
  365. package/node_modules/@sap/cds-compiler/lib/transform/draft/odata.js +1 -1
  366. package/node_modules/@sap/cds-compiler/lib/transform/effective/annotations.js +1 -1
  367. package/node_modules/@sap/cds-compiler/lib/transform/effective/associations.js +1 -1
  368. package/node_modules/@sap/cds-compiler/lib/transform/effective/flattening.js +1 -1
  369. package/node_modules/@sap/cds-compiler/lib/transform/effective/main.js +3 -2
  370. package/node_modules/@sap/cds-compiler/lib/transform/effective/misc.js +2 -1
  371. package/node_modules/@sap/cds-compiler/lib/transform/effective/queries.js +1 -1
  372. package/node_modules/@sap/cds-compiler/lib/transform/effective/types.js +1 -1
  373. package/node_modules/@sap/cds-compiler/lib/transform/forOdata.js +1 -1
  374. package/node_modules/@sap/cds-compiler/lib/transform/forRelationalDB.js +9 -4
  375. package/node_modules/@sap/cds-compiler/lib/transform/localized.js +1 -1
  376. package/node_modules/@sap/cds-compiler/lib/transform/odata/adaptAnnotationRefs.js +5 -11
  377. package/node_modules/@sap/cds-compiler/lib/transform/odata/createForeignKeys.js +1 -1
  378. package/node_modules/@sap/cds-compiler/lib/transform/odata/flattening.js +4 -4
  379. package/node_modules/@sap/cds-compiler/lib/transform/odata/foreignKeyRefsInXprAnnos.js +5 -3
  380. package/node_modules/@sap/cds-compiler/lib/transform/odata/toFinalBaseType.js +29 -5
  381. package/node_modules/@sap/cds-compiler/lib/transform/odata/typesExposure.js +13 -3
  382. package/node_modules/@sap/cds-compiler/lib/transform/odata/utils.js +9 -0
  383. package/node_modules/@sap/cds-compiler/lib/transform/transformUtils.js +2 -2
  384. package/node_modules/@sap/cds-compiler/lib/transform/translateAssocsToJoins.js +1 -1
  385. package/node_modules/@sap/cds-compiler/lib/transform/tupleExpansion.js +1 -1
  386. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/coreComputed.js +1 -1
  387. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/universalCsnEnricher.js +1 -1
  388. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/utils.js +1 -1
  389. package/node_modules/@sap/cds-compiler/package.json +1 -1
  390. package/node_modules/@sap/cds-mtxs/CHANGELOG.md +47 -0
  391. package/node_modules/@sap/cds-mtxs/bin/cds-mtx-migrate.js +4 -6
  392. package/node_modules/@sap/cds-mtxs/bin/cds-mtx.js +5 -4
  393. package/node_modules/@sap/cds-mtxs/cds-plugin.js +38 -2
  394. package/node_modules/@sap/cds-mtxs/db/t0.cds +7 -0
  395. package/node_modules/@sap/cds-mtxs/lib/utils.js +129 -20
  396. package/node_modules/@sap/cds-mtxs/package.json +15 -14
  397. package/node_modules/@sap/cds-mtxs/srv/cf/abstract-provisioning-service.js +13 -12
  398. package/node_modules/@sap/cds-mtxs/srv/cf/saas-provisioning-service.cds +1 -0
  399. package/node_modules/@sap/cds-mtxs/srv/cf/sms-provisioning-service.cds +1 -0
  400. package/node_modules/@sap/cds-mtxs/srv/extensibility/compat/update.js +5 -2
  401. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/config.js +1 -2
  402. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/csv-allowlist.js +64 -0
  403. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/index.js +4 -2
  404. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/protected-namespace.js +67 -5
  405. package/node_modules/@sap/cds-mtxs/srv/extensibility-service.js +179 -15
  406. package/node_modules/@sap/cds-mtxs/srv/jobs-service.js +12 -3
  407. package/node_modules/@sap/cds-mtxs/srv/plugins/common.js +33 -12
  408. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/ctnr-mgr-base.js +24 -6
  409. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-ctnr-mgr.js +3 -1
  410. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-native.js +752 -0
  411. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/serverless.js +17 -20
  412. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr-v2.js +511 -0
  413. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr.js +11 -4
  414. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/tms.js +8 -0
  415. package/node_modules/@sap/cds-mtxs/srv/plugins/hana.js +27 -18
  416. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker-pool.js +1 -1
  417. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker.js +1 -1
  418. package/node_modules/chownr/LICENSE.md +63 -0
  419. package/node_modules/chownr/README.md +3 -0
  420. package/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
  421. package/node_modules/chownr/dist/commonjs/index.d.ts.map +1 -0
  422. package/node_modules/chownr/dist/commonjs/index.js +93 -0
  423. package/node_modules/chownr/dist/commonjs/index.js.map +1 -0
  424. package/node_modules/chownr/dist/commonjs/package.json +3 -0
  425. package/node_modules/chownr/dist/esm/index.d.ts +3 -0
  426. package/node_modules/chownr/dist/esm/index.d.ts.map +1 -0
  427. package/node_modules/chownr/dist/esm/index.js +85 -0
  428. package/node_modules/chownr/dist/esm/index.js.map +1 -0
  429. package/node_modules/chownr/dist/esm/package.json +3 -0
  430. package/node_modules/chownr/package.json +69 -0
  431. package/node_modules/content-disposition/README.md +105 -35
  432. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  433. package/node_modules/content-disposition/dist/index.js +388 -0
  434. package/node_modules/content-disposition/dist/index.js.map +1 -0
  435. package/node_modules/content-disposition/package.json +31 -19
  436. package/node_modules/content-type/README.md +34 -57
  437. package/node_modules/content-type/package.json +35 -25
  438. package/node_modules/express/Readme.md +15 -9
  439. package/node_modules/express/lib/application.js +2 -2
  440. package/node_modules/express/lib/request.js +32 -19
  441. package/node_modules/express/lib/response.js +27 -30
  442. package/node_modules/express/package.json +10 -10
  443. package/node_modules/handlebars/bin/handlebars +1 -1
  444. package/node_modules/handlebars/dist/amd/handlebars/base.js +2 -2
  445. package/node_modules/handlebars/dist/amd/handlebars/compiler/base.js +2 -59
  446. package/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js +68 -5
  447. package/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js +160 -19
  448. package/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js +23 -7
  449. package/node_modules/handlebars/dist/amd/handlebars/compiler/node-types.js +12 -0
  450. package/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js +26 -7
  451. package/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js +9 -4
  452. package/node_modules/handlebars/dist/amd/handlebars/exception.js +8 -4
  453. package/node_modules/handlebars/dist/amd/handlebars/helpers/each.js +40 -14
  454. package/node_modules/handlebars/dist/amd/handlebars/internal/proto-access.js +21 -1
  455. package/node_modules/handlebars/dist/amd/handlebars/runtime.js +24 -4
  456. package/node_modules/handlebars/dist/amd/handlebars/utils.js +4 -3
  457. package/node_modules/handlebars/dist/amd/precompiler.js +13 -7
  458. package/node_modules/handlebars/dist/cjs/handlebars/base.js +2 -2
  459. package/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js +1 -60
  460. package/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js +64 -4
  461. package/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js +161 -18
  462. package/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js +23 -7
  463. package/node_modules/handlebars/dist/cjs/handlebars/compiler/node-types.js +10 -0
  464. package/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js +29 -6
  465. package/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js +9 -4
  466. package/node_modules/handlebars/dist/cjs/handlebars/exception.js +8 -4
  467. package/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js +40 -14
  468. package/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js +21 -1
  469. package/node_modules/handlebars/dist/cjs/handlebars/runtime.js +24 -4
  470. package/node_modules/handlebars/dist/cjs/handlebars/utils.js +4 -3
  471. package/node_modules/handlebars/dist/cjs/precompiler.js +14 -6
  472. package/node_modules/handlebars/dist/handlebars.amd.js +401 -130
  473. package/node_modules/handlebars/dist/handlebars.amd.min.js +4 -4
  474. package/node_modules/handlebars/dist/handlebars.js +396 -125
  475. package/node_modules/handlebars/dist/handlebars.min.js +4 -4
  476. package/node_modules/handlebars/dist/handlebars.runtime.amd.js +100 -29
  477. package/node_modules/handlebars/dist/handlebars.runtime.amd.min.js +2 -2
  478. package/node_modules/handlebars/dist/handlebars.runtime.js +94 -23
  479. package/node_modules/handlebars/dist/handlebars.runtime.min.js +2 -2
  480. package/node_modules/handlebars/lib/handlebars/base.js +1 -1
  481. package/node_modules/handlebars/lib/handlebars/compiler/base.js +0 -67
  482. package/node_modules/handlebars/lib/handlebars/compiler/code-gen.js +65 -11
  483. package/node_modules/handlebars/lib/handlebars/compiler/compiler.js +164 -23
  484. package/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js +23 -7
  485. package/node_modules/handlebars/lib/handlebars/compiler/node-types.js +24 -0
  486. package/node_modules/handlebars/lib/handlebars/compiler/visitor.js +29 -5
  487. package/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js +16 -5
  488. package/node_modules/handlebars/lib/handlebars/exception.js +7 -3
  489. package/node_modules/handlebars/lib/handlebars/helpers/each.js +39 -16
  490. package/node_modules/handlebars/lib/handlebars/internal/proto-access.js +22 -0
  491. package/node_modules/handlebars/lib/handlebars/runtime.js +36 -4
  492. package/node_modules/handlebars/lib/handlebars/utils.js +3 -2
  493. package/node_modules/handlebars/lib/precompiler.js +14 -5
  494. package/node_modules/handlebars/package.json +2 -2
  495. package/node_modules/handlebars/release-notes.md +20 -1
  496. package/node_modules/handlebars/types/index.d.ts +8 -0
  497. package/node_modules/hdb/cfg/VERSION +1 -1
  498. package/node_modules/hdb/lib/Client.js +6 -2
  499. package/node_modules/hdb/lib/protocol/ClientInfo.js +28 -15
  500. package/node_modules/hdb/lib/protocol/Connection.js +30 -3
  501. package/node_modules/hdb/lib/protocol/Writer.js +2 -2
  502. package/node_modules/hdb/lib/protocol/common/ConnectOption.js +2 -0
  503. package/node_modules/hdb/lib/protocol/common/ConnectOptionFlagSet1.js +18 -0
  504. package/node_modules/hdb/lib/protocol/common/ConnectOptionType.js +2 -0
  505. package/node_modules/hdb/lib/protocol/common/Constants.js +1 -0
  506. package/node_modules/hdb/lib/protocol/common/MessageType.js +3 -2
  507. package/node_modules/hdb/lib/protocol/common/PartKind.js +2 -1
  508. package/node_modules/hdb/lib/protocol/common/index.js +1 -0
  509. package/node_modules/hdb/lib/protocol/data/TextList.js +25 -17
  510. package/node_modules/hdb/lib/protocol/data/index.js +1 -0
  511. package/node_modules/hdb/lib/protocol/part/ConnectOptions.js +7 -0
  512. package/node_modules/hdb/lib/protocol/request/index.js +7 -0
  513. package/node_modules/hdb/package.json +1 -2
  514. package/node_modules/livereload-js/.github/workflows/main.yml +4 -4
  515. package/node_modules/livereload-js/README.md +3 -3
  516. package/node_modules/livereload-js/dist/livereload.js +839 -2742
  517. package/node_modules/livereload-js/dist/livereload.min.js +1 -1
  518. package/node_modules/livereload-js/package.json +11 -11
  519. package/node_modules/minipass/LICENSE.md +55 -0
  520. package/node_modules/minipass/README.md +825 -0
  521. package/node_modules/minipass/dist/commonjs/index.d.ts +545 -0
  522. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  523. package/node_modules/minipass/dist/commonjs/index.js +1038 -0
  524. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  525. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  526. package/node_modules/minipass/dist/esm/index.d.ts +545 -0
  527. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  528. package/node_modules/minipass/dist/esm/index.js +1020 -0
  529. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  530. package/node_modules/minipass/dist/esm/package.json +3 -0
  531. package/node_modules/minipass/package.json +77 -0
  532. package/node_modules/minizlib/LICENSE +26 -0
  533. package/node_modules/minizlib/README.md +64 -0
  534. package/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
  535. package/node_modules/minizlib/dist/commonjs/constants.d.ts.map +1 -0
  536. package/node_modules/minizlib/dist/commonjs/constants.js +123 -0
  537. package/node_modules/minizlib/dist/commonjs/constants.js.map +1 -0
  538. package/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
  539. package/node_modules/minizlib/dist/commonjs/index.d.ts.map +1 -0
  540. package/node_modules/minizlib/dist/commonjs/index.js +416 -0
  541. package/node_modules/minizlib/dist/commonjs/index.js.map +1 -0
  542. package/node_modules/minizlib/dist/commonjs/package.json +3 -0
  543. package/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
  544. package/node_modules/minizlib/dist/esm/constants.d.ts.map +1 -0
  545. package/node_modules/minizlib/dist/esm/constants.js +117 -0
  546. package/node_modules/minizlib/dist/esm/constants.js.map +1 -0
  547. package/node_modules/minizlib/dist/esm/index.d.ts +99 -0
  548. package/node_modules/minizlib/dist/esm/index.d.ts.map +1 -0
  549. package/node_modules/minizlib/dist/esm/index.js +363 -0
  550. package/node_modules/minizlib/dist/esm/index.js.map +1 -0
  551. package/node_modules/minizlib/dist/esm/package.json +3 -0
  552. package/node_modules/minizlib/package.json +80 -0
  553. package/node_modules/proxy-addr/HISTORY.md +60 -54
  554. package/node_modules/proxy-addr/README.md +1 -1
  555. package/node_modules/proxy-addr/index.js +32 -0
  556. package/node_modules/proxy-addr/package.json +8 -4
  557. package/node_modules/qs/.github/THREAT_MODEL.md +4 -2
  558. package/node_modules/qs/CHANGELOG.md +38 -14
  559. package/node_modules/qs/README.md +31 -3
  560. package/node_modules/qs/dist/qs.js +20 -20
  561. package/node_modules/qs/lib/parse.js +94 -4
  562. package/node_modules/qs/lib/stringify.js +4 -4
  563. package/node_modules/qs/lib/utils.js +130 -6
  564. package/node_modules/qs/package.json +4 -4
  565. package/node_modules/qs/test/parse.js +174 -0
  566. package/node_modules/qs/test/stringify.js +263 -33
  567. package/node_modules/qs/test/utils.js +184 -0
  568. package/node_modules/tar/LICENSE.md +55 -0
  569. package/node_modules/tar/README.md +1233 -0
  570. package/node_modules/tar/dist/commonjs/create.d.ts +3 -0
  571. package/node_modules/tar/dist/commonjs/create.d.ts.map +1 -0
  572. package/node_modules/tar/dist/commonjs/create.js +82 -0
  573. package/node_modules/tar/dist/commonjs/create.js.map +1 -0
  574. package/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
  575. package/node_modules/tar/dist/commonjs/cwd-error.d.ts.map +1 -0
  576. package/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
  577. package/node_modules/tar/dist/commonjs/cwd-error.js.map +1 -0
  578. package/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
  579. package/node_modules/tar/dist/commonjs/extract.d.ts.map +1 -0
  580. package/node_modules/tar/dist/commonjs/extract.js +88 -0
  581. package/node_modules/tar/dist/commonjs/extract.js.map +1 -0
  582. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
  583. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts.map +1 -0
  584. package/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
  585. package/node_modules/tar/dist/commonjs/get-write-flag.js.map +1 -0
  586. package/node_modules/tar/dist/commonjs/header.d.ts +53 -0
  587. package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -0
  588. package/node_modules/tar/dist/commonjs/header.js +348 -0
  589. package/node_modules/tar/dist/commonjs/header.js.map +1 -0
  590. package/node_modules/tar/dist/commonjs/index.d.ts +20 -0
  591. package/node_modules/tar/dist/commonjs/index.d.ts.map +1 -0
  592. package/node_modules/tar/dist/commonjs/index.js +64 -0
  593. package/node_modules/tar/dist/commonjs/index.js.map +1 -0
  594. package/node_modules/tar/dist/commonjs/index.min.js +4 -0
  595. package/node_modules/tar/dist/commonjs/index.min.js.map +7 -0
  596. package/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
  597. package/node_modules/tar/dist/commonjs/large-numbers.d.ts.map +1 -0
  598. package/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
  599. package/node_modules/tar/dist/commonjs/large-numbers.js.map +1 -0
  600. package/node_modules/tar/dist/commonjs/list.d.ts +7 -0
  601. package/node_modules/tar/dist/commonjs/list.d.ts.map +1 -0
  602. package/node_modules/tar/dist/commonjs/list.js +153 -0
  603. package/node_modules/tar/dist/commonjs/list.js.map +1 -0
  604. package/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
  605. package/node_modules/tar/dist/commonjs/make-command.d.ts.map +1 -0
  606. package/node_modules/tar/dist/commonjs/make-command.js +52 -0
  607. package/node_modules/tar/dist/commonjs/make-command.js.map +1 -0
  608. package/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
  609. package/node_modules/tar/dist/commonjs/mkdir.d.ts.map +1 -0
  610. package/node_modules/tar/dist/commonjs/mkdir.js +187 -0
  611. package/node_modules/tar/dist/commonjs/mkdir.js.map +1 -0
  612. package/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
  613. package/node_modules/tar/dist/commonjs/mode-fix.d.ts.map +1 -0
  614. package/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
  615. package/node_modules/tar/dist/commonjs/mode-fix.js.map +1 -0
  616. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
  617. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts.map +1 -0
  618. package/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
  619. package/node_modules/tar/dist/commonjs/normalize-unicode.js.map +1 -0
  620. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
  621. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts.map +1 -0
  622. package/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
  623. package/node_modules/tar/dist/commonjs/normalize-windows-path.js.map +1 -0
  624. package/node_modules/tar/dist/commonjs/options.d.ts +604 -0
  625. package/node_modules/tar/dist/commonjs/options.d.ts.map +1 -0
  626. package/node_modules/tar/dist/commonjs/options.js +66 -0
  627. package/node_modules/tar/dist/commonjs/options.js.map +1 -0
  628. package/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
  629. package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -0
  630. package/node_modules/tar/dist/commonjs/pack.js +544 -0
  631. package/node_modules/tar/dist/commonjs/pack.js.map +1 -0
  632. package/node_modules/tar/dist/commonjs/package.json +3 -0
  633. package/node_modules/tar/dist/commonjs/parse.d.ts +92 -0
  634. package/node_modules/tar/dist/commonjs/parse.d.ts.map +1 -0
  635. package/node_modules/tar/dist/commonjs/parse.js +655 -0
  636. package/node_modules/tar/dist/commonjs/parse.js.map +1 -0
  637. package/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
  638. package/node_modules/tar/dist/commonjs/path-reservations.d.ts.map +1 -0
  639. package/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
  640. package/node_modules/tar/dist/commonjs/path-reservations.js.map +1 -0
  641. package/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
  642. package/node_modules/tar/dist/commonjs/pax.d.ts.map +1 -0
  643. package/node_modules/tar/dist/commonjs/pax.js +182 -0
  644. package/node_modules/tar/dist/commonjs/pax.js.map +1 -0
  645. package/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
  646. package/node_modules/tar/dist/commonjs/process-umask.d.ts.map +1 -0
  647. package/node_modules/tar/dist/commonjs/process-umask.js +7 -0
  648. package/node_modules/tar/dist/commonjs/process-umask.js.map +1 -0
  649. package/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
  650. package/node_modules/tar/dist/commonjs/read-entry.d.ts.map +1 -0
  651. package/node_modules/tar/dist/commonjs/read-entry.js +136 -0
  652. package/node_modules/tar/dist/commonjs/read-entry.js.map +1 -0
  653. package/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
  654. package/node_modules/tar/dist/commonjs/replace.d.ts.map +1 -0
  655. package/node_modules/tar/dist/commonjs/replace.js +227 -0
  656. package/node_modules/tar/dist/commonjs/replace.js.map +1 -0
  657. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
  658. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts.map +1 -0
  659. package/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
  660. package/node_modules/tar/dist/commonjs/strip-absolute-path.js.map +1 -0
  661. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
  662. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts.map +1 -0
  663. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
  664. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js.map +1 -0
  665. package/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
  666. package/node_modules/tar/dist/commonjs/symlink-error.d.ts.map +1 -0
  667. package/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
  668. package/node_modules/tar/dist/commonjs/symlink-error.js.map +1 -0
  669. package/node_modules/tar/dist/commonjs/types.d.ts +16 -0
  670. package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -0
  671. package/node_modules/tar/dist/commonjs/types.js +70 -0
  672. package/node_modules/tar/dist/commonjs/types.js.map +1 -0
  673. package/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
  674. package/node_modules/tar/dist/commonjs/unpack.d.ts.map +1 -0
  675. package/node_modules/tar/dist/commonjs/unpack.js +932 -0
  676. package/node_modules/tar/dist/commonjs/unpack.js.map +1 -0
  677. package/node_modules/tar/dist/commonjs/update.d.ts +2 -0
  678. package/node_modules/tar/dist/commonjs/update.d.ts.map +1 -0
  679. package/node_modules/tar/dist/commonjs/update.js +33 -0
  680. package/node_modules/tar/dist/commonjs/update.js.map +1 -0
  681. package/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
  682. package/node_modules/tar/dist/commonjs/warn-method.d.ts.map +1 -0
  683. package/node_modules/tar/dist/commonjs/warn-method.js +31 -0
  684. package/node_modules/tar/dist/commonjs/warn-method.js.map +1 -0
  685. package/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
  686. package/node_modules/tar/dist/commonjs/winchars.d.ts.map +1 -0
  687. package/node_modules/tar/dist/commonjs/winchars.js +14 -0
  688. package/node_modules/tar/dist/commonjs/winchars.js.map +1 -0
  689. package/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
  690. package/node_modules/tar/dist/commonjs/write-entry.d.ts.map +1 -0
  691. package/node_modules/tar/dist/commonjs/write-entry.js +698 -0
  692. package/node_modules/tar/dist/commonjs/write-entry.js.map +1 -0
  693. package/node_modules/tar/dist/esm/create.d.ts +3 -0
  694. package/node_modules/tar/dist/esm/create.d.ts.map +1 -0
  695. package/node_modules/tar/dist/esm/create.js +76 -0
  696. package/node_modules/tar/dist/esm/create.js.map +1 -0
  697. package/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
  698. package/node_modules/tar/dist/esm/cwd-error.d.ts.map +1 -0
  699. package/node_modules/tar/dist/esm/cwd-error.js +14 -0
  700. package/node_modules/tar/dist/esm/cwd-error.js.map +1 -0
  701. package/node_modules/tar/dist/esm/extract.d.ts +3 -0
  702. package/node_modules/tar/dist/esm/extract.d.ts.map +1 -0
  703. package/node_modules/tar/dist/esm/extract.js +49 -0
  704. package/node_modules/tar/dist/esm/extract.js.map +1 -0
  705. package/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
  706. package/node_modules/tar/dist/esm/get-write-flag.d.ts.map +1 -0
  707. package/node_modules/tar/dist/esm/get-write-flag.js +26 -0
  708. package/node_modules/tar/dist/esm/get-write-flag.js.map +1 -0
  709. package/node_modules/tar/dist/esm/header.d.ts +53 -0
  710. package/node_modules/tar/dist/esm/header.d.ts.map +1 -0
  711. package/node_modules/tar/dist/esm/header.js +311 -0
  712. package/node_modules/tar/dist/esm/header.js.map +1 -0
  713. package/node_modules/tar/dist/esm/index.d.ts +20 -0
  714. package/node_modules/tar/dist/esm/index.d.ts.map +1 -0
  715. package/node_modules/tar/dist/esm/index.js +20 -0
  716. package/node_modules/tar/dist/esm/index.js.map +1 -0
  717. package/node_modules/tar/dist/esm/index.min.js +4 -0
  718. package/node_modules/tar/dist/esm/index.min.js.map +7 -0
  719. package/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
  720. package/node_modules/tar/dist/esm/large-numbers.d.ts.map +1 -0
  721. package/node_modules/tar/dist/esm/large-numbers.js +94 -0
  722. package/node_modules/tar/dist/esm/large-numbers.js.map +1 -0
  723. package/node_modules/tar/dist/esm/list.d.ts +7 -0
  724. package/node_modules/tar/dist/esm/list.d.ts.map +1 -0
  725. package/node_modules/tar/dist/esm/list.js +113 -0
  726. package/node_modules/tar/dist/esm/list.js.map +1 -0
  727. package/node_modules/tar/dist/esm/make-command.d.ts +49 -0
  728. package/node_modules/tar/dist/esm/make-command.d.ts.map +1 -0
  729. package/node_modules/tar/dist/esm/make-command.js +48 -0
  730. package/node_modules/tar/dist/esm/make-command.js.map +1 -0
  731. package/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
  732. package/node_modules/tar/dist/esm/mkdir.d.ts.map +1 -0
  733. package/node_modules/tar/dist/esm/mkdir.js +179 -0
  734. package/node_modules/tar/dist/esm/mkdir.js.map +1 -0
  735. package/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
  736. package/node_modules/tar/dist/esm/mode-fix.d.ts.map +1 -0
  737. package/node_modules/tar/dist/esm/mode-fix.js +25 -0
  738. package/node_modules/tar/dist/esm/mode-fix.js.map +1 -0
  739. package/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
  740. package/node_modules/tar/dist/esm/normalize-unicode.d.ts.map +1 -0
  741. package/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
  742. package/node_modules/tar/dist/esm/normalize-unicode.js.map +1 -0
  743. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
  744. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts.map +1 -0
  745. package/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
  746. package/node_modules/tar/dist/esm/normalize-windows-path.js.map +1 -0
  747. package/node_modules/tar/dist/esm/options.d.ts +604 -0
  748. package/node_modules/tar/dist/esm/options.d.ts.map +1 -0
  749. package/node_modules/tar/dist/esm/options.js +54 -0
  750. package/node_modules/tar/dist/esm/options.js.map +1 -0
  751. package/node_modules/tar/dist/esm/pack.d.ts +105 -0
  752. package/node_modules/tar/dist/esm/pack.d.ts.map +1 -0
  753. package/node_modules/tar/dist/esm/pack.js +502 -0
  754. package/node_modules/tar/dist/esm/pack.js.map +1 -0
  755. package/node_modules/tar/dist/esm/package.json +3 -0
  756. package/node_modules/tar/dist/esm/parse.d.ts +92 -0
  757. package/node_modules/tar/dist/esm/parse.d.ts.map +1 -0
  758. package/node_modules/tar/dist/esm/parse.js +651 -0
  759. package/node_modules/tar/dist/esm/parse.js.map +1 -0
  760. package/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
  761. package/node_modules/tar/dist/esm/path-reservations.d.ts.map +1 -0
  762. package/node_modules/tar/dist/esm/path-reservations.js +166 -0
  763. package/node_modules/tar/dist/esm/path-reservations.js.map +1 -0
  764. package/node_modules/tar/dist/esm/pax.d.ts +26 -0
  765. package/node_modules/tar/dist/esm/pax.d.ts.map +1 -0
  766. package/node_modules/tar/dist/esm/pax.js +178 -0
  767. package/node_modules/tar/dist/esm/pax.js.map +1 -0
  768. package/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
  769. package/node_modules/tar/dist/esm/process-umask.d.ts.map +1 -0
  770. package/node_modules/tar/dist/esm/process-umask.js +3 -0
  771. package/node_modules/tar/dist/esm/process-umask.js.map +1 -0
  772. package/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
  773. package/node_modules/tar/dist/esm/read-entry.d.ts.map +1 -0
  774. package/node_modules/tar/dist/esm/read-entry.js +132 -0
  775. package/node_modules/tar/dist/esm/read-entry.js.map +1 -0
  776. package/node_modules/tar/dist/esm/replace.d.ts +2 -0
  777. package/node_modules/tar/dist/esm/replace.d.ts.map +1 -0
  778. package/node_modules/tar/dist/esm/replace.js +221 -0
  779. package/node_modules/tar/dist/esm/replace.js.map +1 -0
  780. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
  781. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts.map +1 -0
  782. package/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
  783. package/node_modules/tar/dist/esm/strip-absolute-path.js.map +1 -0
  784. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
  785. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts.map +1 -0
  786. package/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
  787. package/node_modules/tar/dist/esm/strip-trailing-slashes.js.map +1 -0
  788. package/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
  789. package/node_modules/tar/dist/esm/symlink-error.d.ts.map +1 -0
  790. package/node_modules/tar/dist/esm/symlink-error.js +15 -0
  791. package/node_modules/tar/dist/esm/symlink-error.js.map +1 -0
  792. package/node_modules/tar/dist/esm/types.d.ts +16 -0
  793. package/node_modules/tar/dist/esm/types.d.ts.map +1 -0
  794. package/node_modules/tar/dist/esm/types.js +65 -0
  795. package/node_modules/tar/dist/esm/types.js.map +1 -0
  796. package/node_modules/tar/dist/esm/unpack.d.ts +101 -0
  797. package/node_modules/tar/dist/esm/unpack.d.ts.map +1 -0
  798. package/node_modules/tar/dist/esm/unpack.js +891 -0
  799. package/node_modules/tar/dist/esm/unpack.js.map +1 -0
  800. package/node_modules/tar/dist/esm/update.d.ts +2 -0
  801. package/node_modules/tar/dist/esm/update.d.ts.map +1 -0
  802. package/node_modules/tar/dist/esm/update.js +30 -0
  803. package/node_modules/tar/dist/esm/update.js.map +1 -0
  804. package/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
  805. package/node_modules/tar/dist/esm/warn-method.d.ts.map +1 -0
  806. package/node_modules/tar/dist/esm/warn-method.js +27 -0
  807. package/node_modules/tar/dist/esm/warn-method.js.map +1 -0
  808. package/node_modules/tar/dist/esm/winchars.d.ts +3 -0
  809. package/node_modules/tar/dist/esm/winchars.d.ts.map +1 -0
  810. package/node_modules/tar/dist/esm/winchars.js +9 -0
  811. package/node_modules/tar/dist/esm/winchars.js.map +1 -0
  812. package/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
  813. package/node_modules/tar/dist/esm/write-entry.d.ts.map +1 -0
  814. package/node_modules/tar/dist/esm/write-entry.js +656 -0
  815. package/node_modules/tar/dist/esm/write-entry.js.map +1 -0
  816. package/node_modules/tar/package.json +298 -0
  817. package/node_modules/ws/lib/websocket.js +17 -3
  818. package/node_modules/ws/package.json +1 -1
  819. package/node_modules/yallist/LICENSE.md +63 -0
  820. package/node_modules/yallist/README.md +205 -0
  821. package/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
  822. package/node_modules/yallist/dist/commonjs/index.d.ts.map +1 -0
  823. package/node_modules/yallist/dist/commonjs/index.js +384 -0
  824. package/node_modules/yallist/dist/commonjs/index.js.map +1 -0
  825. package/node_modules/yallist/dist/commonjs/package.json +3 -0
  826. package/node_modules/yallist/dist/esm/index.d.ts +39 -0
  827. package/node_modules/yallist/dist/esm/index.d.ts.map +1 -0
  828. package/node_modules/yallist/dist/esm/index.js +379 -0
  829. package/node_modules/yallist/dist/esm/index.js.map +1 -0
  830. package/node_modules/yallist/dist/esm/package.json +3 -0
  831. package/node_modules/yallist/package.json +68 -0
  832. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +19 -18
  833. package/node_modules/yaml/browser/dist/nodes/Alias.js +25 -23
  834. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +19 -18
  835. package/node_modules/yaml/dist/nodes/Alias.js +25 -23
  836. package/node_modules/yaml/package.json +1 -1
  837. package/package.json +7 -1
  838. package/bin/completion/templates/cds-tmpl.fish +0 -65
  839. package/bin/completion/templates/cds-tmpl.ps1 +0 -217
  840. package/bin/completion/templates/cds-tmpl.sh +0 -93
  841. package/bin/completion/templates/cds-tmpl.zsh +0 -74
  842. package/node_modules/@cap-js/db-service/lib/recursion-guard.js +0 -40
  843. package/node_modules/@sap/cds/lib/env/cds-requires.js +0 -326
  844. package/node_modules/@sap/cds-mtxs/srv/bootstrap.cds +0 -2
  845. package/node_modules/@sap/cds-mtxs/srv/bootstrap.js +0 -33
  846. package/node_modules/body-parser/node_modules/content-type/LICENSE +0 -22
  847. package/node_modules/body-parser/node_modules/content-type/README.md +0 -71
  848. package/node_modules/body-parser/node_modules/content-type/package.json +0 -52
  849. package/node_modules/content-disposition/index.js +0 -536
  850. package/node_modules/content-type/HISTORY.md +0 -29
  851. package/node_modules/content-type/index.js +0 -225
  852. package/node_modules/negotiator/node_modules/content-type/LICENSE +0 -22
  853. package/node_modules/negotiator/node_modules/content-type/README.md +0 -71
  854. package/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +0 -46
  855. package/node_modules/negotiator/node_modules/content-type/dist/index.js +0 -176
  856. package/node_modules/negotiator/node_modules/content-type/dist/index.js.map +0 -1
  857. package/node_modules/negotiator/node_modules/content-type/package.json +0 -52
  858. package/node_modules/type-is/node_modules/content-type/LICENSE +0 -22
  859. package/node_modules/type-is/node_modules/content-type/README.md +0 -71
  860. package/node_modules/type-is/node_modules/content-type/dist/index.d.ts +0 -46
  861. package/node_modules/type-is/node_modules/content-type/dist/index.js +0 -176
  862. package/node_modules/type-is/node_modules/content-type/dist/index.js.map +0 -1
  863. package/node_modules/type-is/node_modules/content-type/package.json +0 -52
  864. /package/lib/init/template/react/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
  865. /package/lib/init/template/vue/files/src/{main.js → main.{{extension}}.hbs} +0 -0
  866. /package/lib/init/template/vue/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
  867. /package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/utilities.js +0 -0
  868. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.d.ts +0 -0
  869. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js +0 -0
  870. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js.map +0 -0
@@ -7,9 +7,9 @@ const {
7
7
  forEachDefinition,
8
8
  forEachGeneric,
9
9
  forEachMemberRecursively,
10
- } = require('../../model/csnUtils');
10
+ } = require('../../base/csnUtils');
11
11
  const { isBuiltinType } = require('../../base/builtins');
12
- const { isArtifactInSomeService, isArtifactInService } = require('./utils');
12
+ const { isArtifactInSomeService, isArtifactInService, odataTypeFacetAnnotations } = require('./utils');
13
13
  const { cloneCsnDict, cloneCsnNonDict } = require('../../base/cloneCsn');
14
14
 
15
15
  function expandToFinalBaseType(csn, transformers, csnUtils, services, options, error) {
@@ -18,15 +18,28 @@ function expandToFinalBaseType(csn, transformers, csnUtils, services, options, e
18
18
  // Unravel derived type chains to final one for elements, actions, action parameters (propagating annotations)
19
19
  forEachMemberRecursively(def, (member, _memberName) => {
20
20
  expandToFinalBaseType(member, defName);
21
+ // Mark items nodes so isExpandable can distinguish them from direct element types.
22
+ // Annotated outside-service scalar items types (many T) are preserved for TypeDefinition
23
+ // exposure
24
+ if (isV4 && member.items)
25
+ setProp(member.items, '$v4ItemsContext', true);
21
26
  expandToFinalBaseType(member.items, defName);
22
27
  expandToFinalBaseType(member.returns, defName);
23
- expandToFinalBaseType(member.returns && member.returns.items, defName);
28
+ const returnsItems = member.returns && member.returns.items;
29
+ if (isV4 && returnsItems)
30
+ setProp(returnsItems, '$v4ItemsContext', true);
31
+ expandToFinalBaseType(returnsItems, defName);
24
32
  }, [ 'definitions', defName ]);
25
33
 
26
34
  expandToFinalBaseType(def, defName);
35
+ if (isV4 && def.items)
36
+ setProp(def.items, '$v4ItemsContext', true);
27
37
  expandToFinalBaseType(def.items, defName);
28
38
  expandToFinalBaseType(def.returns, defName);
29
- expandToFinalBaseType(def.returns && def.returns.items, defName);
39
+ const defReturnsItems = def.returns && def.returns.items;
40
+ if (isV4 && defReturnsItems)
41
+ setProp(defReturnsItems, '$v4ItemsContext', true);
42
+ expandToFinalBaseType(defReturnsItems, defName);
30
43
  /*
31
44
  If the definition('def' variable) is a type definition and the assigned type of this very same definition('def' variable)
32
45
  is structured type, e.g.:
@@ -267,7 +280,18 @@ function expandToFinalBaseType(csn, transformers, csnUtils, services, options, e
267
280
  const isBuiltin = isBuiltinType(finalBaseType.type);
268
281
  const isAssoc = node.target;
269
282
  const isInCurServ = isArtifactInService(node.type, currService);
270
- return !isV4 || !(isBuiltin && !isAssoc && isInCurServ);
283
+ // For items context in V4 - also preserve annotated outside-service scalar types so the types exposure
284
+ // can expose them as TypeDefinitions. Only applies to items nodes (many T), not direct element types,
285
+ // to avoid breaking allInOneFlattening.
286
+ // Exclude annotations that must not trigger TypeDefinition creation:
287
+ // @cds.* — compiler-internal markers (e.g. @cds.external); never rendered in EDMX
288
+ // @odata.Type / @odata.<facet> — type-facet overrides; change the primitive mapping, so the TypeDefinition would get a wrong UnderlyingType
289
+ // @open — map open/closed marker; type must resolve to cds.Map, not become a TypeDefinition
290
+ const itemsTypeDef = isV4 && node.$v4ItemsContext && !isBuiltinType(node.type) && csn.definitions[node.type];
291
+ const hasExposableAnnotations = !!itemsTypeDef && Object.keys(itemsTypeDef).some(
292
+ k => k[0] === '@' && !k.startsWith('@cds.') && !odataTypeFacetAnnotations.includes(k) && k !== '@open'
293
+ );
294
+ return !isV4 || !(isBuiltin && !isAssoc && (isInCurServ || hasExposableAnnotations));
271
295
  }
272
296
 
273
297
  // convert $path to path starting at main artifact
@@ -8,11 +8,11 @@
8
8
 
9
9
  const { setProp } = require('../../utils/objectUtils');
10
10
  const { isBetaEnabled } = require('../../base/specialOptions');
11
- const { defNameWithoutServiceOrContextName, isArtifactInService } = require('./utils');
11
+ const { defNameWithoutServiceOrContextName, isArtifactInService, odataTypeFacetAnnotations } = require('./utils');
12
12
  const {
13
13
  getNamespace, copyAnnotations,
14
14
  forEachDefinition, forEachMember, forEachGeneric, isEdmPropertyRendered,
15
- } = require('../../model/csnUtils');
15
+ } = require('../../base/csnUtils');
16
16
  const { isBuiltinType } = require('../../base/builtins');
17
17
  const { CompilerAssertion } = require('../../base/error');
18
18
  const { cloneCsnNonDict } = require('../../base/cloneCsn');
@@ -253,7 +253,7 @@ function typesExposure(csn, whatsMyServiceName, requestedServiceNames, fallBackS
253
253
  }
254
254
  }
255
255
  }
256
- else if (isTermDef) {
256
+ else if (isTermDef || (!elements && !isAnonymous)) {
257
257
  newType = Object.create(null);
258
258
  for (const n in typeDef)
259
259
  newType[n] = typeDef[n];
@@ -319,6 +319,16 @@ function typesExposure(csn, whatsMyServiceName, requestedServiceNames, fallBackS
319
319
  // Implementation note: For `type S: T:struct;`, elements from `T:struct` were already propagated to `S`.
320
320
  if ((isTermDef && typeDef.enum) || (rc.elements = (typeDef.items?.elements || typeDef.elements)) !== undefined)
321
321
  return rc;
322
+ // Annotated outside-service scalar types in items context (many T) need to be exposed as TypeDefinitions.
323
+ // Only applies to items nodes (not direct type refs) to preserve existing behavior for direct uses.
324
+ // Exclude types annotated with:
325
+ // @cds.* — compiler-internal markers (e.g. @cds.external); never rendered in EDMX
326
+ // @odata.Type / @odata.<facet> — type-facet overrides; change the primitive mapping, so the TypeDefinition would get a wrong UnderlyingType
327
+ // @open — map open/closed marker; type must resolve to cds.Map, not become a TypeDefinition
328
+ if (node.items && Object.keys(typeDef).some(
329
+ k => k[0] === '@' && !k.startsWith('@cds.') && !odataTypeFacetAnnotations.includes(k) && k !== '@open'
330
+ ))
331
+ return rc;
322
332
  type = typeDef.items?.type || typeDef.type;
323
333
  typeName = (type.ref && csnUtils.artifactRef(type)) || type;
324
334
  }
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ const { EdmTypeFacetNames } = require('../../edm/EdmPrimitiveTypeDefinitions');
4
+
3
5
  /**
4
6
  * Return the definition name, without the prefixed service name
5
7
  * @param {string} name
@@ -56,10 +58,17 @@ function isLocalizedArtifactInService(artName, services) {
56
58
  return isArtifactInSomeService(artName.split('.').slice(1).join('.'), services);
57
59
  }
58
60
 
61
+ // @odata.* type-facet annotations that override how a scalar type maps to an EDM primitive.
62
+ // A type carrying these must not trigger TypeDefinition creation because the TypeDefinition
63
+ // would get a wrong UnderlyingType (e.g. @odata.Type: 'Edm.Date' on a String-based type).
64
+ // Derived from EdmTypeFacetNames (the actively processed facets) plus @odata.Type itself.
65
+ const odataTypeFacetAnnotations = [ '@odata.Type', ...EdmTypeFacetNames.map(n => `@odata.${ n }`) ];
66
+
59
67
  module.exports = {
60
68
  defNameWithoutServiceOrContextName,
61
69
  getServiceOfArtifact,
62
70
  isArtifactInService,
63
71
  isArtifactInSomeService,
64
72
  isLocalizedArtifactInService,
73
+ odataTypeFacetAnnotations,
65
74
  };
@@ -6,8 +6,8 @@
6
6
 
7
7
  const { setProp } = require('../utils/objectUtils');
8
8
 
9
- const { copyAnnotations, applyTransformations, isDeepEqual } = require('../model/csnUtils');
10
- const { getUtils, implicitAs } = require('../model/csnUtils');
9
+ const { copyAnnotations, applyTransformations, isDeepEqual } = require('../base/csnUtils');
10
+ const { getUtils, implicitAs } = require('../base/csnUtils');
11
11
  const { typeParameters } = require('../compiler/builtins');
12
12
  const { isBuiltinType } = require('../base/builtins');
13
13
  const { ModelError, CompilerAssertion } = require('../base/error');
@@ -1685,7 +1685,7 @@ function translateAssocsToJoins(model, inputOptions = {}) {
1685
1685
  // If rootQat ($tableAlias) already has a QA, reuse it, create a new one otherwise.
1686
1686
  if (!rootQat.$QA) {
1687
1687
  // Use the original FROM alias if available!
1688
- if (pathDict.name && pathDict.name.id) {
1688
+ if (env.location === 'from' && pathDict.name && pathDict.name.id) {
1689
1689
  qat.$QA = createQA(env, art, pathDict.name.id, qat._namedArgs);
1690
1690
  rootQat.$QA = qat.$QA;
1691
1691
  }
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const { setProp } = require('../utils/objectUtils');
4
- const { applyTransformations, isDollarSelfOrProjectionOperand, implicitAs } = require('../model/csnUtils');
4
+ const { applyTransformations, isDollarSelfOrProjectionOperand, implicitAs } = require('../base/csnUtils');
5
5
  const { isBuiltinType } = require('../base/builtins');
6
6
  const { condAsTree } = require('../base/xprAsTree');
7
7
  const { pathToMessageString } = require('../base/messages');
@@ -2,7 +2,7 @@
2
2
 
3
3
  const {
4
4
  forEachDefinition, forAllQueries, getNormalizedQuery, forEachMemberRecursively,
5
- } = require('../../model/csnUtils');
5
+ } = require('../../base/csnUtils');
6
6
  const { setAnnotationIfNotDefined } = require('./utils');
7
7
  const { CompilerAssertion } = require('../../base/error');
8
8
  const { isMagicVariable } = require('../../base/builtins');
@@ -8,7 +8,7 @@ const {
8
8
  getUtils,
9
9
  applyTransformations,
10
10
  implicitAs,
11
- } = require('../../model/csnUtils');
11
+ } = require('../../base/csnUtils');
12
12
  const { isBuiltinType, propagationRules } = require('../../base/builtins');
13
13
  const {
14
14
  forEachValue, forEach,
@@ -2,7 +2,7 @@
2
2
 
3
3
  const {
4
4
  applyTransformations,
5
- } = require('../../model/csnUtils');
5
+ } = require('../../base/csnUtils');
6
6
  const { setProp } = require('../../utils/objectUtils');
7
7
 
8
8
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sap/cds-compiler",
3
- "version": "7.1.1",
3
+ "version": "7.2.1",
4
4
  "description": "CDS (Core Data Services) compiler and backends",
5
5
  "homepage": "https://cap.cloud.sap/",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,10 +6,53 @@ This project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  The format is based on [Keep a Changelog](https://keepachangelog.com/).
8
8
 
9
+ ## Version 4.2.0 - 2026-10-21
10
+
11
+ ### Added
12
+
13
+ - When an `extension-allowlist` is configured, CSV data uploaded with tenant extensions is now validated against it.
14
+ - Tenant metadata APIs now report `status` as `SUBSCRIBED`, `UNSUBSCRIBING`, or `UNSUBSCRIPTION_FAILED`.
15
+ - `cds.requires.multitenancy.containerManager.lifecycleMaxRetryAfter` now controls the maximum container manager retry delay during tenant subscription and unsubscription, defaulting to 5 minutes while `maxRetryAfter` defaults to 5 seconds.
16
+
17
+ ### Fixed
18
+
19
+ - HANA Cloud serverless now resolves subscriber containers in their own HANA tenants instead of the application provider's tenant.
20
+ - Extensions can no longer expose internal entities (e.g. `cds.xt.Extensions`) by projecting or selecting from a protected namespace.
21
+ - `cds build` now produces identical main application CSNs for the server and MTX sidecar.
22
+ - `cds.xt.SaasProvisioningService` now waits for asynchronous subscription callbacks before emitting the final job update.
23
+ - Bulk tenant upgrades now skip tenants whose unsubscription failed.
24
+ - HANA tenant unsubscription is now idempotent when Service Manager still lists already deleted resources.
25
+ - `cds unsubscribe <t0> --local` now executes the unsubscription for the configured root tenant instead of returning without effect.
26
+ - `cds.xt.SaasProvisioningService.upgrade` now preserves the original error status for failed tenant tasks.
27
+ - The MTX sidecar now reports invalid production build layouts at startup and logs the full cause of deployment resource failures.
28
+ - The Service Manager client no longer forwards TMS-specific parameters to the server to make migration from Service Manager to HANA TMS v2 easier.
29
+ - Login endpoint for the extension upload now supports PKCE login with subscriber IAS host.
30
+ - `cds-mtx-migrate '*' --sync-tenant-list` supports `--dry` again.
31
+ - Entities and views with namespaces `cds.outbox` and `cds.core` can no longer be extended via tenant specific extensibility.
32
+
33
+ ## Version 4.1.1 - 2026-09-24
34
+
35
+ ### Added
36
+
37
+ - Beta: The HANA container manager can use Service Manager v2 when `features.service_manager_v2` is enabled.
38
+ - `cds-mtx` also accepts space-separated tenant lists such as `cds-mtx upgrade t1 t2 t3`.
39
+
40
+ ### Fixed
41
+
42
+ - Service Manager retries now use jittered backoff to avoid synchronized retries during transient failures.
43
+ - HANA Cloud serverless token requests now include the IAS application tenant ID when the client ID is not unique.
44
+ - `cds-mtx` now prints the complete error with stack and causes when an operation fails.
45
+ - A malformed extension `csn` string is now rejected with status `422` instead of `500`.
46
+ - The Service Manager client now recreates an HDI container whose last operation was a succeeded deletion, instead of reusing the deleted instance.
47
+ - The upgrade check that aborts on existing extensions when extensibility is disabled now reliably detects the `cds.xt.Extensions` table even if it is not part of the model.
48
+ - More robust handling of faulty archives sent to `cds.xt.ExtensibilityService.push`.
49
+ - MTX now always uses node-tar for archive handling for more stability.
50
+
9
51
  ## Version 4.1.0 - 2026-09-04
10
52
 
11
53
  ### Added
12
54
 
55
+ - The extensibility login endpoints support SAP Cloud Identity Services (IAS): with `auth: ias`, `cds login` uses an OAuth 2.0 Authorization Code (PKCE) browser flow. The token targets the subscriber tenant (resolved from the `subdomain`), where `cds.ExtensionDeveloper` is granted via AMS policies.
13
56
  - Beta: Multitenant provisioning now supports HANA Cloud serverless, resolving one HDI container per tenant through the serverless Tenant API.
14
57
  - Beta: The MTX job service can now use native javascript workers to make the MTX sidecar more responsive while jobs (e. g. tenant upgrade) are running.
15
58
  Native workers can be enabled by `nativeWorkers` in the jobs configuration, e. g.
@@ -26,6 +69,10 @@ Native workers can be enabled by `nativeWorkers` in the jobs configuration, e. g
26
69
  already upgraded tenants are skipped when running an upgrade of all tenants (`tenants: ['*']`). Tenants are considered as already upgraded if the last upgrade was run after the
27
70
  last deployment of the application.
28
71
 
72
+ ### Added
73
+
74
+ - `cds.env.features.native_hdi_deploy` can now enable native HANA tenant deployment with delta uploads, bulk HDI inputs, and streaming for large artifacts.
75
+
29
76
  ### Fixed
30
77
 
31
78
  - `SmsProvisioningService` certificate check is now better aligned with the Java implementation.
@@ -42,10 +42,8 @@ async function run(param, options) {
42
42
  '@sap/cds-mtxs/srv/model-provider'
43
43
  ]
44
44
 
45
- if (!dry) {
46
- services.push('@sap/cds-mtxs/srv/deployment-service')
47
- services.push('@sap/cds-mtxs/srv/extensibility-service')
48
- }
45
+ services.push('@sap/cds-mtxs/srv/deployment-service')
46
+ services.push('@sap/cds-mtxs/srv/extensibility-service')
49
47
 
50
48
  await _local_server_js()
51
49
  cds.emit ('bootstrap')
@@ -58,10 +56,10 @@ async function run(param, options) {
58
56
  }
59
57
  await cds.plugins
60
58
 
61
- await cds.emit('served', cds.services)
62
-
63
59
  cds.env.requires.multitenancy ??= true // needed for current sidecar config that only enables services
64
60
 
61
+ await cds.emit('served', cds.services)
62
+
65
63
  if (genTenantList) {
66
64
  const tenantListResult = await synchronizeTenantList(tenantList, options)
67
65
  for (let t of tenantListResult.connectedTenants) await cds.db.disconnect(t)
@@ -10,8 +10,9 @@ const SUPPORTED = ['subscribe', 'unsubscribe', 'upgrade']
10
10
  // This function must only be changed in a backward compatible way. It is used by DwC.
11
11
  async function cds_mtx(cmd, tenant, body) {
12
12
 
13
- const tenants = (Array.isArray(tenant) ? tenant : [tenant]).flatMap(t => t.split(','))
13
+ const tenants = (Array.isArray(tenant) ? tenant : [tenant]).flatMap(t => t.split(/[\s,]+/)).filter(Boolean)
14
14
  const one = tenants.length === 1 ? tenants[0] : undefined
15
+ const t0 = cds.env.requires.multitenancy?.t0 ?? 't0'
15
16
 
16
17
  let connectedTenants = []
17
18
 
@@ -56,7 +57,7 @@ async function cds_mtx(cmd, tenant, body) {
56
57
  await tx.upgrade(['*'], parsedMetadata)
57
58
  })
58
59
  return
59
- } else if (one === 't0') {
60
+ } else if (one === t0 && cmd !== 'unsubscribe') {
60
61
  return
61
62
  }
62
63
  connectedTenants = tenants
@@ -70,12 +71,12 @@ async function cds_mtx(cmd, tenant, body) {
70
71
  }
71
72
  } catch(e) {
72
73
  if (isCli) {
73
- console.error(e.message)
74
+ console.error(e)
74
75
  process.exit(1)
75
76
  } else throw e
76
77
  } finally {
77
78
  if (cds.db) {
78
- cds.db.disconnect(cds.env.requires.multitenancy.t0 ?? 't0')
79
+ cds.db.disconnect(t0)
79
80
  for (const t of connectedTenants) cds.db.disconnect(t)
80
81
  }
81
82
  if (isCli) {
@@ -1,4 +1,5 @@
1
1
  const cds = require('@sap/cds')
2
+ const { exists } = cds.utils
2
3
  const LOG = cds.log('mtx')
3
4
  const [major] = cds.version.split('.').map(Number)
4
5
  if (major < 9) throw new Error('@sap/cds-mtxs 3 requires @sap/cds version 9 or higher. Current version: ' + cds.version)
@@ -13,8 +14,13 @@ const sqlDefaults = Object.fromEntries(
13
14
  require('./srv/extensibility/linter').legacyCheck()
14
15
 
15
16
  const main = require('./srv/config')
17
+ const inSidecar = cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true
16
18
 
17
- if (main.env.cdsc && cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true) {
19
+ if (inSidecar && process.env.NODE_ENV === 'production' && !exists(main.root)) {
20
+ throw new Error(`Invalid MTX sidecar layout: '${main.root}' is missing. Ensure the generated sidecar build output is deployed.`)
21
+ }
22
+
23
+ if (main.env.cdsc && inSidecar) {
18
24
  if (cds.env.cdsc && !(cds.env.requires['cds.xt.ModelProviderService']?.['use-local-cdsc-config'] === true)) {
19
25
 
20
26
  // should not be used in MTX
@@ -32,7 +38,7 @@ if (main.env.cdsc && cds.env.requires['cds.xt.ModelProviderService']?._in_sideca
32
38
  cds.env.cdsc = main.env.cdsc
33
39
  }
34
40
 
35
- if (cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true) {
41
+ if (inSidecar) {
36
42
  if (!(cds.env.requires['cds.xt.ModelProviderService']?.['use-root-sql-config'] === true)) {
37
43
  const stringifiedSql = JSON.stringify(cds.env.sql)
38
44
 
@@ -46,3 +52,33 @@ if (cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true) {
46
52
  } else {
47
53
  cds.env.sql = main.env.sql
48
54
  }
55
+
56
+ cds.once('served', async () => {
57
+ if (cds.model.definitions['cds.xt.ModelProviderService']) return
58
+ const { definitions } = cds.model
59
+ const models = []
60
+
61
+ if (cds.requires.multitenancy) {
62
+ _serve('cds.xt.SaasProvisioningService')
63
+ _serve('cds.xt.DeploymentService')
64
+ _serve('cds.xt.ModelProviderService')
65
+ }
66
+
67
+ if (cds.requires.extensibility) {
68
+ _serve('cds.xt.ExtensibilityService')
69
+ _serve('cds.xt.ModelProviderService')
70
+ }
71
+
72
+ if (cds.requires.toggles) {
73
+ _serve('cds.xt.ModelProviderService')
74
+ }
75
+
76
+ function _serve(service) {
77
+ if (service in definitions) return
78
+ if (cds.requires[service] === false) return
79
+ models.push(cds.requires.kinds[service].model)
80
+ }
81
+
82
+ if (models.length) await cds.serve(models).in(cds.app)
83
+ })
84
+ require('./srv/plugins/common')
@@ -7,6 +7,13 @@ entity Tenants {
7
7
  modifiedAt : Timestamp @cds.on.insert : $now @cds.on.update : $now;
8
8
  schema : String;
9
9
  version : String;
10
+ status : TenantStatus default #SUBSCRIBED;
11
+ }
12
+
13
+ type TenantStatus : String enum {
14
+ SUBSCRIBED;
15
+ UNSUBSCRIBING;
16
+ UNSUBSCRIPTION_FAILED;
10
17
  }
11
18
 
12
19
  entity Jobs {
@@ -1,9 +1,28 @@
1
1
  const cds = require('@sap/cds')
2
- const LOG = cds.log('mtx'), DEBUG = cds.debug('mtx'), { read, readdir, path, tar } = cds.utils
2
+ const LOG = cds.log('mtx'), DEBUG = cds.debug('mtx'), { read, readdir, path } = cds.utils
3
+ const nodeTar = require('tar')
4
+ const { Readable } = require('node:stream')
3
5
  const { inspect, promisify } = require('node:util')
4
6
 
7
+ // Extracts a gzipped tar (Buffer or base64) into 'root', guarded against
8
+ // Tar-Slip: node-tar rejects '..'/absolute escapes and the filter drops links.
9
+ const safeUntar = function (extension, root) {
10
+ const buf = typeof extension === 'string' ? Buffer.from(extension, 'base64') : extension
11
+ return new Promise((resolve, reject) => {
12
+ const extract = nodeTar.x({
13
+ cwd: root,
14
+ gzip: true,
15
+ strict: true,
16
+ filter: (_p, entry) => entry.type !== 'SymbolicLink' && entry.type !== 'Link'
17
+ })
18
+ Readable.from(buf).pipe(extract)
19
+ extract.on('close', resolve)
20
+ extract.on('error', reject)
21
+ })
22
+ }
23
+
5
24
  const readData = async function (extension, root) {
6
- await tar.xvz(extension).to(root)
25
+ await safeUntar(extension, root)
7
26
 
8
27
  let extCsn = {}
9
28
  try { extCsn = JSON.parse(await read(path.join(root, 'extension.csn'))) }
@@ -26,7 +45,7 @@ const readData = async function (extension, root) {
26
45
  }
27
46
 
28
47
  const readDataCsv = async function (extension, root) {
29
- await tar.xvz(extension).to(root)
48
+ await safeUntar(extension, root)
30
49
 
31
50
  const csvs = []
32
51
  try {
@@ -104,10 +123,75 @@ function authUrl(baseUrl, subdomain, pathname) {
104
123
  return u
105
124
  }
106
125
 
107
- async function token(credentials, { query = {}, form = {}, subdomain, path = '/oauth/token' } = {}) {
126
+ // IAS OAuth2 endpoint paths (differ from XSUAA).
127
+ const IAS_AUTHORIZE_PATH = '/oauth2/authorize'
128
+ const IAS_TOKEN_PATH = '/oauth2/token'
129
+
130
+ // IAS uses a fixed tenant host (tenant not encoded as subdomain), so don't rewrite the host.
131
+ function _iasUrl(baseUrl, pathname) {
132
+ const u = new URL(baseUrl)
133
+ u.pathname = pathname
134
+ return u
135
+ }
136
+
137
+ // Authorization endpoint (browser) → plain (non-cert) URL.
138
+ function iasAuthorizeUrl(credentials) {
139
+ const { url, certurl } = credentials ?? {}
140
+ return _iasUrl(url || certurl, IAS_AUTHORIZE_PATH).toString()
141
+ }
142
+
143
+ // Token endpoint → prefer cert URL for mTLS.
144
+ function iasTokenUrl(credentials) {
145
+ const { url, certurl } = credentials ?? {}
146
+ return _iasUrl(certurl || url, IAS_TOKEN_PATH).toString()
147
+ }
148
+
149
+ // Resolves the landscape API host that serves `tenantLoginInfo`. Prefers the authoritative
150
+ // `btp-tenant-api` base injected into the binding; otherwise derives it from the binding URL
151
+ // (e.g. `https://<label>.authentication.eu12.hana.ondemand.com` → `api.authentication.eu12.hana.ondemand.com`).
152
+ // Returns undefined when neither yields a usable host.
153
+ function tenantLoginInfoHost(credentials) {
154
+ const c = credentials ?? {}
155
+ // Authoritative BTP landscape API base, injected into the binding.
156
+ const api = c['btp-tenant-api'] ?? c.btp_tenant_api
157
+ if (api) { try { return new URL(api).host } catch { /* ignore */ } }
158
+ // Fallback: derive from the binding URL by replacing the leftmost label with `api`.
159
+ const base = c.url || c.certurl
160
+ if (!base) return undefined
161
+ try {
162
+ const { hostname } = new URL(base)
163
+ const dot = hostname.indexOf('.')
164
+ // Only rewrite when there is a domain part to keep.
165
+ return dot >= 0 ? 'api' + hostname.slice(dot) : undefined
166
+ } catch { return undefined }
167
+ }
168
+
169
+ // Fetches IAS login info for a subscriber subdomain from the landscape endpoint
170
+ // `https://<apiHost>/sap/rest/tenantLoginInfo?subdomain=<subdomain>`.
171
+ // Returns `{ app_tid, tenantHost }` for a trusted/active IAS tenant, otherwise undefined.
172
+ async function tenantLoginInfo(apiHost, subdomain) {
173
+ if (!apiHost || typeof subdomain !== 'string' || !SUBDOMAIN_RE.test(subdomain)) return undefined
174
+ const url = `https://${apiHost}/sap/rest/tenantLoginInfo?subdomain=${encodeURIComponent(subdomain)}`
175
+ try {
176
+ const { data } = await fetchResiliently(url, { method: 'GET', headers: { Accept: 'application/json' } })
177
+ const info = typeof data === 'string' ? JSON.parse(data) : data
178
+ // An untrusted/unknown subdomain yields e.g. `{ status: 'NOTRUST', authentication: 'xsuaa' }`.
179
+ if (!info || !info.app_tid) return undefined
180
+ let tenantHost
181
+ try { tenantHost = info.authorization_endpoint && new URL(info.authorization_endpoint).host } catch { /* ignore */ }
182
+ return { app_tid: info.app_tid, tenantHost }
183
+ } catch (err) {
184
+ DEBUG?.('tenantLoginInfo lookup failed for subdomain', subdomain, '-', err.message)
185
+ return undefined
186
+ }
187
+ }
188
+
189
+ // `endpoint`, when given, is the absolute token URL and overrides the binding-derived
190
+ // host; mTLS cert/key and client_id still come from `credentials`.
191
+ async function token(credentials, { query = {}, form = {}, subdomain, path = '/oauth/token', endpoint } = {}) {
108
192
  const { clientid, clientsecret, certurl, url, certificate, key } = credentials ?? {}
109
193
  if (!form.grant_type) throw cds.error('grant_type is required', { status: 400 })
110
- const u = authUrl(certurl || url, subdomain, path)
194
+ const u = endpoint ? new URL(endpoint) : authUrl(certurl || url, subdomain, path)
111
195
  Object.entries(query).forEach(([k, v]) => u.searchParams.append(k, v))
112
196
  const body = new URLSearchParams({ client_id: clientid, ...form })
113
197
  const headers = { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'application/json' }
@@ -134,7 +218,10 @@ async function token(credentials, { query = {}, form = {}, subdomain, path = '/o
134
218
  req.end(body.toString())
135
219
  })
136
220
  } else {
137
- headers.Authorization = 'Basic ' + Buffer.from(`${clientid}:${clientsecret}`).toString('base64')
221
+ // Confidential client → Basic auth; public client (PKCE) → no auth (client_id is in the body).
222
+ if (clientsecret) {
223
+ headers.Authorization = 'Basic ' + Buffer.from(`${clientid}:${clientsecret}`).toString('base64')
224
+ }
138
225
  const res = await fetchResiliently(u.toString(), { method: 'POST', headers, body: body.toString() })
139
226
  raw = typeof res.data === 'string' ? res.data : JSON.stringify(res.data)
140
227
  }
@@ -142,15 +229,18 @@ async function token(credentials, { query = {}, form = {}, subdomain, path = '/o
142
229
  }
143
230
 
144
231
  const maxRetries = cds.requires?.multitenancy?.serviceManager?.retries ?? 3 // compat
232
+ const retryHeaders = new Set(['retry-after', 'x-ratelimit-retry-after', 'x-ratelimit-limit', 'x-ratelimit-remaining', 'x-request-id', 'x-correlation-id'])
233
+
234
+ async function fetchResiliently(url, req, { retries = maxRetries, retriesLeft = retries, maxRetryAfter = 5000, failures = 0, retryUntil } = {}) {
235
+ const _backoff = async (attempt, minDelay = 200, error) => {
236
+ const maxDelay = maxRetryAfter
237
+ const baseDelay = Math.max(200 * 2.5 ** attempt, minDelay)
238
+ const delay = Math.max(minDelay, Math.min(maxDelay, baseDelay * (0.5 + Math.random())))
145
239
 
146
- async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAfter = 5000, failures = 0, retryUntil } = {}) {
147
- const _backoff = async (attempt, minDelay = 200) => {
148
- const maxDelay = 32_000
149
- const delay = Math.max(200, Math.min(maxDelay, minDelay * 2 ** attempt))
150
240
  if (retryUntil && Date.now() + delay > retryUntil) {
151
241
  throw new Error('Retry delay threshold exceeded')
152
242
  }
153
- LOG.info('attempt', attempt, 'failed – retrying with', delay / 1000, 's delay')
243
+ LOG.info('attempt', attempt, 'failed', ...(error ? ['with', error.message ?? error] : []), '– retrying with', (delay / 1000).toFixed(1), 's delay')
154
244
  await new Promise(resolve => setTimeout(resolve, delay))
155
245
  }
156
246
 
@@ -177,8 +267,11 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
177
267
  const data = contentType.includes('application/json') ? await res.json() : await res.text()
178
268
 
179
269
  if (!res.ok) {
180
- let msg = [status, statusText, data?.message, typeof data?.error === 'object' ? JSON.stringify(data.error) : data?.error, data?.description, data?.cause, typeof data?.details === 'object' ? JSON.stringify(data.details) : data?.details].filter(Boolean).join(' – ')
181
- if (res.status === 429 && res.headers.get('retry-after')) msg += ` – retry after ${res.headers.get('retry-after')}`
270
+ let msg = [status, statusText, data?.message, typeof data?.error === 'object' ? JSON.stringify(data.error) : data?.error, data?.description, data?.cause].filter(Boolean).join(' – ')
271
+ if (res.status === 429) {
272
+ const relevantHeaders = Object.fromEntries(Object.entries(headers).filter(([name]) => retryHeaders.has(name)))
273
+ msg += ` – headers: ${inspect(relevantHeaders)}`
274
+ }
182
275
  throw Object.assign(new Error(msg), { status, statusText, headers, code: data?.error?.code })
183
276
  }
184
277
  const response = { status, statusText, headers, data }
@@ -186,10 +279,13 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
186
279
  return response
187
280
  } catch (error) {
188
281
  const { status } = error ?? { status: 500 }
189
- if (status in { 400: 1, 401: 1, 403: 1, 404: 1, 409: 1 } || retriesLeft === 0) return Promise.reject(error)
190
- const minDelay = parseRetryAfter(error.headers || {})
191
- if (status === 429 && (minDelay < 0 || minDelay > maxRetryAfter) || retriesLeft === 0) return Promise.reject(error)
192
- const attempt = Math.max(maxRetries - retriesLeft + 1, failures)
282
+ if (status in { 400: 1, 401: 1, 403: 1, 404: 1, 409: 1, 422: 1 } || retriesLeft === 0) return Promise.reject(error)
283
+ const parsedRetryAfter = parseRetryAfter(error.headers || {})
284
+ const minDelay = status === 429
285
+ ? (parsedRetryAfter >= 0 ? Math.max(1000, parsedRetryAfter) : 1000)
286
+ : Math.max(200, parsedRetryAfter)
287
+ if (status === 429 && minDelay > maxRetryAfter || retriesLeft === 0) return Promise.reject(error)
288
+ const attempt = Math.max(retries - retriesLeft + 1, failures)
193
289
  if (LOG._debug) {
194
290
  const e = error.toJSON?.() ?? error
195
291
  DEBUG(`fetching ${url} attempt ${attempt} failed with`, {
@@ -198,14 +294,20 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
198
294
  ...(e.description && { description: e.description })
199
295
  })
200
296
  }
201
- await _backoff(attempt, minDelay)
202
- return fetchResiliently(url, req, { retriesLeft: retriesLeft - 1, failures, retryUntil })
297
+ await _backoff(attempt, minDelay, error)
298
+ return fetchResiliently(url, req, {
299
+ retries,
300
+ retriesLeft: retriesLeft - 1,
301
+ maxRetryAfter,
302
+ failures,
303
+ retryUntil
304
+ })
203
305
  }
204
306
  }
205
307
 
206
308
  // TODO define max acceptable retry-after value?
207
309
  function parseRetryAfter(headers) {
208
- const retryAfter = headers['retry-after']
310
+ const retryAfter = headers['retry-after'] ?? headers['x-ratelimit-retry-after']
209
311
  // Handle seconds format (most common)
210
312
  if (/^\d+$/.test(retryAfter)) {
211
313
  return parseInt(retryAfter, 10) * 1000 // Convert to milliseconds
@@ -263,8 +365,15 @@ module.exports = {
263
365
  retry,
264
366
  readData,
265
367
  readDataCsv,
368
+ safeUntar,
266
369
  token,
267
370
  authUrl,
371
+ iasAuthorizeUrl,
372
+ iasTokenUrl,
373
+ tenantLoginInfoHost,
374
+ tenantLoginInfo,
375
+ IAS_AUTHORIZE_PATH,
376
+ IAS_TOKEN_PATH,
268
377
  fetchResiliently,
269
378
  getAppId,
270
379
  deepMerge