@sap/cds-dk 10.1.1 → 10.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (870) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/bin/add.js +7 -2
  3. package/bin/bind.js +0 -2
  4. package/bin/bindings.js +35 -0
  5. package/bin/build.js +11 -6
  6. package/bin/compile/index.js +1 -0
  7. package/bin/completion/index.js +10 -448
  8. package/bin/completion/scripts/cds.fish +24 -16
  9. package/bin/completion/scripts/cds.ps1 +26 -25
  10. package/bin/completion/scripts/cds.sh +22 -19
  11. package/bin/completion/scripts/cds.zsh +22 -19
  12. package/bin/deploy/index.js +1 -1
  13. package/bin/deploy/to-hana/hana.js +5 -4
  14. package/bin/env.js +0 -1
  15. package/bin/eval.js +9 -5
  16. package/bin/export.js +6 -4
  17. package/bin/help/export.md +28 -4
  18. package/bin/import.js +6 -5
  19. package/bin/inspect.js +0 -1
  20. package/bin/login.js +28 -3
  21. package/bin/repl.js +82 -26
  22. package/bin/run.js +6 -7
  23. package/bin/serve.js +6 -7
  24. package/bin/up.js +7 -2
  25. package/bin/upgrade/steps/install.js +6 -6
  26. package/bin/watch/index.js +1 -0
  27. package/lib/build/index.js +11 -7
  28. package/lib/build/plugins/featureToggles.js +2 -2
  29. package/lib/build/plugins/hana/index.js +1 -1
  30. package/lib/build/plugins/helm/files/subcharts/web-application/Chart.yaml +1 -1
  31. package/lib/build/plugins/helm/files/subcharts/web-application/templates/_helpers.tpl +7 -0
  32. package/lib/build/plugins/helm/files/subcharts/web-application/templates/api-rule.yaml +1 -0
  33. package/lib/build/plugins/helm/files/subcharts/web-application/templates/service-binding.yaml +4 -4
  34. package/lib/build/plugins/helm/files/subcharts/web-application/values.schema.json +13 -0
  35. package/lib/build/plugins/helm/files/subcharts/web-application/values.yaml +7 -1
  36. package/lib/build/plugins/internal.js +0 -26
  37. package/lib/build/plugins/java/index.js +5 -1
  38. package/lib/build/plugins/nodejs/index.js +13 -4
  39. package/lib/build/util.js +4 -5
  40. package/lib/cds.js +8 -2
  41. package/lib/env/schemas/cds-rc.js +5 -0
  42. package/lib/import/importapi.js +2 -3
  43. package/lib/init/constants.js +1 -1
  44. package/lib/init/index.js +8 -3
  45. package/lib/init/merge.js +21 -17
  46. package/lib/init/plugin.js +1 -1
  47. package/lib/init/projectReader.js +13 -10
  48. package/lib/init/registries/mta.js +0 -6
  49. package/lib/init/template/ai/index.js +4 -4
  50. package/lib/init/template/ams/files/extensionDeveloper.dcl +6 -0
  51. package/lib/init/template/ams/files/mta.yaml.hbs +6 -0
  52. package/lib/init/template/ams/files/sidecar.package.json.hbs +5 -0
  53. package/lib/init/template/ams/index.js +42 -40
  54. package/lib/init/template/app-frontend/files/mta.yaml.hbs +2 -0
  55. package/lib/init/template/app-frontend/files/ui5.yaml.hbs +0 -4
  56. package/lib/init/template/app-frontend/index.js +29 -24
  57. package/lib/init/template/application-logging/index.js +6 -6
  58. package/lib/init/template/approuter/files/xs-app.json.hbs +22 -0
  59. package/lib/init/template/approuter/index.js +20 -13
  60. package/lib/init/template/attachments/index.js +3 -3
  61. package/lib/init/template/audit-logging/index.js +4 -4
  62. package/lib/init/template/cloud-logging/index.js +12 -6
  63. package/lib/init/template/completion/completionSetup.js +19 -6
  64. package/lib/init/template/connectivity/index.js +3 -3
  65. package/lib/init/template/data/as-csv.js +7 -4
  66. package/lib/init/template/data/as-json.js +77 -20
  67. package/lib/init/template/destination/index.js +12 -9
  68. package/lib/init/template/dynatrace/index.js +5 -5
  69. package/lib/init/template/enterprise-messaging/index.js +10 -7
  70. package/lib/init/template/enterprise-messaging-shared/index.js +4 -4
  71. package/lib/init/template/event-mesh/index.js +3 -0
  72. package/lib/init/template/extensibility/index.js +2 -2
  73. package/lib/init/template/extension/index.js +26 -0
  74. package/lib/init/template/github-actions/index.js +3 -3
  75. package/lib/init/template/hana/files/package.json.hbs +3 -2
  76. package/lib/init/template/hana/index.js +5 -5
  77. package/lib/init/template/hana-serverless/index.js +3 -3
  78. package/lib/init/template/html5-repo/files/mta.yaml.hbs +2 -0
  79. package/lib/init/template/html5-repo/files/ui5.yaml.hbs +0 -4
  80. package/lib/init/template/html5-repo/index.js +68 -40
  81. package/lib/init/template/http/index.js +1 -1
  82. package/lib/init/template/ias/index.js +7 -7
  83. package/lib/init/template/initial/files/.gitignore.hbs +1 -0
  84. package/lib/init/template/kafka/index.js +3 -3
  85. package/lib/init/template/kyma/index.js +7 -9
  86. package/lib/init/template/malware-scanner/index.js +3 -3
  87. package/lib/init/template/mta/index.js +6 -3
  88. package/lib/init/template/multitenancy/index.js +6 -7
  89. package/lib/init/template/notifications/index.js +2 -2
  90. package/lib/init/template/portal/index.js +16 -10
  91. package/lib/init/template/postgres/index.js +5 -5
  92. package/lib/init/template/react/files/index.html.hbs +1 -1
  93. package/lib/init/template/react/files/package.json.hbs +3 -2
  94. package/lib/init/template/react/files/src/{App.jsx.hbs → App.{{jsxExtension}}.hbs} +8 -2
  95. package/lib/init/template/react/files/src/{main.jsx → main.{{jsxExtension}}.hbs} +2 -2
  96. package/lib/init/template/react/index.js +23 -4
  97. package/lib/init/template/react/typescript/src/vite-env.d.ts +1 -0
  98. package/lib/init/template/react/typescript/tsconfig.json.hbs +16 -0
  99. package/lib/init/template/redis/index.js +2 -2
  100. package/lib/init/template/side-by-side-extensibility/index.js +6 -3
  101. package/lib/init/template/typescript/files/tsconfig.json +3 -1
  102. package/lib/init/template/vue/files/index.html.hbs +1 -1
  103. package/lib/init/template/vue/files/package.json.hbs +2 -1
  104. package/lib/init/template/vue/files/src/App.vue.hbs +8 -2
  105. package/lib/init/template/vue/index.js +20 -4
  106. package/lib/init/template/vue/typescript/tsconfig.json +11 -0
  107. package/lib/init/template/workzone-standard/files/mta.yaml.hbs +2 -2
  108. package/lib/init/template/workzone-standard/index.js +30 -28
  109. package/lib/init/template/xsuaa/files/mta.yaml.hbs +1 -1
  110. package/lib/init/template/xsuaa/files/values.yaml.hbs +1 -1
  111. package/lib/init/template/xsuaa/index.js +34 -22
  112. package/lib/mtx/auth_manager.js +8 -2
  113. package/lib/mtx/browser_login.js +181 -0
  114. package/lib/mtx/params.js +6 -0
  115. package/lib/mtx/settings_manager.js +29 -4
  116. package/lib/util/cf.js +44 -8
  117. package/lib/util/fs.js +2 -2
  118. package/node_modules/@cap-js/db-service/CHANGELOG.md +23 -0
  119. package/node_modules/@cap-js/db-service/lib/cqn2pql.js +4 -0
  120. package/node_modules/@cap-js/db-service/lib/cqn2sql.js +3 -0
  121. package/node_modules/@cap-js/db-service/lib/cqn4sql.js +17 -28
  122. package/node_modules/@cap-js/db-service/lib/infer/index.js +20 -27
  123. package/node_modules/@cap-js/db-service/package.json +1 -1
  124. package/node_modules/@cap-js/openapi/cds-plugin.js +12 -0
  125. package/node_modules/@cap-js/openapi/index.js +3 -1
  126. package/node_modules/@cap-js/openapi/lib/compile/csdl2openapi.js +652 -413
  127. package/node_modules/@cap-js/openapi/lib/compile/diagram.js +16 -13
  128. package/node_modules/@cap-js/openapi/lib/compile/index.js +10 -7
  129. package/node_modules/@cap-js/openapi/lib/compile/property-util.js +51 -0
  130. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/importOpenAPI.js +12 -9
  131. package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/index.js +4 -3
  132. package/node_modules/@cap-js/openapi/package.json +71 -3
  133. package/node_modules/@cap-js/sqlite/CHANGELOG.md +18 -0
  134. package/node_modules/@cap-js/sqlite/package.json +3 -3
  135. package/node_modules/@isaacs/fs-minipass/LICENSE +15 -0
  136. package/node_modules/@isaacs/fs-minipass/README.md +71 -0
  137. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts +118 -0
  138. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts.map +1 -0
  139. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +430 -0
  140. package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js.map +1 -0
  141. package/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +3 -0
  142. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts +118 -0
  143. package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts.map +1 -0
  144. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js +420 -0
  145. package/node_modules/@isaacs/fs-minipass/dist/esm/index.js.map +1 -0
  146. package/node_modules/@isaacs/fs-minipass/dist/esm/package.json +3 -0
  147. package/node_modules/@isaacs/fs-minipass/package.json +72 -0
  148. package/node_modules/@sap/cds/CHANGELOG.md +71 -1
  149. package/node_modules/@sap/cds/_i18n/messages_ar.properties +1 -0
  150. package/node_modules/@sap/cds/_i18n/messages_bg.properties +1 -0
  151. package/node_modules/@sap/cds/_i18n/messages_cs.properties +1 -0
  152. package/node_modules/@sap/cds/_i18n/messages_da.properties +1 -0
  153. package/node_modules/@sap/cds/_i18n/messages_de.properties +1 -0
  154. package/node_modules/@sap/cds/_i18n/messages_el.properties +1 -0
  155. package/node_modules/@sap/cds/_i18n/messages_en.properties +1 -0
  156. package/node_modules/@sap/cds/_i18n/messages_es.properties +1 -0
  157. package/node_modules/@sap/cds/_i18n/messages_es_MX.properties +1 -0
  158. package/node_modules/@sap/cds/_i18n/messages_fi.properties +1 -0
  159. package/node_modules/@sap/cds/_i18n/messages_fr.properties +1 -0
  160. package/node_modules/@sap/cds/_i18n/messages_he.properties +1 -0
  161. package/node_modules/@sap/cds/_i18n/messages_hr.properties +1 -0
  162. package/node_modules/@sap/cds/_i18n/messages_hu.properties +1 -0
  163. package/node_modules/@sap/cds/_i18n/messages_it.properties +1 -0
  164. package/node_modules/@sap/cds/_i18n/messages_ja.properties +1 -0
  165. package/node_modules/@sap/cds/_i18n/messages_kk.properties +1 -0
  166. package/node_modules/@sap/cds/_i18n/messages_ko.properties +1 -0
  167. package/node_modules/@sap/cds/_i18n/messages_ms.properties +1 -0
  168. package/node_modules/@sap/cds/_i18n/messages_nl.properties +1 -0
  169. package/node_modules/@sap/cds/_i18n/messages_no.properties +1 -0
  170. package/node_modules/@sap/cds/_i18n/messages_pl.properties +1 -0
  171. package/node_modules/@sap/cds/_i18n/messages_pt.properties +1 -0
  172. package/node_modules/@sap/cds/_i18n/messages_ro.properties +1 -0
  173. package/node_modules/@sap/cds/_i18n/messages_ru.properties +1 -0
  174. package/node_modules/@sap/cds/_i18n/messages_sh.properties +1 -0
  175. package/node_modules/@sap/cds/_i18n/messages_sk.properties +1 -0
  176. package/node_modules/@sap/cds/_i18n/messages_sl.properties +1 -0
  177. package/node_modules/@sap/cds/_i18n/messages_sv.properties +1 -0
  178. package/node_modules/@sap/cds/_i18n/messages_th.properties +1 -0
  179. package/node_modules/@sap/cds/_i18n/messages_tr.properties +1 -0
  180. package/node_modules/@sap/cds/_i18n/messages_uk.properties +1 -0
  181. package/node_modules/@sap/cds/_i18n/messages_vi.properties +1 -0
  182. package/node_modules/@sap/cds/_i18n/messages_zh_CN.properties +1 -0
  183. package/node_modules/@sap/cds/_i18n/messages_zh_TW.properties +1 -0
  184. package/node_modules/@sap/cds/app/index-client.js +164 -0
  185. package/node_modules/@sap/cds/app/index.css +598 -87
  186. package/node_modules/@sap/cds/app/index.html +54 -30
  187. package/node_modules/@sap/cds/app/index.js +311 -67
  188. package/node_modules/@sap/cds/app/table.html +226 -0
  189. package/node_modules/@sap/cds/app/table.js +302 -0
  190. package/node_modules/@sap/cds/bin/serve.js +3 -2
  191. package/node_modules/@sap/cds/common.cds +3 -3
  192. package/node_modules/@sap/cds/eslint.config.mjs +2 -0
  193. package/node_modules/@sap/cds/lib/compile/cdsc.js +7 -0
  194. package/node_modules/@sap/cds/lib/compile/for/embeddings.js +27 -0
  195. package/node_modules/@sap/cds/lib/compile/load.js +2 -2
  196. package/node_modules/@sap/cds/lib/compile/minify.js +17 -2
  197. package/node_modules/@sap/cds/lib/compile/parse.js +3 -0
  198. package/node_modules/@sap/cds/lib/compile/resolve.js +16 -14
  199. package/node_modules/@sap/cds/lib/core/classes.js +1 -0
  200. package/node_modules/@sap/cds/lib/dbs/cds-deploy.js +4 -5
  201. package/node_modules/@sap/cds/lib/env/cds-env.js +132 -70
  202. package/node_modules/@sap/cds/lib/env/cds-requires/auth-strategies.js +62 -0
  203. package/node_modules/@sap/cds/lib/env/cds-requires/databases.js +49 -0
  204. package/node_modules/@sap/cds/lib/env/cds-requires/embeddings.js +8 -0
  205. package/node_modules/@sap/cds/lib/env/cds-requires/index.js +27 -0
  206. package/node_modules/@sap/cds/lib/env/cds-requires/messaging.js +82 -0
  207. package/node_modules/@sap/cds/lib/env/cds-requires/platform.js +23 -0
  208. package/node_modules/@sap/cds/lib/env/cds-requires/queues.js +34 -0
  209. package/node_modules/@sap/cds/lib/env/cds-requires/services.js +32 -0
  210. package/node_modules/@sap/cds/lib/env/defaults.js +9 -1
  211. package/node_modules/@sap/cds/lib/i18n/files.js +4 -4
  212. package/node_modules/@sap/cds/lib/i18n/locale.js +1 -1
  213. package/node_modules/@sap/cds/lib/index.js +9 -9
  214. package/node_modules/@sap/cds/lib/log/cds-log.js +3 -3
  215. package/node_modules/@sap/cds/lib/ql/SELECT.js +2 -0
  216. package/node_modules/@sap/cds/lib/ql/UPDATE.js +1 -1
  217. package/node_modules/@sap/cds/lib/ql/cds.ql-Query.js +4 -1
  218. package/node_modules/@sap/cds/lib/ql/core/@types/cqn.d.ts +146 -0
  219. package/node_modules/@sap/cds/lib/ql/core/@types/exprs.d.ts +51 -0
  220. package/node_modules/@sap/cds/lib/ql/core/@types/index.d.ts +29 -0
  221. package/node_modules/@sap/cds/lib/ql/core/@types/package.json +7 -0
  222. package/node_modules/@sap/cds/lib/ql/core/@types/ql/delete.d.ts +8 -0
  223. package/node_modules/@sap/cds/lib/ql/core/@types/ql/insert.d.ts +19 -0
  224. package/node_modules/@sap/cds/lib/ql/core/@types/ql/select.d.ts +24 -0
  225. package/node_modules/@sap/cds/lib/ql/core/@types/ql/update.d.ts +10 -0
  226. package/node_modules/@sap/cds/lib/ql/core/@types/query.d.ts +18 -0
  227. package/node_modules/@sap/cds/lib/ql/core/cql/parser.min.js +1 -0
  228. package/node_modules/@sap/cds/lib/ql/core/lib/index.js +69 -0
  229. package/node_modules/@sap/cds/lib/ql/core/lib/ql/cache.js +34 -0
  230. package/node_modules/@sap/cds/lib/ql/core/lib/ql/call-action.js +6 -0
  231. package/node_modules/@sap/cds/lib/ql/core/lib/ql/delete.js +8 -0
  232. package/node_modules/@sap/cds/lib/ql/core/lib/ql/insert.js +26 -0
  233. package/node_modules/@sap/cds/lib/ql/core/lib/ql/select.js +22 -0
  234. package/node_modules/@sap/cds/lib/ql/core/lib/ql/update.js +26 -0
  235. package/node_modules/@sap/cds/lib/ql/core/lib/query.js +85 -0
  236. package/node_modules/@sap/cds/lib/ql/core/lib/xl/fluent.js +47 -0
  237. package/node_modules/@sap/cds/lib/ql/core/lib/xl/ttl.js +24 -0
  238. package/node_modules/@sap/cds/lib/ql/core/license +201 -0
  239. package/node_modules/@sap/cds/lib/ql/core/package.json +24 -0
  240. package/node_modules/@sap/cds/lib/ql/core/readme.md +99 -0
  241. package/node_modules/@sap/cds/lib/ql/core/upstream.json +5 -0
  242. package/node_modules/@sap/cds/lib/req/spawn.js +1 -1
  243. package/node_modules/@sap/cds/lib/srv/bindings.js +111 -115
  244. package/node_modules/@sap/cds/lib/srv/cds-connect.js +11 -10
  245. package/node_modules/@sap/cds/lib/srv/cds-serve.js +16 -7
  246. package/node_modules/@sap/cds/lib/srv/cds.Service.js +13 -7
  247. package/node_modules/@sap/cds/lib/srv/factory.js +8 -10
  248. package/node_modules/@sap/cds/lib/srv/middlewares/auth/ias-auth.js +35 -32
  249. package/node_modules/@sap/cds/lib/srv/middlewares/auth/jwt-auth.js +5 -1
  250. package/node_modules/@sap/cds/lib/srv/middlewares/auth/mocked-users.js +1 -1
  251. package/node_modules/@sap/cds/lib/srv/protocols/hcql.js +230 -79
  252. package/node_modules/@sap/cds/lib/srv/protocols/http.js +7 -3
  253. package/node_modules/@sap/cds/lib/srv/protocols/index.js +7 -2
  254. package/node_modules/@sap/cds/lib/srv/srv-dispatch.js +2 -2
  255. package/node_modules/@sap/cds/lib/utils/cds-utils.js +37 -0
  256. package/node_modules/@sap/cds/lib/utils/csv-reader.js +2 -2
  257. package/node_modules/@sap/cds/libx/_runtime/common/generic/assert.js +18 -27
  258. package/node_modules/@sap/cds/libx/_runtime/common/generic/crud.js +8 -2
  259. package/node_modules/@sap/cds/libx/_runtime/common/utils/cqn.js +1 -1
  260. package/node_modules/@sap/cds/libx/_runtime/common/utils/rewriteAsterisks.js +1 -1
  261. package/node_modules/@sap/cds/libx/_runtime/fiori/lean-draft.js +122 -85
  262. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/authorizedRequest.js +24 -1
  263. package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/normalizeIncomingMessage.js +1 -1
  264. package/node_modules/@sap/cds/libx/_runtime/messaging/kafka.js +1 -1
  265. package/node_modules/@sap/cds/libx/_runtime/remote/Service.js +2 -2
  266. package/node_modules/@sap/cds/libx/_runtime/remote/utils/client.js +3 -2
  267. package/node_modules/@sap/cds/libx/_runtime/remote/utils/query.js +11 -6
  268. package/node_modules/@sap/cds/libx/http/location.js +10 -11
  269. package/node_modules/@sap/cds/libx/odata/middleware/create.js +4 -0
  270. package/node_modules/@sap/cds/libx/odata/middleware/metadata.js +1 -1
  271. package/node_modules/@sap/cds/libx/odata/middleware/operation.js +3 -0
  272. package/node_modules/@sap/cds/libx/odata/middleware/parse.js +9 -0
  273. package/node_modules/@sap/cds/libx/odata/middleware/read.js +7 -1
  274. package/node_modules/@sap/cds/libx/odata/middleware/update.js +5 -1
  275. package/node_modules/@sap/cds/libx/odata/parse/afterburner.js +3 -3
  276. package/node_modules/@sap/cds/libx/odata/parse/multipartToJson.js +1 -1
  277. package/node_modules/@sap/cds/libx/odata/utils/ieee754.js +20 -0
  278. package/node_modules/@sap/cds/libx/queue/SchedulingService.js +4 -0
  279. package/node_modules/@sap/cds/libx/queue/api.js +1 -1
  280. package/node_modules/@sap/cds/libx/queue/index.js +46 -10
  281. package/node_modules/@sap/cds/libx/queue/processing.js +52 -16
  282. package/node_modules/@sap/cds/libx/queue/utils.js +3 -0
  283. package/node_modules/@sap/cds/libx/rest/RestAdapter.js +1 -0
  284. package/node_modules/@sap/cds/package.json +2 -2
  285. package/node_modules/@sap/cds/server.js +1 -0
  286. package/node_modules/@sap/cds/srv/ucl-service.cds +1 -0
  287. package/node_modules/@sap/cds/tasks/enterprise-messaging-deploy.js +13 -5
  288. package/node_modules/@sap/cds-compiler/CHANGELOG.md +83 -0
  289. package/node_modules/@sap/cds-compiler/bin/cdsse.js +1 -1
  290. package/node_modules/@sap/cds-compiler/doc/EffectiveCSN.md +3314 -0
  291. package/node_modules/@sap/cds-compiler/lib/api/main.js +9 -6
  292. package/node_modules/@sap/cds-compiler/lib/api/options.js +3 -3
  293. package/node_modules/@sap/cds-compiler/lib/{model → base}/csnUtils.js +5 -5
  294. package/node_modules/@sap/cds-compiler/lib/base/message-registry.js +54 -6
  295. package/node_modules/@sap/cds-compiler/lib/base/optionProcessor.js +4 -4
  296. package/node_modules/@sap/cds-compiler/lib/{model → base}/sortViews.js +1 -1
  297. package/node_modules/@sap/cds-compiler/lib/checks/assocOutsideService.js +1 -1
  298. package/node_modules/@sap/cds-compiler/lib/checks/checkForTypes.js +1 -1
  299. package/node_modules/@sap/cds-compiler/lib/checks/checkPathsInStoredCalcElement.js +1 -1
  300. package/node_modules/@sap/cds-compiler/lib/checks/elements.js +37 -3
  301. package/node_modules/@sap/cds-compiler/lib/checks/enricher.js +1 -1
  302. package/node_modules/@sap/cds-compiler/lib/checks/existsInForbiddenPlaces.js +1 -1
  303. package/node_modules/@sap/cds-compiler/lib/checks/hasPersistedElements.js +1 -1
  304. package/node_modules/@sap/cds-compiler/lib/checks/manyExpand.js +1 -1
  305. package/node_modules/@sap/cds-compiler/lib/checks/manyNavigations.js +1 -1
  306. package/node_modules/@sap/cds-compiler/lib/checks/onConditions.js +1 -1
  307. package/node_modules/@sap/cds-compiler/lib/checks/parameters.js +1 -1
  308. package/node_modules/@sap/cds-compiler/lib/checks/queryNoDbArtifacts.js +1 -1
  309. package/node_modules/@sap/cds-compiler/lib/checks/selectItems.js +1 -1
  310. package/node_modules/@sap/cds-compiler/lib/checks/structuredAnnoExpressions.js +1 -1
  311. package/node_modules/@sap/cds-compiler/lib/checks/typeParameters.js +1 -1
  312. package/node_modules/@sap/cds-compiler/lib/checks/types.js +1 -1
  313. package/node_modules/@sap/cds-compiler/lib/checks/validator.js +1 -1
  314. package/node_modules/@sap/cds-compiler/lib/compiler/assert-consistency.js +20 -12
  315. package/node_modules/@sap/cds-compiler/lib/compiler/builtins.js +9 -4
  316. package/node_modules/@sap/cds-compiler/lib/compiler/checks.js +50 -0
  317. package/node_modules/@sap/cds-compiler/lib/compiler/define.js +303 -323
  318. package/node_modules/@sap/cds-compiler/lib/compiler/dictionaries.js +5 -0
  319. package/node_modules/@sap/cds-compiler/lib/compiler/extend.js +1015 -1177
  320. package/node_modules/@sap/cds-compiler/lib/compiler/generate.js +55 -42
  321. package/node_modules/@sap/cds-compiler/lib/compiler/populate.js +74 -45
  322. package/node_modules/@sap/cds-compiler/lib/compiler/propagator.js +1 -0
  323. package/node_modules/@sap/cds-compiler/lib/compiler/resolve.js +6 -4
  324. package/node_modules/@sap/cds-compiler/lib/compiler/shared.js +30 -49
  325. package/node_modules/@sap/cds-compiler/lib/compiler/utils.js +32 -18
  326. package/node_modules/@sap/cds-compiler/lib/edm/annotations/edmJson.js +3 -3
  327. package/node_modules/@sap/cds-compiler/lib/edm/annotations/genericTranslation.js +2 -2
  328. package/node_modules/@sap/cds-compiler/lib/edm/annotations/preprocessAnnotations.js +2 -3
  329. package/node_modules/@sap/cds-compiler/lib/edm/csn2edm.js +1 -1
  330. package/node_modules/@sap/cds-compiler/lib/edm/edm.js +6 -7
  331. package/node_modules/@sap/cds-compiler/lib/edm/edmAnnoPreprocessor.js +1 -1
  332. package/node_modules/@sap/cds-compiler/lib/edm/edmInboundChecks.js +1 -1
  333. package/node_modules/@sap/cds-compiler/lib/edm/edmPreprocessor.js +1 -1
  334. package/node_modules/@sap/cds-compiler/lib/edm/edmUtils.js +12 -7
  335. package/node_modules/@sap/cds-compiler/lib/gen/CdlGrammar.checksum +1 -1
  336. package/node_modules/@sap/cds-compiler/lib/gen/CdlParser.js +15 -15
  337. package/node_modules/@sap/cds-compiler/lib/gen/Dictionary.json +7 -0
  338. package/node_modules/@sap/cds-compiler/lib/json/from-csn.js +30 -30
  339. package/node_modules/@sap/cds-compiler/lib/json/to-csn.js +2 -1
  340. package/node_modules/@sap/cds-compiler/lib/main.js +4 -1
  341. package/node_modules/@sap/cds-compiler/lib/parsers/AstBuildingParser.js +42 -15
  342. package/node_modules/@sap/cds-compiler/lib/render/DuplicateChecker.js +37 -11
  343. package/node_modules/@sap/cds-compiler/lib/render/manageConstraints.js +1 -1
  344. package/node_modules/@sap/cds-compiler/lib/render/toCdl.js +11 -6
  345. package/node_modules/@sap/cds-compiler/lib/render/toRename.js +1 -1
  346. package/node_modules/@sap/cds-compiler/lib/render/toSql.js +74 -24
  347. package/node_modules/@sap/cds-compiler/lib/render/utils/common.js +1 -1
  348. package/node_modules/@sap/cds-compiler/lib/render/utils/operators.js +81 -0
  349. package/node_modules/@sap/cds-compiler/lib/render/utils/sql.js +17 -10
  350. package/node_modules/@sap/cds-compiler/lib/transform/db/assertUnique.js +1 -1
  351. package/node_modules/@sap/cds-compiler/lib/transform/db/associations.js +3 -4
  352. package/node_modules/@sap/cds-compiler/lib/transform/db/assocsToQueries/transformExists.js +1 -1
  353. package/node_modules/@sap/cds-compiler/lib/transform/db/backlinks.js +2 -2
  354. package/node_modules/@sap/cds-compiler/lib/transform/db/cdsPersistence.js +1 -1
  355. package/node_modules/@sap/cds-compiler/lib/transform/db/constraints.js +6 -5
  356. package/node_modules/@sap/cds-compiler/lib/transform/db/expansion.js +7 -1
  357. package/node_modules/@sap/cds-compiler/lib/transform/db/flattening.js +2 -2
  358. package/node_modules/@sap/cds-compiler/lib/{modelCompare/compare.js → transform/db/migration/diffModels.js} +5 -5
  359. package/node_modules/@sap/cds-compiler/lib/{modelCompare/utils/filter.js → transform/db/migration/filterDiff.js} +2 -2
  360. package/node_modules/@sap/cds-compiler/lib/transform/db/processSqlServices.js +1 -1
  361. package/node_modules/@sap/cds-compiler/lib/transform/db/rewriteCalculatedElements.js +1 -1
  362. package/node_modules/@sap/cds-compiler/lib/transform/db/temporal.js +1 -1
  363. package/node_modules/@sap/cds-compiler/lib/transform/db/views.js +2 -6
  364. package/node_modules/@sap/cds-compiler/lib/transform/draft/db.js +1 -1
  365. package/node_modules/@sap/cds-compiler/lib/transform/draft/odata.js +1 -1
  366. package/node_modules/@sap/cds-compiler/lib/transform/effective/annotations.js +1 -1
  367. package/node_modules/@sap/cds-compiler/lib/transform/effective/associations.js +1 -1
  368. package/node_modules/@sap/cds-compiler/lib/transform/effective/flattening.js +1 -1
  369. package/node_modules/@sap/cds-compiler/lib/transform/effective/main.js +3 -2
  370. package/node_modules/@sap/cds-compiler/lib/transform/effective/misc.js +2 -1
  371. package/node_modules/@sap/cds-compiler/lib/transform/effective/queries.js +1 -1
  372. package/node_modules/@sap/cds-compiler/lib/transform/effective/types.js +1 -1
  373. package/node_modules/@sap/cds-compiler/lib/transform/forOdata.js +1 -1
  374. package/node_modules/@sap/cds-compiler/lib/transform/forRelationalDB.js +9 -4
  375. package/node_modules/@sap/cds-compiler/lib/transform/localized.js +1 -1
  376. package/node_modules/@sap/cds-compiler/lib/transform/odata/adaptAnnotationRefs.js +5 -11
  377. package/node_modules/@sap/cds-compiler/lib/transform/odata/createForeignKeys.js +1 -1
  378. package/node_modules/@sap/cds-compiler/lib/transform/odata/flattening.js +4 -4
  379. package/node_modules/@sap/cds-compiler/lib/transform/odata/foreignKeyRefsInXprAnnos.js +5 -3
  380. package/node_modules/@sap/cds-compiler/lib/transform/odata/toFinalBaseType.js +29 -5
  381. package/node_modules/@sap/cds-compiler/lib/transform/odata/typesExposure.js +13 -3
  382. package/node_modules/@sap/cds-compiler/lib/transform/odata/utils.js +9 -0
  383. package/node_modules/@sap/cds-compiler/lib/transform/transformUtils.js +2 -2
  384. package/node_modules/@sap/cds-compiler/lib/transform/translateAssocsToJoins.js +1 -1
  385. package/node_modules/@sap/cds-compiler/lib/transform/tupleExpansion.js +1 -1
  386. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/coreComputed.js +1 -1
  387. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/universalCsnEnricher.js +1 -1
  388. package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/utils.js +1 -1
  389. package/node_modules/@sap/cds-compiler/package.json +1 -1
  390. package/node_modules/@sap/cds-mtxs/CHANGELOG.md +47 -0
  391. package/node_modules/@sap/cds-mtxs/bin/cds-mtx-migrate.js +4 -6
  392. package/node_modules/@sap/cds-mtxs/bin/cds-mtx.js +5 -4
  393. package/node_modules/@sap/cds-mtxs/cds-plugin.js +38 -2
  394. package/node_modules/@sap/cds-mtxs/db/t0.cds +7 -0
  395. package/node_modules/@sap/cds-mtxs/lib/utils.js +129 -20
  396. package/node_modules/@sap/cds-mtxs/package.json +15 -14
  397. package/node_modules/@sap/cds-mtxs/srv/cf/abstract-provisioning-service.js +13 -12
  398. package/node_modules/@sap/cds-mtxs/srv/cf/saas-provisioning-service.cds +1 -0
  399. package/node_modules/@sap/cds-mtxs/srv/cf/sms-provisioning-service.cds +1 -0
  400. package/node_modules/@sap/cds-mtxs/srv/extensibility/compat/update.js +5 -2
  401. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/config.js +1 -2
  402. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/csv-allowlist.js +64 -0
  403. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/index.js +4 -2
  404. package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/protected-namespace.js +67 -5
  405. package/node_modules/@sap/cds-mtxs/srv/extensibility-service.js +179 -15
  406. package/node_modules/@sap/cds-mtxs/srv/jobs-service.js +12 -3
  407. package/node_modules/@sap/cds-mtxs/srv/plugins/common.js +33 -12
  408. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/ctnr-mgr-base.js +24 -6
  409. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-ctnr-mgr.js +3 -1
  410. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-native.js +752 -0
  411. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/serverless.js +17 -20
  412. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr-v2.js +511 -0
  413. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr.js +11 -4
  414. package/node_modules/@sap/cds-mtxs/srv/plugins/hana/tms.js +8 -0
  415. package/node_modules/@sap/cds-mtxs/srv/plugins/hana.js +27 -18
  416. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker-pool.js +1 -1
  417. package/node_modules/@sap/cds-mtxs/srv/worker/job-worker.js +1 -1
  418. package/node_modules/chownr/LICENSE.md +63 -0
  419. package/node_modules/chownr/README.md +3 -0
  420. package/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
  421. package/node_modules/chownr/dist/commonjs/index.d.ts.map +1 -0
  422. package/node_modules/chownr/dist/commonjs/index.js +93 -0
  423. package/node_modules/chownr/dist/commonjs/index.js.map +1 -0
  424. package/node_modules/chownr/dist/commonjs/package.json +3 -0
  425. package/node_modules/chownr/dist/esm/index.d.ts +3 -0
  426. package/node_modules/chownr/dist/esm/index.d.ts.map +1 -0
  427. package/node_modules/chownr/dist/esm/index.js +85 -0
  428. package/node_modules/chownr/dist/esm/index.js.map +1 -0
  429. package/node_modules/chownr/dist/esm/package.json +3 -0
  430. package/node_modules/chownr/package.json +69 -0
  431. package/node_modules/content-disposition/README.md +105 -35
  432. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  433. package/node_modules/content-disposition/dist/index.js +388 -0
  434. package/node_modules/content-disposition/dist/index.js.map +1 -0
  435. package/node_modules/content-disposition/package.json +31 -19
  436. package/node_modules/content-type/README.md +34 -57
  437. package/node_modules/content-type/package.json +35 -25
  438. package/node_modules/express/Readme.md +15 -9
  439. package/node_modules/express/lib/application.js +2 -2
  440. package/node_modules/express/lib/request.js +32 -19
  441. package/node_modules/express/lib/response.js +27 -30
  442. package/node_modules/express/package.json +10 -10
  443. package/node_modules/handlebars/bin/handlebars +1 -1
  444. package/node_modules/handlebars/dist/amd/handlebars/base.js +2 -2
  445. package/node_modules/handlebars/dist/amd/handlebars/compiler/base.js +2 -59
  446. package/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js +68 -5
  447. package/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js +160 -19
  448. package/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js +23 -7
  449. package/node_modules/handlebars/dist/amd/handlebars/compiler/node-types.js +12 -0
  450. package/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js +26 -7
  451. package/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js +9 -4
  452. package/node_modules/handlebars/dist/amd/handlebars/exception.js +8 -4
  453. package/node_modules/handlebars/dist/amd/handlebars/helpers/each.js +40 -14
  454. package/node_modules/handlebars/dist/amd/handlebars/internal/proto-access.js +21 -1
  455. package/node_modules/handlebars/dist/amd/handlebars/runtime.js +24 -4
  456. package/node_modules/handlebars/dist/amd/handlebars/utils.js +4 -3
  457. package/node_modules/handlebars/dist/amd/precompiler.js +13 -7
  458. package/node_modules/handlebars/dist/cjs/handlebars/base.js +2 -2
  459. package/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js +1 -60
  460. package/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js +64 -4
  461. package/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js +161 -18
  462. package/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js +23 -7
  463. package/node_modules/handlebars/dist/cjs/handlebars/compiler/node-types.js +10 -0
  464. package/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js +29 -6
  465. package/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js +9 -4
  466. package/node_modules/handlebars/dist/cjs/handlebars/exception.js +8 -4
  467. package/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js +40 -14
  468. package/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js +21 -1
  469. package/node_modules/handlebars/dist/cjs/handlebars/runtime.js +24 -4
  470. package/node_modules/handlebars/dist/cjs/handlebars/utils.js +4 -3
  471. package/node_modules/handlebars/dist/cjs/precompiler.js +14 -6
  472. package/node_modules/handlebars/dist/handlebars.amd.js +401 -130
  473. package/node_modules/handlebars/dist/handlebars.amd.min.js +4 -4
  474. package/node_modules/handlebars/dist/handlebars.js +396 -125
  475. package/node_modules/handlebars/dist/handlebars.min.js +4 -4
  476. package/node_modules/handlebars/dist/handlebars.runtime.amd.js +100 -29
  477. package/node_modules/handlebars/dist/handlebars.runtime.amd.min.js +2 -2
  478. package/node_modules/handlebars/dist/handlebars.runtime.js +94 -23
  479. package/node_modules/handlebars/dist/handlebars.runtime.min.js +2 -2
  480. package/node_modules/handlebars/lib/handlebars/base.js +1 -1
  481. package/node_modules/handlebars/lib/handlebars/compiler/base.js +0 -67
  482. package/node_modules/handlebars/lib/handlebars/compiler/code-gen.js +65 -11
  483. package/node_modules/handlebars/lib/handlebars/compiler/compiler.js +164 -23
  484. package/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js +23 -7
  485. package/node_modules/handlebars/lib/handlebars/compiler/node-types.js +24 -0
  486. package/node_modules/handlebars/lib/handlebars/compiler/visitor.js +29 -5
  487. package/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js +16 -5
  488. package/node_modules/handlebars/lib/handlebars/exception.js +7 -3
  489. package/node_modules/handlebars/lib/handlebars/helpers/each.js +39 -16
  490. package/node_modules/handlebars/lib/handlebars/internal/proto-access.js +22 -0
  491. package/node_modules/handlebars/lib/handlebars/runtime.js +36 -4
  492. package/node_modules/handlebars/lib/handlebars/utils.js +3 -2
  493. package/node_modules/handlebars/lib/precompiler.js +14 -5
  494. package/node_modules/handlebars/package.json +2 -2
  495. package/node_modules/handlebars/release-notes.md +20 -1
  496. package/node_modules/handlebars/types/index.d.ts +8 -0
  497. package/node_modules/hdb/cfg/VERSION +1 -1
  498. package/node_modules/hdb/lib/Client.js +6 -2
  499. package/node_modules/hdb/lib/protocol/ClientInfo.js +28 -15
  500. package/node_modules/hdb/lib/protocol/Connection.js +30 -3
  501. package/node_modules/hdb/lib/protocol/Writer.js +2 -2
  502. package/node_modules/hdb/lib/protocol/common/ConnectOption.js +2 -0
  503. package/node_modules/hdb/lib/protocol/common/ConnectOptionFlagSet1.js +18 -0
  504. package/node_modules/hdb/lib/protocol/common/ConnectOptionType.js +2 -0
  505. package/node_modules/hdb/lib/protocol/common/Constants.js +1 -0
  506. package/node_modules/hdb/lib/protocol/common/MessageType.js +3 -2
  507. package/node_modules/hdb/lib/protocol/common/PartKind.js +2 -1
  508. package/node_modules/hdb/lib/protocol/common/index.js +1 -0
  509. package/node_modules/hdb/lib/protocol/data/TextList.js +25 -17
  510. package/node_modules/hdb/lib/protocol/data/index.js +1 -0
  511. package/node_modules/hdb/lib/protocol/part/ConnectOptions.js +7 -0
  512. package/node_modules/hdb/lib/protocol/request/index.js +7 -0
  513. package/node_modules/hdb/package.json +1 -2
  514. package/node_modules/livereload-js/.github/workflows/main.yml +4 -4
  515. package/node_modules/livereload-js/README.md +3 -3
  516. package/node_modules/livereload-js/dist/livereload.js +839 -2742
  517. package/node_modules/livereload-js/dist/livereload.min.js +1 -1
  518. package/node_modules/livereload-js/package.json +11 -11
  519. package/node_modules/minipass/LICENSE.md +55 -0
  520. package/node_modules/minipass/README.md +825 -0
  521. package/node_modules/minipass/dist/commonjs/index.d.ts +545 -0
  522. package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
  523. package/node_modules/minipass/dist/commonjs/index.js +1038 -0
  524. package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
  525. package/node_modules/minipass/dist/commonjs/package.json +3 -0
  526. package/node_modules/minipass/dist/esm/index.d.ts +545 -0
  527. package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
  528. package/node_modules/minipass/dist/esm/index.js +1020 -0
  529. package/node_modules/minipass/dist/esm/index.js.map +1 -0
  530. package/node_modules/minipass/dist/esm/package.json +3 -0
  531. package/node_modules/minipass/package.json +77 -0
  532. package/node_modules/minizlib/LICENSE +26 -0
  533. package/node_modules/minizlib/README.md +64 -0
  534. package/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
  535. package/node_modules/minizlib/dist/commonjs/constants.d.ts.map +1 -0
  536. package/node_modules/minizlib/dist/commonjs/constants.js +123 -0
  537. package/node_modules/minizlib/dist/commonjs/constants.js.map +1 -0
  538. package/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
  539. package/node_modules/minizlib/dist/commonjs/index.d.ts.map +1 -0
  540. package/node_modules/minizlib/dist/commonjs/index.js +416 -0
  541. package/node_modules/minizlib/dist/commonjs/index.js.map +1 -0
  542. package/node_modules/minizlib/dist/commonjs/package.json +3 -0
  543. package/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
  544. package/node_modules/minizlib/dist/esm/constants.d.ts.map +1 -0
  545. package/node_modules/minizlib/dist/esm/constants.js +117 -0
  546. package/node_modules/minizlib/dist/esm/constants.js.map +1 -0
  547. package/node_modules/minizlib/dist/esm/index.d.ts +99 -0
  548. package/node_modules/minizlib/dist/esm/index.d.ts.map +1 -0
  549. package/node_modules/minizlib/dist/esm/index.js +363 -0
  550. package/node_modules/minizlib/dist/esm/index.js.map +1 -0
  551. package/node_modules/minizlib/dist/esm/package.json +3 -0
  552. package/node_modules/minizlib/package.json +80 -0
  553. package/node_modules/proxy-addr/HISTORY.md +60 -54
  554. package/node_modules/proxy-addr/README.md +1 -1
  555. package/node_modules/proxy-addr/index.js +32 -0
  556. package/node_modules/proxy-addr/package.json +8 -4
  557. package/node_modules/qs/.github/THREAT_MODEL.md +4 -2
  558. package/node_modules/qs/CHANGELOG.md +38 -14
  559. package/node_modules/qs/README.md +31 -3
  560. package/node_modules/qs/dist/qs.js +20 -20
  561. package/node_modules/qs/lib/parse.js +94 -4
  562. package/node_modules/qs/lib/stringify.js +4 -4
  563. package/node_modules/qs/lib/utils.js +130 -6
  564. package/node_modules/qs/package.json +4 -4
  565. package/node_modules/qs/test/parse.js +174 -0
  566. package/node_modules/qs/test/stringify.js +263 -33
  567. package/node_modules/qs/test/utils.js +184 -0
  568. package/node_modules/tar/LICENSE.md +55 -0
  569. package/node_modules/tar/README.md +1233 -0
  570. package/node_modules/tar/dist/commonjs/create.d.ts +3 -0
  571. package/node_modules/tar/dist/commonjs/create.d.ts.map +1 -0
  572. package/node_modules/tar/dist/commonjs/create.js +82 -0
  573. package/node_modules/tar/dist/commonjs/create.js.map +1 -0
  574. package/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
  575. package/node_modules/tar/dist/commonjs/cwd-error.d.ts.map +1 -0
  576. package/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
  577. package/node_modules/tar/dist/commonjs/cwd-error.js.map +1 -0
  578. package/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
  579. package/node_modules/tar/dist/commonjs/extract.d.ts.map +1 -0
  580. package/node_modules/tar/dist/commonjs/extract.js +88 -0
  581. package/node_modules/tar/dist/commonjs/extract.js.map +1 -0
  582. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
  583. package/node_modules/tar/dist/commonjs/get-write-flag.d.ts.map +1 -0
  584. package/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
  585. package/node_modules/tar/dist/commonjs/get-write-flag.js.map +1 -0
  586. package/node_modules/tar/dist/commonjs/header.d.ts +53 -0
  587. package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -0
  588. package/node_modules/tar/dist/commonjs/header.js +348 -0
  589. package/node_modules/tar/dist/commonjs/header.js.map +1 -0
  590. package/node_modules/tar/dist/commonjs/index.d.ts +20 -0
  591. package/node_modules/tar/dist/commonjs/index.d.ts.map +1 -0
  592. package/node_modules/tar/dist/commonjs/index.js +64 -0
  593. package/node_modules/tar/dist/commonjs/index.js.map +1 -0
  594. package/node_modules/tar/dist/commonjs/index.min.js +4 -0
  595. package/node_modules/tar/dist/commonjs/index.min.js.map +7 -0
  596. package/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
  597. package/node_modules/tar/dist/commonjs/large-numbers.d.ts.map +1 -0
  598. package/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
  599. package/node_modules/tar/dist/commonjs/large-numbers.js.map +1 -0
  600. package/node_modules/tar/dist/commonjs/list.d.ts +7 -0
  601. package/node_modules/tar/dist/commonjs/list.d.ts.map +1 -0
  602. package/node_modules/tar/dist/commonjs/list.js +153 -0
  603. package/node_modules/tar/dist/commonjs/list.js.map +1 -0
  604. package/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
  605. package/node_modules/tar/dist/commonjs/make-command.d.ts.map +1 -0
  606. package/node_modules/tar/dist/commonjs/make-command.js +52 -0
  607. package/node_modules/tar/dist/commonjs/make-command.js.map +1 -0
  608. package/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
  609. package/node_modules/tar/dist/commonjs/mkdir.d.ts.map +1 -0
  610. package/node_modules/tar/dist/commonjs/mkdir.js +187 -0
  611. package/node_modules/tar/dist/commonjs/mkdir.js.map +1 -0
  612. package/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
  613. package/node_modules/tar/dist/commonjs/mode-fix.d.ts.map +1 -0
  614. package/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
  615. package/node_modules/tar/dist/commonjs/mode-fix.js.map +1 -0
  616. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
  617. package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts.map +1 -0
  618. package/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
  619. package/node_modules/tar/dist/commonjs/normalize-unicode.js.map +1 -0
  620. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
  621. package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts.map +1 -0
  622. package/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
  623. package/node_modules/tar/dist/commonjs/normalize-windows-path.js.map +1 -0
  624. package/node_modules/tar/dist/commonjs/options.d.ts +604 -0
  625. package/node_modules/tar/dist/commonjs/options.d.ts.map +1 -0
  626. package/node_modules/tar/dist/commonjs/options.js +66 -0
  627. package/node_modules/tar/dist/commonjs/options.js.map +1 -0
  628. package/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
  629. package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -0
  630. package/node_modules/tar/dist/commonjs/pack.js +544 -0
  631. package/node_modules/tar/dist/commonjs/pack.js.map +1 -0
  632. package/node_modules/tar/dist/commonjs/package.json +3 -0
  633. package/node_modules/tar/dist/commonjs/parse.d.ts +92 -0
  634. package/node_modules/tar/dist/commonjs/parse.d.ts.map +1 -0
  635. package/node_modules/tar/dist/commonjs/parse.js +655 -0
  636. package/node_modules/tar/dist/commonjs/parse.js.map +1 -0
  637. package/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
  638. package/node_modules/tar/dist/commonjs/path-reservations.d.ts.map +1 -0
  639. package/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
  640. package/node_modules/tar/dist/commonjs/path-reservations.js.map +1 -0
  641. package/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
  642. package/node_modules/tar/dist/commonjs/pax.d.ts.map +1 -0
  643. package/node_modules/tar/dist/commonjs/pax.js +182 -0
  644. package/node_modules/tar/dist/commonjs/pax.js.map +1 -0
  645. package/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
  646. package/node_modules/tar/dist/commonjs/process-umask.d.ts.map +1 -0
  647. package/node_modules/tar/dist/commonjs/process-umask.js +7 -0
  648. package/node_modules/tar/dist/commonjs/process-umask.js.map +1 -0
  649. package/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
  650. package/node_modules/tar/dist/commonjs/read-entry.d.ts.map +1 -0
  651. package/node_modules/tar/dist/commonjs/read-entry.js +136 -0
  652. package/node_modules/tar/dist/commonjs/read-entry.js.map +1 -0
  653. package/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
  654. package/node_modules/tar/dist/commonjs/replace.d.ts.map +1 -0
  655. package/node_modules/tar/dist/commonjs/replace.js +227 -0
  656. package/node_modules/tar/dist/commonjs/replace.js.map +1 -0
  657. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
  658. package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts.map +1 -0
  659. package/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
  660. package/node_modules/tar/dist/commonjs/strip-absolute-path.js.map +1 -0
  661. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
  662. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts.map +1 -0
  663. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
  664. package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js.map +1 -0
  665. package/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
  666. package/node_modules/tar/dist/commonjs/symlink-error.d.ts.map +1 -0
  667. package/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
  668. package/node_modules/tar/dist/commonjs/symlink-error.js.map +1 -0
  669. package/node_modules/tar/dist/commonjs/types.d.ts +16 -0
  670. package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -0
  671. package/node_modules/tar/dist/commonjs/types.js +70 -0
  672. package/node_modules/tar/dist/commonjs/types.js.map +1 -0
  673. package/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
  674. package/node_modules/tar/dist/commonjs/unpack.d.ts.map +1 -0
  675. package/node_modules/tar/dist/commonjs/unpack.js +932 -0
  676. package/node_modules/tar/dist/commonjs/unpack.js.map +1 -0
  677. package/node_modules/tar/dist/commonjs/update.d.ts +2 -0
  678. package/node_modules/tar/dist/commonjs/update.d.ts.map +1 -0
  679. package/node_modules/tar/dist/commonjs/update.js +33 -0
  680. package/node_modules/tar/dist/commonjs/update.js.map +1 -0
  681. package/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
  682. package/node_modules/tar/dist/commonjs/warn-method.d.ts.map +1 -0
  683. package/node_modules/tar/dist/commonjs/warn-method.js +31 -0
  684. package/node_modules/tar/dist/commonjs/warn-method.js.map +1 -0
  685. package/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
  686. package/node_modules/tar/dist/commonjs/winchars.d.ts.map +1 -0
  687. package/node_modules/tar/dist/commonjs/winchars.js +14 -0
  688. package/node_modules/tar/dist/commonjs/winchars.js.map +1 -0
  689. package/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
  690. package/node_modules/tar/dist/commonjs/write-entry.d.ts.map +1 -0
  691. package/node_modules/tar/dist/commonjs/write-entry.js +698 -0
  692. package/node_modules/tar/dist/commonjs/write-entry.js.map +1 -0
  693. package/node_modules/tar/dist/esm/create.d.ts +3 -0
  694. package/node_modules/tar/dist/esm/create.d.ts.map +1 -0
  695. package/node_modules/tar/dist/esm/create.js +76 -0
  696. package/node_modules/tar/dist/esm/create.js.map +1 -0
  697. package/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
  698. package/node_modules/tar/dist/esm/cwd-error.d.ts.map +1 -0
  699. package/node_modules/tar/dist/esm/cwd-error.js +14 -0
  700. package/node_modules/tar/dist/esm/cwd-error.js.map +1 -0
  701. package/node_modules/tar/dist/esm/extract.d.ts +3 -0
  702. package/node_modules/tar/dist/esm/extract.d.ts.map +1 -0
  703. package/node_modules/tar/dist/esm/extract.js +49 -0
  704. package/node_modules/tar/dist/esm/extract.js.map +1 -0
  705. package/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
  706. package/node_modules/tar/dist/esm/get-write-flag.d.ts.map +1 -0
  707. package/node_modules/tar/dist/esm/get-write-flag.js +26 -0
  708. package/node_modules/tar/dist/esm/get-write-flag.js.map +1 -0
  709. package/node_modules/tar/dist/esm/header.d.ts +53 -0
  710. package/node_modules/tar/dist/esm/header.d.ts.map +1 -0
  711. package/node_modules/tar/dist/esm/header.js +311 -0
  712. package/node_modules/tar/dist/esm/header.js.map +1 -0
  713. package/node_modules/tar/dist/esm/index.d.ts +20 -0
  714. package/node_modules/tar/dist/esm/index.d.ts.map +1 -0
  715. package/node_modules/tar/dist/esm/index.js +20 -0
  716. package/node_modules/tar/dist/esm/index.js.map +1 -0
  717. package/node_modules/tar/dist/esm/index.min.js +4 -0
  718. package/node_modules/tar/dist/esm/index.min.js.map +7 -0
  719. package/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
  720. package/node_modules/tar/dist/esm/large-numbers.d.ts.map +1 -0
  721. package/node_modules/tar/dist/esm/large-numbers.js +94 -0
  722. package/node_modules/tar/dist/esm/large-numbers.js.map +1 -0
  723. package/node_modules/tar/dist/esm/list.d.ts +7 -0
  724. package/node_modules/tar/dist/esm/list.d.ts.map +1 -0
  725. package/node_modules/tar/dist/esm/list.js +113 -0
  726. package/node_modules/tar/dist/esm/list.js.map +1 -0
  727. package/node_modules/tar/dist/esm/make-command.d.ts +49 -0
  728. package/node_modules/tar/dist/esm/make-command.d.ts.map +1 -0
  729. package/node_modules/tar/dist/esm/make-command.js +48 -0
  730. package/node_modules/tar/dist/esm/make-command.js.map +1 -0
  731. package/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
  732. package/node_modules/tar/dist/esm/mkdir.d.ts.map +1 -0
  733. package/node_modules/tar/dist/esm/mkdir.js +179 -0
  734. package/node_modules/tar/dist/esm/mkdir.js.map +1 -0
  735. package/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
  736. package/node_modules/tar/dist/esm/mode-fix.d.ts.map +1 -0
  737. package/node_modules/tar/dist/esm/mode-fix.js +25 -0
  738. package/node_modules/tar/dist/esm/mode-fix.js.map +1 -0
  739. package/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
  740. package/node_modules/tar/dist/esm/normalize-unicode.d.ts.map +1 -0
  741. package/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
  742. package/node_modules/tar/dist/esm/normalize-unicode.js.map +1 -0
  743. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
  744. package/node_modules/tar/dist/esm/normalize-windows-path.d.ts.map +1 -0
  745. package/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
  746. package/node_modules/tar/dist/esm/normalize-windows-path.js.map +1 -0
  747. package/node_modules/tar/dist/esm/options.d.ts +604 -0
  748. package/node_modules/tar/dist/esm/options.d.ts.map +1 -0
  749. package/node_modules/tar/dist/esm/options.js +54 -0
  750. package/node_modules/tar/dist/esm/options.js.map +1 -0
  751. package/node_modules/tar/dist/esm/pack.d.ts +105 -0
  752. package/node_modules/tar/dist/esm/pack.d.ts.map +1 -0
  753. package/node_modules/tar/dist/esm/pack.js +502 -0
  754. package/node_modules/tar/dist/esm/pack.js.map +1 -0
  755. package/node_modules/tar/dist/esm/package.json +3 -0
  756. package/node_modules/tar/dist/esm/parse.d.ts +92 -0
  757. package/node_modules/tar/dist/esm/parse.d.ts.map +1 -0
  758. package/node_modules/tar/dist/esm/parse.js +651 -0
  759. package/node_modules/tar/dist/esm/parse.js.map +1 -0
  760. package/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
  761. package/node_modules/tar/dist/esm/path-reservations.d.ts.map +1 -0
  762. package/node_modules/tar/dist/esm/path-reservations.js +166 -0
  763. package/node_modules/tar/dist/esm/path-reservations.js.map +1 -0
  764. package/node_modules/tar/dist/esm/pax.d.ts +26 -0
  765. package/node_modules/tar/dist/esm/pax.d.ts.map +1 -0
  766. package/node_modules/tar/dist/esm/pax.js +178 -0
  767. package/node_modules/tar/dist/esm/pax.js.map +1 -0
  768. package/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
  769. package/node_modules/tar/dist/esm/process-umask.d.ts.map +1 -0
  770. package/node_modules/tar/dist/esm/process-umask.js +3 -0
  771. package/node_modules/tar/dist/esm/process-umask.js.map +1 -0
  772. package/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
  773. package/node_modules/tar/dist/esm/read-entry.d.ts.map +1 -0
  774. package/node_modules/tar/dist/esm/read-entry.js +132 -0
  775. package/node_modules/tar/dist/esm/read-entry.js.map +1 -0
  776. package/node_modules/tar/dist/esm/replace.d.ts +2 -0
  777. package/node_modules/tar/dist/esm/replace.d.ts.map +1 -0
  778. package/node_modules/tar/dist/esm/replace.js +221 -0
  779. package/node_modules/tar/dist/esm/replace.js.map +1 -0
  780. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
  781. package/node_modules/tar/dist/esm/strip-absolute-path.d.ts.map +1 -0
  782. package/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
  783. package/node_modules/tar/dist/esm/strip-absolute-path.js.map +1 -0
  784. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
  785. package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts.map +1 -0
  786. package/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
  787. package/node_modules/tar/dist/esm/strip-trailing-slashes.js.map +1 -0
  788. package/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
  789. package/node_modules/tar/dist/esm/symlink-error.d.ts.map +1 -0
  790. package/node_modules/tar/dist/esm/symlink-error.js +15 -0
  791. package/node_modules/tar/dist/esm/symlink-error.js.map +1 -0
  792. package/node_modules/tar/dist/esm/types.d.ts +16 -0
  793. package/node_modules/tar/dist/esm/types.d.ts.map +1 -0
  794. package/node_modules/tar/dist/esm/types.js +65 -0
  795. package/node_modules/tar/dist/esm/types.js.map +1 -0
  796. package/node_modules/tar/dist/esm/unpack.d.ts +101 -0
  797. package/node_modules/tar/dist/esm/unpack.d.ts.map +1 -0
  798. package/node_modules/tar/dist/esm/unpack.js +891 -0
  799. package/node_modules/tar/dist/esm/unpack.js.map +1 -0
  800. package/node_modules/tar/dist/esm/update.d.ts +2 -0
  801. package/node_modules/tar/dist/esm/update.d.ts.map +1 -0
  802. package/node_modules/tar/dist/esm/update.js +30 -0
  803. package/node_modules/tar/dist/esm/update.js.map +1 -0
  804. package/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
  805. package/node_modules/tar/dist/esm/warn-method.d.ts.map +1 -0
  806. package/node_modules/tar/dist/esm/warn-method.js +27 -0
  807. package/node_modules/tar/dist/esm/warn-method.js.map +1 -0
  808. package/node_modules/tar/dist/esm/winchars.d.ts +3 -0
  809. package/node_modules/tar/dist/esm/winchars.d.ts.map +1 -0
  810. package/node_modules/tar/dist/esm/winchars.js +9 -0
  811. package/node_modules/tar/dist/esm/winchars.js.map +1 -0
  812. package/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
  813. package/node_modules/tar/dist/esm/write-entry.d.ts.map +1 -0
  814. package/node_modules/tar/dist/esm/write-entry.js +656 -0
  815. package/node_modules/tar/dist/esm/write-entry.js.map +1 -0
  816. package/node_modules/tar/package.json +298 -0
  817. package/node_modules/ws/lib/websocket.js +17 -3
  818. package/node_modules/ws/package.json +1 -1
  819. package/node_modules/yallist/LICENSE.md +63 -0
  820. package/node_modules/yallist/README.md +205 -0
  821. package/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
  822. package/node_modules/yallist/dist/commonjs/index.d.ts.map +1 -0
  823. package/node_modules/yallist/dist/commonjs/index.js +384 -0
  824. package/node_modules/yallist/dist/commonjs/index.js.map +1 -0
  825. package/node_modules/yallist/dist/commonjs/package.json +3 -0
  826. package/node_modules/yallist/dist/esm/index.d.ts +39 -0
  827. package/node_modules/yallist/dist/esm/index.d.ts.map +1 -0
  828. package/node_modules/yallist/dist/esm/index.js +379 -0
  829. package/node_modules/yallist/dist/esm/index.js.map +1 -0
  830. package/node_modules/yallist/dist/esm/package.json +3 -0
  831. package/node_modules/yallist/package.json +68 -0
  832. package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +19 -18
  833. package/node_modules/yaml/browser/dist/nodes/Alias.js +25 -23
  834. package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +19 -18
  835. package/node_modules/yaml/dist/nodes/Alias.js +25 -23
  836. package/node_modules/yaml/package.json +1 -1
  837. package/package.json +7 -1
  838. package/bin/completion/templates/cds-tmpl.fish +0 -65
  839. package/bin/completion/templates/cds-tmpl.ps1 +0 -217
  840. package/bin/completion/templates/cds-tmpl.sh +0 -93
  841. package/bin/completion/templates/cds-tmpl.zsh +0 -74
  842. package/node_modules/@cap-js/db-service/lib/recursion-guard.js +0 -40
  843. package/node_modules/@sap/cds/lib/env/cds-requires.js +0 -326
  844. package/node_modules/@sap/cds-mtxs/srv/bootstrap.cds +0 -2
  845. package/node_modules/@sap/cds-mtxs/srv/bootstrap.js +0 -33
  846. package/node_modules/body-parser/node_modules/content-type/LICENSE +0 -22
  847. package/node_modules/body-parser/node_modules/content-type/README.md +0 -71
  848. package/node_modules/body-parser/node_modules/content-type/package.json +0 -52
  849. package/node_modules/content-disposition/index.js +0 -536
  850. package/node_modules/content-type/HISTORY.md +0 -29
  851. package/node_modules/content-type/index.js +0 -225
  852. package/node_modules/negotiator/node_modules/content-type/LICENSE +0 -22
  853. package/node_modules/negotiator/node_modules/content-type/README.md +0 -71
  854. package/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +0 -46
  855. package/node_modules/negotiator/node_modules/content-type/dist/index.js +0 -176
  856. package/node_modules/negotiator/node_modules/content-type/dist/index.js.map +0 -1
  857. package/node_modules/negotiator/node_modules/content-type/package.json +0 -52
  858. package/node_modules/type-is/node_modules/content-type/LICENSE +0 -22
  859. package/node_modules/type-is/node_modules/content-type/README.md +0 -71
  860. package/node_modules/type-is/node_modules/content-type/dist/index.d.ts +0 -46
  861. package/node_modules/type-is/node_modules/content-type/dist/index.js +0 -176
  862. package/node_modules/type-is/node_modules/content-type/dist/index.js.map +0 -1
  863. package/node_modules/type-is/node_modules/content-type/package.json +0 -52
  864. /package/lib/init/template/react/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
  865. /package/lib/init/template/vue/files/src/{main.js → main.{{extension}}.hbs} +0 -0
  866. /package/lib/init/template/vue/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
  867. /package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/utilities.js +0 -0
  868. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.d.ts +0 -0
  869. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js +0 -0
  870. /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js.map +0 -0
