@pact-foundation/pact
Version:
Pact for all things Javascript
59 lines • 2.29 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRequestTracer = exports.createResponseTracer = void 0;
const lodash_1 = require("lodash");
const logger_1 = __importDefault(require("../../../common/logger"));
const removeEmptyResponseProperties = (body, res) => (0, lodash_1.pickBy)({
body,
headers: (0, lodash_1.reduce)(res.getHeaders(), (acc, val, index) => {
acc[index] = val;
return acc;
}, {}),
status: res.statusCode,
}, lodash_1.identity);
const removeEmptyRequestProperties = (req) => (0, lodash_1.pickBy)({
body: req.body,
headers: req.headers,
method: req.method,
path: req.path,
}, lodash_1.identity);
const createResponseTracer = () => (_, res, next) => {
const oldWrite = res.write.bind(res);
const oldEnd = res.end.bind(res);
const chunks = [];
res.write = ((chunk, encodingOrCb, callback) => {
chunks.push(Buffer.from(chunk));
if (typeof encodingOrCb === 'function') {
return oldWrite(chunk, encodingOrCb);
}
return oldWrite(chunk, encodingOrCb, callback);
});
res.end = ((chunkOrCb, encodingOrCb, cb) => {
const chunk = typeof chunkOrCb === 'function' ? undefined : chunkOrCb;
if (chunk) {
chunks.push(Buffer.from(chunk));
}
const body = Buffer.concat(chunks).toString('utf8');
logger_1.default.debug(`outgoing response: ${JSON.stringify(removeEmptyResponseProperties(body, res))}`);
if (typeof chunkOrCb === 'function') {
return oldEnd(chunkOrCb);
}
if (typeof encodingOrCb === 'function') {
return oldEnd(chunkOrCb, encodingOrCb);
}
return oldEnd(chunkOrCb, encodingOrCb, cb);
});
if (typeof next === 'function') {
next();
}
};
exports.createResponseTracer = createResponseTracer;
const createRequestTracer = () => (req, _, next) => {
logger_1.default.debug(`incoming request: ${JSON.stringify(removeEmptyRequestProperties(req))}`);
next();
};
exports.createRequestTracer = createRequestTracer;
//# sourceMappingURL=tracer.js.map