@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,10 +1,9 @@
|
|
|
1
|
-
const
|
|
1
|
+
const fs = require('fs')
|
|
2
2
|
const path = require('path')
|
|
3
3
|
const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
|
|
4
|
-
const { getHanaDbModuleDescriptor } = require('../../mtaUtil')
|
|
5
4
|
const { OUTPUT_MODE_RESULT_ONLY, BUILD_OPTION_OUTPUT_MODE, SKIP_HDBTABLEDATA_GENERATION, SKIP_PACKAGE_JSON_GENERATION,
|
|
6
|
-
|
|
7
|
-
const { BuildError,
|
|
5
|
+
CONTENT_PACKAGE_JSON, CONTENT_HDBTABLEDATA, CSV_FILE_DETECTION, CONTENT_ENV, CONTENT_DEFAULT_ENV_JSON, CONTENT_NODE_MODULES } = require('../../constants')
|
|
6
|
+
const { BuildError, relativePaths } = require('../../util')
|
|
8
7
|
const CSV = require('../../csv-reader')
|
|
9
8
|
const to_hdbmigration = require('./2migration')
|
|
10
9
|
const to_hdbtabledata = require('./2tabledata')
|
|
@@ -20,7 +19,6 @@ const FILE_EXT_HDBMIGRATIONTABLE = ".hdbmigrationtable"
|
|
|
20
19
|
const FILE_NAME_HDICONFIG = ".hdiconfig"
|
|
21
20
|
const FILE_NAME_HDINAMESPACE = ".hdinamespace"
|
|
22
21
|
const FILE_NAME_PACKAGE_JSON = "package.json"
|
|
23
|
-
const FILE_NAME_MANIFEST_YML = "manifest.yml"
|
|
24
22
|
const PATH_LAST_DEV_CSN = "last-dev/csn.json"
|
|
25
23
|
const FILE_NAME_UNDEPLOY_JSON = "undeploy.json"
|
|
26
24
|
|
|
@@ -32,10 +30,17 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
32
30
|
dest: this.task.dest,
|
|
33
31
|
hana: []
|
|
34
32
|
}
|
|
33
|
+
|
|
35
34
|
// set unified option values in order to easy access later on
|
|
36
|
-
|
|
35
|
+
// default value: true
|
|
37
36
|
this.task.options[CONTENT_PACKAGE_JSON] = !this.hasBuildOption(CONTENT_PACKAGE_JSON, false) && !this.hasBuildOption(SKIP_PACKAGE_JSON_GENERATION, true) ? true : false
|
|
38
37
|
this.task.options[CONTENT_HDBTABLEDATA] = !this.hasBuildOption(CONTENT_HDBTABLEDATA, false) && !this.hasBuildOption(SKIP_HDBTABLEDATA_GENERATION, true) ? true : false
|
|
38
|
+
this.task.options[CSV_FILE_DETECTION] = !this.hasBuildOption(CSV_FILE_DETECTION, false) ? true : false
|
|
39
|
+
|
|
40
|
+
// default value: false
|
|
41
|
+
this.task.options[CONTENT_NODE_MODULES] = this.hasBuildOption(CONTENT_NODE_MODULES, true) ? true : false
|
|
42
|
+
this.task.options[CONTENT_ENV] = this.hasBuildOption(CONTENT_ENV, true) ? true : false
|
|
43
|
+
this.task.options[CONTENT_DEFAULT_ENV_JSON] = this.hasBuildOption(CONTENT_DEFAULT_ENV_JSON, true) ? true : false
|
|
39
44
|
|
|
40
45
|
this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
|
|
41
46
|
}
|
|
@@ -49,22 +54,15 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
49
54
|
const plugins = await this._compileToHana(model)
|
|
50
55
|
|
|
51
56
|
if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// Native hana artifacts are currently not supported by extensions - thus content copied from the base model cannot overwrite
|
|
57
|
-
// content defined by the extension.
|
|
58
|
-
if (getProperty(this.task, "options.build.mtxOriginalSrc")) {
|
|
59
|
-
const baseModelDbSrcPath = path.join(this.buildOptions.root, this.task.options.build.mtxOriginalSrc)
|
|
60
|
-
if (await fs.pathExists(baseModelDbSrcPath)) {
|
|
61
|
-
await this._copyNativeContent(baseModelDbSrcPath, dest)
|
|
62
|
-
}
|
|
57
|
+
if (this.hasBuildOption(CSV_FILE_DETECTION, false)) {
|
|
58
|
+
await this._copyResources(src, dest)
|
|
59
|
+
} else {
|
|
60
|
+
await this._copyResourcesExt(src, dest, model)
|
|
63
61
|
}
|
|
64
62
|
|
|
65
|
-
await this._copyNativeContent(src, dest)
|
|
66
63
|
await this._writeHdiConfig(plugins)
|
|
67
64
|
await this._writeHdiNamespace()
|
|
65
|
+
|
|
68
66
|
// TODO disabled as this contradicts the MTX domain concept which allows partial app deployments
|
|
69
67
|
//await this._writeUndeployJson()
|
|
70
68
|
|
|
@@ -74,10 +72,6 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
74
72
|
if (this.hasBuildOption(CONTENT_PACKAGE_JSON, true)) {
|
|
75
73
|
await this._writePackageJson()
|
|
76
74
|
}
|
|
77
|
-
if (this.hasBuildOption(CONTENT_MANIFEST, true)) {
|
|
78
|
-
await this._writeManifestYml()
|
|
79
|
-
await this._writeCfIgnore()
|
|
80
|
-
}
|
|
81
75
|
}
|
|
82
76
|
return this._result
|
|
83
77
|
}
|
|
@@ -91,7 +85,50 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
91
85
|
if (this.isStagingBuild()) {
|
|
92
86
|
return super.clean()
|
|
93
87
|
}
|
|
94
|
-
return fs.
|
|
88
|
+
return fs.promises.rm(this.task.options.compileDest, { force: true, recursive: true })
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Copies all files located at <src> (except HANA artefacts not contained in <db>/src/**) to the folder <dest>.
|
|
93
|
+
* '*.csv' files are read based on the corresponding CDS model file location and copied as flat list into folder '<dest>/src/gen>'.
|
|
94
|
+
*
|
|
95
|
+
* @param {string} src
|
|
96
|
+
* @param {string} dest
|
|
97
|
+
* @param {Object} model
|
|
98
|
+
*/
|
|
99
|
+
async _copyResourcesExt(src, dest, model) {
|
|
100
|
+
const deploy = require('../../../../lib/deploy')
|
|
101
|
+
const resources = Object.keys(await deploy.resources(model))
|
|
102
|
+
const csvPath = path.join(src, "data")
|
|
103
|
+
// determine subfolder name used by the application for backward compatibility
|
|
104
|
+
const csvFolder = resources.some(res => res && res.startsWith(csvPath)) ? "data" : "csv"
|
|
105
|
+
|
|
106
|
+
// 1. copy csv files into 'src/gen/data' or 'src/gen/csv' subfolder
|
|
107
|
+
const promises = []
|
|
108
|
+
resources.forEach(res => {
|
|
109
|
+
if (res && /\.csv$/.test(res)) {
|
|
110
|
+
promises.push(this.copy(res).to(path.join(this.task.options.compileDest, csvFolder, path.basename(res))))
|
|
111
|
+
}
|
|
112
|
+
})
|
|
113
|
+
await Promise.all(promises)
|
|
114
|
+
|
|
115
|
+
// 2. copy files except *.cds, *.csv, .env, default-env.json, ./node_modules/**
|
|
116
|
+
let blockList = "\\.cds$|\\.csv$|\\.hdbtabledata$"
|
|
117
|
+
blockList += this.hasBuildOption(CONTENT_ENV, false) ? "|\\.env($|\\..*$)" : ""
|
|
118
|
+
blockList += this.hasBuildOption(CONTENT_DEFAULT_ENV_JSON, false) ? "|default-env\\.json$" : ""
|
|
119
|
+
blockList = new RegExp(blockList)
|
|
120
|
+
const dbSrc = path.join(src, 'src')
|
|
121
|
+
|
|
122
|
+
await this.copyNativeContent(src, dest, (entry) => {
|
|
123
|
+
if (entry.startsWith(dbSrc)) {
|
|
124
|
+
// entire native content
|
|
125
|
+
return true
|
|
126
|
+
}
|
|
127
|
+
if (fs.statSync(entry).isDirectory()) {
|
|
128
|
+
return !/(\/|\\)node_modules(\/|\\)?$/.test(entry) || this.hasBuildOption(CONTENT_NODE_MODULES, true)
|
|
129
|
+
}
|
|
130
|
+
return !blockList.test(entry)
|
|
131
|
+
})
|
|
95
132
|
}
|
|
96
133
|
|
|
97
134
|
/**
|
|
@@ -101,21 +138,19 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
101
138
|
* @param {string} src
|
|
102
139
|
* @param {string} dest
|
|
103
140
|
*/
|
|
104
|
-
async
|
|
141
|
+
async _copyResources(src, dest) {
|
|
105
142
|
const dbCsvDir = path.join(src, "csv")
|
|
106
143
|
const dbDataDir = path.join(src, "data")
|
|
107
144
|
const csvDirs = [dbCsvDir, dbDataDir]
|
|
108
145
|
const regex = RegExp('\\.cds$|\\.csv$|\\.hdbtabledata$')
|
|
109
146
|
const regexData = RegExp('\\.csv$|\\.hdbtabledata$')
|
|
110
|
-
|
|
111
|
-
await super.copyNativeContent(src, dest, (entry) => {
|
|
147
|
+
await this.copyNativeContent(src, dest, (entry) => {
|
|
112
148
|
if (fs.statSync(entry).isDirectory()) {
|
|
113
|
-
return
|
|
149
|
+
return !/(\/|\\)node_modules(\/|\\)?$/.test(entry)
|
|
114
150
|
}
|
|
115
151
|
return (!regex.test(entry) && entry !== this.env.build.outputfile) ||
|
|
116
|
-
(regexData.test(entry) && !entry.startsWith(dbCsvDir) && !entry.startsWith(
|
|
117
|
-
})
|
|
118
|
-
|
|
152
|
+
(regexData.test(entry) && !entry.startsWith(dbCsvDir) && !entry.startsWith(dbDataDir))
|
|
153
|
+
})
|
|
119
154
|
// handle *.csv and *.hdbtabledata located in '<dbSrc>/data' and '<dbSrc>/csv' folder
|
|
120
155
|
const allFiles = csvDirs.reduce((acc, csvDir) => {
|
|
121
156
|
return acc.concat(BuildTaskHandlerInternal._find(csvDir, (entry) => {
|
|
@@ -145,18 +180,18 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
145
180
|
async _compileToHdbtabledata(model, dest) { //NOSONAR
|
|
146
181
|
const tabledataDirs = new Set()
|
|
147
182
|
const destSrcDir = path.join(dest, "src")
|
|
148
|
-
|
|
183
|
+
|
|
184
|
+
const allCsvFiles = BuildTaskHandlerInternal._find(destSrcDir, (entry) => {
|
|
149
185
|
if (fs.statSync(entry).isDirectory()) {
|
|
150
186
|
return true
|
|
151
187
|
}
|
|
152
|
-
|
|
153
|
-
if (extName === FILE_EXT_HDBTABLEDATA) {
|
|
188
|
+
if (/\.hdbtabledata$/.test(entry)) {
|
|
154
189
|
tabledataDirs.add(path.dirname(entry))
|
|
155
190
|
}
|
|
156
|
-
return
|
|
191
|
+
return /\.csv$/.test(entry)
|
|
157
192
|
})
|
|
158
|
-
if (
|
|
159
|
-
const csvDirs =
|
|
193
|
+
if (allCsvFiles.length > 0) {
|
|
194
|
+
const csvDirs = allCsvFiles.map(path.dirname).reduce((dirs, dir) => {
|
|
160
195
|
if (!tabledataDirs.has(dir) && !dirs.includes(dir)) { // exclude any dir where a tabledata is present
|
|
161
196
|
dirs.push(dir)
|
|
162
197
|
}
|
|
@@ -165,7 +200,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
165
200
|
|
|
166
201
|
// ODM csv data comes with license comments, so strip these
|
|
167
202
|
if (!this.hasBuildOption("stripCsvComments", false)) {
|
|
168
|
-
await this._stripCsvComments(
|
|
203
|
+
await this._stripCsvComments(allCsvFiles)
|
|
169
204
|
}
|
|
170
205
|
|
|
171
206
|
const promises = []
|
|
@@ -214,7 +249,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
214
249
|
if (this.hasCdsEnvOption('features.journal', false) || format === 'hdbcds') {
|
|
215
250
|
await this._compileToHdb(model, pluginTypes, format)
|
|
216
251
|
} else {
|
|
217
|
-
await this._compileToHdbmigration(model, pluginTypes)
|
|
252
|
+
await this._compileToHdbmigration(model, pluginTypes, format)
|
|
218
253
|
}
|
|
219
254
|
return pluginTypes
|
|
220
255
|
}
|
|
@@ -237,7 +272,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
237
272
|
await Promise.all(promises)
|
|
238
273
|
}
|
|
239
274
|
|
|
240
|
-
async _compileToHdbmigration(model, pluginTypes) {
|
|
275
|
+
async _compileToHdbmigration(model, pluginTypes, format) {
|
|
241
276
|
const relDestDir = path.relative(this.task.dest, this.task.options.compileDest)
|
|
242
277
|
const relDbDestDir = path.relative(this.buildOptions.root, this.task.options.compileDest)
|
|
243
278
|
const dbSrcDir = path.join(this.task.src, "src")
|
|
@@ -248,12 +283,11 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
248
283
|
const promises = []
|
|
249
284
|
const migrationTableFiles = []
|
|
250
285
|
|
|
251
|
-
if (
|
|
252
|
-
lastDev = await fs.
|
|
286
|
+
if (fs.existsSync(lastDevCsnDir)) {
|
|
287
|
+
lastDev = JSON.parse((await fs.promises.readFile(lastDevCsnDir, 'utf-8')).toString())
|
|
253
288
|
}
|
|
254
|
-
// enforces sqlNames option for compiler in tests
|
|
255
|
-
|
|
256
|
-
const options = { ...this.options(), logger: this.logger, sql_mapping: this.env.sql.names }
|
|
289
|
+
// enforces sqlNames option for compiler in tests, pass options from cds env, ensures that the correct format is taken
|
|
290
|
+
const options = { ...this.options(), logger: this.logger, sql_mapping: this.env.sql.names, "deploy-format": format }
|
|
257
291
|
|
|
258
292
|
const compilationResult = await to_hdbmigration(model, lastDev, dbSrcDir, options)
|
|
259
293
|
const definitions = compilationResult.definitions
|
|
@@ -279,7 +313,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
279
313
|
}
|
|
280
314
|
if (suffix === FILE_EXT_HDBTABLE) {
|
|
281
315
|
// issue an error in case a .hdbmigrationtable file already exists
|
|
282
|
-
if (
|
|
316
|
+
if (fs.existsSync(path.join(dbSrcDir, name + FILE_EXT_HDBMIGRATIONTABLE))) {
|
|
283
317
|
this.pushMessage(`Multiple files exist defining the same HANA artifact - [${path.join(relDbSrcDir, name + FILE_EXT_HDBMIGRATIONTABLE)}, ${path.join(relDbDestDir, file)}].\nEither annotate the model entity using @cds.persistence.journal or undeploy the file [${path.join('src', name + FILE_EXT_HDBMIGRATIONTABLE)}] using an undeploy.json file.`, ERROR)
|
|
284
318
|
}
|
|
285
319
|
}
|
|
@@ -300,7 +334,7 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
300
334
|
|
|
301
335
|
async _writePackageJson() {
|
|
302
336
|
const packageJson = path.join(this.task.src, "package.json")
|
|
303
|
-
const exists =
|
|
337
|
+
const exists = fs.existsSync(packageJson)
|
|
304
338
|
|
|
305
339
|
if (exists) {
|
|
306
340
|
this.logger._debug && this.logger.debug(`skip create [${relativePaths(this.buildOptions.root, packageJson)}], already existing`)
|
|
@@ -356,8 +390,8 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
356
390
|
const undeployJsonSrc = path.join(this.task.src, FILE_NAME_UNDEPLOY_JSON)
|
|
357
391
|
const templateEntries = await this._readTemplateAsJson(FILE_NAME_UNDEPLOY_JSON)
|
|
358
392
|
let newEntries = []
|
|
359
|
-
if (
|
|
360
|
-
newEntries = await fs.
|
|
393
|
+
if (fs.existsSync(undeployJsonSrc)) {
|
|
394
|
+
newEntries = await JSON.parse((await fs.promises.readFile(undeployJsonSrc, 'utf-8')).toString())
|
|
361
395
|
newEntries = Array.isArray(newEntries) ? newEntries : []
|
|
362
396
|
templateEntries.forEach(entry => {
|
|
363
397
|
if (!newEntries.includes(entry)) {
|
|
@@ -377,64 +411,20 @@ class HanaModuleBuilder extends BuildTaskHandlerInternal {
|
|
|
377
411
|
}
|
|
378
412
|
}
|
|
379
413
|
|
|
380
|
-
/**
|
|
381
|
-
* Create .cfignore file only for staging build.
|
|
382
|
-
* This is to have a fast-turnaround at development
|
|
383
|
-
*/
|
|
384
|
-
async _writeCfIgnore() {
|
|
385
|
-
if (this.isStagingBuild()) {
|
|
386
|
-
const content = `node_modules/\n`
|
|
387
|
-
await this.write(content).to(path.join(this.task.dest, '.cfignore'))
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
async _writeManifestYml() {
|
|
392
|
-
if (!this.isStagingBuild()) {
|
|
393
|
-
return
|
|
394
|
-
}
|
|
395
|
-
if (await fs.pathExists(path.join(this.task.src, FILE_NAME_MANIFEST_YML)) || await fs.pathExists(path.join(this.task.src, 'manifest.yml'))) {
|
|
396
|
-
this.logger.debug('skip cf manifest generation, already existing')
|
|
397
|
-
return
|
|
398
|
-
}
|
|
399
|
-
try {
|
|
400
|
-
const descriptor = await getHanaDbModuleDescriptor(this.buildOptions.root, path.basename(this.task.src), this.logger)
|
|
401
|
-
const MANIFEST_YML_CONTENT = `---
|
|
402
|
-
applications:
|
|
403
|
-
- name: ${descriptor.appName}
|
|
404
|
-
path: .
|
|
405
|
-
no-route: true
|
|
406
|
-
health-check-type: process
|
|
407
|
-
memory: 256M
|
|
408
|
-
buildpacks:
|
|
409
|
-
- nodejs_buildpack
|
|
410
|
-
services:
|
|
411
|
-
- ${descriptor.hdiServiceName}`
|
|
412
|
-
|
|
413
|
-
this.logger.debug("Cloud Foundry service binding required for HDI container. To create a service use CF command")
|
|
414
|
-
this.logger._debug && this.logger.debug(` cf cs hana hdi-shared ${descriptor.hdiServiceName}`)
|
|
415
|
-
|
|
416
|
-
await this.write(MANIFEST_YML_CONTENT).to(path.join(this.task.dest, FILE_NAME_MANIFEST_YML))
|
|
417
|
-
} catch (e) {
|
|
418
|
-
if (e.name === 'YAMLSyntaxError') {
|
|
419
|
-
this.logger.error("Failed to parse [mta.yaml] - skip manifest.yml generation")
|
|
420
|
-
}
|
|
421
|
-
this.logger.error(e)
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
|
|
425
414
|
async _readTemplateAsJson(template) {
|
|
426
415
|
const templatePath = path.join(__dirname, 'template', template)
|
|
427
|
-
return fs.
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
416
|
+
return fs.promises.readFile(templatePath, 'utf-8').then(f => JSON.parse(f.toString()))
|
|
417
|
+
.catch((error) => {
|
|
418
|
+
this.logger.error(`Failed to read template [${templatePath}]`)
|
|
419
|
+
return Promise.reject(error)
|
|
420
|
+
})
|
|
431
421
|
}
|
|
432
422
|
|
|
433
423
|
async _readTypesFromUndeployJson() {
|
|
434
424
|
const result = new Set()
|
|
435
425
|
const file = path.join(this.task.src, "undeploy.json")
|
|
436
|
-
if (
|
|
437
|
-
const undeployList = await fs.
|
|
426
|
+
if (fs.existsSync(file)) {
|
|
427
|
+
const undeployList = JSON.parse((await fs.promises.readFile(file)).toString())
|
|
438
428
|
if (Array.isArray(undeployList)) {
|
|
439
429
|
undeployList.forEach(entry => result.add(path.extname(entry)))
|
|
440
430
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
const
|
|
1
|
+
const fs = require('fs').promises
|
|
2
|
+
const {existsSync} = require('fs')
|
|
2
3
|
class MigrationTableParser {
|
|
3
4
|
constructor() {
|
|
4
5
|
}
|
|
5
6
|
|
|
6
7
|
async read(filePath, options = { encoding: 'utf8' }) {
|
|
7
|
-
if (
|
|
8
|
+
if (existsSync(filePath)) {
|
|
8
9
|
return this.parse((await fs.readFile(filePath, options)).replace(/\r\n/g, '\n'))
|
|
9
10
|
}
|
|
10
11
|
return null
|
|
@@ -289,7 +290,7 @@ class MigrationTableModel {
|
|
|
289
290
|
return idxBase
|
|
290
291
|
}
|
|
291
292
|
|
|
292
|
-
/**
|
|
293
|
+
/**
|
|
293
294
|
* Migrations are identical if the corresponding DDL statements are identical,
|
|
294
295
|
* ignoring order and ignoring comments.
|
|
295
296
|
*/
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
|
|
4
|
+
const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
|
|
5
|
+
const { isOldJavaStack, BuildError } = require('../../util')
|
|
6
|
+
|
|
7
|
+
const { BUILD_OPTION_OUTPUT_MODE, ODATA_VERSION, ODATA_VERSION_V2, OUTPUT_MODE_RESULT_ONLY, FILE_EXT_CDS, SKIP_ASSERT_COMPILER_V2, CONTENT_LANGUAGE_BUNDLES, CONTENT_DEFAULT_CSN } = require('../../constants')
|
|
8
|
+
const { INFO } = require('../../buildTaskHandler')
|
|
9
|
+
|
|
10
|
+
const DEFAULT_COMPILE_DEST_FOLDER = path.normalize('src/main/resources/edmx')
|
|
11
|
+
|
|
12
|
+
class JavaCfModuleBuilder extends BuildTaskHandlerEdmx {
|
|
13
|
+
init() {
|
|
14
|
+
super.init()
|
|
15
|
+
this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async build() {
|
|
19
|
+
const { src, dest } = this.task
|
|
20
|
+
|
|
21
|
+
const odataOptions = {
|
|
22
|
+
version: this.env.get(ODATA_VERSION)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (await isOldJavaStack([src, this.buildOptions.root])) {
|
|
26
|
+
if (!this._isCompilerV1() && !this.env.get(`build.${SKIP_ASSERT_COMPILER_V2}`)) {
|
|
27
|
+
throw new BuildError('CDS compiler version 2 does no longer support the classic CAP Java runtime. It is recommended to migrate to the current CAP Java runtime SDK. See https://cap.cloud.sap/docs/java/migration for more.')
|
|
28
|
+
}
|
|
29
|
+
// default is now v4 and not v2 anymore, so warn and overwrite with v2 if using default
|
|
30
|
+
if (!this.env.for('cds', this.buildOptions.root, false).get(ODATA_VERSION)) {
|
|
31
|
+
odataOptions.version = ODATA_VERSION_V2
|
|
32
|
+
this.pushMessage('Forcing OData v2 for building though the default is v4. Make sure to define OData v2 in cds configuration.', INFO)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 'sql_mapping' and 'cds.persinstence.name' annotations are required by old java stack
|
|
36
|
+
if (this.env.sql.names !== 'plain') {
|
|
37
|
+
odataOptions.sql_mapping = this.env.sql.names
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const model = await this.model()
|
|
42
|
+
if (!model) {
|
|
43
|
+
return this._result
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const odata = await this._compileForOdata(model, this.task.options.compileDest, odataOptions)
|
|
47
|
+
await this.compileToEdmx(odata, this.task.options.compileDest, odataOptions)
|
|
48
|
+
|
|
49
|
+
if (this.hasBuildOption(CONTENT_LANGUAGE_BUNDLES, true)) {
|
|
50
|
+
// collect and write language bundles into single i18n.json file
|
|
51
|
+
await this.collectLanguageBundles(model, this.task.dest)
|
|
52
|
+
}
|
|
53
|
+
if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
|
|
54
|
+
await this._copyNativeContent(src, dest)
|
|
55
|
+
}
|
|
56
|
+
return this._result
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
async clean() {
|
|
60
|
+
if (this.isStagingBuild()) {
|
|
61
|
+
await super.clean()
|
|
62
|
+
return
|
|
63
|
+
}
|
|
64
|
+
this.logger._debug && this.logger.debug(`Deleting build target folder ${this.task.options.compileDest}`)
|
|
65
|
+
await fs.promises.rm(this.task.options.compileDest, {force: true, recursive: true})
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
async _copyNativeContent(src, dest) {
|
|
69
|
+
return super.copyNativeContent(src, dest, (entry) => {
|
|
70
|
+
if (fs.statSync(entry).isDirectory()) {
|
|
71
|
+
return true // using common filter for folders
|
|
72
|
+
} else {
|
|
73
|
+
const extname = path.extname(entry)
|
|
74
|
+
return extname !== FILE_EXT_CDS
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
async _compileForOdata(model, csnDest, compileOptions) {
|
|
80
|
+
// csn for service providers
|
|
81
|
+
const m = this.cds.compile.for.java(model, {
|
|
82
|
+
...this._options4odata(),
|
|
83
|
+
...compileOptions
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
// adding csn to build result containing @source and _where persisted properties
|
|
87
|
+
if (this.hasBuildOption(CONTENT_DEFAULT_CSN, true)) { //default true or undefined
|
|
88
|
+
await this.compileToJson(model, csnDest)
|
|
89
|
+
} else {
|
|
90
|
+
await this.compileToJson(m, csnDest)
|
|
91
|
+
}
|
|
92
|
+
return m
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
_isCompilerV1() {
|
|
96
|
+
const version = this.cds.compiler.version()
|
|
97
|
+
const match = version.match(/(\d+)\.?(\d*)\.?(\d*)/)
|
|
98
|
+
return match && match[1] === 1
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
module.exports = JavaCfModuleBuilder
|
|
@@ -1,101 +1 @@
|
|
|
1
|
-
|
|
2
|
-
const path = require('path')
|
|
3
|
-
|
|
4
|
-
const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
|
|
5
|
-
const { isOldJavaStack, BuildError } = require('../../util')
|
|
6
|
-
|
|
7
|
-
const { BUILD_OPTION_OUTPUT_MODE, ODATA_VERSION, ODATA_VERSION_V2, OUTPUT_MODE_RESULT_ONLY, FILE_EXT_CDS, SKIP_ASSERT_COMPILER_V2, CONTENT_LANGUAGE_BUNDLES, CONTENT_DEFAULT_CSN } = require('../../constants')
|
|
8
|
-
const { INFO } = require('../../buildTaskHandler')
|
|
9
|
-
|
|
10
|
-
const DEFAULT_COMPILE_DEST_FOLDER = path.normalize('src/main/resources/edmx')
|
|
11
|
-
|
|
12
|
-
class JavaCfModuleBuilder extends BuildTaskHandlerEdmx {
|
|
13
|
-
init() {
|
|
14
|
-
super.init()
|
|
15
|
-
this.task.options.compileDest = path.resolve(this.task.dest, this.task.options.compileDest || DEFAULT_COMPILE_DEST_FOLDER)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async build() {
|
|
19
|
-
const { src, dest } = this.task
|
|
20
|
-
|
|
21
|
-
const odataOptions = {
|
|
22
|
-
version: this.env.get(ODATA_VERSION)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (await isOldJavaStack([src, this.buildOptions.root])) {
|
|
26
|
-
if (!this._isCompilerV1() && !this.env.get(`build.${SKIP_ASSERT_COMPILER_V2}`)) {
|
|
27
|
-
throw new BuildError('CDS compiler version 2 does no longer support the classic CAP Java runtime. It is recommended to migrate to the current CAP Java runtime SDK. See https://cap.cloud.sap/docs/java/migration for more.')
|
|
28
|
-
}
|
|
29
|
-
// default is now v4 and not v2 anymore, so warn and overwrite with v2 if using default
|
|
30
|
-
if (!this.env.for('cds', this.buildOptions.root, false).get(ODATA_VERSION)) {
|
|
31
|
-
odataOptions.version = ODATA_VERSION_V2
|
|
32
|
-
this.pushMessage('Forcing OData v2 for building though the default is v4. Make sure to define OData v2 in cds configuration.', INFO)
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// 'sql_mapping' and 'cds.persinstence.name' annotations are required by old java stack
|
|
36
|
-
if (this.env.sql.names !== 'plain') {
|
|
37
|
-
odataOptions.sql_mapping = this.env.sql.names
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const model = await this.model()
|
|
42
|
-
if (!model) {
|
|
43
|
-
return this._result
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
const odata = await this._compileForOdata(model, this.task.options.compileDest, odataOptions)
|
|
47
|
-
await this.compileToEdmx(odata, this.task.options.compileDest, odataOptions)
|
|
48
|
-
|
|
49
|
-
if (this.hasBuildOption(CONTENT_LANGUAGE_BUNDLES, true)) {
|
|
50
|
-
// collect and write language bundles into single i18n.json file
|
|
51
|
-
await this.collectLanguageBundles(model, this.task.dest)
|
|
52
|
-
}
|
|
53
|
-
if (!this.hasBuildOption(BUILD_OPTION_OUTPUT_MODE, OUTPUT_MODE_RESULT_ONLY)) {
|
|
54
|
-
await this._copyNativeContent(src, dest)
|
|
55
|
-
}
|
|
56
|
-
return this._result
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async clean() {
|
|
60
|
-
if (this.isStagingBuild()) {
|
|
61
|
-
await super.clean()
|
|
62
|
-
return
|
|
63
|
-
}
|
|
64
|
-
this.logger._debug && this.logger.debug(`Deleting build target folder ${this.task.options.compileDest}`)
|
|
65
|
-
await fs.remove(this.task.options.compileDest)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async _copyNativeContent(src, dest) {
|
|
69
|
-
return super.copyNativeContent(src, dest, (entry) => {
|
|
70
|
-
if (fs.statSync(entry).isDirectory()) {
|
|
71
|
-
return true // using common filter for folders
|
|
72
|
-
} else {
|
|
73
|
-
const extname = path.extname(entry)
|
|
74
|
-
return extname !== FILE_EXT_CDS
|
|
75
|
-
}
|
|
76
|
-
})
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async _compileForOdata(model, csnDest, compileOptions) {
|
|
80
|
-
// csn for service providers
|
|
81
|
-
const m = this.cds.compile.for.java(model, {
|
|
82
|
-
...this._options4odata(),
|
|
83
|
-
...compileOptions
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
// adding csn to build result containing @source and _where persisted properties
|
|
87
|
-
if (this.hasBuildOption(CONTENT_DEFAULT_CSN, true)) { //default true or undefined
|
|
88
|
-
await this.compileToJson(model, csnDest)
|
|
89
|
-
} else {
|
|
90
|
-
await this.compileToJson(m, csnDest)
|
|
91
|
-
}
|
|
92
|
-
return m
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
_isCompilerV1() {
|
|
96
|
-
const { version } = require('@sap/cds-compiler/package.json')
|
|
97
|
-
const match = version.match(/(\d+)\.?(\d*)\.?(\d*)/)
|
|
98
|
-
return match && match[1] === 1
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
module.exports = JavaCfModuleBuilder
|
|
1
|
+
module.exports = require('../java')
|