@sap/cds 5.9.7 → 6.0.2
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 +267 -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 +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 +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 +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 +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 +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,70 +0,0 @@
|
|
|
1
|
-
const { STRING_MATCH_OPERATOR } = require('../../../constants/adapter')
|
|
2
|
-
const { GQL_TO_CDS_QL_OPERATOR, GQL_TO_CDS_STRING_MATCH_OPERATOR } = require('../../../constants/cds')
|
|
3
|
-
const { isListValue, isObjectValue } = require('../utils')
|
|
4
|
-
|
|
5
|
-
const stringMatchOperatorToLikeString = (operator, string) => {
|
|
6
|
-
switch (operator) {
|
|
7
|
-
case STRING_MATCH_OPERATOR.STARTSWITH:
|
|
8
|
-
return `${string}%`
|
|
9
|
-
case STRING_MATCH_OPERATOR.ENDSWITH:
|
|
10
|
-
return `%${string}`
|
|
11
|
-
case STRING_MATCH_OPERATOR.CONTAINS:
|
|
12
|
-
return `%${string}%`
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const arrayInsertBetweenFlat = (array, element) => {
|
|
17
|
-
return [...array].flatMap((e, index) => (index < array.length - 1 ? [e, element] : [e])).flat()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const joinedXprFrom_xprs = (_xprs, operator) => {
|
|
21
|
-
return { xpr: arrayInsertBetweenFlat(_xprs, operator) }
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const gqlOperatorToCdsOperator = gqlOperator =>
|
|
25
|
-
GQL_TO_CDS_QL_OPERATOR[gqlOperator] || GQL_TO_CDS_STRING_MATCH_OPERATOR[gqlOperator]
|
|
26
|
-
|
|
27
|
-
const gqlValueToCdsValue = (cdsOperator, gqlOperator, gqlValue) =>
|
|
28
|
-
cdsOperator === 'like' ? stringMatchOperatorToLikeString(gqlOperator, gqlValue) : gqlValue
|
|
29
|
-
|
|
30
|
-
const objectFieldTo_xpr = (objectField, columnName) => {
|
|
31
|
-
const gqlOperator = objectField.name.value
|
|
32
|
-
const cdsOperator = gqlOperatorToCdsOperator(gqlOperator)
|
|
33
|
-
const gqlValue = objectField.value.value
|
|
34
|
-
const cdsValue = gqlValueToCdsValue(cdsOperator, gqlOperator, gqlValue)
|
|
35
|
-
|
|
36
|
-
return [{ ref: [columnName] }, cdsOperator, { val: cdsValue }]
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const parseObjectField = (objectField, columnName) => {
|
|
40
|
-
const value = objectField.value
|
|
41
|
-
const name = objectField.name.value
|
|
42
|
-
if (isListValue(value)) {
|
|
43
|
-
return parseListValue(value, name)
|
|
44
|
-
} else if (isObjectValue(value)) {
|
|
45
|
-
return parseObjectValue(value, name)
|
|
46
|
-
} else {
|
|
47
|
-
return objectFieldTo_xpr(objectField, columnName)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const parseObjectValue = (objectValue, columnName) => {
|
|
52
|
-
const _xprs = objectValue.fields.map(field => parseObjectField(field, columnName))
|
|
53
|
-
return _xprs.length === 1 ? _xprs[0] : joinedXprFrom_xprs(_xprs, 'and')
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
const parseListValue = (listValue, columnName) => {
|
|
57
|
-
const _xprs = listValue.values.map(value => parseObjectValue(value, columnName))
|
|
58
|
-
return _xprs.length === 1 ? _xprs[0] : joinedXprFrom_xprs(_xprs, 'or')
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const astToWhere = filterArg => {
|
|
62
|
-
const value = filterArg.value
|
|
63
|
-
if (isListValue(value)) {
|
|
64
|
-
return parseListValue(value)
|
|
65
|
-
} else if (isObjectValue(value)) {
|
|
66
|
-
return parseObjectValue(value)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
module.exports = astToWhere
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const { AST_NODE_KIND } = require('../../../constants/graphql')
|
|
2
|
-
|
|
3
|
-
const isFragmentSpread = value => value.kind === AST_NODE_KIND.FragmentSpread
|
|
4
|
-
const isListValue = value => value.kind === AST_NODE_KIND.ListValue
|
|
5
|
-
const isObjectValue = value => value.kind === AST_NODE_KIND.ObjectValue
|
|
6
|
-
const isVariable = value => value.kind === AST_NODE_KIND.Variable
|
|
7
|
-
|
|
8
|
-
module.exports = { isFragmentSpread, isListValue, isObjectValue, isVariable }
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
const cds = require('../../_runtime/cds')
|
|
2
|
-
const LOG = cds.log('graphql')
|
|
3
|
-
|
|
4
|
-
const { cdsName } = require('../utils')
|
|
5
|
-
const { executeRead } = require('./crud')
|
|
6
|
-
|
|
7
|
-
module.exports = async (service, gqlName, field) => {
|
|
8
|
-
const entityFQN = `${service.name}.${cdsName(gqlName)}`
|
|
9
|
-
|
|
10
|
-
LOG.log(`query on ${entityFQN}`)
|
|
11
|
-
|
|
12
|
-
return await executeRead(service, entityFQN, field)
|
|
13
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
const { gqlName } = require('../utils')
|
|
2
|
-
const resolveQuery = require('./query')
|
|
3
|
-
const resolveMutation = require('./mutation')
|
|
4
|
-
const { enrichAST } = require('./parse/ast')
|
|
5
|
-
|
|
6
|
-
const wrapResolver = (service, resolver) => (root, args, context, info) => {
|
|
7
|
-
const response = {}
|
|
8
|
-
|
|
9
|
-
const enrichedFieldNodes = enrichAST(info)
|
|
10
|
-
|
|
11
|
-
for (const fieldNode of enrichedFieldNodes) {
|
|
12
|
-
for (const field of fieldNode.selectionSet.selections) {
|
|
13
|
-
const gqlName = field.name.value
|
|
14
|
-
const responseKey = field.alias ? field.alias.value : gqlName
|
|
15
|
-
|
|
16
|
-
response[responseKey] = resolver(service, gqlName, field)
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
return response
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
module.exports = services => {
|
|
24
|
-
const Query = {}
|
|
25
|
-
const Mutation = {}
|
|
26
|
-
|
|
27
|
-
for (const service of services) {
|
|
28
|
-
const gqlServiceName = gqlName(service.name)
|
|
29
|
-
Query[gqlServiceName] = wrapResolver(service, resolveQuery)
|
|
30
|
-
Mutation[gqlServiceName] = wrapResolver(service, resolveMutation)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
return { Query, Mutation }
|
|
34
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
const { typeDefMapToMutationStringArray } = require('./mutation')
|
|
2
|
-
const { typeDefMapToQueryStringArray } = require('./query')
|
|
3
|
-
const { servicesToTypeDefMap } = require('./typeDefMap')
|
|
4
|
-
|
|
5
|
-
const typeDefMapToSchemaString = typeDefs => {
|
|
6
|
-
let schema = []
|
|
7
|
-
|
|
8
|
-
schema.push(...typeDefMapToQueryStringArray(typeDefs))
|
|
9
|
-
|
|
10
|
-
schema.push(...typeDefMapToMutationStringArray(typeDefs))
|
|
11
|
-
|
|
12
|
-
return schema.join('\n')
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
module.exports = services => {
|
|
16
|
-
const typeDefMap = servicesToTypeDefMap(services)
|
|
17
|
-
return typeDefMapToSchemaString(typeDefMap)
|
|
18
|
-
}
|
package/libx/gql/schema/index.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
const { ARGUMENT, MUTATION_PREFIX, INPUT_OBJECT_SUFFIX } = require('../constants/adapter')
|
|
2
|
-
const { GQL_ROOT, GQL_KEYWORDS, SCALAR_TYPES } = require('../constants/graphql')
|
|
3
|
-
const { generateSchemaObject, typeToArgumentType, isTypeScalar, appendSuffixToType } = require('./utils')
|
|
4
|
-
|
|
5
|
-
const typeDefMapToMutationStringArray = typeDefs => {
|
|
6
|
-
let schema = []
|
|
7
|
-
|
|
8
|
-
// Create root mutation (containing services)
|
|
9
|
-
schema.push(
|
|
10
|
-
...generateSchemaObject(
|
|
11
|
-
GQL_KEYWORDS.TYPE,
|
|
12
|
-
GQL_ROOT.MUTATION,
|
|
13
|
-
Object.keys(typeDefs).reduce((fields, serviceName) => {
|
|
14
|
-
fields[serviceName] = `${serviceName}_${INPUT_OBJECT_SUFFIX.INPUT}`
|
|
15
|
-
return fields
|
|
16
|
-
}, {})
|
|
17
|
-
)
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
// Create types for mutations from services (each containing entities)
|
|
21
|
-
for (const [serviceName, entities] of Object.entries(typeDefs)) {
|
|
22
|
-
const fields = {}
|
|
23
|
-
for (const entityName of Object.keys(entities)) {
|
|
24
|
-
const entityNameWithoutServicePrefix = entityName.replace(`${serviceName}_`, '')
|
|
25
|
-
|
|
26
|
-
const createMutationName = `${MUTATION_PREFIX.CREATE}_${entityNameWithoutServicePrefix}`
|
|
27
|
-
const createMutationArgs = `(${ARGUMENT.INPUT}: [${entityName}_${INPUT_OBJECT_SUFFIX.CREATE}]!)`
|
|
28
|
-
fields[`${createMutationName}${createMutationArgs}`] = `[${entityName}]`
|
|
29
|
-
|
|
30
|
-
const updateMutationName = `${MUTATION_PREFIX.UPDATE}_${entityNameWithoutServicePrefix}`
|
|
31
|
-
const updateMutationArgs = `(${ARGUMENT.FILTER}: ${typeToArgumentType(entityName, ARGUMENT.FILTER)}, ${
|
|
32
|
-
ARGUMENT.INPUT
|
|
33
|
-
}: ${entityName}_${INPUT_OBJECT_SUFFIX.UPDATE}!)`
|
|
34
|
-
fields[`${updateMutationName}${updateMutationArgs}`] = `[${entityName}]`
|
|
35
|
-
|
|
36
|
-
const deleteMutationName = `${MUTATION_PREFIX.DELETE}_${entityNameWithoutServicePrefix}`
|
|
37
|
-
const deleteMutationArgs = `(${ARGUMENT.FILTER}: ${typeToArgumentType(entityName, ARGUMENT.FILTER)})`
|
|
38
|
-
fields[`${deleteMutationName}${deleteMutationArgs}`] = SCALAR_TYPES.INT
|
|
39
|
-
}
|
|
40
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, `${serviceName}_${INPUT_OBJECT_SUFFIX.INPUT}`, fields))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
// Create input types for create mutations from entities (each containing elements)
|
|
44
|
-
for (const entities of Object.values(typeDefs)) {
|
|
45
|
-
for (const [entityName, elements] of Object.entries(entities)) {
|
|
46
|
-
const fields = {}
|
|
47
|
-
for (const [elementName, elementType] of Object.entries(elements)) {
|
|
48
|
-
if (isTypeScalar(elementType)) {
|
|
49
|
-
fields[elementName] = elementType
|
|
50
|
-
} else {
|
|
51
|
-
fields[elementName] = appendSuffixToType(elementType, INPUT_OBJECT_SUFFIX.CREATE)
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${INPUT_OBJECT_SUFFIX.CREATE}`, fields))
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
// Create input types for update mutations from entities (each containing elements)
|
|
59
|
-
for (const entities of Object.values(typeDefs)) {
|
|
60
|
-
for (const [entityName, elements] of Object.entries(entities)) {
|
|
61
|
-
const fields = {}
|
|
62
|
-
for (const [elementName, elementType] of Object.entries(elements)) {
|
|
63
|
-
if (isTypeScalar(elementType)) {
|
|
64
|
-
fields[elementName] = elementType
|
|
65
|
-
} else {
|
|
66
|
-
fields[elementName] = appendSuffixToType(elementType, INPUT_OBJECT_SUFFIX.UPDATE)
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${INPUT_OBJECT_SUFFIX.UPDATE}`, fields))
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return schema
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
module.exports = { typeDefMapToMutationStringArray }
|
package/libx/gql/schema/query.js
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
const { ARGUMENT, HELPER_TYPES, EQUALITY_OPERATOR, STRING_MATCH_OPERATOR } = require('../constants/adapter')
|
|
2
|
-
const { GQL_ROOT, GQL_KEYWORDS, SCALAR_TYPES } = require('../constants/graphql')
|
|
3
|
-
const {
|
|
4
|
-
generateSchemaObject,
|
|
5
|
-
typeToArgumentType,
|
|
6
|
-
generateArgumentsForType,
|
|
7
|
-
isTypeScalar,
|
|
8
|
-
typeWithoutListBrackets
|
|
9
|
-
} = require('./utils')
|
|
10
|
-
|
|
11
|
-
const generateScalarFilterTypes = () => Object.values(SCALAR_TYPES).flatMap(scalarType => fullFilter(scalarType))
|
|
12
|
-
|
|
13
|
-
const fullFilter = type => {
|
|
14
|
-
const operations = Object.values(EQUALITY_OPERATOR)
|
|
15
|
-
if (type === SCALAR_TYPES.STRING) {
|
|
16
|
-
operations.push(...Object.values(STRING_MATCH_OPERATOR))
|
|
17
|
-
}
|
|
18
|
-
const entries = operations.reduce((acc, operation) => {
|
|
19
|
-
acc[operation] = type
|
|
20
|
-
return acc
|
|
21
|
-
}, {})
|
|
22
|
-
return generateSchemaObject(GQL_KEYWORDS.INPUT, `${type}_${ARGUMENT.FILTER}`, entries)
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const typeDefMapToQueryStringArray = typeDefs => {
|
|
26
|
-
let schema = []
|
|
27
|
-
|
|
28
|
-
// Create root query (containing services)
|
|
29
|
-
schema.push(
|
|
30
|
-
...generateSchemaObject(
|
|
31
|
-
GQL_KEYWORDS.TYPE,
|
|
32
|
-
GQL_ROOT.QUERY,
|
|
33
|
-
Object.keys(typeDefs).reduce((fields, serviceName) => {
|
|
34
|
-
fields[serviceName] = serviceName
|
|
35
|
-
return fields
|
|
36
|
-
}, {})
|
|
37
|
-
)
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
// Create types from services (each containing entities)
|
|
41
|
-
for (const [serviceName, entities] of Object.entries(typeDefs)) {
|
|
42
|
-
const fields = {}
|
|
43
|
-
for (const entityName of Object.keys(entities)) {
|
|
44
|
-
const entityNameWithoutServicePrefix = entityName.replace(`${serviceName}_`, '')
|
|
45
|
-
const argsString = generateArgumentsForType(entityName, [
|
|
46
|
-
ARGUMENT.FILTER,
|
|
47
|
-
ARGUMENT.ORDER_BY,
|
|
48
|
-
ARGUMENT.TOP,
|
|
49
|
-
ARGUMENT.SKIP
|
|
50
|
-
])
|
|
51
|
-
fields[`${entityNameWithoutServicePrefix}${argsString}`] = `[${entityName}]`
|
|
52
|
-
}
|
|
53
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, serviceName, fields))
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Create types from entities (each containing elements)
|
|
57
|
-
for (const entities of Object.values(typeDefs)) {
|
|
58
|
-
for (const [entityName, elements] of Object.entries(entities)) {
|
|
59
|
-
const fields = {}
|
|
60
|
-
for (const [elementName, elementType] of Object.entries(elements)) {
|
|
61
|
-
const argsString = generateArgumentsForType(elementType, [
|
|
62
|
-
ARGUMENT.FILTER,
|
|
63
|
-
ARGUMENT.ORDER_BY,
|
|
64
|
-
ARGUMENT.TOP,
|
|
65
|
-
ARGUMENT.SKIP
|
|
66
|
-
])
|
|
67
|
-
fields[`${elementName}${argsString}`] = elementType
|
|
68
|
-
}
|
|
69
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.TYPE, entityName, fields))
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// Create filter input types for scalars
|
|
74
|
-
schema.push(...generateScalarFilterTypes())
|
|
75
|
-
|
|
76
|
-
// Create filter input types for entity types
|
|
77
|
-
for (const entities of Object.values(typeDefs)) {
|
|
78
|
-
for (const [entityName, elements] of Object.entries(entities)) {
|
|
79
|
-
const fields = {}
|
|
80
|
-
for (const [elementName, elementType] of Object.entries(elements)) {
|
|
81
|
-
if (isTypeScalar(typeWithoutListBrackets(elementType))) {
|
|
82
|
-
fields[elementName] = typeToArgumentType(elementType, ARGUMENT.FILTER)
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (Object.keys(fields).length > 0) {
|
|
86
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${ARGUMENT.FILTER}`, fields))
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Create sort direction enum types for order by
|
|
92
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.ENUM, HELPER_TYPES.SORT_DIRECTION, ['asc', 'desc']))
|
|
93
|
-
|
|
94
|
-
// Create orderBy input types for entity types
|
|
95
|
-
for (const entities of Object.values(typeDefs)) {
|
|
96
|
-
for (const [entityName, elements] of Object.entries(entities)) {
|
|
97
|
-
const fields = {}
|
|
98
|
-
for (const [elementName, elementType] of Object.entries(elements)) {
|
|
99
|
-
fields[elementName] = typeToArgumentType(elementType, ARGUMENT.ORDER_BY)
|
|
100
|
-
}
|
|
101
|
-
schema.push(...generateSchemaObject(GQL_KEYWORDS.INPUT, `${entityName}_${ARGUMENT.ORDER_BY}`, fields))
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
return schema
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
module.exports = { typeDefMapToQueryStringArray }
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
const { CDS_TO_GRAPHQL_TYPES } = require('../constants/adapter')
|
|
2
|
-
const { gqlName } = require('../utils')
|
|
3
|
-
|
|
4
|
-
const servicesToTypeDefMap = services => {
|
|
5
|
-
const typeDefs = {}
|
|
6
|
-
|
|
7
|
-
// Create nested map of services, their entities, and their respective elements
|
|
8
|
-
for (const service of services) {
|
|
9
|
-
const serviceDefs = (typeDefs[gqlName(service.name)] = {})
|
|
10
|
-
|
|
11
|
-
const serviceNamePrefix = `${service.name}.`
|
|
12
|
-
const entitiesKV = Object.entries(service.model.definitions).filter(
|
|
13
|
-
// eslint-disable-next-line no-unused-vars
|
|
14
|
-
([k, _]) => k.startsWith(serviceNamePrefix) && service.model.definitions[k].kind === 'entity'
|
|
15
|
-
)
|
|
16
|
-
|
|
17
|
-
// eslint-disable-next-line no-unused-vars
|
|
18
|
-
for (const [_, entity] of entitiesKV) {
|
|
19
|
-
const def = (serviceDefs[gqlName(entity.name)] = {})
|
|
20
|
-
for (const ele of Object.values(entity.elements)) {
|
|
21
|
-
if (ele.name.startsWith('up_') || ele.name === 'localized' || ele.name === 'texts') {
|
|
22
|
-
continue
|
|
23
|
-
} else if (ele.isAssociation || ele.isComposition) {
|
|
24
|
-
if (!ele.target.startsWith(serviceNamePrefix)) {
|
|
25
|
-
// TODO entities in other namespaces
|
|
26
|
-
continue
|
|
27
|
-
}
|
|
28
|
-
def[ele.name] = ele.is2one ? gqlName(ele.target) : `[${gqlName(ele.target)}]`
|
|
29
|
-
} else if (ele.elements) {
|
|
30
|
-
// TODO structured types
|
|
31
|
-
continue
|
|
32
|
-
} else {
|
|
33
|
-
if (CDS_TO_GRAPHQL_TYPES[ele._type]) {
|
|
34
|
-
def[ele.name] = CDS_TO_GRAPHQL_TYPES[ele._type]
|
|
35
|
-
}
|
|
36
|
-
// TODO aspects
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
return typeDefs
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
module.exports = { servicesToTypeDefMap }
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
const { ARGUMENT, HELPER_TYPES } = require('../../constants/adapter')
|
|
2
|
-
const { GQL_LIST_REGEX, SCALAR_TYPES } = require('../../constants/graphql')
|
|
3
|
-
|
|
4
|
-
const generateSchemaObject = (type, name, fields) => {
|
|
5
|
-
const schema = [`${type} ${name} {`]
|
|
6
|
-
if (Array.isArray(fields)) {
|
|
7
|
-
schema.push(...fields.map(e => ` ${e}`))
|
|
8
|
-
} else {
|
|
9
|
-
schema.push(...Object.entries(fields).map(([k, v]) => ` ${k}: ${v}`))
|
|
10
|
-
}
|
|
11
|
-
schema.push('}', '')
|
|
12
|
-
return schema
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const generateArgumentsForType = (type, args) =>
|
|
16
|
-
`(${args.map(action => `${action}: ${typeToArgumentType(type, action)}`).join(', ')})`
|
|
17
|
-
|
|
18
|
-
const typeToArgumentType = (type, action) => {
|
|
19
|
-
switch (action) {
|
|
20
|
-
case ARGUMENT.FILTER:
|
|
21
|
-
return appendSuffixToType(type, ARGUMENT.FILTER, true)
|
|
22
|
-
case ARGUMENT.ORDER_BY:
|
|
23
|
-
return isTypeScalar(type) ? HELPER_TYPES.SORT_DIRECTION : appendSuffixToType(type, ARGUMENT.ORDER_BY, true)
|
|
24
|
-
case ARGUMENT.TOP:
|
|
25
|
-
return SCALAR_TYPES.INT
|
|
26
|
-
case ARGUMENT.SKIP:
|
|
27
|
-
return SCALAR_TYPES.INT
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
const isTypeScalar = type => Object.values(SCALAR_TYPES).includes(type)
|
|
32
|
-
|
|
33
|
-
const isTypeList = type => type.match(GQL_LIST_REGEX)
|
|
34
|
-
|
|
35
|
-
// Type without list brackets even if type isn't a list
|
|
36
|
-
const typeWithoutListBrackets = type => type.replace(GQL_LIST_REGEX, '$1')
|
|
37
|
-
|
|
38
|
-
const appendSuffixToType = (type, suffix, forceToList) => {
|
|
39
|
-
if (isTypeList(type) || forceToList) {
|
|
40
|
-
return `[${typeWithoutListBrackets(type)}_${suffix}]`
|
|
41
|
-
} else {
|
|
42
|
-
return `${type}_${suffix}`
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
module.exports = {
|
|
47
|
-
generateSchemaObject,
|
|
48
|
-
generateArgumentsForType,
|
|
49
|
-
typeToArgumentType,
|
|
50
|
-
isTypeScalar,
|
|
51
|
-
isTypeList,
|
|
52
|
-
typeWithoutListBrackets,
|
|
53
|
-
appendSuffixToType
|
|
54
|
-
}
|
package/libx/gql/utils/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const { UNAUTHORIZED, FORBIDDEN, getRequiresAsArray } = require('../../_runtime/auth/utils')
|
|
2
|
-
|
|
3
|
-
module.exports = (req, res, next) => {
|
|
4
|
-
if (!req._srv._requires) req._srv._requires = getRequiresAsArray(req._srv.definition)
|
|
5
|
-
|
|
6
|
-
const { _requires: requires } = req._srv
|
|
7
|
-
|
|
8
|
-
if (req.path !== '/' && requires.length > 0 && !requires.some(r => req.user.is(r))) {
|
|
9
|
-
// > unauthorized or forbidden?
|
|
10
|
-
if (req.user._is_anonymous) {
|
|
11
|
-
if (req.user._challenges) res.set('WWW-Authenticate', req.user._challenges.join(';'))
|
|
12
|
-
// REVISIT: security log in else case?
|
|
13
|
-
throw UNAUTHORIZED
|
|
14
|
-
}
|
|
15
|
-
// REVISIT: security log?
|
|
16
|
-
throw FORBIDDEN
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
next()
|
|
20
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const PPP = { POST: 1, PUT: 1, PATCH: 1 }
|
|
2
|
-
const UPDATE = { PUT: 1, PATCH: 1 }
|
|
3
|
-
|
|
4
|
-
module.exports = (req, res, next) => {
|
|
5
|
-
if (PPP[req.method]) {
|
|
6
|
-
const contentType = req.headers['content-type'] && req.headers['content-type'].split(';')
|
|
7
|
-
if (
|
|
8
|
-
contentType &&
|
|
9
|
-
(!contentType[0].match(/^application\/json$/) || (typeof contentType[1] === 'string' && !contentType[1]))
|
|
10
|
-
) {
|
|
11
|
-
throw { statusCode: 415, code: '415', message: 'INVALID_CONTENT_TYPE_ONLY_JSON' }
|
|
12
|
-
}
|
|
13
|
-
if (UPDATE[req.method] && Array.isArray(req.body)) {
|
|
14
|
-
throw { statusCode: 400, code: '400', message: `INVALID_${req.method}` }
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
next()
|
|
19
|
-
}
|
package/srv/flex.cds
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
namespace cds_r; //> cds system tables
|
|
2
|
-
|
|
3
|
-
type JSON: String;
|
|
4
|
-
|
|
5
|
-
@protocol: 'rest'
|
|
6
|
-
service ExtensibilityService @(path:'/-/cds/extensibility') {
|
|
7
|
-
action addExtension(extensions : array of String); // TODO: change to array of CSN extensions
|
|
8
|
-
action activate(tenant: String);
|
|
9
|
-
action activateProject(tenant: String, extension: array of { filename: String; model: JSON }, undeployExtension: Boolean);
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
entity Extensions {
|
|
13
|
-
key ID : UUID;
|
|
14
|
-
csn : String;
|
|
15
|
-
activated : Boolean; // <-- status / enum ?
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// @open type Extension {
|
|
19
|
-
// extend: String;
|
|
20
|
-
// elements:{ /* */ }
|
|
21
|
-
// }
|
package/srv/flex.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('../libx/_runtime/extensibility/uiflex/service')
|
package/srv/mps.cds
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
namespace cds_r; //> cds system tables
|
|
2
|
-
|
|
3
|
-
type TenantID : String;
|
|
4
|
-
@open type CSN {};
|
|
5
|
-
type XML : String;
|
|
6
|
-
type Locale : String;
|
|
7
|
-
type TAR : LargeBinary;
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Used by CAP runtimes to retrieve tenant-specific variants of
|
|
11
|
-
* deployed models used to serve requests.
|
|
12
|
-
*/
|
|
13
|
-
@(requires : [
|
|
14
|
-
'mtcallback'
|
|
15
|
-
])
|
|
16
|
-
@protocol: 'rest'
|
|
17
|
-
service ModelProviderService @(path:'/-/cds/model-provider') {
|
|
18
|
-
action isExtended(tenant : TenantID) returns Boolean;
|
|
19
|
-
action getCsn(tenant : TenantID, toggles : array of String, flavor: String enum { nodejs; java; }) returns CSN;
|
|
20
|
-
action getOdataCsn(tenant : TenantID, toggles : array of String) returns CSN; // REVISIT: Replace by getCsn(..., flavor=node/java)
|
|
21
|
-
action getEdmx(tenant : TenantID, toggles : array of String, serviceName : String, locale : Locale, odataFlavor : String) returns XML;
|
|
22
|
-
action getResources(flat : Boolean) returns TAR;
|
|
23
|
-
}
|
package/srv/mps.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require('../libx/_runtime/extensibility/mps/service')
|
package/srv/outbox.js
DELETED
|
File without changes
|