@sap-cloud-sdk/core
Version:
SAP Cloud SDK for JavaScript core
141 lines • 6.73 kB
JavaScript
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
;