@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.
- package/CHANGELOG.md +53 -0
- package/bin/add.js +7 -2
- package/bin/bind.js +0 -2
- package/bin/bindings.js +35 -0
- package/bin/build.js +11 -6
- package/bin/compile/index.js +1 -0
- package/bin/completion/index.js +10 -448
- package/bin/completion/scripts/cds.fish +24 -16
- package/bin/completion/scripts/cds.ps1 +26 -25
- package/bin/completion/scripts/cds.sh +22 -19
- package/bin/completion/scripts/cds.zsh +22 -19
- package/bin/deploy/index.js +1 -1
- package/bin/deploy/to-hana/hana.js +5 -4
- package/bin/env.js +0 -1
- package/bin/eval.js +9 -5
- package/bin/export.js +6 -4
- package/bin/help/export.md +28 -4
- package/bin/import.js +6 -5
- package/bin/inspect.js +0 -1
- package/bin/login.js +28 -3
- package/bin/repl.js +82 -26
- package/bin/run.js +6 -7
- package/bin/serve.js +6 -7
- package/bin/up.js +7 -2
- package/bin/upgrade/steps/install.js +6 -6
- package/bin/watch/index.js +1 -0
- package/lib/build/index.js +11 -7
- package/lib/build/plugins/featureToggles.js +2 -2
- package/lib/build/plugins/hana/index.js +1 -1
- package/lib/build/plugins/helm/files/subcharts/web-application/Chart.yaml +1 -1
- package/lib/build/plugins/helm/files/subcharts/web-application/templates/_helpers.tpl +7 -0
- package/lib/build/plugins/helm/files/subcharts/web-application/templates/api-rule.yaml +1 -0
- package/lib/build/plugins/helm/files/subcharts/web-application/templates/service-binding.yaml +4 -4
- package/lib/build/plugins/helm/files/subcharts/web-application/values.schema.json +13 -0
- package/lib/build/plugins/helm/files/subcharts/web-application/values.yaml +7 -1
- package/lib/build/plugins/internal.js +0 -26
- package/lib/build/plugins/java/index.js +5 -1
- package/lib/build/plugins/nodejs/index.js +13 -4
- package/lib/build/util.js +4 -5
- package/lib/cds.js +8 -2
- package/lib/env/schemas/cds-rc.js +5 -0
- package/lib/import/importapi.js +2 -3
- package/lib/init/constants.js +1 -1
- package/lib/init/index.js +8 -3
- package/lib/init/merge.js +21 -17
- package/lib/init/plugin.js +1 -1
- package/lib/init/projectReader.js +13 -10
- package/lib/init/registries/mta.js +0 -6
- package/lib/init/template/ai/index.js +4 -4
- package/lib/init/template/ams/files/extensionDeveloper.dcl +6 -0
- package/lib/init/template/ams/files/mta.yaml.hbs +6 -0
- package/lib/init/template/ams/files/sidecar.package.json.hbs +5 -0
- package/lib/init/template/ams/index.js +42 -40
- package/lib/init/template/app-frontend/files/mta.yaml.hbs +2 -0
- package/lib/init/template/app-frontend/files/ui5.yaml.hbs +0 -4
- package/lib/init/template/app-frontend/index.js +29 -24
- package/lib/init/template/application-logging/index.js +6 -6
- package/lib/init/template/approuter/files/xs-app.json.hbs +22 -0
- package/lib/init/template/approuter/index.js +20 -13
- package/lib/init/template/attachments/index.js +3 -3
- package/lib/init/template/audit-logging/index.js +4 -4
- package/lib/init/template/cloud-logging/index.js +12 -6
- package/lib/init/template/completion/completionSetup.js +19 -6
- package/lib/init/template/connectivity/index.js +3 -3
- package/lib/init/template/data/as-csv.js +7 -4
- package/lib/init/template/data/as-json.js +77 -20
- package/lib/init/template/destination/index.js +12 -9
- package/lib/init/template/dynatrace/index.js +5 -5
- package/lib/init/template/enterprise-messaging/index.js +10 -7
- package/lib/init/template/enterprise-messaging-shared/index.js +4 -4
- package/lib/init/template/event-mesh/index.js +3 -0
- package/lib/init/template/extensibility/index.js +2 -2
- package/lib/init/template/extension/index.js +26 -0
- package/lib/init/template/github-actions/index.js +3 -3
- package/lib/init/template/hana/files/package.json.hbs +3 -2
- package/lib/init/template/hana/index.js +5 -5
- package/lib/init/template/hana-serverless/index.js +3 -3
- package/lib/init/template/html5-repo/files/mta.yaml.hbs +2 -0
- package/lib/init/template/html5-repo/files/ui5.yaml.hbs +0 -4
- package/lib/init/template/html5-repo/index.js +68 -40
- package/lib/init/template/http/index.js +1 -1
- package/lib/init/template/ias/index.js +7 -7
- package/lib/init/template/initial/files/.gitignore.hbs +1 -0
- package/lib/init/template/kafka/index.js +3 -3
- package/lib/init/template/kyma/index.js +7 -9
- package/lib/init/template/malware-scanner/index.js +3 -3
- package/lib/init/template/mta/index.js +6 -3
- package/lib/init/template/multitenancy/index.js +6 -7
- package/lib/init/template/notifications/index.js +2 -2
- package/lib/init/template/portal/index.js +16 -10
- package/lib/init/template/postgres/index.js +5 -5
- package/lib/init/template/react/files/index.html.hbs +1 -1
- package/lib/init/template/react/files/package.json.hbs +3 -2
- package/lib/init/template/react/files/src/{App.jsx.hbs → App.{{jsxExtension}}.hbs} +8 -2
- package/lib/init/template/react/files/src/{main.jsx → main.{{jsxExtension}}.hbs} +2 -2
- package/lib/init/template/react/index.js +23 -4
- package/lib/init/template/react/typescript/src/vite-env.d.ts +1 -0
- package/lib/init/template/react/typescript/tsconfig.json.hbs +16 -0
- package/lib/init/template/redis/index.js +2 -2
- package/lib/init/template/side-by-side-extensibility/index.js +6 -3
- package/lib/init/template/typescript/files/tsconfig.json +3 -1
- package/lib/init/template/vue/files/index.html.hbs +1 -1
- package/lib/init/template/vue/files/package.json.hbs +2 -1
- package/lib/init/template/vue/files/src/App.vue.hbs +8 -2
- package/lib/init/template/vue/index.js +20 -4
- package/lib/init/template/vue/typescript/tsconfig.json +11 -0
- package/lib/init/template/workzone-standard/files/mta.yaml.hbs +2 -2
- package/lib/init/template/workzone-standard/index.js +30 -28
- package/lib/init/template/xsuaa/files/mta.yaml.hbs +1 -1
- package/lib/init/template/xsuaa/files/values.yaml.hbs +1 -1
- package/lib/init/template/xsuaa/index.js +34 -22
- package/lib/mtx/auth_manager.js +8 -2
- package/lib/mtx/browser_login.js +181 -0
- package/lib/mtx/params.js +6 -0
- package/lib/mtx/settings_manager.js +29 -4
- package/lib/util/cf.js +44 -8
- package/lib/util/fs.js +2 -2
- package/node_modules/@cap-js/db-service/CHANGELOG.md +23 -0
- package/node_modules/@cap-js/db-service/lib/cqn2pql.js +4 -0
- package/node_modules/@cap-js/db-service/lib/cqn2sql.js +3 -0
- package/node_modules/@cap-js/db-service/lib/cqn4sql.js +17 -28
- package/node_modules/@cap-js/db-service/lib/infer/index.js +20 -27
- package/node_modules/@cap-js/db-service/package.json +1 -1
- package/node_modules/@cap-js/openapi/cds-plugin.js +12 -0
- package/node_modules/@cap-js/openapi/index.js +3 -1
- package/node_modules/@cap-js/openapi/lib/compile/csdl2openapi.js +652 -413
- package/node_modules/@cap-js/openapi/lib/compile/diagram.js +16 -13
- package/node_modules/@cap-js/openapi/lib/compile/index.js +10 -7
- package/node_modules/@cap-js/openapi/lib/compile/property-util.js +51 -0
- package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/importOpenAPI.js +12 -9
- package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/index.js +4 -3
- package/node_modules/@cap-js/openapi/package.json +71 -3
- package/node_modules/@cap-js/sqlite/CHANGELOG.md +18 -0
- package/node_modules/@cap-js/sqlite/package.json +3 -3
- package/node_modules/@isaacs/fs-minipass/LICENSE +15 -0
- package/node_modules/@isaacs/fs-minipass/README.md +71 -0
- package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts +118 -0
- package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js +430 -0
- package/node_modules/@isaacs/fs-minipass/dist/commonjs/index.js.map +1 -0
- package/node_modules/@isaacs/fs-minipass/dist/commonjs/package.json +3 -0
- package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts +118 -0
- package/node_modules/@isaacs/fs-minipass/dist/esm/index.d.ts.map +1 -0
- package/node_modules/@isaacs/fs-minipass/dist/esm/index.js +420 -0
- package/node_modules/@isaacs/fs-minipass/dist/esm/index.js.map +1 -0
- package/node_modules/@isaacs/fs-minipass/dist/esm/package.json +3 -0
- package/node_modules/@isaacs/fs-minipass/package.json +72 -0
- package/node_modules/@sap/cds/CHANGELOG.md +71 -1
- package/node_modules/@sap/cds/_i18n/messages_ar.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_bg.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_cs.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_da.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_de.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_el.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_en.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_es.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_es_MX.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_fi.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_fr.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_he.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_hr.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_hu.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_it.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_ja.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_kk.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_ko.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_ms.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_nl.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_no.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_pl.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_pt.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_ro.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_ru.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_sh.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_sk.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_sl.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_sv.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_th.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_tr.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_uk.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_vi.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_zh_CN.properties +1 -0
- package/node_modules/@sap/cds/_i18n/messages_zh_TW.properties +1 -0
- package/node_modules/@sap/cds/app/index-client.js +164 -0
- package/node_modules/@sap/cds/app/index.css +598 -87
- package/node_modules/@sap/cds/app/index.html +54 -30
- package/node_modules/@sap/cds/app/index.js +311 -67
- package/node_modules/@sap/cds/app/table.html +226 -0
- package/node_modules/@sap/cds/app/table.js +302 -0
- package/node_modules/@sap/cds/bin/serve.js +3 -2
- package/node_modules/@sap/cds/common.cds +3 -3
- package/node_modules/@sap/cds/eslint.config.mjs +2 -0
- package/node_modules/@sap/cds/lib/compile/cdsc.js +7 -0
- package/node_modules/@sap/cds/lib/compile/for/embeddings.js +27 -0
- package/node_modules/@sap/cds/lib/compile/load.js +2 -2
- package/node_modules/@sap/cds/lib/compile/minify.js +17 -2
- package/node_modules/@sap/cds/lib/compile/parse.js +3 -0
- package/node_modules/@sap/cds/lib/compile/resolve.js +16 -14
- package/node_modules/@sap/cds/lib/core/classes.js +1 -0
- package/node_modules/@sap/cds/lib/dbs/cds-deploy.js +4 -5
- package/node_modules/@sap/cds/lib/env/cds-env.js +132 -70
- package/node_modules/@sap/cds/lib/env/cds-requires/auth-strategies.js +62 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/databases.js +49 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/embeddings.js +8 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/index.js +27 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/messaging.js +82 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/platform.js +23 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/queues.js +34 -0
- package/node_modules/@sap/cds/lib/env/cds-requires/services.js +32 -0
- package/node_modules/@sap/cds/lib/env/defaults.js +9 -1
- package/node_modules/@sap/cds/lib/i18n/files.js +4 -4
- package/node_modules/@sap/cds/lib/i18n/locale.js +1 -1
- package/node_modules/@sap/cds/lib/index.js +9 -9
- package/node_modules/@sap/cds/lib/log/cds-log.js +3 -3
- package/node_modules/@sap/cds/lib/ql/SELECT.js +2 -0
- package/node_modules/@sap/cds/lib/ql/UPDATE.js +1 -1
- package/node_modules/@sap/cds/lib/ql/cds.ql-Query.js +4 -1
- package/node_modules/@sap/cds/lib/ql/core/@types/cqn.d.ts +146 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/exprs.d.ts +51 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/index.d.ts +29 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/package.json +7 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/ql/delete.d.ts +8 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/ql/insert.d.ts +19 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/ql/select.d.ts +24 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/ql/update.d.ts +10 -0
- package/node_modules/@sap/cds/lib/ql/core/@types/query.d.ts +18 -0
- package/node_modules/@sap/cds/lib/ql/core/cql/parser.min.js +1 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/index.js +69 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/cache.js +34 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/call-action.js +6 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/delete.js +8 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/insert.js +26 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/select.js +22 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/ql/update.js +26 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/query.js +85 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/xl/fluent.js +47 -0
- package/node_modules/@sap/cds/lib/ql/core/lib/xl/ttl.js +24 -0
- package/node_modules/@sap/cds/lib/ql/core/license +201 -0
- package/node_modules/@sap/cds/lib/ql/core/package.json +24 -0
- package/node_modules/@sap/cds/lib/ql/core/readme.md +99 -0
- package/node_modules/@sap/cds/lib/ql/core/upstream.json +5 -0
- package/node_modules/@sap/cds/lib/req/spawn.js +1 -1
- package/node_modules/@sap/cds/lib/srv/bindings.js +111 -115
- package/node_modules/@sap/cds/lib/srv/cds-connect.js +11 -10
- package/node_modules/@sap/cds/lib/srv/cds-serve.js +16 -7
- package/node_modules/@sap/cds/lib/srv/cds.Service.js +13 -7
- package/node_modules/@sap/cds/lib/srv/factory.js +8 -10
- package/node_modules/@sap/cds/lib/srv/middlewares/auth/ias-auth.js +35 -32
- package/node_modules/@sap/cds/lib/srv/middlewares/auth/jwt-auth.js +5 -1
- package/node_modules/@sap/cds/lib/srv/middlewares/auth/mocked-users.js +1 -1
- package/node_modules/@sap/cds/lib/srv/protocols/hcql.js +230 -79
- package/node_modules/@sap/cds/lib/srv/protocols/http.js +7 -3
- package/node_modules/@sap/cds/lib/srv/protocols/index.js +7 -2
- package/node_modules/@sap/cds/lib/srv/srv-dispatch.js +2 -2
- package/node_modules/@sap/cds/lib/utils/cds-utils.js +37 -0
- package/node_modules/@sap/cds/lib/utils/csv-reader.js +2 -2
- package/node_modules/@sap/cds/libx/_runtime/common/generic/assert.js +18 -27
- package/node_modules/@sap/cds/libx/_runtime/common/generic/crud.js +8 -2
- package/node_modules/@sap/cds/libx/_runtime/common/utils/cqn.js +1 -1
- package/node_modules/@sap/cds/libx/_runtime/common/utils/rewriteAsterisks.js +1 -1
- package/node_modules/@sap/cds/libx/_runtime/fiori/lean-draft.js +122 -85
- package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/authorizedRequest.js +24 -1
- package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/normalizeIncomingMessage.js +1 -1
- package/node_modules/@sap/cds/libx/_runtime/messaging/kafka.js +1 -1
- package/node_modules/@sap/cds/libx/_runtime/remote/Service.js +2 -2
- package/node_modules/@sap/cds/libx/_runtime/remote/utils/client.js +3 -2
- package/node_modules/@sap/cds/libx/_runtime/remote/utils/query.js +11 -6
- package/node_modules/@sap/cds/libx/http/location.js +10 -11
- package/node_modules/@sap/cds/libx/odata/middleware/create.js +4 -0
- package/node_modules/@sap/cds/libx/odata/middleware/metadata.js +1 -1
- package/node_modules/@sap/cds/libx/odata/middleware/operation.js +3 -0
- package/node_modules/@sap/cds/libx/odata/middleware/parse.js +9 -0
- package/node_modules/@sap/cds/libx/odata/middleware/read.js +7 -1
- package/node_modules/@sap/cds/libx/odata/middleware/update.js +5 -1
- package/node_modules/@sap/cds/libx/odata/parse/afterburner.js +3 -3
- package/node_modules/@sap/cds/libx/odata/parse/multipartToJson.js +1 -1
- package/node_modules/@sap/cds/libx/odata/utils/ieee754.js +20 -0
- package/node_modules/@sap/cds/libx/queue/SchedulingService.js +4 -0
- package/node_modules/@sap/cds/libx/queue/api.js +1 -1
- package/node_modules/@sap/cds/libx/queue/index.js +46 -10
- package/node_modules/@sap/cds/libx/queue/processing.js +52 -16
- package/node_modules/@sap/cds/libx/queue/utils.js +3 -0
- package/node_modules/@sap/cds/libx/rest/RestAdapter.js +1 -0
- package/node_modules/@sap/cds/package.json +2 -2
- package/node_modules/@sap/cds/server.js +1 -0
- package/node_modules/@sap/cds/srv/ucl-service.cds +1 -0
- package/node_modules/@sap/cds/tasks/enterprise-messaging-deploy.js +13 -5
- package/node_modules/@sap/cds-compiler/CHANGELOG.md +83 -0
- package/node_modules/@sap/cds-compiler/bin/cdsse.js +1 -1
- package/node_modules/@sap/cds-compiler/doc/EffectiveCSN.md +3314 -0
- package/node_modules/@sap/cds-compiler/lib/api/main.js +9 -6
- package/node_modules/@sap/cds-compiler/lib/api/options.js +3 -3
- package/node_modules/@sap/cds-compiler/lib/{model → base}/csnUtils.js +5 -5
- package/node_modules/@sap/cds-compiler/lib/base/message-registry.js +54 -6
- package/node_modules/@sap/cds-compiler/lib/base/optionProcessor.js +4 -4
- package/node_modules/@sap/cds-compiler/lib/{model → base}/sortViews.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/assocOutsideService.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/checkForTypes.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/checkPathsInStoredCalcElement.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/elements.js +37 -3
- package/node_modules/@sap/cds-compiler/lib/checks/enricher.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/existsInForbiddenPlaces.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/hasPersistedElements.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/manyExpand.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/manyNavigations.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/onConditions.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/parameters.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/queryNoDbArtifacts.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/selectItems.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/structuredAnnoExpressions.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/typeParameters.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/types.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/checks/validator.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/compiler/assert-consistency.js +20 -12
- package/node_modules/@sap/cds-compiler/lib/compiler/builtins.js +9 -4
- package/node_modules/@sap/cds-compiler/lib/compiler/checks.js +50 -0
- package/node_modules/@sap/cds-compiler/lib/compiler/define.js +303 -323
- package/node_modules/@sap/cds-compiler/lib/compiler/dictionaries.js +5 -0
- package/node_modules/@sap/cds-compiler/lib/compiler/extend.js +1015 -1177
- package/node_modules/@sap/cds-compiler/lib/compiler/generate.js +55 -42
- package/node_modules/@sap/cds-compiler/lib/compiler/populate.js +74 -45
- package/node_modules/@sap/cds-compiler/lib/compiler/propagator.js +1 -0
- package/node_modules/@sap/cds-compiler/lib/compiler/resolve.js +6 -4
- package/node_modules/@sap/cds-compiler/lib/compiler/shared.js +30 -49
- package/node_modules/@sap/cds-compiler/lib/compiler/utils.js +32 -18
- package/node_modules/@sap/cds-compiler/lib/edm/annotations/edmJson.js +3 -3
- package/node_modules/@sap/cds-compiler/lib/edm/annotations/genericTranslation.js +2 -2
- package/node_modules/@sap/cds-compiler/lib/edm/annotations/preprocessAnnotations.js +2 -3
- package/node_modules/@sap/cds-compiler/lib/edm/csn2edm.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/edm/edm.js +6 -7
- package/node_modules/@sap/cds-compiler/lib/edm/edmAnnoPreprocessor.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/edm/edmInboundChecks.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/edm/edmPreprocessor.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/edm/edmUtils.js +12 -7
- package/node_modules/@sap/cds-compiler/lib/gen/CdlGrammar.checksum +1 -1
- package/node_modules/@sap/cds-compiler/lib/gen/CdlParser.js +15 -15
- package/node_modules/@sap/cds-compiler/lib/gen/Dictionary.json +7 -0
- package/node_modules/@sap/cds-compiler/lib/json/from-csn.js +30 -30
- package/node_modules/@sap/cds-compiler/lib/json/to-csn.js +2 -1
- package/node_modules/@sap/cds-compiler/lib/main.js +4 -1
- package/node_modules/@sap/cds-compiler/lib/parsers/AstBuildingParser.js +42 -15
- package/node_modules/@sap/cds-compiler/lib/render/DuplicateChecker.js +37 -11
- package/node_modules/@sap/cds-compiler/lib/render/manageConstraints.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/render/toCdl.js +11 -6
- package/node_modules/@sap/cds-compiler/lib/render/toRename.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/render/toSql.js +74 -24
- package/node_modules/@sap/cds-compiler/lib/render/utils/common.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/render/utils/operators.js +81 -0
- package/node_modules/@sap/cds-compiler/lib/render/utils/sql.js +17 -10
- package/node_modules/@sap/cds-compiler/lib/transform/db/assertUnique.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/associations.js +3 -4
- package/node_modules/@sap/cds-compiler/lib/transform/db/assocsToQueries/transformExists.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/backlinks.js +2 -2
- package/node_modules/@sap/cds-compiler/lib/transform/db/cdsPersistence.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/constraints.js +6 -5
- package/node_modules/@sap/cds-compiler/lib/transform/db/expansion.js +7 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/flattening.js +2 -2
- package/node_modules/@sap/cds-compiler/lib/{modelCompare/compare.js → transform/db/migration/diffModels.js} +5 -5
- package/node_modules/@sap/cds-compiler/lib/{modelCompare/utils/filter.js → transform/db/migration/filterDiff.js} +2 -2
- package/node_modules/@sap/cds-compiler/lib/transform/db/processSqlServices.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/rewriteCalculatedElements.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/temporal.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/db/views.js +2 -6
- package/node_modules/@sap/cds-compiler/lib/transform/draft/db.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/draft/odata.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/annotations.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/associations.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/flattening.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/main.js +3 -2
- package/node_modules/@sap/cds-compiler/lib/transform/effective/misc.js +2 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/queries.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/effective/types.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/forOdata.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/forRelationalDB.js +9 -4
- package/node_modules/@sap/cds-compiler/lib/transform/localized.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/odata/adaptAnnotationRefs.js +5 -11
- package/node_modules/@sap/cds-compiler/lib/transform/odata/createForeignKeys.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/odata/flattening.js +4 -4
- package/node_modules/@sap/cds-compiler/lib/transform/odata/foreignKeyRefsInXprAnnos.js +5 -3
- package/node_modules/@sap/cds-compiler/lib/transform/odata/toFinalBaseType.js +29 -5
- package/node_modules/@sap/cds-compiler/lib/transform/odata/typesExposure.js +13 -3
- package/node_modules/@sap/cds-compiler/lib/transform/odata/utils.js +9 -0
- package/node_modules/@sap/cds-compiler/lib/transform/transformUtils.js +2 -2
- package/node_modules/@sap/cds-compiler/lib/transform/translateAssocsToJoins.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/tupleExpansion.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/coreComputed.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/universalCsnEnricher.js +1 -1
- package/node_modules/@sap/cds-compiler/lib/transform/universalCsn/utils.js +1 -1
- package/node_modules/@sap/cds-compiler/package.json +1 -1
- package/node_modules/@sap/cds-mtxs/CHANGELOG.md +47 -0
- package/node_modules/@sap/cds-mtxs/bin/cds-mtx-migrate.js +4 -6
- package/node_modules/@sap/cds-mtxs/bin/cds-mtx.js +5 -4
- package/node_modules/@sap/cds-mtxs/cds-plugin.js +38 -2
- package/node_modules/@sap/cds-mtxs/db/t0.cds +7 -0
- package/node_modules/@sap/cds-mtxs/lib/utils.js +129 -20
- package/node_modules/@sap/cds-mtxs/package.json +15 -14
- package/node_modules/@sap/cds-mtxs/srv/cf/abstract-provisioning-service.js +13 -12
- package/node_modules/@sap/cds-mtxs/srv/cf/saas-provisioning-service.cds +1 -0
- package/node_modules/@sap/cds-mtxs/srv/cf/sms-provisioning-service.cds +1 -0
- package/node_modules/@sap/cds-mtxs/srv/extensibility/compat/update.js +5 -2
- package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/config.js +1 -2
- package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/csv-allowlist.js +64 -0
- package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/index.js +4 -2
- package/node_modules/@sap/cds-mtxs/srv/extensibility/linter/protected-namespace.js +67 -5
- package/node_modules/@sap/cds-mtxs/srv/extensibility-service.js +179 -15
- package/node_modules/@sap/cds-mtxs/srv/jobs-service.js +12 -3
- package/node_modules/@sap/cds-mtxs/srv/plugins/common.js +33 -12
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/ctnr-mgr-base.js +24 -6
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-ctnr-mgr.js +3 -1
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/hdi-native.js +752 -0
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/serverless.js +17 -20
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr-v2.js +511 -0
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/srv-mgr.js +11 -4
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana/tms.js +8 -0
- package/node_modules/@sap/cds-mtxs/srv/plugins/hana.js +27 -18
- package/node_modules/@sap/cds-mtxs/srv/worker/job-worker-pool.js +1 -1
- package/node_modules/@sap/cds-mtxs/srv/worker/job-worker.js +1 -1
- package/node_modules/chownr/LICENSE.md +63 -0
- package/node_modules/chownr/README.md +3 -0
- package/node_modules/chownr/dist/commonjs/index.d.ts +3 -0
- package/node_modules/chownr/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/chownr/dist/commonjs/index.js +93 -0
- package/node_modules/chownr/dist/commonjs/index.js.map +1 -0
- package/node_modules/chownr/dist/commonjs/package.json +3 -0
- package/node_modules/chownr/dist/esm/index.d.ts +3 -0
- package/node_modules/chownr/dist/esm/index.d.ts.map +1 -0
- package/node_modules/chownr/dist/esm/index.js +85 -0
- package/node_modules/chownr/dist/esm/index.js.map +1 -0
- package/node_modules/chownr/dist/esm/package.json +3 -0
- package/node_modules/chownr/package.json +69 -0
- package/node_modules/content-disposition/README.md +105 -35
- package/node_modules/content-disposition/dist/index.d.ts +72 -0
- package/node_modules/content-disposition/dist/index.js +388 -0
- package/node_modules/content-disposition/dist/index.js.map +1 -0
- package/node_modules/content-disposition/package.json +31 -19
- package/node_modules/content-type/README.md +34 -57
- package/node_modules/content-type/package.json +35 -25
- package/node_modules/express/Readme.md +15 -9
- package/node_modules/express/lib/application.js +2 -2
- package/node_modules/express/lib/request.js +32 -19
- package/node_modules/express/lib/response.js +27 -30
- package/node_modules/express/package.json +10 -10
- package/node_modules/handlebars/bin/handlebars +1 -1
- package/node_modules/handlebars/dist/amd/handlebars/base.js +2 -2
- package/node_modules/handlebars/dist/amd/handlebars/compiler/base.js +2 -59
- package/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js +68 -5
- package/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js +160 -19
- package/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js +23 -7
- package/node_modules/handlebars/dist/amd/handlebars/compiler/node-types.js +12 -0
- package/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js +26 -7
- package/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js +9 -4
- package/node_modules/handlebars/dist/amd/handlebars/exception.js +8 -4
- package/node_modules/handlebars/dist/amd/handlebars/helpers/each.js +40 -14
- package/node_modules/handlebars/dist/amd/handlebars/internal/proto-access.js +21 -1
- package/node_modules/handlebars/dist/amd/handlebars/runtime.js +24 -4
- package/node_modules/handlebars/dist/amd/handlebars/utils.js +4 -3
- package/node_modules/handlebars/dist/amd/precompiler.js +13 -7
- package/node_modules/handlebars/dist/cjs/handlebars/base.js +2 -2
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js +1 -60
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js +64 -4
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js +161 -18
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js +23 -7
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/node-types.js +10 -0
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js +29 -6
- package/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js +9 -4
- package/node_modules/handlebars/dist/cjs/handlebars/exception.js +8 -4
- package/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js +40 -14
- package/node_modules/handlebars/dist/cjs/handlebars/internal/proto-access.js +21 -1
- package/node_modules/handlebars/dist/cjs/handlebars/runtime.js +24 -4
- package/node_modules/handlebars/dist/cjs/handlebars/utils.js +4 -3
- package/node_modules/handlebars/dist/cjs/precompiler.js +14 -6
- package/node_modules/handlebars/dist/handlebars.amd.js +401 -130
- package/node_modules/handlebars/dist/handlebars.amd.min.js +4 -4
- package/node_modules/handlebars/dist/handlebars.js +396 -125
- package/node_modules/handlebars/dist/handlebars.min.js +4 -4
- package/node_modules/handlebars/dist/handlebars.runtime.amd.js +100 -29
- package/node_modules/handlebars/dist/handlebars.runtime.amd.min.js +2 -2
- package/node_modules/handlebars/dist/handlebars.runtime.js +94 -23
- package/node_modules/handlebars/dist/handlebars.runtime.min.js +2 -2
- package/node_modules/handlebars/lib/handlebars/base.js +1 -1
- package/node_modules/handlebars/lib/handlebars/compiler/base.js +0 -67
- package/node_modules/handlebars/lib/handlebars/compiler/code-gen.js +65 -11
- package/node_modules/handlebars/lib/handlebars/compiler/compiler.js +164 -23
- package/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js +23 -7
- package/node_modules/handlebars/lib/handlebars/compiler/node-types.js +24 -0
- package/node_modules/handlebars/lib/handlebars/compiler/visitor.js +29 -5
- package/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js +16 -5
- package/node_modules/handlebars/lib/handlebars/exception.js +7 -3
- package/node_modules/handlebars/lib/handlebars/helpers/each.js +39 -16
- package/node_modules/handlebars/lib/handlebars/internal/proto-access.js +22 -0
- package/node_modules/handlebars/lib/handlebars/runtime.js +36 -4
- package/node_modules/handlebars/lib/handlebars/utils.js +3 -2
- package/node_modules/handlebars/lib/precompiler.js +14 -5
- package/node_modules/handlebars/package.json +2 -2
- package/node_modules/handlebars/release-notes.md +20 -1
- package/node_modules/handlebars/types/index.d.ts +8 -0
- package/node_modules/hdb/cfg/VERSION +1 -1
- package/node_modules/hdb/lib/Client.js +6 -2
- package/node_modules/hdb/lib/protocol/ClientInfo.js +28 -15
- package/node_modules/hdb/lib/protocol/Connection.js +30 -3
- package/node_modules/hdb/lib/protocol/Writer.js +2 -2
- package/node_modules/hdb/lib/protocol/common/ConnectOption.js +2 -0
- package/node_modules/hdb/lib/protocol/common/ConnectOptionFlagSet1.js +18 -0
- package/node_modules/hdb/lib/protocol/common/ConnectOptionType.js +2 -0
- package/node_modules/hdb/lib/protocol/common/Constants.js +1 -0
- package/node_modules/hdb/lib/protocol/common/MessageType.js +3 -2
- package/node_modules/hdb/lib/protocol/common/PartKind.js +2 -1
- package/node_modules/hdb/lib/protocol/common/index.js +1 -0
- package/node_modules/hdb/lib/protocol/data/TextList.js +25 -17
- package/node_modules/hdb/lib/protocol/data/index.js +1 -0
- package/node_modules/hdb/lib/protocol/part/ConnectOptions.js +7 -0
- package/node_modules/hdb/lib/protocol/request/index.js +7 -0
- package/node_modules/hdb/package.json +1 -2
- package/node_modules/livereload-js/.github/workflows/main.yml +4 -4
- package/node_modules/livereload-js/README.md +3 -3
- package/node_modules/livereload-js/dist/livereload.js +839 -2742
- package/node_modules/livereload-js/dist/livereload.min.js +1 -1
- package/node_modules/livereload-js/package.json +11 -11
- package/node_modules/minipass/LICENSE.md +55 -0
- package/node_modules/minipass/README.md +825 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts +545 -0
- package/node_modules/minipass/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/commonjs/index.js +1038 -0
- package/node_modules/minipass/dist/commonjs/index.js.map +1 -0
- package/node_modules/minipass/dist/commonjs/package.json +3 -0
- package/node_modules/minipass/dist/esm/index.d.ts +545 -0
- package/node_modules/minipass/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minipass/dist/esm/index.js +1020 -0
- package/node_modules/minipass/dist/esm/index.js.map +1 -0
- package/node_modules/minipass/dist/esm/package.json +3 -0
- package/node_modules/minipass/package.json +77 -0
- package/node_modules/minizlib/LICENSE +26 -0
- package/node_modules/minizlib/README.md +64 -0
- package/node_modules/minizlib/dist/commonjs/constants.d.ts +2 -0
- package/node_modules/minizlib/dist/commonjs/constants.d.ts.map +1 -0
- package/node_modules/minizlib/dist/commonjs/constants.js +123 -0
- package/node_modules/minizlib/dist/commonjs/constants.js.map +1 -0
- package/node_modules/minizlib/dist/commonjs/index.d.ts +99 -0
- package/node_modules/minizlib/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/minizlib/dist/commonjs/index.js +416 -0
- package/node_modules/minizlib/dist/commonjs/index.js.map +1 -0
- package/node_modules/minizlib/dist/commonjs/package.json +3 -0
- package/node_modules/minizlib/dist/esm/constants.d.ts +2 -0
- package/node_modules/minizlib/dist/esm/constants.d.ts.map +1 -0
- package/node_modules/minizlib/dist/esm/constants.js +117 -0
- package/node_modules/minizlib/dist/esm/constants.js.map +1 -0
- package/node_modules/minizlib/dist/esm/index.d.ts +99 -0
- package/node_modules/minizlib/dist/esm/index.d.ts.map +1 -0
- package/node_modules/minizlib/dist/esm/index.js +363 -0
- package/node_modules/minizlib/dist/esm/index.js.map +1 -0
- package/node_modules/minizlib/dist/esm/package.json +3 -0
- package/node_modules/minizlib/package.json +80 -0
- package/node_modules/proxy-addr/HISTORY.md +60 -54
- package/node_modules/proxy-addr/README.md +1 -1
- package/node_modules/proxy-addr/index.js +32 -0
- package/node_modules/proxy-addr/package.json +8 -4
- package/node_modules/qs/.github/THREAT_MODEL.md +4 -2
- package/node_modules/qs/CHANGELOG.md +38 -14
- package/node_modules/qs/README.md +31 -3
- package/node_modules/qs/dist/qs.js +20 -20
- package/node_modules/qs/lib/parse.js +94 -4
- package/node_modules/qs/lib/stringify.js +4 -4
- package/node_modules/qs/lib/utils.js +130 -6
- package/node_modules/qs/package.json +4 -4
- package/node_modules/qs/test/parse.js +174 -0
- package/node_modules/qs/test/stringify.js +263 -33
- package/node_modules/qs/test/utils.js +184 -0
- package/node_modules/tar/LICENSE.md +55 -0
- package/node_modules/tar/README.md +1233 -0
- package/node_modules/tar/dist/commonjs/create.d.ts +3 -0
- package/node_modules/tar/dist/commonjs/create.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/create.js +82 -0
- package/node_modules/tar/dist/commonjs/create.js.map +1 -0
- package/node_modules/tar/dist/commonjs/cwd-error.d.ts +8 -0
- package/node_modules/tar/dist/commonjs/cwd-error.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/cwd-error.js +18 -0
- package/node_modules/tar/dist/commonjs/cwd-error.js.map +1 -0
- package/node_modules/tar/dist/commonjs/extract.d.ts +3 -0
- package/node_modules/tar/dist/commonjs/extract.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/extract.js +88 -0
- package/node_modules/tar/dist/commonjs/extract.js.map +1 -0
- package/node_modules/tar/dist/commonjs/get-write-flag.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/get-write-flag.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/get-write-flag.js +32 -0
- package/node_modules/tar/dist/commonjs/get-write-flag.js.map +1 -0
- package/node_modules/tar/dist/commonjs/header.d.ts +53 -0
- package/node_modules/tar/dist/commonjs/header.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/header.js +348 -0
- package/node_modules/tar/dist/commonjs/header.js.map +1 -0
- package/node_modules/tar/dist/commonjs/index.d.ts +20 -0
- package/node_modules/tar/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/index.js +64 -0
- package/node_modules/tar/dist/commonjs/index.js.map +1 -0
- package/node_modules/tar/dist/commonjs/index.min.js +4 -0
- package/node_modules/tar/dist/commonjs/index.min.js.map +7 -0
- package/node_modules/tar/dist/commonjs/large-numbers.d.ts +3 -0
- package/node_modules/tar/dist/commonjs/large-numbers.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/large-numbers.js +99 -0
- package/node_modules/tar/dist/commonjs/large-numbers.js.map +1 -0
- package/node_modules/tar/dist/commonjs/list.d.ts +7 -0
- package/node_modules/tar/dist/commonjs/list.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/list.js +153 -0
- package/node_modules/tar/dist/commonjs/list.js.map +1 -0
- package/node_modules/tar/dist/commonjs/make-command.d.ts +49 -0
- package/node_modules/tar/dist/commonjs/make-command.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/make-command.js +52 -0
- package/node_modules/tar/dist/commonjs/make-command.js.map +1 -0
- package/node_modules/tar/dist/commonjs/mkdir.d.ts +25 -0
- package/node_modules/tar/dist/commonjs/mkdir.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/mkdir.js +187 -0
- package/node_modules/tar/dist/commonjs/mkdir.js.map +1 -0
- package/node_modules/tar/dist/commonjs/mode-fix.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/mode-fix.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/mode-fix.js +29 -0
- package/node_modules/tar/dist/commonjs/mode-fix.js.map +1 -0
- package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/normalize-unicode.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/normalize-unicode.js +38 -0
- package/node_modules/tar/dist/commonjs/normalize-unicode.js.map +1 -0
- package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/normalize-windows-path.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/normalize-windows-path.js +12 -0
- package/node_modules/tar/dist/commonjs/normalize-windows-path.js.map +1 -0
- package/node_modules/tar/dist/commonjs/options.d.ts +604 -0
- package/node_modules/tar/dist/commonjs/options.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/options.js +66 -0
- package/node_modules/tar/dist/commonjs/options.js.map +1 -0
- package/node_modules/tar/dist/commonjs/pack.d.ts +105 -0
- package/node_modules/tar/dist/commonjs/pack.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/pack.js +544 -0
- package/node_modules/tar/dist/commonjs/pack.js.map +1 -0
- package/node_modules/tar/dist/commonjs/package.json +3 -0
- package/node_modules/tar/dist/commonjs/parse.d.ts +92 -0
- package/node_modules/tar/dist/commonjs/parse.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/parse.js +655 -0
- package/node_modules/tar/dist/commonjs/parse.js.map +1 -0
- package/node_modules/tar/dist/commonjs/path-reservations.d.ts +11 -0
- package/node_modules/tar/dist/commonjs/path-reservations.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/path-reservations.js +170 -0
- package/node_modules/tar/dist/commonjs/path-reservations.js.map +1 -0
- package/node_modules/tar/dist/commonjs/pax.d.ts +26 -0
- package/node_modules/tar/dist/commonjs/pax.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/pax.js +182 -0
- package/node_modules/tar/dist/commonjs/pax.js.map +1 -0
- package/node_modules/tar/dist/commonjs/process-umask.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/process-umask.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/process-umask.js +7 -0
- package/node_modules/tar/dist/commonjs/process-umask.js.map +1 -0
- package/node_modules/tar/dist/commonjs/read-entry.d.ts +36 -0
- package/node_modules/tar/dist/commonjs/read-entry.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/read-entry.js +136 -0
- package/node_modules/tar/dist/commonjs/read-entry.js.map +1 -0
- package/node_modules/tar/dist/commonjs/replace.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/replace.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/replace.js +227 -0
- package/node_modules/tar/dist/commonjs/replace.js.map +1 -0
- package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/strip-absolute-path.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/strip-absolute-path.js +29 -0
- package/node_modules/tar/dist/commonjs/strip-absolute-path.js.map +1 -0
- package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/strip-trailing-slashes.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js +18 -0
- package/node_modules/tar/dist/commonjs/strip-trailing-slashes.js.map +1 -0
- package/node_modules/tar/dist/commonjs/symlink-error.d.ts +9 -0
- package/node_modules/tar/dist/commonjs/symlink-error.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/symlink-error.js +19 -0
- package/node_modules/tar/dist/commonjs/symlink-error.js.map +1 -0
- package/node_modules/tar/dist/commonjs/types.d.ts +16 -0
- package/node_modules/tar/dist/commonjs/types.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/types.js +70 -0
- package/node_modules/tar/dist/commonjs/types.js.map +1 -0
- package/node_modules/tar/dist/commonjs/unpack.d.ts +101 -0
- package/node_modules/tar/dist/commonjs/unpack.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/unpack.js +932 -0
- package/node_modules/tar/dist/commonjs/unpack.js.map +1 -0
- package/node_modules/tar/dist/commonjs/update.d.ts +2 -0
- package/node_modules/tar/dist/commonjs/update.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/update.js +33 -0
- package/node_modules/tar/dist/commonjs/update.js.map +1 -0
- package/node_modules/tar/dist/commonjs/warn-method.d.ts +24 -0
- package/node_modules/tar/dist/commonjs/warn-method.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/warn-method.js +31 -0
- package/node_modules/tar/dist/commonjs/warn-method.js.map +1 -0
- package/node_modules/tar/dist/commonjs/winchars.d.ts +3 -0
- package/node_modules/tar/dist/commonjs/winchars.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/winchars.js +14 -0
- package/node_modules/tar/dist/commonjs/winchars.js.map +1 -0
- package/node_modules/tar/dist/commonjs/write-entry.d.ts +129 -0
- package/node_modules/tar/dist/commonjs/write-entry.d.ts.map +1 -0
- package/node_modules/tar/dist/commonjs/write-entry.js +698 -0
- package/node_modules/tar/dist/commonjs/write-entry.js.map +1 -0
- package/node_modules/tar/dist/esm/create.d.ts +3 -0
- package/node_modules/tar/dist/esm/create.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/create.js +76 -0
- package/node_modules/tar/dist/esm/create.js.map +1 -0
- package/node_modules/tar/dist/esm/cwd-error.d.ts +8 -0
- package/node_modules/tar/dist/esm/cwd-error.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/cwd-error.js +14 -0
- package/node_modules/tar/dist/esm/cwd-error.js.map +1 -0
- package/node_modules/tar/dist/esm/extract.d.ts +3 -0
- package/node_modules/tar/dist/esm/extract.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/extract.js +49 -0
- package/node_modules/tar/dist/esm/extract.js.map +1 -0
- package/node_modules/tar/dist/esm/get-write-flag.d.ts +2 -0
- package/node_modules/tar/dist/esm/get-write-flag.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/get-write-flag.js +26 -0
- package/node_modules/tar/dist/esm/get-write-flag.js.map +1 -0
- package/node_modules/tar/dist/esm/header.d.ts +53 -0
- package/node_modules/tar/dist/esm/header.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/header.js +311 -0
- package/node_modules/tar/dist/esm/header.js.map +1 -0
- package/node_modules/tar/dist/esm/index.d.ts +20 -0
- package/node_modules/tar/dist/esm/index.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/index.js +20 -0
- package/node_modules/tar/dist/esm/index.js.map +1 -0
- package/node_modules/tar/dist/esm/index.min.js +4 -0
- package/node_modules/tar/dist/esm/index.min.js.map +7 -0
- package/node_modules/tar/dist/esm/large-numbers.d.ts +3 -0
- package/node_modules/tar/dist/esm/large-numbers.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/large-numbers.js +94 -0
- package/node_modules/tar/dist/esm/large-numbers.js.map +1 -0
- package/node_modules/tar/dist/esm/list.d.ts +7 -0
- package/node_modules/tar/dist/esm/list.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/list.js +113 -0
- package/node_modules/tar/dist/esm/list.js.map +1 -0
- package/node_modules/tar/dist/esm/make-command.d.ts +49 -0
- package/node_modules/tar/dist/esm/make-command.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/make-command.js +48 -0
- package/node_modules/tar/dist/esm/make-command.js.map +1 -0
- package/node_modules/tar/dist/esm/mkdir.d.ts +25 -0
- package/node_modules/tar/dist/esm/mkdir.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/mkdir.js +179 -0
- package/node_modules/tar/dist/esm/mkdir.js.map +1 -0
- package/node_modules/tar/dist/esm/mode-fix.d.ts +2 -0
- package/node_modules/tar/dist/esm/mode-fix.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/mode-fix.js +25 -0
- package/node_modules/tar/dist/esm/mode-fix.js.map +1 -0
- package/node_modules/tar/dist/esm/normalize-unicode.d.ts +2 -0
- package/node_modules/tar/dist/esm/normalize-unicode.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/normalize-unicode.js +34 -0
- package/node_modules/tar/dist/esm/normalize-unicode.js.map +1 -0
- package/node_modules/tar/dist/esm/normalize-windows-path.d.ts +2 -0
- package/node_modules/tar/dist/esm/normalize-windows-path.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/normalize-windows-path.js +9 -0
- package/node_modules/tar/dist/esm/normalize-windows-path.js.map +1 -0
- package/node_modules/tar/dist/esm/options.d.ts +604 -0
- package/node_modules/tar/dist/esm/options.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/options.js +54 -0
- package/node_modules/tar/dist/esm/options.js.map +1 -0
- package/node_modules/tar/dist/esm/pack.d.ts +105 -0
- package/node_modules/tar/dist/esm/pack.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/pack.js +502 -0
- package/node_modules/tar/dist/esm/pack.js.map +1 -0
- package/node_modules/tar/dist/esm/package.json +3 -0
- package/node_modules/tar/dist/esm/parse.d.ts +92 -0
- package/node_modules/tar/dist/esm/parse.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/parse.js +651 -0
- package/node_modules/tar/dist/esm/parse.js.map +1 -0
- package/node_modules/tar/dist/esm/path-reservations.d.ts +11 -0
- package/node_modules/tar/dist/esm/path-reservations.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/path-reservations.js +166 -0
- package/node_modules/tar/dist/esm/path-reservations.js.map +1 -0
- package/node_modules/tar/dist/esm/pax.d.ts +26 -0
- package/node_modules/tar/dist/esm/pax.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/pax.js +178 -0
- package/node_modules/tar/dist/esm/pax.js.map +1 -0
- package/node_modules/tar/dist/esm/process-umask.d.ts +2 -0
- package/node_modules/tar/dist/esm/process-umask.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/process-umask.js +3 -0
- package/node_modules/tar/dist/esm/process-umask.js.map +1 -0
- package/node_modules/tar/dist/esm/read-entry.d.ts +36 -0
- package/node_modules/tar/dist/esm/read-entry.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/read-entry.js +132 -0
- package/node_modules/tar/dist/esm/read-entry.js.map +1 -0
- package/node_modules/tar/dist/esm/replace.d.ts +2 -0
- package/node_modules/tar/dist/esm/replace.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/replace.js +221 -0
- package/node_modules/tar/dist/esm/replace.js.map +1 -0
- package/node_modules/tar/dist/esm/strip-absolute-path.d.ts +2 -0
- package/node_modules/tar/dist/esm/strip-absolute-path.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/strip-absolute-path.js +25 -0
- package/node_modules/tar/dist/esm/strip-absolute-path.js.map +1 -0
- package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts +2 -0
- package/node_modules/tar/dist/esm/strip-trailing-slashes.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/strip-trailing-slashes.js +14 -0
- package/node_modules/tar/dist/esm/strip-trailing-slashes.js.map +1 -0
- package/node_modules/tar/dist/esm/symlink-error.d.ts +9 -0
- package/node_modules/tar/dist/esm/symlink-error.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/symlink-error.js +15 -0
- package/node_modules/tar/dist/esm/symlink-error.js.map +1 -0
- package/node_modules/tar/dist/esm/types.d.ts +16 -0
- package/node_modules/tar/dist/esm/types.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/types.js +65 -0
- package/node_modules/tar/dist/esm/types.js.map +1 -0
- package/node_modules/tar/dist/esm/unpack.d.ts +101 -0
- package/node_modules/tar/dist/esm/unpack.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/unpack.js +891 -0
- package/node_modules/tar/dist/esm/unpack.js.map +1 -0
- package/node_modules/tar/dist/esm/update.d.ts +2 -0
- package/node_modules/tar/dist/esm/update.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/update.js +30 -0
- package/node_modules/tar/dist/esm/update.js.map +1 -0
- package/node_modules/tar/dist/esm/warn-method.d.ts +24 -0
- package/node_modules/tar/dist/esm/warn-method.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/warn-method.js +27 -0
- package/node_modules/tar/dist/esm/warn-method.js.map +1 -0
- package/node_modules/tar/dist/esm/winchars.d.ts +3 -0
- package/node_modules/tar/dist/esm/winchars.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/winchars.js +9 -0
- package/node_modules/tar/dist/esm/winchars.js.map +1 -0
- package/node_modules/tar/dist/esm/write-entry.d.ts +129 -0
- package/node_modules/tar/dist/esm/write-entry.d.ts.map +1 -0
- package/node_modules/tar/dist/esm/write-entry.js +656 -0
- package/node_modules/tar/dist/esm/write-entry.js.map +1 -0
- package/node_modules/tar/package.json +298 -0
- package/node_modules/ws/lib/websocket.js +17 -3
- package/node_modules/ws/package.json +1 -1
- package/node_modules/yallist/LICENSE.md +63 -0
- package/node_modules/yallist/README.md +205 -0
- package/node_modules/yallist/dist/commonjs/index.d.ts +39 -0
- package/node_modules/yallist/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/yallist/dist/commonjs/index.js +384 -0
- package/node_modules/yallist/dist/commonjs/index.js.map +1 -0
- package/node_modules/yallist/dist/commonjs/package.json +3 -0
- package/node_modules/yallist/dist/esm/index.d.ts +39 -0
- package/node_modules/yallist/dist/esm/index.d.ts.map +1 -0
- package/node_modules/yallist/dist/esm/index.js +379 -0
- package/node_modules/yallist/dist/esm/index.js.map +1 -0
- package/node_modules/yallist/dist/esm/package.json +3 -0
- package/node_modules/yallist/package.json +68 -0
- package/node_modules/yaml/browser/dist/compose/resolve-flow-scalar.js +19 -18
- package/node_modules/yaml/browser/dist/nodes/Alias.js +25 -23
- package/node_modules/yaml/dist/compose/resolve-flow-scalar.js +19 -18
- package/node_modules/yaml/dist/nodes/Alias.js +25 -23
- package/node_modules/yaml/package.json +1 -1
- package/package.json +7 -1
- package/bin/completion/templates/cds-tmpl.fish +0 -65
- package/bin/completion/templates/cds-tmpl.ps1 +0 -217
- package/bin/completion/templates/cds-tmpl.sh +0 -93
- package/bin/completion/templates/cds-tmpl.zsh +0 -74
- package/node_modules/@cap-js/db-service/lib/recursion-guard.js +0 -40
- package/node_modules/@sap/cds/lib/env/cds-requires.js +0 -326
- package/node_modules/@sap/cds-mtxs/srv/bootstrap.cds +0 -2
- package/node_modules/@sap/cds-mtxs/srv/bootstrap.js +0 -33
- package/node_modules/body-parser/node_modules/content-type/LICENSE +0 -22
- package/node_modules/body-parser/node_modules/content-type/README.md +0 -71
- package/node_modules/body-parser/node_modules/content-type/package.json +0 -52
- package/node_modules/content-disposition/index.js +0 -536
- package/node_modules/content-type/HISTORY.md +0 -29
- package/node_modules/content-type/index.js +0 -225
- package/node_modules/negotiator/node_modules/content-type/LICENSE +0 -22
- package/node_modules/negotiator/node_modules/content-type/README.md +0 -71
- package/node_modules/negotiator/node_modules/content-type/dist/index.d.ts +0 -46
- package/node_modules/negotiator/node_modules/content-type/dist/index.js +0 -176
- package/node_modules/negotiator/node_modules/content-type/dist/index.js.map +0 -1
- package/node_modules/negotiator/node_modules/content-type/package.json +0 -52
- package/node_modules/type-is/node_modules/content-type/LICENSE +0 -22
- package/node_modules/type-is/node_modules/content-type/README.md +0 -71
- package/node_modules/type-is/node_modules/content-type/dist/index.d.ts +0 -46
- package/node_modules/type-is/node_modules/content-type/dist/index.js +0 -176
- package/node_modules/type-is/node_modules/content-type/dist/index.js.map +0 -1
- package/node_modules/type-is/node_modules/content-type/package.json +0 -52
- /package/lib/init/template/react/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
- /package/lib/init/template/vue/files/src/{main.js → main.{{extension}}.hbs} +0 -0
- /package/lib/init/template/vue/files/{vite.config.js.hbs → vite.config.{{extension}}.hbs} +0 -0
- /package/{lib/import/openapi → node_modules/@cap-js/openapi/lib/import}/utilities.js +0 -0
- /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.d.ts +0 -0
- /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js +0 -0
- /package/node_modules/{body-parser/node_modules/content-type → content-type}/dist/index.js.map +0 -0
|
@@ -6,19 +6,12 @@ const $has_asserts = Symbol.for('has_asserts')
|
|
|
6
6
|
|
|
7
7
|
const { compileUpdatedDraftMessages } = require('../../fiori/lean-draft')
|
|
8
8
|
|
|
9
|
+
const _stringify = val =>
|
|
10
|
+
Buffer.isBuffer(val) ? val.toString('base64') : val instanceof Date ? val.toISOString() : `${val}`
|
|
9
11
|
const _serialize = obj =>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
.reduce((a, k) => ((a[k] = obj[k]), a), {})
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
const _bufferReviver = (key, value) => {
|
|
17
|
-
if (value && typeof value === 'object' && value.type === 'Buffer' && Array.isArray(value.data)) {
|
|
18
|
-
return Buffer.from(value.data)
|
|
19
|
-
}
|
|
20
|
-
return value
|
|
21
|
-
}
|
|
12
|
+
Object.keys(obj)
|
|
13
|
+
.sort()
|
|
14
|
+
.reduce((_, k) => _ + k + ':' + _stringify(obj[k]) + '|', '|')
|
|
22
15
|
|
|
23
16
|
const _hasAssert = entity => {
|
|
24
17
|
if ($has_asserts in entity) return entity[$has_asserts]
|
|
@@ -50,7 +43,8 @@ module.exports = cds.service.impl(function () {
|
|
|
50
43
|
if (!req.target) return
|
|
51
44
|
if (!($has_asserts in req.target)) _hasAssert(req.target)
|
|
52
45
|
|
|
53
|
-
|
|
46
|
+
const tx = cds.context?.tx
|
|
47
|
+
if (!tx || !req.target[$has_asserts]) return
|
|
54
48
|
|
|
55
49
|
const IS_DRAFT_ENTITY = req.target.isDraft
|
|
56
50
|
|
|
@@ -65,21 +59,18 @@ module.exports = cds.service.impl(function () {
|
|
|
65
59
|
ignore: element => element.isAssociation && !element.isComposition
|
|
66
60
|
})
|
|
67
61
|
|
|
68
|
-
if (!
|
|
69
|
-
|
|
62
|
+
if (!tx.changes) {
|
|
63
|
+
tx.changes = {}
|
|
70
64
|
|
|
71
65
|
req.before('commit', async () => {
|
|
72
|
-
const { changes } =
|
|
66
|
+
const { changes } = tx
|
|
73
67
|
|
|
74
68
|
const errors = []
|
|
75
69
|
|
|
76
70
|
for (const [entityName, serializedChanges] of Object.entries(changes)) {
|
|
77
71
|
if (!serializedChanges.size) continue
|
|
78
72
|
|
|
79
|
-
const deserializedChanges = Array.from(serializedChanges).map(([k, v]) => [JSON.parse(k, _bufferReviver), v])
|
|
80
|
-
|
|
81
73
|
const entity = this.model.definitions[entityName]
|
|
82
|
-
const IS_DRAFT_ENTITY = entity.isDraft
|
|
83
74
|
|
|
84
75
|
// Cache assert query on entity
|
|
85
76
|
if (!Object.hasOwn(entity, 'assert')) {
|
|
@@ -101,21 +92,22 @@ module.exports = cds.service.impl(function () {
|
|
|
101
92
|
entity.assert = cds.ql.SELECT([...Object.keys(entity.keys), ...asserts]).from(entity)
|
|
102
93
|
}
|
|
103
94
|
|
|
104
|
-
const query = cds.ql.clone(entity.assert)
|
|
105
|
-
|
|
106
95
|
// Select only rows with changes
|
|
107
96
|
const keyNames = Object.keys(entity.keys).filter(
|
|
108
97
|
k => !entity.keys[k].virtual && !entity.keys[k].isAssociation
|
|
109
98
|
)
|
|
110
|
-
const keyMap = Object.fromEntries(keyNames.map(k => [k, true]))
|
|
111
99
|
|
|
112
|
-
|
|
100
|
+
const deserializedChanges = Array.from(serializedChanges).map(([, v]) => [v.keys, v])
|
|
101
|
+
|
|
102
|
+
const query = cds.ql.clone(entity.assert)
|
|
103
|
+
const results = await query.where([
|
|
113
104
|
{ list: keyNames.map(k => ({ ref: [k] })) },
|
|
114
105
|
'in',
|
|
115
106
|
{ list: deserializedChanges.map(([keyKV]) => ({ list: keyNames.map(k => ({ val: keyKV[k] })) })) }
|
|
116
107
|
])
|
|
117
108
|
|
|
118
|
-
const
|
|
109
|
+
const keyMap = Object.fromEntries(keyNames.map(k => [k, true]))
|
|
110
|
+
const IS_DRAFT_ENTITY = entity.isDraft
|
|
119
111
|
|
|
120
112
|
for (const row of results) {
|
|
121
113
|
const keyColumns = Object.fromEntries(Object.entries(row).filter(([k]) => k in keyMap))
|
|
@@ -201,7 +193,7 @@ module.exports = cds.service.impl(function () {
|
|
|
201
193
|
const { row, target, pathSegmentsInfo } = elementInfo
|
|
202
194
|
const targetName = target.name
|
|
203
195
|
|
|
204
|
-
|
|
196
|
+
const changes = (tx.changes[targetName] ??= new Map())
|
|
205
197
|
|
|
206
198
|
const keys = {}
|
|
207
199
|
for (const key in target.keys) {
|
|
@@ -213,10 +205,9 @@ module.exports = cds.service.impl(function () {
|
|
|
213
205
|
if (!Object.keys(keys).length) return
|
|
214
206
|
|
|
215
207
|
const serialized = _serialize(keys)
|
|
216
|
-
const changes = cds.context.tx.changes[targetName]
|
|
217
208
|
if (changes.has(serialized)) return
|
|
218
209
|
|
|
219
|
-
changes.set(serialized, { touched, req, pathSegmentsInfo: [...pathSegmentsInfo] })
|
|
210
|
+
changes.set(serialized, { keys, touched, req, pathSegmentsInfo: [...pathSegmentsInfo] })
|
|
220
211
|
},
|
|
221
212
|
templateProcessOptions
|
|
222
213
|
)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const cds = require('../../cds')
|
|
2
|
+
const LOG = cds.log('app')
|
|
2
3
|
const { SELECT } = cds.ql
|
|
3
4
|
|
|
4
5
|
module.exports = exports = cds.service.impl(function () {
|
|
@@ -18,7 +19,7 @@ module.exports = exports = cds.service.impl(function () {
|
|
|
18
19
|
? SELECT.one`1 as $parent`.from({ ref: ref.slice(0, -1) })
|
|
19
20
|
: null
|
|
20
21
|
const parent_readable_check = parent_exists_query
|
|
21
|
-
? async () => (parent_skip_auth ? cds.db : this).run(parent_exists_query).catch(
|
|
22
|
+
? async () => (parent_skip_auth ? cds.db : this).run(parent_exists_query).catch(parent_unreadable_error)
|
|
22
23
|
: null
|
|
23
24
|
|
|
24
25
|
if (req.event === 'CREATE' && parent_readable_check != null) (await parent_readable_check()) || req.reject(404)
|
|
@@ -59,7 +60,7 @@ async function new_behavior(req, result, parent_readable_check) {
|
|
|
59
60
|
switch (req.event) {
|
|
60
61
|
case 'READ':
|
|
61
62
|
if (!n && req._etagValidationType === 'if-match') req.reject(412)
|
|
62
|
-
if (!n && parent_readable_check != null) (await parent_readable_check()) || req.reject(404)
|
|
63
|
+
if ( (!n || result[0]?.$count === 0) && parent_readable_check != null) (await parent_readable_check()) || req.reject(404)
|
|
63
64
|
return result
|
|
64
65
|
case 'INSERT': case 'CREATE':
|
|
65
66
|
if (result.affected != null) return result //> db service returned [affected]
|
|
@@ -84,6 +85,11 @@ async function legacy_behavior(req, result, parent) {
|
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
|
|
88
|
+
function parent_unreadable_error(e) {
|
|
89
|
+
if (cds.error.isSystemError(e)) throw e
|
|
90
|
+
LOG._debug && LOG.debug('Parent readable check failed:', e)
|
|
91
|
+
}
|
|
92
|
+
|
|
87
93
|
exports._handle_result = legacy_behavior
|
|
88
94
|
exports._always_return_arrays = on_off => {
|
|
89
95
|
if (on_off === undefined) return exports._handle_result === new_behavior
|
|
@@ -4,7 +4,7 @@ const { setEntityContained } = require('./csn')
|
|
|
4
4
|
|
|
5
5
|
// scope: simple wheres à la "[{ ref: ['foo'] }, '=', { val: 'bar' }, 'and', ... ]"
|
|
6
6
|
function where2obj(where, target = null, data = {}) {
|
|
7
|
-
for (let i = 0; i < where.length;) {
|
|
7
|
+
for (let i = 0; i < where.length; ) {
|
|
8
8
|
const a = where[i++]
|
|
9
9
|
if (a.xpr) {
|
|
10
10
|
where2obj(a.xpr, target, data)
|
|
@@ -72,7 +72,7 @@ const _resolveTarget = (ref, target) => {
|
|
|
72
72
|
const element = target.elements[_ref]
|
|
73
73
|
if (element) return element._target
|
|
74
74
|
|
|
75
|
-
throw cds.error(400, `Navigation property "${_ref}"
|
|
75
|
+
throw cds.error(400, `Navigation property "${_ref}" does not exist in "${target.name}"`)
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
const rewriteExpandAsterisk = (columns, target) => {
|
|
@@ -195,6 +195,22 @@ const _cleanUpOldDrafts = (service, tenant) => {
|
|
|
195
195
|
if (lastCheck && Date.now() - lastCheck < Number(interval)) return
|
|
196
196
|
|
|
197
197
|
cds.spawn({ tenant, user: cds.User.privileged }, async () => {
|
|
198
|
+
//> Clean up orphaned drafts (drafts without DraftAdministrativeData)
|
|
199
|
+
if (cds.env.fiori.draft_orphan_cleanup) {
|
|
200
|
+
const orphanCleanups = []
|
|
201
|
+
for (const name in service.model.definitions) {
|
|
202
|
+
const target = service.model.definitions[name]
|
|
203
|
+
if (target.drafts) {
|
|
204
|
+
orphanCleanups.push(
|
|
205
|
+
DELETE.from(target.drafts).where({
|
|
206
|
+
DraftAdministrativeData_DraftUUID: { 'not in': SELECT('DraftUUID').from('DRAFT.DraftAdministrativeData') }
|
|
207
|
+
}).then(orphans => orphans > 0 && LOG.warn(`Cleaned up ${orphans} orphaned drafts from ${target.drafts.name}`))
|
|
208
|
+
)
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
await Promise.allSettled(orphanCleanups)
|
|
212
|
+
}
|
|
213
|
+
|
|
198
214
|
const expiredDrafts = await SELECT.from('DRAFT.DraftAdministrativeData', ['DraftUUID']).where(
|
|
199
215
|
`LastChangeDateTime <`,
|
|
200
216
|
expiryDate
|
|
@@ -223,7 +239,7 @@ const _cleanUpOldDrafts = (service, tenant) => {
|
|
|
223
239
|
for (let i = 0; i < draftRoots.length; i++) {
|
|
224
240
|
const ids = draftRootIds[i]
|
|
225
241
|
if (!ids.length) continue
|
|
226
|
-
const srv = await cds.connect.to(draftRoots[i]._service.name).catch(() => {})
|
|
242
|
+
const srv = await cds.connect.to(draftRoots[i]._service.name).catch(() => { })
|
|
227
243
|
if (!srv) continue // srv might not be loaded
|
|
228
244
|
for (const idObj of ids) {
|
|
229
245
|
promises.push(srv.send({ event: 'CANCEL', query: DELETE.from(draftRoots[i], idObj), data: idObj }))
|
|
@@ -1031,10 +1047,14 @@ const draftHandle = async function (req) {
|
|
|
1031
1047
|
}
|
|
1032
1048
|
|
|
1033
1049
|
// Delete draft artefacts
|
|
1034
|
-
|
|
1035
|
-
DELETE.from({
|
|
1036
|
-
|
|
1037
|
-
|
|
1050
|
+
if (cds.env.fiori.draft_admin_integrity) {
|
|
1051
|
+
await DELETE.from('DRAFT.DraftAdministrativeData').where({ DraftUUID: DraftAdministrativeData_DraftUUID })
|
|
1052
|
+
} else {
|
|
1053
|
+
await _promiseAll([
|
|
1054
|
+
DELETE.from({ ref: draftRef }).where(query.SELECT.where),
|
|
1055
|
+
DELETE.from('DRAFT.DraftAdministrativeData').where({ DraftUUID: DraftAdministrativeData_DraftUUID })
|
|
1056
|
+
])
|
|
1057
|
+
}
|
|
1038
1058
|
|
|
1039
1059
|
if (req.res) {
|
|
1040
1060
|
// status code must be set in handler to allow overriding for FE V2
|
|
@@ -1090,7 +1110,7 @@ const draftHandle = async function (req) {
|
|
|
1090
1110
|
for (const assoc in target.associations) {
|
|
1091
1111
|
const val = data[assoc]
|
|
1092
1112
|
if (val && typeof val === 'object') {
|
|
1093
|
-
const _target =
|
|
1113
|
+
const _target = target.associations[assoc]._target
|
|
1094
1114
|
if (Array.isArray(val)) {
|
|
1095
1115
|
val.forEach(v => _rmIsActiveEntity(v, _target))
|
|
1096
1116
|
} else {
|
|
@@ -1352,6 +1372,7 @@ const Read = {
|
|
|
1352
1372
|
LOG.debug('List Editing Status: Own Draft')
|
|
1353
1373
|
|
|
1354
1374
|
if (!query._drafts) cds.error({ status: 400, message: 'INVALID_DRAFT_REQUEST' }) // only via drafts
|
|
1375
|
+
if (query.SELECT.groupBy) cds.error({status: 400, message: '$groupby is not supported for drafts'})
|
|
1355
1376
|
|
|
1356
1377
|
// read active from draft
|
|
1357
1378
|
if (!query._drafts._target?.name.endsWith('.drafts')) {
|
|
@@ -1369,13 +1390,16 @@ const Read = {
|
|
|
1369
1390
|
return result
|
|
1370
1391
|
}
|
|
1371
1392
|
|
|
1393
|
+
let innerQuery = query._drafts
|
|
1394
|
+
while (innerQuery.SELECT.from.SELECT) innerQuery = innerQuery.SELECT.from
|
|
1395
|
+
|
|
1372
1396
|
const selectedColumnNames = query._drafts.SELECT.columns?.map(c => c.ref?.[0] || c) || ['*']
|
|
1373
1397
|
const isAllKeysSelected =
|
|
1374
1398
|
selectedColumnNames.includes('*') ||
|
|
1375
1399
|
Object.keys(query._drafts._target.keys).every(k => selectedColumnNames.includes(k))
|
|
1376
1400
|
|
|
1377
1401
|
let txModel
|
|
1378
|
-
if (IS_PERSISTED_DRAFT_MESSAGES_ENABLED && isAllKeysSelected) {
|
|
1402
|
+
if (IS_PERSISTED_DRAFT_MESSAGES_ENABLED && isAllKeysSelected && !innerQuery.SELECT.groupBy) {
|
|
1379
1403
|
// Replace selection of 'DraftMessages' with the proper path expression
|
|
1380
1404
|
|
|
1381
1405
|
query._drafts.SELECT.columns = [
|
|
@@ -1386,13 +1410,9 @@ const Read = {
|
|
|
1386
1410
|
txModel = cds.context.tx.model
|
|
1387
1411
|
}
|
|
1388
1412
|
|
|
1389
|
-
|
|
1390
|
-
{ ref: ['DraftAdministrativeData', 'InProcessByUser'] },
|
|
1391
|
-
'=',
|
|
1392
|
-
cds.context.user.id
|
|
1393
|
-
)
|
|
1413
|
+
innerQuery.where({ ref: ['DraftAdministrativeData', 'InProcessByUser'] }, '=', cds.context.user.id)
|
|
1394
1414
|
|
|
1395
|
-
const drafts = await run(
|
|
1415
|
+
const drafts = await run(query._drafts)
|
|
1396
1416
|
Read.merge(query._target, drafts, [], row => {
|
|
1397
1417
|
Object.assign(row, {
|
|
1398
1418
|
HasDraftEntity: false
|
|
@@ -1403,8 +1423,10 @@ const Read = {
|
|
|
1403
1423
|
// Based on the query for own drafts, compile the ref of a query matching
|
|
1404
1424
|
// the format produced by cds.odata.parse to compare against message prefixes
|
|
1405
1425
|
|
|
1406
|
-
const
|
|
1407
|
-
|
|
1426
|
+
const querySubjectRef = innerQuery.SELECT.from.ref
|
|
1427
|
+
|
|
1428
|
+
const queryRootEntity = txModel.definitions[querySubjectRef[0].id || querySubjectRef[0]]
|
|
1429
|
+
const queryPrefixRef = _extractPrefixRef(querySubjectRef, queryRootEntity)
|
|
1408
1430
|
|
|
1409
1431
|
if (queryPrefixRef.length > 1) {
|
|
1410
1432
|
let targetRef = queryPrefixRef[queryPrefixRef.length - 1]
|
|
@@ -1416,8 +1438,8 @@ const Read = {
|
|
|
1416
1438
|
// This repliactes the strucutally equivalent logic from _compileUpdatedDraftMessages
|
|
1417
1439
|
// > This is necessary to enable filtering for messages realted to a newly created entity
|
|
1418
1440
|
// > Since readAfterRide will put key info into a filter rather than into the path
|
|
1419
|
-
for (const k in
|
|
1420
|
-
const key =
|
|
1441
|
+
for (const k in query._drafts._target.actives.keys) {
|
|
1442
|
+
const key = query._drafts._target.actives.keys[k]
|
|
1421
1443
|
let v = row[key.name]
|
|
1422
1444
|
if (v === undefined)
|
|
1423
1445
|
if (key.name === 'IsActiveEntity') v = false
|
|
@@ -1489,19 +1511,21 @@ const Read = {
|
|
|
1489
1511
|
const getOrderByColumns = columns => {
|
|
1490
1512
|
const selectAll = columns === undefined || columns.includes('*')
|
|
1491
1513
|
const queryColumns = !selectAll && columns && columns.map(column => column.as || column?.ref?.[0]).filter(c => c)
|
|
1492
|
-
const newColumns =
|
|
1514
|
+
const newColumns = new Map()
|
|
1493
1515
|
|
|
1494
1516
|
for (const column of orderByExpr) {
|
|
1517
|
+
const alias = column.ref.join('_')
|
|
1518
|
+
if (newColumns.has(alias)) continue
|
|
1495
1519
|
if (selectAll || !queryColumns.includes(column.ref.join('_'))) {
|
|
1496
1520
|
if (column.ref.length === 1 && selectAll) continue
|
|
1497
1521
|
const columnClone = { ...column }
|
|
1498
1522
|
delete columnClone.sort
|
|
1499
|
-
columnClone.as =
|
|
1500
|
-
newColumns.
|
|
1523
|
+
columnClone.as = alias
|
|
1524
|
+
newColumns.set(alias, columnClone)
|
|
1501
1525
|
}
|
|
1502
1526
|
}
|
|
1503
1527
|
|
|
1504
|
-
return newColumns
|
|
1528
|
+
return [...newColumns.values()]
|
|
1505
1529
|
}
|
|
1506
1530
|
|
|
1507
1531
|
let orderByDraftColumns
|
|
@@ -1617,29 +1641,29 @@ const Read = {
|
|
|
1617
1641
|
|
|
1618
1642
|
const getSortFn =
|
|
1619
1643
|
(index = 0) =>
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1644
|
+
(entityA, entityB) => {
|
|
1645
|
+
const orderBy = orderByExpr[index]
|
|
1646
|
+
const elementName = elementNamesToSort[index]
|
|
1647
|
+
const collator = collatorMap.get(elementName)
|
|
1648
|
+
const valueA = entityA[elementName]
|
|
1649
|
+
const valueB = entityB[elementName]
|
|
1650
|
+
|
|
1651
|
+
if (valueA == null && valueB == null) {
|
|
1652
|
+
// continue to next sort criterion
|
|
1653
|
+
if (index + 1 < orderByExpr.length) return getSortFn(index + 1)(entityA, entityB)
|
|
1654
|
+
return 0
|
|
1655
|
+
}
|
|
1632
1656
|
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1657
|
+
const nullsFirst = orderBy.nulls ? orderBy.nulls.toLowerCase() === 'first' : orderBy.sort === 'asc'
|
|
1658
|
+
if (valueA == null) return nullsFirst ? -1 : 1
|
|
1659
|
+
if (valueB == null) return nullsFirst ? 1 : -1
|
|
1636
1660
|
|
|
1637
|
-
|
|
1661
|
+
const diff = collator.compare(valueA, valueB)
|
|
1638
1662
|
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1663
|
+
if (diff === 0 && index + 1 < orderByExpr.length) return getSortFn(index + 1)(entityA, entityB)
|
|
1664
|
+
if (orderBy.sort === 'desc') return diff * -1
|
|
1665
|
+
return diff
|
|
1666
|
+
}
|
|
1643
1667
|
|
|
1644
1668
|
resultSet.sort(getSortFn())
|
|
1645
1669
|
}
|
|
@@ -1660,8 +1684,8 @@ const Read = {
|
|
|
1660
1684
|
|
|
1661
1685
|
const additionalCols = draftsQuery.SELECT.columns
|
|
1662
1686
|
? draftsQuery.SELECT.columns.filter(
|
|
1663
|
-
|
|
1664
|
-
|
|
1687
|
+
c => c.ref && ['DraftAdministrativeData', 'DraftAdministrativeData_DraftUUID'].includes(c.ref[0])
|
|
1688
|
+
)
|
|
1665
1689
|
: [{ ref: ['DraftAdministrativeData_DraftUUID'] }]
|
|
1666
1690
|
draftsQuery.SELECT.columns = _entityKeys(query._target)
|
|
1667
1691
|
.map(k => ({ ref: [k] }))
|
|
@@ -1941,6 +1965,7 @@ function _cleansed(query, model) {
|
|
|
1941
1965
|
if (target.drafts && cqn.where) cqn.where = _cleanseWhere(cqn.where, draftParams, DRAFT_ELEMENTS)
|
|
1942
1966
|
if (target.drafts && cqn.orderBy) cqn.orderBy = _cleanseCols(cqn.orderBy, DRAFT_ELEMENTS, target) // allowed to reuse
|
|
1943
1967
|
if (cqn.columns) cqn.columns = _cleanseCols(cqn.columns, DRAFT_ELEMENTS, target)
|
|
1968
|
+
|
|
1944
1969
|
return q
|
|
1945
1970
|
}
|
|
1946
1971
|
|
|
@@ -2015,13 +2040,16 @@ function _cleansed(query, model) {
|
|
|
2015
2040
|
|
|
2016
2041
|
function _cleanseWhere(xpr, draftParams, ignoredElements) {
|
|
2017
2042
|
const cleansed = []
|
|
2043
|
+
|
|
2018
2044
|
for (let i = 0; i < xpr.length; ++i) {
|
|
2019
2045
|
let x = xpr[i]
|
|
2020
|
-
|
|
2021
|
-
|
|
2046
|
+
|
|
2047
|
+
const xprElement = x.ref?.[0]
|
|
2048
|
+
if (ignoredElements.has(xprElement) && !xpr[i + 2]) {
|
|
2022
2049
|
continue
|
|
2023
2050
|
}
|
|
2024
|
-
|
|
2051
|
+
|
|
2052
|
+
if (ignoredElements.has(xprElement) && xpr[i + 2]) {
|
|
2025
2053
|
let { val } = xpr[i + 2]
|
|
2026
2054
|
const param = x.ref.join('_')
|
|
2027
2055
|
// outer-most parameters win
|
|
@@ -2032,6 +2060,7 @@ function _cleansed(query, model) {
|
|
|
2032
2060
|
if (last === 'and' || last === 'or') cleansed.pop()
|
|
2033
2061
|
continue
|
|
2034
2062
|
}
|
|
2063
|
+
|
|
2035
2064
|
if (x.xpr) {
|
|
2036
2065
|
x = { xpr: _cleanseWhere(x.xpr, draftParams, ignoredElements) }
|
|
2037
2066
|
if (!x.xpr) {
|
|
@@ -2039,8 +2068,10 @@ function _cleansed(query, model) {
|
|
|
2039
2068
|
continue
|
|
2040
2069
|
}
|
|
2041
2070
|
}
|
|
2071
|
+
|
|
2042
2072
|
cleansed.push(x)
|
|
2043
2073
|
}
|
|
2074
|
+
|
|
2044
2075
|
const first = cleansed[0]
|
|
2045
2076
|
if (first === 'and' || first === 'or') cleansed.shift()
|
|
2046
2077
|
const last = cleansed[cleansed.length - 1]
|
|
@@ -2169,24 +2200,24 @@ async function onNew(req, next) {
|
|
|
2169
2200
|
|
|
2170
2201
|
const adminDataCQN = isDirectAccess
|
|
2171
2202
|
? INSERT.into('DRAFT.DraftAdministrativeData').entries({
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2203
|
+
DraftUUID,
|
|
2204
|
+
CreationDateTime: timestamp,
|
|
2205
|
+
CreatedByUser: req.user.id,
|
|
2206
|
+
LastChangeDateTime: timestamp,
|
|
2207
|
+
LastChangedByUser: req.user.id,
|
|
2208
|
+
DraftIsCreatedByMe: true, // Dummy values
|
|
2209
|
+
DraftIsProcessedByMe: true, // Dummy values
|
|
2210
|
+
InProcessByUser: req.user.id,
|
|
2211
|
+
...(IS_PERSISTED_DRAFT_MESSAGES_ENABLED ? { DraftMessages: nextDraftMessages } : {})
|
|
2212
|
+
})
|
|
2213
|
+
: UPDATE('DRAFT.DraftAdministrativeData')
|
|
2214
|
+
.data({
|
|
2179
2215
|
InProcessByUser: req.user.id,
|
|
2216
|
+
LastChangedByUser: req.user.id,
|
|
2217
|
+
LastChangeDateTime: timestamp,
|
|
2180
2218
|
...(IS_PERSISTED_DRAFT_MESSAGES_ENABLED ? { DraftMessages: nextDraftMessages } : {})
|
|
2181
2219
|
})
|
|
2182
|
-
|
|
2183
|
-
.data({
|
|
2184
|
-
InProcessByUser: req.user.id,
|
|
2185
|
-
LastChangedByUser: req.user.id,
|
|
2186
|
-
LastChangeDateTime: timestamp,
|
|
2187
|
-
...(IS_PERSISTED_DRAFT_MESSAGES_ENABLED ? { DraftMessages: nextDraftMessages } : {})
|
|
2188
|
-
})
|
|
2189
|
-
.where({ DraftUUID })
|
|
2220
|
+
.where({ DraftUUID })
|
|
2190
2221
|
|
|
2191
2222
|
await adminDataCQN
|
|
2192
2223
|
|
|
@@ -2278,15 +2309,15 @@ async function onEdit(req, next) {
|
|
|
2278
2309
|
transition.mapping.size === 0
|
|
2279
2310
|
? rootWhere
|
|
2280
2311
|
: (() => {
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
|
|
2289
|
-
|
|
2312
|
+
const whereKeys = Object.keys(rootWhere)
|
|
2313
|
+
const w = {}
|
|
2314
|
+
whereKeys.forEach(key => {
|
|
2315
|
+
const mappedKey = transition.mapping.get(key)
|
|
2316
|
+
const lockKey = mappedKey ? mappedKey.ref[0] : key
|
|
2317
|
+
w[lockKey] = rootWhere[key]
|
|
2318
|
+
})
|
|
2319
|
+
return w
|
|
2320
|
+
})()
|
|
2290
2321
|
|
|
2291
2322
|
const activeLockCQN = SELECT.from(lockTarget, [1]).where(lockWhere).forUpdate({ wait: 0 })
|
|
2292
2323
|
activeLockCQN.SELECT.localized = false
|
|
@@ -2305,7 +2336,7 @@ async function onEdit(req, next) {
|
|
|
2305
2336
|
existingDraft
|
|
2306
2337
|
]
|
|
2307
2338
|
|
|
2308
|
-
|
|
2339
|
+
;[res, draft] = await _promiseAll(cqns)
|
|
2309
2340
|
} else {
|
|
2310
2341
|
const activeLockCQN = SELECT.from({ ref: req.query.SELECT.from.ref }, [1]).forUpdate({ wait: 0 })
|
|
2311
2342
|
activeLockCQN.SELECT.localized = false
|
|
@@ -2411,21 +2442,29 @@ async function onCancel(req, next) {
|
|
|
2411
2442
|
if (!cds.context.user._is_privileged && processByUser && processByUser !== cds.context.user.id)
|
|
2412
2443
|
cds.error({ status: 403, message: 'DRAFT_LOCKED_BY_ANOTHER_USER', args: [processByUser] })
|
|
2413
2444
|
|
|
2414
|
-
const deleteQuery = DELETE.from({ ref: req.query.DELETE.from.ref })
|
|
2415
|
-
const deleteReq = _newReq(req, deleteQuery, draftParams, {})
|
|
2416
|
-
const queries = [this.dispatch(deleteReq)]
|
|
2417
|
-
|
|
2418
2445
|
if (req.target['@Common.DraftRoot.ActivationAction']) {
|
|
2419
2446
|
// The root entity is being deleted and draft admin data can be deleted
|
|
2420
2447
|
|
|
2421
|
-
|
|
2422
|
-
DELETE.from('DRAFT.DraftAdministrativeData').where({
|
|
2448
|
+
if (cds.env.fiori.draft_admin_integrity) {
|
|
2449
|
+
await DELETE.from('DRAFT.DraftAdministrativeData').where({
|
|
2423
2450
|
DraftUUID: draft.DraftAdministrativeData_DraftUUID
|
|
2424
2451
|
})
|
|
2425
|
-
|
|
2452
|
+
} else {
|
|
2453
|
+
const deleteQuery = DELETE.from({ ref: req.query.DELETE.from.ref })
|
|
2454
|
+
const deleteReq = _newReq(req, deleteQuery, draftParams, {})
|
|
2455
|
+
await _promiseAll([
|
|
2456
|
+
this.dispatch(deleteReq),
|
|
2457
|
+
DELETE.from('DRAFT.DraftAdministrativeData').where({
|
|
2458
|
+
DraftUUID: draft.DraftAdministrativeData_DraftUUID
|
|
2459
|
+
})
|
|
2460
|
+
])
|
|
2461
|
+
}
|
|
2426
2462
|
} else {
|
|
2427
2463
|
// A child entity is being deleted and draft admin data must be updated
|
|
2428
2464
|
|
|
2465
|
+
const deleteQuery = DELETE.from({ ref: req.query.DELETE.from.ref })
|
|
2466
|
+
const deleteReq = _newReq(req, deleteQuery, draftParams, {})
|
|
2467
|
+
|
|
2429
2468
|
const nextDraftAdminData = {
|
|
2430
2469
|
InProcessByUser: cds.context.user.id,
|
|
2431
2470
|
LastChangedByUser: cds.context.user.id,
|
|
@@ -2463,11 +2502,9 @@ async function onCancel(req, next) {
|
|
|
2463
2502
|
.data(nextDraftAdminData)
|
|
2464
2503
|
.where({ DraftUUID: draft.DraftAdministrativeData_DraftUUID })
|
|
2465
2504
|
|
|
2466
|
-
|
|
2505
|
+
await _promiseAll([this.dispatch(deleteReq), updateDraftAdminDataQuery])
|
|
2467
2506
|
}
|
|
2468
2507
|
|
|
2469
|
-
await _promiseAll(queries)
|
|
2470
|
-
|
|
2471
2508
|
return Object.assign([], { affected: 1 })
|
|
2472
2509
|
}
|
|
2473
2510
|
|
|
@@ -2594,11 +2631,11 @@ module.exports = cds.service.impl(function () {
|
|
|
2594
2631
|
this.handle = !cds.env.features.legacy_srv_results
|
|
2595
2632
|
? draftHandle
|
|
2596
2633
|
: async function (req) {
|
|
2597
|
-
|
|
2634
|
+
if (req.protocol?.match(/odata/) && req.event in { NEW: 1 }) req._.readAfterWrite = true
|
|
2598
2635
|
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2636
|
+
const res = await draftHandle.call(this, req)
|
|
2637
|
+
return Array.isArray(res) && 'affected' in res ? req.data : res
|
|
2638
|
+
}
|
|
2602
2639
|
|
|
2603
2640
|
// NOTE: These handler registrations MUST use inline functions
|
|
2604
2641
|
// NOTE: > Arrow functions or functions bound with `.bind` will
|
|
@@ -9,7 +9,30 @@ const authorizedRequest = ({ method, uri, path, oa2, tenant, dataObj, headers, t
|
|
|
9
9
|
tokenStore = tokenStore[tenant]
|
|
10
10
|
}
|
|
11
11
|
return new Promise((resolve, reject) => {
|
|
12
|
-
if (LOG._debug)
|
|
12
|
+
if (LOG._debug) {
|
|
13
|
+
const safeHeaders =
|
|
14
|
+
headers &&
|
|
15
|
+
Object.fromEntries(
|
|
16
|
+
Object.entries(headers).map(([k, v]) => [
|
|
17
|
+
k,
|
|
18
|
+
/^authorization$/i.test(k) ? String(v).split(' ')[0] + ' ...' : v
|
|
19
|
+
])
|
|
20
|
+
)
|
|
21
|
+
// redacted() masks oa2.secret and mTLS cert/key by field name, but its key regex
|
|
22
|
+
// covers neither the bearer token in tokenStore nor the Authorization header.
|
|
23
|
+
LOG.debug(
|
|
24
|
+
cds.utils.redacted({
|
|
25
|
+
method,
|
|
26
|
+
uri,
|
|
27
|
+
path,
|
|
28
|
+
oa2,
|
|
29
|
+
tenant,
|
|
30
|
+
dataObj,
|
|
31
|
+
headers: safeHeaders,
|
|
32
|
+
tokenStore: tokenStore && { token: tokenStore.token ? '...' : undefined, expires_in: tokenStore.expires_in }
|
|
33
|
+
})
|
|
34
|
+
)
|
|
35
|
+
}
|
|
13
36
|
;((tokenStore.token && Promise.resolve(tokenStore.token)) || requestToken(oa2, tenant, tokenStore))
|
|
14
37
|
.catch(err => reject(err))
|
|
15
38
|
.then(token => {
|
package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/normalizeIncomingMessage.js
CHANGED
|
@@ -11,7 +11,7 @@ const _JSONorString = string => {
|
|
|
11
11
|
const normalizeIncomingMessage = message => {
|
|
12
12
|
const _payload = typeof message === 'object' ? message : _JSONorString(message)
|
|
13
13
|
let data, headers
|
|
14
|
-
if (typeof _payload === 'object' && 'data' in _payload) {
|
|
14
|
+
if (_payload !== null && typeof _payload === 'object' && 'data' in _payload) {
|
|
15
15
|
data = _payload.data
|
|
16
16
|
headers = { ..._payload }
|
|
17
17
|
delete headers.data
|
|
@@ -161,7 +161,7 @@ function _JSONorString(string) {
|
|
|
161
161
|
function _normalizeIncomingMessage(message) {
|
|
162
162
|
const _payload = _JSONorString(message)
|
|
163
163
|
let data, headers
|
|
164
|
-
if (typeof _payload === 'object' && 'data' in _payload) {
|
|
164
|
+
if (_payload !== null && typeof _payload === 'object' && 'data' in _payload) {
|
|
165
165
|
data = _payload.data
|
|
166
166
|
headers = { ..._payload }
|
|
167
167
|
delete headers.data
|
|
@@ -237,7 +237,7 @@ class RemoteService extends cds.Service {
|
|
|
237
237
|
const requestConfig = extractRequestConfig(req, this)
|
|
238
238
|
requestConfig.headers = _getHeaders(requestConfig.headers, req)
|
|
239
239
|
|
|
240
|
-
if (this.kind === 'hcql' && req.iterator && !req.objectMode)
|
|
240
|
+
if (this.kind === 'hcql' && (query?.SELECT?.stream || req.iterator && !req.objectMode))
|
|
241
241
|
requestConfig.headers.accept = 'application/octet-stream,application/json'
|
|
242
242
|
|
|
243
243
|
// REVISIT: we should not have to set the content-type at all for that
|
|
@@ -247,7 +247,7 @@ class RemoteService extends cds.Service {
|
|
|
247
247
|
// Ensure request correlation (even with systems that use x-correlationid)
|
|
248
248
|
const correlationId = requestConfig.headers['x-correlation-id'] || cds.context?.id
|
|
249
249
|
requestConfig.headers['x-correlation-id'] = correlationId
|
|
250
|
-
requestConfig.headers['x-correlationid'] = correlationId
|
|
250
|
+
requestConfig.headers['x-correlationid'] = correlationId // REVISIT
|
|
251
251
|
|
|
252
252
|
// Compile Cloud SDK options
|
|
253
253
|
const additionalOptions = {
|
|
@@ -202,7 +202,7 @@ module.exports.run = async (requestConfig, options) => {
|
|
|
202
202
|
response = await _executeHttpRequest({ requestConfig, destination, destinationOptions, jwt })
|
|
203
203
|
} catch (e) {
|
|
204
204
|
// for hcql, do not wrap error into a generic 502 error
|
|
205
|
-
if (options.kind === 'hcql') {
|
|
205
|
+
if (options.kind === 'hcql' && e.response?.data) {
|
|
206
206
|
const { errors } = e.response.data
|
|
207
207
|
if (errors) {
|
|
208
208
|
const error =
|
|
@@ -278,7 +278,8 @@ module.exports.run = async (requestConfig, options) => {
|
|
|
278
278
|
|
|
279
279
|
if (kind === 'hcql') {
|
|
280
280
|
if (response.headers?.['content-type']?.includes('application/octet-stream')) return response.data
|
|
281
|
-
let { data
|
|
281
|
+
let { data, errors, affected, $count } = response.data
|
|
282
|
+
if (!data && !errors) return response.data
|
|
282
283
|
if (affected !== undefined) data.affected = affected
|
|
283
284
|
if ($count == null && response.headers['x-total-count']) $count = Number(response.headers['x-total-count'])
|
|
284
285
|
if ($count !== undefined) data.$count = $count
|