@sap/cds-dk 10.1.2 → 10.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (898) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/bin/add.js +7 -2
  3. package/bin/bind.js +5 -6
  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 +28 -19
  9. package/bin/completion/scripts/cds.ps1 +30 -29
  10. package/bin/completion/scripts/cds.sh +26 -23
  11. package/bin/completion/scripts/cds.zsh +26 -23
  12. package/bin/debug.js +3 -3
  13. package/bin/deploy/index.js +3 -3
  14. package/bin/deploy/to-hana/hana.js +6 -5
  15. package/bin/deploy/to-hana/hdiDeployUtil.js +25 -14
  16. package/bin/env.js +0 -1
  17. package/bin/eval.js +9 -5
  18. package/bin/export.js +6 -4
  19. package/bin/help/export.md +28 -4
  20. package/bin/import.js +6 -5
  21. package/bin/inspect.js +0 -1
  22. package/bin/login.js +28 -3
  23. package/bin/repl.js +82 -26
  24. package/bin/run.js +6 -7
  25. package/bin/serve.js +6 -7
  26. package/bin/up.js +10 -5
  27. package/bin/upgrade/steps/install.js +6 -6
  28. package/bin/version.js +1 -1
  29. package/bin/watch/index.js +1 -0
  30. package/bin/watch/vite-watch.js +12 -6
  31. package/lib/bind/shared.js +1 -1
  32. package/lib/build/index.js +11 -7
  33. package/lib/build/plugins/featureToggles.js +2 -2
  34. package/lib/build/plugins/hana/index.js +1 -1
  35. package/lib/build/plugins/helm/files/subcharts/web-application/Chart.yaml +1 -1
  36. package/lib/build/plugins/helm/files/subcharts/web-application/templates/_helpers.tpl +7 -0
  37. package/lib/build/plugins/helm/files/subcharts/web-application/templates/api-rule.yaml +1 -0
  38. package/lib/build/plugins/helm/files/subcharts/web-application/templates/service-binding.yaml +4 -4
  39. package/lib/build/plugins/helm/files/subcharts/web-application/values.schema.json +13 -0
  40. package/lib/build/plugins/helm/files/subcharts/web-application/values.yaml +7 -1
  41. package/lib/build/plugins/java/index.js +5 -1
  42. package/lib/build/plugins/nodejs/index.js +5 -1
  43. package/lib/build/util.js +4 -5
  44. package/lib/env/schemas/cds-rc.js +5 -0
  45. package/lib/import/importapi.js +2 -3
  46. package/lib/init/constants.js +1 -1
  47. package/lib/init/index.js +9 -3
  48. package/lib/init/plugin.js +1 -1
  49. package/lib/init/projectReader.js +16 -12
  50. package/lib/init/registries/mta.js +0 -6
  51. package/lib/init/template/ai/index.js +4 -4
  52. package/lib/init/template/ams/files/extensionDeveloper.dcl +6 -0
  53. package/lib/init/template/ams/files/mta.yaml.hbs +6 -0
  54. package/lib/init/template/ams/files/sidecar.package.json.hbs +5 -0
  55. package/lib/init/template/ams/index.js +42 -40
  56. package/lib/init/template/app-frontend/files/mta.yaml.hbs +2 -0
  57. package/lib/init/template/app-frontend/files/ui5.yaml.hbs +0 -4
  58. package/lib/init/template/app-frontend/index.js +29 -24
  59. package/lib/init/template/application-logging/index.js +6 -6
  60. package/lib/init/template/approuter/files/values.yaml.hbs +0 -9
  61. package/lib/init/template/approuter/index.js +19 -13
  62. package/lib/init/template/attachments/index.js +3 -3
  63. package/lib/init/template/audit-logging/index.js +4 -4
  64. package/lib/init/template/cloud-logging/index.js +12 -6
  65. package/lib/init/template/completion/completionSetup.js +19 -6
  66. package/lib/init/template/connectivity/index.js +3 -3
  67. package/lib/init/template/data/as-csv.js +7 -4
  68. package/lib/init/template/data/as-json.js +77 -20
  69. package/lib/init/template/destination/index.js +12 -9
  70. package/lib/init/template/dynatrace/index.js +5 -5
  71. package/lib/init/template/enterprise-messaging/index.js +6 -6
  72. package/lib/init/template/enterprise-messaging-shared/index.js +4 -4
  73. package/lib/init/template/extensibility/index.js +2 -2
  74. package/lib/init/template/extension/index.js +26 -0
  75. package/lib/init/template/github-actions/index.js +3 -3
  76. package/lib/init/template/hana/files/package.json.hbs +3 -2
  77. package/lib/init/template/hana/index.js +5 -5
  78. package/lib/init/template/hana-serverless/index.js +3 -3
  79. package/lib/init/template/html5-repo/files/mta.yaml.hbs +2 -0
  80. package/lib/init/template/html5-repo/files/ui5.yaml.hbs +0 -4
  81. package/lib/init/template/html5-repo/index.js +80 -40
  82. package/lib/init/template/http/index.js +1 -1
  83. package/lib/init/template/ias/index.js +7 -7
  84. package/lib/init/template/initial/files/.gitignore.hbs +1 -0
  85. package/lib/init/template/kafka/index.js +3 -3
  86. package/lib/init/template/kyma/index.js +7 -9
  87. package/lib/init/template/malware-scanner/index.js +3 -3
  88. package/lib/init/template/mta/index.js +6 -3
  89. package/lib/init/template/multitenancy/index.js +6 -7
  90. package/lib/init/template/notifications/index.js +2 -2
  91. package/lib/init/template/portal/index.js +16 -10
  92. package/lib/init/template/postgres/index.js +5 -5
  93. package/lib/init/template/react/files/index.html.hbs +1 -1
  94. package/lib/init/template/react/files/package.json.hbs +3 -2
  95. package/lib/init/template/react/files/src/{App.jsx.hbs → App.{{jsxExtension}}.hbs} +8 -2
  96. package/lib/init/template/react/files/src/{main.jsx → main.{{jsxExtension}}.hbs} +2 -2
  97. package/lib/init/template/react/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +2 -3
  98. package/lib/init/template/react/index.js +22 -5
  99. package/lib/init/template/react/typescript/src/vite-env.d.ts +1 -0
  100. package/lib/init/template/react/typescript/tsconfig.json.hbs +16 -0
  101. package/lib/init/template/redis/index.js +2 -2
  102. package/lib/init/template/sample/files/app/index.html.hbs +18 -0
  103. package/lib/init/template/sample/index.js +1 -0
  104. package/lib/init/template/side-by-side-extensibility/index.js +6 -3
  105. package/lib/init/template/typescript/files/tsconfig.json +3 -1
  106. package/lib/init/template/vue/files/index.html.hbs +1 -1
  107. package/lib/init/template/vue/files/package.json.hbs +2 -1
  108. package/lib/init/template/vue/files/src/App.vue.hbs +8 -2
  109. package/lib/init/template/vue/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +2 -3
  110. package/lib/init/template/vue/index.js +19 -5
  111. package/lib/init/template/vue/typescript/tsconfig.json +11 -0
  112. package/lib/init/template/workzone-standard/files/mta.yaml.hbs +2 -2
  113. package/lib/init/template/workzone-standard/index.js +29 -27
  114. package/lib/init/template/xsuaa/files/mta.yaml.hbs +1 -1
  115. package/lib/init/template/xsuaa/files/values.yaml.hbs +1 -1
  116. package/lib/init/template/xsuaa/index.js +34 -22
  117. package/lib/mtx/auth_manager.js +8 -2
  118. package/lib/mtx/browser_login.js +181 -0
  119. package/lib/mtx/params.js +6 -0
  120. package/lib/mtx/push.js +7 -1
  121. package/lib/mtx/settings_manager.js +29 -4
  122. package/lib/util/cf.js +44 -8
  123. package/lib/util/fs.js +2 -2
  124. package/node_modules/@cap-js/asyncapi/README.md +4 -14
  125. package/node_modules/@cap-js/asyncapi/cds-plugin.js +12 -0
  126. package/node_modules/@cap-js/asyncapi/index.js +3 -2
  127. package/node_modules/@cap-js/asyncapi/lib/compile/components/messages/index.js +4 -2
  128. package/node_modules/@cap-js/asyncapi/lib/compile/components/schemas/definition.js +11 -1
  129. package/node_modules/@cap-js/asyncapi/lib/compile/components/schemas/utils.js +16 -0
  130. package/node_modules/@cap-js/asyncapi/lib/compile/utils.js +4 -3
  131. package/node_modules/@cap-js/asyncapi/lib/import/importAsyncAPI.js +34 -0
  132. package/node_modules/@cap-js/asyncapi/lib/import/index.js +18 -0
  133. package/node_modules/@cap-js/asyncapi/lib/import/message.js +9 -0
  134. package/node_modules/@cap-js/asyncapi/lib/import/parserContext.js +368 -0
  135. package/node_modules/@cap-js/asyncapi/lib/import/utils.js +85 -0
  136. package/node_modules/@cap-js/asyncapi/package.json +89 -1
  137. package/node_modules/@cap-js/db-service/CHANGELOG.md +10 -0
  138. package/node_modules/@cap-js/db-service/lib/cqn2pql.js +4 -0
  139. package/node_modules/@cap-js/db-service/lib/cqn2sql.js +3 -0
  140. package/node_modules/@cap-js/db-service/lib/cqn4sql.js +8 -23
  141. package/node_modules/@cap-js/db-service/lib/infer/index.js +20 -27
  142. package/node_modules/@cap-js/db-service/package.json +1 -1
  143. package/node_modules/@cap-js/openapi/cds-plugin.js +12 -0
  144. package/node_modules/@cap-js/openapi/index.js +3 -1
  145. package/node_modules/@cap-js/openapi/lib/compile/csdl2openapi.js +652 -413
  146. package/node_modules/@cap-js/openapi/lib/compile/diagram.js +16 -13
  147. package/node_modules/@cap-js/openapi/lib/compile/index.js +10 -7
  148. package/node_modules/@cap-js/openapi/lib/compile/property-util.js +51 -0
  149. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/importOpenAPI.js +12 -9
  150. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/index.js +4 -3
  151. package/node_modules/@cap-js/openapi/package.json +71 -3
  152. package/node_modules/@cap-js/sqlite/CHANGELOG.md +9 -0
  153. package/node_modules/@cap-js/sqlite/package.json +3 -3
  154. package/node_modules/@isaacs/fs-minipass/LICENSE +15 -0
  155. package/node_modules/@isaacs/fs-minipass/README.md +71 -0
  156. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts +118 -0
  157. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts.map +1 -0
  158. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +430 -0
  159. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js.map +1 -0
  160. package/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +3 -0
  161. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts +118 -0
  162. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts.map +1 -0
  163. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js +420 -0
  164. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js.map +1 -0
  165. package/node_modules/@isaacs/fs-minipass/dist/esm/package.json +3 -0
  166. package/node_modules/@isaacs/fs-minipass/package.json +72 -0
  167. package/node_modules/@sap/cds/CHANGELOG.md +62 -1
  168. package/node_modules/@sap/cds/_i18n/messages_ar.properties +1 -0
  169. package/node_modules/@sap/cds/_i18n/messages_bg.properties +1 -0
  170. package/node_modules/@sap/cds/_i18n/messages_cs.properties +1 -0
  171. package/node_modules/@sap/cds/_i18n/messages_da.properties +1 -0
  172. package/node_modules/@sap/cds/_i18n/messages_de.properties +1 -0
  173. package/node_modules/@sap/cds/_i18n/messages_el.properties +1 -0
  174. package/node_modules/@sap/cds/_i18n/messages_en.properties +1 -0
  175. package/node_modules/@sap/cds/_i18n/messages_es.properties +1 -0
  176. package/node_modules/@sap/cds/_i18n/messages_es_MX.properties +1 -0
  177. package/node_modules/@sap/cds/_i18n/messages_fi.properties +1 -0
  178. package/node_modules/@sap/cds/_i18n/messages_fr.properties +1 -0
  179. package/node_modules/@sap/cds/_i18n/messages_he.properties +1 -0
  180. package/node_modules/@sap/cds/_i18n/messages_hr.properties +1 -0
  181. package/node_modules/@sap/cds/_i18n/messages_hu.properties +1 -0
  182. package/node_modules/@sap/cds/_i18n/messages_it.properties +1 -0
  183. package/node_modules/@sap/cds/_i18n/messages_ja.properties +1 -0
  184. package/node_modules/@sap/cds/_i18n/messages_kk.properties +1 -0
  185. package/node_modules/@sap/cds/_i18n/messages_ko.properties +1 -0
  186. package/node_modules/@sap/cds/_i18n/messages_ms.properties +1 -0
  187. package/node_modules/@sap/cds/_i18n/messages_nl.properties +1 -0
  188. package/node_modules/@sap/cds/_i18n/messages_no.properties +1 -0
  189. package/node_modules/@sap/cds/_i18n/messages_pl.properties +1 -0
  190. package/node_modules/@sap/cds/_i18n/messages_pt.properties +1 -0
  191. package/node_modules/@sap/cds/_i18n/messages_ro.properties +1 -0
  192. package/node_modules/@sap/cds/_i18n/messages_ru.properties +1 -0
  193. package/node_modules/@sap/cds/_i18n/messages_sh.properties +1 -0
  194. package/node_modules/@sap/cds/_i18n/messages_sk.properties +1 -0
  195. package/node_modules/@sap/cds/_i18n/messages_sl.properties +1 -0
  196. package/node_modules/@sap/cds/_i18n/messages_sv.properties +1 -0
  197. package/node_modules/@sap/cds/_i18n/messages_th.properties +1 -0
  198. package/node_modules/@sap/cds/_i18n/messages_tr.properties +1 -0
  199. package/node_modules/@sap/cds/_i18n/messages_uk.properties +1 -0
  200. package/node_modules/@sap/cds/_i18n/messages_vi.properties +1 -0
  201. package/node_modules/@sap/cds/_i18n/messages_zh_CN.properties +1 -0
  202. package/node_modules/@sap/cds/_i18n/messages_zh_TW.properties +1 -0
  203. package/node_modules/@sap/cds/app/index-client.js +164 -0
  204. package/node_modules/@sap/cds/app/index.css +598 -87
  205. package/node_modules/@sap/cds/app/index.html +54 -30
  206. package/node_modules/@sap/cds/app/index.js +311 -67
  207. package/node_modules/@sap/cds/app/table.html +226 -0
  208. package/node_modules/@sap/cds/app/table.js +302 -0
  209. package/node_modules/@sap/cds/bin/serve.js +3 -2
  210. package/node_modules/@sap/cds/eslint.config.mjs +2 -0
  211. package/node_modules/@sap/cds/lib/compile/cdsc.js +7 -0
  212. package/node_modules/@sap/cds/lib/compile/for/embeddings.js +27 -0
  213. package/node_modules/@sap/cds/lib/compile/load.js +2 -2
  214. package/node_modules/@sap/cds/lib/compile/minify.js +17 -4
  215. package/node_modules/@sap/cds/lib/compile/parse.js +3 -0
  216. package/node_modules/@sap/cds/lib/compile/resolve.js +16 -14
  217. package/node_modules/@sap/cds/lib/core/classes.js +1 -0
  218. package/node_modules/@sap/cds/lib/dbs/cds-deploy.js +4 -5
  219. package/node_modules/@sap/cds/lib/env/cds-env.js +132 -70
  220. package/node_modules/@sap/cds/lib/env/cds-requires/auth-strategies.js +62 -0
  221. package/node_modules/@sap/cds/lib/env/cds-requires/databases.js +49 -0
  222. package/node_modules/@sap/cds/lib/env/cds-requires/embeddings.js +8 -0
  223. package/node_modules/@sap/cds/lib/env/cds-requires/index.js +27 -0
  224. package/node_modules/@sap/cds/lib/env/cds-requires/messaging.js +82 -0
  225. package/node_modules/@sap/cds/lib/env/cds-requires/platform.js +23 -0
  226. package/node_modules/@sap/cds/lib/env/cds-requires/queues.js +34 -0
  227. package/node_modules/@sap/cds/lib/env/cds-requires/services.js +32 -0
  228. package/node_modules/@sap/cds/lib/env/defaults.js +9 -1
  229. package/node_modules/@sap/cds/lib/env/schemas/cds-package.js +0 -2
  230. package/node_modules/@sap/cds/lib/env/schemas/cds-rc.js +3 -3
  231. package/node_modules/@sap/cds/lib/env/schemas/index.js +4 -4
  232. package/node_modules/@sap/cds/lib/i18n/files.js +4 -4
  233. package/node_modules/@sap/cds/lib/i18n/locale.js +1 -1
  234. package/node_modules/@sap/cds/lib/index.js +9 -9
  235. package/node_modules/@sap/cds/lib/log/cds-log.js +3 -3
  236. package/node_modules/@sap/cds/lib/ql/SELECT.js +2 -0
  237. package/node_modules/@sap/cds/lib/ql/UPDATE.js +1 -1
  238. package/node_modules/@sap/cds/lib/ql/cds.ql-Query.js +4 -1
  239. package/node_modules/@sap/cds/lib/ql/core/@types/cqn.d.ts +146 -0
  240. package/node_modules/@sap/cds/lib/ql/core/@types/exprs.d.ts +51 -0
  241. package/node_modules/@sap/cds/lib/ql/core/@types/index.d.ts +29 -0
  242. package/node_modules/@sap/cds/lib/ql/core/@types/package.json +7 -0
  243. package/node_modules/@sap/cds/lib/ql/core/@types/ql/delete.d.ts +8 -0
  244. package/node_modules/@sap/cds/lib/ql/core/@types/ql/insert.d.ts +19 -0
  245. package/node_modules/@sap/cds/lib/ql/core/@types/ql/select.d.ts +24 -0
  246. package/node_modules/@sap/cds/lib/ql/core/@types/ql/update.d.ts +10 -0
  247. package/node_modules/@sap/cds/lib/ql/core/@types/query.d.ts +18 -0
  248. package/node_modules/@sap/cds/lib/ql/core/cql/parser.min.js +1 -0
  249. package/node_modules/@sap/cds/lib/ql/core/lib/index.js +69 -0
  250. package/node_modules/@sap/cds/lib/ql/core/lib/ql/cache.js +34 -0
  251. package/node_modules/@sap/cds/lib/ql/core/lib/ql/call-action.js +6 -0
  252. package/node_modules/@sap/cds/lib/ql/core/lib/ql/delete.js +8 -0
  253. package/node_modules/@sap/cds/lib/ql/core/lib/ql/insert.js +26 -0
  254. package/node_modules/@sap/cds/lib/ql/core/lib/ql/select.js +22 -0
  255. package/node_modules/@sap/cds/lib/ql/core/lib/ql/update.js +26 -0
  256. package/node_modules/@sap/cds/lib/ql/core/lib/query.js +85 -0
  257. package/node_modules/@sap/cds/lib/ql/core/lib/xl/fluent.js +47 -0
  258. package/node_modules/@sap/cds/lib/ql/core/lib/xl/ttl.js +24 -0
  259. package/node_modules/@sap/cds/lib/ql/core/license +201 -0
  260. package/node_modules/@sap/cds/lib/ql/core/package.json +24 -0
  261. package/node_modules/@sap/cds/lib/ql/core/readme.md +99 -0
  262. package/node_modules/@sap/cds/lib/ql/core/upstream.json +5 -0
  263. package/node_modules/@sap/cds/lib/req/spawn.js +1 -1
  264. package/node_modules/@sap/cds/lib/srv/bindings.js +111 -115
  265. package/node_modules/@sap/cds/lib/srv/cds-connect.js +11 -10
  266. package/node_modules/@sap/cds/lib/srv/cds-serve.js +16 -7
  267. package/node_modules/@sap/cds/lib/srv/cds.Service.js +13 -7
  268. package/node_modules/@sap/cds/lib/srv/factory.js +8 -10
  269. package/node_modules/@sap/cds/lib/srv/middlewares/auth/ias-auth.js +35 -32
  270. package/node_modules/@sap/cds/lib/srv/middlewares/auth/jwt-auth.js +5 -1
  271. package/node_modules/@sap/cds/lib/srv/middlewares/auth/mocked-users.js +1 -1
  272. package/node_modules/@sap/cds/lib/srv/protocols/hcql.js +230 -79
  273. package/node_modules/@sap/cds/lib/srv/protocols/http.js +7 -3
  274. package/node_modules/@sap/cds/lib/srv/protocols/index.js +7 -2
  275. package/node_modules/@sap/cds/lib/srv/srv-dispatch.js +2 -2
  276. package/node_modules/@sap/cds/lib/utils/cds-utils.js +50 -0
  277. package/node_modules/@sap/cds/lib/utils/csv-reader.js +2 -2
  278. package/node_modules/@sap/cds/libx/_runtime/common/generic/assert.js +18 -27
  279. package/node_modules/@sap/cds/libx/_runtime/common/generic/crud.js +1 -1
  280. package/node_modules/@sap/cds/libx/_runtime/common/utils/rewriteAsterisks.js +1 -1
  281. package/node_modules/@sap/cds/libx/_runtime/fiori/lean-draft.js +121 -84
  282. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/authorizedRequest.js +24 -1
  283. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/connections.js +45 -39
  284. package/node_modules/@sap/cds/libx/_runtime/remote/Service.js +2 -2
  285. package/node_modules/@sap/cds/libx/_runtime/remote/utils/client.js +3 -2
  286. package/node_modules/@sap/cds/libx/_runtime/remote/utils/query.js +11 -6
  287. package/node_modules/@sap/cds/libx/odata/ODataAdapter.js +1 -1
  288. package/node_modules/@sap/cds/libx/odata/middleware/create.js +4 -0
  289. package/node_modules/@sap/cds/libx/odata/middleware/metadata.js +1 -1
  290. package/node_modules/@sap/cds/libx/odata/middleware/operation.js +3 -0
  291. package/node_modules/@sap/cds/libx/odata/middleware/parse.js +9 -0
  292. package/node_modules/@sap/cds/libx/odata/middleware/read.js +6 -0
  293. package/node_modules/@sap/cds/libx/odata/middleware/update.js +5 -1
  294. package/node_modules/@sap/cds/libx/odata/parse/afterburner.js +3 -3
  295. package/node_modules/@sap/cds/libx/odata/parse/multipartToJson.js +1 -1
  296. package/node_modules/@sap/cds/libx/odata/utils/ieee754.js +20 -0
  297. package/node_modules/@sap/cds/libx/queue/TaskRunner.js +22 -5
  298. package/node_modules/@sap/cds/libx/queue/api.js +1 -1
  299. package/node_modules/@sap/cds/libx/queue/index.js +3 -1
  300. package/node_modules/@sap/cds/libx/queue/processing.js +5 -0
  301. package/node_modules/@sap/cds/libx/rest/RestAdapter.js +1 -0
  302. package/node_modules/@sap/cds/package.json +2 -2
  303. package/node_modules/@sap/cds/server.js +1 -0
  304. package/node_modules/@sap/cds/srv/ucl-service.cds +1 -0
  305. package/node_modules/@sap/cds-compiler/CHANGELOG.md +83 -0
  306. package/node_modules/@sap/cds-compiler/bin/cdsse.js +1 -1
  307. package/node_modules/@sap/cds-compiler/doc/EffectiveCSN.md +3314 -0
  308. package/node_modules/@sap/cds-compiler/lib/api/main.js +9 -6
  309. package/node_modules/@sap/cds-compiler/lib/api/options.js +3 -3
  310. package/node_modules/@sap/cds-compiler/lib/{model → base}/csnUtils.js +5 -5
  311. package/node_modules/@sap/cds-compiler/lib/base/message-registry.js +54 -6
  312. package/node_modules/@sap/cds-compiler/lib/base/optionProcessor.js +4 -4
  313. package/node_modules/@sap/cds-compiler/lib/{model → base}/sortViews.js +1 -1
  314. package/node_modules/@sap/cds-compiler/lib/checks/assocOutsideService.js +1 -1
  315. package/node_modules/@sap/cds-compiler/lib/checks/checkForTypes.js +1 -1
  316. package/node_modules/@sap/cds-compiler/lib/checks/checkPathsInStoredCalcElement.js +1 -1
  317. package/node_modules/@sap/cds-compiler/lib/checks/elements.js +37 -3
  318. package/node_modules/@sap/cds-compiler/lib/checks/enricher.js +1 -1
  319. package/node_modules/@sap/cds-compiler/lib/checks/existsInForbiddenPlaces.js +1 -1
  320. package/node_modules/@sap/cds-compiler/lib/checks/hasPersistedElements.js +1 -1
  321. package/node_modules/@sap/cds-compiler/lib/checks/manyExpand.js +1 -1
  322. package/node_modules/@sap/cds-compiler/lib/checks/manyNavigations.js +1 -1
  323. package/node_modules/@sap/cds-compiler/lib/checks/onConditions.js +1 -1
  324. package/node_modules/@sap/cds-compiler/lib/checks/parameters.js +1 -1
  325. package/node_modules/@sap/cds-compiler/lib/checks/queryNoDbArtifacts.js +1 -1
  326. package/node_modules/@sap/cds-compiler/lib/checks/selectItems.js +1 -1
  327. package/node_modules/@sap/cds-compiler/lib/checks/structuredAnnoExpressions.js +1 -1
  328. package/node_modules/@sap/cds-compiler/lib/checks/typeParameters.js +1 -1
  329. package/node_modules/@sap/cds-compiler/lib/checks/types.js +1 -1
  330. package/node_modules/@sap/cds-compiler/lib/checks/validator.js +1 -1
  331. package/node_modules/@sap/cds-compiler/lib/compiler/assert-consistency.js +20 -12
  332. package/node_modules/@sap/cds-compiler/lib/compiler/builtins.js +9 -4
  333. package/node_modules/@sap/cds-compiler/lib/compiler/checks.js +50 -0
  334. package/node_modules/@sap/cds-compiler/lib/compiler/define.js +303 -323
  335. package/node_modules/@sap/cds-compiler/lib/compiler/dictionaries.js +5 -0
  336. package/node_modules/@sap/cds-compiler/lib/compiler/extend.js +1015 -1177
  337. package/node_modules/@sap/cds-compiler/lib/compiler/generate.js +55 -42
  338. package/node_modules/@sap/cds-compiler/lib/compiler/populate.js +74 -45
  339. package/node_modules/@sap/cds-compiler/lib/compiler/propagator.js +1 -0
  340. package/node_modules/@sap/cds-compiler/lib/compiler/resolve.js +6 -4
  341. package/node_modules/@sap/cds-compiler/lib/compiler/shared.js +30 -49
  342. package/node_modules/@sap/cds-compiler/lib/compiler/utils.js +32 -18
  343. package/node_modules/@sap/cds-compiler/lib/edm/annotations/edmJson.js +3 -3
  344. package/node_modules/@sap/cds-compiler/lib/edm/annotations/genericTranslation.js +2 -2
  345. package/node_modules/@sap/cds-compiler/lib/edm/annotations/preprocessAnnotations.js +2 -3
  346. package/node_modules/@sap/cds-compiler/lib/edm/csn2edm.js +1 -1
  347. package/node_modules/@sap/cds-compiler/lib/edm/edm.js +6 -7
  348. package/node_modules/@sap/cds-compiler/lib/edm/edmAnnoPreprocessor.js +1 -1
  349. package/node_modules/@sap/cds-compiler/lib/edm/edmInboundChecks.js +1 -1
  350. package/node_modules/@sap/cds-compiler/lib/edm/edmPreprocessor.js +1 -1
  351. package/node_modules/@sap/cds-compiler/lib/edm/edmUtils.js +12 -7
  352. package/node_modules/@sap/cds-compiler/lib/gen/CdlGrammar.checksum +1 -1
  353. package/node_modules/@sap/cds-compiler/lib/gen/CdlParser.js +15 -15
  354. package/node_modules/@sap/cds-compiler/lib/gen/Dictionary.json +7 -0
  355. package/node_modules/@sap/cds-compiler/lib/json/from-csn.js +30 -30
  356. package/node_modules/@sap/cds-compiler/lib/json/to-csn.js +2 -1
  357. package/node_modules/@sap/cds-compiler/lib/main.js +4 -1
  358. package/node_modules/@sap/cds-compiler/lib/parsers/AstBuildingParser.js +42 -15
  359. package/node_modules/@sap/cds-compiler/lib/render/DuplicateChecker.js +37 -11
  360. package/node_modules/@sap/cds-compiler/lib/render/manageConstraints.js +1 -1
  361. package/node_modules/@sap/cds-compiler/lib/render/toCdl.js +11 -6
  362. package/node_modules/@sap/cds-compiler/lib/render/toRename.js +1 -1
  363. package/node_modules/@sap/cds-compiler/lib/render/toSql.js +74 -24
  364. package/node_modules/@sap/cds-compiler/lib/render/utils/common.js +1 -1
  365. package/node_modules/@sap/cds-compiler/lib/render/utils/operators.js +81 -0
  366. package/node_modules/@sap/cds-compiler/lib/render/utils/sql.js +17 -10
  367. package/node_modules/@sap/cds-compiler/lib/transform/db/assertUnique.js +1 -1
  368. package/node_modules/@sap/cds-compiler/lib/transform/db/associations.js +3 -4
  369. package/node_modules/@sap/cds-compiler/lib/transform/db/assocsToQueries/transformExists.js +1 -1
  370. package/node_modules/@sap/cds-compiler/lib/transform/db/backlinks.js +2 -2
  371. package/node_modules/@sap/cds-compiler/lib/transform/db/cdsPersistence.js +1 -1
  372. package/node_modules/@sap/cds-compiler/lib/transform/db/constraints.js +6 -5
  373. package/node_modules/@sap/cds-compiler/lib/transform/db/expansion.js +7 -1
  374. package/node_modules/@sap/cds-compiler/lib/transform/db/flattening.js +2 -2
  375. package/node_modules/@sap/cds-compiler/lib/{modelCompare/compare.js → transform/db/migration/diffModels.js} +5 -5
  376. package/node_modules/@sap/cds-compiler/lib/{modelCompare/utils/filter.js → transform/db/migration/filterDiff.js} +2 -2
  377. package/node_modules/@sap/cds-compiler/lib/transform/db/processSqlServices.js +1 -1
  378. package/node_modules/@sap/cds-compiler/lib/transform/db/rewriteCalculatedElements.js +1 -1
  379. package/node_modules/@sap/cds-compiler/lib/transform/db/temporal.js +1 -1
  380. package/node_modules/@sap/cds-compiler/lib/transform/db/views.js +2 -6
  381. package/node_modules/@sap/cds-compiler/lib/transform/draft/db.js +1 -1
  382. package/node_modules/@sap/cds-compiler/lib/transform/draft/odata.js +1 -1
  383. package/node_modules/@sap/cds-compiler/lib/transform/effective/annotations.js +1 -1
  384. package/node_modules/@sap/cds-compiler/lib/transform/effective/associations.js +1 -1
  385. package/node_modules/@sap/cds-compiler/lib/transform/effective/flattening.js +1 -1
  386. package/node_modules/@sap/cds-compiler/lib/transform/effective/main.js +3 -2
  387. package/node_modules/@sap/cds-compiler/lib/transform/effective/misc.js +2 -1
  388. package/node_modules/@sap/cds-compiler/lib/transform/effective/queries.js +1 -1
  389. package/node_modules/@sap/cds-compiler/lib/transform/effective/types.js +1 -1
  390. package/node_modules/@sap/cds-compiler/lib/transform/forOdata.js +1 -1
  391. package/node_modules/@sap/cds-compiler/lib/transform/forRelationalDB.js +9 -4
  392. package/node_modules/@sap/cds-compiler/lib/transform/localized.js +1 -1
  393. package/node_modules/@sap/cds-compiler/lib/transform/odata/adaptAnnotationRefs.js +5 -11
  394. package/node_modules/@sap/cds-compiler/lib/transform/odata/createForeignKeys.js +1 -1
  395. package/node_modules/@sap/cds-compiler/lib/transform/odata/flattening.js +4 -4
  396. package/node_modules/@sap/cds-compiler/lib/transform/odata/foreignKeyRefsInXprAnnos.js +5 -3
  397. package/node_modules/@sap/cds-compiler/lib/transform/odata/toFinalBaseType.js +29 -5
  398. package/node_modules/@sap/cds-compiler/lib/transform/odata/typesExposure.js +13 -3
  399. package/node_modules/@sap/cds-compiler/lib/transform/odata/utils.js +9 -0
  400. package/node_modules/@sap/cds-compiler/lib/transform/transformUtils.js +2 -2
  401. package/node_modules/@sap/cds-compiler/lib/transform/translateAssocsToJoins.js +1 -1
  402. package/node_modules/@sap/cds-compiler/lib/transform/tupleExpansion.js +1 -1
  403. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/coreComputed.js +1 -1
  404. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/universalCsnEnricher.js +1 -1
  405. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/utils.js +1 -1
  406. package/node_modules/@sap/cds-compiler/package.json +1 -1
  407. package/node_modules/@sap/cds-mtxs/CHANGELOG.md +55 -0
  408. package/node_modules/@sap/cds-mtxs/bin/cds-mtx-migrate.js +4 -6
  409. package/node_modules/@sap/cds-mtxs/bin/cds-mtx.js +5 -4
  410. package/node_modules/@sap/cds-mtxs/cds-plugin.js +38 -2
  411. package/node_modules/@sap/cds-mtxs/db/t0.cds +7 -0
  412. package/node_modules/@sap/cds-mtxs/lib/utils.js +129 -20
  413. package/node_modules/@sap/cds-mtxs/package.json +15 -14
  414. package/node_modules/@sap/cds-mtxs/srv/cf/abstract-provisioning-service.js +13 -12
  415. package/node_modules/@sap/cds-mtxs/srv/cf/saas-provisioning-service.cds +1 -0
  416. package/node_modules/@sap/cds-mtxs/srv/cf/sms-provisioning-service.cds +1 -0
  417. package/node_modules/@sap/cds-mtxs/srv/extensibility/compat/update.js +5 -2
  418. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/config.js +1 -2
  419. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/csv-allowlist.js +64 -0
  420. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/index.js +4 -2
  421. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/protected-namespace.js +67 -5
  422. package/node_modules/@sap/cds-mtxs/srv/extensibility-service.js +199 -19
  423. package/node_modules/@sap/cds-mtxs/srv/jobs-service.js +39 -15
  424. package/node_modules/@sap/cds-mtxs/srv/plugins/common.js +33 -12
  425. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/ctnr-mgr-base.js +24 -6
  426. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-ctnr-mgr.js +3 -1
  427. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-native.js +752 -0
  428. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/serverless.js +17 -20
  429. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr-v2.js +511 -0
  430. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr.js +11 -4
  431. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/tms.js +8 -0
  432. package/node_modules/@sap/cds-mtxs/srv/plugins/hana.js +58 -43
  433. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker-pool.js +1 -1
  434. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker.js +1 -1
  435. package/node_modules/body-parser/README.md +17 -13
  436. package/node_modules/body-parser/lib/read.js +74 -57
  437. package/node_modules/body-parser/lib/types/json.js +11 -11
  438. package/node_modules/body-parser/lib/types/urlencoded.js +5 -5
  439. package/node_modules/body-parser/lib/utils.js +0 -15
  440. package/node_modules/body-parser/package.json +7 -12
  441. package/node_modules/chownr/LICENSE.md +63 -0
  442. package/node_modules/chownr/README.md +3 -0
  443. package/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
  444. package/node_modules/chownr/dist/commonjs/index.d.ts.map +1 -0
  445. package/node_modules/chownr/dist/commonjs/index.js +93 -0
  446. package/node_modules/chownr/dist/commonjs/index.js.map +1 -0
  447. package/node_modules/chownr/dist/commonjs/package.json +3 -0
  448. package/node_modules/chownr/dist/esm/index.d.ts +3 -0
  449. package/node_modules/chownr/dist/esm/index.d.ts.map +1 -0
  450. package/node_modules/chownr/dist/esm/index.js +85 -0
  451. package/node_modules/chownr/dist/esm/index.js.map +1 -0
  452. package/node_modules/chownr/dist/esm/package.json +3 -0
  453. package/node_modules/chownr/package.json +69 -0
  454. package/node_modules/content-disposition/README.md +105 -35
  455. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  456. package/node_modules/content-disposition/dist/index.js +388 -0
  457. package/node_modules/content-disposition/dist/index.js.map +1 -0
  458. package/node_modules/content-disposition/package.json +31 -19
  459. package/node_modules/content-type/README.md +34 -57
  460. package/node_modules/content-type/package.json +35 -25
  461. package/node_modules/encodeurl/README.md +14 -0
  462. package/node_modules/encodeurl/index.js +5 -10
  463. package/node_modules/encodeurl/package.json +10 -6
  464. package/node_modules/express/Readme.md +15 -9
  465. package/node_modules/express/lib/application.js +2 -2
  466. package/node_modules/express/lib/request.js +32 -19
  467. package/node_modules/express/lib/response.js +27 -30
  468. package/node_modules/express/package.json +10 -10
  469. package/node_modules/handlebars/bin/handlebars +1 -1
  470. package/node_modules/handlebars/dist/amd/handlebars/base.js +2 -2
  471. package/node_modules/handlebars/dist/amd/handlebars/compiler/base.js +2 -59
  472. package/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js +68 -5
  473. package/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js +160 -19
  474. package/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js +23 -7
  475. package/node_modules/handlebars/dist/amd/handlebars/compiler/node-types.js +12 -0
  476. package/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js +26 -7
  477. package/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js +9 -4
  478. package/node_modules/handlebars/dist/amd/handlebars/exception.js +8 -4
  479. package/node_modules/handlebars/dist/amd/handlebars/helpers/each.js +40 -14
  480. package/node_modules/handlebars/dist/amd/handlebars/internal/proto-access.js +21 -1
  481. package/node_modules/handlebars/dist/amd/handlebars/runtime.js +24 -4
  482. package/node_modules/handlebars/dist/amd/handlebars/utils.js +4 -3
  483. package/node_modules/handlebars/dist/amd/precompiler.js +13 -7
  484. package/node_modules/handlebars/dist/cjs/handlebars/base.js +2 -2
  485. package/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js +1 -60
  486. package/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js +64 -4
  487. package/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js +161 -18
  488. package/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js +23 -7
  489. package/node_modules/handlebars/dist/cjs/handlebars/compiler/node-types.js +10 -0
  490. package/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js +29 -6
  491. package/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js +9 -4
  492. package/node_modules/handlebars/dist/cjs/handlebars/exception.js +8 -4
  493. package/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js +40 -14
  494. package/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js +21 -1
  495. package/node_modules/handlebars/dist/cjs/handlebars/runtime.js +24 -4
  496. package/node_modules/handlebars/dist/cjs/handlebars/utils.js +4 -3
  497. package/node_modules/handlebars/dist/cjs/precompiler.js +14 -6
  498. package/node_modules/handlebars/dist/handlebars.amd.js +401 -130
  499. package/node_modules/handlebars/dist/handlebars.amd.min.js +4 -4
  500. package/node_modules/handlebars/dist/handlebars.js +396 -125
  501. package/node_modules/handlebars/dist/handlebars.min.js +4 -4
  502. package/node_modules/handlebars/dist/handlebars.runtime.amd.js +100 -29
  503. package/node_modules/handlebars/dist/handlebars.runtime.amd.min.js +2 -2
  504. package/node_modules/handlebars/dist/handlebars.runtime.js +94 -23
  505. package/node_modules/handlebars/dist/handlebars.runtime.min.js +2 -2
  506. package/node_modules/handlebars/lib/handlebars/base.js +1 -1
  507. package/node_modules/handlebars/lib/handlebars/compiler/base.js +0 -67
  508. package/node_modules/handlebars/lib/handlebars/compiler/code-gen.js +65 -11
  509. package/node_modules/handlebars/lib/handlebars/compiler/compiler.js +164 -23
  510. package/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js +23 -7
  511. package/node_modules/handlebars/lib/handlebars/compiler/node-types.js +24 -0
  512. package/node_modules/handlebars/lib/handlebars/compiler/visitor.js +29 -5
  513. package/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js +16 -5
  514. package/node_modules/handlebars/lib/handlebars/exception.js +7 -3
  515. package/node_modules/handlebars/lib/handlebars/helpers/each.js +39 -16
  516. package/node_modules/handlebars/lib/handlebars/internal/proto-access.js +22 -0
  517. package/node_modules/handlebars/lib/handlebars/runtime.js +36 -4
  518. package/node_modules/handlebars/lib/handlebars/utils.js +3 -2
  519. package/node_modules/handlebars/lib/precompiler.js +14 -5
  520. package/node_modules/handlebars/package.json +2 -2
  521. package/node_modules/handlebars/release-notes.md +20 -1
  522. package/node_modules/handlebars/types/index.d.ts +8 -0
  523. package/node_modules/hdb/cfg/VERSION +1 -1
  524. package/node_modules/hdb/lib/Client.js +6 -2
  525. package/node_modules/hdb/lib/protocol/ClientInfo.js +28 -15
  526. package/node_modules/hdb/lib/protocol/Connection.js +30 -3
  527. package/node_modules/hdb/lib/protocol/Writer.js +2 -2
  528. package/node_modules/hdb/lib/protocol/common/ConnectOption.js +2 -0
  529. package/node_modules/hdb/lib/protocol/common/ConnectOptionFlagSet1.js +18 -0
  530. package/node_modules/hdb/lib/protocol/common/ConnectOptionType.js +2 -0
  531. package/node_modules/hdb/lib/protocol/common/Constants.js +1 -0
  532. package/node_modules/hdb/lib/protocol/common/MessageType.js +3 -2
  533. package/node_modules/hdb/lib/protocol/common/PartKind.js +2 -1
  534. package/node_modules/hdb/lib/protocol/common/index.js +1 -0
  535. package/node_modules/hdb/lib/protocol/data/TextList.js +25 -17
  536. package/node_modules/hdb/lib/protocol/data/index.js +1 -0
  537. package/node_modules/hdb/lib/protocol/part/ConnectOptions.js +7 -0
  538. package/node_modules/hdb/lib/protocol/request/index.js +7 -0
  539. package/node_modules/hdb/package.json +1 -2
  540. package/node_modules/livereload-js/.github/workflows/main.yml +4 -4
  541. package/node_modules/livereload-js/README.md +3 -3
  542. package/node_modules/livereload-js/dist/livereload.js +839 -2742
  543. package/node_modules/livereload-js/dist/livereload.min.js +1 -1
  544. package/node_modules/livereload-js/package.json +11 -11
  545. package/node_modules/minipass/LICENSE.md +55 -0
  546. package/node_modules/minipass/README.md +825 -0
  547. package/node_modules/minipass/dist/commonjs/index.d.ts +545 -0
  548. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  549. package/node_modules/minipass/dist/commonjs/index.js +1038 -0
  550. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  551. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  552. package/node_modules/minipass/dist/esm/index.d.ts +545 -0
  553. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  554. package/node_modules/minipass/dist/esm/index.js +1020 -0
  555. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  556. package/node_modules/minipass/dist/esm/package.json +3 -0
  557. package/node_modules/minipass/package.json +77 -0
  558. package/node_modules/minizlib/LICENSE +26 -0
  559. package/node_modules/minizlib/README.md +64 -0
  560. package/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
  561. package/node_modules/minizlib/dist/commonjs/constants.d.ts.map +1 -0
  562. package/node_modules/minizlib/dist/commonjs/constants.js +123 -0
  563. package/node_modules/minizlib/dist/commonjs/constants.js.map +1 -0
  564. package/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
  565. package/node_modules/minizlib/dist/commonjs/index.d.ts.map +1 -0
  566. package/node_modules/minizlib/dist/commonjs/index.js +416 -0
  567. package/node_modules/minizlib/dist/commonjs/index.js.map +1 -0
  568. package/node_modules/minizlib/dist/commonjs/package.json +3 -0
  569. package/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
  570. package/node_modules/minizlib/dist/esm/constants.d.ts.map +1 -0
  571. package/node_modules/minizlib/dist/esm/constants.js +117 -0
  572. package/node_modules/minizlib/dist/esm/constants.js.map +1 -0
  573. package/node_modules/minizlib/dist/esm/index.d.ts +99 -0
  574. package/node_modules/minizlib/dist/esm/index.d.ts.map +1 -0
  575. package/node_modules/minizlib/dist/esm/index.js +363 -0
  576. package/node_modules/minizlib/dist/esm/index.js.map +1 -0
  577. package/node_modules/minizlib/dist/esm/package.json +3 -0
  578. package/node_modules/minizlib/package.json +80 -0
  579. package/node_modules/on-finished/index.js +14 -2
  580. package/node_modules/on-finished/package.json +11 -7
  581. package/node_modules/qs/.editorconfig +1 -1
  582. package/node_modules/qs/.github/THREAT_MODEL.md +4 -2
  583. package/node_modules/qs/CHANGELOG.md +103 -14
  584. package/node_modules/qs/README.md +90 -9
  585. package/node_modules/qs/dist/qs.js +19 -19
  586. package/node_modules/qs/eslint.config.mjs +61 -50
  587. package/node_modules/qs/lib/formats.js +7 -2
  588. package/node_modules/qs/lib/parse.js +121 -12
  589. package/node_modules/qs/lib/stringify.js +9 -7
  590. package/node_modules/qs/lib/utils.js +158 -15
  591. package/node_modules/qs/package.json +8 -8
  592. package/node_modules/qs/test/parse.js +509 -2
  593. package/node_modules/qs/test/stringify.js +485 -33
  594. package/node_modules/qs/test/utils.js +245 -3
  595. package/node_modules/semver/classes/range.js +2 -2
  596. package/node_modules/semver/internal/constants.js +30 -0
  597. package/node_modules/semver/internal/trim-comparator-whitespace.js +438 -0
  598. package/node_modules/semver/package.json +1 -1
  599. package/node_modules/tar/LICENSE.md +55 -0
  600. package/node_modules/tar/README.md +1233 -0
  601. package/node_modules/tar/dist/commonjs/create.d.ts +3 -0
  602. package/node_modules/tar/dist/commonjs/create.d.ts.map +1 -0
  603. package/node_modules/tar/dist/commonjs/create.js +82 -0
  604. package/node_modules/tar/dist/commonjs/create.js.map +1 -0
  605. package/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
  606. package/node_modules/tar/dist/commonjs/cwd-error.d.ts.map +1 -0
  607. package/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
  608. package/node_modules/tar/dist/commonjs/cwd-error.js.map +1 -0
  609. package/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
  610. package/node_modules/tar/dist/commonjs/extract.d.ts.map +1 -0
  611. package/node_modules/tar/dist/commonjs/extract.js +88 -0
  612. package/node_modules/tar/dist/commonjs/extract.js.map +1 -0
  613. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
  614. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts.map +1 -0
  615. package/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
  616. package/node_modules/tar/dist/commonjs/get-write-flag.js.map +1 -0
  617. package/node_modules/tar/dist/commonjs/header.d.ts +53 -0
  618. package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -0
  619. package/node_modules/tar/dist/commonjs/header.js +348 -0
  620. package/node_modules/tar/dist/commonjs/header.js.map +1 -0
  621. package/node_modules/tar/dist/commonjs/index.d.ts +20 -0
  622. package/node_modules/tar/dist/commonjs/index.d.ts.map +1 -0
  623. package/node_modules/tar/dist/commonjs/index.js +64 -0
  624. package/node_modules/tar/dist/commonjs/index.js.map +1 -0
  625. package/node_modules/tar/dist/commonjs/index.min.js +4 -0
  626. package/node_modules/tar/dist/commonjs/index.min.js.map +7 -0
  627. package/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
  628. package/node_modules/tar/dist/commonjs/large-numbers.d.ts.map +1 -0
  629. package/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
  630. package/node_modules/tar/dist/commonjs/large-numbers.js.map +1 -0
  631. package/node_modules/tar/dist/commonjs/list.d.ts +7 -0
  632. package/node_modules/tar/dist/commonjs/list.d.ts.map +1 -0
  633. package/node_modules/tar/dist/commonjs/list.js +153 -0
  634. package/node_modules/tar/dist/commonjs/list.js.map +1 -0
  635. package/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
  636. package/node_modules/tar/dist/commonjs/make-command.d.ts.map +1 -0
  637. package/node_modules/tar/dist/commonjs/make-command.js +52 -0
  638. package/node_modules/tar/dist/commonjs/make-command.js.map +1 -0
  639. package/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
  640. package/node_modules/tar/dist/commonjs/mkdir.d.ts.map +1 -0
  641. package/node_modules/tar/dist/commonjs/mkdir.js +187 -0
  642. package/node_modules/tar/dist/commonjs/mkdir.js.map +1 -0
  643. package/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
  644. package/node_modules/tar/dist/commonjs/mode-fix.d.ts.map +1 -0
  645. package/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
  646. package/node_modules/tar/dist/commonjs/mode-fix.js.map +1 -0
  647. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
  648. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts.map +1 -0
  649. package/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
  650. package/node_modules/tar/dist/commonjs/normalize-unicode.js.map +1 -0
  651. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
  652. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts.map +1 -0
  653. package/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
  654. package/node_modules/tar/dist/commonjs/normalize-windows-path.js.map +1 -0
  655. package/node_modules/tar/dist/commonjs/options.d.ts +604 -0
  656. package/node_modules/tar/dist/commonjs/options.d.ts.map +1 -0
  657. package/node_modules/tar/dist/commonjs/options.js +66 -0
  658. package/node_modules/tar/dist/commonjs/options.js.map +1 -0
  659. package/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
  660. package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -0
  661. package/node_modules/tar/dist/commonjs/pack.js +544 -0
  662. package/node_modules/tar/dist/commonjs/pack.js.map +1 -0
  663. package/node_modules/tar/dist/commonjs/package.json +3 -0
  664. package/node_modules/tar/dist/commonjs/parse.d.ts +92 -0
  665. package/node_modules/tar/dist/commonjs/parse.d.ts.map +1 -0
  666. package/node_modules/tar/dist/commonjs/parse.js +655 -0
  667. package/node_modules/tar/dist/commonjs/parse.js.map +1 -0
  668. package/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
  669. package/node_modules/tar/dist/commonjs/path-reservations.d.ts.map +1 -0
  670. package/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
  671. package/node_modules/tar/dist/commonjs/path-reservations.js.map +1 -0
  672. package/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
  673. package/node_modules/tar/dist/commonjs/pax.d.ts.map +1 -0
  674. package/node_modules/tar/dist/commonjs/pax.js +182 -0
  675. package/node_modules/tar/dist/commonjs/pax.js.map +1 -0
  676. package/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
  677. package/node_modules/tar/dist/commonjs/process-umask.d.ts.map +1 -0
  678. package/node_modules/tar/dist/commonjs/process-umask.js +7 -0
  679. package/node_modules/tar/dist/commonjs/process-umask.js.map +1 -0
  680. package/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
  681. package/node_modules/tar/dist/commonjs/read-entry.d.ts.map +1 -0
  682. package/node_modules/tar/dist/commonjs/read-entry.js +136 -0
  683. package/node_modules/tar/dist/commonjs/read-entry.js.map +1 -0
  684. package/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
  685. package/node_modules/tar/dist/commonjs/replace.d.ts.map +1 -0
  686. package/node_modules/tar/dist/commonjs/replace.js +227 -0
  687. package/node_modules/tar/dist/commonjs/replace.js.map +1 -0
  688. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
  689. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts.map +1 -0
  690. package/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
  691. package/node_modules/tar/dist/commonjs/strip-absolute-path.js.map +1 -0
  692. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
  693. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts.map +1 -0
  694. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
  695. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js.map +1 -0
  696. package/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
  697. package/node_modules/tar/dist/commonjs/symlink-error.d.ts.map +1 -0
  698. package/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
  699. package/node_modules/tar/dist/commonjs/symlink-error.js.map +1 -0
  700. package/node_modules/tar/dist/commonjs/types.d.ts +16 -0
  701. package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -0
  702. package/node_modules/tar/dist/commonjs/types.js +70 -0
  703. package/node_modules/tar/dist/commonjs/types.js.map +1 -0
  704. package/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
  705. package/node_modules/tar/dist/commonjs/unpack.d.ts.map +1 -0
  706. package/node_modules/tar/dist/commonjs/unpack.js +932 -0
  707. package/node_modules/tar/dist/commonjs/unpack.js.map +1 -0
  708. package/node_modules/tar/dist/commonjs/update.d.ts +2 -0
  709. package/node_modules/tar/dist/commonjs/update.d.ts.map +1 -0
  710. package/node_modules/tar/dist/commonjs/update.js +33 -0
  711. package/node_modules/tar/dist/commonjs/update.js.map +1 -0
  712. package/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
  713. package/node_modules/tar/dist/commonjs/warn-method.d.ts.map +1 -0
  714. package/node_modules/tar/dist/commonjs/warn-method.js +31 -0
  715. package/node_modules/tar/dist/commonjs/warn-method.js.map +1 -0
  716. package/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
  717. package/node_modules/tar/dist/commonjs/winchars.d.ts.map +1 -0
  718. package/node_modules/tar/dist/commonjs/winchars.js +14 -0
  719. package/node_modules/tar/dist/commonjs/winchars.js.map +1 -0
  720. package/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
  721. package/node_modules/tar/dist/commonjs/write-entry.d.ts.map +1 -0
  722. package/node_modules/tar/dist/commonjs/write-entry.js +698 -0
  723. package/node_modules/tar/dist/commonjs/write-entry.js.map +1 -0
  724. package/node_modules/tar/dist/esm/create.d.ts +3 -0
  725. package/node_modules/tar/dist/esm/create.d.ts.map +1 -0
  726. package/node_modules/tar/dist/esm/create.js +76 -0
  727. package/node_modules/tar/dist/esm/create.js.map +1 -0
  728. package/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
  729. package/node_modules/tar/dist/esm/cwd-error.d.ts.map +1 -0
  730. package/node_modules/tar/dist/esm/cwd-error.js +14 -0
  731. package/node_modules/tar/dist/esm/cwd-error.js.map +1 -0
  732. package/node_modules/tar/dist/esm/extract.d.ts +3 -0
  733. package/node_modules/tar/dist/esm/extract.d.ts.map +1 -0
  734. package/node_modules/tar/dist/esm/extract.js +49 -0
  735. package/node_modules/tar/dist/esm/extract.js.map +1 -0
  736. package/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
  737. package/node_modules/tar/dist/esm/get-write-flag.d.ts.map +1 -0
  738. package/node_modules/tar/dist/esm/get-write-flag.js +26 -0
  739. package/node_modules/tar/dist/esm/get-write-flag.js.map +1 -0
  740. package/node_modules/tar/dist/esm/header.d.ts +53 -0
  741. package/node_modules/tar/dist/esm/header.d.ts.map +1 -0
  742. package/node_modules/tar/dist/esm/header.js +311 -0
  743. package/node_modules/tar/dist/esm/header.js.map +1 -0
  744. package/node_modules/tar/dist/esm/index.d.ts +20 -0
  745. package/node_modules/tar/dist/esm/index.d.ts.map +1 -0
  746. package/node_modules/tar/dist/esm/index.js +20 -0
  747. package/node_modules/tar/dist/esm/index.js.map +1 -0
  748. package/node_modules/tar/dist/esm/index.min.js +4 -0
  749. package/node_modules/tar/dist/esm/index.min.js.map +7 -0
  750. package/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
  751. package/node_modules/tar/dist/esm/large-numbers.d.ts.map +1 -0
  752. package/node_modules/tar/dist/esm/large-numbers.js +94 -0
  753. package/node_modules/tar/dist/esm/large-numbers.js.map +1 -0
  754. package/node_modules/tar/dist/esm/list.d.ts +7 -0
  755. package/node_modules/tar/dist/esm/list.d.ts.map +1 -0
  756. package/node_modules/tar/dist/esm/list.js +113 -0
  757. package/node_modules/tar/dist/esm/list.js.map +1 -0
  758. package/node_modules/tar/dist/esm/make-command.d.ts +49 -0
  759. package/node_modules/tar/dist/esm/make-command.d.ts.map +1 -0
  760. package/node_modules/tar/dist/esm/make-command.js +48 -0
  761. package/node_modules/tar/dist/esm/make-command.js.map +1 -0
  762. package/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
  763. package/node_modules/tar/dist/esm/mkdir.d.ts.map +1 -0
  764. package/node_modules/tar/dist/esm/mkdir.js +179 -0
  765. package/node_modules/tar/dist/esm/mkdir.js.map +1 -0
  766. package/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
  767. package/node_modules/tar/dist/esm/mode-fix.d.ts.map +1 -0
  768. package/node_modules/tar/dist/esm/mode-fix.js +25 -0
  769. package/node_modules/tar/dist/esm/mode-fix.js.map +1 -0
  770. package/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
  771. package/node_modules/tar/dist/esm/normalize-unicode.d.ts.map +1 -0
  772. package/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
  773. package/node_modules/tar/dist/esm/normalize-unicode.js.map +1 -0
  774. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
  775. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts.map +1 -0
  776. package/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
  777. package/node_modules/tar/dist/esm/normalize-windows-path.js.map +1 -0
  778. package/node_modules/tar/dist/esm/options.d.ts +604 -0
  779. package/node_modules/tar/dist/esm/options.d.ts.map +1 -0
  780. package/node_modules/tar/dist/esm/options.js +54 -0
  781. package/node_modules/tar/dist/esm/options.js.map +1 -0
  782. package/node_modules/tar/dist/esm/pack.d.ts +105 -0
  783. package/node_modules/tar/dist/esm/pack.d.ts.map +1 -0
  784. package/node_modules/tar/dist/esm/pack.js +502 -0
  785. package/node_modules/tar/dist/esm/pack.js.map +1 -0
  786. package/node_modules/tar/dist/esm/package.json +3 -0
  787. package/node_modules/tar/dist/esm/parse.d.ts +92 -0
  788. package/node_modules/tar/dist/esm/parse.d.ts.map +1 -0
  789. package/node_modules/tar/dist/esm/parse.js +651 -0
  790. package/node_modules/tar/dist/esm/parse.js.map +1 -0
  791. package/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
  792. package/node_modules/tar/dist/esm/path-reservations.d.ts.map +1 -0
  793. package/node_modules/tar/dist/esm/path-reservations.js +166 -0
  794. package/node_modules/tar/dist/esm/path-reservations.js.map +1 -0
  795. package/node_modules/tar/dist/esm/pax.d.ts +26 -0
  796. package/node_modules/tar/dist/esm/pax.d.ts.map +1 -0
  797. package/node_modules/tar/dist/esm/pax.js +178 -0
  798. package/node_modules/tar/dist/esm/pax.js.map +1 -0
  799. package/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
  800. package/node_modules/tar/dist/esm/process-umask.d.ts.map +1 -0
  801. package/node_modules/tar/dist/esm/process-umask.js +3 -0
  802. package/node_modules/tar/dist/esm/process-umask.js.map +1 -0
  803. package/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
  804. package/node_modules/tar/dist/esm/read-entry.d.ts.map +1 -0
  805. package/node_modules/tar/dist/esm/read-entry.js +132 -0
  806. package/node_modules/tar/dist/esm/read-entry.js.map +1 -0
  807. package/node_modules/tar/dist/esm/replace.d.ts +2 -0
  808. package/node_modules/tar/dist/esm/replace.d.ts.map +1 -0
  809. package/node_modules/tar/dist/esm/replace.js +221 -0
  810. package/node_modules/tar/dist/esm/replace.js.map +1 -0
  811. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
  812. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts.map +1 -0
  813. package/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
  814. package/node_modules/tar/dist/esm/strip-absolute-path.js.map +1 -0
  815. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
  816. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts.map +1 -0
  817. package/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
  818. package/node_modules/tar/dist/esm/strip-trailing-slashes.js.map +1 -0
  819. package/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
  820. package/node_modules/tar/dist/esm/symlink-error.d.ts.map +1 -0
  821. package/node_modules/tar/dist/esm/symlink-error.js +15 -0
  822. package/node_modules/tar/dist/esm/symlink-error.js.map +1 -0
  823. package/node_modules/tar/dist/esm/types.d.ts +16 -0
  824. package/node_modules/tar/dist/esm/types.d.ts.map +1 -0
  825. package/node_modules/tar/dist/esm/types.js +65 -0
  826. package/node_modules/tar/dist/esm/types.js.map +1 -0
  827. package/node_modules/tar/dist/esm/unpack.d.ts +101 -0
  828. package/node_modules/tar/dist/esm/unpack.d.ts.map +1 -0
  829. package/node_modules/tar/dist/esm/unpack.js +891 -0
  830. package/node_modules/tar/dist/esm/unpack.js.map +1 -0
  831. package/node_modules/tar/dist/esm/update.d.ts +2 -0
  832. package/node_modules/tar/dist/esm/update.d.ts.map +1 -0
  833. package/node_modules/tar/dist/esm/update.js +30 -0
  834. package/node_modules/tar/dist/esm/update.js.map +1 -0
  835. package/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
  836. package/node_modules/tar/dist/esm/warn-method.d.ts.map +1 -0
  837. package/node_modules/tar/dist/esm/warn-method.js +27 -0
  838. package/node_modules/tar/dist/esm/warn-method.js.map +1 -0
  839. package/node_modules/tar/dist/esm/winchars.d.ts +3 -0
  840. package/node_modules/tar/dist/esm/winchars.d.ts.map +1 -0
  841. package/node_modules/tar/dist/esm/winchars.js +9 -0
  842. package/node_modules/tar/dist/esm/winchars.js.map +1 -0
  843. package/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
  844. package/node_modules/tar/dist/esm/write-entry.d.ts.map +1 -0
  845. package/node_modules/tar/dist/esm/write-entry.js +656 -0
  846. package/node_modules/tar/dist/esm/write-entry.js.map +1 -0
  847. package/node_modules/tar/package.json +298 -0
  848. package/node_modules/ws/README.md +21 -29
  849. package/node_modules/ws/lib/buffer-util.js +13 -2
  850. package/node_modules/ws/lib/sender.js +4 -1
  851. package/node_modules/ws/lib/websocket.js +25 -6
  852. package/node_modules/ws/package.json +1 -1
  853. package/node_modules/yallist/LICENSE.md +63 -0
  854. package/node_modules/yallist/README.md +205 -0
  855. package/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
  856. package/node_modules/yallist/dist/commonjs/index.d.ts.map +1 -0
  857. package/node_modules/yallist/dist/commonjs/index.js +384 -0
  858. package/node_modules/yallist/dist/commonjs/index.js.map +1 -0
  859. package/node_modules/yallist/dist/commonjs/package.json +3 -0
  860. package/node_modules/yallist/dist/esm/index.d.ts +39 -0
  861. package/node_modules/yallist/dist/esm/index.d.ts.map +1 -0
  862. package/node_modules/yallist/dist/esm/index.js +379 -0
  863. package/node_modules/yallist/dist/esm/index.js.map +1 -0
  864. package/node_modules/yallist/dist/esm/package.json +3 -0
  865. package/node_modules/yallist/package.json +68 -0
  866. package/package.json +7 -1
  867. package/bin/completion/templates/cds-tmpl.fish +0 -65
  868. package/bin/completion/templates/cds-tmpl.ps1 +0 -217
  869. package/bin/completion/templates/cds-tmpl.sh +0 -93
  870. package/bin/completion/templates/cds-tmpl.zsh +0 -74
  871. package/node_modules/@cap-js/db-service/lib/recursion-guard.js +0 -40
  872. package/node_modules/@sap/cds/lib/env/cds-requires.js +0 -327
  873. package/node_modules/@sap/cds-mtxs/srv/bootstrap.cds +0 -2
  874. package/node_modules/@sap/cds-mtxs/srv/bootstrap.js +0 -33
  875. package/node_modules/body-parser/node_modules/content-type/LICENSE +0 -22
  876. package/node_modules/body-parser/node_modules/content-type/README.md +0 -71
  877. package/node_modules/body-parser/node_modules/content-type/package.json +0 -52
  878. package/node_modules/content-disposition/index.js +0 -536
  879. package/node_modules/content-type/HISTORY.md +0 -29
  880. package/node_modules/content-type/index.js +0 -225
  881. package/node_modules/negotiator/node_modules/content-type/LICENSE +0 -22
  882. package/node_modules/negotiator/node_modules/content-type/README.md +0 -71
  883. package/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +0 -46
  884. package/node_modules/negotiator/node_modules/content-type/dist/index.js +0 -176
  885. package/node_modules/negotiator/node_modules/content-type/dist/index.js.map +0 -1
  886. package/node_modules/negotiator/node_modules/content-type/package.json +0 -52
  887. package/node_modules/on-finished/HISTORY.md +0 -98
  888. package/node_modules/type-is/node_modules/content-type/LICENSE +0 -22
  889. package/node_modules/type-is/node_modules/content-type/README.md +0 -71
  890. package/node_modules/type-is/node_modules/content-type/dist/index.d.ts +0 -46
  891. package/node_modules/type-is/node_modules/content-type/dist/index.js +0 -176
  892. package/node_modules/type-is/node_modules/content-type/dist/index.js.map +0 -1
  893. package/node_modules/type-is/node_modules/content-type/package.json +0 -52
  894. /package/lib/init/template/vue/files/src/{main.js → main.{{extension}}.hbs} +0 -0
  895. /package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/utilities.js +0 -0
  896. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.d.ts +0 -0
  897. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js +0 -0
  898. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js.map +0 -0
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sap/cds-mtxs",
3
- "version": "4.1.0",
3
+ "version": "4.2.1",
4
4
  "description": "SAP Cloud Application Programming Model - Multitenancy library",
