@sap/cds 5.9.8 → 6.0.3
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 +277 -20
- package/apis/services.d.ts +1 -1
- package/app/fiori/preview.js +2 -6
- package/app/index.js +3 -3
- package/bin/build/buildTaskEngine.js +17 -15
- package/bin/build/buildTaskFactory.js +29 -19
- package/bin/build/buildTaskHandler.js +27 -11
- package/bin/build/buildTaskProvider.js +2 -4
- package/bin/build/buildTaskProviderFactory.js +11 -16
- package/bin/build/constants.js +14 -6
- package/bin/build/csv-reader.js +2 -1
- package/bin/build/index.js +12 -18
- package/bin/build/provider/buildTaskHandlerEdmx.js +3 -39
- package/bin/build/provider/buildTaskHandlerFeatureToggles.js +149 -0
- package/bin/build/provider/buildTaskHandlerInternal.js +2 -3
- package/bin/build/provider/buildTaskProviderInternal.js +108 -239
- package/bin/build/provider/fiori/index.js +2 -2
- package/bin/build/provider/hana/2migration.js +11 -11
- package/bin/build/provider/hana/2tabledata.js +3 -3
- package/bin/build/provider/hana/index.js +89 -99
- package/bin/build/provider/hana/migrationtable.js +4 -3
- package/bin/build/provider/java/index.js +101 -0
- package/bin/build/provider/java-cf/index.js +1 -101
- package/bin/build/provider/mtx/index.js +83 -41
- package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
- package/bin/build/provider/mtx-sidecar/index.js +110 -0
- package/bin/build/provider/node-cf/index.js +1 -308
- package/bin/build/provider/nodejs/index.js +189 -0
- package/bin/build/util.js +21 -31
- package/bin/cds.js +5 -3
- package/bin/deploy/to-hana/cfUtil.js +31 -6
- package/bin/deploy/to-hana/gitUtil.js +5 -3
- package/bin/deploy/to-hana/hana.js +15 -13
- package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
- package/bin/mtx/in-cds.js +19 -7
- package/bin/serve.js +49 -22
- package/bin/utils/log.js +13 -30
- package/bin/version.js +4 -3
- package/common.cds +61 -16
- package/lib/compile/cdsc.js +3 -2
- package/lib/compile/etc/_localized.js +15 -14
- package/lib/compile/for/drafts.js +3 -4
- package/lib/compile/for/java.js +13 -10
- package/lib/compile/for/nodejs.js +8 -8
- package/lib/compile/for/odata.js +7 -12
- package/lib/compile/for/sql.js +5 -6
- package/lib/compile/index.js +5 -4
- package/lib/compile/load.js +9 -11
- package/lib/compile/minify.js +8 -5
- package/lib/compile/parse.js +4 -2
- package/lib/compile/resolve.js +18 -15
- package/lib/compile/to/edm.js +0 -1
- package/lib/compile/to/gql.js +3 -2
- package/lib/compile/to/json.js +24 -17
- package/lib/connect/bindings.js +3 -2
- package/lib/connect/index.js +5 -5
- package/lib/core/classes.js +74 -2
- package/lib/core/entities.js +52 -3
- package/lib/core/reflect.js +2 -1
- package/lib/deploy.js +10 -8
- package/lib/env/defaults.js +4 -3
- package/lib/env/index.js +71 -31
- package/lib/env/presets.js +1 -14
- package/lib/env/requires.js +71 -20
- package/lib/env/serviceBindings.js +147 -0
- package/lib/i18n/localize.js +22 -23
- package/lib/index.js +148 -144
- package/lib/log/errors.js +55 -12
- package/lib/log/format/kibana.js +1 -1
- package/lib/log/index.js +4 -0
- package/lib/ql/SELECT.js +7 -2
- package/lib/ql/Whereable.js +8 -2
- package/lib/ql/index.js +2 -2
- package/lib/req/assert.js +71 -0
- package/lib/req/cds-context.js +38 -70
- package/lib/req/context.js +34 -21
- package/lib/req/request.js +12 -18
- package/lib/req/response.js +6 -2
- package/lib/req/user.js +30 -22
- package/lib/serve/Service-api.js +17 -12
- package/lib/serve/Service-dispatch.js +5 -9
- package/lib/serve/Service-methods.js +4 -3
- package/lib/serve/Transaction.js +24 -21
- package/lib/serve/adapters.js +15 -5
- package/lib/serve/factory.js +22 -20
- package/lib/serve/index.js +51 -54
- package/lib/utils/axios.js +8 -12
- package/lib/utils/index.js +13 -4
- package/lib/utils/resources/index.js +1 -44
- package/lib/utils/resources/tar.js +2 -1
- package/lib/utils/tests.js +13 -15
- package/libx/_runtime/.eslintrc +1 -1
- package/libx/_runtime/audit/Service.js +6 -4
- package/libx/_runtime/audit/generic/personal/access.js +19 -43
- package/libx/_runtime/audit/generic/personal/index.js +40 -34
- package/libx/_runtime/audit/generic/personal/modification.js +11 -9
- package/libx/_runtime/audit/generic/personal/utils.js +13 -6
- package/libx/_runtime/audit/utils/v2.js +6 -3
- package/libx/_runtime/auth/index.js +71 -66
- package/libx/_runtime/auth/strategies/JWT.js +3 -2
- package/libx/_runtime/auth/strategies/mock.js +54 -53
- package/libx/_runtime/auth/strategies/xssecUtils.js +3 -4
- package/libx/_runtime/auth/strategies/xsuaa.js +3 -2
- package/libx/_runtime/auth/utils.js +2 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/Dispatcher.js +127 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +9 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +25 -45
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +10 -14
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +9 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +4 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +60 -53
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +2 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +21 -26
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +8 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +29 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +1 -4
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +13 -13
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -7
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +24 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +4 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +4 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +4 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +5 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +2 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +3 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +3 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +1 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +3 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +36 -25
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +97 -92
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +382 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +1 -4
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +5 -6
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +82 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +3 -11
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +91 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +27 -6
- package/libx/_runtime/cds-services/adapter/rest/utils/validation-checks.js +7 -17
- package/libx/_runtime/cds-services/services/Service.js +17 -76
- package/libx/_runtime/cds-services/services/utils/columns.js +6 -4
- package/libx/_runtime/cds-services/services/utils/compareJson.js +1 -53
- package/libx/_runtime/cds-services/services/utils/differ.js +15 -19
- package/libx/_runtime/cds-services/util/assert.js +107 -34
- package/libx/_runtime/cds.js +1 -31
- package/libx/_runtime/common/aspects/Association.js +40 -54
- package/libx/_runtime/common/aspects/any.js +61 -6
- package/libx/_runtime/common/aspects/entity.js +19 -79
- package/libx/_runtime/common/composition/data.js +2 -2
- package/libx/_runtime/common/composition/delete.js +8 -7
- package/libx/_runtime/common/composition/tree.js +10 -10
- package/libx/_runtime/common/composition/update.js +3 -2
- package/libx/_runtime/common/constants/events.js +13 -0
- package/libx/_runtime/common/error/entry.js +9 -3
- package/libx/_runtime/common/error/frontend.js +13 -19
- package/libx/_runtime/common/error/index.js +8 -3
- package/libx/_runtime/common/generic/auth/capabilities.js +2 -1
- package/libx/_runtime/common/generic/auth/constants.js +1 -4
- package/libx/_runtime/common/generic/auth/requires.js +1 -1
- package/libx/_runtime/common/generic/auth/restrict.js +12 -28
- package/libx/_runtime/common/generic/auth/restrictions.js +12 -4
- package/libx/_runtime/common/generic/auth/utils.js +2 -1
- package/libx/_runtime/common/generic/crud.js +9 -60
- package/libx/_runtime/common/generic/etag.js +41 -7
- package/libx/_runtime/common/generic/input.js +128 -66
- package/libx/_runtime/common/generic/paging.js +9 -3
- package/libx/_runtime/common/generic/put.js +2 -2
- package/libx/_runtime/common/generic/sorting.js +7 -3
- package/libx/_runtime/common/generic/temporal.js +0 -5
- package/libx/_runtime/common/i18n/messages.properties +2 -1
- package/libx/_runtime/common/utils/binary.js +69 -0
- package/libx/_runtime/common/utils/cqn.js +39 -14
- package/libx/_runtime/common/utils/cqn2cqn4sql.js +93 -59
- package/libx/_runtime/common/utils/csn.js +87 -85
- package/libx/_runtime/common/utils/dollar.js +8 -7
- package/libx/_runtime/common/utils/draft.js +1 -1
- package/libx/_runtime/common/utils/foreignKeyPropagations.js +23 -7
- package/libx/_runtime/common/utils/generateOnCond.js +2 -1
- package/libx/_runtime/common/utils/keys.js +30 -13
- package/libx/_runtime/common/utils/postProcessing.js +6 -1
- package/libx/_runtime/common/utils/quotingStyles.js +0 -23
- package/libx/_runtime/common/utils/resolveStructured.js +23 -26
- package/libx/_runtime/common/utils/resolveView.js +4 -1
- package/libx/_runtime/common/utils/rewriteAsterisks.js +3 -0
- package/libx/_runtime/common/utils/search2cqn4sql.js +4 -13
- package/libx/_runtime/common/utils/searchToLike.js +9 -13
- package/libx/_runtime/common/utils/streamProp.js +35 -0
- package/libx/_runtime/common/utils/structured.js +12 -18
- package/libx/_runtime/common/utils/template.js +3 -5
- package/libx/_runtime/common/utils/templateProcessor.js +22 -14
- package/libx/_runtime/common/utils/unionCqnTemplate.js +4 -14
- package/libx/_runtime/db/Service.js +2 -1
- package/libx/_runtime/db/expand/expand-v2.js +2 -2
- package/libx/_runtime/db/expand/expandCQNToJoin.js +7 -6
- package/libx/_runtime/db/generic/input.js +14 -17
- package/libx/_runtime/db/generic/integrity.js +1 -2
- package/libx/_runtime/db/generic/update.js +14 -1
- package/libx/_runtime/db/query/read.js +0 -1
- package/libx/_runtime/db/query/update.js +1 -1
- package/libx/_runtime/db/sql-builder/BaseBuilder.js +1 -1
- package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +5 -31
- package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
- package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -9
- package/libx/_runtime/db/sql-builder/SelectBuilder.js +11 -10
- package/libx/_runtime/db/sql-builder/UpdateBuilder.js +2 -2
- package/libx/_runtime/db/sql-builder/annotations.js +1 -2
- package/libx/_runtime/db/utils/coloredTxCommands.js +5 -0
- package/libx/_runtime/db/utils/columns.js +1 -1
- package/libx/_runtime/db/utils/propagateForeignKeys.js +10 -2
- package/libx/_runtime/extensibility/activate.js +69 -0
- package/libx/_runtime/extensibility/add.js +41 -0
- package/libx/_runtime/extensibility/addExtension.js +68 -0
- package/libx/_runtime/extensibility/defaults.js +39 -0
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformREAD.js +0 -0
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformRESULT.js +2 -2
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformWRITE.js +2 -2
- package/libx/_runtime/extensibility/push.js +61 -0
- package/libx/_runtime/extensibility/service.js +21 -0
- package/libx/_runtime/extensibility/{uiflex/utils.js → utils.js} +39 -3
- package/libx/_runtime/extensibility/validation.js +53 -0
- package/libx/_runtime/extensibility/views.js +12 -0
- package/libx/_runtime/fiori/generic/activate.js +2 -4
- package/libx/_runtime/fiori/generic/before.js +17 -29
- package/libx/_runtime/fiori/generic/cancel.js +2 -4
- package/libx/_runtime/fiori/generic/delete.js +2 -4
- package/libx/_runtime/fiori/generic/edit.js +4 -16
- package/libx/_runtime/fiori/generic/index.js +31 -0
- package/libx/_runtime/fiori/generic/new.js +5 -21
- package/libx/_runtime/fiori/generic/patch.js +10 -15
- package/libx/_runtime/fiori/generic/prepare.js +13 -22
- package/libx/_runtime/fiori/generic/read.js +148 -163
- package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
- package/libx/_runtime/fiori/utils/handler.js +10 -22
- package/libx/_runtime/fiori/utils/where.js +1 -4
- package/libx/_runtime/hana/Service.js +14 -7
- package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +1 -1
- package/libx/_runtime/hana/dynatrace.js +2 -2
- package/libx/_runtime/hana/localized.js +7 -6
- package/libx/_runtime/hana/pool.js +9 -6
- package/libx/_runtime/hana/search.js +2 -3
- package/libx/_runtime/hana/{searchToContains.js → search2Contains.js} +5 -2
- package/libx/_runtime/hana/search2cqn4sql.js +20 -17
- package/libx/_runtime/index.js +2 -6
- package/libx/_runtime/messaging/AMQPWebhookMessaging.js +30 -22
- package/libx/_runtime/messaging/common-utils/AMQPClient.js +4 -3
- package/libx/_runtime/messaging/common-utils/appId.js +9 -0
- package/libx/_runtime/messaging/common-utils/authorizedRequest.js +2 -18
- package/libx/_runtime/messaging/common-utils/connections.js +1 -1
- package/libx/_runtime/messaging/enterprise-messaging-shared.js +2 -2
- package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +305 -231
- package/libx/_runtime/messaging/enterprise-messaging-utils/cloudEvents.js +2 -2
- package/libx/_runtime/messaging/enterprise-messaging-utils/options-management.js +15 -8
- package/libx/_runtime/messaging/enterprise-messaging-utils/options-messaging.js +57 -14
- package/libx/_runtime/messaging/enterprise-messaging.js +14 -19
- package/libx/_runtime/messaging/file-based.js +3 -1
- package/libx/_runtime/messaging/http-utils/token.js +18 -6
- package/libx/_runtime/messaging/message-queuing-utils/options-management.js +22 -12
- package/libx/_runtime/messaging/message-queuing-utils/options-messaging.js +27 -14
- package/libx/_runtime/messaging/message-queuing.js +138 -85
- package/libx/_runtime/messaging/outbox/utils.js +13 -7
- package/libx/_runtime/messaging/redis-messaging.js +0 -1
- package/libx/_runtime/messaging/service.js +4 -1
- package/libx/_runtime/remote/Service.js +24 -18
- package/libx/_runtime/remote/utils/client.js +90 -48
- package/libx/_runtime/remote/utils/data.js +23 -6
- package/libx/_runtime/sqlite/Service.js +14 -13
- package/libx/_runtime/sqlite/convertAssocToOneManaged.js +2 -0
- package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +1 -0
- package/libx/_runtime/sqlite/execute.js +3 -9
- package/libx/_runtime/types/api.js +23 -11
- package/libx/common/utils/ucsn.js +15 -9
- package/libx/odata/afterburner.js +109 -29
- package/libx/odata/cqn2odata.js +48 -9
- package/libx/odata/grammar.pegjs +263 -156
- package/libx/odata/index.js +21 -9
- package/libx/odata/parseToCqn.js +8 -5
- package/libx/odata/parser.js +1 -1
- package/libx/odata/utils.js +13 -3
- package/libx/rest/RestAdapter.js +173 -113
- package/libx/rest/RestRequest.js +3 -2
- package/libx/rest/middleware/create.js +8 -6
- package/libx/rest/middleware/delete.js +6 -13
- package/libx/rest/middleware/error.js +1 -1
- package/libx/rest/middleware/input.js +6 -6
- package/libx/rest/middleware/operation.js +8 -3
- package/libx/rest/middleware/parse.js +3 -3
- package/libx/rest/middleware/payload.js +12 -0
- package/libx/rest/middleware/read.js +12 -2
- package/libx/rest/middleware/update.js +3 -3
- package/package.json +4 -6
- package/server.js +3 -44
- package/srv/extensibility-service.cds +56 -0
- package/srv/extensibility-service.js +1 -0
- package/srv/extensions.cds +8 -0
- package/srv/model-provider.cds +59 -0
- package/srv/model-provider.js +163 -0
- package/srv/mtx.cds +2 -0
- package/srv/mtx.js +22 -0
- package/srv/outbox.cds +2 -0
- package/tasks/enterprise-messaging-deploy.js +19 -12
- package/lib/serve/Service-compat.js +0 -36
- package/libx/_runtime/audit/generic/personal/constants.js +0 -4
- package/libx/_runtime/auth/strategies/dwc.js +0 -45
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/dispatcherUtils.js +0 -56
- package/libx/_runtime/cds-services/adapter/rest/Rest.js +0 -183
- package/libx/_runtime/cds-services/adapter/rest/RestRequest.js +0 -67
- package/libx/_runtime/cds-services/adapter/rest/handlers/create.js +0 -82
- package/libx/_runtime/cds-services/adapter/rest/handlers/delete.js +0 -39
- package/libx/_runtime/cds-services/adapter/rest/handlers/operation.js +0 -63
- package/libx/_runtime/cds-services/adapter/rest/handlers/read.js +0 -52
- package/libx/_runtime/cds-services/adapter/rest/handlers/update.js +0 -81
- package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/index.js +0 -56
- package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/utils.js +0 -33
- package/libx/_runtime/cds-services/adapter/rest/to.js +0 -8
- package/libx/_runtime/cds-services/adapter/rest/utils/binary.js +0 -50
- package/libx/_runtime/cds-services/adapter/rest/utils/data.js +0 -117
- package/libx/_runtime/cds-services/adapter/rest/utils/header-checks.js +0 -14
- package/libx/_runtime/cds-services/adapter/rest/utils/key-value-utils.js +0 -30
- package/libx/_runtime/cds-services/adapter/rest/utils/parse-url.js +0 -250
- package/libx/_runtime/cds-services/adapter/rest/utils/result.js +0 -26
- package/libx/_runtime/cds-services/services/utils/handlerUtils.js +0 -200
- package/libx/_runtime/common/aspects/utils.js +0 -152
- package/libx/_runtime/common/toggles/handler.js +0 -21
- package/libx/_runtime/common/utils/extensibilityUtils.js +0 -18
- package/libx/_runtime/extensibility/mps/index.js +0 -5
- package/libx/_runtime/extensibility/mps/service.js +0 -111
- package/libx/_runtime/extensibility/mps/tar.js +0 -42
- package/libx/_runtime/extensibility/mps/utils.js +0 -11
- package/libx/_runtime/extensibility/uiflex/index.js +0 -54
- package/libx/_runtime/extensibility/uiflex/service.js +0 -276
- package/libx/_runtime/messaging/common-utils/naming-conventions.js +0 -20
- package/libx/_runtime/remote/utils/client-types.d.ts +0 -7
- package/libx/gql/GraphQLAdapter.js +0 -33
- package/libx/gql/constants/adapter.js +0 -69
- package/libx/gql/constants/cds.js +0 -18
- package/libx/gql/constants/graphql.js +0 -33
- package/libx/gql/readme.md +0 -1
- package/libx/gql/resolvers/crud/create.js +0 -20
- package/libx/gql/resolvers/crud/delete.js +0 -29
- package/libx/gql/resolvers/crud/index.js +0 -6
- package/libx/gql/resolvers/crud/read.js +0 -30
- package/libx/gql/resolvers/crud/update.js +0 -42
- package/libx/gql/resolvers/crud/utils/index.js +0 -36
- package/libx/gql/resolvers/field.js +0 -5
- package/libx/gql/resolvers/index.js +0 -7
- package/libx/gql/resolvers/mutation.js +0 -23
- package/libx/gql/resolvers/parse/ast/enrich.js +0 -52
- package/libx/gql/resolvers/parse/ast/fragment.js +0 -11
- package/libx/gql/resolvers/parse/ast/fromObject.js +0 -39
- package/libx/gql/resolvers/parse/ast/index.js +0 -3
- package/libx/gql/resolvers/parse/ast/meta.js +0 -4
- package/libx/gql/resolvers/parse/ast/variable.js +0 -7
- package/libx/gql/resolvers/parse/ast2cqn/columns.js +0 -44
- package/libx/gql/resolvers/parse/ast2cqn/entries.js +0 -31
- package/libx/gql/resolvers/parse/ast2cqn/index.js +0 -8
- package/libx/gql/resolvers/parse/ast2cqn/limit.js +0 -6
- package/libx/gql/resolvers/parse/ast2cqn/orderBy.js +0 -24
- package/libx/gql/resolvers/parse/ast2cqn/utils/index.js +0 -3
- package/libx/gql/resolvers/parse/ast2cqn/where.js +0 -70
- package/libx/gql/resolvers/parse/utils/index.js +0 -8
- package/libx/gql/resolvers/query.js +0 -13
- package/libx/gql/resolvers/root.js +0 -34
- package/libx/gql/schema/generate.js +0 -18
- package/libx/gql/schema/index.js +0 -5
- package/libx/gql/schema/mutation.js +0 -76
- package/libx/gql/schema/query.js +0 -108
- package/libx/gql/schema/typeDefMap.js +0 -45
- package/libx/gql/schema/utils/index.js +0 -54
- package/libx/gql/utils/index.js +0 -12
- package/libx/rest/middleware/auth.js +0 -20
- package/libx/rest/middleware/content.js +0 -19
- package/srv/flex.cds +0 -21
- package/srv/flex.js +0 -1
- package/srv/mps.cds +0 -23
- package/srv/mps.js +0 -1
- package/srv/outbox.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const cp = require('child_process');
|
|
2
2
|
const path = require('path');
|
|
3
|
-
const
|
|
3
|
+
const fs = require('fs').promises;
|
|
4
4
|
const util = require('util');
|
|
5
5
|
|
|
6
6
|
const cds = require('../../../lib');
|
|
@@ -40,12 +40,14 @@ class GitUtil {
|
|
|
40
40
|
# added by cds deploy
|
|
41
41
|
${file}
|
|
42
42
|
`;
|
|
43
|
-
|
|
43
|
+
|
|
44
|
+
await fs.mkdir(path.dirname(gitIgnorePath), { recursive: true });
|
|
45
|
+
await fs.writeFile(gitIgnorePath, gitignore, 'utf8');
|
|
44
46
|
}
|
|
45
47
|
|
|
46
48
|
async readFileSafely(file) {
|
|
47
49
|
try {
|
|
48
|
-
return await
|
|
50
|
+
return await fs.readFile(file, 'utf8');
|
|
49
51
|
} catch (err) {
|
|
50
52
|
return '';
|
|
51
53
|
}
|
|
@@ -3,7 +3,7 @@ const os = require('os');
|
|
|
3
3
|
const path = require('path');
|
|
4
4
|
const util = require('util');
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const fs = require('fs').promises;
|
|
7
7
|
|
|
8
8
|
const { BuildTaskEngine, BuildTaskFactory } = require('../../build');
|
|
9
9
|
const buildConstants = require('../../build/constants');
|
|
@@ -14,7 +14,7 @@ const LOG = cds.log ? cds.log('deploy') : console;
|
|
|
14
14
|
const cfUtil = require('./cfUtil');
|
|
15
15
|
const hdiDeployUtil = require('./hdiDeployUtil');
|
|
16
16
|
const gitUtil = require('./gitUtil');
|
|
17
|
-
const mtaUtil = require('
|
|
17
|
+
const mtaUtil = require('./mtaUtil');
|
|
18
18
|
|
|
19
19
|
const { bold, info } = require('../../utils/term');
|
|
20
20
|
|
|
@@ -35,7 +35,12 @@ class HanaDeployer {
|
|
|
35
35
|
this.logger = logger;
|
|
36
36
|
|
|
37
37
|
this.logger.log(`${bold('Starting deploy to SAP HANA ...')}`);
|
|
38
|
-
if (
|
|
38
|
+
if (vcapFile) {
|
|
39
|
+
this.logger.log();
|
|
40
|
+
this.logger.log(`Using VCAP_SERVICES from file ${vcapFile} (beta feature).`);
|
|
41
|
+
bindCallback = null // credentials are given - no cds bind then
|
|
42
|
+
}
|
|
43
|
+
else if (bindCallback) {
|
|
39
44
|
this.logger.log('Using cds bind');
|
|
40
45
|
}
|
|
41
46
|
this.logger.log();
|
|
@@ -46,8 +51,6 @@ class HanaDeployer {
|
|
|
46
51
|
|
|
47
52
|
let vcapServices;
|
|
48
53
|
if (vcapFile) {
|
|
49
|
-
this.logger.log();
|
|
50
|
-
this.logger.log(`Using vcap file ${vcapFile} (beta feature).`);
|
|
51
54
|
vcapServices = await this._loadVCAPServices(vcapFile);
|
|
52
55
|
}
|
|
53
56
|
|
|
@@ -57,11 +60,11 @@ class HanaDeployer {
|
|
|
57
60
|
|
|
58
61
|
if (undeployWhitelist) {
|
|
59
62
|
this.logger.log('Writing undeploy.json');
|
|
60
|
-
await
|
|
63
|
+
await fs.write(path.join(currentModelFolder, 'undeploy.json'), JSON.stringify(undeployWhitelist, null, 2));
|
|
61
64
|
}
|
|
62
65
|
|
|
63
66
|
if (vcapFile) {
|
|
64
|
-
await
|
|
67
|
+
await fs.mkdir(currentModelFolder, { recursive: true });
|
|
65
68
|
} else {
|
|
66
69
|
const { cfServiceInstanceName, cfServiceInstanceKeyName, serviceKey } =
|
|
67
70
|
await this._getOrCreateCFService(projectPath, currentModelFolder, serviceName, tunnelAddress);
|
|
@@ -203,7 +206,7 @@ class HanaDeployer {
|
|
|
203
206
|
|
|
204
207
|
async _loadVCAPServices(vcapFile) {
|
|
205
208
|
try {
|
|
206
|
-
const content = await
|
|
209
|
+
const content = JSON.parse(await fs.readFile(vcapFile));
|
|
207
210
|
if (!content.VCAP_SERVICES) {
|
|
208
211
|
throw new Error(`The vcap file ${vcapFile} does not contain a VCAP_SERVICES entry.`);
|
|
209
212
|
}
|
|
@@ -221,7 +224,7 @@ class HanaDeployer {
|
|
|
221
224
|
const defaultEnvJsonPath = path.join(currentFolder, 'default-env.json');
|
|
222
225
|
|
|
223
226
|
try {
|
|
224
|
-
defaultEnvJson = await
|
|
227
|
+
defaultEnvJson = JSON.parse(await fs.readFile(defaultEnvJsonPath, UTF_8));
|
|
225
228
|
} catch (err) {
|
|
226
229
|
// ignore any errors
|
|
227
230
|
}
|
|
@@ -240,9 +243,8 @@ class HanaDeployer {
|
|
|
240
243
|
}
|
|
241
244
|
|
|
242
245
|
this.logger.log(`Writing ${defaultEnvJsonPath}`);
|
|
243
|
-
await
|
|
244
|
-
|
|
245
|
-
});
|
|
246
|
+
await fs.mkdir(path.dirname(defaultEnvJsonPath), {recursive: true})
|
|
247
|
+
await fs.writeFile(defaultEnvJsonPath, JSON.stringify(defaultEnvJson, null, 2));
|
|
246
248
|
}
|
|
247
249
|
}
|
|
248
250
|
|
|
@@ -285,7 +287,7 @@ class HanaDeployer {
|
|
|
285
287
|
|
|
286
288
|
async readFileSafely(file) {
|
|
287
289
|
try {
|
|
288
|
-
return await
|
|
290
|
+
return await fs.readFile(file, 'utf8');
|
|
289
291
|
} catch (err) {
|
|
290
292
|
return '';
|
|
291
293
|
}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
const cds = require('
|
|
2
|
-
const
|
|
1
|
+
const cds = require('../../../lib')
|
|
2
|
+
const fs = require('fs').promises
|
|
3
|
+
const {existsSync} = require('fs')
|
|
3
4
|
const path = require('path')
|
|
4
|
-
const { getProperty } = require('./util')
|
|
5
5
|
|
|
6
6
|
const HDI_CONTAINER_TYPES = ['com.sap.xs.hdi-container']
|
|
7
7
|
const UTF_8 = 'utf-8'
|
|
8
8
|
const MTA_YAML = 'mta.yaml'
|
|
9
|
+
const LOG = cds.log ? cds.log('deploy') : console;
|
|
9
10
|
|
|
10
|
-
async function getHanaDbModuleDescriptor(projectPath, moduleName, logger) {
|
|
11
|
+
async function getHanaDbModuleDescriptor(projectPath, moduleName, logger = LOG) {
|
|
11
12
|
// mta might be null if mta.yaml does not exist
|
|
12
13
|
const mta = await _getMta(projectPath, logger)
|
|
13
14
|
const projectInfo = await _getProjectInfo(projectPath, mta, logger)
|
|
@@ -22,7 +23,7 @@ async function getHanaDbModuleDescriptor(projectPath, moduleName, logger) {
|
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
|
|
25
|
-
async function getServiceModuleDescriptor(projectPath, moduleName, moduleType, logger) {
|
|
26
|
+
async function getServiceModuleDescriptor(projectPath, moduleName, moduleType, logger = LOG) {
|
|
26
27
|
// mta might be null if mta.yaml does not exist
|
|
27
28
|
const mta = await _getMta(projectPath, logger)
|
|
28
29
|
const projectInfo = await _getProjectInfo(projectPath, mta, logger)
|
|
@@ -48,9 +49,9 @@ async function _getProjectInfo(projectPath, mta, logger) {
|
|
|
48
49
|
}
|
|
49
50
|
// 2. use package.json data
|
|
50
51
|
const packageJsonPath = path.join(projectPath, 'package.json')
|
|
51
|
-
if (
|
|
52
|
+
if (existsSync(packageJsonPath)) {
|
|
52
53
|
try {
|
|
53
|
-
const packageJson = await fs.
|
|
54
|
+
const packageJson = JSON.parse((await fs.readFile(packageJsonPath, 'utf-8')).toString())
|
|
54
55
|
if (!details.description && packageJson.description) {
|
|
55
56
|
details.description = packageJson.description
|
|
56
57
|
}
|
|
@@ -100,7 +101,7 @@ async function _getMta(projectPath, logger) {
|
|
|
100
101
|
// yaml.parse oesn't like null
|
|
101
102
|
const mtaFilePath = path.join(projectPath, MTA_YAML)
|
|
102
103
|
|
|
103
|
-
const existsMtaYaml =
|
|
104
|
+
const existsMtaYaml = existsSync(mtaFilePath)
|
|
104
105
|
if (!existsMtaYaml) {
|
|
105
106
|
logger.debug('mta.yaml not existing')
|
|
106
107
|
return null
|
|
@@ -115,7 +116,7 @@ async function _getMta(projectPath, logger) {
|
|
|
115
116
|
function _getApplicationName(mta, moduleName, moduleType) {
|
|
116
117
|
const module = _findModule(mta, moduleName, moduleType)
|
|
117
118
|
if (module) {
|
|
118
|
-
const appName =
|
|
119
|
+
const appName = module.parameters && module.parameters['app-name']
|
|
119
120
|
return appName ? appName : module.name
|
|
120
121
|
}
|
|
121
122
|
return null
|
package/bin/mtx/in-cds.js
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
1
|
const cds = require('../build/cds')
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} catch(e) {
|
|
7
|
-
if (e.code === 'MODULE_NOT_FOUND') throw new Error('Error serving MTX APIs: @sap/cds-mtx is not installed')
|
|
8
|
-
else throw e
|
|
2
|
+
const _is_streamlined_mtx = ()=>{
|
|
3
|
+
if (process.env.OLD_MTX) return false
|
|
4
|
+
try { return !!require.resolve('@sap/cds-mtxs/srv/deployment-service') }
|
|
5
|
+
catch {/* ignored */}
|
|
9
6
|
}
|
|
7
|
+
|
|
8
|
+
if (!cds.requires.multitenancy || _is_streamlined_mtx()) module.exports = undefined
|
|
9
|
+
else try {
|
|
10
|
+
const mtx = module.exports = require ('@sap/cds-mtx')()
|
|
11
|
+
mtx.inject (cds)
|
|
12
|
+
cds.on('served', () => cds.emit('mtx'))
|
|
13
|
+
} catch(e) {
|
|
14
|
+
if (e.code === 'MODULE_NOT_FOUND') throw new Error('Error serving MTX APIs: @sap/cds-mtx is not installed')
|
|
15
|
+
else throw e
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/*
|
|
19
|
+
cds.requires.multitenancy -- use this to check whether mt is enabled (old or new)
|
|
20
|
+
cds.mtx -- use this to check whether old(!) mtx is enabled
|
|
21
|
+
*/
|
package/bin/serve.js
CHANGED
|
@@ -124,15 +124,18 @@ module.exports = Object.assign ( serve, {
|
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
const cds = require('../lib'), { exists, isfile, local, path } = cds.utils
|
|
127
|
-
|
|
127
|
+
|
|
128
|
+
// provisional loggers, see _prepare_logging
|
|
129
|
+
let log = console.log
|
|
130
|
+
let debug = false
|
|
128
131
|
|
|
129
132
|
/**
|
|
130
133
|
* The main function which dispatches into the respective usage variants.
|
|
131
134
|
* @param {string[]} all - project folder, model filenames, or service name
|
|
132
135
|
*/
|
|
133
136
|
async function serve (all=[], o={}) { // NOSONAR
|
|
134
|
-
|
|
135
137
|
// canonicalize options to ease subsequent tasks...
|
|
138
|
+
cds.options = o
|
|
136
139
|
const [pms] = all // project folder, model filenames, or service name
|
|
137
140
|
if (o.from) o.from = o.from.split(',')
|
|
138
141
|
if (o.project||o.projects) { o.project = pms; o.service='all'; o.from='*' }
|
|
@@ -170,8 +173,19 @@ async function serve (all=[], o={}) { // NOSONAR
|
|
|
170
173
|
|
|
171
174
|
}
|
|
172
175
|
|
|
176
|
+
// activate plugins
|
|
177
|
+
if (cds.env.plugins) for (let each of cds.env.plugins) {
|
|
178
|
+
if (typeof each === 'string') each = {impl:each}
|
|
179
|
+
let impl = each.impl
|
|
180
|
+
if (impl.startsWith('.')) impl = require.resolve(cds.root+'/'+impl)
|
|
181
|
+
log ('loading plugin:', {impl})
|
|
182
|
+
// TODO support ESM plugins. But see cap/cds/pull/1838#issuecomment-1177200 !
|
|
183
|
+
const plugin = require(impl)
|
|
184
|
+
if (plugin.activate) plugin.activate(each)
|
|
185
|
+
}
|
|
186
|
+
|
|
173
187
|
// bootstrap server from project-local server.js or from @sap/cds/server.js
|
|
174
|
-
const cds_server = _local_server_js() || cds.server
|
|
188
|
+
const cds_server = await _local_server_js() || cds.server
|
|
175
189
|
const server = await cds_server(o)
|
|
176
190
|
|
|
177
191
|
// return a promise which resolves to the created http server when listening
|
|
@@ -183,24 +197,36 @@ async function serve (all=[], o={}) { // NOSONAR
|
|
|
183
197
|
}
|
|
184
198
|
server.listening ? _started(server) : server.once('listening',_started)
|
|
185
199
|
server.on ('error',_reject) // startup errors like EADDRINUSE
|
|
200
|
+
server.on ('close', ()=> shutdown()) // in case of server.close() was called, like in cds.test
|
|
201
|
+
|
|
202
|
+
let shutdownCalled = false
|
|
203
|
+
const shutdown = async sig => {
|
|
204
|
+
if (shutdownCalled) return
|
|
205
|
+
shutdownCalled = true
|
|
206
|
+
global.it || cds.watched || console.log() // blank line makes the ^C look pretty in terminals
|
|
207
|
+
debug && debug(`${sig}, shutting down, calling ${cds.listeners('shutdown').length} listeners`)
|
|
208
|
+
await Promise.all(cds.listeners('shutdown').map((fn) => fn()))
|
|
209
|
+
if (process.env.NODE_ENV !== 'test' && !global.it) process.exit()
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
process.once('SIGTERM', shutdown)
|
|
213
|
+
process.once('SIGINT', shutdown)
|
|
214
|
+
process.once('SIGHUP', shutdown)
|
|
215
|
+
process.once('SIGUSR2', shutdown) // by nodemon
|
|
216
|
+
process.on('beforeExit', shutdown) //> when event loop empties
|
|
217
|
+
process.on('message', (msg) => { if (msg.close||msg.exit) shutdown() }) // by `cds watch` on Windows
|
|
186
218
|
|
|
187
|
-
// graceful server shutdown
|
|
188
|
-
const close = () => server.close()
|
|
189
|
-
process.once('SIGTERM', close)
|
|
190
|
-
process.once('SIGINT', close)
|
|
191
|
-
process.once('SIGHUP', close)
|
|
192
|
-
process.once('SIGUSR2', close) // by nodemon
|
|
193
219
|
return server
|
|
194
220
|
})
|
|
195
221
|
}
|
|
196
222
|
|
|
197
|
-
|
|
198
|
-
function _local_server_js() {
|
|
223
|
+
async function _local_server_js() {
|
|
199
224
|
const _local = file => isfile(file) || isfile (path.join(cds.env.folders.srv,file))
|
|
200
225
|
let server_js = process.env.CDS_TYPESCRIPT && _local('server.ts') || _local('server.js')
|
|
201
226
|
if (server_js) {
|
|
202
|
-
log
|
|
203
|
-
|
|
227
|
+
log ('Loading server from', { file: local(server_js) })
|
|
228
|
+
let fn = await cds.utils._import(server_js)
|
|
229
|
+
if (fn && fn.default) fn = fn.default // default ESM export
|
|
204
230
|
return typeof fn === 'function' ? fn : cds.server
|
|
205
231
|
}
|
|
206
232
|
}
|
|
@@ -210,7 +236,8 @@ function _prepare_logging () { // NOSONAR
|
|
|
210
236
|
// change `log` function to cds.log
|
|
211
237
|
const LOG = cds.log('serve', { prefix:'cds' })
|
|
212
238
|
log = LOG._info && LOG.info
|
|
213
|
-
if (!log) return
|
|
239
|
+
if (!log) return log = ()=>{}
|
|
240
|
+
debug = cds.debug('cli')
|
|
214
241
|
|
|
215
242
|
const _timer = `[cds] - launched at ${new Date().toLocaleString()}, in`
|
|
216
243
|
console.time (_timer)
|
|
@@ -229,8 +256,9 @@ function _prepare_logging () { // NOSONAR
|
|
|
229
256
|
|
|
230
257
|
// print information about each provided service
|
|
231
258
|
cds.on ('serving', (srv) => {
|
|
232
|
-
const details = {
|
|
233
|
-
if (srv.
|
|
259
|
+
const details = {}
|
|
260
|
+
if (srv.path) details.path = srv.path
|
|
261
|
+
if (srv._source) details.impl = local( srv._source.startsWith('@sap') ? require.resolve(srv._source) : srv._source )
|
|
234
262
|
log (`${srv.mocked ? 'mocking' : 'serving'} ${srv.name}`, details)
|
|
235
263
|
})
|
|
236
264
|
|
|
@@ -239,7 +267,7 @@ function _prepare_logging () { // NOSONAR
|
|
|
239
267
|
console.log ()
|
|
240
268
|
log ('server listening on',{url})
|
|
241
269
|
_timer && console.timeEnd (_timer)
|
|
242
|
-
if (process.stdin.isTTY) log (`[ terminate with ^C ]
|
|
270
|
+
if (process.stdin.isTTY) log (`[ terminate with ^C ]`)
|
|
243
271
|
})
|
|
244
272
|
}
|
|
245
273
|
|
|
@@ -268,8 +296,8 @@ function _in_memory (o) {
|
|
|
268
296
|
const {env} = cds, db = env.requires.db
|
|
269
297
|
if (o['in-memory'] || o['in-memory?'] && !db) {
|
|
270
298
|
env.add ({ requires: { db: {
|
|
271
|
-
kind:'sqlite', ...env.requires.sqlite,
|
|
272
|
-
credentials:{database:':memory:'}
|
|
299
|
+
kind:'sqlite', ...env.requires.kinds.sqlite,
|
|
300
|
+
credentials: db?.credentials?.url ? {url:':memory:'} : {database:':memory:'}
|
|
273
301
|
}}})
|
|
274
302
|
return true
|
|
275
303
|
}
|
|
@@ -285,15 +313,14 @@ function _with_mocks (o) {
|
|
|
285
313
|
cds.on ('loaded', model => cds.deploy.include_external_entities_in(model))
|
|
286
314
|
const mocks = cds.env.features.test_mocks && isfile ('test/mocked.js')
|
|
287
315
|
if (mocks) cds.once ('served', ()=> {
|
|
288
|
-
log
|
|
316
|
+
log ('adding mock behaviours from', { file: local(mocks) })
|
|
289
317
|
require(mocks)
|
|
290
318
|
})
|
|
291
319
|
return true
|
|
292
320
|
}
|
|
293
321
|
}
|
|
294
322
|
|
|
295
|
-
|
|
296
|
-
const SECRETS = /(password)|(certificate)|(ca)|(clientsecret)/i // 'certificate' and 'ca' on HANA
|
|
323
|
+
const SECRETS = /(password)|(certificate)|(ca)|(secret)|(key)/i // 'certificate' and 'ca' on HANA
|
|
297
324
|
/** mascades password-like strings, also reducing clutter in output */
|
|
298
325
|
function _redacted(cred) {
|
|
299
326
|
if (!cred) return cred
|
package/bin/utils/log.js
CHANGED
|
@@ -1,41 +1,24 @@
|
|
|
1
|
-
const { sortMessagesSeverityAware, deduplicateMessages } = require('@sap/cds-compiler')
|
|
2
|
-
|
|
3
1
|
// sorts, filters, and writes compilation messages to console
|
|
4
2
|
module.exports = (messages, options={}) => {
|
|
5
3
|
const { format } = require('./term')
|
|
6
|
-
const
|
|
4
|
+
const logLevel = options && options['log-level'] || require('../../lib').env.log.levels.cli || ''
|
|
5
|
+
const levels = {
|
|
6
|
+
debug: { Error:4, undefined:4, Warning:3, Info:2, Debug:1 },
|
|
7
|
+
info: { Error:4, undefined:4, Warning:3, Info:2 },
|
|
8
|
+
warn: { Error:4, undefined:4, Warning:3 },
|
|
9
|
+
error: { Error:4, undefined:4 },
|
|
10
|
+
} [logLevel.toLowerCase()] || { Error:4, undefined:4, Warning:3 }
|
|
7
11
|
const log = options.log || console.error
|
|
8
12
|
|
|
9
13
|
if (!Array.isArray (messages)) messages = [messages]
|
|
10
|
-
messages.
|
|
11
|
-
messages = messages.filter (m => level.includes (m.severity))
|
|
12
|
-
|
|
13
|
-
deduplicateMessages(messages)
|
|
14
|
-
messages = sortMessagesSeverityAware (messages)
|
|
15
|
-
|
|
16
|
-
for (let m of messages) {
|
|
14
|
+
for (let m of messages.filter (m => m.severity in levels)) {
|
|
17
15
|
// show stack for resolution issues since there the requiring code location is in the stack
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
16
|
+
// check for standard Error classes, but not Error itself
|
|
17
|
+
const internalError = m.name === 'EvalError' || m.name === 'InternalError' || m.name === 'RangeError'
|
|
18
|
+
|| m.name === 'ReferenceError' || m.name === 'SyntaxError' || m.name === 'TypeError'
|
|
19
|
+
|| m.name === 'URIError'
|
|
20
|
+
const mf = format (m, m.severity, internalError, true)
|
|
21
21
|
log (mf)
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
function _effectiveLogLevel (options) {
|
|
26
|
-
const logLevel = options && options['log-level'] || require('../../lib').env.log.levels.cli
|
|
27
|
-
if (/^debug$/i.test (logLevel)) return ['Error', 'Warning', 'Info', 'Debug']
|
|
28
|
-
else if (/^info$/i.test (logLevel)) return ['Error', 'Warning', 'Info']
|
|
29
|
-
else if (/^warn/i.test (logLevel)) return ['Error', 'Warning']
|
|
30
|
-
else if (/^error/i.test (logLevel)) return ['Error']
|
|
31
|
-
else return ['Error', 'Warning']
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function isInternalError(e) {
|
|
35
|
-
// check for standard Error classes, but not Error itself
|
|
36
|
-
return e.name === 'EvalError' || e.name === 'InternalError' || e.name === 'RangeError'
|
|
37
|
-
|| e.name === 'ReferenceError' || e.name === 'SyntaxError' || e.name === 'TypeError'
|
|
38
|
-
|| e.name === 'URIError'
|
|
39
|
-
}
|
|
40
|
-
|
|
41
24
|
/* eslint no-console:off */
|
package/bin/version.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const { dirname, join, resolve } = require ('path')
|
|
3
3
|
const { cwd } = require('process')
|
|
4
4
|
module.exports = Object.assign(list_versions, {
|
|
5
|
-
flags: [ '--info', '--markdown', '--all', '--npm-list', '--npm-tree' ],
|
|
5
|
+
flags: [ '--info', '--markdown', '--all', '--npm-list', '--npm-tree', '--no-colors'],
|
|
6
6
|
shortcuts: [ '-i', '-m','-a', '-ls', '-ll' ],
|
|
7
7
|
info,
|
|
8
8
|
help: `
|
|
@@ -41,15 +41,16 @@ function list_versions(args, options) { //NOSONAR
|
|
|
41
41
|
console.log (cmd,'| grep', pattern)
|
|
42
42
|
return require('child_process').exec(cmd, (e,stdout)=>{
|
|
43
43
|
// if (e) console.error(e)
|
|
44
|
+
const replacement = (options['no-colors'] ? '$1 $2$3$4' : '\x1b[91m$1 \x1b[32m$2\x1b[0m\x1b[2m$3\x1b[32m$4\x1b[0m');
|
|
44
45
|
for (let line of stdout.split(/\n/)) if (line.match(re)) console.log(
|
|
45
|
-
line.replace(/(@sap[^@]*)@([\S]+)( -> [\S]+)?(deduped)?/,
|
|
46
|
+
line.replace(/(@sap[^@]*)@([\S]+)( -> [\S]+)?(deduped)?/,replacement)
|
|
46
47
|
)
|
|
47
48
|
})
|
|
48
49
|
}
|
|
49
50
|
const versions = info (options)
|
|
50
51
|
if (options.markdown) return _markdown (versions)
|
|
51
52
|
if (options.info) return _markdown (versions)
|
|
52
|
-
const mark = options
|
|
53
|
+
const mark = options['no-colors'] ? s => s : require('./utils/term').info
|
|
53
54
|
for (let each of Object.keys(versions).sort()) console.log(`${mark(each)}: ${versions[each]}`)
|
|
54
55
|
}
|
|
55
56
|
|
package/common.cds
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type for an association to Languages
|
|
3
|
+
*
|
|
4
|
+
* See https://cap.cloud.sap/docs/cds/common#type-language
|
|
5
|
+
*/
|
|
1
6
|
type Language : Association to sap.common.Languages;
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Type for an association to Currencies
|
|
10
|
+
*
|
|
11
|
+
* See https://cap.cloud.sap/docs/cds/common#type-currency
|
|
12
|
+
*/
|
|
2
13
|
type Currency : Association to sap.common.Currencies;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Type for an association to Countries
|
|
17
|
+
*
|
|
18
|
+
* See https://cap.cloud.sap/docs/cds/common#type-country
|
|
19
|
+
*/
|
|
3
20
|
type Country : Association to sap.common.Countries;
|
|
4
21
|
|
|
5
22
|
/**
|
|
@@ -7,22 +24,47 @@ type Country : Association to sap.common.Countries;
|
|
|
7
24
|
* including built-in support for value lists in Fiori.
|
|
8
25
|
*/
|
|
9
26
|
context sap.common {
|
|
10
|
-
|
|
11
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Type for a language code
|
|
29
|
+
*/
|
|
30
|
+
type Locale : String(14) @(title : '{i18n>LanguageCode}');
|
|
12
31
|
//> length=14 is to accommodate values like these:
|
|
13
32
|
// en_US_x_saptrc - (1Q) used as a technical SAP language code
|
|
14
33
|
// en_US_x_sappsd - (2Q) used as a technical SAP language code
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Code list for languages
|
|
37
|
+
*
|
|
38
|
+
* See https://cap.cloud.sap/docs/cds/common#entity-sapcommonlanguages
|
|
39
|
+
*/
|
|
40
|
+
entity Languages : CodeList {
|
|
41
|
+
key code : Locale;
|
|
15
42
|
}
|
|
16
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Code list for countries
|
|
46
|
+
*
|
|
47
|
+
* See https://cap.cloud.sap/docs/cds/common#entity-sapcommoncountries
|
|
48
|
+
*/
|
|
17
49
|
entity Countries : CodeList {
|
|
18
50
|
key code : String(3) @(title : '{i18n>CountryCode}');
|
|
19
51
|
}
|
|
20
52
|
|
|
53
|
+
/**
|
|
54
|
+
* Code list for currencies
|
|
55
|
+
*
|
|
56
|
+
* See https://cap.cloud.sap/docs/cds/common#entity-sapcommoncurrencies
|
|
57
|
+
*/
|
|
21
58
|
entity Currencies : CodeList {
|
|
22
59
|
key code : String(3) @(title : '{i18n>CurrencyCode}');
|
|
23
60
|
symbol : String(5) @(title : '{i18n>CurrencySymbol}');
|
|
24
61
|
}
|
|
25
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Aspect for a code list with name and description
|
|
65
|
+
*
|
|
66
|
+
* See https://cap.cloud.sap/docs/cds/common#aspect-sapcommoncodelist
|
|
67
|
+
*/
|
|
26
68
|
aspect CodeList @(
|
|
27
69
|
cds.autoexpose,
|
|
28
70
|
cds.persistence.skip : 'if-unused'
|
|
@@ -33,15 +75,19 @@ context sap.common {
|
|
|
33
75
|
}
|
|
34
76
|
|
|
35
77
|
|
|
36
|
-
|
|
37
|
-
* Aspect for entities with canonical universal IDs
|
|
78
|
+
/**
|
|
79
|
+
* Aspect for entities with canonical universal IDs
|
|
80
|
+
*
|
|
81
|
+
* See https://cap.cloud.sap/docs/cds/common#aspect-cuid
|
|
38
82
|
*/
|
|
39
83
|
aspect cuid {
|
|
40
84
|
key ID : UUID; //> automatically filled in
|
|
41
85
|
}
|
|
42
86
|
|
|
43
|
-
|
|
44
|
-
* Aspect to capture changes by user and name
|
|
87
|
+
/**
|
|
88
|
+
* Aspect to capture changes by user and name
|
|
89
|
+
*
|
|
90
|
+
* See https://cap.cloud.sap/docs/cds/common#aspect-managed
|
|
45
91
|
*/
|
|
46
92
|
aspect managed {
|
|
47
93
|
createdAt : Timestamp @cds.on.insert : $now;
|
|
@@ -50,8 +96,10 @@ aspect managed {
|
|
|
50
96
|
modifiedBy : User @cds.on.insert : $user @cds.on.update : $user;
|
|
51
97
|
}
|
|
52
98
|
|
|
53
|
-
|
|
54
|
-
*
|
|
99
|
+
/**
|
|
100
|
+
* Aspect for entities with temporal data
|
|
101
|
+
*
|
|
102
|
+
* See https://cap.cloud.sap/docs/cds/common#aspect-temporal
|
|
55
103
|
*/
|
|
56
104
|
aspect temporal {
|
|
57
105
|
validFrom : Timestamp @cds.valid.from;
|
|
@@ -65,7 +113,7 @@ aspect temporal {
|
|
|
65
113
|
type User : String(255);
|
|
66
114
|
|
|
67
115
|
|
|
68
|
-
|
|
116
|
+
/**
|
|
69
117
|
* Aspects for extensible entities.
|
|
70
118
|
*/
|
|
71
119
|
aspect extensible {
|
|
@@ -128,16 +176,13 @@ annotate managed with {
|
|
|
128
176
|
|
|
129
177
|
//---------------------------------------------------------------------------
|
|
130
178
|
// Temporary Workarounds...
|
|
131
|
-
|
|
132
|
-
// REVISIT: Remove support for @odata.on... and #... with @sap/cds ^6
|
|
133
|
-
// REVISIT: change @odata.on... to @cds.on...
|
|
134
179
|
// REVISIT: @cds.on... should automatically result in @readonly @Core.Computed
|
|
135
180
|
|
|
136
181
|
annotate managed with {
|
|
137
|
-
modifiedAt @readonly
|
|
138
|
-
createdAt @readonly
|
|
139
|
-
createdBy @readonly
|
|
140
|
-
modifiedBy @readonly
|
|
182
|
+
modifiedAt @readonly;
|
|
183
|
+
createdAt @readonly;
|
|
184
|
+
createdBy @readonly;
|
|
185
|
+
modifiedBy @readonly;
|
|
141
186
|
}
|
|
142
187
|
|
|
143
188
|
//---------------------------------------------------------------------------
|
package/lib/compile/cdsc.js
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
const cds = require ('../index')
|
|
2
2
|
const {cdsc,odata,sql,features} = cds.env
|
|
3
3
|
const constraints = {
|
|
4
|
-
assertIntegrity: features.assert_integrity
|
|
5
|
-
assertIntegrityType: features.assert_integrity_type
|
|
4
|
+
assertIntegrity: features.assert_integrity
|
|
6
5
|
}
|
|
7
6
|
const compile = require ('@sap/cds-compiler')
|
|
8
7
|
const _4cdsc = Symbol('_4cdsc')
|
|
@@ -66,6 +65,8 @@ const _options = {for: Object.assign (_options4, {
|
|
|
66
65
|
},
|
|
67
66
|
|
|
68
67
|
sql(o,_env) {
|
|
68
|
+
// REVISIT: compiler requires to only provide assertIntegrityType if defined
|
|
69
|
+
if(constraints.assertIntegrity) constraints.assertIntegrityType = features.assert_integrity_type
|
|
69
70
|
return _options4 ({ ...constraints, ..._env||sql, ...o }, {
|
|
70
71
|
sql_mapping : 'names', //> legacy
|
|
71
72
|
sqlDialect : 'dialect', //> legacy
|
|
@@ -7,9 +7,6 @@ const _locales_4sql = {
|
|
|
7
7
|
|
|
8
8
|
const { _texts_entries, _localized_entries } = env.cdsc.cv2 || {}
|
|
9
9
|
const _been_here = Symbol('is _localized')
|
|
10
|
-
const _conf = env.requires.db || env.requires.sql
|
|
11
|
-
const _on_sqlite = _conf.kind === 'sqlite' || _conf.dialect === 'sqlite'
|
|
12
|
-
//> FIXME: we reliably need to now if we'll be on sqlite even before the connect happened
|
|
13
10
|
|
|
14
11
|
|
|
15
12
|
|
|
@@ -46,6 +43,8 @@ function unfold_csn (m) { // NOSONAR
|
|
|
46
43
|
DEBUG && DEBUG ('unfolding csn...')
|
|
47
44
|
const pass2 = []
|
|
48
45
|
|
|
46
|
+
const _conf = env.requires.db || env.requires.sql || env.requires.kinds && env.requires.kinds.sql
|
|
47
|
+
const _on_sqlite = _conf.kind === 'sqlite' || _conf.dialect === 'sqlite'
|
|
49
48
|
const _locales = _on_sqlite && _locales_4sql.sqlite
|
|
50
49
|
|
|
51
50
|
// Pass 1 - add localized.<locale> entities and views
|
|
@@ -96,18 +95,20 @@ function unfold_csn (m) { // NOSONAR
|
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
98
|
+
const _is_localized = (
|
|
99
|
+
!env.features._ucsn_ ? d => d.own('$localized') // as set by compiler in compile.for.odata
|
|
100
|
+
: (d,_path={}) => d.own('$localized', ()=>{ // calculate our own for effective CSNs
|
|
101
|
+
// if (d.elements.texts && d.elements.texts.target === `${d.name}.texts`) return d.set($localized,true)
|
|
102
|
+
if (!d.elements || d.name.endsWith('.texts')) return false
|
|
103
|
+
for (let each in d.elements) {
|
|
104
|
+
const e = d.elements [each]
|
|
105
|
+
if (e.localized || e._target && !(_path && e._target.name in _path) && _is_localized(e._target,Object.assign(_path, { [d.name]:1 }))) {
|
|
106
|
+
return true
|
|
107
|
+
}
|
|
107
108
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
return false
|
|
110
|
+
})
|
|
111
|
+
)
|
|
111
112
|
|
|
112
113
|
|
|
113
114
|
// feature-toggled exports
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
let _unfold = (..._) => (_unfold = require ('@sap/cds-compiler/lib/transform/draft/odata')) (..._)
|
|
1
2
|
const cds = require ('../../index')
|
|
2
3
|
module.exports = function cds_compile_for_drafts (csn,o) {
|
|
3
4
|
if (!cds.env.features._ucsn_) return cds.compile.for.odata (csn,o)
|
|
4
|
-
const unfold = cds_compile_for_drafts.unfold || (
|
|
5
|
-
cds_compile_for_drafts.unfold = require ('@sap/cds-compiler/lib/transform/draft/odata')
|
|
6
|
-
)
|
|
7
5
|
csn = JSON.parse (JSON.stringify (csn)) // REVISIT: workaround for bad test setup
|
|
8
|
-
|
|
6
|
+
csn = _unfold (csn,o||{})
|
|
7
|
+
return csn
|
|
9
8
|
}
|