UNPKG

@sap-cloud-sdk/core

Version:
141 lines • 6.73 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getLine = exports.serializeBatchRequest = exports.serializeRequest = exports.serializeChangeSet = void 0; var util_1 = require("@sap-cloud-sdk/util"); var voca_1 = __importDefault(require("voca")); var odata_request_1 = require("../../request/odata-request"); var request_builder_base_1 = require("../request-builder-base"); /** * 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. */ function serializeChangeSet(changeSet, options) { if (options === void 0) { options = {}; } if (changeSet.requests.length) { return [ "Content-Type: multipart/mixed; boundary=".concat(changeSet.boundary), '', "--".concat(changeSet.boundary), changeSet.requests .map(function (request) { return serializeRequest(request, options); }) .join("".concat(util_1.unixEOL, "--").concat(changeSet.boundary).concat(util_1.unixEOL)), "--".concat(changeSet.boundary, "--") ].join(util_1.unixEOL); } } exports.serializeChangeSet = serializeChangeSet; /** * Serialize a multipart request to string. * @param request - One of [[GetAllRequestBuilder | getAll]], [[GetByKeyRequestBuilder | getByKey]], [[CreateRequestBuilder | create]], [[UpdateRequestBuilder | update]] or [[DeleteRequestBuilder | delete]] request builder. * @param options - Request serialization options. * @returns The serialized string representation of a multipart request, including the multipart headers. */ function serializeRequest(request, options) { if (options === void 0) { options = {}; } var odataRequest = new odata_request_1.ODataRequest(request.requestConfig, options.destination); var headers = __assign(__assign(__assign({}, odataRequest.defaultHeaders()), odataRequest.eTagHeaders()), odataRequest.customHeaders()); var requestHeaders = Object.entries(headers).map(function (_a) { var key = _a[0], value = _a[1]; return "".concat(voca_1.default.titleCase(key), ": ").concat(value); }); return __spreadArray(__spreadArray(__spreadArray(__spreadArray([ 'Content-Type: application/http', 'Content-Transfer-Encoding: binary', '', "".concat(request.requestConfig.method.toUpperCase(), " ").concat(getUrl(odataRequest, options.subRequestPathType), " HTTP/1.1") ], (requestHeaders.length ? requestHeaders : ['']), true), [ '' ], false), getPayload(request), true), [ '' ], false).join(util_1.unixEOL); } exports.serializeRequest = serializeRequest; function getUrl(request, subRequestPathType) { switch (subRequestPathType) { case 'absolute': return request.url(); case 'relativeToEntity': return "/".concat(request.relativeUrl(false)); default: return "/".concat(request.relativeUrl()); } } function getPayload(request) { return request.requestConfig.method !== 'get' ? [JSON.stringify(request.requestConfig.payload)] : []; } function validateOptions(options) { var _a; // This should never happen. Can only occur if requestbuilder.build() was called which will be removed. if (options.subRequestPathType === 'absolute' && !((_a = options.destination) === null || _a === void 0 ? void 0 : _a.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. */ function serializeBatchRequest(request, options) { if (options === void 0) { options = {}; } validateOptions(options); var serializedSubRequests = request.requests .map(function (subRequest) { return subRequest instanceof request_builder_base_1.MethodRequestBuilder ? serializeRequest(subRequest, options) : serializeChangeSet(subRequest, options); }) .filter(function (validRequest) { return !!validRequest; }) .join("".concat(util_1.unixEOL, "--").concat(request.requestConfig.boundary).concat(util_1.unixEOL)); var serializedBatchRequest = serializedSubRequests ? [ "--".concat(request.requestConfig.boundary), serializedSubRequests, "--".concat(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'); } exports.serializeBatchRequest = serializeBatchRequest; /** * @deprecated Since v1.30.0. This function won't be replaced. * Serialize a request to a one line string containing the HTTP method, URL and HTTP version. * For Example: * `GET /sap/opu/odata/sap/API_BUSINESS_PARTNER/A_BusinessPartnerAddress?$format=json&$top=1 HTTP/1.1` * @param request - One of [[GetAllRequestBuilder | getAll]], [[GetByKeyRequestBuilder | getByKey]], [[CreateRequestBuilder | create]], [[UpdateRequestBuilder | update]] or [[DeleteRequestBuilder | delete]] request builder. * @returns The serialized request as `<HTTP method> <URL> <HTTP version>`. */ function getLine(request) { return "".concat(request.requestConfig.method.toUpperCase(), " /").concat(request.relativeUrl(), " HTTP/1.1"); } exports.getLine = getLine; //# sourceMappingURL=batch-request-serializer.js.map