@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
@@ -19,7 +19,7 @@ const lazyload = require('./utils/lazyload')( module );
19
19
  const trace = require('./base/trace');
20
20
 
21
21
  const snapi = lazyload('./api/main');
22
- const csnUtils = lazyload('./model/csnUtils');
22
+ const csnUtils = lazyload('./base/csnUtils');
23
23
  const modelApi = lazyload('./base/model-api');
24
24
  const messages = lazyload('./base/messages');
25
25
  const sqlIdentifier = lazyload('./sql-identifier');
@@ -49,6 +49,7 @@ function parseCdl( cdlSource, filename, options = {} ) {
49
49
  };
50
50
  const messageFunctions = messages.createMessageFunctions( options, 'parse', model );
51
51
  model.$messageFunctions = messageFunctions;
52
+ cdlSource = cdlSource.toString();
52
53
 
53
54
  const xsn = parsers.parseCdl( cdlSource, filename, Object.assign( { parseOnly: true }, options ),
54
55
  messageFunctions );
@@ -62,6 +63,7 @@ function parseCdl( cdlSource, filename, options = {} ) {
62
63
 
63
64
  function parseCql( cdlSource, filename = '<query>.cds', options = {} ) {
64
65
  const messageFunctions = messages.createMessageFunctions( options, 'parse' );
66
+ cdlSource = cdlSource.toString();
65
67
  const xsn = parsers.parseCdl( cdlSource, filename, Object.assign( { parseOnly: true }, options ),
66
68
  messageFunctions, 'query' );
67
69
  messageFunctions.throwWithError();
@@ -70,6 +72,7 @@ function parseCql( cdlSource, filename = '<query>.cds', options = {} ) {
70
72
 
71
73
  function parseExpr( cdlSource, filename = '<expr>.cds', options = {} ) {
72
74
  const messageFunctions = messages.createMessageFunctions( options, 'parse' );
75
+ cdlSource = cdlSource.toString();
73
76
  const xsn = parsers.parseCdl( cdlSource, filename, Object.assign( { parseOnly: true }, options ),
74
77
  messageFunctions, 'expr' );
75
78
  messageFunctions.throwWithError();
@@ -13,6 +13,7 @@ const { primaryExprProperties } = require('../base/builtins');
13
13
  const { parseMultiLineStringLiteral } = require('../language/multiLineStringParser');
14
14
  const { normalizeNumberString } = require('../language/textUtils');
15
15
  const { parseDocComment } = require('../language/docCommentParser');
16
+ const { XsnArtifact, XsnName } = require('../compiler/xsn-model');
16
17
 
17
18
  const $location = Symbol.for('cds.$location');
18
19
 
@@ -746,6 +747,9 @@ class AstBuildingParser extends BaseParser {
746
747
  return art;
747
748
  }
748
749
 
750
+ locationCopy( loc ) {
751
+ return { __proto__: Location.prototype, ...loc };
752
+ }
749
753
  // AST building ---------------------------------------------------------------
750
754
 
751
755
  assignAnnotation( art, val, name, prefix = '' ) {
@@ -753,7 +757,7 @@ class AstBuildingParser extends BaseParser {
753
757
  const pathname = pathName( path );
754
758
  if (!pathname)
755
759
  return;
756
- let absolute = '';
760
+ let absolute;
757
761
  if (name.variant) {
758
762
  const variant = pathName( name.variant.path );
759
763
  absolute = `${ prefix }${ pathname }#${ variant }`;
@@ -825,8 +829,12 @@ class AstBuildingParser extends BaseParser {
825
829
  return { id, location, $delimited: true };
826
830
  }
827
831
 
832
+ identNameAst( token = this.lb() ) {
833
+ return { __proto__: XsnName.prototype, ...this.identAst( token ) };
834
+ }
835
+
828
836
  fragileAlias( safe = false ) {
829
- const ast = this.identAst();
837
+ const ast = { __proto__: XsnName.prototype, ...this.identAst() };
830
838
  if (safe || ast.$delimited || !/^[a-zA-Z][a-zA-Z_]+$/.test( ast.id )) {
831
839
  this.warning( 'syntax-deprecated-auto-as', ast.location, { keyword: 'as' },
832
840
  'Add keyword $(KEYWORD) in front of the alias name' );
@@ -862,7 +870,7 @@ class AstBuildingParser extends BaseParser {
862
870
  }
863
871
  else {
864
872
  token.parsedAs = 'ItemAlias';
865
- art.name = ref.path[0];
873
+ art.name = { __proto__: XsnName.prototype, ...ref.path[0] };
866
874
  art.value = undefined;
867
875
  }
868
876
  }
@@ -1230,6 +1238,7 @@ class AstBuildingParser extends BaseParser {
1230
1238
  const { file, line, col } = this.lb( offset ).location;
1231
1239
  const { endLine, endCol } = this.lb().location;
1232
1240
  return {
1241
+ __proto__: Location.prototype,
1233
1242
  file,
1234
1243
  line,
1235
1244
  col,
@@ -1243,7 +1252,12 @@ class AstBuildingParser extends BaseParser {
1243
1252
  const { file, line, col } = start;
1244
1253
 
1245
1254
  return {
1246
- file, line, col, endLine: end.endLine, endCol: end.endCol,
1255
+ __proto__: Location.prototype,
1256
+ file,
1257
+ line,
1258
+ col,
1259
+ endLine: end.endLine,
1260
+ endCol: end.endCol,
1247
1261
  };
1248
1262
  }
1249
1263
 
@@ -1261,6 +1275,10 @@ class AstBuildingParser extends BaseParser {
1261
1275
  return null;
1262
1276
  }
1263
1277
 
1278
+ wildcardColumn( token = this.lb() ) {
1279
+ return { __proto__: XsnArtifact.prototype, val: '*', location: token.location };
1280
+ }
1281
+
1264
1282
  // TODO: rename to `valAst`
1265
1283
  valueWithLocation( val = undefined, token = this.lb() ) {
1266
1284
  if (val === undefined)
@@ -1431,7 +1449,8 @@ class AstBuildingParser extends BaseParser {
1431
1449
  this.classifyImplicitName( 'ItemAssoc', art.value );
1432
1450
  const path = art.value?.path;
1433
1451
  if (path?.length) {
1434
- art.name = path.at( -1 ); // usually length 1, but make it also work during error recovery
1452
+ // usually length 1, but make it also work during error recovery:
1453
+ art.name = { __proto__: XsnName.prototype, ...path.at( -1 ) };
1435
1454
  delete art.value;
1436
1455
  }
1437
1456
  }
@@ -1524,8 +1543,10 @@ class AstBuildingParser extends BaseParser {
1524
1543
  { name, '#': (numDefines ? 'define' : 'extend') } );
1525
1544
  }
1526
1545
  else if (numDefines === 1) {
1546
+ // extend E with { elem …; extend elem …; extend elem … }
1547
+ // → no duplicate error for single definition
1527
1548
  ext.$errorReported = 'syntax-duplicate-extend';
1528
- } // a definition, but not duplicate
1549
+ }
1529
1550
  }
1530
1551
 
1531
1552
  // Add new definition `art` to dictionary property `env` of node `parent`.
@@ -1544,19 +1565,22 @@ class AstBuildingParser extends BaseParser {
1544
1565
  if (Array.isArray(name)) {
1545
1566
  const last = name.length && name[name.length - 1];
1546
1567
  art.name = { // A.B.C -> 'C'
1547
- id: last?.id || '', location: last.location, $inferred: 'as',
1568
+ __proto__: XsnName.prototype, id: last?.id || '', location: last.location, $inferred: 'as',
1548
1569
  };
1549
1570
  }
1550
1571
  else if (name) {
1551
- art.name = name;
1572
+ if (Object.getPrototypeOf(name) === Object.prototype)
1573
+ art.name = { __proto__: XsnName.prototype, ...name };
1574
+ else
1575
+ art.name = name;
1552
1576
  if (!name.id && kind === null) {
1553
- name.id = name.variant
1554
- ? `${ pathName( name.path ) }#${ pathName( name.variant.path ) }`
1555
- : pathName( name.path );
1577
+ art.name.id = art.name.variant
1578
+ ? `${ pathName( art.name.path ) }#${ pathName( art.name.variant.path ) }`
1579
+ : pathName( art.name.path );
1556
1580
  }
1557
1581
  }
1558
1582
  else {
1559
- art.name = { id: '' };
1583
+ art.name = { __proto__: XsnName.prototype, id: '' };
1560
1584
  }
1561
1585
  if (kind)
1562
1586
  art.kind = kind;
@@ -1567,7 +1591,7 @@ class AstBuildingParser extends BaseParser {
1567
1591
  if (env === 'artifacts' || env === 'vocabularies') {
1568
1592
  dictAddArray( parent[env], id, art );
1569
1593
  }
1570
- else if (kind || this.options.parseOnly) { // TODO: do not check parseOnly
1594
+ else if (kind || this.options.parseOnly) { // TODO v8: do not check parseOnly
1571
1595
  dictAdd( parent[env], id, art );
1572
1596
  }
1573
1597
  else {
@@ -1613,14 +1637,17 @@ class AstBuildingParser extends BaseParser {
1613
1637
  }
1614
1638
  // Note: the element extensions share a common `location`, also with the
1615
1639
  // extension of the main artifact; its end location will usually set later
1616
- const main = { kind, name: artName, location };
1640
+ const main = {
1641
+ __proto__: XsnArtifact.prototype, kind, name: artName, location,
1642
+ };
1617
1643
  parent.extensions.push( main );
1618
1644
  parent = main;
1619
1645
 
1620
1646
  const last = elemPath[elemPath.length - 1];
1621
1647
  for (const seg of elemPath) {
1622
1648
  parent.elements = Object.create(null); // no dict location → no createDict()
1623
- parent = this.addDef( (seg === last ? ext : { location }),
1649
+ // TODO: try to find a good dict location
1650
+ parent = this.addDef( (seg === last ? ext : { __proto__: XsnArtifact.prototype, location }),
1624
1651
  parent, 'elements', kind, seg );
1625
1652
  }
1626
1653
  }
@@ -23,6 +23,14 @@ function asDBName( name ) {
23
23
  : name.toUpperCase();
24
24
  }
25
25
 
26
+ /**
27
+ * @param {string} name Artifact name
28
+ * @returns {number} Number of dots in the artifact name
29
+ */
30
+ function dotCount( name ) {
31
+ return name.split('.').length - 1;
32
+ }
33
+
26
34
  /**
27
35
  * Check for duplicate artifacts or elements
28
36
  *
@@ -48,11 +56,12 @@ class DuplicateChecker {
48
56
  * @param {string} name Persistence name of the artifact
49
57
  * @param {CSN.Location|CSN.Path} location CSN location of the artifact
50
58
  * @param {string} modelName CSN artifact name
59
+ * @param {boolean} persistenceExists Whether the artifact has @cds.persistence.exists
51
60
  */
52
- addArtifact( name, location, modelName ) {
61
+ addArtifact( name, location, modelName, persistenceExists = false ) {
53
62
  const dbName = this.names === 'plain' ? asDBName(name) : name; // uppercase for plain names
54
63
  this.currentArtifact = {
55
- name, location, elements: {}, modelName,
64
+ name, location, elements: {}, modelName, persistenceExists,
56
65
  };
57
66
  if (!this.seenArtifacts[dbName])
58
67
  this.seenArtifacts[dbName] = [ this.currentArtifact ];
@@ -85,24 +94,41 @@ class DuplicateChecker {
85
94
  *
86
95
  * @param {Function} error Function of makeMessageFunction()
87
96
  * @param {CSN.Options} options Options used for the compilation
97
+ * @param {Function} message Function of makeMessageFunction()
88
98
  */
89
- check(error, options = null) {
99
+ check(error, options = null, message = error) {
90
100
  forEach(this.seenArtifacts, (artifactName, artifacts) => {
91
101
  if (artifacts.length > 1) {
92
- artifacts.slice(1).forEach((artifact) => { // report all colliding artifacts, except the first one
93
- const collidesWith = this.seenArtifacts[artifactName].find( art => art !== artifact );
102
+ const sortedArtifacts = artifacts.slice().sort((a, b) => {
103
+ const dotCountDifference = dotCount(a.modelName) - dotCount(b.modelName);
104
+ if (dotCountDifference)
105
+ return dotCountDifference;
106
+ return a.modelName < b.modelName ? -1 : Number(a.modelName > b.modelName);
107
+ });
108
+ const collidesWith = sortedArtifacts.find(a => !a.persistenceExists) || sortedArtifacts[0];
109
+ sortedArtifacts.forEach((artifact) => { // report all colliding artifacts, except the first one
110
+ if (artifact === collidesWith)
111
+ return;
112
+
94
113
  let namingMode;
95
114
  if (options)
96
115
  namingMode = options.sqlMapping;
97
116
  else
98
117
  namingMode = 'plain';
99
118
 
100
- error(null, [ 'definitions', artifact.modelName ], {
101
- name: collidesWith.modelName, prop: namingMode, '#': artifact.modelName.includes('.') ? 'dots' : 'std',
102
- }, {
103
- std: 'Artifact name can\'t be mapped to a SQL compliant identifier in naming mode $(PROP) because it conflicts with existing definition $(NAME)',
104
- dots: 'Artifact name containing dots can\'t be mapped to a SQL compliant identifier in naming mode $(PROP) because it conflicts with existing definition $(NAME)',
105
- });
119
+ const hasExists = artifact.persistenceExists || collidesWith.persistenceExists;
120
+ if (hasExists) {
121
+ message('name-duplicate-artifact-exists', [ 'definitions', artifact.modelName ], {
122
+ name: collidesWith.modelName, prop: namingMode,
123
+ });
124
+ }
125
+ else {
126
+ error(null, [ 'definitions', artifact.modelName ], {
127
+ name: collidesWith.modelName, prop: namingMode,
128
+ }, {
129
+ std: 'Artifact name can\'t be mapped to a SQL compliant identifier in naming mode $(PROP) because it conflicts with existing definition $(NAME)',
130
+ });
131
+ }
106
132
  });
107
133
  }
108
134
  artifacts.forEach((artifact) => {
@@ -4,7 +4,7 @@
4
4
  const {
5
5
  forEachDefinition,
6
6
  getResultingName,
7
- } = require('../model/csnUtils');
7
+ } = require('../base/csnUtils');
8
8
  const { forEach } = require('../utils/objectUtils');
9
9
  const { transformForRelationalDBWithCsn } = require('../transform/forRelationalDB');
10
10
 
@@ -18,7 +18,7 @@ const { cdlNewLineRegEx } = require('../language/textUtils');
18
18
  const { findElement, createExpressionRenderer, withoutCast } = require('./utils/common');
19
19
  const { escapeString, hasUnpairedUnicodeSurrogate } = require('./utils/stringEscapes');
20
20
  const { checkCSNVersion } = require('../json/csnVersion');
21
- const { normalizeTypeRef, forEachDefinition } = require('../model/csnUtils');
21
+ const { normalizeTypeRef, forEachDefinition } = require('../base/csnUtils');
22
22
  const enrichUniversalCsn = require('../transform/universalCsn/universalCsnEnricher');
23
23
  const { isBetaEnabled } = require('../base/specialOptions');
24
24
  const { ModelError, CompilerAssertion } = require('../base/error');
@@ -30,7 +30,7 @@ const { isBuiltinType } = require('../base/builtins');
30
30
  const { cloneFullCsn } = require('../base/cloneCsn');
31
31
  const { getKeysDict, implicitAs } = require('../base/csnRefs');
32
32
  const { undelimitedIdentifierRegex } = require('../parsers/identifiers');
33
- const { getNormalizedQuery } = require('../model/csnUtils');
33
+ const { getNormalizedQuery } = require('../base/csnUtils');
34
34
  const {
35
35
  line,
36
36
  pretty,
@@ -660,12 +660,15 @@ class CsnToCdl {
660
660
  let result = this.renderAnnotationAssignmentsAndDocComment(ext, env);
661
661
  extName = this.renderArtifactName(extName, env);
662
662
 
663
+ let extendWithIncludes;
663
664
  if (ext.includes && ext.includes.length > 0) {
664
- // Includes can't be combined with anything in braces {}.
665
665
  const affix = isElementExtend ? 'element ' : '';
666
666
  const includes = ext.includes.map((inc, i) => this.renderDefinitionReference(inc, env.withSubPath([ 'includes', i ]))).join(', ');
667
- result += `${ env.indent }extend ${ affix }${ extName } with ${ includes };\n`;
668
- return result;
667
+ extendWithIncludes = `${ env.indent }extend ${ affix }${ extName } with ${ includes }`;
668
+ if (!ext.elements && !ext.actions) {
669
+ result += `${ extendWithIncludes };\n`;
670
+ return result;
671
+ }
669
672
  }
670
673
 
671
674
  const typeParams = this.renderTypeParameters(ext, true);
@@ -688,7 +691,9 @@ class CsnToCdl {
688
691
  // the latter cannot.
689
692
  // If there are actions, check if there are also elements/columns, and if so, use the prefix notation.
690
693
  const usePrefixNotation = ext.actions && (ext.columns || ext.elements);
691
- if (usePrefixNotation)
694
+ if (extendWithIncludes)
695
+ result += `${ extendWithIncludes }${ ext.elements ? ' {\n' : ' actions {\n' }`;
696
+ else if (usePrefixNotation)
692
697
  result += `${ env.indent }extend ${ this.getExtendPrefixVariant(ext) } ${ extName } with {\n`;
693
698
  else
694
699
  result += `${ env.indent }extend ${ extName } with ${ this.getExtendPostfixVariant(ext) }{\n`;
@@ -2,7 +2,7 @@
2
2
  'use strict';
3
3
 
4
4
  const { checkCSNVersion } = require('../json/csnVersion');
5
- const { forEachDefinition } = require('../model/csnUtils');
5
+ const { forEachDefinition } = require('../base/csnUtils');
6
6
  const { transformForRelationalDBWithCsn } = require('../transform/forRelationalDB');
7
7
  const { getIdentifierUtils } = require('./utils/sql');
8
8
 
@@ -4,10 +4,10 @@
4
4
  const {
5
5
  getLastPartOf, getLastPartOfRef,
6
6
  hasValidSkipOrExists, getNormalizedQuery,
7
- forEachDefinition, getResultingName,
7
+ forEachDefinition, getArtifactDatabaseNameOf, getResultingName,
8
8
  getVariableReplacement, pathName,
9
- implicitAs,
10
- } = require('../model/csnUtils');
9
+ implicitAs, hasPersistenceSkipAnnotation,
10
+ } = require('../base/csnUtils');
11
11
  const { isBuiltinType, isMagicVariable } = require('../base/builtins');
12
12
  const { forEach, forEachValue, forEachKey } = require('../utils/objectUtils');
13
13
  const {
@@ -31,7 +31,7 @@ const { manageConstraints, manageConstraint } = require('./manageConstraints');
31
31
  const { renderUniqueConstraintString, renderUniqueConstraintDrop, renderUniqueConstraintAdd } = require('./utils/unique');
32
32
  const { ModelError, CompilerAssertion } = require('../base/error');
33
33
  const { pathId } = require('../base/csnRefs');
34
- const { transformExprOperators, isTopLevelPredicate } = require('./utils/operators');
34
+ const { transformExprOperators, isTopLevelPredicate, addTrueComparisonToBooleanFunctions } = require('./utils/operators');
35
35
  const { exprAsTree, condAsTree } = require('../base/xprAsTree');
36
36
 
37
37
  class SqlRenderEnvironment {
@@ -112,7 +112,7 @@ class SqlRenderEnvironment {
112
112
  function toSqlDdl( csn, options, messageFunctions ) {
113
113
  timetrace.start('SQL rendering');
114
114
  const {
115
- error, warning, info, throwWithAnyError,
115
+ error, warning, info, message, throwWithAnyError,
116
116
  } = messageFunctions;
117
117
  const { quoteSqlId, prepareIdentifier, renderArtifactName } = getIdentifierUtils(csn, options, warning);
118
118
  const reportedMissingReplacements = Object.create(null);
@@ -155,12 +155,17 @@ function toSqlDdl( csn, options, messageFunctions ) {
155
155
  },
156
156
  });
157
157
 
158
- function renderExpr( x, env ) {
158
+ function renderExpr( x, env, inCondition ) {
159
159
  // TODO:
160
160
  // Can we to structurizing upfront?
161
161
  // Neither condAsTree() nor exprAsTree() traverse `.args` / `.where`.
162
162
  // This is fine, since renderExpr() calls itself for function arguments and filters.
163
163
  x = Array.isArray(x) ? condAsTree(x) : exprAsTree(x);
164
+ // In a condition (WHERE/HAVING/ON), boolean-valued OData functions (`contains` etc.)
165
+ // may sit in predicate position; on HANA their value form (`CASE … END`) is turned
166
+ // into a predicate by comparing it to `TRUE`.
167
+ if (inCondition && options.sqlDialect === 'hana' && Array.isArray(x))
168
+ x = addTrueComparisonToBooleanFunctions(x);
164
169
  x = transformExprOperators(x, options, messageFunctions, env);
165
170
  return exprRenderer.renderExpr(x, env);
166
171
  }
@@ -213,6 +218,13 @@ function toSqlDdl( csn, options, messageFunctions ) {
213
218
 
214
219
  // Render each artifact on its own
215
220
  forEachDefinition(sortCsnIfTestMode(csn), (artifact, artifactName) => {
221
+ if (artifact.kind === 'entity' && !(artifact.abstract || hasPersistenceSkipAnnotation(artifact))) {
222
+ const persistenceName = artifact['@cds.persistence.name'] ||
223
+ getArtifactDatabaseNameOf(artifactName, options.sqlMapping, csn, options.sqlDialect);
224
+ definitionsDuplicateChecker.addArtifact(
225
+ persistenceName, artifact?.$location, artifactName, artifact['@cds.persistence.exists']
226
+ );
227
+ }
216
228
  renderDefinitionInto(artifactName, artifact, mainResultObj, new SqlRenderEnvironment());
217
229
  });
218
230
 
@@ -303,7 +315,7 @@ function toSqlDdl( csn, options, messageFunctions ) {
303
315
  });
304
316
 
305
317
  // trigger artifact and element name checks
306
- definitionsDuplicateChecker.check(error, options);
318
+ definitionsDuplicateChecker.check(error, options, message);
307
319
  extensionsDuplicateChecker.check(error);
308
320
  deletionsDuplicateChecker.check(error);
309
321
 
@@ -632,7 +644,6 @@ function toSqlDdl( csn, options, messageFunctions ) {
632
644
  }
633
645
  }
634
646
  const tableName = renderArtifactName(artifactName);
635
- definitionsDuplicateChecker.addArtifact(art['@cds.persistence.name'], art.$location, artifactName);
636
647
  result += `TABLE ${ tableName }`;
637
648
  result += ' (\n';
638
649
  result += Object.keys(art.elements)
@@ -856,7 +867,7 @@ function toSqlDdl( csn, options, messageFunctions ) {
856
867
  }
857
868
  result += ' JOIN ';
858
869
  result += `${ renderArtifactName(elm.target) } AS ${ quoteSqlId(elementName) } ON (`;
859
- result += `${ renderExpr(elm.on, env.withSubPath([ 'on' ])) })`;
870
+ result += `${ renderExpr(elm.on, env.withSubPath([ 'on' ]), true) })`;
860
871
  }
861
872
  return result;
862
873
  }
@@ -994,7 +1005,7 @@ function toSqlDdl( csn, options, messageFunctions ) {
994
1005
  result += renderJoinCardinality(source.cardinality);
995
1006
  result += `JOIN ${ renderQuerySource(source.args[i], env.withSubPath([ 'args', i ])) }`;
996
1007
  if (source.on)
997
- result += ` ON ${ renderExpr(source.on, env.withSubPath([ 'on' ])) }`;
1008
+ result += ` ON ${ renderExpr(source.on, env.withSubPath([ 'on' ]), true) }`;
998
1009
 
999
1010
  result += ')';
1000
1011
  }
@@ -1108,7 +1119,7 @@ function toSqlDdl( csn, options, messageFunctions ) {
1108
1119
  }
1109
1120
  if (path.ref[0].where) {
1110
1121
  const cardinality = path.ref[0].cardinality ? (`${ path.ref[0].cardinality.max }: `) : '';
1111
- result += `[${ cardinality }${ renderExpr(path.ref[0].where, env.withSubPath([ 'ref', 0, 'where' ])) }]`;
1122
+ result += `[${ cardinality }${ renderExpr(path.ref[0].where, env.withSubPath([ 'ref', 0, 'where' ]), true) }]`;
1112
1123
  }
1113
1124
 
1114
1125
  // Add any path steps (possibly with parameters and filters) that may follow after that
@@ -1206,7 +1217,6 @@ function toSqlDdl( csn, options, messageFunctions ) {
1206
1217
  */
1207
1218
  function renderViewInto( artifactName, art, resultObj, env ) {
1208
1219
  const viewName = renderArtifactName(artifactName);
1209
- definitionsDuplicateChecker.addArtifact(art['@cds.persistence.name'], art?.$location, artifactName);
1210
1220
  let result = `${ isProjectionView(csn, art, options) ? 'PROJECTION ' : '' }VIEW ${ viewName }`;
1211
1221
  result += renderComment(art);
1212
1222
  result += renderParameterDefinitions(art.params, env);
@@ -1286,12 +1296,23 @@ function toSqlDdl( csn, options, messageFunctions ) {
1286
1296
  env = env.withSubPath([ 'SET' ]);
1287
1297
  result += query.SET.args
1288
1298
  .map((arg, index) => {
1289
- // Wrap each query in the SET in parentheses that
1290
- // - is a SET itself (to preserve precedence between the different SET operations),
1291
- // - has an ORDER BY/LIMIT (because UNION etc. can't stand directly behind an ORDER BY)
1292
1299
  const argEnv = env.withSubPath([ 'args', index ]);
1300
+ // SQLite rejects parentheses around operands and evaluates compound operators from left to right.
1301
+ // Its leftmost nested set can stay inline; all other SQLite grouping needs a derived table.
1302
+ if (options.sqlDialect === 'sqlite') {
1303
+ const sqliteNeedsGrouping = (index > 0 && arg.SET) ||
1304
+ arg.SET?.orderBy || arg.SET?.limit || arg.SELECT?.orderBy || arg.SELECT?.limit;
1305
+ const queryEnv = sqliteNeedsGrouping ? argEnv.withIncreasedIndent() : argEnv;
1306
+ const queryString = renderQuery( arg, queryEnv, elements || query.SET.elements, false);
1307
+ if (sqliteNeedsGrouping)
1308
+ return `SELECT *\n${ argEnv.indent }FROM (${ queryString })`;
1309
+ return queryString;
1310
+ }
1311
+
1312
+ // Nested sets and operands with their own ORDER BY or LIMIT need grouping.
1313
+ const needsGrouping = arg.SET || arg.SELECT?.orderBy || arg.SELECT?.limit;
1293
1314
  const queryString = renderQuery( arg, argEnv, elements || query.SET.elements, false);
1294
- return (arg.SET || arg.SELECT?.orderBy || arg.SELECT?.limit) ? `(${ queryString })` : queryString;
1315
+ return needsGrouping ? `(${ queryString })` : queryString;
1295
1316
  })
1296
1317
  .join(`\n${ env.indent }${ query.SET.op?.toUpperCase() }${ query.SET.all ? ' ALL ' : ' ' }`);
1297
1318
 
@@ -1332,13 +1353,21 @@ function toSqlDdl( csn, options, messageFunctions ) {
1332
1353
  .join(',\n') }\n`;
1333
1354
  result += `${ env.indent }FROM ${ renderQuerySource( select.from, env.withSubPath([ 'from' ])) }`;
1334
1355
  if (select.where)
1335
- result += `\n${ env.indent }WHERE ${ renderExpr(select.where, env.withSubPath([ 'where' ])) }`;
1336
-
1337
- if (select.groupBy)
1338
- result += `\n${ env.indent }GROUP BY ${ select.groupBy.map((expr, i) => renderExpr(expr, env.withSubPath([ 'groupBy', i ]))).join(', ') }`;
1356
+ result += `\n${ env.indent }WHERE ${ renderExpr(select.where, env.withSubPath([ 'where' ]), true) }`;
1357
+
1358
+ // HANA rejects a bare predicate as a grouping expression; it is a value position,
1359
+ // so wrap a top-level predicate like a select-list column (see renderViewColumn).
1360
+ if (select.groupBy) {
1361
+ result += `\n${ env.indent }GROUP BY ${ select.groupBy.map((expr, i) => {
1362
+ const e = env.withSubPath([ 'groupBy', i ]);
1363
+ return (options.sqlDialect === 'hana' && isTopLevelPredicate(expr))
1364
+ ? wrapPredicateInCase(renderExpr({ xpr: expr.xpr }, e))
1365
+ : renderExpr(expr, e);
1366
+ }).join(', ') }`;
1367
+ }
1339
1368
 
1340
1369
  if (select.having)
1341
- result += `\n${ env.indent }HAVING ${ renderExpr(select.having, env.withSubPath([ 'having' ])) }`;
1370
+ result += `\n${ env.indent }HAVING ${ renderExpr(select.having, env.withSubPath([ 'having' ]), true) }`;
1342
1371
 
1343
1372
  if (select.orderBy)
1344
1373
  result += `\n${ env.indent }ORDER BY ${ select.orderBy.map((entry, i) => renderOrderByEntry(entry, env.withSubPath([ 'orderBy', i ]))).join(', ') }`;
@@ -1388,7 +1417,10 @@ function toSqlDdl( csn, options, messageFunctions ) {
1388
1417
  * @returns {string} Rendered ORDER BY entry
1389
1418
  */
1390
1419
  function renderOrderByEntry( entry, env ) {
1391
- let result = renderExpr(entry, env);
1420
+ // ORDER BY is a value position too; wrap a bare predicate as in GROUP BY.
1421
+ let result = (options.sqlDialect === 'hana' && isTopLevelPredicate(entry))
1422
+ ? wrapPredicateInCase(renderExpr({ xpr: entry.xpr }, env))
1423
+ : renderExpr(entry, env);
1392
1424
  if (entry.sort)
1393
1425
  result += ` ${ entry.sort.toUpperCase() }`;
1394
1426
 
@@ -1447,7 +1479,12 @@ function toSqlDdl( csn, options, messageFunctions ) {
1447
1479
  // The SQL standard 2016 describes the syntax in section 11.3 - 11.4
1448
1480
  // of the SQL Foundation spec (for 2003 in 5WD-02-Foundation-2003-09.pdf). Summarized:
1449
1481
  // <generation clause> ::= GENERATED ALWAYS AS '(' <value expression> ')'
1450
- result += ` GENERATED ALWAYS AS (${ renderExpr(elm.value, env.withSubPath([ 'value' ])) })`;
1482
+ const valueEnv = env.withSubPath([ 'value' ]);
1483
+ // HANA rejects a bare predicate here; wrap it.
1484
+ const rendered = (options.sqlDialect === 'hana' && isTopLevelPredicate(elm.value))
1485
+ ? wrapStoredPredicateInCase(renderExpr({ xpr: elm.value.xpr }, valueEnv))
1486
+ : renderExpr(elm.value, valueEnv);
1487
+ result += ` GENERATED ALWAYS AS (${ rendered })`;
1451
1488
  // However, it appears many databases require a trailing "STORED".
1452
1489
  if (options.sqlDialect === 'sqlite' || options.sqlDialect === 'postgres')
1453
1490
  result += ' STORED';
@@ -1663,7 +1700,7 @@ function toSqlDdl( csn, options, messageFunctions ) {
1663
1700
  // Filter, possibly with cardinality
1664
1701
  // FIXME: Does SQL understand filter cardinalities?
1665
1702
  const cardinality = s.cardinality ? (`${ s.cardinality.max }: `) : '';
1666
- result += `[${ cardinality }${ renderExpr(s.where, env.withSubPath([ 'where' ])) }]`;
1703
+ result += `[${ cardinality }${ renderExpr(s.where, env.withSubPath([ 'where' ]), true) }]`;
1667
1704
  }
1668
1705
  return result;
1669
1706
  }
@@ -1743,6 +1780,19 @@ function wrapPredicateInCase( predicate ) {
1743
1780
  return `CASE WHEN (${ predicate }) THEN TRUE WHEN NOT (${ predicate }) THEN FALSE END`;
1744
1781
  }
1745
1782
 
1783
+ /**
1784
+ * Wrap a rendered predicate for a stored (`GENERATED ALWAYS AS`) column on HANA.
1785
+ * A generated column can't hold a nullable computed boolean (HANA rejects it with
1786
+ * `to_boolean function is not supported`), so `ELSE FALSE` is used instead of the
1787
+ * three-valued `WHEN NOT (p)`, collapsing a NULL predicate to FALSE.
1788
+ *
1789
+ * @param {string} predicate Rendered predicate SQL
1790
+ * @return {string}
1791
+ */
1792
+ function wrapStoredPredicateInCase( predicate ) {
1793
+ return `CASE WHEN (${ predicate }) THEN TRUE ELSE FALSE END`;
1794
+ }
1795
+
1746
1796
  /**
1747
1797
  * Render the given string for SQL databases.
1748
1798
  *
@@ -19,7 +19,7 @@ const functionsWithoutParams = {
19
19
 
20
20
  const {
21
21
  hasValidSkipOrExists, forEachDefinition, getNamespace, getUnderscoredName,
22
- } = require('../../model/csnUtils');
22
+ } = require('../../base/csnUtils');
23
23
 
24
24
  const { implicitAs } = require('../../base/csnRefs');
25
25
 
@@ -181,7 +181,88 @@ function isPredicateTree( tree ) {
181
181
  return predicateOperators.has(op);
182
182
  }
183
183
 
184
+ // HANA renders these as a value form (`CASE … END`); in predicate position they must be
185
+ // compared to `TRUE` to become a predicate again (see `addTrueComparisonToBooleanFunctions`).
186
+ // Names must match the mapped forms in `standardDatabaseFunctions` exactly (case-sensitive):
187
+ // a differently-cased name (e.g. `CONTAINS`) opts out of the mapping and stays native.
188
+ const predicateValueFunctions = new Set( [
189
+ 'contains', 'startswith', 'endswith', 'matchespattern', 'matchesPattern',
190
+ ] );
191
+
192
+ /**
193
+ * Rewrite boolean-valued OData function nodes in genuine predicate position within a
194
+ * condition (WHERE/HAVING/ON) to `<func> = TRUE`, so the HANA value form becomes a
195
+ * predicate. Affected are the condition itself and operands of `and`/`or`/`not` and
196
+ * `CASE WHEN`; not operands of a comparison (`contains(x, y) = false`), value operator,
197
+ * or function argument, where the value form must stay so the surrounding expression is
198
+ * valid. Mutates `tree` in place.
199
+ *
200
+ * @param {object[]} tree Structurized condition tree (see `csnAsTree()`)
201
+ */
202
+ function addTrueComparisonToBooleanFunctions( tree ) {
203
+ return visit(tree, true);
204
+
205
+ // Returns the (possibly rewritten) node so callers can write it back into their slot.
206
+ function visit( node, inPredicate ) {
207
+ if (!node || typeof node !== 'object')
208
+ return node;
209
+
210
+ if (Array.isArray(node)) {
211
+ if (node.length === 1) { // single-element wrapper that csnAsTree() puts around the expression
212
+ node[0] = visit(node[0], inPredicate);
213
+ }
214
+ else if (node[0] === 'case') {
215
+ visitCase(node);
216
+ }
217
+ else if (typeof node[0] === 'string') { // prefix: `not`/`exists` keep a predicate
218
+ const keepsPredicate = node[0] === 'not' || node[0] === 'exists';
219
+ for (let i = 1; i < node.length; ++i)
220
+ node[i] = visit(node[i], inPredicate && keepsPredicate);
221
+ }
222
+ else { // binary `[ lhs, op, rhs ]`: only `and`/`or` operands stay predicates
223
+ const isLogical = node[1] === 'and' || node[1] === 'or';
224
+ node[0] = visit(node[0], inPredicate && isLogical);
225
+ node[2] = visit(node[2], inPredicate && isLogical);
226
+ }
227
+ return node;
228
+ }
229
+
230
+ if (node.func && predicateValueFunctions.has(node.func)) {
231
+ // 3-arg `contains` is native HANA CONTAINS (a predicate), not the value form.
232
+ const isValueForm = !(node.func === 'contains' && node.args?.length > 2);
233
+ if (inPredicate && isValueForm)
234
+ return [ node, '=', { val: true } ];
235
+ }
236
+ else if (node.xpr) {
237
+ if (node.xpr[0] === 'case')
238
+ visitCase(node.xpr);
239
+ else
240
+ node.xpr = visit(csnAsTree(node.xpr), inPredicate);
241
+ }
242
+ return node;
243
+ }
244
+
245
+ // In a searched CASE (`case when <cond> …`) the element after `when` is a condition; in a
246
+ // simple CASE (`case <op> when <val> …`) it is a value compared to the operand, so nothing
247
+ // is a predicate. A non-string node before the first `when` marks the simple form.
248
+ function visitCase( xpr ) {
249
+ const isSimple = xpr[1] != null && typeof xpr[1] === 'object';
250
+ for (let i = 0; i < xpr.length; ++i) {
251
+ const kw = typeof xpr[i] === 'string' && xpr[i].toLowerCase();
252
+ if (kw === 'when' || kw === 'then' || kw === 'else') {
253
+ if (xpr[i + 1] && typeof xpr[i + 1] === 'object')
254
+ xpr[i + 1] = visit(csnAsTree([ xpr[i + 1] ]), !isSimple && kw === 'when');
255
+ i += 1;
256
+ }
257
+ else if (i === 1 && isSimple) { // the simple-CASE operand is a value
258
+ xpr[i] = visit(csnAsTree([ xpr[i] ]), false);
259
+ }
260
+ }
261
+ }
262
+ }
263
+
184
264
  module.exports = {
185
265
  transformExprOperators,
186
266
  isTopLevelPredicate,
267
+ addTrueComparisonToBooleanFunctions,
187
268
  };