UNPKG

cassava

Version:
82 lines 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LoggingRoute = void 0; /** * Logs all requests and responses. */ class LoggingRoute { constructor(options = {}) { this.options = options; } matches(evt) { return true; } handle(evt) { const msg = this.requestToString(evt); this.log(msg); } postProcess(evt, resp) { const msg = `${this.requestToString(evt)} ${this.responseToString(resp)}`; this.log(msg); } requestToString(evt) { let msg = `${evt.httpMethod} ${evt.path}${this.queryMapToString(evt.multiValueQueryStringParameters || evt.queryStringParameters)}`; if (!this.options.hideRequestBody && evt.body != null) { msg += ` reqbody=${JSON.stringify(evt.body)}`; } if (this.options.logRequestHeaders) { msg += ` reqheaders={${this.headersToString(evt.multiValueHeaders || evt.headers, this.options.logRequestHeaders)}}`; } return msg; } responseToString(resp) { let msg = `status=${resp.statusCode || 200}`; if (!this.options.hideResponseBody) { msg += ` respbody=${JSON.stringify(resp.body)}`; } if (this.options.logResponseHeaders) { msg += ` respheaders={${this.headersToString(resp.headers, this.options.logResponseHeaders)}}`; } return msg; } queryMapToString(queryStringParameters) { if (!queryStringParameters) { return ""; } const keys = Object.keys(queryStringParameters); if (!keys.length) { return ""; } return "?" + keys.map(key => { const value = queryStringParameters[key]; if (Array.isArray(value)) { return value.map(value => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&"); } return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`; }).join("&"); } headersToString(headers, headersFilter) { let keys = Object.keys(headers); if (Array.isArray(headersFilter)) { const filterLowerCase = headersFilter.map(h => h.toLowerCase()); keys = keys.filter(key => filterLowerCase ? filterLowerCase.indexOf(key.toLowerCase()) !== -1 : true); } return keys.map(key => { const value = headers[key]; if (Array.isArray(value)) { return value.map(value => `${key}=${value}`).join(", "); } return `${key}=${value}`; }).join(", "); } log(msg) { if (this.options.logFunction) { this.options.logFunction(msg); } else { console.log(msg); } } } exports.LoggingRoute = LoggingRoute; //# sourceMappingURL=LoggingRoute.js.map