@vladbasin/strong-api-mapping
Version:
Strongly typed API models. Mapping & validation
27 lines • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.mapRawApiResponseToPayload = void 0;
const lodash_1 = require("lodash");
const _1 = require(".");
const mapRawApiResponseToPayload = (rawApiResponse, PayloadConstructor, schema) => {
const payload = new PayloadConstructor();
const mappingsMetadata = (0, _1.getMappingMetadata)(payload);
mappingsMetadata.forEach(metadata => {
switch (metadata.source) {
case "header":
if ((0, lodash_1.isNil)(metadata.sourceKey)) {
throw new _1.InvalidMappingError(`Key is requred for mapping headers (property: "${metadata.propName}")`);
}
payload[metadata.propName] = (0, _1.getPayloadPropValue)(metadata.parser, metadata.isArray ? rawApiResponse.multiValueHeaders : rawApiResponse.headers, metadata.sourceKey, metadata.isKeyCaseSensitive, metadata.isArray);
break;
case "body":
payload[metadata.propName] = !(0, lodash_1.isNil)(rawApiResponse.body) ? JSON.parse(rawApiResponse.body) : undefined;
break;
default:
throw new _1.InvalidMappingError(`Found "${metadata.source}" for property "${metadata.propName}". Response mapping may contain only headers or body`);
}
});
return (0, _1.validatePayload)(payload, schema);
};
exports.mapRawApiResponseToPayload = mapRawApiResponseToPayload;
//# sourceMappingURL=mapRawApiResponseToPayload.js.map