@@ -66,9 +66,11 @@ const _createODataRequestConfig = (query, data, target, srvKind) => {
66
66
  url: encodeURI(_formatPath(cleanQuery.substring(blankIndex, cleanQuery.length).trim()))
67
67
  }
68
68
 
69
- if (data && requestConfig.method !== 'GET' && requestConfig.method !== 'HEAD') {
70
- requestConfig.data = srvKind === 'odata-v2' ? Object.assign({}, convertV2PayloadData(data, target)) : data
71
- }
69
+ if (!data || requestConfig.method === 'GET' || requestConfig.method === 'HEAD') return requestConfig
70
+
71
+ if (srvKind === 'odata-v2' && !(data instanceof Readable) && !(data instanceof Buffer))
72
+ requestConfig.data = convertV2PayloadData(data, target)
73
+ else requestConfig.data = data
72
74
 
73
75
  return requestConfig
74
76
  }
@@ -88,9 +90,12 @@ const _pathToRequestConfig = (method, path, data, target, srvName, srvKind) => {
88
90
  }
89
91
 
90
92
  const requestConfig = { method, url }
91
- if (data && requestConfig.method !== 'GET' && requestConfig.method !== 'HEAD') {
92
- requestConfig.data = srvKind === 'odata-v2' ? Object.assign({}, convertV2PayloadData(data, target)) : data
93
- }
93
+
94
+ if (!data || requestConfig.method === 'GET' || requestConfig.method === 'HEAD') return requestConfig
95
+
96
+ if (srvKind === 'odata-v2' && !(data instanceof Readable) && !(data instanceof Buffer))
97
+ requestConfig.data = convertV2PayloadData(data, target)
98
+ else requestConfig.data = data
94
99
 
