@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
|
@@ -7,9 +7,9 @@ const {
|
|
|
7
7
|
forEachDefinition,
|
|
8
8
|
forEachGeneric,
|
|
9
9
|
forEachMemberRecursively,
|
|
10
|
-
} = require('../../
|
|
10
|
+
} = require('../../base/csnUtils');
|
|
11
11
|
const { isBuiltinType } = require('../../base/builtins');
|
|
12
|
-
const { isArtifactInSomeService, isArtifactInService } = require('./utils');
|
|
12
|
+
const { isArtifactInSomeService, isArtifactInService, odataTypeFacetAnnotations } = require('./utils');
|
|
13
13
|
const { cloneCsnDict, cloneCsnNonDict } = require('../../base/cloneCsn');
|
|
14
14
|
|
|
15
15
|
function expandToFinalBaseType(csn, transformers, csnUtils, services, options, error) {
|
|
@@ -18,15 +18,28 @@ function expandToFinalBaseType(csn, transformers, csnUtils, services, options, e
|
|
|
18
18
|
// Unravel derived type chains to final one for elements, actions, action parameters (propagating annotations)
|
|
19
19
|
forEachMemberRecursively(def, (member, _memberName) => {
|
|
20
20
|
expandToFinalBaseType(member, defName);
|
|
21
|
+
// Mark items nodes so isExpandable can distinguish them from direct element types.
|
|
22
|
+
// Annotated outside-service scalar items types (many T) are preserved for TypeDefinition
|
|
23
|
+
// exposure
|
|
24
|
+
if (isV4 && member.items)
|
|
25
|
+
setProp(member.items, '$v4ItemsContext', true);
|
|
21
26
|
expandToFinalBaseType(member.items, defName);
|
|
22
27
|
expandToFinalBaseType(member.returns, defName);
|
|
23
|
-
|
|
28
|
+
const returnsItems = member.returns && member.returns.items;
|
|
29
|
+
if (isV4 && returnsItems)
|
|
30
|
+
setProp(returnsItems, '$v4ItemsContext', true);
|
|
31
|
+
expandToFinalBaseType(returnsItems, defName);
|
|
24
32
|
}, [ 'definitions', defName ]);
|
|
25
33
|
|
|
26
34
|
expandToFinalBaseType(def, defName);
|
|
35
|
+
if (isV4 && def.items)
|
|
36
|
+
setProp(def.items, '$v4ItemsContext', true);
|
|
27
37
|
expandToFinalBaseType(def.items, defName);
|
|
28
38
|
expandToFinalBaseType(def.returns, defName);
|
|
29
|
-
|
|
39
|
+
const defReturnsItems = def.returns && def.returns.items;
|
|
40
|
+
if (isV4 && defReturnsItems)
|
|
41
|
+
setProp(defReturnsItems, '$v4ItemsContext', true);
|
|
42
|
+
expandToFinalBaseType(defReturnsItems, defName);
|
|
30
43
|
/*
|
|
31
44
|
If the definition('def' variable) is a type definition and the assigned type of this very same definition('def' variable)
|
|
32
45
|
is structured type, e.g.:
|
|
@@ -267,7 +280,18 @@ function expandToFinalBaseType(csn, transformers, csnUtils, services, options, e
|
|
|
267
280
|
const isBuiltin = isBuiltinType(finalBaseType.type);
|
|
268
281
|
const isAssoc = node.target;
|
|
269
282
|
const isInCurServ = isArtifactInService(node.type, currService);
|
|
270
|
-
|
|
283
|
+
// For items context in V4 - also preserve annotated outside-service scalar types so the types exposure
|
|
284
|
+
// can expose them as TypeDefinitions. Only applies to items nodes (many T), not direct element types,
|
|
285
|
+
// to avoid breaking allInOneFlattening.
|
|
286
|
+
// Exclude annotations that must not trigger TypeDefinition creation:
|
|
287
|
+
// @cds.* — compiler-internal markers (e.g. @cds.external); never rendered in EDMX
|
|
288
|
+
// @odata.Type / @odata.<facet> — type-facet overrides; change the primitive mapping, so the TypeDefinition would get a wrong UnderlyingType
|
|
289
|
+
// @open — map open/closed marker; type must resolve to cds.Map, not become a TypeDefinition
|
|
290
|
+
const itemsTypeDef = isV4 && node.$v4ItemsContext && !isBuiltinType(node.type) && csn.definitions[node.type];
|
|
291
|
+
const hasExposableAnnotations = !!itemsTypeDef && Object.keys(itemsTypeDef).some(
|
|
292
|
+
k => k[0] === '@' && !k.startsWith('@cds.') && !odataTypeFacetAnnotations.includes(k) && k !== '@open'
|
|
293
|
+
);
|
|
294
|
+
return !isV4 || !(isBuiltin && !isAssoc && (isInCurServ || hasExposableAnnotations));
|
|
271
295
|
}
|
|
272
296
|
|
|
273
297
|
// convert $path to path starting at main artifact
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
const { setProp } = require('../../utils/objectUtils');
|
|
10
10
|
const { isBetaEnabled } = require('../../base/specialOptions');
|
|
11
|
-
const { defNameWithoutServiceOrContextName, isArtifactInService } = require('./utils');
|
|
11
|
+
const { defNameWithoutServiceOrContextName, isArtifactInService, odataTypeFacetAnnotations } = require('./utils');
|
|
12
12
|
const {
|
|
13
13
|
getNamespace, copyAnnotations,
|
|
14
14
|
forEachDefinition, forEachMember, forEachGeneric, isEdmPropertyRendered,
|
|
15
|
-
} = require('../../
|
|
15
|
+
} = require('../../base/csnUtils');
|
|
16
16
|
const { isBuiltinType } = require('../../base/builtins');
|
|
17
17
|
const { CompilerAssertion } = require('../../base/error');
|
|
18
18
|
const { cloneCsnNonDict } = require('../../base/cloneCsn');
|
|
@@ -253,7 +253,7 @@ function typesExposure(csn, whatsMyServiceName, requestedServiceNames, fallBackS
|
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
-
else if (isTermDef) {
|
|
256
|
+
else if (isTermDef || (!elements && !isAnonymous)) {
|
|
257
257
|
newType = Object.create(null);
|
|
258
258
|
for (const n in typeDef)
|
|
259
259
|
newType[n] = typeDef[n];
|
|
@@ -319,6 +319,16 @@ function typesExposure(csn, whatsMyServiceName, requestedServiceNames, fallBackS
|
|
|
319
319
|
// Implementation note: For `type S: T:struct;`, elements from `T:struct` were already propagated to `S`.
|
|
320
320
|
if ((isTermDef && typeDef.enum) || (rc.elements = (typeDef.items?.elements || typeDef.elements)) !== undefined)
|
|
321
321
|
return rc;
|
|
322
|
+
// Annotated outside-service scalar types in items context (many T) need to be exposed as TypeDefinitions.
|
|
323
|
+
// Only applies to items nodes (not direct type refs) to preserve existing behavior for direct uses.
|
|
324
|
+
// Exclude types annotated with:
|
|
325
|
+
// @cds.* — compiler-internal markers (e.g. @cds.external); never rendered in EDMX
|
|
326
|
+
// @odata.Type / @odata.<facet> — type-facet overrides; change the primitive mapping, so the TypeDefinition would get a wrong UnderlyingType
|
|
327
|
+
// @open — map open/closed marker; type must resolve to cds.Map, not become a TypeDefinition
|
|
328
|
+
if (node.items && Object.keys(typeDef).some(
|
|
329
|
+
k => k[0] === '@' && !k.startsWith('@cds.') && !odataTypeFacetAnnotations.includes(k) && k !== '@open'
|
|
330
|
+
))
|
|
331
|
+
return rc;
|
|
322
332
|
type = typeDef.items?.type || typeDef.type;
|
|
323
333
|
typeName = (type.ref && csnUtils.artifactRef(type)) || type;
|
|
324
334
|
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const { EdmTypeFacetNames } = require('../../edm/EdmPrimitiveTypeDefinitions');
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* Return the definition name, without the prefixed service name
|
|
5
7
|
* @param {string} name
|
|
@@ -56,10 +58,17 @@ function isLocalizedArtifactInService(artName, services) {
|
|
|
56
58
|
return isArtifactInSomeService(artName.split('.').slice(1).join('.'), services);
|
|
57
59
|
}
|
|
58
60
|
|
|
61
|
+
// @odata.* type-facet annotations that override how a scalar type maps to an EDM primitive.
|
|
62
|
+
// A type carrying these must not trigger TypeDefinition creation because the TypeDefinition
|
|
63
|
+
// would get a wrong UnderlyingType (e.g. @odata.Type: 'Edm.Date' on a String-based type).
|
|
64
|
+
// Derived from EdmTypeFacetNames (the actively processed facets) plus @odata.Type itself.
|
|
65
|
+
const odataTypeFacetAnnotations = [ '@odata.Type', ...EdmTypeFacetNames.map(n => `@odata.${ n }`) ];
|
|
66
|
+
|
|
59
67
|
module.exports = {
|
|
60
68
|
defNameWithoutServiceOrContextName,
|
|
61
69
|
getServiceOfArtifact,
|
|
62
70
|
isArtifactInService,
|
|
63
71
|
isArtifactInSomeService,
|
|
64
72
|
isLocalizedArtifactInService,
|
|
73
|
+
odataTypeFacetAnnotations,
|
|
65
74
|
};
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
|
|
7
7
|
const { setProp } = require('../utils/objectUtils');
|
|
8
8
|
|
|
9
|
-
const { copyAnnotations, applyTransformations, isDeepEqual } = require('../
|
|
10
|
-
const { getUtils, implicitAs } = require('../
|
|
9
|
+
const { copyAnnotations, applyTransformations, isDeepEqual } = require('../base/csnUtils');
|
|
10
|
+
const { getUtils, implicitAs } = require('../base/csnUtils');
|
|
11
11
|
const { typeParameters } = require('../compiler/builtins');
|
|
12
12
|
const { isBuiltinType } = require('../base/builtins');
|
|
13
13
|
const { ModelError, CompilerAssertion } = require('../base/error');
|
|
@@ -1685,7 +1685,7 @@ function translateAssocsToJoins(model, inputOptions = {}) {
|
|
|
1685
1685
|
// If rootQat ($tableAlias) already has a QA, reuse it, create a new one otherwise.
|
|
1686
1686
|
if (!rootQat.$QA) {
|
|
1687
1687
|
// Use the original FROM alias if available!
|
|
1688
|
-
if (pathDict.name && pathDict.name.id) {
|
|
1688
|
+
if (env.location === 'from' && pathDict.name && pathDict.name.id) {
|
|
1689
1689
|
qat.$QA = createQA(env, art, pathDict.name.id, qat._namedArgs);
|
|
1690
1690
|
rootQat.$QA = qat.$QA;
|
|
1691
1691
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const { setProp } = require('../utils/objectUtils');
|
|
4
|
-
const { applyTransformations, isDollarSelfOrProjectionOperand, implicitAs } = require('../
|
|
4
|
+
const { applyTransformations, isDollarSelfOrProjectionOperand, implicitAs } = require('../base/csnUtils');
|
|
5
5
|
const { isBuiltinType } = require('../base/builtins');
|
|
6
6
|
const { condAsTree } = require('../base/xprAsTree');
|
|
7
7
|
const { pathToMessageString } = require('../base/messages');
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
forEachDefinition, forAllQueries, getNormalizedQuery, forEachMemberRecursively,
|
|
5
|
-
} = require('../../
|
|
5
|
+
} = require('../../base/csnUtils');
|
|
6
6
|
const { setAnnotationIfNotDefined } = require('./utils');
|
|
7
7
|
const { CompilerAssertion } = require('../../base/error');
|
|
8
8
|
const { isMagicVariable } = require('../../base/builtins');
|
|
@@ -6,10 +6,53 @@ This project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
The format is based on [Keep a Changelog](https://keepachangelog.com/).
|
|
8
8
|
|
|
9
|
+
## Version 4.2.0 - 2026-10-21
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- When an `extension-allowlist` is configured, CSV data uploaded with tenant extensions is now validated against it.
|
|
14
|
+
- Tenant metadata APIs now report `status` as `SUBSCRIBED`, `UNSUBSCRIBING`, or `UNSUBSCRIPTION_FAILED`.
|
|
15
|
+
- `cds.requires.multitenancy.containerManager.lifecycleMaxRetryAfter` now controls the maximum container manager retry delay during tenant subscription and unsubscription, defaulting to 5 minutes while `maxRetryAfter` defaults to 5 seconds.
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- HANA Cloud serverless now resolves subscriber containers in their own HANA tenants instead of the application provider's tenant.
|
|
20
|
+
- Extensions can no longer expose internal entities (e.g. `cds.xt.Extensions`) by projecting or selecting from a protected namespace.
|
|
21
|
+
- `cds build` now produces identical main application CSNs for the server and MTX sidecar.
|
|
22
|
+
- `cds.xt.SaasProvisioningService` now waits for asynchronous subscription callbacks before emitting the final job update.
|
|
23
|
+
- Bulk tenant upgrades now skip tenants whose unsubscription failed.
|
|
24
|
+
- HANA tenant unsubscription is now idempotent when Service Manager still lists already deleted resources.
|
|
25
|
+
- `cds unsubscribe <t0> --local` now executes the unsubscription for the configured root tenant instead of returning without effect.
|
|
26
|
+
- `cds.xt.SaasProvisioningService.upgrade` now preserves the original error status for failed tenant tasks.
|
|
27
|
+
- The MTX sidecar now reports invalid production build layouts at startup and logs the full cause of deployment resource failures.
|
|
28
|
+
- The Service Manager client no longer forwards TMS-specific parameters to the server to make migration from Service Manager to HANA TMS v2 easier.
|
|
29
|
+
- Login endpoint for the extension upload now supports PKCE login with subscriber IAS host.
|
|
30
|
+
- `cds-mtx-migrate '*' --sync-tenant-list` supports `--dry` again.
|
|
31
|
+
- Entities and views with namespaces `cds.outbox` and `cds.core` can no longer be extended via tenant specific extensibility.
|
|
32
|
+
|
|
33
|
+
## Version 4.1.1 - 2026-09-24
|
|
34
|
+
|
|
35
|
+
### Added
|
|
36
|
+
|
|
37
|
+
- Beta: The HANA container manager can use Service Manager v2 when `features.service_manager_v2` is enabled.
|
|
38
|
+
- `cds-mtx` also accepts space-separated tenant lists such as `cds-mtx upgrade t1 t2 t3`.
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- Service Manager retries now use jittered backoff to avoid synchronized retries during transient failures.
|
|
43
|
+
- HANA Cloud serverless token requests now include the IAS application tenant ID when the client ID is not unique.
|
|
44
|
+
- `cds-mtx` now prints the complete error with stack and causes when an operation fails.
|
|
45
|
+
- A malformed extension `csn` string is now rejected with status `422` instead of `500`.
|
|
46
|
+
- The Service Manager client now recreates an HDI container whose last operation was a succeeded deletion, instead of reusing the deleted instance.
|
|
47
|
+
- The upgrade check that aborts on existing extensions when extensibility is disabled now reliably detects the `cds.xt.Extensions` table even if it is not part of the model.
|
|
48
|
+
- More robust handling of faulty archives sent to `cds.xt.ExtensibilityService.push`.
|
|
49
|
+
- MTX now always uses node-tar for archive handling for more stability.
|
|
50
|
+
|
|
9
51
|
## Version 4.1.0 - 2026-09-04
|
|
10
52
|
|
|
11
53
|
### Added
|
|
12
54
|
|
|
55
|
+
- The extensibility login endpoints support SAP Cloud Identity Services (IAS): with `auth: ias`, `cds login` uses an OAuth 2.0 Authorization Code (PKCE) browser flow. The token targets the subscriber tenant (resolved from the `subdomain`), where `cds.ExtensionDeveloper` is granted via AMS policies.
|
|
13
56
|
- Beta: Multitenant provisioning now supports HANA Cloud serverless, resolving one HDI container per tenant through the serverless Tenant API.
|
|
14
57
|
- Beta: The MTX job service can now use native javascript workers to make the MTX sidecar more responsive while jobs (e. g. tenant upgrade) are running.
|
|
15
58
|
Native workers can be enabled by `nativeWorkers` in the jobs configuration, e. g.
|
|
@@ -26,6 +69,10 @@ Native workers can be enabled by `nativeWorkers` in the jobs configuration, e. g
|
|
|
26
69
|
already upgraded tenants are skipped when running an upgrade of all tenants (`tenants: ['*']`). Tenants are considered as already upgraded if the last upgrade was run after the
|
|
27
70
|
last deployment of the application.
|
|
28
71
|
|
|
72
|
+
### Added
|
|
73
|
+
|
|
74
|
+
- `cds.env.features.native_hdi_deploy` can now enable native HANA tenant deployment with delta uploads, bulk HDI inputs, and streaming for large artifacts.
|
|
75
|
+
|
|
29
76
|
### Fixed
|
|
30
77
|
|
|
31
78
|
- `SmsProvisioningService` certificate check is now better aligned with the Java implementation.
|
|
@@ -42,10 +42,8 @@ async function run(param, options) {
|
|
|
42
42
|
'@sap/cds-mtxs/srv/model-provider'
|
|
43
43
|
]
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
services.push('@sap/cds-mtxs/srv/extensibility-service')
|
|
48
|
-
}
|
|
45
|
+
services.push('@sap/cds-mtxs/srv/deployment-service')
|
|
46
|
+
services.push('@sap/cds-mtxs/srv/extensibility-service')
|
|
49
47
|
|
|
50
48
|
await _local_server_js()
|
|
51
49
|
cds.emit ('bootstrap')
|
|
@@ -58,10 +56,10 @@ async function run(param, options) {
|
|
|
58
56
|
}
|
|
59
57
|
await cds.plugins
|
|
60
58
|
|
|
61
|
-
await cds.emit('served', cds.services)
|
|
62
|
-
|
|
63
59
|
cds.env.requires.multitenancy ??= true // needed for current sidecar config that only enables services
|
|
64
60
|
|
|
61
|
+
await cds.emit('served', cds.services)
|
|
62
|
+
|
|
65
63
|
if (genTenantList) {
|
|
66
64
|
const tenantListResult = await synchronizeTenantList(tenantList, options)
|
|
67
65
|
for (let t of tenantListResult.connectedTenants) await cds.db.disconnect(t)
|
|
@@ -10,8 +10,9 @@ const SUPPORTED = ['subscribe', 'unsubscribe', 'upgrade']
|
|
|
10
10
|
// This function must only be changed in a backward compatible way. It is used by DwC.
|
|
11
11
|
async function cds_mtx(cmd, tenant, body) {
|
|
12
12
|
|
|
13
|
-
const tenants = (Array.isArray(tenant) ? tenant : [tenant]).flatMap(t => t.split(
|
|
13
|
+
const tenants = (Array.isArray(tenant) ? tenant : [tenant]).flatMap(t => t.split(/[\s,]+/)).filter(Boolean)
|
|
14
14
|
const one = tenants.length === 1 ? tenants[0] : undefined
|
|
15
|
+
const t0 = cds.env.requires.multitenancy?.t0 ?? 't0'
|
|
15
16
|
|
|
16
17
|
let connectedTenants = []
|
|
17
18
|
|
|
@@ -56,7 +57,7 @@ async function cds_mtx(cmd, tenant, body) {
|
|
|
56
57
|
await tx.upgrade(['*'], parsedMetadata)
|
|
57
58
|
})
|
|
58
59
|
return
|
|
59
|
-
} else if (one ===
|
|
60
|
+
} else if (one === t0 && cmd !== 'unsubscribe') {
|
|
60
61
|
return
|
|
61
62
|
}
|
|
62
63
|
connectedTenants = tenants
|
|
@@ -70,12 +71,12 @@ async function cds_mtx(cmd, tenant, body) {
|
|
|
70
71
|
}
|
|
71
72
|
} catch(e) {
|
|
72
73
|
if (isCli) {
|
|
73
|
-
console.error(e
|
|
74
|
+
console.error(e)
|
|
74
75
|
process.exit(1)
|
|
75
76
|
} else throw e
|
|
76
77
|
} finally {
|
|
77
78
|
if (cds.db) {
|
|
78
|
-
cds.db.disconnect(
|
|
79
|
+
cds.db.disconnect(t0)
|
|
79
80
|
for (const t of connectedTenants) cds.db.disconnect(t)
|
|
80
81
|
}
|
|
81
82
|
if (isCli) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const cds = require('@sap/cds')
|
|
2
|
+
const { exists } = cds.utils
|
|
2
3
|
const LOG = cds.log('mtx')
|
|
3
4
|
const [major] = cds.version.split('.').map(Number)
|
|
4
5
|
if (major < 9) throw new Error('@sap/cds-mtxs 3 requires @sap/cds version 9 or higher. Current version: ' + cds.version)
|
|
@@ -13,8 +14,13 @@ const sqlDefaults = Object.fromEntries(
|
|
|
13
14
|
require('./srv/extensibility/linter').legacyCheck()
|
|
14
15
|
|
|
15
16
|
const main = require('./srv/config')
|
|
17
|
+
const inSidecar = cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true
|
|
16
18
|
|
|
17
|
-
if (
|
|
19
|
+
if (inSidecar && process.env.NODE_ENV === 'production' && !exists(main.root)) {
|
|
20
|
+
throw new Error(`Invalid MTX sidecar layout: '${main.root}' is missing. Ensure the generated sidecar build output is deployed.`)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (main.env.cdsc && inSidecar) {
|
|
18
24
|
if (cds.env.cdsc && !(cds.env.requires['cds.xt.ModelProviderService']?.['use-local-cdsc-config'] === true)) {
|
|
19
25
|
|
|
20
26
|
// should not be used in MTX
|
|
@@ -32,7 +38,7 @@ if (main.env.cdsc && cds.env.requires['cds.xt.ModelProviderService']?._in_sideca
|
|
|
32
38
|
cds.env.cdsc = main.env.cdsc
|
|
33
39
|
}
|
|
34
40
|
|
|
35
|
-
if (
|
|
41
|
+
if (inSidecar) {
|
|
36
42
|
if (!(cds.env.requires['cds.xt.ModelProviderService']?.['use-root-sql-config'] === true)) {
|
|
37
43
|
const stringifiedSql = JSON.stringify(cds.env.sql)
|
|
38
44
|
|
|
@@ -46,3 +52,33 @@ if (cds.env.requires['cds.xt.ModelProviderService']?._in_sidecar === true) {
|
|
|
46
52
|
} else {
|
|
47
53
|
cds.env.sql = main.env.sql
|
|
48
54
|
}
|
|
55
|
+
|
|
56
|
+
cds.once('served', async () => {
|
|
57
|
+
if (cds.model.definitions['cds.xt.ModelProviderService']) return
|
|
58
|
+
const { definitions } = cds.model
|
|
59
|
+
const models = []
|
|
60
|
+
|
|
61
|
+
if (cds.requires.multitenancy) {
|
|
62
|
+
_serve('cds.xt.SaasProvisioningService')
|
|
63
|
+
_serve('cds.xt.DeploymentService')
|
|
64
|
+
_serve('cds.xt.ModelProviderService')
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (cds.requires.extensibility) {
|
|
68
|
+
_serve('cds.xt.ExtensibilityService')
|
|
69
|
+
_serve('cds.xt.ModelProviderService')
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (cds.requires.toggles) {
|
|
73
|
+
_serve('cds.xt.ModelProviderService')
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function _serve(service) {
|
|
77
|
+
if (service in definitions) return
|
|
78
|
+
if (cds.requires[service] === false) return
|
|
79
|
+
models.push(cds.requires.kinds[service].model)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (models.length) await cds.serve(models).in(cds.app)
|
|
83
|
+
})
|
|
84
|
+
require('./srv/plugins/common')
|
|
@@ -7,6 +7,13 @@ entity Tenants {
|
|
|
7
7
|
modifiedAt : Timestamp @cds.on.insert : $now @cds.on.update : $now;
|
|
8
8
|
schema : String;
|
|
9
9
|
version : String;
|
|
10
|
+
status : TenantStatus default #SUBSCRIBED;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type TenantStatus : String enum {
|
|
14
|
+
SUBSCRIBED;
|
|
15
|
+
UNSUBSCRIBING;
|
|
16
|
+
UNSUBSCRIPTION_FAILED;
|
|
10
17
|
}
|
|
11
18
|
|
|
12
19
|
entity Jobs {
|
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
const cds = require('@sap/cds')
|
|
2
|
-
const LOG = cds.log('mtx'), DEBUG = cds.debug('mtx'), { read, readdir, path
|
|
2
|
+
const LOG = cds.log('mtx'), DEBUG = cds.debug('mtx'), { read, readdir, path } = cds.utils
|
|
3
|
+
const nodeTar = require('tar')
|
|
4
|
+
const { Readable } = require('node:stream')
|
|
3
5
|
const { inspect, promisify } = require('node:util')
|
|
4
6
|
|
|
7
|
+
// Extracts a gzipped tar (Buffer or base64) into 'root', guarded against
|
|
8
|
+
// Tar-Slip: node-tar rejects '..'/absolute escapes and the filter drops links.
|
|
9
|
+
const safeUntar = function (extension, root) {
|
|
10
|
+
const buf = typeof extension === 'string' ? Buffer.from(extension, 'base64') : extension
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
const extract = nodeTar.x({
|
|
13
|
+
cwd: root,
|
|
14
|
+
gzip: true,
|
|
15
|
+
strict: true,
|
|
16
|
+
filter: (_p, entry) => entry.type !== 'SymbolicLink' && entry.type !== 'Link'
|
|
17
|
+
})
|
|
18
|
+
Readable.from(buf).pipe(extract)
|
|
19
|
+
extract.on('close', resolve)
|
|
20
|
+
extract.on('error', reject)
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
|
|
5
24
|
const readData = async function (extension, root) {
|
|
6
|
-
await
|
|
25
|
+
await safeUntar(extension, root)
|
|
7
26
|
|
|
8
27
|
let extCsn = {}
|
|
9
28
|
try { extCsn = JSON.parse(await read(path.join(root, 'extension.csn'))) }
|
|
@@ -26,7 +45,7 @@ const readData = async function (extension, root) {
|
|
|
26
45
|
}
|
|
27
46
|
|
|
28
47
|
const readDataCsv = async function (extension, root) {
|
|
29
|
-
await
|
|
48
|
+
await safeUntar(extension, root)
|
|
30
49
|
|
|
31
50
|
const csvs = []
|
|
32
51
|
try {
|
|
@@ -104,10 +123,75 @@ function authUrl(baseUrl, subdomain, pathname) {
|
|
|
104
123
|
return u
|
|
105
124
|
}
|
|
106
125
|
|
|
107
|
-
|
|
126
|
+
// IAS OAuth2 endpoint paths (differ from XSUAA).
|
|
127
|
+
const IAS_AUTHORIZE_PATH = '/oauth2/authorize'
|
|
128
|
+
const IAS_TOKEN_PATH = '/oauth2/token'
|
|
129
|
+
|
|
130
|
+
// IAS uses a fixed tenant host (tenant not encoded as subdomain), so don't rewrite the host.
|
|
131
|
+
function _iasUrl(baseUrl, pathname) {
|
|
132
|
+
const u = new URL(baseUrl)
|
|
133
|
+
u.pathname = pathname
|
|
134
|
+
return u
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Authorization endpoint (browser) → plain (non-cert) URL.
|
|
138
|
+
function iasAuthorizeUrl(credentials) {
|
|
139
|
+
const { url, certurl } = credentials ?? {}
|
|
140
|
+
return _iasUrl(url || certurl, IAS_AUTHORIZE_PATH).toString()
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// Token endpoint → prefer cert URL for mTLS.
|
|
144
|
+
function iasTokenUrl(credentials) {
|
|
145
|
+
const { url, certurl } = credentials ?? {}
|
|
146
|
+
return _iasUrl(certurl || url, IAS_TOKEN_PATH).toString()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Resolves the landscape API host that serves `tenantLoginInfo`. Prefers the authoritative
|
|
150
|
+
// `btp-tenant-api` base injected into the binding; otherwise derives it from the binding URL
|
|
151
|
+
// (e.g. `https://<label>.authentication.eu12.hana.ondemand.com` → `api.authentication.eu12.hana.ondemand.com`).
|
|
152
|
+
// Returns undefined when neither yields a usable host.
|
|
153
|
+
function tenantLoginInfoHost(credentials) {
|
|
154
|
+
const c = credentials ?? {}
|
|
155
|
+
// Authoritative BTP landscape API base, injected into the binding.
|
|
156
|
+
const api = c['btp-tenant-api'] ?? c.btp_tenant_api
|
|
157
|
+
if (api) { try { return new URL(api).host } catch { /* ignore */ } }
|
|
158
|
+
// Fallback: derive from the binding URL by replacing the leftmost label with `api`.
|
|
159
|
+
const base = c.url || c.certurl
|
|
160
|
+
if (!base) return undefined
|
|
161
|
+
try {
|
|
162
|
+
const { hostname } = new URL(base)
|
|
163
|
+
const dot = hostname.indexOf('.')
|
|
164
|
+
// Only rewrite when there is a domain part to keep.
|
|
165
|
+
return dot >= 0 ? 'api' + hostname.slice(dot) : undefined
|
|
166
|
+
} catch { return undefined }
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// Fetches IAS login info for a subscriber subdomain from the landscape endpoint
|
|
170
|
+
// `https://<apiHost>/sap/rest/tenantLoginInfo?subdomain=<subdomain>`.
|
|
171
|
+
// Returns `{ app_tid, tenantHost }` for a trusted/active IAS tenant, otherwise undefined.
|
|
172
|
+
async function tenantLoginInfo(apiHost, subdomain) {
|
|
173
|
+
if (!apiHost || typeof subdomain !== 'string' || !SUBDOMAIN_RE.test(subdomain)) return undefined
|
|
174
|
+
const url = `https://${apiHost}/sap/rest/tenantLoginInfo?subdomain=${encodeURIComponent(subdomain)}`
|
|
175
|
+
try {
|
|
176
|
+
const { data } = await fetchResiliently(url, { method: 'GET', headers: { Accept: 'application/json' } })
|
|
177
|
+
const info = typeof data === 'string' ? JSON.parse(data) : data
|
|
178
|
+
// An untrusted/unknown subdomain yields e.g. `{ status: 'NOTRUST', authentication: 'xsuaa' }`.
|
|
179
|
+
if (!info || !info.app_tid) return undefined
|
|
180
|
+
let tenantHost
|
|
181
|
+
try { tenantHost = info.authorization_endpoint && new URL(info.authorization_endpoint).host } catch { /* ignore */ }
|
|
182
|
+
return { app_tid: info.app_tid, tenantHost }
|
|
183
|
+
} catch (err) {
|
|
184
|
+
DEBUG?.('tenantLoginInfo lookup failed for subdomain', subdomain, '-', err.message)
|
|
185
|
+
return undefined
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// `endpoint`, when given, is the absolute token URL and overrides the binding-derived
|
|
190
|
+
// host; mTLS cert/key and client_id still come from `credentials`.
|
|
191
|
+
async function token(credentials, { query = {}, form = {}, subdomain, path = '/oauth/token', endpoint } = {}) {
|
|
108
192
|
const { clientid, clientsecret, certurl, url, certificate, key } = credentials ?? {}
|
|
109
193
|
if (!form.grant_type) throw cds.error('grant_type is required', { status: 400 })
|
|
110
|
-
const u = authUrl(certurl || url, subdomain, path)
|
|
194
|
+
const u = endpoint ? new URL(endpoint) : authUrl(certurl || url, subdomain, path)
|
|
111
195
|
Object.entries(query).forEach(([k, v]) => u.searchParams.append(k, v))
|
|
112
196
|
const body = new URLSearchParams({ client_id: clientid, ...form })
|
|
113
197
|
const headers = { 'Content-Type': 'application/x-www-form-urlencoded', Accept: 'application/json' }
|
|
@@ -134,7 +218,10 @@ async function token(credentials, { query = {}, form = {}, subdomain, path = '/o
|
|
|
134
218
|
req.end(body.toString())
|
|
135
219
|
})
|
|
136
220
|
} else {
|
|
137
|
-
|
|
221
|
+
// Confidential client → Basic auth; public client (PKCE) → no auth (client_id is in the body).
|
|
222
|
+
if (clientsecret) {
|
|
223
|
+
headers.Authorization = 'Basic ' + Buffer.from(`${clientid}:${clientsecret}`).toString('base64')
|
|
224
|
+
}
|
|
138
225
|
const res = await fetchResiliently(u.toString(), { method: 'POST', headers, body: body.toString() })
|
|
139
226
|
raw = typeof res.data === 'string' ? res.data : JSON.stringify(res.data)
|
|
140
227
|
}
|
|
@@ -142,15 +229,18 @@ async function token(credentials, { query = {}, form = {}, subdomain, path = '/o
|
|
|
142
229
|
}
|
|
143
230
|
|
|
144
231
|
const maxRetries = cds.requires?.multitenancy?.serviceManager?.retries ?? 3 // compat
|
|
232
|
+
const retryHeaders = new Set(['retry-after', 'x-ratelimit-retry-after', 'x-ratelimit-limit', 'x-ratelimit-remaining', 'x-request-id', 'x-correlation-id'])
|
|
233
|
+
|
|
234
|
+
async function fetchResiliently(url, req, { retries = maxRetries, retriesLeft = retries, maxRetryAfter = 5000, failures = 0, retryUntil } = {}) {
|
|
235
|
+
const _backoff = async (attempt, minDelay = 200, error) => {
|
|
236
|
+
const maxDelay = maxRetryAfter
|
|
237
|
+
const baseDelay = Math.max(200 * 2.5 ** attempt, minDelay)
|
|
238
|
+
const delay = Math.max(minDelay, Math.min(maxDelay, baseDelay * (0.5 + Math.random())))
|
|
145
239
|
|
|
146
|
-
async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAfter = 5000, failures = 0, retryUntil } = {}) {
|
|
147
|
-
const _backoff = async (attempt, minDelay = 200) => {
|
|
148
|
-
const maxDelay = 32_000
|
|
149
|
-
const delay = Math.max(200, Math.min(maxDelay, minDelay * 2 ** attempt))
|
|
150
240
|
if (retryUntil && Date.now() + delay > retryUntil) {
|
|
151
241
|
throw new Error('Retry delay threshold exceeded')
|
|
152
242
|
}
|
|
153
|
-
LOG.info('attempt', attempt, 'failed – retrying with', delay / 1000, 's delay')
|
|
243
|
+
LOG.info('attempt', attempt, 'failed', ...(error ? ['with', error.message ?? error] : []), '– retrying with', (delay / 1000).toFixed(1), 's delay')
|
|
154
244
|
await new Promise(resolve => setTimeout(resolve, delay))
|
|
155
245
|
}
|
|
156
246
|
|
|
@@ -177,8 +267,11 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
|
|
|
177
267
|
const data = contentType.includes('application/json') ? await res.json() : await res.text()
|
|
178
268
|
|
|
179
269
|
if (!res.ok) {
|
|
180
|
-
let msg = [status, statusText, data?.message, typeof data?.error === 'object' ? JSON.stringify(data.error) : data?.error, data?.description, data?.cause
|
|
181
|
-
if (res.status === 429
|
|
270
|
+
let msg = [status, statusText, data?.message, typeof data?.error === 'object' ? JSON.stringify(data.error) : data?.error, data?.description, data?.cause].filter(Boolean).join(' – ')
|
|
271
|
+
if (res.status === 429) {
|
|
272
|
+
const relevantHeaders = Object.fromEntries(Object.entries(headers).filter(([name]) => retryHeaders.has(name)))
|
|
273
|
+
msg += ` – headers: ${inspect(relevantHeaders)}`
|
|
274
|
+
}
|
|
182
275
|
throw Object.assign(new Error(msg), { status, statusText, headers, code: data?.error?.code })
|
|
183
276
|
}
|
|
184
277
|
const response = { status, statusText, headers, data }
|
|
@@ -186,10 +279,13 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
|
|
|
186
279
|
return response
|
|
187
280
|
} catch (error) {
|
|
188
281
|
const { status } = error ?? { status: 500 }
|
|
189
|
-
if (status in { 400: 1, 401: 1, 403: 1, 404: 1, 409: 1 } || retriesLeft === 0) return Promise.reject(error)
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
282
|
+
if (status in { 400: 1, 401: 1, 403: 1, 404: 1, 409: 1, 422: 1 } || retriesLeft === 0) return Promise.reject(error)
|
|
283
|
+
const parsedRetryAfter = parseRetryAfter(error.headers || {})
|
|
284
|
+
const minDelay = status === 429
|
|
285
|
+
? (parsedRetryAfter >= 0 ? Math.max(1000, parsedRetryAfter) : 1000)
|
|
286
|
+
: Math.max(200, parsedRetryAfter)
|
|
287
|
+
if (status === 429 && minDelay > maxRetryAfter || retriesLeft === 0) return Promise.reject(error)
|
|
288
|
+
const attempt = Math.max(retries - retriesLeft + 1, failures)
|
|
193
289
|
if (LOG._debug) {
|
|
194
290
|
const e = error.toJSON?.() ?? error
|
|
195
291
|
DEBUG(`fetching ${url} attempt ${attempt} failed with`, {
|
|
@@ -198,14 +294,20 @@ async function fetchResiliently(url, req, { retriesLeft = maxRetries, maxRetryAf
|
|
|
198
294
|
...(e.description && { description: e.description })
|
|
199
295
|
})
|
|
200
296
|
}
|
|
201
|
-
await _backoff(attempt, minDelay)
|
|
202
|
-
return fetchResiliently(url, req, {
|
|
297
|
+
await _backoff(attempt, minDelay, error)
|
|
298
|
+
return fetchResiliently(url, req, {
|
|
299
|
+
retries,
|
|
300
|
+
retriesLeft: retriesLeft - 1,
|
|
301
|
+
maxRetryAfter,
|
|
302
|
+
failures,
|
|
303
|
+
retryUntil
|
|
304
|
+
})
|
|
203
305
|
}
|
|
204
306
|
}
|
|
205
307
|
|
|
206
308
|
// TODO define max acceptable retry-after value?
|
|
207
309
|
function parseRetryAfter(headers) {
|
|
208
|
-
const retryAfter = headers['retry-after']
|
|
310
|
+
const retryAfter = headers['retry-after'] ?? headers['x-ratelimit-retry-after']
|
|
209
311
|
// Handle seconds format (most common)
|
|
210
312
|
if (/^\d+$/.test(retryAfter)) {
|
|
211
313
|
return parseInt(retryAfter, 10) * 1000 // Convert to milliseconds
|
|
@@ -263,8 +365,15 @@ module.exports = {
|
|
|
263
365
|
retry,
|
|
264
366
|
readData,
|
|
265
367
|
readDataCsv,
|
|
368
|
+
safeUntar,
|
|
266
369
|
token,
|
|
267
370
|
authUrl,
|
|
371
|
+
iasAuthorizeUrl,
|
|
372
|
+
iasTokenUrl,
|
|
373
|
+
tenantLoginInfoHost,
|
|
374
|
+
tenantLoginInfo,
|
|
375
|
+
IAS_AUTHORIZE_PATH,
|
|
376
|
+
IAS_TOKEN_PATH,
|
|
268
377
|
fetchResiliently,
|
|
269
378
|
getAppId,
|
|
270
379
|
deepMerge
|