UNPKG

@pact-foundation/pact

Version:
107 lines 4.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setResponseDetails = exports.setRequestDetails = exports.setHeaders = exports.setBody = exports.setQuery = exports.setRequestMethodAndPath = exports.contentTypeFromHeaders = void 0; var ramda_1 = require("ramda"); var matchers_1 = require("../dsl/matchers"); var logger_1 = __importDefault(require("../common/logger")); var InteractionPart; (function (InteractionPart) { InteractionPart[InteractionPart["REQUEST"] = 1] = "REQUEST"; InteractionPart[InteractionPart["RESPONSE"] = 2] = "RESPONSE"; })(InteractionPart || (InteractionPart = {})); var CONTENT_TYPE_HEADER = 'content-type'; var CONTENT_TYPE_JSON = 'application/json'; var contentTypeFromHeaders = function (headers, defaultContentType) { var contentType = defaultContentType; (0, ramda_1.forEachObjIndexed)(function (v, k) { if ("".concat(k).toLowerCase() === CONTENT_TYPE_HEADER) { contentType = (0, matchers_1.matcherValueOrString)(v); } }, headers || {}); return contentType; }; exports.contentTypeFromHeaders = contentTypeFromHeaders; var setRequestMethodAndPath = function (interaction, req) { if ((req === null || req === void 0 ? void 0 : req.method) && (req === null || req === void 0 ? void 0 : req.path)) { var method = req === null || req === void 0 ? void 0 : req.method; var reqPath = (0, matchers_1.matcherValueOrString)(req === null || req === void 0 ? void 0 : req.path); interaction.withRequest(method, reqPath); } }; exports.setRequestMethodAndPath = setRequestMethodAndPath; var setQuery = function (interaction, query) { (0, ramda_1.forEachObjIndexed)(function (v, k) { if (Array.isArray(v)) { v.forEach(function (vv, i) { interaction.withQuery(k, i, (0, matchers_1.matcherValueOrString)(vv)); }); } else { interaction.withQuery(k, 0, (0, matchers_1.matcherValueOrString)(v)); } }, query); }; exports.setQuery = setQuery; var setBody = function (part, interaction, headers, body) { if (body) { var matcher = (0, matchers_1.matcherValueOrString)(body); var contentType = (0, exports.contentTypeFromHeaders)(headers, CONTENT_TYPE_JSON); switch (part) { case InteractionPart.REQUEST: interaction.withRequestBody(matcher, contentType); break; case InteractionPart.RESPONSE: interaction.withResponseBody(matcher, contentType); break; default: break; } } }; exports.setBody = setBody; var setHeaders = function (part, interaction, headers) { Object.entries(headers || {}).forEach(function (_a) { var k = _a[0], v = _a[1]; var values = []; if (Array.isArray(v)) { values = v; } else { values = [v]; } switch (part) { case InteractionPart.REQUEST: values.forEach(function (h, i) { logger_1.default.debug("setting header request value for ".concat(k, " at index ").concat(i, " to ").concat(JSON.stringify((0, matchers_1.matcherValueOrString)(h)))); interaction.withRequestHeader(k, i, (0, matchers_1.matcherValueOrString)(h)); }); break; case InteractionPart.RESPONSE: values.forEach(function (h, i) { logger_1.default.debug("setting header response value for ".concat(h, " at index ").concat(i, " to ").concat(JSON.stringify((0, matchers_1.matcherValueOrString)(h)))); interaction.withResponseHeader(k, i, (0, matchers_1.matcherValueOrString)(h)); }); break; default: break; } }); }; exports.setHeaders = setHeaders; var setRequestDetails = function (interaction, req) { (0, exports.setRequestMethodAndPath)(interaction, req); (0, exports.setBody)(InteractionPart.REQUEST, interaction, req.headers, req.body); (0, exports.setHeaders)(InteractionPart.REQUEST, interaction, req.headers); (0, exports.setQuery)(interaction, req.query); }; exports.setRequestDetails = setRequestDetails; var setResponseDetails = function (interaction, res) { interaction.withStatus(res.status); (0, exports.setBody)(InteractionPart.RESPONSE, interaction, res.headers, res.body); (0, exports.setHeaders)(InteractionPart.RESPONSE, interaction, res.headers); }; exports.setResponseDetails = setResponseDetails; //# sourceMappingURL=ffi.js.map