@vladbasin/strong-api-mapping
Version:
Strongly typed API models. Mapping & validation
52 lines • 2.53 kB
JavaScript
;
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