UNPKG

@vladbasin/strong-api-mapping

Version:

Strongly typed API models. Mapping & validation

52 lines 2.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapRawApiRequestToPayload = void 0; const lodash_1 = require("lodash"); const _1 = require("."); const arrayNotAllowedSources = ["body", "path"]; const mapRawApiRequestToPayload = (options) => { const { PayloadConstructor, rawApiRequest, schema, customApiRequestData } = options; const payload = new PayloadConstructor(); const mappingsMetadata = (0, _1.getMappingMetadata)(payload); const parametersMultiValueProps = { ["query"]: 'queryArray', ["header"]: 'headerArray', }; const parametersMap = { ["query"]: rawApiRequest.queryParams, ["path"]: rawApiRequest.pathParams, ["header"]: rawApiRequest.headers, ["body"]: (0, lodash_1.isNil)(rawApiRequest.body) ? undefined : (0, _1.parseJson)(rawApiRequest.body), [parametersMultiValueProps["query"]]: rawApiRequest.multiValueQueryParams, [parametersMultiValueProps["header"]]: rawApiRequest.multiValueHeaders, }; mappingsMetadata.forEach(metadata => { if (metadata.isCustom) { if ((0, lodash_1.isNil)(customApiRequestData)) { return; } payload[metadata.propName] = payload[metadata.propName] || (0, _1.getPayloadPropValue)(metadata.parser, customApiRequestData[metadata.source], metadata.sourceKey, metadata.isKeyCaseSensitive, metadata.isArray); return; } if (metadata.isArray) { if (arrayNotAllowedSources.includes(metadata.source)) { throw new _1.InvalidMappingError(`Array mapping is not allowed for ${arrayNotAllowedSources.join(', ')}`); } else { payload[metadata.propName] = payload[metadata.propName] || (0, _1.getPayloadPropValue)(metadata.parser, parametersMap[parametersMultiValueProps[metadata.source]], metadata.sourceKey, metadata.isKeyCaseSensitive, metadata.isArray); } } else { payload[metadata.propName] = payload[metadata.propName] || (0, _1.getPayloadPropValue)(metadata.parser, parametersMap[metadata.source], metadata.sourceKey, metadata.isKeyCaseSensitive, metadata.isArray); } }); return (0, _1.validatePayload)(payload, schema); }; exports.mapRawApiRequestToPayload = mapRawApiRequestToPayload; //# sourceMappingURL=mapRawApiRequestToPayload.js.map