5
5
  "homepage": "https://cap.cloud.sap/",
6
6
  "keywords": [
@@ -23,7 +23,8 @@
23
23
  },
24
24
  "main": "lib/index.js",
25
25
  "dependencies": {
26
- "@sap/hdi-deploy": "^5"
26
+ "@sap/hdi-deploy": "^5",
27
+ "tar": "^7"
27
28
  },
28
29
  "peerDependencies": {
29
30
  "@sap/cds": ">=9"
@@ -32,10 +33,12 @@
32
33
  "requires": {
33
34
  "kinds": {
34
35
  "multitenancy": {
35
- "model": [
36
- "@sap/cds-mtxs/srv/bootstrap"
37
- ],
38
36
  "kind": "saas-registry",
37
+ "containerManager": {
38
+ "retries": 10,
39
+ "maxRetryAfter": 5000,
40
+ "lifecycleMaxRetryAfter": 300000
41
+ },
39
42
  "[subscription-manager]": {
40
43
  "kind": "subscription-manager"
41
44
  },
@@ -43,7 +46,6 @@
43
46
  },
44
47
  "extensibility": {
45
48
  "model": [
46
- "@sap/cds-mtxs/srv/bootstrap",
47
49
  "@sap/cds-mtxs/db/extensions"
48
50
  ],
49
51
  "tenantCheckInterval": 10000
@@ -53,11 +55,7 @@
53
55
  "@sap/cds-mtxs/db/extensions"
54
56
  ]
55
57
  },
56
- "toggles": {
57
- "model": [
58
- "@sap/cds-mtxs/srv/bootstrap"
59
- ]
60
- },
58
+ "toggles": {},
61
59
  "cds.xt.ModelProviderService": {
62
60
  "model": "@sap/cds-mtxs/srv/model-provider"
63
61
  },
@@ -139,12 +137,13 @@
139
137
  }
140
138
  },