95
100
  return requestConfig
96
101
  }
@@ -8,14 +8,16 @@ module.exports = (target, srv, result, keys_as_segments) => {
8
8
 
9
9
  const keyValuePairs = filteredKeys.reduce((acc, key) => {
10
10
  const value = result[key]
11
- if (result[key] === undefined) return acc
12
11
 
13
12
  if (Buffer.isBuffer(value)) {
14
- acc[key] = value.toString('base64')
13
+ const base64 = value.toString('base64')
14
+ acc[key] = keys_as_segments ? base64 : `binary'${base64}'`
15
+ } else if (keys_as_segments) {
16
+ acc[key] = value
15
17
  } else {
16
- const _type = target.elements[key]._type
17
- if (!keys_as_segments && typeof value === 'string' && _type !== 'cds.UUID') acc[key] = `'${value}'`
18
- else acc[key] = value
18
+ const el = target.elements[key]
19
+ const needsQuotes = typeof value === 'string' && (el._type !== 'cds.UUID' || el['@odata.Type'] === 'Edm.String')
20
+ acc[key] = needsQuotes ? `'${value}'` : value
19
21
  }
20
22
 
21
23
  return acc
@@ -24,19 +26,16 @@ module.exports = (target, srv, result, keys_as_segments) => {
24
26
  if (keys_as_segments) {
25
27
  let location = targetName
26
28
  for (const k in keyValuePairs) location += `/${keyValuePairs[k]}`
27
- return location
29
+ return encodeURI(location)
28
30
  }
29
31
 
30
32
  let keys
31
33
  const entries = Object.entries(keyValuePairs)
32
34
  if (entries.length === 1) {
33
35
  keys = entries[0][1]
34
- if (target.elements[entries[0][0]]['@odata.Type'] === 'Edm.String') keys = `'${keys}'`
35
36
  } else {
36
- keys = entries
37
- .map(([key, value]) => `${key}=${target.elements[key]['@odata.Type'] === 'Edm.String' ? `'${value}'` : value}`)
38
- .join(',')
37
+ keys = entries.map(([key, value]) => `${key}=${value}`).join(',')
39
38
  }
40
39
 
41
- return `${targetName}(${keys})`
40
+ return encodeURI(`${targetName}(${keys})`)
42
41
  }
@@ -2,6 +2,7 @@ const cds = require('../../../')
2
2
  const { INSERT } = cds.ql
3
3
 
4
4
  const { getPreferReturnHeader } = require('../utils')
5
+ const handle_ieee754 = require('../utils/ieee754')
5
6
  const getODataMetadata = require('../utils/metadata')
6
7
  const postProcess = require('../utils/postProcess')
7
8
  const readAfterWrite4 = require('../utils/readAfterWrite')
@@ -102,6 +103,9 @@ module.exports = (adapter, isUpsert) => {
102
103
 
103
104
  const metadata = getODataMetadata(query, { result })
104
105
  result = getODataResult(result, metadata)
106
+
107
+ handle_ieee754(req, result)
108
+
105
109
  res.status(201).send(result)
106
110
  })
107
111
  .catch(err => {
@@ -102,7 +102,7 @@ module.exports = adapter => {
102
102
  edmx = await mps.getEdmx({ tenant, model, service: service.definition.name })
103
103
  metadataCache.edm = edmx
104
104
  }
105
- const extBundle = await mps.getI18n({ tenant, locale })
105
+ const extBundle = cds.requires.extensibility && (await mps.getI18n({ tenant, locale }))
106
106
  edmx = cds.localize(service.model, locale, edmx, extBundle)
107
107
  metadataCache.xmlEtag[locale] = generateEtag(edmx)
108
108
  res.set('ETag', metadataCache.xmlEtag[locale])
@@ -2,6 +2,7 @@ const cds = require('../../../')
2
2
 
3
3
  const { pipeline } = require('node:stream/promises')
4
4
 
5
+ const handle_ieee754 = require('../utils/ieee754')
5
6
  const getODataMetadata = require('../utils/metadata')
6
7
  const postProcess = require('../utils/postProcess')
7
8
  const getODataResult = require('../utils/result')
@@ -181,6 +182,8 @@ module.exports = adapter => {
181
182
  const metadata = getODataMetadata({ SELECT, _target }, options)
182
183
  result = getODataResult(result, metadata, { isCollection })
183
184
 
185
+ handle_ieee754(req, result)
186
+
184
187
  res.send(result)
185
188
  })
186
189
  .catch(err => {
@@ -3,6 +3,12 @@ const odata = require('../index')
3
3
  const bodyParser4 = require('../../http/body-parser')
4
4
  const { isStream } = require('../utils')
5
5
 
6
+ let reject_ieee754_false = req => {
7
+ if (/IEEE754Compatible\s*=\s*false/i.test(req.headers?.accept || ''))
8
+ cds.error({ status: 406, message: 'IEEE754Compatible=false is not supported' })
9
+ }
10
+ if (cds.env.odata.ieee754compatible === false) reject_ieee754_false = () => {}
11
+
6
12
  /**
7
13
  * @param {import('../ODataAdapter')} adapter
8
14
  * the adapter instance in which this middleware is used
@@ -44,6 +50,9 @@ module.exports = adapter => {
44
50
  else break
45
51
  else throw cds.error(415)
46
52
  }
53
+
54
+ reject_ieee754_false(req)
55
+
47
56
  return bodyParser(req, res, next)
48
57
  }
49
58
  }
@@ -3,6 +3,7 @@ const cds = require('../../../')
3
3
  const querystring = require('node:querystring')
4
4
 
5
5
  const { validateIfNoneMatch, getPreferReturnHeader } = require('../utils')
6
+ const handle_ieee754 = require('../utils/ieee754')
6
7
  const getODataMetadata = require('../utils/metadata')
7
8
  const postProcess = require('../utils/postProcess')
8
9
  const getODataResult = require('../utils/result')
@@ -126,7 +127,7 @@ const _isNullableSingleton = query => query._target._isSingleton && query._targe
126
127
  const _isToOneAssoc = query =>
127
128
  query.SELECT.from.ref.length > 1 && typeof query.SELECT.from.ref.slice(-1)[0] === 'string'
128
129
 
129
- const _getCountFromResult = result => (Array.isArray(result) ? (result[0].$count ?? 0) : (result.$count ?? 0))
130
+ const _getCountFromResult = result => (Array.isArray(result) ? (result[0]?.$count ?? 0) : (result?.$count ?? 0))
130
131
 
131
132
  const _getCountFromResultForArrayOfQueries = result => {
132
133
  if (!Array.isArray(result)) return result.$count ?? 0
@@ -190,6 +191,9 @@ const _handleArrayOfQueriesFactory = adapter => {
190
191
  { context: mainOdataContext },
191
192
  { isCollection: !req._query[0].SELECT.one, property: req._query[0]._propertyAccess }
192
193
  )
194
+
195
+ handle_ieee754(req, result)
196
+
193
197
  res.send(result)
194
198
  })
195
199
  .catch(err => {
@@ -300,6 +304,8 @@ module.exports = adapter => {
300
304
 
301
305
  if (!result) cds.error(404)
302
306
 
307
+ handle_ieee754(req, result)
308
+
303
309
  res.send(result)
304
310
  })
305
311
  .catch(err => {
@@ -2,6 +2,7 @@ const cds = require('../../../')
2
2
  const { UPDATE } = cds.ql
3
3
 
4
4
  const { getPreferReturnHeader, isStream } = require('../utils')
5
+ const handle_ieee754 = require('../utils/ieee754')
5
6
  const getODataMetadata = require('../utils/metadata')
6
7
  const postProcess = require('../utils/postProcess')
7
8
  const readAfterWrite4 = require('../utils/readAfterWrite')
@@ -101,7 +102,7 @@ module.exports = adapter => {
101
102
  }
102
103
 
103
104
  // query
104
- const query = UPDATE.entity(from).with(data)
105
+ const query = UPDATE.entity(from).data(data)
105
106
 
106
107
  // cdsReq.headers should contain merged headers of envelope and subreq
107
108
  // REVISIT: this overrides the merging mechanism in cds.Request which is meant to handle this centrally !!
@@ -149,6 +150,9 @@ module.exports = adapter => {
149
150
 
150
151
  const metadata = getODataMetadata(_propertyAccess ? req._query : query, { result })
151
152
  result = getODataResult(result, metadata, { property: _propertyAccess })
153
+
154
+ handle_ieee754(req, result)
155
+
152
156
  res.send(result)
153
157
  })
154
158
  .catch(err => {
@@ -1037,13 +1037,13 @@ module.exports = (cqn, model, namespace, protocol) => {
1037
1037
  // target <=> endpoint entity, all navigation refs must be resolvable accordingly
1038
1038
  if (cds.env.effective.odata.structs) _resolveAliasesInNavigation(cqn, target)
1039
1039
 
1040
- // Add default aggregation function (and alias)
1041
- _processColumns(cqn, current, protocol)
1042
-
1043
1040
  if (target && !returns_target) {
1044
1041
  // validate whether only known properties are used in query options
1045
1042
  _validateQuery(cqn.SELECT, target, model)
1046
1043
  }
1047
1044
 
1045
+ // Add default aggregation function (and alias)
1046
+ _processColumns(cqn, current, protocol)
1047
+
1048
1048
  return cqn
1049
1049
  }
@@ -117,7 +117,7 @@ const _parseStream = async function* (body, boundary) {
117
117
  .toString()
118
118
  .replace(/^--(.*)$/gm, (_, g) => `HEAD /${g} HTTP/1.1${g.slice(-2) === '--' ? CRLF : ''}`)
119
119
  // correct content-length for non-HEAD requests is inserted below
120
- .replace(/content-length: \d+\r\n/gim, '') // if content-length is given it should be taken
120
+ .replace(/content-length:[ \t]*\d+\r\n/gim, '') // if content-length is given it should be taken
121
121
  .replaceAll(/^(?:(GET|PUT|POST|PATCH|DELETE)).*(?:\r?\n(?!\r?\n).*)*/gim, block => {
122
122
  return block.replaceAll(/ \$/g, ' /$')
123
123
  })
@@ -0,0 +1,20 @@
1
+ const cds = require('../../../lib')
2
+
3
+ // Does the bound db serialize Int64/Decimal as strings? sqlite/postgres only under
4
+ // features.ieee754compatible; HANA and 3rd-party adapters always. Fixed after bootstrap.
5
+ let _asStrings
6
+ function providedAsStrings() {
7
+ _asStrings ??= cds.db?.kind in { sqlite: 1, postgres: 1 } ? !!cds.env.features.ieee754compatible : true
8
+ return _asStrings
9
+ }
10
+
11
+ // Label every JSON response IEEE754Compatible=true (OData JSON Format §4.1); call right before
12
+ // res.send so non-JSON/204 exits ($count, $value, return=minimal) stay bare. A custom handler
13
+ // that already set Content-Type wins — force means force, but an explicit handler is more explicit.
14
+ module.exports = function handle_ieee754(req, result) {
15
+ if (cds.env.odata.ieee754compatible === false) return //> opt-out
16
+ if (req.res.get('Content-Type')) return //> set by custom handler
17
+ if (result == null || !providedAsStrings()) return
18
+
19
+ req.res.set('Content-Type', 'application/json; charset=utf-8; IEEE754Compatible=true')
20
+ }
@@ -24,6 +24,8 @@ const _setLongTimeout = (cb, delay) => {
24
24
  }
25
25
 
26
26
  let T0
27
+ const MISSING_T0 =
28
+ 'Skipping periodic message processing: no provider tenant is configured via `cds.requires.multitenancy.t0`. This is unexpected outside the `mtx-sidecar` profile.'
27
29
 
28
30
  module.exports = class SchedulingService extends cds.Service {
29
31
  constructor(...args) {
@@ -101,6 +103,8 @@ module.exports = class SchedulingService extends cds.Service {
101
103
 
102
104
  // NOTE: in the future, we also need to trigger task processing in sidecar for mtx
103
105
  if (cds.env.profile !== 'mtx-sidecar') {
106
+ if (!T0) return LOG.warn(MISSING_T0)
107
+
104
108
  const periodic_flush = setInterval(() => _flush(T0), flush_interval_ms).unref()
105
109
  cds.on('shutdown', () => clearInterval(periodic_flush))
106
110
  _flush(T0)
@@ -4,7 +4,7 @@ const LOG = cds.log('queue')
4
4
  let impl
5
5
  const _getImpl = () => {
6
6
  if (!impl) {
7
- if (cds.env.requires.scheduling) {
7
+ if (cds.requires.scheduling) {
8
8
  LOG._debug && LOG.debug('Using scheduling-based event queue processing')
9
9
  impl = require('./processing')
10
10
  } else {
@@ -132,7 +132,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
132
132
 
133
133
  if (opts.maxAttempts) tasksQuery.where({ attempts: { '<': opts.maxAttempts } })
134
134
  if (opts.parallel) {
135
- tasksQuery.SELECT.forUpdate.ignoreLocked = true
135
+ tasksQuery.forUpdate({ ignoreLocked: true })
136
136
  const shifted = new Date(Math.max(0, currTime - _timeout)).toISOString()
137
137
  tasksQuery.where({ status: null, or: { lastAttemptTimestamp: { '<': shifted } } })
138
138
  // Note: If there are messages which are not yet timed out, but will hang eventually,
@@ -215,8 +215,14 @@ const _processTasks = (target, tenant, _opts = {}) => {
215
215
  const user = new cds.User.Privileged(userId)
216
216
  context.user = user
217
217
 
218
- // The latter is for backwards compatibility where `service` was not stored and `target` was the service name
219
- const srvName = _msg.service || _task.target
218
+ // older messages have no `service`; the name is encoded in `target` as
219
+ // `<targetPrefix><serviceName>` (see utils.targetName)
220
+ let srvName = _msg.service
221
+ if (!srvName) {
222
+ srvName = _task.target
223
+ if (opts.targetPrefix && srvName.startsWith(opts.targetPrefix))
224
+ srvName = srvName.slice(opts.targetPrefix.length)
225
+ }
220
226
  delete _msg.service
221
227
 
222
228
  const fromSend = _msg._fromSend
@@ -227,6 +233,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
227
233
 
228
234
  const task = {
229
235
  ID: _task.ID,
236
+ timestamp: _task.timestamp,
230
237
  msg,
231
238
  context,
232
239
  srvName,
@@ -246,6 +253,19 @@ const _processTasks = (target, tenant, _opts = {}) => {
246
253
  let minAttemptFailed
247
254
  try {
248
255
  const _handleWithErr = async task => {
256
+ if (!cds.services[task.srvName]) {
257
+ // service not served/registered: unrecoverable, so dead-letter it (attempts -> maxAttempts)
258
+ // instead of crashing the app or blocking the queue
259
+ LOG.error(`No service '${task.srvName}' found for a queued message; treating as unrecoverable.`)
260
+ if (!minAttemptFailed) minAttemptFailed = task.attempts
261
+ else minAttemptFailed = Math.min(minAttemptFailed, task.attempts)
262
+ task[$error] = new Error(`No service '${task.srvName}' found`)
263
+ if (opts.maxAttempts) {
264
+ task.updateData = { attempts: opts.maxAttempts }
265
+ toBeUpdated.push(task)
266
+ } else toBeDeleted.push(task)
267
+ return
268
+ }
249
269
  const service = cds.unqueued(await cds.connect.to(task.srvName))
250
270
  try {
251
271
  if (task.msg.query) {
@@ -264,9 +284,23 @@ const _processTasks = (target, tenant, _opts = {}) => {
264
284
  // we can only delete in the current tx if legacyLocking (i.e., long-lasting db locks) is false
265
285
  if (!opts.legacyLocking) {
266
286
  const _delete = DELETE.from(tasksEntity).where({ ID: task.ID })
267
- // only delete singleton task if not modified in the meantime
268
- if (task.msg.queue?.task) _delete.where({ timestamp: { '<': _timestampPlusOneMS(task.msg.timestamp) } })
269
- await _delete
287
+ // guard on the selected row's timestamp (not `task.msg.timestamp`: `timestamp` is in
288
+ // `_ignoredContext`, absent from the msg, and reads back as `now`)
289
+ if (task.msg.queue?.task)
290
+ _delete.where({ timestamp: { '<': _timestampPlusOneMS(new Date(task.timestamp)) } })
291
+ const _deleted = await _delete
292
+ const _cnt = typeof _deleted === 'number' ? _deleted : (_deleted?.affected ?? 0)
293
+ // recreate the next occurrence in the same tx; skip if the guarded delete removed nothing
294
+ // (the singleton was unscheduled/rescheduled concurrently)
295
+ if (task.msg.queue?.every && (!task.msg.queue?.task || _cnt > 0)) {
296
+ const _m = { ...task.msg }
297
+ _m._fromSend = task.msg instanceof cds.Request
298
+ await INSERT.into(tasksEntity).entries(
299
+ create_task(target, _m, task.context, task.srvName, opts, true)
300
+ )
301
+ // re-trigger the drain to schedule the new occurrence
302
+ _setWaitingTime(0)
303
+ }
270
304
  }
271
305
  return result
272
306
  })
@@ -353,7 +387,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
353
387
  if (each.updateData.lastError && typeof each.updateData.lastError !== 'string') {
354
388
  each.updateData.lastError = inspect(each.updateData.lastError)
355
389
  }
356
- each.updateData.lastAttemptTimestamp = cds.context.timestamp
390
+ each.updateData.lastAttemptTimestamp = cds.context?.timestamp ?? new Date()
357
391
  queries.push(UPDATE(tasksEntity).where({ ID: each.ID }).set(each.updateData))
358
392
  }
359
393
 
@@ -409,11 +443,11 @@ const _processTasks = (target, tenant, _opts = {}) => {
409
443
  }
410
444
  }
411
445
 
412
- // handle `every`
413
- if (task.msg.queue?.every) {
446
+ // handle `every` — !legacyLocking recreates in the success tx above; the legacyLocking path
447
+ // (deferred delete) recreates here, using a read-back to detect a concurrent unschedule/reschedule
448
+ if (task.msg.queue?.every && opts.legacyLocking) {
414
449
  const _m = { ...task.msg }
415
450
  if (task.msg.queue.task) {
416
- // Read from database as the singleton task might have been modified/deleted in the meantime
417
451
  const dbTask = await SELECT.one(tasksEntity).where({ ID: task.ID })
418
452
  if (!dbTask) continue //> was unscheduled -> no next occurrence
419
453
  Object.assign(_m, JSON.parse(dbTask.msg))
@@ -425,6 +459,8 @@ const _processTasks = (target, tenant, _opts = {}) => {
425
459
  }
426
460
  // invoke failed handlers (only if max attempts is reached)
427
461
  for (const task of toBeUpdated) {
462
+ // skip dead-lettered messages whose service is not served/registered (see above)
463
+ if (!cds.services[task.srvName]) continue
428
464
  if (
429
465
  !task.msg.event.endsWith('/#succeeded') &&
430
466
  !task.msg.event.endsWith('/#failed') &&
@@ -25,10 +25,15 @@ const $service = Symbol('service')
25
25
  const MAX_WAITING_TIME = 1480000
26
26
  const CAPATTEMPTS = Math.ceil(Math.log(MAX_WAITING_TIME / 1000 + 1) / Math.log(1.5))
27
27
 
28
+ const _timestampPlusOneMS = ts => new Date(ts.getTime() + 1).toISOString()
29
+
28
30
  let _processableTasksQuery = {}
29
31
 
30
- const _addParamFalse = w => {
31
- if (w.xpr) return w.xpr.map(xpr => _addParamFalse(xpr))
32
+ const _inlineLiterals = w => {
33
+ if (w.xpr) return w.xpr.map(xpr => _inlineLiterals(xpr))
34
+ // also recurse into function args (e.g. `startswith(target, '<appid>')`) so a literal arg isn't
35
+ // bound as a `?` and shift the positional binding of the query's real params
36
+ if (w.args) return (Array.isArray(w.args) ? w.args : Object.values(w.args)).map(a => _inlineLiterals(a))
32
37
  if (w.val === undefined) return w
33
38
  w.param = false
34
39
  return w
@@ -50,9 +55,14 @@ const _getProcessableTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
50
55
 
51
56
  const appid = cds.env.appid
52
57
 
58
+ // also match pre-`appid` rows: `appid IS NULL` with `target` starting with `appid` (the former app prefix)
59
+ const targetCondition = appid
60
+ ? `(appid = '${appid}' AND target = '${queueName}') OR (appid IS NULL AND startswith(target, '${appid}') = true)`
61
+ : `target = '${queueName}'`
62
+
53
63
  const sql = `
54
64
  SELECT ID FROM ${entity.name}
55
- WHERE ${appid ? `appid = '${appid}' AND ` : ''}target = '${queueName}'
65
+ WHERE (${targetCondition})
56
66
  AND attempts < ${maxAttempts}
57
67
  AND (status is NULL OR lastAttemptTimestamp < ?)
58
68
  AND (${attemptConditions.join(' OR ')})
@@ -61,10 +71,9 @@ const _getProcessableTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
61
71
 
62
72
  _processableTasksQuery[queueName] = cds.ql(sql)
63
73
  _processableTasksQuery[queueName].SELECT.limit.rows.param = false
64
- _processableTasksQuery[queueName].SELECT.where.map(w => _addParamFalse(w))
74
+ _processableTasksQuery[queueName].SELECT.where.map(w => _inlineLiterals(w))
65
75
  _processableTasksQuery[queueName].SELECT.columns = Object.keys(entity.elements).map(k => ({ ref: [k] }))
66
- _processableTasksQuery[queueName].forUpdate()
67
- _processableTasksQuery[queueName].SELECT.forUpdate.ignoreLocked = true
76
+ _processableTasksQuery[queueName].forUpdate({ ignoreLocked: true })
68
77
 
69
78
  return _processableTasksQuery[queueName]
70
79
  }
@@ -101,10 +110,9 @@ const _getFlushTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
101
110
  ORDER BY timestamp ASC, ID ASC
102
111
  LIMIT ${chunkSize}`)
103
112
  _flushTasksQuery[queueName].SELECT.limit.rows.param = false
104
- _flushTasksQuery[queueName].SELECT.where.map(w => _addParamFalse(w))
113
+ _flushTasksQuery[queueName].SELECT.where.map(w => _inlineLiterals(w))
105
114
  _flushTasksQuery[queueName].SELECT.columns = Object.keys(entity.elements).map(k => ({ ref: [k] }))
106
- _flushTasksQuery[queueName].forUpdate()
107
- _flushTasksQuery[queueName].SELECT.forUpdate.ignoreLocked = true
115
+ _flushTasksQuery[queueName].forUpdate({ ignoreLocked: true })
108
116
  }
109
117
  return _flushTasksQuery[queueName]
110
118
  }
@@ -257,8 +265,13 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
257
265
  const user = new cds.User.Privileged(userId)
258
266
  context.user = user
259
267
 
260
- // The latter is for backwards compatibility where `service` was not stored and `target` was the service name
261
- const srvName = _msg.service || _task.target
268
+ // older messages have no `service`; the name is encoded in `target` as `<appid><serviceName>`
269
+ let srvName = _msg.service
270
+ if (!srvName) {
271
+ srvName = _task.target
272
+ const appid = cds.env.appid
273
+ if (appid && srvName.startsWith(appid)) srvName = srvName.slice(appid.length)
274
+ }
262
275
  delete _msg.service
263
276
 
264
277
  const fromSend = _msg._fromSend
@@ -301,6 +314,15 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
301
314
 
302
315
  try {
303
316
  const _handleWithErr = async task => {
317
+ if (!cds.services[task.srvName]) {
318
+ // service not served/registered: unrecoverable, so dead-letter it (attempts -> maxAttempts)
319
+ // instead of crashing the app or blocking the queue
320
+ LOG.error(`No service '${task.srvName}' found for a queued message; treating as unrecoverable.`)
321
+ task[$error] = new Error(`No service '${task.srvName}' found`)
322
+ task.updateData = { attempts: opts.maxAttempts }
323
+ toBeUpdated.push(task)
324
+ return
325
+ }
304
326
  const service = cds.unqueued(await cds.connect.to(task.srvName))
305
327
  try {
306
328
  if (task.msg.query) {
@@ -330,12 +352,18 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
330
352
  .where({ msg: { like: `%"tenant":"${task.msg.data.tenant}"%` } })
331
353
  .where({ msg: { like: `%"target":"${task.msg.data.target}"%` } })
332
354
  } else {
333
- await DELETE.from(OUTBOX).where({ ID: task.ID })
355
+ const _delete = DELETE.from(OUTBOX).where({ ID: task.ID })
356
+ // guard on the selected row's timestamp so a concurrent unschedule/reschedule is
357
+ // serialized against the recurrence recreated below
358
+ if (task.msg.queue?.task)
359
+ _delete.where({ timestamp: { '<': _timestampPlusOneMS(new Date(task._task.timestamp)) } })
360
+ const _deleted = await _delete
361
+ const _cnt = typeof _deleted === 'number' ? _deleted : (_deleted?.affected ?? 0)
334
362
 
335
363
  // For atomicity: create follow-up tasks in same transaction as delete
336
364
  const follow_ups = []
337
365
 
338
- // #succeeded callback (only if not already a callback event)
366
+ // #succeeded callback — always owed once the in-flight execution completed
339
367
  if (!task.msg.event.endsWith('/#succeeded') && !task.msg.event.endsWith('/#failed')) {
340
368
  const succeededMsg = _newMsgForCallbackFrom(task.msg)
341
369
  succeededMsg.event = succeededMsg.event + '/#succeeded'
@@ -352,8 +380,9 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
352
380
  }
353
381
  }
354
382
 
355
- // Next recurrence for .every() tasks
356
- if (task.msg.queue?.every) {
383
+ // next occurrence — only if the guarded delete removed the row (else it was unscheduled/
384
+ // rescheduled concurrently); non-singletons always recreate
385
+ if (task.msg.queue?.every && (!task.msg.queue?.task || _cnt > 0)) {
357
386
  const _m = { ...task.msg }
358
387
  _m._fromSend = task.msg instanceof cds.Request
359
388
  const next_iteration_task = create_task(queueName, _m, task.context, task.srvName, opts, true)
@@ -423,7 +452,7 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
423
452
  if (each.updateData.lastError && typeof each.updateData.lastError !== 'string') {
424
453
  each.updateData.lastError = inspect(each.updateData.lastError)
425
454
  }
426
- each.updateData.lastAttemptTimestamp = cds.context.timestamp
455
+ each.updateData.lastAttemptTimestamp = cds.context?.timestamp ?? new Date().toISOString()
427
456
  follow_up_tasks.push(Object.assign({}, each._task, each.updateData))
428
457
  afters.add(waitingTime(each.updateData.attempts))
429
458
  }
@@ -441,6 +470,8 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
441
470
 
442
471
  // Create #failed callbacks (only if max attempts is reached)
443
472
  for (const task of toBeUpdated) {
473
+ // skip dead-lettered messages whose service is not served/registered (see above)
474
+ if (!cds.services[task.srvName]) continue
444
475
  if (
445
476
  !is_t0 &&
446
477
  !task.msg.event.endsWith('/#succeeded') &&
@@ -548,6 +579,11 @@ exports.queued = function queued(srv, opts) {
548
579
  // REVISIT: why is req.context preferred and when would they differ?
549
580
  const context = req.context || cds.context
550
581
 
582
+ // In MT apps, scheduling without a tenant is ambiguous — require explicit tenant context
583
+ if (cds.requires.multitenancy && !context.tenant) {
584
+ throw new Error(`Cannot schedule task without tenant context in multitenant app`)
585
+ }
586
+
551
587
  // persistent queue
552
588
  if (queueOpts.kind === 'persistent-queue' && _hasPersistentQueue(context.tenant)) {
553
589
  const scheduler = await cds.connect.to(SCHEDULER_SERVICE)
@@ -51,6 +51,9 @@ const create_task = (queueName, msg, context, serviceName, queueOpts, reoccurren
51
51
  appid: cds.env.appid,
52
52
  target: cds.env.appid ? queueName : targetName(queueName, queueOpts),
53
53
  timestamp,
54
+ // reset status so re-submitting a task that is currently being processed (UPSERT over its
55
+ // 'processing' row) yields a processable row again instead of a stuck one
56
+ status: null,
54
57
  msg: JSON.stringify(_msg)
55
58
  }
56
59
 
@@ -74,6 +74,7 @@ class RestAdapter extends HttpAdapter {
74
74
  let def = req._operation || cds.infer.target(req._query)
75
75
  const defs = srv.model.definitions
76
76
  if (typeof def === 'string') def = defs[def] || defs[def.split(':$:')[0]].actions[def.split(':$:')[1]]
77
+ if (req._operation) def = def?.returns?.items ?? def?.returns
77
78
  if (def) postProcessData(result, srv, def)
78
79
  }
79
80
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sap/cds",
3
- "version": "10.1.0",
3
+ "version": "10.2.1",
4
4
  "description": "SAP Cloud Application Programming Model - CDS for Node.js",
5
5
  "homepage": "https://cap.cloud.sap/",
6
6
  "keywords": [
@@ -29,7 +29,7 @@
29
29
  "CHANGELOG.md"
30
30
  ],
31
31
  "engines": {
32
- "node": ">=22"
32
+ "node": ">=22.12"
33
33
  },
34
34
  "dependencies": {
35
35
  "@sap/cds-compiler": "^7",
@@ -46,6 +46,7 @@ module.exports = async function cds_server (options) {
46
46
  if (o.static) app.use (express.static (o.static)) //> defaults to ./app
47
47
  if (o.favicon) app.use ('/favicon.ico', o.favicon) //> if none in ./app
48
48
  if (o.index) app.get ('/',o.index) //> if none in ./app
49
+ if (o.index) app.use ('/.cap', express.static (__dirname+'/app'))
49
50
 
50
51
  // load and prepare models
51
52
  const csn = await cds.load(o.from||'*',o); o.from = false
@@ -9,6 +9,7 @@ type State : String enum {
9
9
  @path : '/ucl/spii/v1'
10
10
  @requires: 'any'
11
11
  @impl : '@sap/cds/srv/ucl-service.js'
12
+ @ORD.Extensions: { visibility : 'private' }
12
13
  service UCLService {
13
14
  @open
14
15
  @cds.persistence.skip
@@ -19,11 +19,19 @@ const xsuaaSrv = Object.keys(vcap_services)
19
19
  if (!xsuaaSrv)
20
20
  throw new Error('You need to provide credentials of service `XSUAA` in environment variable `VCAP_SERVICES`')
21
21
  const tokenStore = {}
22
- const oa2 = {
23
- client: xsuaaSrv.credentials.clientid,
24
- secret: xsuaaSrv.credentials.clientsecret,
25
- endpoint: xsuaaSrv.credentials.url
26
- }
22
+ const xsuaaCreds = xsuaaSrv.credentials
23
+ const oa2 =
24
+ xsuaaCreds['credential-type'] === 'x509'
25
+ ? {
26
+ client: xsuaaCreds.clientid,
27
+ endpoint: xsuaaCreds.certurl,
28
+ mTLS: { cert: xsuaaCreds.certificate, key: xsuaaCreds.key }
29
+ }
30
+ : {
31
+ client: xsuaaCreds.clientid,
32
+ secret: xsuaaCreds.clientsecret,
33
+ endpoint: xsuaaCreds.url
34
+ }
27
35
 
28
36
  const main = async () => {
29
37
  // use authorizedRequest to fire against deploy endpoint