UNPKG

@vladbasin/strong-api-mapping

Version:

Strongly typed API models. Mapping & validation

27 lines 1.51 kB
"use strict"; 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