UNPKG

@sap-cloud-sdk/odata-common

Version:

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

115 lines 4.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.serializeChangeSet = serializeChangeSet; exports.serializeRequest = serializeRequest; exports.serializeBatchRequest = serializeBatchRequest; const util_1 = require("@sap-cloud-sdk/util"); const voca_1 = __importDefault(require("voca")); const request_1 = require("../../request"); const batch_change_set_1 = require("./batch-change-set"); /** * Serialize change set to string. * @param changeSet - Change set containing a collection of write operations. * @param options - Request serialization options. * @returns The serialized string representation of a change set. * @internal */ function serializeChangeSet(changeSet, options = {}) { if (changeSet.requests.length) { return [ `Content-Type: multipart/mixed; boundary=${changeSet.boundary}`, '', `--${changeSet.boundary}`, changeSet.requests .map(request => serializeRequest(request, options)) .join(`${util_1.unixEOL}--${changeSet.boundary}${util_1.unixEOL}`), `--${changeSet.boundary}--` ].join(util_1.unixEOL); } } /** * Serialize a multipart request to string. * @param request - One of {@link GetAllRequestBuilder | getAll}, {@link GetByKeyRequestBuilder | getByKey}, {@link CreateRequestBuilder | create}, {@link UpdateRequestBuilder | update} or {@link DeleteRequestBuilder | delete} request builder. * @param options - Request serialization options. * @returns The serialized string representation of a multipart request, including the multipart headers. * @internal */ function serializeRequest(request, options = {}) { const odataRequest = new request_1.ODataRequest(request.requestConfig, options.destination); const headers = { ...odataRequest.defaultHeaders(), ...odataRequest.eTagHeaders(), ...odataRequest.customHeaders() }; const requestHeaders = Object.entries(headers).map(([key, value]) => `${voca_1.default.titleCase(key)}: ${value}`); const method = request.requestConfig.method.toUpperCase(); return [ 'Content-Type: application/http', 'Content-Transfer-Encoding: binary', ...(method !== 'GET' && isRequestBuilderWithBatchReference(request) ? [`Content-Id: ${request.getBatchReference().id}`] : []), '', `${method} ${getUrl(odataRequest, options.subRequestPathType)} HTTP/1.1`, ...(requestHeaders.length ? requestHeaders : ['']), '', ...getPayload(request), '' ].join(util_1.unixEOL); } function isRequestBuilderWithBatchReference(request) { return !!request.getBatchReference; } function getUrl(request, subRequestPathType) { switch (subRequestPathType) { case 'absolute': return request.url(); case 'relativeToEntity': return `/${request.relativeUrl(false)}`; case 'noPath': return `${request.relativeUrl(false)}`; default: return `/${request.relativeUrl()}`; } } function getPayload(request) { return request.requestConfig.method !== 'get' ? [JSON.stringify(request.requestConfig.payload)] : []; } function validateOptions(options) { // This should never happen. Can only occur if requestBuilder.build() was called, which will be removed. if (options.subRequestPathType === 'absolute' && !options.destination?.url) { throw new Error("Cannot serialize batch request. Invalid destination provided for sub request path type 'absolute'"); } } /** * Serialize a batch request to string. This is used for the batch request payload when executing the request. * @param request - Batch request to serialize. * @param options - Request serialization options. * @returns String representation of the batch request. * @internal */ function serializeBatchRequest(request, options = {}) { validateOptions(options); const serializedSubRequests = request.requests .map(subRequest => subRequest instanceof batch_change_set_1.BatchChangeSet ? serializeChangeSet(subRequest, options) : serializeRequest(subRequest, options)) .filter(validRequest => !!validRequest) .join(`${util_1.unixEOL}--${request.requestConfig.boundary}${util_1.unixEOL}`); const serializedBatchRequest = serializedSubRequests ? [ `--${request.requestConfig.boundary}`, serializedSubRequests, `--${request.requestConfig.boundary}--`, '' ].join(util_1.unixEOL) : serializedSubRequests; // The batch standard expects CRLF line endings for batch requests return serializedBatchRequest.replace(/\n/g, '\r\n'); } //# sourceMappingURL=batch-request-serializer.js.map