@sap/cds 5.9.8 → 6.0.1
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 +252 -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 +80 -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 +19 -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 +9 -10
- package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
- package/bin/mtx/in-cds.js +19 -7
- package/bin/serve.js +56 -21
- 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 +11 -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 +70 -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 +23 -20
- package/lib/serve/index.js +51 -54
- package/lib/utils/axios.js +8 -12
- package/lib/utils/index.js +3 -3
- 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 +6 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +10 -45
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +5 -9
- 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 +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +15 -21
- 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 +100 -91
- 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 +77 -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 +15 -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 +6 -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 +3 -7
- package/libx/_runtime/fiori/generic/index.js +31 -0
- package/libx/_runtime/fiori/generic/new.js +2 -4
- package/libx/_runtime/fiori/generic/patch.js +4 -8
- package/libx/_runtime/fiori/generic/prepare.js +2 -4
- package/libx/_runtime/fiori/generic/read.js +137 -162
- package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
- package/libx/_runtime/fiori/utils/handler.js +10 -5
- 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 +11 -2
- 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 +2 -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 +84 -46
- 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 +261 -157
- 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
|
|
|
@@ -57,11 +57,11 @@ class HanaDeployer {
|
|
|
57
57
|
|
|
58
58
|
if (undeployWhitelist) {
|
|
59
59
|
this.logger.log('Writing undeploy.json');
|
|
60
|
-
await
|
|
60
|
+
await fs.write(path.join(currentModelFolder, 'undeploy.json'), JSON.stringify(undeployWhitelist, null, 2));
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
if (vcapFile) {
|
|
64
|
-
await
|
|
64
|
+
await fs.mkdir(currentModelFolder, { recursive: true });
|
|
65
65
|
} else {
|
|
66
66
|
const { cfServiceInstanceName, cfServiceInstanceKeyName, serviceKey } =
|
|
67
67
|
await this._getOrCreateCFService(projectPath, currentModelFolder, serviceName, tunnelAddress);
|
|
@@ -203,7 +203,7 @@ class HanaDeployer {
|
|
|
203
203
|
|
|
204
204
|
async _loadVCAPServices(vcapFile) {
|
|
205
205
|
try {
|
|
206
|
-
const content = await
|
|
206
|
+
const content = JSON.parse(await fs.readFile(vcapFile));
|
|
207
207
|
if (!content.VCAP_SERVICES) {
|
|
208
208
|
throw new Error(`The vcap file ${vcapFile} does not contain a VCAP_SERVICES entry.`);
|
|
209
209
|
}
|
|
@@ -221,7 +221,7 @@ class HanaDeployer {
|
|
|
221
221
|
const defaultEnvJsonPath = path.join(currentFolder, 'default-env.json');
|
|
222
222
|
|
|
223
223
|
try {
|
|
224
|
-
defaultEnvJson = await
|
|
224
|
+
defaultEnvJson = JSON.parse(await fs.readFile(defaultEnvJsonPath, UTF_8));
|
|
225
225
|
} catch (err) {
|
|
226
226
|
// ignore any errors
|
|
227
227
|
}
|
|
@@ -240,9 +240,8 @@ class HanaDeployer {
|
|
|
240
240
|
}
|
|
241
241
|
|
|
242
242
|
this.logger.log(`Writing ${defaultEnvJsonPath}`);
|
|
243
|
-
await
|
|
244
|
-
|
|
245
|
-
});
|
|
243
|
+
await fs.mkdir(path.dirname(defaultEnvJsonPath), {recursive: true})
|
|
244
|
+
await fs.writeFile(defaultEnvJsonPath, JSON.stringify(defaultEnvJson, null, 2));
|
|
246
245
|
}
|
|
247
246
|
}
|
|
248
247
|
|
|
@@ -285,7 +284,7 @@ class HanaDeployer {
|
|
|
285
284
|
|
|
286
285
|
async readFileSafely(file) {
|
|
287
286
|
try {
|
|
288
|
-
return await
|
|
287
|
+
return await fs.readFile(file, 'utf8');
|
|
289
288
|
} catch (err) {
|
|
290
289
|
return '';
|
|
291
290
|
}
|
|
@@ -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.jest || 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 _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,22 @@ 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
|
|
|
323
|
+
const { pathToFileURL } = require('url') // on Windows, must use a file: URL for ESM import
|
|
324
|
+
function _import(filePath) {
|
|
325
|
+
return typeof jest !== 'undefined'
|
|
326
|
+
? require(filePath)
|
|
327
|
+
: import (pathToFileURL(filePath).href)
|
|
328
|
+
}
|
|
329
|
+
|
|
295
330
|
|
|
296
|
-
const SECRETS = /(password)|(certificate)|(ca)|(
|
|
331
|
+
const SECRETS = /(password)|(certificate)|(ca)|(secret)|(key)/i // 'certificate' and 'ca' on HANA
|
|
297
332
|
/** mascades password-like strings, also reducing clutter in output */
|
|
298
333
|
function _redacted(cred) {
|
|
299
334
|
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
|
}
|