@vladbasin/strong-api-mapping
Version:
Strongly typed API models. Mapping & validation
61 lines • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapPayloadToRawApiRequest = void 0;
const lodash_1 = require("lodash");
const _1 = require(".");
const mapPayloadToRawApiRequest = (payload) => {
const mappingsMetadata = (0, _1.getMappingMetadata)(payload);
const headers = {};
const queryParams = {};
const pathParams = {};
const multiValueHeaders = {};
const multiValueQueryParams = {};
let body;
const parametersMultiValueProps = {
["query"]: 'queryArray',
["header"]: 'headerArray',
};
const parametersMap = {
["query"]: queryParams,
["path"]: pathParams,
["header"]: headers,
[parametersMultiValueProps["query"]]: multiValueQueryParams,
[parametersMultiValueProps["header"]]: multiValueHeaders,
};
mappingsMetadata.forEach(metadata => {
var _a;
switch (metadata.source) {
case "header":
case "query":
case "path":
if ((0, lodash_1.isNil)(metadata.sourceKey)) {
throw new _1.InvalidMappingError(`Key is requred for mapping this source (source: "${metadata.source}" property: "${metadata.propName}")`);
}
if (metadata.isArray) {
if (metadata.source === "path") {
throw new _1.InvalidMappingError(`Array is not supported for this source (source: "${metadata.source}" property: "${metadata.propName}")`);
}
(0, _1.setKeyCaseBasedValue)(parametersMap[parametersMultiValueProps[metadata.source]], metadata.sourceKey, metadata.isKeyCaseSensitive, (_a = payload[metadata.propName]) === null || _a === void 0 ? void 0 : _a.map(t => String(t)));
}
else if (payload[metadata.propName]) {
(0, _1.setKeyCaseBasedValue)(parametersMap[metadata.source], metadata.sourceKey, metadata.isKeyCaseSensitive, String(payload[metadata.propName]));
}
break;
case "body":
body = JSON.stringify(payload[metadata.propName]);
break;
default:
throw new _1.InvalidMappingError(`Unsupported source (source: "${metadata.source}", property = "${metadata.propName}")`);
}
});
return {
headers,
multiValueHeaders,
body,
queryParams,
pathParams,
multiValueQueryParams,
};
};
exports.mapPayloadToRawApiRequest = mapPayloadToRawApiRequest;
//# sourceMappingURL=mapPayloadToRawApiRequest.js.map