141
139
  "cds.xt.ModelProviderService-from-sidecar": {
142
- "kind": "rest"
140
+ "kind": "cds.xt.ModelProviderService"
143
141
  },
144
142
  "cds.xt.DeploymentService-from-sidecar": {
145
- "kind": "rest"
143
+ "kind": "cds.xt.DeploymentService"
146
144
  },
147
145
  "cds.xt.ModelProviderService-in-sidecar": {
146
+ "kind": "cds.xt.ModelProviderService",
148
147
  "[development]": {
149
148
  "root": "../.."
150
149
  },
@@ -156,7 +155,9 @@
156
155
  },
157
156
  "_in_sidecar": true
158
157
  },
159
- "cds.xt.DeploymentService-in-sidecar": {}
158
+ "cds.xt.DeploymentService-in-sidecar": {
159
+ "kind": "cds.xt.DeploymentService"
160
+ }
160
161
  }
161
162
  },
162
163
  "[with-mtx-sidecar]": {
@@ -5,6 +5,7 @@ const { fetchResiliently, token } = require('../../lib/utils')
5
5
  const DeploymentService = 'cds.xt.DeploymentService'
6
6
  const JobsService = 'cds.xt.JobsService'
7
7
  const Tenants = 'cds.xt.Tenants'
8
+ const SUBSCRIBED = 'SUBSCRIBED'
8
9
  const { SKIPPED_DB } = require('../jobs-service')
9
10
 
10
11
  // we need to run in multitenancy mode for t0 ops
@@ -77,8 +78,8 @@ module.exports = class ProvisioningService extends cds.ApplicationService {
77
78
  const js = await cds.connect.to(JobsService)
78
79
  const tx = js.tx({ tenant: context.tenant, user: new cds.User.Privileged() })
79
80
  const result = await tx.enqueue(DeploymentService, 'subscribe', [new Set([tenant])], { data, options }, error => {
80
- if (error) this._sendCallback('FAILED', `Tenant creation failed with error '${error}'`)
81
- else this._sendCallback('SUCCEEDED', 'Tenant creation succeeded', appUrl)
81
+ if (error) return this._sendCallback('FAILED', `Tenant creation failed with error '${error}'`)
82
+ return this._sendCallback('SUCCEEDED', 'Tenant creation succeeded', appUrl)
82
83
  })
83
84
  if (context.data.eventType === 'UPDATE') {
84
85
  return appUrl
@@ -102,20 +103,20 @@ module.exports = class ProvisioningService extends cds.ApplicationService {
102
103
  const tenant = this._getSubscribedTenant(context)
103
104
  if (tenant) {
104
105
  const one = await cds.tx({ tenant: t0 }, tx =>
105
- tx.run(SELECT.one.from(Tenants).columns(['metadata', 'createdAt', 'modifiedAt']).where({ ID: tenant }))
106
+ tx.run(SELECT.one.from(Tenants).columns(['metadata', 'status', 'createdAt', 'modifiedAt']).where({ ID: tenant }))
106
107
  )
107
108
  if (!one) cds.error(`Tenant ${tenant} not found`, { status: 404 })
108
- const { metadata, createdAt, modifiedAt } = one
109
- return { subscribedTenantId: tenant, ...this._toMetadataJson(metadata, tenant), createdAt, modifiedAt }
109
+ const { metadata, status = 'SUBSCRIBED', createdAt, modifiedAt } = one
110
+ return { subscribedTenantId: tenant, ...this._toMetadataJson(metadata, tenant), status, createdAt, modifiedAt }
110
111
  }
111
112
  return (await cds.tx({ tenant: t0 }, tx =>
112
- tx.run(SELECT.from(Tenants).columns(['ID', 'metadata', 'createdAt', 'modifiedAt']))
113
- )).map(({ ID, metadata, createdAt, modifiedAt }) => ({ subscribedTenantId: ID, ...this._toMetadataJson(metadata, ID), createdAt, modifiedAt }))
113
+ tx.run(SELECT.from(Tenants).columns(['ID', 'metadata', 'status', 'createdAt', 'modifiedAt']))
114
+ )).map(({ ID, metadata, status = 'SUBSCRIBED', createdAt, modifiedAt }) => ({ subscribedTenantId: ID, ...this._toMetadataJson(metadata, ID), status, createdAt, modifiedAt }))
114
115
  }
115
116
 
116
117
  async _getTenants(options) {
117
118
  const ds = await cds.connect.to(DeploymentService)
118
- const all = await ds.getTenants(options)
119
+ const all = await ds.getTenants({ ...options, status: SUBSCRIBED })
119
120
  if (cds.env.requires[this.name]?.upgrade?.ignoreNonExistingContainers) {
120
121
  const containers = await ds.getContainers()
121
122
  return all.filter(t => containers.includes(t))
@@ -189,10 +190,10 @@ module.exports = class ProvisioningService extends cds.ApplicationService {
189
190
 
190
191
  return await new Promise((resolve, reject) => {
191
192
  const tx = js.tx({ tenant: cds.context.tenant, user: new cds.User.Privileged() })
192
- const job = tx.enqueue(DeploymentService, 'upgrade', clusters, { options }, async error => {
193
- if (error) {
194
- await this._sendCallback('FAILED', `Tenant upgrade failed with error '${error}'`)
195
- if (isSync) reject(new Error(error))
193
+ const job = tx.enqueue(DeploymentService, 'upgrade', clusters, { options }, async (message, error) => {
194
+ if (message) {
195
+ await this._sendCallback('FAILED', `Tenant upgrade failed with error '${message}'`)
196
+ if (isSync) reject(error)
196
197
  } else {
197
198
  await this._sendCallback('SUCCEEDED', 'Tenant upgrade succeeded')
198
199
  if (isSync) {
@@ -13,6 +13,7 @@ service cds.xt.SaasProvisioningService @(impl:'@sap/cds-mtxs/srv/cf/saas-provisi
13
13
  subscribedSubdomain : String(256);
14
14
  subscriptionAppName : String(256); // name of main subscribed application
15
15
  eventType: String(64); // "CREATE/UPDATE", indicates if called for new subscription (CREATE) or dependencies update (UPDATE)
16
+ status: cds.xt.TenantStatus;
16
17
  }
17
18
 
18
19
  function dependencies() returns array of { xsappname: String };
@@ -13,6 +13,7 @@ service cds.xt.SmsProvisioningService @(impl:'@sap/cds-mtxs/srv/cf/sms-provision
13
13
  key subscribedTenantId : String @assert.format: '^[^\*]+$';
14
14
  subscriber: Subscriber;
15
15
  eventType: String(64); // "CREATE/UPDATE", indicates if called for new subscription (CREATE) or dependencies update (UPDATE)
16
+ status: cds.xt.TenantStatus;
16
17
  }
17
18
 
18
19
  //returns array of { xsappname: String };
@@ -21,10 +21,13 @@ module.exports = (srv) => {
21
21
 
22
22
  // Merge extension to one extension csn
23
23
  let extCsn
24
- for (let ext of extension) {
24
+ const extensions = Array.isArray(extension) ? extension : [extension] // wrap single string/object
25
+ for (let ext of extensions) {
25
26
  if (typeof ext === 'string') {
26
27
  if (!ext.length) throw new cds.error({ message: 'Missing extension', code: 400 })
27
- if (_isCSN(ext)) extCsn = _mergeCSN(JSON.parse(ext), extCsn)
28
+ if (_isCSN(ext)) try { extCsn = _mergeCSN(JSON.parse(ext), extCsn) } catch (e) {
29
+ throw new cds.error({ message: `Invalid extension: ${e.message}`, code: 422 })
30
+ }
28
31
  else try { extCsn = _mergeCSN(cds.parse.cdl(ext), extCsn) } catch (e) {
29
32
  if (e.code === 'ERR_CDS_COMPILATION_FAILURE') throw new cds.error({ message: e.message, code: 422 })
30
33
  else throw e
@@ -1,6 +1,6 @@
1
1
  const EXTENSION_ALLOWLIST = 'extension-allowlist'
2
2
 
3
- const PROTECTED_NAMESPACES = ['cds.xt']
3
+ const PROTECTED_NAMESPACES = ['cds.xt', 'cds.core', 'cds.outbox']
4
4
 
5
5
  module.exports.PROTECTED_NAMESPACES = PROTECTED_NAMESPACES
6
6
 
@@ -13,7 +13,6 @@ module.exports.isBuiltIn = (name) => {
13
13
  return false
14
14
  }
15
15
 
16
-
17
16
  module.exports.Allowlist = class Allowlist {
18
17
  constructor(mtxConfig, fullCsn) {
19
18
  this.allowlist = Allowlist._setupPermissionList(mtxConfig, fullCsn)
@@ -0,0 +1,64 @@
1
+ const LinterMessage = require('./message')
2
+ const { Allowlist, isBuiltIn } = require('./config')
3
+
4
+ // Checks uploaded CSV data files against the entity 'extension-allowlist'.
5
+ // Only entities that are allowed to be extended may also receive data via CSV.
6
+
7
+ // Maps a CSV data file name to the fully-qualified entity name it provides data for.
8
+ // Mirrors the convention in cds core (cds/lib/dbs/cds-deploy.js _entity4)
9
+ const entityNameFromCsvFile = (file, csn) => {
10
+ const base = file.replace(/\.csv$/i, '')
11
+ const name = base.replace(/-/g, '.')
12
+ if (csn?.definitions?.[name]) return name
13
+ // localization files: 'Books.texts', 'Books.texts_de', 'Books_texts'
14
+ const m = /(.+)[._]texts_?/.exec(name)
15
+ if (m) {
16
+ const target = csn?.definitions?.[m[1]]?.elements?.texts?.target
17
+ if (target) return target
18
+ }
19
+ return null
20
+ }
21
+
22
+ module.exports = class CsvAllowlistChecker {
23
+
24
+ check(csvNames, fullCsn, mtxConfig) {
25
+ // no restriction if no allowlist is configured or no data is uploaded
26
+ if (!Object.keys(mtxConfig ?? {}).length) return []
27
+ if (!csvNames || !csvNames.length) return []
28
+
29
+ const allowList = new Allowlist(mtxConfig, fullCsn)
30
+ const messages = []
31
+
32
+ for (const csvName of csvNames) {
33
+ // ignore hidden/metadata files (e.g. macOS AppleDouble '._*' created by tar);
34
+ // these are never valid entity data files
35
+ if (!csvName || csvName.startsWith('.')) continue
36
+
37
+ const name = entityNameFromCsvFile(csvName, fullCsn)
38
+
39
+ // unknown entity (not resolvable in the model) -> cannot be on the allowlist -> block
40
+ if (!name) {
41
+ messages.push(this._createWarning(csvName, allowList.getList('entity')))
42
+ continue
43
+ }
44
+
45
+ // built-in namespaces stay allowed, consistent with model extension checks
46
+ if (isBuiltIn(name)) continue
47
+
48
+ const kind = fullCsn?.definitions?.[name]?.kind ?? 'entity'
49
+ if (!allowList.isAllowed(kind, name)) {
50
+ messages.push(this._createWarning(name, allowList.getList('entity')))
51
+ }
52
+ }
53
+
54
+ return messages
55
+ }
56
+
57
+ _createWarning(entityName, allowlist = {}) {
58
+ const list = Object.keys(allowlist ?? {})
59
+ const message =
60
+ `Data upload for entity '${entityName}' is not allowed` +
61
+ `. Check entity allowlist: ${list.length > 0 ? list : '<empty list>'}`
62
+ return new LinterMessage(message, { name: entityName })
63
+ }
64
+ }
@@ -4,6 +4,7 @@ const { deduplicateMessages } = require('@sap/cds-compiler')
4
4
  const NamespaceChecker = require('./namespace')
5
5
  const AnnotationsChecker = require('./annotations')
6
6
  const AllowlistChecker = require('./allowlist')
7
+ const CsvAllowlistChecker = require('./csv-allowlist')
7
8
  const ProtectedNamespaceChecker = require('./protected-namespace')
8
9
 
9
10
  const customLinters = []
@@ -27,7 +28,7 @@ module.exports.legacyCheck = (env = cds.env) => {
27
28
  }
28
29
  }
29
30
 
30
- module.exports.lint = (extCsn, fullCsn, env = cds.env, cloneExt = false) => {
31
+ module.exports.lint = (extCsn, fullCsn, env = cds.env, cloneExt = false, csvNames = []) => {
31
32
  const conf = env.requires[EXT_SERVICE_NAME] || env.requires.extensibility || env.mtx || {}
32
33
  const linter_options = {}
33
34
  let x
@@ -43,7 +44,8 @@ module.exports.lint = (extCsn, fullCsn, env = cds.env, cloneExt = false) => {
43
44
  ...new ProtectedNamespaceChecker().check(reflectedCsn, reflectedFullCsn, compileBaseDir, linter_options),
44
45
  ...new NamespaceChecker().check(reflectedCsn, reflectedFullCsn, compileBaseDir, linter_options),
45
46
  ...new AnnotationsChecker().check(reflectedCsn, reflectedFullCsn, compileBaseDir, linter_options, extCsn),
46
- ...new AllowlistChecker().check(reflectedCsn, reflectedFullCsn, compileBaseDir, linter_options)
47
+ ...new AllowlistChecker().check(reflectedCsn, reflectedFullCsn, compileBaseDir, linter_options),
48
+ ...new CsvAllowlistChecker().check(csvNames, reflectedFullCsn, linter_options)
47
49
  ]
48
50
 
49
51
  for (const linter of customLinters) {
@@ -1,11 +1,23 @@
1
1
  const LinterMessage = require('./message')
2
- const { PROTECTED_NAMESPACES } = require('./config')
2
+ const { PROTECTED_NAMESPACES, isBuiltIn } = require('./config')
3
+
4
+ const EXTENSION_ALLOWLIST = 'extension-allowlist'
3
5
 
4
6
  function _protectedNamespaceOf(name) {
5
7
  if (!name) return null
6
8
  return PROTECTED_NAMESPACES.find(ns => name === ns || name.startsWith(`${ns}.`)) ?? null
7
9
  }
8
10
 
11
+ // Collects all names explicitly listed in the extension-allowlist, so they are
12
+ // allowed even if they fall into a protected namespace.
13
+ function _allowlistedNames(mtxConfig) {
14
+ const names = new Set()
15
+ for (const permission of mtxConfig?.[EXTENSION_ALLOWLIST] ?? []) {
16
+ for (const name of permission.for ?? []) names.add(name)
17
+ }
18
+ return names
19
+ }
20
+
9
21
  function locationString(element) {
10
22
  const loc = element?.$location
11
23
  if (!loc) return ''
@@ -13,23 +25,67 @@ function locationString(element) {
13
25
  return loc.col ? `${loc.file}:${line}${loc.col}:` : `${loc.file}:${line}`
14
26
  }
15
27
 
16
- // Rejects defining, extending or annotating artifacts in a protected namespace (e.g. 'cds.xt').
28
+ // Collects all source targets (fully-qualified names) referenced in a query's
29
+ // `from` clause, recursing into joins (`from.args`) and sub-queries
30
+ // (`from.SELECT` / `from.SET.args`).
31
+ function _collectFromTargets(from, acc = []) {
32
+ if (!from || typeof from !== 'object') return acc
33
+
34
+ if (Array.isArray(from.ref) && from.ref.length) {
35
+ const seg = from.ref[0]
36
+ const name = typeof seg === 'string' ? seg : seg?.id
37
+ if (name) acc.push(name)
38
+ }
39
+
40
+ // joins: from.args is an array of froms
41
+ if (Array.isArray(from.args)) {
42
+ for (const arg of from.args) _collectFromTargets(arg, acc)
43
+ }
44
+
45
+ // sub-query: from.SELECT is itself a query body with its own from
46
+ if (from.SELECT) _collectFromTargets(from.SELECT.from, acc)
47
+
48
+ // set operation sub-query: from.SET.args is an array of query bodies
49
+ if (from.SET && Array.isArray(from.SET.args)) {
50
+ for (const arg of from.SET.args) _collectFromTargets(arg.SELECT?.from, acc)
51
+ }
52
+
53
+ return acc
54
+ }
55
+
56
+ // Rejects defining, extending or annotating artifacts in a protected namespace (e.g. 'cds.xt'),
57
+ // as well as projections/views that read from an artifact in a protected namespace.
17
58
  // Runs unconditionally, independent of linter configuration.
18
59
  module.exports = class ProtectedNamespaceChecker {
19
60
 
20
61
  // eslint-disable-next-line no-unused-vars
21
62
  check(reflectedCsn, fullCsn, compileDir, mtxConfig) {
22
63
  const messages = []
64
+ const allowlisted = _allowlistedNames(mtxConfig)
23
65
 
24
66
  for (const name of Object.keys(reflectedCsn.definitions ?? {})) {
25
- if (_protectedNamespaceOf(name)) {
26
- messages.push(this._createWarning(name, reflectedCsn.definitions[name]))
67
+ const def = reflectedCsn.definitions[name]
68
+
69
+ // name in a protected namespace (built-ins + allowlisted names excluded)
70
+ if (!isBuiltIn(name) && !allowlisted.has(name) && _protectedNamespaceOf(name)) {
71
+ messages.push(this._createWarning(name, def))
72
+ continue // avoid double-counting: name-based block already fired
73
+ }
74
+
75
+ // projection/view reading from a protected artifact (allowlist override only, no isBuiltIn)
76
+ const queryBody = def.query?.SELECT ?? def.projection
77
+ if (queryBody) {
78
+ for (const target of _collectFromTargets(queryBody.from)) {
79
+ if (!allowlisted.has(target) && _protectedNamespaceOf(target)) {
80
+ messages.push(this._createExpositionWarning(target, def))
81
+ }
82
+ }
27
83
  }
28
84
  }
29
85
 
30
86
  for (const extension of reflectedCsn.extensions ?? []) {
31
87
  const target = extension.extend ?? extension.annotate
32
- if (_protectedNamespaceOf(target)) {
88
+ if (!allowlisted.has(target) && _protectedNamespaceOf(target)) {
33
89
  messages.push(this._createWarning(target, extension))
34
90
  }
35
91
  }
@@ -42,4 +98,10 @@ module.exports = class ProtectedNamespaceChecker {
42
98
  const message = `Extending, annotating or defining '${name}' in the protected namespace '${namespace}' is not supported in extensions`
43
99
  return new LinterMessage(locationString(element) + message, element)
44
100
  }
101
+
102
+ _createExpositionWarning(name, element) {
103
+ const namespace = _protectedNamespaceOf(name)
104
+ const message = `Exposing '${name}' from the protected namespace '${namespace}' via a projection/view is not supported in extensions`
105
+ return new LinterMessage(locationString(element) + message, element)
106
+ }
45
107
  }
@@ -2,7 +2,8 @@ const express = require('express')
2
2
  const cds = require('@sap/cds/lib')
3
3
  const { SELECT, DELETE } = cds.ql
4
4
  const { fs, path, tar, rimraf, read, readdir, mkdirp, write } = cds.utils
5
- const { token: authToken, authUrl } = require('../lib/utils')
5
+ const utils = require('../lib/utils')
6
+ const { token: authToken, authUrl, iasAuthorizeUrl, iasTokenUrl, IAS_AUTHORIZE_PATH, IAS_TOKEN_PATH, safeUntar, readDataCsv } = utils
6
7
  const main = require('./config')
7
8
  const linter = require('./extensibility/linter')
8
9
 
@@ -18,7 +19,7 @@ const ACTIVE = 2, DRAFT = 1, INACTIVE = 0
18
19
 
19
20
  // determine appid for separation of extensions
20
21
  //const packageJson = require(main.root + '/package.json');
21
- const APPID = require('../lib/utils').getAppId()
22
+ const APPID = utils.getAppId()
22
23
 
23
24
  const conf = () => ({ ...main.env.requires.extensibility, ...cds.env.requires['cds.xt.ExtensibilityService'] })
24
25
 
@@ -152,7 +153,12 @@ module.exports = class ExtensibilityService extends cds.ApplicationService {
152
153
  // REVISIT: string ?
153
154
  const sources = typeof extension === 'string' ? Buffer.from(extension, 'base64') : extension
154
155
  const root = await fs.promises.mkdtemp(`${TEMP_DIR}${path.sep}extension-`)
155
- await tar.xvz(sources).to(root)
156
+ try {
157
+ await safeUntar(sources, root)
158
+ } catch (e) {
159
+ await rimraf(root)
160
+ throw e
161
+ }
156
162
  return { root, archive: sources }
157
163
  }
158
164
 
@@ -306,7 +312,9 @@ module.exports = class ExtensibilityService extends cds.ApplicationService {
306
312
  // verify edmx
307
313
  cds.compile.to.edmx(extFullCsn, { service: 'all', version: cds.env.odata?.version ?? 'v4' })
308
314
 
309
- messages = linter.lint(extCsn, extFullCsn, cds.env, /* clone */ true)
315
+ const csvNames = await _readExtensionCsvNames(req.data.ID)
316
+
317
+ messages = linter.lint(extCsn, extFullCsn, cds.env, /* clone */ true, csvNames)
310
318
  } catch (error) {
311
319
  let validationError = error
312
320
  if (error.code === 'ERR_CDS_COMPILATION_FAILURE') messages = error.messages
@@ -318,6 +326,35 @@ module.exports = class ExtensibilityService extends cds.ApplicationService {
318
326
  }
319
327
  })
320
328
 
329
+ // reads the CSV data file names of the (not yet activated) extension with the given tag.
330
+ // used to validate uploaded data against the entity allowlist.
331
+ async function _readExtensionCsvNames(tag) {
332
+ // CSV deployment globally disabled -> nothing to gate here
333
+ if (conf().activate?.['skip-csv']) return []
334
+
335
+ let entry
336
+ try {
337
+ // mirror the selection in activateExtension: the inactive entry for this tag.
338
+ // tag may be null (untagged push) -> translates to 'tag IS NULL'
339
+ entry = await SELECT.one('sources')
340
+ .from('cds.xt.Extensions')
341
+ .where({ tag: tag ?? null, activated: { '!=': 'database' } })
342
+ .orderBy('timestamp desc')
343
+ } catch (e) {
344
+ DEBUG?.('could not read extension sources for csv validation', tag, e)
345
+ return []
346
+ }
347
+ if (!entry?.sources) return []
348
+
349
+ const root = await fs.promises.mkdtemp(`${TEMP_DIR}${path.sep}extension-`)
350
+ try {
351
+ const { csvs } = await readDataCsv(entry.sources, root)
352
+ return Object.keys(csvs ?? {})
353
+ } finally {
354
+ await rimraf(root)
355
+ }
356
+ }
357
+
321
358
  this.on('discard', async req => {
322
359
  const tenant = _tenant(req)
323
360
  if (tenant) cds.context = { tenant }
@@ -406,21 +443,15 @@ module.exports = class ExtensibilityService extends cds.ApplicationService {
406
443
  cds.on('served', () => {
407
444
  cds.app?.post('/-/cds/login/grant', express.urlencoded({ extended: false }), async (req, res) => {
408
445
  try {
409
- const cred = cds.env.requires.auth.credentials || {}
410
- if (!cred.clientid) throw cds.error('missing authentication service binding', { status: 500 })
411
-
412
446
  const query = req.body || {}
447
+ const meta = _isIas() ? await _iasMetadata(query) : undefined
448
+ if (!meta && _isIas() && typeof query.authorization_code === 'string') {
449
+ throw cds.error('IAS login metadata is unavailable', { status: 503 })
450
+ }
451
+ const cred = meta ? cds.env.requires.auth.credentials : _xsuaaCredentials()
452
+ if (!cred.clientid) throw cds.error('missing authentication service binding', { status: 500 })
413
453
 
414
- // Endpoint accepts only passcode and refresh_token grant requests.
415
- const refresh_token = typeof query.refresh_token === 'string' ? query.refresh_token : undefined
416
- const passcode = typeof query.passcode === 'string' ? query.passcode : undefined
417
- if (!refresh_token && !passcode)
418
- throw cds.error('missing passcode or refresh_token', { status: 400 })
419
-
420
- const form = refresh_token ? { grant_type: 'refresh_token', refresh_token } :
421
- { grant_type: 'password', passcode }
422
- form.scope = `${cred.xsappname}.cds.ExtensionDeveloper`
423
- const raw = await authToken(cred, { form, subdomain: query.subdomain })
454
+ const raw = meta ? await _iasGrant(cred, query, meta) : await _xsuaaGrant(cred, query)
424
455
  const data = JSON.parse(raw)
425
456
  if (data.error) return res.status(401).json(data)
426
457
  res.json(data)
@@ -509,10 +540,159 @@ function _passcodeUrl(c, sub) {
509
540
  return authUrl(c.url, sub, '/passcode').toString()
510
541
  }
511
542
 
512
- function authMeta(req, res) {
543
+ // True if the configured authentication kind is SAP Cloud Identity Services (IAS).
544
+ function _isIas() {
545
+ return cds.env.requires?.auth?.kind === 'ias'
546
+ }
547
+
548
+ function _xsuaaCredentials() {
549
+ const auth = cds.env.requires?.auth
550
+ const cred = _isIas() ? cds.env.requires[auth.xsuaa || 'xsuaa']?.credentials : auth?.credentials
551
+ if (!cred) throw cds.error('missing XSUAA service binding', { status: 500 })
552
+ return cred
553
+ }
554
+
555
+ // XSUAA login: exchange passcode or refresh_token for a token with the
556
+ // `<xsappname>.cds.ExtensionDeveloper` scope.
557
+ async function _xsuaaGrant(cred, query) {
558
+ const refresh_token = typeof query.refresh_token === 'string' ? query.refresh_token : undefined
559
+ const passcode = typeof query.passcode === 'string' ? query.passcode : undefined
560
+ if (!refresh_token && !passcode)
561
+ throw cds.error('missing passcode or refresh_token', { status: 400 })
562
+
563
+ const form = refresh_token ? { grant_type: 'refresh_token', refresh_token } :
564
+ { grant_type: 'password', passcode }
565
+ form.scope = `${cred.xsappname}.cds.ExtensionDeveloper`
566
+ return authToken(cred, { form, subdomain: query.subdomain })
567
+ }
568
+
569
+ // A requested subscriber must have its own IAS tenant; never substitute the provider.
570
+ // Without a subdomain, use the explicit app_tid or provider binding.
571
+ async function _iasLoginTarget(cred, query = {}) {
572
+ const subdomain = typeof query.subdomain === 'string' ? query.subdomain : undefined
573
+ const tenant = subdomain ? await _subscriberTenant(subdomain, cred) : undefined
574
+ if (subdomain && (!tenant?.app_tid || !tenant?.tenantHost)) return {}
575
+ const app_tid =
576
+ (typeof query.app_tid === 'string' && query.app_tid) ||
577
+ tenant?.app_tid ||
578
+ cred.app_tid || cred.appTid || cred.zone_uuid // provider tenant
579
+ return { app_tid, tenantHost: tenant?.tenantHost }
580
+ }
581
+
582
+ // Single DNS label; also prevents LIKE wildcards / JSON quotes leaking into the pattern.
583
+ const SUBDOMAIN_RE = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/i
584
+
585
+ // Extracts subdomain/app_tid/tenantHost from registry metadata (nested under `subscriber`
586
+ // or top-level), tolerating JSON key-order / whitespace variations.
587
+ function _subscriberInfo(meta) {
588
+ const s = meta?.subscriber ?? meta
589
+ const subdomain = s?.subaccountSubdomain ?? s?.subscribedSubdomain ?? meta?.subscribedSubdomain
590
+ const app_tid = s?.app_tid ?? meta?.app_tid ?? meta?.subscribedTenantId
591
+ const tenantHost = s?.tenantHost ?? meta?.tenantHost
592
+ return { subdomain, app_tid, tenantHost }
593
+ }
594
+
595
+ // Looks up a subscribed tenant by subdomain in `cds.xt.Tenants`. Non-fatal; only when
596
+ // multitenancy is configured. Falls back to the IAS `tenantLoginInfo` endpoint (derived
597
+ // from the auth binding) when the registry has no match.
598
+ async function _subscriberTenant(subdomain, cred) {
599
+ if (!cds.env.requires?.multitenancy) return undefined
600
+ if (!SUBDOMAIN_RE.test(subdomain)) return undefined
601
+ try {
602
+ // Pre-filter on the raw subdomain value (robust to JSON formatting); confirm in JS.
603
+ const like = `%"${subdomain}"%`
604
+ const rows = await utils.t0_(
605
+ SELECT.from('cds.xt.Tenants').columns('ID', 'metadata').where('metadata like', like)
606
+ )
607
+ let match
608
+ for (const { ID, metadata } of rows || []) {
609
+ let meta
610
+ try { meta = metadata ? JSON.parse(metadata) : undefined } catch { /* ignore */ }
611
+ const info = _subscriberInfo(meta)
612
+ if (info.subdomain === subdomain) {
613
+ match = { app_tid: info.app_tid || ID, tenantHost: info.tenantHost }
614
+ break
615
+ }
616
+ }
617
+ DEBUG?.('Resolving subscriber tenant:', { requested_subdomain: subdomain, resolved_app_tid: match?.app_tid, tenant_host: match?.tenantHost, candidates: rows?.length ?? 0 })
618
+ if (match) return match
619
+ } catch (err) {
620
+ DEBUG?.('Failed to resolve subscriber tenant for subdomain from tenant table', subdomain, '-', err.message)
621
+ }
622
+ // Fallback: ask the IAS landscape endpoint for the subscriber's login info.
623
+ DEBUG?.('Trying fallback via tenantLoginInfo')
624
+ const apiHost = utils.tenantLoginInfoHost(cred)
625
+ const info = apiHost && await utils.tenantLoginInfo(apiHost, subdomain)
626
+ if (info) {
627
+ DEBUG?.('Resolved subscriber tenant via tenantLoginInfo:', { requested_subdomain: subdomain, resolved_app_tid: info.app_tid, tenant_host: info.tenantHost, api_host: apiHost })
628
+ return info
629
+ }
630
+ return undefined
631
+ }
632
+
633
+ // IAS login: exchange the authorization_code (browser PKCE flow) or a refresh_token
634
+ // for a token. Authorization as `cds.ExtensionDeveloper` comes from AMS policies, not scopes.
635
+ async function _iasGrant(cred, query, meta) {
636
+ const refresh_token = typeof query.refresh_token === 'string' ? query.refresh_token : undefined
637
+ const code = typeof query.authorization_code === 'string' ? query.authorization_code : undefined
638
+ if (!refresh_token && !code)
639
+ throw cds.error('missing authorization_code or refresh_token', { status: 400 })
640
+
641
+ const { app_tid, token_endpoint } = meta
642
+
643
+ const form = refresh_token
644
+ ? { grant_type: 'refresh_token', refresh_token }
645
+ : {
646
+ grant_type: 'authorization_code',
647
+ code,
648
+ ...(typeof query.code_verifier === 'string' && { code_verifier: query.code_verifier }),
649
+ ...(typeof query.redirect_uri === 'string' && { redirect_uri: query.redirect_uri })
650
+ }
651
+ if (app_tid) form.app_tid = app_tid
652
+
653
+ return authToken(cred, { form, endpoint: token_endpoint })
654
+ }
655
+
656
+ async function _iasMetadata(query = {}) {
513
657
  const cred = cds.env.requires?.auth?.credentials || {}
514
658
  try {
515
- res.send({ passcode_url: _passcodeUrl(cred, req.query?.subdomain) })
659
+ const { app_tid, tenantHost } = await _iasLoginTarget(cred, query)
660
+ if (typeof cred.clientid !== 'string' || !cred.clientid.trim() ||
661
+ typeof app_tid !== 'string' || !app_tid.trim()) return undefined
662
+ const meta = {
663
+ flow: 'authorization_code',
664
+ pkce: true,
665
+ client_id: cred.clientid,
666
+ scope: 'openid',
667
+ authorization_endpoint: tenantHost ? `https://${tenantHost}${IAS_AUTHORIZE_PATH}` : iasAuthorizeUrl(cred),
668
+ token_endpoint: tenantHost ? `https://${tenantHost}${IAS_TOKEN_PATH}` : iasTokenUrl(cred),
669
+ app_tid // sent on both authorize and token
670
+ }
671
+ for (const endpoint of [meta.authorization_endpoint, meta.token_endpoint]) {
672
+ if (new URL(endpoint).protocol !== 'https:') return undefined
673
+ }
674
+ DEBUG?.('IAS login metadata:', {
675
+ client_id: meta.client_id,
676
+ requested_subdomain: query.subdomain,
677
+ app_tid: meta.app_tid,
678
+ binding_app_tid: cred.app_tid || cred.appTid || cred.zone_uuid,
679
+ tenant_host: tenantHost,
680
+ authorization_endpoint: meta.authorization_endpoint,
681
+ token_endpoint: meta.token_endpoint,
682
+ binding_url: cred.url,
683
+ binding_certurl: cred.certurl
684
+ })
685
+ return meta
686
+ } catch (err) {
687
+ DEBUG?.('Failed to resolve IAS login metadata; falling back to XSUAA:', err.message)
688
+ return undefined
689
+ }
690
+ }
691
+
692
+ async function authMeta(req, res) {
693
+ try {
694
+ const meta = _isIas() ? await _iasMetadata(req.query || {}) : undefined
695
+ res.send(meta || { passcode_url: _passcodeUrl(_xsuaaCredentials(), req.query?.subdomain) })
516
696
  } catch (err) {
517
697
  res.status(err.status || err.statusCode || 500).json({ error: err.message })
518
698
  }