UNPKG

@sap-cloud-sdk/odata-common

Version:

SAP Cloud SDK for JavaScript common functions of OData client generator and OpenAPI clint generator.

86 lines 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BatchRequestBuilder = void 0; const util_1 = require("@sap-cloud-sdk/util"); const request_1 = require("../../request"); const request_builder_base_1 = require("../request-builder-base"); const batch_change_set_1 = require("./batch-change-set"); const batch_request_serializer_1 = require("./batch-request-serializer"); /** * Create a batch request to invoke multiple requests as a batch. The batch request builder accepts retrieve requests, i. e. {@link GetAllRequestBuilder | getAll} and {@link GetByKeyRequestBuilder | getByKey} requests and change sets, which in turn can contain {@link CreateRequestBuilder | create}, {@link UpdateRequestBuilder | update} or {@link DeleteRequestBuilder | delete} requests. * The retrieve and change sets will be executed in order, while the order within a change set can vary. * @internal */ class BatchRequestBuilder extends request_builder_base_1.MethodRequestBuilder { /** * Creates an instance of ODataBatchRequestBuilder. * @param defaultBasePath - Base path. * @param requests - An array of retrieve requests or change sets. */ constructor(defaultBasePath, requests) { super(new request_1.ODataBatchRequestConfig(defaultBasePath)); this.defaultBasePath = defaultBasePath; this.requests = requests; const entityApi = (0, util_1.first)(Object.values(this.getEntityToApiMap())); this.deSerializers = entityApi?.deSerializers || this.getOperationDeserializers(requests); } withSubRequestPathType(subRequestPathType) { this.requestConfig.withSubRequestPathType(subRequestPathType); return this; } build(destination) { return destination ? super.build(destination).then(request => this.setPayload(request)) : this.setPayload(super.build()); } /** * Execute request and return an {@link @sap-cloud-sdk/http-client!HttpResponse}. * @param destination - Destination or DestinationFetchOptions to execute the request against. * @returns A promise resolving to an {@link @sap-cloud-sdk/http-client!HttpResponse}. */ async executeRaw(destination) { return this.build(destination).then(request => request.execute()); } getEntityToApiMap() { return this.requests.reduce((apis, request) => ({ ...apis, ...(request instanceof batch_change_set_1.BatchChangeSet ? buildMapEntries(request) : buildMapEntry(request)) }), {}); } setPayload(request) { request.config.payload = (0, batch_request_serializer_1.serializeBatchRequest)(this, { subRequestPathType: request.config.subRequestPathType, destination: request.destination }); return request; } getOperationDeserializers(requests) { const outerRequest = (0, util_1.first)(requests); if (outerRequest instanceof batch_change_set_1.BatchChangeSet) { const innerRequest = (0, util_1.first)(outerRequest.requests); if (innerRequest && isActionOrFunctionImport(innerRequest)) { return innerRequest._deSerializers; } } } } exports.BatchRequestBuilder = BatchRequestBuilder; function isActionOrFunctionImport(req) { return !!(req.requestConfig['functionName'] ?? req.requestConfig['actionName']); } function buildMapEntries(changeSet) { return changeSet.requests.reduce((changeSetApis, changesetReq) => isActionOrFunctionImport(changesetReq) ? changeSetApis : { ...changeSetApis, ...buildMapEntry(changesetReq) }, {}); } function buildMapEntry(request) { return isActionOrFunctionImport(request) ? {} : { [request._entityApi.entityConstructor._entityName]: request._entityApi }; } //# sourceMappingURL=batch-request-builder.js.map