@sap/cds 5.9.8 → 6.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +277 -20
- package/apis/services.d.ts +1 -1
- package/app/fiori/preview.js +2 -6
- package/app/index.js +3 -3
- package/bin/build/buildTaskEngine.js +17 -15
- package/bin/build/buildTaskFactory.js +29 -19
- package/bin/build/buildTaskHandler.js +27 -11
- package/bin/build/buildTaskProvider.js +2 -4
- package/bin/build/buildTaskProviderFactory.js +11 -16
- package/bin/build/constants.js +14 -6
- package/bin/build/csv-reader.js +2 -1
- package/bin/build/index.js +12 -18
- package/bin/build/provider/buildTaskHandlerEdmx.js +3 -39
- package/bin/build/provider/buildTaskHandlerFeatureToggles.js +149 -0
- package/bin/build/provider/buildTaskHandlerInternal.js +2 -3
- package/bin/build/provider/buildTaskProviderInternal.js +108 -239
- package/bin/build/provider/fiori/index.js +2 -2
- package/bin/build/provider/hana/2migration.js +11 -11
- package/bin/build/provider/hana/2tabledata.js +3 -3
- package/bin/build/provider/hana/index.js +89 -99
- package/bin/build/provider/hana/migrationtable.js +4 -3
- package/bin/build/provider/java/index.js +101 -0
- package/bin/build/provider/java-cf/index.js +1 -101
- package/bin/build/provider/mtx/index.js +83 -41
- package/bin/build/provider/mtx/resourcesTarBuilder.js +68 -0
- package/bin/build/provider/mtx-sidecar/index.js +110 -0
- package/bin/build/provider/node-cf/index.js +1 -308
- package/bin/build/provider/nodejs/index.js +189 -0
- package/bin/build/util.js +21 -31
- package/bin/cds.js +5 -3
- package/bin/deploy/to-hana/cfUtil.js +31 -6
- package/bin/deploy/to-hana/gitUtil.js +5 -3
- package/bin/deploy/to-hana/hana.js +15 -13
- package/bin/{build → deploy/to-hana}/mtaUtil.js +10 -9
- package/bin/mtx/in-cds.js +19 -7
- package/bin/serve.js +49 -22
- package/bin/utils/log.js +13 -30
- package/bin/version.js +4 -3
- package/common.cds +61 -16
- package/lib/compile/cdsc.js +3 -2
- package/lib/compile/etc/_localized.js +15 -14
- package/lib/compile/for/drafts.js +3 -4
- package/lib/compile/for/java.js +13 -10
- package/lib/compile/for/nodejs.js +8 -8
- package/lib/compile/for/odata.js +7 -12
- package/lib/compile/for/sql.js +5 -6
- package/lib/compile/index.js +5 -4
- package/lib/compile/load.js +9 -11
- package/lib/compile/minify.js +8 -5
- package/lib/compile/parse.js +4 -2
- package/lib/compile/resolve.js +18 -15
- package/lib/compile/to/edm.js +0 -1
- package/lib/compile/to/gql.js +3 -2
- package/lib/compile/to/json.js +24 -17
- package/lib/connect/bindings.js +3 -2
- package/lib/connect/index.js +5 -5
- package/lib/core/classes.js +74 -2
- package/lib/core/entities.js +52 -3
- package/lib/core/reflect.js +2 -1
- package/lib/deploy.js +10 -8
- package/lib/env/defaults.js +4 -3
- package/lib/env/index.js +71 -31
- package/lib/env/presets.js +1 -14
- package/lib/env/requires.js +71 -20
- package/lib/env/serviceBindings.js +147 -0
- package/lib/i18n/localize.js +22 -23
- package/lib/index.js +148 -144
- package/lib/log/errors.js +55 -12
- package/lib/log/format/kibana.js +1 -1
- package/lib/log/index.js +4 -0
- package/lib/ql/SELECT.js +7 -2
- package/lib/ql/Whereable.js +8 -2
- package/lib/ql/index.js +2 -2
- package/lib/req/assert.js +71 -0
- package/lib/req/cds-context.js +38 -70
- package/lib/req/context.js +34 -21
- package/lib/req/request.js +12 -18
- package/lib/req/response.js +6 -2
- package/lib/req/user.js +30 -22
- package/lib/serve/Service-api.js +17 -12
- package/lib/serve/Service-dispatch.js +5 -9
- package/lib/serve/Service-methods.js +4 -3
- package/lib/serve/Transaction.js +24 -21
- package/lib/serve/adapters.js +15 -5
- package/lib/serve/factory.js +22 -20
- package/lib/serve/index.js +51 -54
- package/lib/utils/axios.js +8 -12
- package/lib/utils/index.js +13 -4
- package/lib/utils/resources/index.js +1 -44
- package/lib/utils/resources/tar.js +2 -1
- package/lib/utils/tests.js +13 -15
- package/libx/_runtime/.eslintrc +1 -1
- package/libx/_runtime/audit/Service.js +6 -4
- package/libx/_runtime/audit/generic/personal/access.js +19 -43
- package/libx/_runtime/audit/generic/personal/index.js +40 -34
- package/libx/_runtime/audit/generic/personal/modification.js +11 -9
- package/libx/_runtime/audit/generic/personal/utils.js +13 -6
- package/libx/_runtime/audit/utils/v2.js +6 -3
- package/libx/_runtime/auth/index.js +71 -66
- package/libx/_runtime/auth/strategies/JWT.js +3 -2
- package/libx/_runtime/auth/strategies/mock.js +54 -53
- package/libx/_runtime/auth/strategies/xssecUtils.js +3 -4
- package/libx/_runtime/auth/strategies/xsuaa.js +3 -2
- package/libx/_runtime/auth/utils.js +2 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/Dispatcher.js +127 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/OData.js +9 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/ODataRequest.js +93 -73
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/action.js +25 -45
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/create.js +10 -14
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/error.js +9 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/metadata.js +4 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/read.js +60 -53
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/request.js +2 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/handlers/update.js +21 -26
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/ExpressionToCQN.js +8 -15
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/expandToCQN.js +29 -41
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/index.js +1 -4
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/readToCQN.js +13 -13
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/selectToCQN.js +0 -7
- package/libx/_runtime/cds-services/adapter/odata-v4/odata-to-cqn/utils.js +24 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/edm/EdmEntityContainer.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/uri/UriHelper.js +4 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/PrimitiveValueDecoder.js +4 -5
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/utils/ValueConverter.js +4 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-commons/validator/ValueValidator.js +5 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/core/ResponseHeaderSetter.js +2 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/DebugSerializingCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/PresetResponseHeadersCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SerializingCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/invocation/SetResponseHeadersCommand.js +1 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ContextURLFactory.js +3 -2
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/ErrorJsonSerializer.js +3 -1
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/SerializerFactory.js +1 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/okra/odata-server/serializer/TrustedResourceJsonSerializer.js +3 -3
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/data.js +36 -25
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/handlerUtils.js +97 -92
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/metaInfo.js +382 -0
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/oDataConfiguration.js +1 -4
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/omitValues.js +5 -6
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/readAfterWrite.js +82 -21
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/request.js +3 -11
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/result.js +91 -69
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/stream.js +27 -6
- package/libx/_runtime/cds-services/adapter/rest/utils/validation-checks.js +7 -17
- package/libx/_runtime/cds-services/services/Service.js +17 -76
- package/libx/_runtime/cds-services/services/utils/columns.js +6 -4
- package/libx/_runtime/cds-services/services/utils/compareJson.js +1 -53
- package/libx/_runtime/cds-services/services/utils/differ.js +15 -19
- package/libx/_runtime/cds-services/util/assert.js +107 -34
- package/libx/_runtime/cds.js +1 -31
- package/libx/_runtime/common/aspects/Association.js +40 -54
- package/libx/_runtime/common/aspects/any.js +61 -6
- package/libx/_runtime/common/aspects/entity.js +19 -79
- package/libx/_runtime/common/composition/data.js +2 -2
- package/libx/_runtime/common/composition/delete.js +8 -7
- package/libx/_runtime/common/composition/tree.js +10 -10
- package/libx/_runtime/common/composition/update.js +3 -2
- package/libx/_runtime/common/constants/events.js +13 -0
- package/libx/_runtime/common/error/entry.js +9 -3
- package/libx/_runtime/common/error/frontend.js +13 -19
- package/libx/_runtime/common/error/index.js +8 -3
- package/libx/_runtime/common/generic/auth/capabilities.js +2 -1
- package/libx/_runtime/common/generic/auth/constants.js +1 -4
- package/libx/_runtime/common/generic/auth/requires.js +1 -1
- package/libx/_runtime/common/generic/auth/restrict.js +12 -28
- package/libx/_runtime/common/generic/auth/restrictions.js +12 -4
- package/libx/_runtime/common/generic/auth/utils.js +2 -1
- package/libx/_runtime/common/generic/crud.js +9 -60
- package/libx/_runtime/common/generic/etag.js +41 -7
- package/libx/_runtime/common/generic/input.js +128 -66
- package/libx/_runtime/common/generic/paging.js +9 -3
- package/libx/_runtime/common/generic/put.js +2 -2
- package/libx/_runtime/common/generic/sorting.js +7 -3
- package/libx/_runtime/common/generic/temporal.js +0 -5
- package/libx/_runtime/common/i18n/messages.properties +2 -1
- package/libx/_runtime/common/utils/binary.js +69 -0
- package/libx/_runtime/common/utils/cqn.js +39 -14
- package/libx/_runtime/common/utils/cqn2cqn4sql.js +93 -59
- package/libx/_runtime/common/utils/csn.js +87 -85
- package/libx/_runtime/common/utils/dollar.js +8 -7
- package/libx/_runtime/common/utils/draft.js +1 -1
- package/libx/_runtime/common/utils/foreignKeyPropagations.js +23 -7
- package/libx/_runtime/common/utils/generateOnCond.js +2 -1
- package/libx/_runtime/common/utils/keys.js +30 -13
- package/libx/_runtime/common/utils/postProcessing.js +6 -1
- package/libx/_runtime/common/utils/quotingStyles.js +0 -23
- package/libx/_runtime/common/utils/resolveStructured.js +23 -26
- package/libx/_runtime/common/utils/resolveView.js +4 -1
- package/libx/_runtime/common/utils/rewriteAsterisks.js +3 -0
- package/libx/_runtime/common/utils/search2cqn4sql.js +4 -13
- package/libx/_runtime/common/utils/searchToLike.js +9 -13
- package/libx/_runtime/common/utils/streamProp.js +35 -0
- package/libx/_runtime/common/utils/structured.js +12 -18
- package/libx/_runtime/common/utils/template.js +3 -5
- package/libx/_runtime/common/utils/templateProcessor.js +22 -14
- package/libx/_runtime/common/utils/unionCqnTemplate.js +4 -14
- package/libx/_runtime/db/Service.js +2 -1
- package/libx/_runtime/db/expand/expand-v2.js +2 -2
- package/libx/_runtime/db/expand/expandCQNToJoin.js +7 -6
- package/libx/_runtime/db/generic/input.js +14 -17
- package/libx/_runtime/db/generic/integrity.js +1 -2
- package/libx/_runtime/db/generic/update.js +14 -1
- package/libx/_runtime/db/query/read.js +0 -1
- package/libx/_runtime/db/query/update.js +1 -1
- package/libx/_runtime/db/sql-builder/BaseBuilder.js +1 -1
- package/libx/_runtime/db/sql-builder/ExpressionBuilder.js +5 -31
- package/libx/_runtime/db/sql-builder/InsertBuilder.js +1 -1
- package/libx/_runtime/db/sql-builder/ReferenceBuilder.js +0 -9
- package/libx/_runtime/db/sql-builder/SelectBuilder.js +11 -10
- package/libx/_runtime/db/sql-builder/UpdateBuilder.js +2 -2
- package/libx/_runtime/db/sql-builder/annotations.js +1 -2
- package/libx/_runtime/db/utils/coloredTxCommands.js +5 -0
- package/libx/_runtime/db/utils/columns.js +1 -1
- package/libx/_runtime/db/utils/propagateForeignKeys.js +10 -2
- package/libx/_runtime/extensibility/activate.js +69 -0
- package/libx/_runtime/extensibility/add.js +41 -0
- package/libx/_runtime/extensibility/addExtension.js +68 -0
- package/libx/_runtime/extensibility/defaults.js +39 -0
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformREAD.js +0 -0
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformRESULT.js +2 -2
- package/libx/_runtime/extensibility/{uiflex/handler → handler}/transformWRITE.js +2 -2
- package/libx/_runtime/extensibility/push.js +61 -0
- package/libx/_runtime/extensibility/service.js +21 -0
- package/libx/_runtime/extensibility/{uiflex/utils.js → utils.js} +39 -3
- package/libx/_runtime/extensibility/validation.js +53 -0
- package/libx/_runtime/extensibility/views.js +12 -0
- package/libx/_runtime/fiori/generic/activate.js +2 -4
- package/libx/_runtime/fiori/generic/before.js +17 -29
- package/libx/_runtime/fiori/generic/cancel.js +2 -4
- package/libx/_runtime/fiori/generic/delete.js +2 -4
- package/libx/_runtime/fiori/generic/edit.js +4 -16
- package/libx/_runtime/fiori/generic/index.js +31 -0
- package/libx/_runtime/fiori/generic/new.js +5 -21
- package/libx/_runtime/fiori/generic/patch.js +10 -15
- package/libx/_runtime/fiori/generic/prepare.js +13 -22
- package/libx/_runtime/fiori/generic/read.js +148 -163
- package/libx/_runtime/fiori/generic/readOverDraft.js +10 -4
- package/libx/_runtime/fiori/utils/handler.js +10 -22
- package/libx/_runtime/fiori/utils/where.js +1 -4
- package/libx/_runtime/hana/Service.js +14 -7
- package/libx/_runtime/hana/customBuilder/CustomSelectBuilder.js +1 -1
- package/libx/_runtime/hana/dynatrace.js +2 -2
- package/libx/_runtime/hana/localized.js +7 -6
- package/libx/_runtime/hana/pool.js +9 -6
- package/libx/_runtime/hana/search.js +2 -3
- package/libx/_runtime/hana/{searchToContains.js → search2Contains.js} +5 -2
- package/libx/_runtime/hana/search2cqn4sql.js +20 -17
- package/libx/_runtime/index.js +2 -6
- package/libx/_runtime/messaging/AMQPWebhookMessaging.js +30 -22
- package/libx/_runtime/messaging/common-utils/AMQPClient.js +4 -3
- package/libx/_runtime/messaging/common-utils/appId.js +9 -0
- package/libx/_runtime/messaging/common-utils/authorizedRequest.js +2 -18
- package/libx/_runtime/messaging/common-utils/connections.js +1 -1
- package/libx/_runtime/messaging/enterprise-messaging-shared.js +2 -2
- package/libx/_runtime/messaging/enterprise-messaging-utils/EMManagement.js +305 -231
- package/libx/_runtime/messaging/enterprise-messaging-utils/cloudEvents.js +2 -2
- package/libx/_runtime/messaging/enterprise-messaging-utils/options-management.js +15 -8
- package/libx/_runtime/messaging/enterprise-messaging-utils/options-messaging.js +57 -14
- package/libx/_runtime/messaging/enterprise-messaging.js +14 -19
- package/libx/_runtime/messaging/file-based.js +3 -1
- package/libx/_runtime/messaging/http-utils/token.js +18 -6
- package/libx/_runtime/messaging/message-queuing-utils/options-management.js +22 -12
- package/libx/_runtime/messaging/message-queuing-utils/options-messaging.js +27 -14
- package/libx/_runtime/messaging/message-queuing.js +138 -85
- package/libx/_runtime/messaging/outbox/utils.js +13 -7
- package/libx/_runtime/messaging/redis-messaging.js +0 -1
- package/libx/_runtime/messaging/service.js +4 -1
- package/libx/_runtime/remote/Service.js +24 -18
- package/libx/_runtime/remote/utils/client.js +90 -48
- package/libx/_runtime/remote/utils/data.js +23 -6
- package/libx/_runtime/sqlite/Service.js +14 -13
- package/libx/_runtime/sqlite/convertAssocToOneManaged.js +2 -0
- package/libx/_runtime/sqlite/customBuilder/CustomSelectBuilder.js +1 -0
- package/libx/_runtime/sqlite/execute.js +3 -9
- package/libx/_runtime/types/api.js +23 -11
- package/libx/common/utils/ucsn.js +15 -9
- package/libx/odata/afterburner.js +109 -29
- package/libx/odata/cqn2odata.js +48 -9
- package/libx/odata/grammar.pegjs +263 -156
- package/libx/odata/index.js +21 -9
- package/libx/odata/parseToCqn.js +8 -5
- package/libx/odata/parser.js +1 -1
- package/libx/odata/utils.js +13 -3
- package/libx/rest/RestAdapter.js +173 -113
- package/libx/rest/RestRequest.js +3 -2
- package/libx/rest/middleware/create.js +8 -6
- package/libx/rest/middleware/delete.js +6 -13
- package/libx/rest/middleware/error.js +1 -1
- package/libx/rest/middleware/input.js +6 -6
- package/libx/rest/middleware/operation.js +8 -3
- package/libx/rest/middleware/parse.js +3 -3
- package/libx/rest/middleware/payload.js +12 -0
- package/libx/rest/middleware/read.js +12 -2
- package/libx/rest/middleware/update.js +3 -3
- package/package.json +4 -6
- package/server.js +3 -44
- package/srv/extensibility-service.cds +56 -0
- package/srv/extensibility-service.js +1 -0
- package/srv/extensions.cds +8 -0
- package/srv/model-provider.cds +59 -0
- package/srv/model-provider.js +163 -0
- package/srv/mtx.cds +2 -0
- package/srv/mtx.js +22 -0
- package/srv/outbox.cds +2 -0
- package/tasks/enterprise-messaging-deploy.js +19 -12
- package/lib/serve/Service-compat.js +0 -36
- package/libx/_runtime/audit/generic/personal/constants.js +0 -4
- package/libx/_runtime/auth/strategies/dwc.js +0 -45
- package/libx/_runtime/cds-services/adapter/odata-v4/utils/dispatcherUtils.js +0 -56
- package/libx/_runtime/cds-services/adapter/rest/Rest.js +0 -183
- package/libx/_runtime/cds-services/adapter/rest/RestRequest.js +0 -67
- package/libx/_runtime/cds-services/adapter/rest/handlers/create.js +0 -82
- package/libx/_runtime/cds-services/adapter/rest/handlers/delete.js +0 -39
- package/libx/_runtime/cds-services/adapter/rest/handlers/operation.js +0 -63
- package/libx/_runtime/cds-services/adapter/rest/handlers/read.js +0 -52
- package/libx/_runtime/cds-services/adapter/rest/handlers/update.js +0 -81
- package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/index.js +0 -56
- package/libx/_runtime/cds-services/adapter/rest/rest-to-cqn/utils.js +0 -33
- package/libx/_runtime/cds-services/adapter/rest/to.js +0 -8
- package/libx/_runtime/cds-services/adapter/rest/utils/binary.js +0 -50
- package/libx/_runtime/cds-services/adapter/rest/utils/data.js +0 -117
- package/libx/_runtime/cds-services/adapter/rest/utils/header-checks.js +0 -14
- package/libx/_runtime/cds-services/adapter/rest/utils/key-value-utils.js +0 -30
- package/libx/_runtime/cds-services/adapter/rest/utils/parse-url.js +0 -250
- package/libx/_runtime/cds-services/adapter/rest/utils/result.js +0 -26
- package/libx/_runtime/cds-services/services/utils/handlerUtils.js +0 -200
- package/libx/_runtime/common/aspects/utils.js +0 -152
- package/libx/_runtime/common/toggles/handler.js +0 -21
- package/libx/_runtime/common/utils/extensibilityUtils.js +0 -18
- package/libx/_runtime/extensibility/mps/index.js +0 -5
- package/libx/_runtime/extensibility/mps/service.js +0 -111
- package/libx/_runtime/extensibility/mps/tar.js +0 -42
- package/libx/_runtime/extensibility/mps/utils.js +0 -11
- package/libx/_runtime/extensibility/uiflex/index.js +0 -54
- package/libx/_runtime/extensibility/uiflex/service.js +0 -276
- package/libx/_runtime/messaging/common-utils/naming-conventions.js +0 -20
- package/libx/_runtime/remote/utils/client-types.d.ts +0 -7
- package/libx/gql/GraphQLAdapter.js +0 -33
- package/libx/gql/constants/adapter.js +0 -69
- package/libx/gql/constants/cds.js +0 -18
- package/libx/gql/constants/graphql.js +0 -33
- package/libx/gql/readme.md +0 -1
- package/libx/gql/resolvers/crud/create.js +0 -20
- package/libx/gql/resolvers/crud/delete.js +0 -29
- package/libx/gql/resolvers/crud/index.js +0 -6
- package/libx/gql/resolvers/crud/read.js +0 -30
- package/libx/gql/resolvers/crud/update.js +0 -42
- package/libx/gql/resolvers/crud/utils/index.js +0 -36
- package/libx/gql/resolvers/field.js +0 -5
- package/libx/gql/resolvers/index.js +0 -7
- package/libx/gql/resolvers/mutation.js +0 -23
- package/libx/gql/resolvers/parse/ast/enrich.js +0 -52
- package/libx/gql/resolvers/parse/ast/fragment.js +0 -11
- package/libx/gql/resolvers/parse/ast/fromObject.js +0 -39
- package/libx/gql/resolvers/parse/ast/index.js +0 -3
- package/libx/gql/resolvers/parse/ast/meta.js +0 -4
- package/libx/gql/resolvers/parse/ast/variable.js +0 -7
- package/libx/gql/resolvers/parse/ast2cqn/columns.js +0 -44
- package/libx/gql/resolvers/parse/ast2cqn/entries.js +0 -31
- package/libx/gql/resolvers/parse/ast2cqn/index.js +0 -8
- package/libx/gql/resolvers/parse/ast2cqn/limit.js +0 -6
- package/libx/gql/resolvers/parse/ast2cqn/orderBy.js +0 -24
- package/libx/gql/resolvers/parse/ast2cqn/utils/index.js +0 -3
- package/libx/gql/resolvers/parse/ast2cqn/where.js +0 -70
- package/libx/gql/resolvers/parse/utils/index.js +0 -8
- package/libx/gql/resolvers/query.js +0 -13
- package/libx/gql/resolvers/root.js +0 -34
- package/libx/gql/schema/generate.js +0 -18
- package/libx/gql/schema/index.js +0 -5
- package/libx/gql/schema/mutation.js +0 -76
- package/libx/gql/schema/query.js +0 -108
- package/libx/gql/schema/typeDefMap.js +0 -45
- package/libx/gql/schema/utils/index.js +0 -54
- package/libx/gql/utils/index.js +0 -12
- package/libx/rest/middleware/auth.js +0 -20
- package/libx/rest/middleware/content.js +0 -19
- package/srv/flex.cds +0 -21
- package/srv/flex.js +0 -1
- package/srv/mps.cds +0 -23
- package/srv/mps.js +0 -1
- package/srv/outbox.js +0 -0
|
@@ -1,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")
|
|
@@ -130,10 +172,10 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
130
172
|
function isValid(e, pattern, nsPattern, kind) {
|
|
131
173
|
return e && e.name && (e.name === pattern || (nsPattern && e.name.startsWith(nsPattern))) && (!kind || e.kind === kind)
|
|
132
174
|
}
|
|
133
|
-
|
|
175
|
+
|
|
134
176
|
if (extensionAllowlist || entityWhitelist || serviceWhitelist) {
|
|
135
177
|
const invalidEntries = new Set()
|
|
136
|
-
const reflected = this.cds.reflect(model)
|
|
178
|
+
const reflected = this._handler.cds.reflect(model)
|
|
137
179
|
|
|
138
180
|
if (Array.isArray(extensionAllowlist)) {
|
|
139
181
|
extensionAllowlist.forEach(allowListEntry => {
|
|
@@ -148,7 +190,7 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
148
190
|
}
|
|
149
191
|
})
|
|
150
192
|
if (invalidEntries.size > 0) {
|
|
151
|
-
this.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
|
|
193
|
+
this._handler.pushMessage(`Invalid entries found in 'extension-allowlist' - [${[...invalidEntries].join(', ')}]`, WARNING)
|
|
152
194
|
}
|
|
153
195
|
} else if (Array.isArray(entityWhitelist) || Array.isArray(serviceWhitelist)) {
|
|
154
196
|
// validate whitelist entries
|
|
@@ -167,7 +209,7 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
167
209
|
})
|
|
168
210
|
}
|
|
169
211
|
if (invalidEntries.size > 0) {
|
|
170
|
-
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
|
|
171
213
|
}
|
|
172
214
|
}
|
|
173
215
|
}
|
|
@@ -180,29 +222,29 @@ class MtxModuleBuilder extends BuildTaskHandlerEdmx {
|
|
|
180
222
|
* @returns {string} the src folder of the tenant db module
|
|
181
223
|
*/
|
|
182
224
|
async _getHanaTenantDbPath() {
|
|
183
|
-
let tasks = this.buildOptions.tasks || []
|
|
184
|
-
const modelPaths = this.resolveModel()
|
|
225
|
+
let tasks = this._handler.buildOptions.tasks || []
|
|
226
|
+
const modelPaths = this._handler.resolveModel()
|
|
185
227
|
|
|
186
228
|
// ensure that the hana task is contained even if this mtx task has been executed solely using "cds build --for mtx"
|
|
187
229
|
if (!tasks.find(task => task.for === BUILD_TASK_HANA)) {
|
|
188
230
|
//mtx task might have been executed as separate task
|
|
189
|
-
tasks = this.env.get("build.tasks") || []
|
|
231
|
+
tasks = this._handler.env.get("build.tasks") || []
|
|
190
232
|
if (tasks.length === 0) {
|
|
191
|
-
const provider = new BuildTaskProviderInternal(this.cds, this.logger)
|
|
192
|
-
|
|
233
|
+
const provider = new BuildTaskProviderInternal(this._handler.cds, this._handler.logger)
|
|
234
|
+
await provider.lookupTasks(tasks, this._handler.buildOptions)
|
|
193
235
|
}
|
|
194
236
|
}
|
|
195
237
|
// the SaaS app might use a tenant aware db as well as a shared db deployed using static hdi-deployer
|
|
196
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
|
|
197
|
-
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))
|
|
198
240
|
let tenantDbPath = hanaDbPaths.find(hanaDbPath => hanaDbPaths.length === 1 || modelPaths.some(modelPath => path.dirname(modelPath) === hanaDbPath))
|
|
199
241
|
|
|
200
242
|
if (!tenantDbPath) {
|
|
201
|
-
tenantDbPath = path.join(this.buildOptions.root, this.env.folders.db)
|
|
243
|
+
tenantDbPath = path.join(this._handler.buildOptions.root, this._handler.env.folders.db)
|
|
202
244
|
if (hanaDbPaths.length === 0) {
|
|
203
|
-
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)
|
|
204
246
|
} else {
|
|
205
|
-
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)
|
|
206
248
|
}
|
|
207
249
|
}
|
|
208
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,110 @@
|
|
|
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
|
+
const { relativePaths } = require('@sap/cds/bin/build/util')
|
|
9
|
+
|
|
10
|
+
const DEFAULT_MAIN_FOLDER = "_main"
|
|
11
|
+
|
|
12
|
+
class MtxSidecarModuleBuilder extends NodeCfModuleBuilder {
|
|
13
|
+
get priority() {
|
|
14
|
+
// should be scheduled after 'hana' build tasks are finished
|
|
15
|
+
return BuildTaskHandlerInternal.PRIORITY_MIN_VALUE
|
|
16
|
+
}
|
|
17
|
+
init() {
|
|
18
|
+
super.init()
|
|
19
|
+
if (this.buildOptions.root === this.buildOptions.target) {
|
|
20
|
+
this.task.dest = path.join(this.task.dest, FOLDER_GEN)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Builds the mtx sidecar app consisting of:
|
|
26
|
+
* - nodejs app model defined by the required sidecar services
|
|
27
|
+
* - main app model defined by the build task's model options including feature models and resources TAR
|
|
28
|
+
*
|
|
29
|
+
* build.target=".": 'dest' -> 'model-provider/gen'
|
|
30
|
+
* build.target="gen": 'dest' -> 'gen/model-provider'
|
|
31
|
+
*/
|
|
32
|
+
async build() {
|
|
33
|
+
// nodejs app parts have to be built using sidecar env
|
|
34
|
+
const sidecarEnv = this.env.for("cds", this.task.src)
|
|
35
|
+
// build main application
|
|
36
|
+
await this._buildMainApp(sidecarEnv)
|
|
37
|
+
// build node application
|
|
38
|
+
await this._buildNodeApp(sidecarEnv)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Builds the mtx sidecar nodejs app parts.
|
|
43
|
+
* @param {object} sidecarEnv cds env based on the sidecar dir
|
|
44
|
+
*/
|
|
45
|
+
async _buildNodeApp(sidecarEnv) {
|
|
46
|
+
const destSidecar = this.task.dest
|
|
47
|
+
const destSidecarSrc = path.join(destSidecar, this.env.folders.srv)
|
|
48
|
+
const model = this._compileSidecarSync(sidecarEnv)
|
|
49
|
+
await this.compileToJson(model, destSidecarSrc)
|
|
50
|
+
await this.collectLanguageBundles(model, destSidecarSrc)
|
|
51
|
+
await this._copyProjectRootContent(this.task.src, destSidecar)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Builds the main app parts containing base model CSN with feature CSNs and resources TAR.
|
|
56
|
+
* @param {object} sidecarEnv cds env based on the sidecar dir
|
|
57
|
+
*/
|
|
58
|
+
async _buildMainApp(sidecarEnv) {
|
|
59
|
+
let main = sidecarEnv.requires['cds.xt.ModelProviderService']?.root
|
|
60
|
+
if (!main) {
|
|
61
|
+
throw new Error("Invalid sidecar configuration - {\"model-provider\": \"in-sidecar\"} configuration missing")
|
|
62
|
+
}
|
|
63
|
+
const profiles = this.env.get("profiles") || []
|
|
64
|
+
if (!profiles.includes("production") && !profiles.includes("prod")) {
|
|
65
|
+
main = DEFAULT_MAIN_FOLDER
|
|
66
|
+
// root should represent the production use case and not development
|
|
67
|
+
this.pushMessage(`Sidecar main application build results are created in folder '${main}'. Enable the 'production' or 'prod' profile if the folder is configured differently.`, INFO)
|
|
68
|
+
}
|
|
69
|
+
const destRoot = this.task.dest
|
|
70
|
+
const destMain = path.join(destRoot, main)
|
|
71
|
+
const destMainSrv = path.join(destMain, this.env.folders.srv)
|
|
72
|
+
const csn = await this.model()
|
|
73
|
+
if (!csn) {
|
|
74
|
+
return
|
|
75
|
+
}
|
|
76
|
+
const { dictionary, sources } = await this.compileAll(csn, destMainSrv, destMain)
|
|
77
|
+
await this.collectAllLanguageBundles(dictionary, sources, destMainSrv, destMain)
|
|
78
|
+
|
|
79
|
+
// create resources TAR
|
|
80
|
+
// resources are determined based on available database build task, SQLite as fallback
|
|
81
|
+
await new ResourcesTarProvider(this).writeTar(destMain, csn)
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Synchronous compilation using the sidecar context.
|
|
86
|
+
* @param {object} sidecarEnv cds env based on the sidecar dir
|
|
87
|
+
* @returns the compiled mtx sidecar CSN
|
|
88
|
+
*/
|
|
89
|
+
_compileSidecarSync(sidecarEnv) {
|
|
90
|
+
const env = this.env
|
|
91
|
+
try {
|
|
92
|
+
this.cds.root = this.task.src
|
|
93
|
+
this.cds.env = sidecarEnv
|
|
94
|
+
let modelPaths = this.cds.resolve('*', false)
|
|
95
|
+
modelPaths = this.cds.resolve(modelPaths)
|
|
96
|
+
if (!modelPaths || modelPaths.length === 0) {
|
|
97
|
+
throw new Error("No model found for MTX sidecar app")
|
|
98
|
+
}
|
|
99
|
+
this._logger._debug && this._logger.debug(`sidecar model: ${relativePaths(this.buildOptions.root, modelPaths).join(", ")}`)
|
|
100
|
+
|
|
101
|
+
// synchronous compilation
|
|
102
|
+
return this.cds.load(modelPaths, { sync: true, ...this.options() })
|
|
103
|
+
} finally {
|
|
104
|
+
// restore project scope
|
|
105
|
+
this.cds.root = this.buildOptions.root
|
|
106
|
+
this.cds.env = env
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
module.exports = MtxSidecarModuleBuilder
|