@sap/cds 5.9.6 → 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 +266 -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 +90 -53
- 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 +5 -4
- 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 +128 -42
- 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 +16 -18
- 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 +11 -4
- 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,30 +1,76 @@
|
|
|
1
1
|
/* eslint-disable no-empty */
|
|
2
|
-
const
|
|
2
|
+
const fs = require('fs')
|
|
3
3
|
const path = require('path')
|
|
4
|
-
const { BUILD_TASK_HANA, FOLDER_GEN } = require('../../constants')
|
|
5
|
-
const { WARNING } = require('../../buildTaskHandler')
|
|
6
4
|
const BuildTaskProviderInternal = require("../buildTaskProviderInternal")
|
|
7
5
|
const BuildTaskHandlerEdmx = require('../buildTaskHandlerEdmx')
|
|
6
|
+
const { isStreamlinedMtx } = require('../../util')
|
|
7
|
+
const ResourcesTarProvider = require('./resourcesTarBuilder')
|
|
8
8
|
|
|
9
|
+
const { BUILD_TASK_HANA, FOLDER_GEN } = require('../../constants')
|
|
10
|
+
const { WARNING } = require('../../buildTaskHandler')
|
|
9
11
|
const FOLDER_SDC = "sdc"
|
|
10
12
|
const FOLDER_NODE_MODULES = "node_modules"
|
|
11
13
|
const FOLDER_TEMPLATES = "tpl"
|
|
12
14
|
|
|
13
15
|
class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
14
16
|
get priority() {
|
|
15
|
-
// should be scheduled after
|
|
17
|
+
// should be scheduled after 'hana' build tasks are finished
|
|
16
18
|
return BuildTaskHandlerEdmx.PRIORITY_MIN_VALUE
|
|
17
19
|
}
|
|
18
20
|
init() {
|
|
19
21
|
super.init()
|
|
20
|
-
if (this.
|
|
21
|
-
this.
|
|
22
|
+
if (isStreamlinedMtx(this.cds)) {
|
|
23
|
+
this._delegate = new StreamlinedMtxBuilder(this)
|
|
22
24
|
} else {
|
|
23
|
-
this.
|
|
25
|
+
this._delegate = new ClassicMtxBuilder(this)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async build() {
|
|
30
|
+
return this._delegate.build()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async clean() {
|
|
34
|
+
return this._delegate.clean()
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class StreamlinedMtxBuilder {
|
|
39
|
+
constructor(handler) {
|
|
40
|
+
this._handler = handler
|
|
41
|
+
}
|
|
42
|
+
async build() {
|
|
43
|
+
// Non-sidecar scenario: model-provider is implemented by the Nodejs app itself (default for Nodejs).
|
|
44
|
+
// Only create resources TAR, compiled CSN(s) are created by the Nodejs app build task.
|
|
45
|
+
const dest = this._handler.env.get("build.target") !== "." ? this._handler.task.dest : path.join(this._handler.task.dest, FOLDER_GEN)
|
|
46
|
+
const model = await this._handler.model()
|
|
47
|
+
if (!model) {
|
|
48
|
+
return
|
|
49
|
+
}
|
|
50
|
+
return new ResourcesTarProvider(this._handler).writeTar(dest, model)
|
|
51
|
+
}
|
|
52
|
+
async clean() {
|
|
53
|
+
// staging build content is deleted by BuildTaskEngine
|
|
54
|
+
if (this._handler.buildOptions.root === this._handler.buildOptions.target) {
|
|
55
|
+
// remove 'gen' folder
|
|
56
|
+
return fs.promises.rm(path.join(this._handler.task.dest, FOLDER_GEN), { force: true, recursive: true })
|
|
24
57
|
}
|
|
25
58
|
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
class ClassicMtxBuilder {
|
|
62
|
+
constructor(handler) {
|
|
63
|
+
this._handler = handler
|
|
64
|
+
}
|
|
65
|
+
|
|
26
66
|
async build() {
|
|
27
|
-
|
|
67
|
+
if (this._handler.env.get("requires.toggles") === true) {
|
|
68
|
+
throw new Error("Feature toggles are only supported by Streamlined MTX")
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const buildOptions = this._handler.buildOptions
|
|
72
|
+
const destSdc = buildOptions.root === buildOptions.target ? path.join(this._handler.task.dest, FOLDER_GEN, FOLDER_SDC) : path.join(this._handler.task.dest, FOLDER_SDC)
|
|
73
|
+
const model = await this._handler.model()
|
|
28
74
|
if (!model) {
|
|
29
75
|
return
|
|
30
76
|
}
|
|
@@ -38,33 +84,29 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
38
84
|
// copy base model sources
|
|
39
85
|
await Promise.all(model.$sources.map(src => {
|
|
40
86
|
if (src.includes(FOLDER_NODE_MODULES)) {
|
|
41
|
-
return this.copy(src).to(src.substr(src.indexOf(FOLDER_NODE_MODULES)))
|
|
87
|
+
return this._handler.copy(src).to(path.join(destSdc, src.substr(src.indexOf(FOLDER_NODE_MODULES))))
|
|
42
88
|
} else {
|
|
43
|
-
const relSrc = path.relative(
|
|
89
|
+
const relSrc = path.relative(buildOptions.root, src)
|
|
44
90
|
if (relSrc.startsWith("..")) {
|
|
45
|
-
this.logger.warn(`model file is out of project scope, skipping file ${src}`)
|
|
91
|
+
this._handler.logger.warn(`model file is out of project scope, skipping file ${src}`)
|
|
46
92
|
return Promise.resolve()
|
|
47
93
|
}
|
|
48
|
-
return this.copy(src).to(relSrc)
|
|
94
|
+
return this._handler.copy(src).to(path.join(destSdc, relSrc))
|
|
49
95
|
}
|
|
50
96
|
}))
|
|
51
97
|
|
|
52
98
|
// collect and write language bundles into single i18n.json file
|
|
53
|
-
await this.collectLanguageBundles(model,
|
|
99
|
+
await this._handler.collectLanguageBundles(model, destSdc)
|
|
54
100
|
|
|
55
101
|
// copy native hana content and templates
|
|
56
|
-
await this._copyNativeContent(this.task.src,
|
|
102
|
+
await this._copyNativeContent(this._handler.task.src, destSdc, tenantDbPath)
|
|
57
103
|
}
|
|
58
104
|
|
|
59
105
|
async clean() {
|
|
60
106
|
// staging build content is deleted by BuildTaskEngine
|
|
61
|
-
if (this.buildOptions.root === this.buildOptions.target) {
|
|
62
|
-
//
|
|
63
|
-
|
|
64
|
-
if (path.basename(genDest) === FOLDER_GEN) {
|
|
65
|
-
this.logger._debug && this.logger.debug(`Deleting build target folder ${genDest}`)
|
|
66
|
-
await fs.remove(genDest)
|
|
67
|
-
}
|
|
107
|
+
if (this._handler.buildOptions.root === this._handler.buildOptions.target) {
|
|
108
|
+
// remove 'gen' folder
|
|
109
|
+
return fs.promises.rm(path.join(this._handler.task.dest, FOLDER_GEN), { force: true, recursive: true })
|
|
68
110
|
}
|
|
69
111
|
}
|
|
70
112
|
|
|
@@ -78,13 +120,13 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
78
120
|
|
|
79
121
|
if (tenantDbPath) {
|
|
80
122
|
// copy any static HANA artifacts, e.g. .csv files
|
|
81
|
-
const dbDest = path.resolve(dest, path.relative(this.buildOptions.root, tenantDbPath))
|
|
123
|
+
const dbDest = path.resolve(dest, path.relative(this._handler.buildOptions.root, tenantDbPath))
|
|
82
124
|
await this._copyNativeHanaContent(tenantDbPath, dbDest)
|
|
83
125
|
}
|
|
84
126
|
}
|
|
85
127
|
|
|
86
128
|
async _copyNativeHanaContent(src, dest) {
|
|
87
|
-
return
|
|
129
|
+
return this._handler.copyNativeContent(src, dest, (entry) => {
|
|
88
130
|
if (fs.statSync(entry).isDirectory()) {
|
|
89
131
|
const folderName = path.basename(entry)
|
|
90
132
|
return folderName !== FOLDER_NODE_MODULES
|
|
@@ -95,7 +137,7 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
95
137
|
}
|
|
96
138
|
|
|
97
139
|
async _copyTemplates(src, dest) {
|
|
98
|
-
return
|
|
140
|
+
return this._handler.copyNativeContent(src, dest, (entry) => {
|
|
99
141
|
if (fs.statSync(entry).isFile()) {
|
|
100
142
|
return /\.cds$/.test(path.basename(entry))
|
|
101
143
|
}
|
|
@@ -113,13 +155,13 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
113
155
|
* @param {Object} model - the reflected csn for this SaaS application
|
|
114
156
|
*/
|
|
115
157
|
_validateExtensionAllowLists(model, tenantDbPath) {
|
|
116
|
-
let entityWhitelist = this.env.get("mtx.entity-whitelist")
|
|
117
|
-
let serviceWhitelist = this.env.get("mtx.service-whitelist")
|
|
118
|
-
let extensionAllowlist = this.env.get("mtx.extension-allowlist")
|
|
158
|
+
let entityWhitelist = this._handler.env.get("mtx.entity-whitelist")
|
|
159
|
+
let serviceWhitelist = this._handler.env.get("mtx.service-whitelist")
|
|
160
|
+
let extensionAllowlist = this._handler.env.get("mtx.extension-allowlist")
|
|
119
161
|
|
|
120
162
|
// for java projects mtx configuration is part of sidecar config
|
|
121
163
|
if (!entityWhitelist && !serviceWhitelist && !extensionAllowlist && tenantDbPath) {
|
|
122
|
-
const dbEnv = this.env.for("cds", tenantDbPath)
|
|
164
|
+
const dbEnv = this._handler.env.for("cds", tenantDbPath)
|
|
123
165
|
if (dbEnv && dbEnv.get("mtx")) {
|
|
124
166
|
entityWhitelist = dbEnv.get("mtx.entity-whitelist")
|
|
125
167
|
serviceWhitelist = dbEnv.get("mtx.service-whitelist")
|
|
@@ -127,52 +169,47 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
127
169
|
}
|
|
128
170
|
}
|
|
129
171
|
|
|
172
|
+
function isValid(e, pattern, nsPattern, kind) {
|
|
173
|
+
return e && e.name && (e.name === pattern || (nsPattern && e.name.startsWith(nsPattern))) && (!kind || e.kind === kind)
|
|
174
|
+
}
|
|
175
|
+
|
|
130
176
|
if (extensionAllowlist || entityWhitelist || serviceWhitelist) {
|
|
131
177
|
const invalidEntries = new Set()
|
|
132
|
-
const reflected = this.cds.reflect(model)
|
|
133
|
-
const services = reflected.services
|
|
134
|
-
const entities = Object.values(reflected.entities)
|
|
178
|
+
const reflected = this._handler.cds.reflect(model)
|
|
135
179
|
|
|
136
180
|
if (Array.isArray(extensionAllowlist)) {
|
|
137
181
|
extensionAllowlist.forEach(allowListEntry => {
|
|
138
182
|
if (Array.isArray(allowListEntry.for)) {
|
|
139
183
|
allowListEntry.for.forEach(pattern => {
|
|
140
184
|
if (pattern !== '*') {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (!services.some(service => service.name === pattern || service.name.startsWith(nsPattern))) {
|
|
144
|
-
invalidEntries.add(pattern)
|
|
145
|
-
}
|
|
146
|
-
} else {
|
|
147
|
-
if (!entities.some(entity => entity.name === pattern || entity.name.startsWith(nsPattern))) {
|
|
148
|
-
invalidEntries.add(pattern)
|
|
149
|
-
}
|
|
185
|
+
if (!reflected.find(e => isValid(e, pattern, pattern + '.', allowListEntry.kind))) {
|
|
186
|
+
invalidEntries.add(pattern)
|
|
150
187
|
}
|
|
151
188
|
}
|
|
152
189
|
})
|
|
153
190
|
}
|
|
154
191
|
})
|
|
155
192
|
if (invalidEntries.size > 0) {
|
|
156
|
-
this.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
|
|
193
|
+
this._handler.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
|
|
157
194
|
}
|
|
158
195
|
} else if (Array.isArray(entityWhitelist) || Array.isArray(serviceWhitelist)) {
|
|
159
196
|
// validate whitelist entries
|
|
160
197
|
if (Array.isArray(entityWhitelist)) {
|
|
161
198
|
entityWhitelist.forEach(name => {
|
|
162
|
-
if (!
|
|
199
|
+
if (!reflected.find(e => isValid(e, name, null, "entity"))) {
|
|
163
200
|
invalidEntries.add(name)
|
|
164
201
|
}
|
|
165
202
|
})
|
|
166
203
|
}
|
|
167
204
|
if (Array.isArray(serviceWhitelist)) {
|
|
168
205
|
serviceWhitelist.forEach(name => {
|
|
169
|
-
if (!
|
|
206
|
+
if (!reflected.find(e => isValid(e, name, null, "service"))) {
|
|
170
207
|
invalidEntries.add(name)
|
|
171
208
|
}
|
|
172
209
|
})
|
|
173
210
|
}
|
|
174
211
|
if (invalidEntries.size > 0) {
|
|
175
|
-
this.pushMessage(`Invalid entries found in 'entity-whitelist' or 'service-whitelist' - [${[...invalidEntries].join(', ')}]`, WARNING) //NOSONAR
|
|
212
|
+
this._handler.pushMessage(`Invalid entries found in 'entity-whitelist' or 'service-whitelist' - [${[...invalidEntries].join(', ')}]`, WARNING) //NOSONAR
|
|
176
213
|
}
|
|
177
214
|
}
|
|
178
215
|
}
|
|
@@ -185,29 +222,29 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
185
222
|
* @returns {string} the src folder of the tenant db module
|
|
186
223
|
*/
|
|
187
224
|
async _getHanaTenantDbPath() {
|
|
188
|
-
let tasks = this.buildOptions.tasks || []
|
|
189
|
-
const modelPaths = this.resolveModel()
|
|
225
|
+
let tasks = this._handler.buildOptions.tasks || []
|
|
226
|
+
const modelPaths = this._handler.resolveModel()
|
|
190
227
|
|
|
191
228
|
// ensure that the hana task is contained even if this mtx task has been executed solely using "cds build --for mtx"
|
|
192
229
|
if (!tasks.find(task => task.for === BUILD_TASK_HANA)) {
|
|
193
230
|
//mtx task might have been executed as separate task
|
|
194
|
-
tasks = this.env.get("build.tasks") || []
|
|
231
|
+
tasks = this._handler.env.get("build.tasks") || []
|
|
195
232
|
if (tasks.length === 0) {
|
|
196
|
-
const provider = new BuildTaskProviderInternal(this.cds, this.logger)
|
|
197
|
-
|
|
233
|
+
const provider = new BuildTaskProviderInternal(this._handler.cds, this._handler.logger)
|
|
234
|
+
await provider.lookupTasks(tasks, this._handler.buildOptions)
|
|
198
235
|
}
|
|
199
236
|
}
|
|
200
237
|
// the SaaS app might use a tenant aware db as well as a shared db deployed using static hdi-deployer
|
|
201
238
|
// pick the hana build task refering to the tenant aware db - the src path has to be contained in this build task's model options
|
|
202
|
-
const hanaDbPaths = tasks.filter(task => task.for === BUILD_TASK_HANA).map(hanaTask => path.resolve(this.buildOptions.root, hanaTask.src || this.env.folders.db))
|
|
239
|
+
const hanaDbPaths = tasks.filter(task => task.for === BUILD_TASK_HANA).map(hanaTask => path.resolve(this._handler.buildOptions.root, hanaTask.src || this._handler.env.folders.db))
|
|
203
240
|
let tenantDbPath = hanaDbPaths.find(hanaDbPath => hanaDbPaths.length === 1 || modelPaths.some(modelPath => path.dirname(modelPath) === hanaDbPath))
|
|
204
241
|
|
|
205
242
|
if (!tenantDbPath) {
|
|
206
|
-
tenantDbPath = path.join(this.buildOptions.root, this.env.folders.db)
|
|
243
|
+
tenantDbPath = path.join(this._handler.buildOptions.root, this._handler.env.folders.db)
|
|
207
244
|
if (hanaDbPaths.length === 0) {
|
|
208
|
-
this.pushMessage(`no 'hana' build task found, use default location '${tenantDbPath}'`, WARNING)
|
|
245
|
+
this._handler.pushMessage(`no 'hana' build task found, use default location '${tenantDbPath}'`, WARNING)
|
|
209
246
|
} else {
|
|
210
|
-
this.pushMessage(`no 'hana' build task found matching model scope '${this.task.options.model}', use default location '${tenantDbPath}'`, WARNING)
|
|
247
|
+
this._handler.pushMessage(`no 'hana' build task found matching model scope '${this._handler.task.options.model}', use default location '${tenantDbPath}'`, WARNING)
|
|
211
248
|
}
|
|
212
249
|
}
|
|
213
250
|
return tenantDbPath
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
|
|
4
|
+
|
|
5
|
+
const { BUILD_TASK_HANA } = require('../../constants')
|
|
6
|
+
const { WARNING, INFO } = require('../../buildTaskHandler')
|
|
7
|
+
const TAR_NAME = 'resources.tgz'
|
|
8
|
+
|
|
9
|
+
class ResourcesTarBuilder {
|
|
10
|
+
constructor(handler) {
|
|
11
|
+
this._handler = handler
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async packTar(model) {
|
|
15
|
+
let resourceRoot = await this._getHanaTenantDbDest()
|
|
16
|
+
let files
|
|
17
|
+
if (resourceRoot) {
|
|
18
|
+
const hanaSrcFolder = path.join(resourceRoot, 'src')
|
|
19
|
+
const undeployJson = path.join(resourceRoot, 'undeploy.json')
|
|
20
|
+
|
|
21
|
+
// hana build task has already been executed
|
|
22
|
+
files = BuildTaskHandlerInternal._find(resourceRoot, (res) => {
|
|
23
|
+
if (res === undeployJson) {
|
|
24
|
+
return true
|
|
25
|
+
}
|
|
26
|
+
if (res.startsWith(hanaSrcFolder)) {
|
|
27
|
+
return true
|
|
28
|
+
}
|
|
29
|
+
return false
|
|
30
|
+
})
|
|
31
|
+
} else {
|
|
32
|
+
resourceRoot = path.join(this._handler.buildOptions.root, this._handler.env.folders.db)
|
|
33
|
+
const deploy = require('../../../../lib/deploy')
|
|
34
|
+
files = Object.keys(await deploy.resources(model))
|
|
35
|
+
}
|
|
36
|
+
if (files.length > 0) {
|
|
37
|
+
const { packTarArchive } = require('../../../../lib/utils/resources')
|
|
38
|
+
return packTarArchive(files, resourceRoot, false)
|
|
39
|
+
} else {
|
|
40
|
+
this._handler.pushMessage("No deployment resources found - skip resource.tgz", WARNING)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
async writeTar(dest, model) {
|
|
45
|
+
const buffer = await this.packTar(model)
|
|
46
|
+
if (buffer) {
|
|
47
|
+
await this._handler.write(buffer).to(path.join(dest, TAR_NAME))
|
|
48
|
+
}
|
|
49
|
+
await fs.promises.mkdir(dest, { recursive: true })
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Returns the build tasks of this project - either user defined or calculated by BuildTaskFactory.
|
|
54
|
+
* A build task of type 'hana' is enforced in order to copy existing native hana artifacts later on.
|
|
55
|
+
*
|
|
56
|
+
* @returns {string} the src folder of the tenant db module
|
|
57
|
+
*/
|
|
58
|
+
async _getHanaTenantDbDest() {
|
|
59
|
+
const buildOptions = this._handler.buildOptions
|
|
60
|
+
let hanaTask = buildOptions.tasks ? buildOptions.tasks.find(task => task.for === BUILD_TASK_HANA) : undefined
|
|
61
|
+
if (!hanaTask) {
|
|
62
|
+
this._handler.pushMessage(`Found SQLite database configuration. Ensure that productive cloud deployments requiring SAP HANA database are built with 'production' profile.`, INFO)
|
|
63
|
+
return null
|
|
64
|
+
}
|
|
65
|
+
return hanaTask.dest
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
module.exports = ResourcesTarBuilder
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/* eslint-disable no-empty */
|
|
2
|
+
const path = require('path')
|
|
3
|
+
const { FOLDER_GEN } = require('../../constants')
|
|
4
|
+
const BuildTaskHandlerInternal = require('../buildTaskHandlerInternal')
|
|
5
|
+
const NodeCfModuleBuilder = require('../nodejs')
|
|
6
|
+
const ResourcesTarProvider = require('../mtx/resourcesTarBuilder')
|
|
7
|
+
const { INFO } = require('../buildTaskHandlerInternal')
|
|
8
|
+
|
|
9
|
+
const DEFAULT_MAIN_FOLDER = "_main"
|
|
10
|
+
|
|
11
|
+
class MtxSidecarModuleBuilder extends NodeCfModuleBuilder {
|
|
12
|
+
get priority() {
|
|
13
|
+
// should be scheduled after 'hana' build tasks are finished
|
|
14
|
+
return BuildTaskHandlerInternal.PRIORITY_MIN_VALUE
|
|
15
|
+
}
|
|
16
|
+
init() {
|
|
17
|
+
super.init()
|
|
18
|
+
if (this.buildOptions.root === this.buildOptions.target) {
|
|
19
|
+
this.task.dest = path.join(this.task.dest, FOLDER_GEN)
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async build() {
|
|
24
|
+
// Sidecar scenario: model-provider is implemented as separate Nodejs app.
|
|
25
|
+
// Create resources TAR AND and compiled CSN(s) for the sidecar app.
|
|
26
|
+
// build.target=".": 'dest' -> 'model-provider/gen'
|
|
27
|
+
// build.target="gen": 'dest' -> 'gen/model-provider'
|
|
28
|
+
const sidecarEnv = this.env.for("cds", this.task.src)
|
|
29
|
+
|
|
30
|
+
// 1. build node application
|
|
31
|
+
await this._buildNodeApp(sidecarEnv)
|
|
32
|
+
|
|
33
|
+
// 2. build main application
|
|
34
|
+
await this._buildMainApp(sidecarEnv)
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async _buildNodeApp(sidecarEnv) {
|
|
38
|
+
const sources = []
|
|
39
|
+
for (const name in sidecarEnv.requires) {
|
|
40
|
+
const service = sidecarEnv.requires[name]
|
|
41
|
+
if (service.model) {
|
|
42
|
+
sources.push(service.model)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const model = await this.cds.load(sources, this.options)
|
|
46
|
+
const destSidecar = this.task.dest
|
|
47
|
+
const destSidecarSrc = path.join(destSidecar, this.env.folders.srv)
|
|
48
|
+
|
|
49
|
+
await this.compileToJson(model, destSidecarSrc)
|
|
50
|
+
await this.collectLanguageBundles(model, destSidecarSrc)
|
|
51
|
+
await this._copyProjectRootContent(this.task.src, destSidecar)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async _buildMainApp(sidecarEnv) {
|
|
55
|
+
let main = sidecarEnv.requires['cds.xt.ModelProviderService']?.root
|
|
56
|
+
if (!main) {
|
|
57
|
+
throw new Error("Invalid sidecar configuration - model-provider.root configuration missing")
|
|
58
|
+
}
|
|
59
|
+
const profiles = this.env.get("profiles") || []
|
|
60
|
+
if (!profiles.includes("production") && !profiles.includes("prod")) {
|
|
61
|
+
main = DEFAULT_MAIN_FOLDER
|
|
62
|
+
// root should represent the production use case and not development
|
|
63
|
+
this.pushMessage(`Sidecar main application build results are created in folder '${main}'. Use the 'production' profile if the folder is configured differently.`, INFO)
|
|
64
|
+
}
|
|
65
|
+
const destRoot = this.task.dest
|
|
66
|
+
const destMain = path.join(destRoot, main)
|
|
67
|
+
const destMainSrv = path.join(destMain, this.env.folders.srv)
|
|
68
|
+
const csn = await this.model()
|
|
69
|
+
if (!csn) {
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
const { dictionary, sources } = await this.compileAll(csn, destMainSrv, destMain)
|
|
73
|
+
await this.collectAllLanguageBundles(dictionary, sources, destMainSrv, destMain)
|
|
74
|
+
|
|
75
|
+
// create resources TAR
|
|
76
|
+
// resources are determined based on available database build task, SQLite as fallback
|
|
77
|
+
await new ResourcesTarProvider(this).writeTar(destMain, csn)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
module.exports = MtxSidecarModuleBuilder
|