@sap/cds-dk 10.1.2 → 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 +41 -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/java/index.js +5 -1
- package/lib/build/plugins/nodejs/index.js +5 -1
- package/lib/build/util.js +4 -5
- 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/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 +6 -6
- package/lib/init/template/enterprise-messaging-shared/index.js +4 -4
- 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 +29 -27
- 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 +10 -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 +8 -23
- 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 +9 -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 +52 -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/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 -4
- 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 +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 +121 -84
- package/node_modules/@sap/cds/libx/_runtime/messaging/common-utils/authorizedRequest.js +24 -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/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 +6 -0
- 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/api.js +1 -1
- package/node_modules/@sap/cds/libx/queue/index.js +3 -1
- package/node_modules/@sap/cds/libx/queue/processing.js +5 -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-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/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/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 -327
- 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
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
const cds = require('../cds');
|
|
2
|
+
const crypto = require('node:crypto');
|
|
3
|
+
const http = require('node:http');
|
|
4
|
+
|
|
5
|
+
const DEBUG = cds.debug('cli');
|
|
6
|
+
|
|
7
|
+
// Fixed candidate ports for the loopback redirect: IAS matches redirect_uri exactly
|
|
8
|
+
// (incl. port), so `http://localhost:<port>/callback` must be pre-registered. First free wins.
|
|
9
|
+
const DEFAULT_PORTS = [8990, 8991, 8992, 8993, 8994];
|
|
10
|
+
|
|
11
|
+
// Base64-URL without padding (PKCE, RFC 7636).
|
|
12
|
+
function base64url(buffer) {
|
|
13
|
+
return buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// PKCE code_verifier + S256 code_challenge.
|
|
17
|
+
function createPkce() {
|
|
18
|
+
const codeVerifier = base64url(crypto.randomBytes(32));
|
|
19
|
+
const codeChallenge = base64url(crypto.createHash('sha256').update(codeVerifier).digest());
|
|
20
|
+
return { codeVerifier, codeChallenge };
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// Opens the URL in the default browser; returns whether a command was spawned.
|
|
24
|
+
function openBrowser(url) {
|
|
25
|
+
const platform = process.platform;
|
|
26
|
+
let command, args, spawnOpts = { stdio: 'ignore', detached: true };
|
|
27
|
+
if (platform === 'darwin') {
|
|
28
|
+
command = 'open';
|
|
29
|
+
args = [url];
|
|
30
|
+
} else if (platform === 'win32') {
|
|
31
|
+
// Caret-escape cmd metacharacters (esp. `&`) so `start` doesn't truncate the URL.
|
|
32
|
+
const escaped = url.replace(/[&^|<>()%"]/g, m => '^' + m);
|
|
33
|
+
command = `start "" ${escaped}`;
|
|
34
|
+
args = [];
|
|
35
|
+
spawnOpts = { ...spawnOpts, shell: true, windowsVerbatimArguments: true };
|
|
36
|
+
} else {
|
|
37
|
+
command = 'xdg-open';
|
|
38
|
+
args = [url];
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const child = require('node:child_process').spawn(command, args, spawnOpts);
|
|
42
|
+
child.on('error', err => DEBUG?.(`Failed to open browser via ${command}: ${err.message}`));
|
|
43
|
+
child.unref();
|
|
44
|
+
return true;
|
|
45
|
+
} catch (err) {
|
|
46
|
+
DEBUG?.(`Failed to open browser via ${command}: ${err.message}`);
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function escapeHtml(s) {
|
|
52
|
+
return String(s)
|
|
53
|
+
.replaceAll('&', '&')
|
|
54
|
+
.replaceAll('<', '<')
|
|
55
|
+
.replaceAll('>', '>')
|
|
56
|
+
.replaceAll('"', '"');
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function htmlResponse(title, message) {
|
|
60
|
+
return `<!DOCTYPE html><html><head><meta charset="utf-8"><title>${escapeHtml(title)}</title></head>` +
|
|
61
|
+
`<body style="font-family:sans-serif;text-align:center;padding-top:3em">` +
|
|
62
|
+
`<h1>${escapeHtml(title)}</h1><p>${escapeHtml(message)}</p></body></html>`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* OAuth 2.0 Authorization Code + PKCE via a loopback redirect (RFC 8252): starts a
|
|
67
|
+
* local server on a fixed port (IAS requires an exact, pre-registered redirect_uri),
|
|
68
|
+
* opens the browser, and resolves with the authorization code.
|
|
69
|
+
*
|
|
70
|
+
* @param {object} metadata Authorization metadata from the server.
|
|
71
|
+
* @param {string} metadata.authorization_endpoint
|
|
72
|
+
* @param {string} metadata.client_id
|
|
73
|
+
* @param {string} [metadata.scope]
|
|
74
|
+
* @param {object} [options]
|
|
75
|
+
* @param {boolean} [options.noBrowser] Only print the URL instead of opening a browser.
|
|
76
|
+
* @param {number} [options.timeout] Milliseconds to wait for the redirect (default 300000).
|
|
77
|
+
* @param {number[]} [options.ports] Candidate fixed ports for the loopback server.
|
|
78
|
+
* @param {string} [options.host] Loopback host to bind/redirect to (default 'localhost').
|
|
79
|
+
* @returns {Promise<{code: string, codeVerifier: string, redirectUri: string}>}
|
|
80
|
+
*/
|
|
81
|
+
async function authorizeViaBrowser(metadata, { noBrowser = false, timeout = 5 * 60 * 1000, ports = DEFAULT_PORTS, host = 'localhost' } = {}) {
|
|
82
|
+
const { authorization_endpoint, client_id, scope, app_tid } = metadata;
|
|
83
|
+
if (!authorization_endpoint || !client_id) {
|
|
84
|
+
throw 'Incomplete authorization metadata received from server (missing authorization_endpoint or client_id).';
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const { codeVerifier, codeChallenge } = createPkce();
|
|
88
|
+
const state = base64url(crypto.randomBytes(16));
|
|
89
|
+
|
|
90
|
+
return new Promise((resolve, reject) => {
|
|
91
|
+
let settled = false;
|
|
92
|
+
let timer;
|
|
93
|
+
const finish = (fn, arg) => {
|
|
94
|
+
if (settled) return;
|
|
95
|
+
settled = true;
|
|
96
|
+
clearTimeout(timer);
|
|
97
|
+
server.close();
|
|
98
|
+
fn(arg);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const server = http.createServer((req, res) => {
|
|
102
|
+
const requestUrl = new URL(req.url, redirectBase);
|
|
103
|
+
if (requestUrl.pathname !== '/callback') {
|
|
104
|
+
res.statusCode = 404;
|
|
105
|
+
return res.end();
|
|
106
|
+
}
|
|
107
|
+
const params = requestUrl.searchParams;
|
|
108
|
+
const error = params.get('error');
|
|
109
|
+
const returnedState = params.get('state');
|
|
110
|
+
const code = params.get('code');
|
|
111
|
+
|
|
112
|
+
if (error) {
|
|
113
|
+
res.setHeader('Content-Type', 'text/html');
|
|
114
|
+
res.end(htmlResponse('Login failed', `The identity provider returned an error: ${error}.`));
|
|
115
|
+
return finish(reject, `Authorization failed: ${error}${params.get('error_description') ? ` (${params.get('error_description')})` : ''}.`);
|
|
116
|
+
}
|
|
117
|
+
if (returnedState !== state) {
|
|
118
|
+
res.statusCode = 400;
|
|
119
|
+
res.setHeader('Content-Type', 'text/html');
|
|
120
|
+
res.end(htmlResponse('Login failed', 'State mismatch. Please try again.'));
|
|
121
|
+
return finish(reject, 'Authorization failed: state mismatch (possible CSRF). Please retry the login.');
|
|
122
|
+
}
|
|
123
|
+
if (!code) {
|
|
124
|
+
res.statusCode = 400;
|
|
125
|
+
res.setHeader('Content-Type', 'text/html');
|
|
126
|
+
res.end(htmlResponse('Login failed', 'No authorization code received.'));
|
|
127
|
+
return finish(reject, 'Authorization failed: no authorization code received.');
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
res.setHeader('Content-Type', 'text/html');
|
|
131
|
+
res.end(htmlResponse('Login successful', 'You may now close this tab and return to the terminal.'));
|
|
132
|
+
finish(resolve, { code, codeVerifier, redirectUri });
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
server.on('error', err => {
|
|
136
|
+
if (err.code === 'EADDRINUSE' && candidates.length) return listenNext(); // try next port
|
|
137
|
+
finish(reject, `Failed to start local login server: ${err.message}`);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
let redirectBase, redirectUri;
|
|
141
|
+
const candidates = [...ports];
|
|
142
|
+
const listenNext = () => {
|
|
143
|
+
const port = candidates.shift();
|
|
144
|
+
server.listen(port, '127.0.0.1');
|
|
145
|
+
};
|
|
146
|
+
server.on('listening', () => {
|
|
147
|
+
const { port } = server.address();
|
|
148
|
+
redirectBase = `http://${host}:${port}`;
|
|
149
|
+
redirectUri = `${redirectBase}/callback`;
|
|
150
|
+
|
|
151
|
+
const authUrl = new URL(authorization_endpoint);
|
|
152
|
+
authUrl.searchParams.set('response_type', 'code');
|
|
153
|
+
authUrl.searchParams.set('client_id', client_id);
|
|
154
|
+
authUrl.searchParams.set('redirect_uri', redirectUri);
|
|
155
|
+
authUrl.searchParams.set('code_challenge', codeChallenge);
|
|
156
|
+
authUrl.searchParams.set('code_challenge_method', 'S256');
|
|
157
|
+
authUrl.searchParams.set('state', state);
|
|
158
|
+
if (scope) authUrl.searchParams.set('scope', scope);
|
|
159
|
+
if (app_tid) authUrl.searchParams.set('app_tid', app_tid); // multi-tenant IAS client disambiguation
|
|
160
|
+
|
|
161
|
+
timer = setTimeout(
|
|
162
|
+
() => finish(reject, 'Timed out waiting for browser login. Please try again.'),
|
|
163
|
+
timeout
|
|
164
|
+
);
|
|
165
|
+
timer.unref?.();
|
|
166
|
+
|
|
167
|
+
const url = authUrl.toString();
|
|
168
|
+
if (noBrowser || !openBrowser(url)) {
|
|
169
|
+
console.log('Please open the following URL in your browser to log in:');
|
|
170
|
+
console.log(`\n ${url}\n`);
|
|
171
|
+
} else {
|
|
172
|
+
console.log('Opening browser for single sign-on. Complete the login there to continue…');
|
|
173
|
+
DEBUG?.(`Authorization URL: ${url}`);
|
|
174
|
+
}
|
|
175
|
+
DEBUG?.(`Waiting for the authorization code on ${redirectUri}`);
|
|
176
|
+
});
|
|
177
|
+
listenNext();
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
module.exports = { authorizeViaBrowser, createPkce, openBrowser, DEFAULT_PORTS };
|
package/lib/mtx/params.js
CHANGED
|
@@ -175,6 +175,12 @@ class BasicParams {
|
|
|
175
175
|
// AUTH PARAMS
|
|
176
176
|
// - non-persisted
|
|
177
177
|
this.passcode = new Param('passcode', undefined, { obfuscate: ObfuscationLevel.partial });
|
|
178
|
+
this.authorizationCode = new Param('authorizationCode', undefined, { obfuscate: ObfuscationLevel.partial }); // IAS SSO: auth code
|
|
179
|
+
this.codeVerifier = new Param('codeVerifier', undefined, { obfuscate: ObfuscationLevel.full }); // IAS SSO: PKCE verifier
|
|
180
|
+
this.redirectUri = new Param('redirectUri', undefined, { internal: true }); // IAS SSO: loopback redirect
|
|
181
|
+
this.noBrowser = new Param('noBrowser', false, { internal: true }); // IAS SSO: don't auto-open browser
|
|
182
|
+
this.port = new Param('port', undefined); // IAS SSO: fixed loopback port
|
|
183
|
+
this.appTid = new Param('appTid', undefined, { internal: true }); // IAS SSO: app_tid
|
|
178
184
|
this.password = new Param('password', undefined, { obfuscate: ObfuscationLevel.full });
|
|
179
185
|
this.clientid = new Param('clientid', undefined);
|
|
180
186
|
this.clientsecret = new Param('clientsecret', undefined, { obfuscate: ObfuscationLevel.partial });
|
|
@@ -137,9 +137,10 @@ async function deriveUaaTokenUrl(params) {
|
|
|
137
137
|
async function fetchAuthMetadata(params) {
|
|
138
138
|
let fetchUrl = appUrlWith(OAUTH_META_PATH, params);
|
|
139
139
|
DEBUG?.(`Trying to get authorization metadata from GET`, fetchUrl);
|
|
140
|
-
if (params.has('subdomain')) {
|
|
140
|
+
if (params.has('subdomain') || params.has('appTid')) {
|
|
141
141
|
const u = new URL(fetchUrl);
|
|
142
|
-
u.searchParams.set('subdomain', params.get('subdomain'));
|
|
142
|
+
if (params.has('subdomain')) u.searchParams.set('subdomain', params.get('subdomain'));
|
|
143
|
+
if (params.has('appTid')) u.searchParams.set('app_tid', params.get('appTid'));
|
|
143
144
|
fetchUrl = u.toString();
|
|
144
145
|
}
|
|
145
146
|
let responseData;
|
|
@@ -396,6 +397,27 @@ class SettingsManager {
|
|
|
396
397
|
throw 'Passcode cannot be empty';
|
|
397
398
|
}
|
|
398
399
|
}
|
|
400
|
+
// IAS browser SSO (Authorization Code + PKCE, loopback). Returns true if used,
|
|
401
|
+
// false to fall back to passcode entry (XSUAA).
|
|
402
|
+
async function addBrowserSso() {
|
|
403
|
+
const metadata = await fetchAuthMetadata(params);
|
|
404
|
+
if (metadata?.flow !== 'authorization_code') {
|
|
405
|
+
return false;
|
|
406
|
+
}
|
|
407
|
+
const { authorizeViaBrowser } = require('./browser_login');
|
|
408
|
+
const port = params.get('port');
|
|
409
|
+
// An explicit --app-tid wins over the server-resolved value on the authorize URL.
|
|
410
|
+
if (params.has('appTid')) metadata.app_tid = params.get('appTid');
|
|
411
|
+
const { code, codeVerifier, redirectUri } = await authorizeViaBrowser(metadata, {
|
|
412
|
+
noBrowser: params.get('noBrowser'),
|
|
413
|
+
...(port && { ports: [Number(port)] })
|
|
414
|
+
});
|
|
415
|
+
params.set('authorizationCode', code);
|
|
416
|
+
params.set('codeVerifier', codeVerifier);
|
|
417
|
+
params.set('redirectUri', redirectUri);
|
|
418
|
+
if (metadata.app_tid) params.set('appTid', metadata.app_tid); // for the token exchange
|
|
419
|
+
return true;
|
|
420
|
+
}
|
|
399
421
|
async function addAuthSettings() {
|
|
400
422
|
function removeObsoleteToken() {
|
|
401
423
|
if (params.get('renewLogin') || params.get('tokenExpirationDate') <= Date.now()) {
|
|
@@ -467,8 +489,11 @@ class SettingsManager {
|
|
|
467
489
|
}
|
|
468
490
|
|
|
469
491
|
await addAuthSettings();
|
|
470
|
-
if (!logout && !params.has('token') && !params.has('refreshToken') && !params.has('passcode') && !params.has('clientsecret') && !params.has('key')) {
|
|
471
|
-
|
|
492
|
+
if (!logout && !params.has('token') && !params.has('refreshToken') && !params.has('passcode') && !params.has('authorizationCode') && !params.has('clientsecret') && !params.has('key')) {
|
|
493
|
+
// Prefer browser-based SSO (IAS); fall back to passcode entry (XSUAA).
|
|
494
|
+
if (!await addBrowserSso()) {
|
|
495
|
+
await addPasscode();
|
|
496
|
+
}
|
|
472
497
|
}
|
|
473
498
|
}
|
|
474
499
|
|
package/lib/util/cf.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const cp = require('child_process');
|
|
2
|
+
const { X509Certificate } = require('crypto');
|
|
2
3
|
const fsp = require('fs').promises;
|
|
3
4
|
const os = require('os');
|
|
4
5
|
const path = require('path');
|
|
@@ -13,6 +14,7 @@ const LOG = cds.log ? cds.log('cli') : console;
|
|
|
13
14
|
const DEBUG = cds.debug('cli');
|
|
14
15
|
|
|
15
16
|
const { bold, warn } = require('./term');
|
|
17
|
+
const { ask4 } = require('./question');
|
|
16
18
|
|
|
17
19
|
const { URLS } = require('../init/constants');
|
|
18
20
|
|
|
@@ -64,7 +66,7 @@ module.exports = new class CfUtil {
|
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
|
|
67
|
-
async curl(urlPath, queryObj, bodyObj) {
|
|
69
|
+
async curl(urlPath, queryObj, bodyObj, method = bodyObj ? 'POST' : 'GET') {
|
|
68
70
|
let url = this.#target.apiEndpoint + urlPath
|
|
69
71
|
|
|
70
72
|
const headers = { 'Authorization': this.#target.token }
|
|
@@ -77,9 +79,8 @@ module.exports = new class CfUtil {
|
|
|
77
79
|
url += '?' + parts.join('&')
|
|
78
80
|
}
|
|
79
81
|
|
|
80
|
-
const fetchOptions = { headers }
|
|
82
|
+
const fetchOptions = { headers, method }
|
|
81
83
|
if (bodyObj) {
|
|
82
|
-
fetchOptions.method = 'POST'
|
|
83
84
|
fetchOptions.headers['Content-Type'] = 'application/json'
|
|
84
85
|
fetchOptions.body = JSON.stringify(bodyObj)
|
|
85
86
|
}
|
|
@@ -100,7 +101,6 @@ module.exports = new class CfUtil {
|
|
|
100
101
|
const data = text ? JSON.parse(text) : {}
|
|
101
102
|
|
|
102
103
|
if (LOG._debug) {
|
|
103
|
-
const method = fetchOptions.method || 'GET'
|
|
104
104
|
LOG.debug(`${method} ${url}\n${JSON.stringify({ headers: { ...headers, Authorization: 'bearer <token>' } }, null, 4)}\n${JSON.stringify(data, null, 4)}`)
|
|
105
105
|
}
|
|
106
106
|
|
|
@@ -359,17 +359,24 @@ module.exports = new class CfUtil {
|
|
|
359
359
|
}
|
|
360
360
|
}
|
|
361
361
|
|
|
362
|
-
throw `
|
|
362
|
+
throw `timeout occurred while getting service key ${bold(serviceKeyName)}`;
|
|
363
363
|
}
|
|
364
364
|
|
|
365
|
-
async getOrCreateServiceKey(serviceInstance, serviceKeyName, parameters, { silent = false } = {}) {
|
|
365
|
+
async getOrCreateServiceKey(serviceInstance, serviceKeyName, parameters, { silent = false, create = true } = {}) {
|
|
366
366
|
const serviceKey = await this._getServiceKey(serviceInstance, serviceKeyName);
|
|
367
|
-
|
|
367
|
+
const expired = serviceKey?.certificate && serviceKey?.key && Date.parse(new X509Certificate(serviceKey.certificate).validTo) <= Date.now()
|
|
368
|
+
if (serviceKey && !expired) {
|
|
368
369
|
DEBUG?.(`getting service key ${bold(serviceKeyName)}`)
|
|
369
370
|
return serviceKey;
|
|
370
371
|
}
|
|
372
|
+
if (expired) {
|
|
373
|
+
if (!create || !process.stdin.isTTY) throw `service key ${bold(serviceKeyName)} has expired`
|
|
374
|
+
await this.deleteServiceKey(serviceInstance, serviceKeyName, { silent })
|
|
375
|
+
} else if (!create) {
|
|
376
|
+
return
|
|
377
|
+
}
|
|
371
378
|
|
|
372
|
-
if (!silent) console.log(`creating service key ${bold(serviceKeyName)} - please be patient...`);
|
|
379
|
+
if (!silent && !expired) console.log(`creating service key ${bold(serviceKeyName)} - please be patient...`);
|
|
373
380
|
|
|
374
381
|
const body = {
|
|
375
382
|
type: 'key',
|
|
@@ -397,6 +404,35 @@ module.exports = new class CfUtil {
|
|
|
397
404
|
throw `could not create service key ${bold(serviceKeyName)}`;
|
|
398
405
|
}
|
|
399
406
|
|
|
407
|
+
async deleteServiceKey(serviceInstance, serviceKeyName, { silent = false } = {}) {
|
|
408
|
+
const query = { names: serviceKeyName, service_instance_guids: serviceInstance.guid }
|
|
409
|
+
const bindings = await this.curl('/v3/service_credential_bindings', query)
|
|
410
|
+
const binding = bindings?.resources?.find(binding => binding.name === serviceKeyName)
|
|
411
|
+
if (!binding) return
|
|
412
|
+
const bindingGuid = binding.guid
|
|
413
|
+
|
|
414
|
+
if (!await this.confirmServiceKeyDeletion(serviceKeyName)) {
|
|
415
|
+
throw `service key ${bold(serviceKeyName)} was not renewed because deletion was not confirmed`
|
|
416
|
+
}
|
|
417
|
+
if (!silent) console.log(`renewing expired service key ${bold(serviceKeyName)} - please be patient...`);
|
|
418
|
+
await this.curl(`/v3/service_credential_bindings/${encodeURIComponent(bindingGuid)}`, undefined, undefined, 'DELETE')
|
|
419
|
+
|
|
420
|
+
let counter = POLL_COUNTER
|
|
421
|
+
while (counter > 0) {
|
|
422
|
+
counter--
|
|
423
|
+
const remaining = await this.curl('/v3/service_credential_bindings', query)
|
|
424
|
+
if (!remaining?.resources?.some(binding => binding.guid === bindingGuid)) return
|
|
425
|
+
await this._sleep(POLL_DELAY)
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
throw `timeout occurred while deleting service key ${bold(serviceKeyName)}`
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
async confirmServiceKeyDeletion(serviceKeyName) {
|
|
432
|
+
const answer = await ask4([`service key ${bold(serviceKeyName)} has expired and must be deleted before it can be recreated, continue? (y/N) `])
|
|
433
|
+
return /^(y|yes)$/i.test(answer.trim())
|
|
434
|
+
}
|
|
435
|
+
|
|
400
436
|
// CF V3 API treats commas in the 'names' filter as delimiters.
|
|
401
437
|
// When a name contains a comma, omit it from the query and rely on client-side filtering.
|
|
402
438
|
#safeNameQuery(query) {
|
package/lib/util/fs.js
CHANGED
|
@@ -61,8 +61,8 @@ async function copyRenderedJSON(src, dst, project) {
|
|
|
61
61
|
/* General */
|
|
62
62
|
|
|
63
63
|
function isRoot(folder) {
|
|
64
|
-
const { root, dir } = parse(folder)
|
|
65
|
-
return root === dir
|
|
64
|
+
const { root, dir, base } = parse(folder)
|
|
65
|
+
return root === dir && base === ''
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
const DEFAULT_CONCURRENCY = (() => {
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
- The format is based on [Keep a Changelog](http://keepachangelog.com/).
|
|
5
5
|
- This project adheres to [Semantic Versioning](http://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [3.1.2](https://github.com/cap-js/cds-dbs/compare/db-service-v3.1.1...db-service-v3.1.2) (2026-10-09)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
* allow path expressions in infix filter of expands ([#1755](https://github.com/cap-js/cds-dbs/issues/1755)) ([cbe4f65](https://github.com/cap-js/cds-dbs/commit/cbe4f659add279fdb4155aad6bc155552dd276db))
|
|
13
|
+
* **cqn2pql:** handle parameterized views in from_args ([#1738](https://github.com/cap-js/cds-dbs/issues/1738)) ([8f4dc35](https://github.com/cap-js/cds-dbs/commit/8f4dc354022b861569eab014cb469d4259c91278))
|
|
14
|
+
* Primary keys were not resolved for localized. entities ([#1749](https://github.com/cap-js/cds-dbs/issues/1749)) ([410eef8](https://github.com/cap-js/cds-dbs/commit/410eef8f4487bd8e0c8b5a34a3637959095e255b))
|
|
15
|
+
* recurse into xpr nodes in collectDistanceTo ([#1746](https://github.com/cap-js/cds-dbs/issues/1746)) ([c5dc20d](https://github.com/cap-js/cds-dbs/commit/c5dc20d8c1cd467aec4df3a33f0b6abe43027fe8))
|
|
16
|
+
|
|
7
17
|
## [3.1.1](https://github.com/cap-js/cds-dbs/compare/db-service-v3.1.0...db-service-v3.1.1) (2026-09-15)
|
|
8
18
|
|
|
9
19
|
|
|
@@ -22,6 +22,10 @@ class CQN2PQLRenderer extends CQN2SQL {
|
|
|
22
22
|
return super.column_expr(x, q)
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
from_args(args) {
|
|
26
|
+
return `(${Object.keys(args).map(k => `${k}: ${this.expr(args[k])}`).join(', ')})`
|
|
27
|
+
}
|
|
28
|
+
|
|
25
29
|
SELECT_expand(q, sql) { return sql }
|
|
26
30
|
|
|
27
31
|
INSERT_entries(q) {
|
|
@@ -33,9 +33,6 @@ const notSupportedOps = [['>'], ['<'], ['>='], ['<='], ['*'], ['+'], ['-'], ['/'
|
|
|
33
33
|
|
|
34
34
|
const allOps = eqOps.concat(eqOps).concat(notEqOps).concat(notSupportedOps)
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
const { depthGuarded, guardEntry } = require('./recursion-guard')
|
|
38
|
-
|
|
39
36
|
const { pseudos } = require('./infer/pseudos')
|
|
40
37
|
/**
|
|
41
38
|
* Transforms a CDL style query into SQL-Like CQN:
|
|
@@ -58,17 +55,7 @@ const { pseudos } = require('./infer/pseudos')
|
|
|
58
55
|
* @returns {object} transformedQuery the transformed query
|
|
59
56
|
*/
|
|
60
57
|
function cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
61
|
-
// guardEntry bounds subquery nesting and resets the depth budget per top-level call
|
|
62
|
-
return guardEntry(_cqn4sql)(originalQuery, model, useTechnicalAlias)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
66
58
|
const getImplicitAlias = str => _getImplicitAlias(str, useTechnicalAlias)
|
|
67
|
-
// guard xpr and inline/expand-on-struct nesting
|
|
68
|
-
// eslint-disable-next-line no-func-assign
|
|
69
|
-
getTransformedTokenStream = depthGuarded(getTransformedTokenStream)
|
|
70
|
-
// eslint-disable-next-line no-func-assign
|
|
71
|
-
nestedProjectionOnStructure = depthGuarded(nestedProjectionOnStructure)
|
|
72
59
|
let inferred = typeof originalQuery === 'string' ? cds.parse.cql(originalQuery) : cds.ql.clone(originalQuery)
|
|
73
60
|
const hasCustomJoins =
|
|
74
61
|
originalQuery.SELECT?.from.args && (!originalQuery.joinTree || originalQuery.joinTree.isInitial)
|
|
@@ -198,7 +185,7 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
198
185
|
/**
|
|
199
186
|
* If the target entity is annotated with persistence skip and has an underlying db entity,
|
|
200
187
|
* we treat it as a runtime view and transform it into a CTE.
|
|
201
|
-
*
|
|
188
|
+
*
|
|
202
189
|
* @param {object} transformedQuery - The query object to be transformed.
|
|
203
190
|
* @param {string} model - The data model used for inference and transformation.
|
|
204
191
|
*/
|
|
@@ -214,10 +201,10 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
214
201
|
}
|
|
215
202
|
|
|
216
203
|
/**
|
|
217
|
-
* Recursively call cqn4sql for all nested runtime views to calculate cte and
|
|
204
|
+
* Recursively call cqn4sql for all nested runtime views to calculate cte and
|
|
218
205
|
* add it as a with clause to the transformed query.
|
|
219
206
|
* Alias the runtime view with a unique alias and update all references to the runtime view to point to the alias.
|
|
220
|
-
*
|
|
207
|
+
*
|
|
221
208
|
* @param {object} rootDefinition - The root definition of the query. This is used to recursively process nested runtime views.
|
|
222
209
|
* @param {object} transformedQuery - The query object to be transformed.
|
|
223
210
|
* @param {string} model - The data model used for infer and cqn4sql.
|
|
@@ -421,8 +408,6 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
421
408
|
*/
|
|
422
409
|
function translateAssocsToJoins() {
|
|
423
410
|
let from
|
|
424
|
-
// guard association-path length
|
|
425
|
-
const joinForBranch = depthGuarded(_joinForBranch)
|
|
426
411
|
/**
|
|
427
412
|
* remember already seen aliases, do not create a join for them again
|
|
428
413
|
*/
|
|
@@ -446,7 +431,7 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
446
431
|
})
|
|
447
432
|
return from.args.length > 1 ? from : from.args[0]
|
|
448
433
|
|
|
449
|
-
function
|
|
434
|
+
function joinForBranch(lhs, node) {
|
|
450
435
|
const nextAssoc = inferred.joinTree.findNextAssoc(node)
|
|
451
436
|
if (!nextAssoc || alreadySeen.has(nextAssoc.$refLink.alias)) return lhs.args.length > 1 ? lhs : lhs.args[0]
|
|
452
437
|
|
|
@@ -1035,11 +1020,11 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
1035
1020
|
const keyName = k.as || k.ref.join('_')
|
|
1036
1021
|
const fkName = `${elemName}_${keyName}` // e.g., 'head_id'
|
|
1037
1022
|
const fkFullName = `${columnAlias}_${fkName}` // e.g., 'department_head_id'
|
|
1038
|
-
|
|
1023
|
+
|
|
1039
1024
|
// Check if this FK is excluded
|
|
1040
1025
|
if (exclude.some(e => (e.ref?.at(-1) || e.as || e) === fkName)) continue
|
|
1041
1026
|
if (exclude.some(e => (e.ref?.at(-1) || e.as || e) === fkFullName)) continue
|
|
1042
|
-
|
|
1027
|
+
|
|
1043
1028
|
const flatColumn = {
|
|
1044
1029
|
ref: [joinAlias, fkName],
|
|
1045
1030
|
as: fkFullName,
|
|
@@ -1057,7 +1042,7 @@ function _cqn4sql(originalQuery, model, useTechnicalAlias = true) {
|
|
|
1057
1042
|
calcElement.as = fullName
|
|
1058
1043
|
}
|
|
1059
1044
|
res.push(calcElement)
|
|
1060
|
-
}
|
|
1045
|
+
}
|
|
1061
1046
|
else {
|
|
1062
1047
|
// Scalar element
|
|
1063
1048
|
const flatColumn = {
|
|
@@ -2970,7 +2955,7 @@ function setElementOnColumns(col, element) {
|
|
|
2970
2955
|
|
|
2971
2956
|
function getPrimaryKey(entity, tableAlias = null) {
|
|
2972
2957
|
const primaryKey = []
|
|
2973
|
-
for (const k
|
|
2958
|
+
for (const k in entity.elements) {
|
|
2974
2959
|
const e = entity.elements[k]
|
|
2975
2960
|
if (e.key === true && !e.virtual && e.isAssociation !== true) {
|
|
2976
2961
|
primaryKey.push({ ref: tableAlias ? [tableAlias, e.name] : [e.name] })
|
|
@@ -5,19 +5,15 @@ const cds = require('@sap/cds')
|
|
|
5
5
|
const JoinTree = require('./join-tree')
|
|
6
6
|
const { pseudos } = require('./pseudos')
|
|
7
7
|
const { isCalculatedOnRead, getImplicitAlias, getModelUtils, defineProperty, hasOwnSkip, isRuntimeView } = require('../utils')
|
|
8
|
-
const { depthGuarded, guardEntry } = require('../recursion-guard')
|
|
9
8
|
const cdsTypes = cds.builtin.types
|
|
10
9
|
/**
|
|
11
10
|
* @param {import('@sap/cds/apis/cqn').Query|string} originalQuery
|
|
12
11
|
* @param {import('@sap/cds/apis/csn').CSN} [model]
|
|
13
12
|
* @returns {import('./cqn').Query} = q with .target and .elements
|
|
14
13
|
*/
|
|
15
|
-
function
|
|
14
|
+
function infer(originalQuery, model, useTechnicalAlias = true) {
|
|
16
15
|
if (!model) throw new Error('Please specify a model')
|
|
17
16
|
const inferred = originalQuery
|
|
18
|
-
// guard func args / lists / xpr / exists nesting
|
|
19
|
-
// eslint-disable-next-line no-func-assign
|
|
20
|
-
inferArg = depthGuarded(inferArg)
|
|
21
17
|
|
|
22
18
|
const { getDefinition } = getModelUtils(model, originalQuery)
|
|
23
19
|
|
|
@@ -295,23 +291,19 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
295
291
|
*/
|
|
296
292
|
function walkTokenStream(tokenStream, inXpr = false) {
|
|
297
293
|
let skipJoins
|
|
298
|
-
const processToken =
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
t.xpr.forEach(processToken)
|
|
309
|
-
} else {
|
|
310
|
-
inferArg(t, queryElements, null, { inExists: skipJoins, inXpr, inQueryModifier: true })
|
|
311
|
-
skipJoins = false
|
|
312
|
-
}
|
|
294
|
+
const processToken = t => {
|
|
295
|
+
if (t === 'exists') {
|
|
296
|
+
// no joins for infix filters along `exists <path>`
|
|
297
|
+
skipJoins = true
|
|
298
|
+
} else if (t.xpr) {
|
|
299
|
+
// don't miss an exists within an expression
|
|
300
|
+
t.xpr.forEach(processToken)
|
|
301
|
+
} else {
|
|
302
|
+
inferArg(t, queryElements, null, { inExists: skipJoins, inXpr, inQueryModifier: true })
|
|
303
|
+
skipJoins = false
|
|
313
304
|
}
|
|
314
305
|
}
|
|
306
|
+
tokenStream.forEach(processToken)
|
|
315
307
|
}
|
|
316
308
|
/**
|
|
317
309
|
* Processes references starting with `$self`, which are intended to target other query elements.
|
|
@@ -585,6 +577,10 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
585
577
|
if ((!definition.target && definition.kind !== 'entity') || (!inFrom && !inCalcElement && danglingFilter))
|
|
586
578
|
throw new Error('A filter can only be provided when navigating along associations')
|
|
587
579
|
if (!inFrom && !arg.expand)defineProperty(arg, 'isJoinRelevant', true)
|
|
580
|
+
// The filter of an `expand` becomes the `where` of the expand subquery.
|
|
581
|
+
// Just like `where exists <assoc>[…]` semi-joins, path expressions in it are
|
|
582
|
+
// resolved via joins inside that subquery, so they must not be rejected here.
|
|
583
|
+
const filterOfExpand = !!arg.expand
|
|
588
584
|
let skipJoinsForFilter = false
|
|
589
585
|
step.where.forEach(token => {
|
|
590
586
|
if (token === 'exists') {
|
|
@@ -595,7 +591,7 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
595
591
|
// because they will become part of an EXISTS subquery
|
|
596
592
|
inferArg(token, false, arg.$refLinks[i], {
|
|
597
593
|
...context,
|
|
598
|
-
inExists: skipJoinsForFilter || inExists || (inFrom && !danglingFilter),
|
|
594
|
+
inExists: skipJoinsForFilter || inExists || filterOfExpand || (inFrom && !danglingFilter),
|
|
599
595
|
inXpr: !!token.xpr,
|
|
600
596
|
inInfixFilter: true,
|
|
601
597
|
inFrom,
|
|
@@ -605,7 +601,7 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
605
601
|
applyToFunctionArgs(token.args, inferArg, [
|
|
606
602
|
false,
|
|
607
603
|
arg.$refLinks[i],
|
|
608
|
-
{ inExists: skipJoinsForFilter || inExists || (inFrom && !danglingFilter), inXpr: true, inInfixFilter: true, inFrom },
|
|
604
|
+
{ inExists: skipJoinsForFilter || inExists || filterOfExpand || (inFrom && !danglingFilter), inXpr: true, inInfixFilter: true, inFrom },
|
|
609
605
|
])
|
|
610
606
|
}
|
|
611
607
|
}
|
|
@@ -639,7 +635,7 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
639
635
|
} else if (arg.inline && queryElements) {
|
|
640
636
|
const elements = resolveInline(arg)
|
|
641
637
|
for (const elName in elements) {
|
|
642
|
-
if (queryElements[elName] !== undefined) rejectDuplicatedElement(elName)
|
|
638
|
+
if (queryElements[elName] !== undefined) rejectDuplicatedElement(elName)
|
|
643
639
|
}
|
|
644
640
|
Object.assign(queryElements, elements)
|
|
645
641
|
} else {
|
|
@@ -675,7 +671,7 @@ function _infer(originalQuery, model, useTechnicalAlias = true) {
|
|
|
675
671
|
// ignore whole expand if target of assoc along path has ”@cds.persistence.skip”
|
|
676
672
|
if (arg.expand) {
|
|
677
673
|
const { $refLinks } = arg
|
|
678
|
-
|
|
674
|
+
|
|
679
675
|
const skip = $refLinks.some(link => {
|
|
680
676
|
const def = getDefinition(link.definition.target)
|
|
681
677
|
return hasOwnSkip(def) && !isRuntimeView(def)
|
|
@@ -1295,7 +1291,4 @@ function getMainAlias (query) {
|
|
|
1295
1291
|
return mainAlias
|
|
1296
1292
|
}
|
|
1297
1293
|
|
|
1298
|
-
// guardEntry bounds nested-subquery re-entry (expand, from, set)
|
|
1299
|
-
const infer = guardEntry(_infer)
|
|
1300
|
-
|
|
1301
1294
|
module.exports = infer
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const cds = require('@sap/cds')
|
|
2
|
+
|
|
3
|
+
const { compile, import: openapi } = require('./index')
|
|
4
|
+
|
|
5
|
+
if (cds.compile?.to) cds.compile.to.openapi = compile
|
|
6
|
+
|
|
7
|
+
if (cds.import?.from) cds.import.from.openapi = async function (filepath, options = {}) {
|
|
8
|
+
const src = await cds.utils.read(filepath, 'utf-8')
|
|
9
|
+
const csn = openapi.openAPI2csn(src)
|
|
10
|
+
options.inputFileKind = 'rest'
|
|
11
|
+
return csn
|
|
12
|
+
}
|