UNPKG

request-received

Version:

Route middleware for Koa and Express that adds a request received high-resolution timer and Date to the request object using easily accessible Symbols to prevent request object pollution. Made for Cabin.

55 lines (46 loc) 8.99 kB
"use strict"; const startAtSymbol = Symbol.for('request-received.startAt'); const startTimeSymbol = Symbol.for('request-received.startTime'); const pinoHttpStartAtSymbol = Symbol.for('pino-http.startAt'); const pinoHttpStartTimeSymbol = Symbol.for('pino-http.startTime'); module.exports = function (...args) { // start the timers let startAt = process.hrtime(); let startTime = Date.now(); // support both express and koa route middleware const isExpress = typeof args[2] !== 'undefined' && typeof args[2] === 'function'; // // detect pino-http Symbols // // express - req[Symbol] // koa - ctx[Symbol], ctx.req[Symbol], ctx.request[Symbol] if (args[0][pinoHttpStartAtSymbol]) { startAt = args[0][pinoHttpStartAtSymbol]; } else if (!isExpress) { if (args[0].req[pinoHttpStartAtSymbol]) startAt = args[0].req[pinoHttpStartAtSymbol];else if (args[0].request[pinoHttpStartAtSymbol]) startAt = args[0].request[pinoHttpStartAtSymbol]; } if (args[0][pinoHttpStartTimeSymbol]) { startTime = args[0][pinoHttpStartTimeSymbol]; } else if (!isExpress) { if (args[0].req[pinoHttpStartTimeSymbol]) startTime = args[0].req[pinoHttpStartTimeSymbol];else if (args[0].request[pinoHttpStartTimeSymbol]) startTime = args[0].request[pinoHttpStartTimeSymbol]; } if (isExpress) { args[0][startAtSymbol] = startAt; args[0][startTimeSymbol] = startTime; // pino-http support args[0][pinoHttpStartAtSymbol] = startAt; args[0][pinoHttpStartTimeSymbol] = startTime; } else { args[0][startAtSymbol] = startAt; args[0].req[startAtSymbol] = startAt; args[0].request[startAtSymbol] = startAt; args[0][startTimeSymbol] = startTime; args[0].req[startTimeSymbol] = startTime; args[0].request[startTimeSymbol] = startTime; // pino-http support args[0][pinoHttpStartAtSymbol] = startAt; args[0].req[pinoHttpStartAtSymbol] = startAt; args[0].request[pinoHttpStartAtSymbol] = startAt; args[0][pinoHttpStartTimeSymbol] = startTime; args[0].req[pinoHttpStartTimeSymbol] = startTime; args[0].request[pinoHttpStartTimeSymbol] = startTime; } return isExpress ? args[2]() : args[1](); }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJzdGFydEF0U3ltYm9sIiwiU3ltYm9sIiwiZm9yIiwic3RhcnRUaW1lU3ltYm9sIiwicGlub0h0dHBTdGFydEF0U3ltYm9sIiwicGlub0h0dHBTdGFydFRpbWVTeW1ib2wiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXJncyIsInN0YXJ0QXQiLCJwcm9jZXNzIiwiaHJ0aW1lIiwic3RhcnRUaW1lIiwiRGF0ZSIsIm5vdyIsImlzRXhwcmVzcyIsInJlcSIsInJlcXVlc3QiXSwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTUEsYUFBYSxHQUFHQyxNQUFNLENBQUNDLEdBQVAsQ0FBVywwQkFBWCxDQUF0QjtBQUNBLE1BQU1DLGVBQWUsR0FBR0YsTUFBTSxDQUFDQyxHQUFQLENBQVcsNEJBQVgsQ0FBeEI7QUFDQSxNQUFNRSxxQkFBcUIsR0FBR0gsTUFBTSxDQUFDQyxHQUFQLENBQVcsbUJBQVgsQ0FBOUI7QUFDQSxNQUFNRyx1QkFBdUIsR0FBR0osTUFBTSxDQUFDQyxHQUFQLENBQVcscUJBQVgsQ0FBaEM7O0FBRUFJLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixVQUFTLEdBQUdDLElBQVosRUFBa0I7QUFDakM7QUFDQSxNQUFJQyxPQUFPLEdBQUdDLE9BQU8sQ0FBQ0MsTUFBUixFQUFkO0FBQ0EsTUFBSUMsU0FBUyxHQUFHQyxJQUFJLENBQUNDLEdBQUwsRUFBaEIsQ0FIaUMsQ0FLakM7O0FBQ0EsUUFBTUMsU0FBUyxHQUNiLE9BQU9QLElBQUksQ0FBQyxDQUFELENBQVgsS0FBbUIsV0FBbkIsSUFBa0MsT0FBT0EsSUFBSSxDQUFDLENBQUQsQ0FBWCxLQUFtQixVQUR2RCxDQU5pQyxDQVNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBLE1BQUlBLElBQUksQ0FBQyxDQUFELENBQUosQ0FBUUoscUJBQVIsQ0FBSixFQUFvQztBQUNsQ0ssSUFBQUEsT0FBTyxHQUFHRCxJQUFJLENBQUMsQ0FBRCxDQUFKLENBQVFKLHFCQUFS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U0FBUyxHQUFHUCxJQUFJLENBQUMsQ0FBRCxDQUFKLEVBQUgsR0FBZUEsSUFBSSxDQUFDLENBQUQsQ0FBSixFQUEvQjtBQUNELENBekREIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3Qgc3RhcnRBdFN5bWJvbCA9IFN5bWJvbC5mb3IoJ3JlcXVlc3QtcmVjZWl2ZWQuc3RhcnRBdCcpO1xuY29uc3Qgc3RhcnRUaW1lU3ltYm9sID0gU3ltYm9sLmZvcigncmVxdWVzdC1yZWNlaXZlZC5zdGFydFRpbWUnKTtcbmNvbnN0IHBpbm9IdHRwU3RhcnRBdFN5bWJvbCA9IFN5bWJvbC5mb3IoJ3Bpbm8taHR0cC5zdGFydEF0Jyk7XG5jb25zdCBwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbCA9IFN5bWJvbC5mb3IoJ3Bpbm8taHR0cC5zdGFydFRpbWUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiguLi5hcmdzKSB7XG4gIC8vIHN0YXJ0IHRoZSB0aW1lcnNcbiAgbGV0IHN0YXJ0QXQgPSBwcm9jZXNzLmhydGltZSgpO1xuICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcblxuICAvLyBzdXBwb3J0IGJvdGggZXhwcmVzcyBhbmQga29hIHJvdXRlIG1pZGRsZXdhcmVcbiAgY29uc3QgaXNFeHByZXNzID1cbiAgICB0eXBlb2YgYXJnc1syXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGFyZ3NbMl0gPT09ICdmdW5jdGlvbic7XG5cbiAgLy9cbiAgLy8gZGV0ZWN0IHBpbm8taHR0cCBTeW1ib2xzXG4gIC8vXG4gIC8vIGV4cHJlc3MgLSByZXFbU3ltYm9sXVxuICAvLyBrb2EgLSBjdHhbU3ltYm9sXSwgY3R4LnJlcVtTeW1ib2xdLCBjdHgucmVxdWVzdFtTeW1ib2xdXG4gIGlmIChhcmdzWzBdW3Bpbm9IdHRwU3RhcnRBdFN5bWJvbF0pIHtcbiAgICBzdGFydEF0ID0gYXJnc1swXVtwaW5vSHR0cFN0YXJ0QXRTeW1ib2xdO1xuICB9IGVsc2UgaWYgKCFpc0V4cHJlc3MpIHtcbiAgICBpZiAoYXJnc1swXS5yZXFbcGlub0h0dHBTdGFydEF0U3ltYm9sXSlcbiAgICAgIHN0YXJ0QXQgPSBhcmdzWzBdLnJlcVtwaW5vSHR0cFN0YXJ0QXRTeW1ib2xdO1xuICAgIGVsc2UgaWYgKGFyZ3NbMF0ucmVxdWVzdFtwaW5vSHR0cFN0YXJ0QXRTeW1ib2xdKVxuICAgICAgc3RhcnRBdCA9IGFyZ3NbMF0ucmVxdWVzdFtwaW5vSHR0cFN0YXJ0QXRTeW1ib2xdO1xuICB9XG5cbiAgaWYgKGFyZ3NbMF1bcGlub0h0dHBTdGFydFRpbWVTeW1ib2xdKSB7XG4gICAgc3RhcnRUaW1lID0gYXJnc1swXVtwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbF07XG4gIH0gZWxzZSBpZiAoIWlzRXhwcmVzcykge1xuICAgIGlmIChhcmdzWzBdLnJlcVtwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbF0pXG4gICAgICBzdGFydFRpbWUgPSBhcmdzWzBdLnJlcVtwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbF07XG4gICAgZWxzZSBpZiAoYXJnc1swXS5yZXF1ZXN0W3Bpbm9IdHRwU3RhcnRUaW1lU3ltYm9sXSlcbiAgICAgIHN0YXJ0VGltZSA9IGFyZ3NbMF0ucmVxdWVzdFtwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbF07XG4gIH1cblxuICBpZiAoaXNFeHByZXNzKSB7XG4gICAgYXJnc1swXVtzdGFydEF0U3ltYm9sXSA9IHN0YXJ0QXQ7XG4gICAgYXJnc1swXVtzdGFydFRpbWVTeW1ib2xdID0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcGluby1odHRwIHN1cHBvcnRcbiAgICBhcmdzWzBdW3Bpbm9IdHRwU3RhcnRBdFN5bWJvbF0gPSBzdGFydEF0O1xuICAgIGFyZ3NbMF1bcGlub0h0dHBTdGFydFRpbWVTeW1ib2xdID0gc3RhcnRUaW1lO1xuICB9IGVsc2Uge1xuICAgIGFyZ3NbMF1bc3RhcnRBdFN5bWJvbF0gPSBzdGFydEF0O1xuICAgIGFyZ3NbMF0ucmVxW3N0YXJ0QXRTeW1ib2xdID0gc3RhcnRBdDtcbiAgICBhcmdzWzBdLnJlcXVlc3Rbc3RhcnRBdFN5bWJvbF0gPSBzdGFydEF0O1xuICAgIGFyZ3NbMF1bc3RhcnRUaW1lU3ltYm9sXSA9IHN0YXJ0VGltZTtcbiAgICBhcmdzWzBdLnJlcVtzdGFydFRpbWVTeW1ib2xdID0gc3RhcnRUaW1lO1xuICAgIGFyZ3NbMF0ucmVxdWVzdFtzdGFydFRpbWVTeW1ib2xdID0gc3RhcnRUaW1lO1xuXG4gICAgLy8gcGluby1odHRwIHN1cHBvcnRcbiAgICBhcmdzWzBdW3Bpbm9IdHRwU3RhcnRBdFN5bWJvbF0gPSBzdGFydEF0O1xuICAgIGFyZ3NbMF0ucmVxW3Bpbm9IdHRwU3RhcnRBdFN5bWJvbF0gPSBzdGFydEF0O1xuICAgIGFyZ3NbMF0ucmVxdWVzdFtwaW5vSHR0cFN0YXJ0QXRTeW1ib2xdID0gc3RhcnRBdDtcbiAgICBhcmdzWzBdW3Bpbm9IdHRwU3RhcnRUaW1lU3ltYm9sXSA9IHN0YXJ0VGltZTtcbiAgICBhcmdzWzBdLnJlcVtwaW5vSHR0cFN0YXJ0VGltZVN5bWJvbF0gPSBzdGFydFRpbWU7XG4gICAgYXJnc1swXS5yZXF1ZXN0W3Bpbm9IdHRwU3RhcnRUaW1lU3ltYm9sXSA9IHN0YXJ0VGltZTtcbiAgfVxuXG4gIHJldHVybiBpc0V4cHJlc3MgPyBhcmdzWzJdKCkgOiBhcmdzWzFdKCk7XG59O1xuIl19