@pact-foundation/pact
Version:
Pact for all things Javascript
107 lines • 4.8 kB
JavaScript
;
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