@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
|
@@ -66,9 +66,11 @@ const _createODataRequestConfig = (query, data, target, srvKind) => {
|
|
|
66
66
|
url: encodeURI(_formatPath(cleanQuery.substring(blankIndex, cleanQuery.length).trim()))
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
if (data
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
if (!data || requestConfig.method === 'GET' || requestConfig.method === 'HEAD') return requestConfig
|
|
70
|
+
|
|
71
|
+
if (srvKind === 'odata-v2' && !(data instanceof Readable) && !(data instanceof Buffer))
|
|
72
|
+
requestConfig.data = convertV2PayloadData(data, target)
|
|
73
|
+
else requestConfig.data = data
|
|
72
74
|
|
|
73
75
|
return requestConfig
|
|
74
76
|
}
|
|
@@ -88,9 +90,12 @@ const _pathToRequestConfig = (method, path, data, target, srvName, srvKind) => {
|
|
|
88
90
|
}
|
|
89
91
|
|
|
90
92
|
const requestConfig = { method, url }
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
|
|
94
|
+
if (!data || requestConfig.method === 'GET' || requestConfig.method === 'HEAD') return requestConfig
|
|
95
|
+
|
|
96
|
+
if (srvKind === 'odata-v2' && !(data instanceof Readable) && !(data instanceof Buffer))
|
|
97
|
+
requestConfig.data = convertV2PayloadData(data, target)
|
|
98
|
+
else requestConfig.data = data
|
|
94
99
|
|
|
95
100
|
return requestConfig
|
|
96
101
|
}
|
|
@@ -8,14 +8,16 @@ module.exports = (target, srv, result, keys_as_segments) => {
|
|
|
8
8
|
|
|
9
9
|
const keyValuePairs = filteredKeys.reduce((acc, key) => {
|
|
10
10
|
const value = result[key]
|
|
11
|
-
if (result[key] === undefined) return acc
|
|
12
11
|
|
|
13
12
|
if (Buffer.isBuffer(value)) {
|
|
14
|
-
|
|
13
|
+
const base64 = value.toString('base64')
|
|
14
|
+
acc[key] = keys_as_segments ? base64 : `binary'${base64}'`
|
|
15
|
+
} else if (keys_as_segments) {
|
|
16
|
+
acc[key] = value
|
|
15
17
|
} else {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
const el = target.elements[key]
|
|
19
|
+
const needsQuotes = typeof value === 'string' && (el._type !== 'cds.UUID' || el['@odata.Type'] === 'Edm.String')
|
|
20
|
+
acc[key] = needsQuotes ? `'${value}'` : value
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
return acc
|
|
@@ -24,19 +26,16 @@ module.exports = (target, srv, result, keys_as_segments) => {
|
|
|
24
26
|
if (keys_as_segments) {
|
|
25
27
|
let location = targetName
|
|
26
28
|
for (const k in keyValuePairs) location += `/${keyValuePairs[k]}`
|
|
27
|
-
return location
|
|
29
|
+
return encodeURI(location)
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
let keys
|
|
31
33
|
const entries = Object.entries(keyValuePairs)
|
|
32
34
|
if (entries.length === 1) {
|
|
33
35
|
keys = entries[0][1]
|
|
34
|
-
if (target.elements[entries[0][0]]['@odata.Type'] === 'Edm.String') keys = `'${keys}'`
|
|
35
36
|
} else {
|
|
36
|
-
keys = entries
|
|
37
|
-
.map(([key, value]) => `${key}=${target.elements[key]['@odata.Type'] === 'Edm.String' ? `'${value}'` : value}`)
|
|
38
|
-
.join(',')
|
|
37
|
+
keys = entries.map(([key, value]) => `${key}=${value}`).join(',')
|
|
39
38
|
}
|
|
40
39
|
|
|
41
|
-
return `${targetName}(${keys})`
|
|
40
|
+
return encodeURI(`${targetName}(${keys})`)
|
|
42
41
|
}
|
|
@@ -2,6 +2,7 @@ const cds = require('../../../')
|
|
|
2
2
|
const { INSERT } = cds.ql
|
|
3
3
|
|
|
4
4
|
const { getPreferReturnHeader } = require('../utils')
|
|
5
|
+
const handle_ieee754 = require('../utils/ieee754')
|
|
5
6
|
const getODataMetadata = require('../utils/metadata')
|
|
6
7
|
const postProcess = require('../utils/postProcess')
|
|
7
8
|
const readAfterWrite4 = require('../utils/readAfterWrite')
|
|
@@ -102,6 +103,9 @@ module.exports = (adapter, isUpsert) => {
|
|
|
102
103
|
|
|
103
104
|
const metadata = getODataMetadata(query, { result })
|
|
104
105
|
result = getODataResult(result, metadata)
|
|
106
|
+
|
|
107
|
+
handle_ieee754(req, result)
|
|
108
|
+
|
|
105
109
|
res.status(201).send(result)
|
|
106
110
|
})
|
|
107
111
|
.catch(err => {
|
|
@@ -102,7 +102,7 @@ module.exports = adapter => {
|
|
|
102
102
|
edmx = await mps.getEdmx({ tenant, model, service: service.definition.name })
|
|
103
103
|
metadataCache.edm = edmx
|
|
104
104
|
}
|
|
105
|
-
const extBundle = await mps.getI18n({ tenant, locale })
|
|
105
|
+
const extBundle = cds.requires.extensibility && (await mps.getI18n({ tenant, locale }))
|
|
106
106
|
edmx = cds.localize(service.model, locale, edmx, extBundle)
|
|
107
107
|
metadataCache.xmlEtag[locale] = generateEtag(edmx)
|
|
108
108
|
res.set('ETag', metadataCache.xmlEtag[locale])
|
|
@@ -2,6 +2,7 @@ const cds = require('../../../')
|
|
|
2
2
|
|
|
3
3
|
const { pipeline } = require('node:stream/promises')
|
|
4
4
|
|
|
5
|
+
const handle_ieee754 = require('../utils/ieee754')
|
|
5
6
|
const getODataMetadata = require('../utils/metadata')
|
|
6
7
|
const postProcess = require('../utils/postProcess')
|
|
7
8
|
const getODataResult = require('../utils/result')
|
|
@@ -181,6 +182,8 @@ module.exports = adapter => {
|
|
|
181
182
|
const metadata = getODataMetadata({ SELECT, _target }, options)
|
|
182
183
|
result = getODataResult(result, metadata, { isCollection })
|
|
183
184
|
|
|
185
|
+
handle_ieee754(req, result)
|
|
186
|
+
|
|
184
187
|
res.send(result)
|
|
185
188
|
})
|
|
186
189
|
.catch(err => {
|
|
@@ -3,6 +3,12 @@ const odata = require('../index')
|
|
|
3
3
|
const bodyParser4 = require('../../http/body-parser')
|
|
4
4
|
const { isStream } = require('../utils')
|
|
5
5
|
|
|
6
|
+
let reject_ieee754_false = req => {
|
|
7
|
+
if (/IEEE754Compatible\s*=\s*false/i.test(req.headers?.accept || ''))
|
|
8
|
+
cds.error({ status: 406, message: 'IEEE754Compatible=false is not supported' })
|
|
9
|
+
}
|
|
10
|
+
if (cds.env.odata.ieee754compatible === false) reject_ieee754_false = () => {}
|
|
11
|
+
|
|
6
12
|
/**
|
|
7
13
|
* @param {import('../ODataAdapter')} adapter
|
|
8
14
|
* the adapter instance in which this middleware is used
|
|
@@ -44,6 +50,9 @@ module.exports = adapter => {
|
|
|
44
50
|
else break
|
|
45
51
|
else throw cds.error(415)
|
|
46
52
|
}
|
|
53
|
+
|
|
54
|
+
reject_ieee754_false(req)
|
|
55
|
+
|
|
47
56
|
return bodyParser(req, res, next)
|
|
48
57
|
}
|
|
49
58
|
}
|
|
@@ -3,6 +3,7 @@ const cds = require('../../../')
|
|
|
3
3
|
const querystring = require('node:querystring')
|
|
4
4
|
|
|
5
5
|
const { validateIfNoneMatch, getPreferReturnHeader } = require('../utils')
|
|
6
|
+
const handle_ieee754 = require('../utils/ieee754')
|
|
6
7
|
const getODataMetadata = require('../utils/metadata')
|
|
7
8
|
const postProcess = require('../utils/postProcess')
|
|
8
9
|
const getODataResult = require('../utils/result')
|
|
@@ -126,7 +127,7 @@ const _isNullableSingleton = query => query._target._isSingleton && query._targe
|
|
|
126
127
|
const _isToOneAssoc = query =>
|
|
127
128
|
query.SELECT.from.ref.length > 1 && typeof query.SELECT.from.ref.slice(-1)[0] === 'string'
|
|
128
129
|
|
|
129
|
-
const _getCountFromResult = result => (Array.isArray(result) ? (result[0]
|
|
130
|
+
const _getCountFromResult = result => (Array.isArray(result) ? (result[0]?.$count ?? 0) : (result?.$count ?? 0))
|
|
130
131
|
|
|
131
132
|
const _getCountFromResultForArrayOfQueries = result => {
|
|
132
133
|
if (!Array.isArray(result)) return result.$count ?? 0
|
|
@@ -190,6 +191,9 @@ const _handleArrayOfQueriesFactory = adapter => {
|
|
|
190
191
|
{ context: mainOdataContext },
|
|
191
192
|
{ isCollection: !req._query[0].SELECT.one, property: req._query[0]._propertyAccess }
|
|
192
193
|
)
|
|
194
|
+
|
|
195
|
+
handle_ieee754(req, result)
|
|
196
|
+
|
|
193
197
|
res.send(result)
|
|
194
198
|
})
|
|
195
199
|
.catch(err => {
|
|
@@ -300,6 +304,8 @@ module.exports = adapter => {
|
|
|
300
304
|
|
|
301
305
|
if (!result) cds.error(404)
|
|
302
306
|
|
|
307
|
+
handle_ieee754(req, result)
|
|
308
|
+
|
|
303
309
|
res.send(result)
|
|
304
310
|
})
|
|
305
311
|
.catch(err => {
|
|
@@ -2,6 +2,7 @@ const cds = require('../../../')
|
|
|
2
2
|
const { UPDATE } = cds.ql
|
|
3
3
|
|
|
4
4
|
const { getPreferReturnHeader, isStream } = require('../utils')
|
|
5
|
+
const handle_ieee754 = require('../utils/ieee754')
|
|
5
6
|
const getODataMetadata = require('../utils/metadata')
|
|
6
7
|
const postProcess = require('../utils/postProcess')
|
|
7
8
|
const readAfterWrite4 = require('../utils/readAfterWrite')
|
|
@@ -101,7 +102,7 @@ module.exports = adapter => {
|
|
|
101
102
|
}
|
|
102
103
|
|
|
103
104
|
// query
|
|
104
|
-
const query = UPDATE.entity(from).
|
|
105
|
+
const query = UPDATE.entity(from).data(data)
|
|
105
106
|
|
|
106
107
|
// cdsReq.headers should contain merged headers of envelope and subreq
|
|
107
108
|
// REVISIT: this overrides the merging mechanism in cds.Request which is meant to handle this centrally !!
|
|
@@ -149,6 +150,9 @@ module.exports = adapter => {
|
|
|
149
150
|
|
|
150
151
|
const metadata = getODataMetadata(_propertyAccess ? req._query : query, { result })
|
|
151
152
|
result = getODataResult(result, metadata, { property: _propertyAccess })
|
|
153
|
+
|
|
154
|
+
handle_ieee754(req, result)
|
|
155
|
+
|
|
152
156
|
res.send(result)
|
|
153
157
|
})
|
|
154
158
|
.catch(err => {
|
|
@@ -1037,13 +1037,13 @@ module.exports = (cqn, model, namespace, protocol) => {
|
|
|
1037
1037
|
// target <=> endpoint entity, all navigation refs must be resolvable accordingly
|
|
1038
1038
|
if (cds.env.effective.odata.structs) _resolveAliasesInNavigation(cqn, target)
|
|
1039
1039
|
|
|
1040
|
-
// Add default aggregation function (and alias)
|
|
1041
|
-
_processColumns(cqn, current, protocol)
|
|
1042
|
-
|
|
1043
1040
|
if (target && !returns_target) {
|
|
1044
1041
|
// validate whether only known properties are used in query options
|
|
1045
1042
|
_validateQuery(cqn.SELECT, target, model)
|
|
1046
1043
|
}
|
|
1047
1044
|
|
|
1045
|
+
// Add default aggregation function (and alias)
|
|
1046
|
+
_processColumns(cqn, current, protocol)
|
|
1047
|
+
|
|
1048
1048
|
return cqn
|
|
1049
1049
|
}
|
|
@@ -117,7 +117,7 @@ const _parseStream = async function* (body, boundary) {
|
|
|
117
117
|
.toString()
|
|
118
118
|
.replace(/^--(.*)$/gm, (_, g) => `HEAD /${g} HTTP/1.1${g.slice(-2) === '--' ? CRLF : ''}`)
|
|
119
119
|
// correct content-length for non-HEAD requests is inserted below
|
|
120
|
-
.replace(/content-length: \d+\r\n/gim, '') // if content-length is given it should be taken
|
|
120
|
+
.replace(/content-length:[ \t]*\d+\r\n/gim, '') // if content-length is given it should be taken
|
|
121
121
|
.replaceAll(/^(?:(GET|PUT|POST|PATCH|DELETE)).*(?:\r?\n(?!\r?\n).*)*/gim, block => {
|
|
122
122
|
return block.replaceAll(/ \$/g, ' /$')
|
|
123
123
|
})
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const cds = require('../../../lib')
|
|
2
|
+
|
|
3
|
+
// Does the bound db serialize Int64/Decimal as strings? sqlite/postgres only under
|
|
4
|
+
// features.ieee754compatible; HANA and 3rd-party adapters always. Fixed after bootstrap.
|
|
5
|
+
let _asStrings
|
|
6
|
+
function providedAsStrings() {
|
|
7
|
+
_asStrings ??= cds.db?.kind in { sqlite: 1, postgres: 1 } ? !!cds.env.features.ieee754compatible : true
|
|
8
|
+
return _asStrings
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
// Label every JSON response IEEE754Compatible=true (OData JSON Format §4.1); call right before
|
|
12
|
+
// res.send so non-JSON/204 exits ($count, $value, return=minimal) stay bare. A custom handler
|
|
13
|
+
// that already set Content-Type wins — force means force, but an explicit handler is more explicit.
|
|
14
|
+
module.exports = function handle_ieee754(req, result) {
|
|
15
|
+
if (cds.env.odata.ieee754compatible === false) return //> opt-out
|
|
16
|
+
if (req.res.get('Content-Type')) return //> set by custom handler
|
|
17
|
+
if (result == null || !providedAsStrings()) return
|
|
18
|
+
|
|
19
|
+
req.res.set('Content-Type', 'application/json; charset=utf-8; IEEE754Compatible=true')
|
|
20
|
+
}
|
|
@@ -24,6 +24,8 @@ const _setLongTimeout = (cb, delay) => {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
let T0
|
|
27
|
+
const MISSING_T0 =
|
|
28
|
+
'Skipping periodic message processing: no provider tenant is configured via `cds.requires.multitenancy.t0`. This is unexpected outside the `mtx-sidecar` profile.'
|
|
27
29
|
|
|
28
30
|
module.exports = class SchedulingService extends cds.Service {
|
|
29
31
|
constructor(...args) {
|
|
@@ -101,6 +103,8 @@ module.exports = class SchedulingService extends cds.Service {
|
|
|
101
103
|
|
|
102
104
|
// NOTE: in the future, we also need to trigger task processing in sidecar for mtx
|
|
103
105
|
if (cds.env.profile !== 'mtx-sidecar') {
|
|
106
|
+
if (!T0) return LOG.warn(MISSING_T0)
|
|
107
|
+
|
|
104
108
|
const periodic_flush = setInterval(() => _flush(T0), flush_interval_ms).unref()
|
|
105
109
|
cds.on('shutdown', () => clearInterval(periodic_flush))
|
|
106
110
|
_flush(T0)
|
|
@@ -4,7 +4,7 @@ const LOG = cds.log('queue')
|
|
|
4
4
|
let impl
|
|
5
5
|
const _getImpl = () => {
|
|
6
6
|
if (!impl) {
|
|
7
|
-
if (cds.
|
|
7
|
+
if (cds.requires.scheduling) {
|
|
8
8
|
LOG._debug && LOG.debug('Using scheduling-based event queue processing')
|
|
9
9
|
impl = require('./processing')
|
|
10
10
|
} else {
|
|
@@ -132,7 +132,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
132
132
|
|
|
133
133
|
if (opts.maxAttempts) tasksQuery.where({ attempts: { '<': opts.maxAttempts } })
|
|
134
134
|
if (opts.parallel) {
|
|
135
|
-
tasksQuery.
|
|
135
|
+
tasksQuery.forUpdate({ ignoreLocked: true })
|
|
136
136
|
const shifted = new Date(Math.max(0, currTime - _timeout)).toISOString()
|
|
137
137
|
tasksQuery.where({ status: null, or: { lastAttemptTimestamp: { '<': shifted } } })
|
|
138
138
|
// Note: If there are messages which are not yet timed out, but will hang eventually,
|
|
@@ -215,8 +215,14 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
215
215
|
const user = new cds.User.Privileged(userId)
|
|
216
216
|
context.user = user
|
|
217
217
|
|
|
218
|
-
//
|
|
219
|
-
|
|
218
|
+
// older messages have no `service`; the name is encoded in `target` as
|
|
219
|
+
// `<targetPrefix><serviceName>` (see utils.targetName)
|
|
220
|
+
let srvName = _msg.service
|
|
221
|
+
if (!srvName) {
|
|
222
|
+
srvName = _task.target
|
|
223
|
+
if (opts.targetPrefix && srvName.startsWith(opts.targetPrefix))
|
|
224
|
+
srvName = srvName.slice(opts.targetPrefix.length)
|
|
225
|
+
}
|
|
220
226
|
delete _msg.service
|
|
221
227
|
|
|
222
228
|
const fromSend = _msg._fromSend
|
|
@@ -227,6 +233,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
227
233
|
|
|
228
234
|
const task = {
|
|
229
235
|
ID: _task.ID,
|
|
236
|
+
timestamp: _task.timestamp,
|
|
230
237
|
msg,
|
|
231
238
|
context,
|
|
232
239
|
srvName,
|
|
@@ -246,6 +253,19 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
246
253
|
let minAttemptFailed
|
|
247
254
|
try {
|
|
248
255
|
const _handleWithErr = async task => {
|
|
256
|
+
if (!cds.services[task.srvName]) {
|
|
257
|
+
// service not served/registered: unrecoverable, so dead-letter it (attempts -> maxAttempts)
|
|
258
|
+
// instead of crashing the app or blocking the queue
|
|
259
|
+
LOG.error(`No service '${task.srvName}' found for a queued message; treating as unrecoverable.`)
|
|
260
|
+
if (!minAttemptFailed) minAttemptFailed = task.attempts
|
|
261
|
+
else minAttemptFailed = Math.min(minAttemptFailed, task.attempts)
|
|
262
|
+
task[$error] = new Error(`No service '${task.srvName}' found`)
|
|
263
|
+
if (opts.maxAttempts) {
|
|
264
|
+
task.updateData = { attempts: opts.maxAttempts }
|
|
265
|
+
toBeUpdated.push(task)
|
|
266
|
+
} else toBeDeleted.push(task)
|
|
267
|
+
return
|
|
268
|
+
}
|
|
249
269
|
const service = cds.unqueued(await cds.connect.to(task.srvName))
|
|
250
270
|
try {
|
|
251
271
|
if (task.msg.query) {
|
|
@@ -264,9 +284,23 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
264
284
|
// we can only delete in the current tx if legacyLocking (i.e., long-lasting db locks) is false
|
|
265
285
|
if (!opts.legacyLocking) {
|
|
266
286
|
const _delete = DELETE.from(tasksEntity).where({ ID: task.ID })
|
|
267
|
-
//
|
|
268
|
-
|
|
269
|
-
|
|
287
|
+
// guard on the selected row's timestamp (not `task.msg.timestamp`: `timestamp` is in
|
|
288
|
+
// `_ignoredContext`, absent from the msg, and reads back as `now`)
|
|
289
|
+
if (task.msg.queue?.task)
|
|
290
|
+
_delete.where({ timestamp: { '<': _timestampPlusOneMS(new Date(task.timestamp)) } })
|
|
291
|
+
const _deleted = await _delete
|
|
292
|
+
const _cnt = typeof _deleted === 'number' ? _deleted : (_deleted?.affected ?? 0)
|
|
293
|
+
// recreate the next occurrence in the same tx; skip if the guarded delete removed nothing
|
|
294
|
+
// (the singleton was unscheduled/rescheduled concurrently)
|
|
295
|
+
if (task.msg.queue?.every && (!task.msg.queue?.task || _cnt > 0)) {
|
|
296
|
+
const _m = { ...task.msg }
|
|
297
|
+
_m._fromSend = task.msg instanceof cds.Request
|
|
298
|
+
await INSERT.into(tasksEntity).entries(
|
|
299
|
+
create_task(target, _m, task.context, task.srvName, opts, true)
|
|
300
|
+
)
|
|
301
|
+
// re-trigger the drain to schedule the new occurrence
|
|
302
|
+
_setWaitingTime(0)
|
|
303
|
+
}
|
|
270
304
|
}
|
|
271
305
|
return result
|
|
272
306
|
})
|
|
@@ -353,7 +387,7 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
353
387
|
if (each.updateData.lastError && typeof each.updateData.lastError !== 'string') {
|
|
354
388
|
each.updateData.lastError = inspect(each.updateData.lastError)
|
|
355
389
|
}
|
|
356
|
-
each.updateData.lastAttemptTimestamp = cds.context
|
|
390
|
+
each.updateData.lastAttemptTimestamp = cds.context?.timestamp ?? new Date()
|
|
357
391
|
queries.push(UPDATE(tasksEntity).where({ ID: each.ID }).set(each.updateData))
|
|
358
392
|
}
|
|
359
393
|
|
|
@@ -409,11 +443,11 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
409
443
|
}
|
|
410
444
|
}
|
|
411
445
|
|
|
412
|
-
// handle `every`
|
|
413
|
-
|
|
446
|
+
// handle `every` — !legacyLocking recreates in the success tx above; the legacyLocking path
|
|
447
|
+
// (deferred delete) recreates here, using a read-back to detect a concurrent unschedule/reschedule
|
|
448
|
+
if (task.msg.queue?.every && opts.legacyLocking) {
|
|
414
449
|
const _m = { ...task.msg }
|
|
415
450
|
if (task.msg.queue.task) {
|
|
416
|
-
// Read from database as the singleton task might have been modified/deleted in the meantime
|
|
417
451
|
const dbTask = await SELECT.one(tasksEntity).where({ ID: task.ID })
|
|
418
452
|
if (!dbTask) continue //> was unscheduled -> no next occurrence
|
|
419
453
|
Object.assign(_m, JSON.parse(dbTask.msg))
|
|
@@ -425,6 +459,8 @@ const _processTasks = (target, tenant, _opts = {}) => {
|
|
|
425
459
|
}
|
|
426
460
|
// invoke failed handlers (only if max attempts is reached)
|
|
427
461
|
for (const task of toBeUpdated) {
|
|
462
|
+
// skip dead-lettered messages whose service is not served/registered (see above)
|
|
463
|
+
if (!cds.services[task.srvName]) continue
|
|
428
464
|
if (
|
|
429
465
|
!task.msg.event.endsWith('/#succeeded') &&
|
|
430
466
|
!task.msg.event.endsWith('/#failed') &&
|
|
@@ -25,10 +25,15 @@ const $service = Symbol('service')
|
|
|
25
25
|
const MAX_WAITING_TIME = 1480000
|
|
26
26
|
const CAPATTEMPTS = Math.ceil(Math.log(MAX_WAITING_TIME / 1000 + 1) / Math.log(1.5))
|
|
27
27
|
|
|
28
|
+
const _timestampPlusOneMS = ts => new Date(ts.getTime() + 1).toISOString()
|
|
29
|
+
|
|
28
30
|
let _processableTasksQuery = {}
|
|
29
31
|
|
|
30
|
-
const
|
|
31
|
-
if (w.xpr) return w.xpr.map(xpr =>
|
|
32
|
+
const _inlineLiterals = w => {
|
|
33
|
+
if (w.xpr) return w.xpr.map(xpr => _inlineLiterals(xpr))
|
|
34
|
+
// also recurse into function args (e.g. `startswith(target, '<appid>')`) so a literal arg isn't
|
|
35
|
+
// bound as a `?` and shift the positional binding of the query's real params
|
|
36
|
+
if (w.args) return (Array.isArray(w.args) ? w.args : Object.values(w.args)).map(a => _inlineLiterals(a))
|
|
32
37
|
if (w.val === undefined) return w
|
|
33
38
|
w.param = false
|
|
34
39
|
return w
|
|
@@ -50,9 +55,14 @@ const _getProcessableTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
|
|
|
50
55
|
|
|
51
56
|
const appid = cds.env.appid
|
|
52
57
|
|
|
58
|
+
// also match pre-`appid` rows: `appid IS NULL` with `target` starting with `appid` (the former app prefix)
|
|
59
|
+
const targetCondition = appid
|
|
60
|
+
? `(appid = '${appid}' AND target = '${queueName}') OR (appid IS NULL AND startswith(target, '${appid}') = true)`
|
|
61
|
+
: `target = '${queueName}'`
|
|
62
|
+
|
|
53
63
|
const sql = `
|
|
54
64
|
SELECT ID FROM ${entity.name}
|
|
55
|
-
WHERE ${
|
|
65
|
+
WHERE (${targetCondition})
|
|
56
66
|
AND attempts < ${maxAttempts}
|
|
57
67
|
AND (status is NULL OR lastAttemptTimestamp < ?)
|
|
58
68
|
AND (${attemptConditions.join(' OR ')})
|
|
@@ -61,10 +71,9 @@ const _getProcessableTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
|
|
|
61
71
|
|
|
62
72
|
_processableTasksQuery[queueName] = cds.ql(sql)
|
|
63
73
|
_processableTasksQuery[queueName].SELECT.limit.rows.param = false
|
|
64
|
-
_processableTasksQuery[queueName].SELECT.where.map(w =>
|
|
74
|
+
_processableTasksQuery[queueName].SELECT.where.map(w => _inlineLiterals(w))
|
|
65
75
|
_processableTasksQuery[queueName].SELECT.columns = Object.keys(entity.elements).map(k => ({ ref: [k] }))
|
|
66
|
-
_processableTasksQuery[queueName].forUpdate()
|
|
67
|
-
_processableTasksQuery[queueName].SELECT.forUpdate.ignoreLocked = true
|
|
76
|
+
_processableTasksQuery[queueName].forUpdate({ ignoreLocked: true })
|
|
68
77
|
|
|
69
78
|
return _processableTasksQuery[queueName]
|
|
70
79
|
}
|
|
@@ -101,10 +110,9 @@ const _getFlushTasksQuery = ({ maxAttempts, chunkSize }, queueName) => {
|
|
|
101
110
|
ORDER BY timestamp ASC, ID ASC
|
|
102
111
|
LIMIT ${chunkSize}`)
|
|
103
112
|
_flushTasksQuery[queueName].SELECT.limit.rows.param = false
|
|
104
|
-
_flushTasksQuery[queueName].SELECT.where.map(w =>
|
|
113
|
+
_flushTasksQuery[queueName].SELECT.where.map(w => _inlineLiterals(w))
|
|
105
114
|
_flushTasksQuery[queueName].SELECT.columns = Object.keys(entity.elements).map(k => ({ ref: [k] }))
|
|
106
|
-
_flushTasksQuery[queueName].forUpdate()
|
|
107
|
-
_flushTasksQuery[queueName].SELECT.forUpdate.ignoreLocked = true
|
|
115
|
+
_flushTasksQuery[queueName].forUpdate({ ignoreLocked: true })
|
|
108
116
|
}
|
|
109
117
|
return _flushTasksQuery[queueName]
|
|
110
118
|
}
|
|
@@ -257,8 +265,13 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
257
265
|
const user = new cds.User.Privileged(userId)
|
|
258
266
|
context.user = user
|
|
259
267
|
|
|
260
|
-
//
|
|
261
|
-
|
|
268
|
+
// older messages have no `service`; the name is encoded in `target` as `<appid><serviceName>`
|
|
269
|
+
let srvName = _msg.service
|
|
270
|
+
if (!srvName) {
|
|
271
|
+
srvName = _task.target
|
|
272
|
+
const appid = cds.env.appid
|
|
273
|
+
if (appid && srvName.startsWith(appid)) srvName = srvName.slice(appid.length)
|
|
274
|
+
}
|
|
262
275
|
delete _msg.service
|
|
263
276
|
|
|
264
277
|
const fromSend = _msg._fromSend
|
|
@@ -301,6 +314,15 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
301
314
|
|
|
302
315
|
try {
|
|
303
316
|
const _handleWithErr = async task => {
|
|
317
|
+
if (!cds.services[task.srvName]) {
|
|
318
|
+
// service not served/registered: unrecoverable, so dead-letter it (attempts -> maxAttempts)
|
|
319
|
+
// instead of crashing the app or blocking the queue
|
|
320
|
+
LOG.error(`No service '${task.srvName}' found for a queued message; treating as unrecoverable.`)
|
|
321
|
+
task[$error] = new Error(`No service '${task.srvName}' found`)
|
|
322
|
+
task.updateData = { attempts: opts.maxAttempts }
|
|
323
|
+
toBeUpdated.push(task)
|
|
324
|
+
return
|
|
325
|
+
}
|
|
304
326
|
const service = cds.unqueued(await cds.connect.to(task.srvName))
|
|
305
327
|
try {
|
|
306
328
|
if (task.msg.query) {
|
|
@@ -330,12 +352,18 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
330
352
|
.where({ msg: { like: `%"tenant":"${task.msg.data.tenant}"%` } })
|
|
331
353
|
.where({ msg: { like: `%"target":"${task.msg.data.target}"%` } })
|
|
332
354
|
} else {
|
|
333
|
-
|
|
355
|
+
const _delete = DELETE.from(OUTBOX).where({ ID: task.ID })
|
|
356
|
+
// guard on the selected row's timestamp so a concurrent unschedule/reschedule is
|
|
357
|
+
// serialized against the recurrence recreated below
|
|
358
|
+
if (task.msg.queue?.task)
|
|
359
|
+
_delete.where({ timestamp: { '<': _timestampPlusOneMS(new Date(task._task.timestamp)) } })
|
|
360
|
+
const _deleted = await _delete
|
|
361
|
+
const _cnt = typeof _deleted === 'number' ? _deleted : (_deleted?.affected ?? 0)
|
|
334
362
|
|
|
335
363
|
// For atomicity: create follow-up tasks in same transaction as delete
|
|
336
364
|
const follow_ups = []
|
|
337
365
|
|
|
338
|
-
// #succeeded callback
|
|
366
|
+
// #succeeded callback — always owed once the in-flight execution completed
|
|
339
367
|
if (!task.msg.event.endsWith('/#succeeded') && !task.msg.event.endsWith('/#failed')) {
|
|
340
368
|
const succeededMsg = _newMsgForCallbackFrom(task.msg)
|
|
341
369
|
succeededMsg.event = succeededMsg.event + '/#succeeded'
|
|
@@ -352,8 +380,9 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
352
380
|
}
|
|
353
381
|
}
|
|
354
382
|
|
|
355
|
-
//
|
|
356
|
-
|
|
383
|
+
// next occurrence — only if the guarded delete removed the row (else it was unscheduled/
|
|
384
|
+
// rescheduled concurrently); non-singletons always recreate
|
|
385
|
+
if (task.msg.queue?.every && (!task.msg.queue?.task || _cnt > 0)) {
|
|
357
386
|
const _m = { ...task.msg }
|
|
358
387
|
_m._fromSend = task.msg instanceof cds.Request
|
|
359
388
|
const next_iteration_task = create_task(queueName, _m, task.context, task.srvName, opts, true)
|
|
@@ -423,7 +452,7 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
423
452
|
if (each.updateData.lastError && typeof each.updateData.lastError !== 'string') {
|
|
424
453
|
each.updateData.lastError = inspect(each.updateData.lastError)
|
|
425
454
|
}
|
|
426
|
-
each.updateData.lastAttemptTimestamp = cds.context.
|
|
455
|
+
each.updateData.lastAttemptTimestamp = cds.context?.timestamp ?? new Date().toISOString()
|
|
427
456
|
follow_up_tasks.push(Object.assign({}, each._task, each.updateData))
|
|
428
457
|
afters.add(waitingTime(each.updateData.attempts))
|
|
429
458
|
}
|
|
@@ -441,6 +470,8 @@ const _processTasks = (queueName, tenant, _opts = {}) => {
|
|
|
441
470
|
|
|
442
471
|
// Create #failed callbacks (only if max attempts is reached)
|
|
443
472
|
for (const task of toBeUpdated) {
|
|
473
|
+
// skip dead-lettered messages whose service is not served/registered (see above)
|
|
474
|
+
if (!cds.services[task.srvName]) continue
|
|
444
475
|
if (
|
|
445
476
|
!is_t0 &&
|
|
446
477
|
!task.msg.event.endsWith('/#succeeded') &&
|
|
@@ -548,6 +579,11 @@ exports.queued = function queued(srv, opts) {
|
|
|
548
579
|
// REVISIT: why is req.context preferred and when would they differ?
|
|
549
580
|
const context = req.context || cds.context
|
|
550
581
|
|
|
582
|
+
// In MT apps, scheduling without a tenant is ambiguous — require explicit tenant context
|
|
583
|
+
if (cds.requires.multitenancy && !context.tenant) {
|
|
584
|
+
throw new Error(`Cannot schedule task without tenant context in multitenant app`)
|
|
585
|
+
}
|
|
586
|
+
|
|
551
587
|
// persistent queue
|
|
552
588
|
if (queueOpts.kind === 'persistent-queue' && _hasPersistentQueue(context.tenant)) {
|
|
553
589
|
const scheduler = await cds.connect.to(SCHEDULER_SERVICE)
|
|
@@ -51,6 +51,9 @@ const create_task = (queueName, msg, context, serviceName, queueOpts, reoccurren
|
|
|
51
51
|
appid: cds.env.appid,
|
|
52
52
|
target: cds.env.appid ? queueName : targetName(queueName, queueOpts),
|
|
53
53
|
timestamp,
|
|
54
|
+
// reset status so re-submitting a task that is currently being processed (UPSERT over its
|
|
55
|
+
// 'processing' row) yields a processable row again instead of a stuck one
|
|
56
|
+
status: null,
|
|
54
57
|
msg: JSON.stringify(_msg)
|
|
55
58
|
}
|
|
56
59
|
|
|
@@ -74,6 +74,7 @@ class RestAdapter extends HttpAdapter {
|
|
|
74
74
|
let def = req._operation || cds.infer.target(req._query)
|
|
75
75
|
const defs = srv.model.definitions
|
|
76
76
|
if (typeof def === 'string') def = defs[def] || defs[def.split(':$:')[0]].actions[def.split(':$:')[1]]
|
|
77
|
+
if (req._operation) def = def?.returns?.items ?? def?.returns
|
|
77
78
|
if (def) postProcessData(result, srv, def)
|
|
78
79
|
}
|
|
79
80
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sap/cds",
|
|
3
|
-
"version": "10.1
|
|
3
|
+
"version": "10.2.1",
|
|
4
4
|
"description": "SAP Cloud Application Programming Model - CDS for Node.js",
|
|
5
5
|
"homepage": "https://cap.cloud.sap/",
|
|
6
6
|
"keywords": [
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"CHANGELOG.md"
|
|
30
30
|
],
|
|
31
31
|
"engines": {
|
|
32
|
-
"node": ">=22"
|
|
32
|
+
"node": ">=22.12"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@sap/cds-compiler": "^7",
|
|
@@ -46,6 +46,7 @@ module.exports = async function cds_server (options) {
|
|
|
46
46
|
if (o.static) app.use (express.static (o.static)) //> defaults to ./app
|
|
47
47
|
if (o.favicon) app.use ('/favicon.ico', o.favicon) //> if none in ./app
|
|
48
48
|
if (o.index) app.get ('/',o.index) //> if none in ./app
|
|
49
|
+
if (o.index) app.use ('/.cap', express.static (__dirname+'/app'))
|
|
49
50
|
|
|
50
51
|
// load and prepare models
|
|
51
52
|
const csn = await cds.load(o.from||'*',o); o.from = false
|
|
@@ -19,11 +19,19 @@ const xsuaaSrv = Object.keys(vcap_services)
|
|
|
19
19
|
if (!xsuaaSrv)
|
|
20
20
|
throw new Error('You need to provide credentials of service `XSUAA` in environment variable `VCAP_SERVICES`')
|
|
21
21
|
const tokenStore = {}
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
const xsuaaCreds = xsuaaSrv.credentials
|
|
23
|
+
const oa2 =
|
|
24
|
+
xsuaaCreds['credential-type'] === 'x509'
|
|
25
|
+
? {
|
|
26
|
+
client: xsuaaCreds.clientid,
|
|
27
|
+
endpoint: xsuaaCreds.certurl,
|
|
28
|
+
mTLS: { cert: xsuaaCreds.certificate, key: xsuaaCreds.key }
|
|
29
|
+
}
|
|
30
|
+
: {
|
|
31
|
+
client: xsuaaCreds.clientid,
|
|
32
|
+
secret: xsuaaCreds.clientsecret,
|
|
33
|
+
endpoint: xsuaaCreds.url
|
|
34
|
+
}
|
|
27
35
|
|
|
28
36
|
const main = async () => {
|
|
29
37
|
// use authorizedRequest to fire against deploy endpoint
|