{"version":3,"sources":["jsdelivr-header.js","/npm/larvitbase@4.0.126/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,MAAM,aAAe,eAAiB,WAAa,MAC7C,aAAe,QAAQ,UAAU,cACjC,IAAE,KAAa,QAAQ,eACvB,KAAa,QAAQ,QACrB,KAAe,QAAQ,QAO7B,SAAS,IAAI,GACZ,MAAM,EAAY,KAElB,EAAK,QAAU,GAAW,CAAC,EAErB,EAAK,QAAQ,MAClB,EAAK,QAAQ,IAAM,IAAI,KAExB,EAAK,IAAM,EAAK,QAAQ,IAGpB,EAAK,QAAQ,aAChB,EAAK,QAAQ,YAAc,EAAK,QAAQ,YAGzC,EAAK,YAAc,EAAK,QAAQ,WACjC,CAEA,IAAI,UAAY,OAAO,OAAO,aAAa,WAE3C,IAAI,UAAU,UAAY,SAAmB,EAAK,GACjD,MAAM,EAAY,aAAe,iBAC3B,EAAY,KAElB,EAAI,KAAO,KAAK,KAChB,EAAI,IAAM,EAAK,IAEf,EAAK,IAAI,MAAM,EAAY,aAAe,EAAI,KAAO,YAAc,EAAK,OAAO,GAAO,YAEtF,EAAI,OAAkB,CAAC,EACvB,EAAI,OAAO,SAAW,EAAK,aAC3B,EAAK,cAAc,EAAG,EAAK,EAC5B,EAEA,IAAI,UAAU,WAAa,SAAoB,GAK9C,OAJM,IACL,EAAS,QAAQ,UAGE,IAAZ,EAAO,GAAc,EAAO,GAAK,GAC1C,EAEA,IAAI,UAAU,cAAgB,SAAuB,EAAI,EAAK,GAC7D,MAAM,EAAY,aAAe,qBAC3B,EAAY,KAElB,GAAI,EAAK,YAAY,GAAK,CACzB,MAAM,EAAkB,EAAK,aAE7B,EAAK,YAAY,GAAI,EAAK,GAAK,SAAY,GAC1C,MAAM,GAAW,EAAK,aAAe,GAAiB,QAAQ,GAE9D,GAAI,EAGH,OAFA,EAAK,IAAI,KAAK,EAAY,6BAA+B,EAAI,OAEtD,EAAK,KAAK,QAAS,EAAK,EAAK,GAGrC,EAAI,OAAO,cAAgB,OAAO,GAAI,SAAS,EAAG,MAAQ,CACzD,QAAW,EACX,KAAW,EAAK,YAAY,GAAI,MAEjC,EAAK,IAAI,MAAM,EAAY,aAAe,EAAI,KAAO,eAAiB,OAAO,GAAI,SAAS,EAAG,KAAO,KAAO,EAAK,YAAY,GAAI,KAAO,MAAQ,GAG/I,EAAK,cAAc,EAAK,EAAG,EAAK,EACjC,GACD,MACC,EAAI,OAAO,OAAa,EAAK,aAC7B,EAAI,OAAO,YAAc,EAAI,OAAO,OAAS,EAAI,OAAO,UAAU,QAAQ,GAC1E,EAAK,IAAI,MAAM,EAAY,aAAe,EAAI,KAAO,YAAc,EAAK,OAAO,GAAO,yBAA2B,EAAI,OAAO,WAAa,KAE3I,EAEA,IAAI,UAAU,MAAQ,SAAe,GACpC,MAAM,EAAY,aAAe,aAC3B,EAAY,KAElB,IAAM,MAAM,QAAQ,EAAK,aAAc,CACtC,MAAM,EAAM,IAAI,MAAM,uCAItB,OAFA,EAAK,IAAI,MAAM,EAAY,EAAI,SAExB,EAAG,EACX,CAEA,EAAK,WAAa,KAAK,cAAa,SAAmB,EAAK,GAC3D,EAAK,UAAU,EAAK,EACrB,IAEA,EAAK,WAAW,GAAG,aAAa,WAC/B,EAAK,IAAI,KAAK,EAAY,iCAAmC,EAAK,WAAW,UAAU,KACxF,IAEA,EAAK,WAAW,OAAO,EAAK,QAAQ,YAAa,EAClD,EAEA,IAAI,UAAU,OAAS,SAAgB,GAEtC,OAAS,GAAS,EAAI,IAAW,EAAI,IAAI,QAAQ,mBAAoB,kBAAzC,EAC7B,EAEA,QAAU,OAAO,QAAU","file":"/npm/larvitbase@4.0.126/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/larvitbase@4.0.126/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst topLogPrefix = 'larvitbase: ' + __filename + ' - ';\nconst EventEmitter = require('events').EventEmitter;\nconst { Log }      = require('larvitutils');\nconst uuid       = require('uuid');\nconst http         = require('http');\n\n/**\n * App constructor\n *\n * @param {obj} options {'log': log instance, 'middlewares': array of middlewares}\n */\nfunction App(options) {\n\tconst that      = this;\n\n\tthat.options = options || {};\n\n\tif (! that.options.log) {\n\t\tthat.options.log = new Log();\n\t}\n\tthat.log = that.options.log;\n\n\t// Backwards compatible with 2.0 and 2.1\n\tif (that.options.middleware) {\n\t\tthat.options.middlewares = that.options.middleware;\n\t}\n\n\tthat.middlewares = that.options.middlewares;\n}\n\nApp.prototype = Object.create(EventEmitter.prototype);\n\nApp.prototype.handleReq = function handleReq(req, res) {\n\tconst logPrefix = topLogPrefix + 'handleReq() - ';\n\tconst that      = this;\n\n\treq.uuid = uuid.v4();\n\treq.log = that.log;\n\n\tthat.log.debug(logPrefix + 'req.uuid: ' + req.uuid + ' to url: ' + that.logUrl(req) + ' started');\n\n\treq.timing          = {};\n\treq.timing.reqStart = that.hrTimeToMs();\n\tthat.runMiddleware(0, req, res);\n};\n\nApp.prototype.hrTimeToMs = function hrTimeToMs(hrtime) {\n\tif (! hrtime) {\n\t\thrtime = process.hrtime();\n\t}\n\n\treturn (hrtime[0] * 1000) + (hrtime[1] / 1000000);\n};\n\nApp.prototype.runMiddleware = function runMiddleware(nr, req, res) {\n\tconst logPrefix = topLogPrefix + 'runMiddleware() - ';\n\tconst that      = this;\n\n\tif (that.middlewares[nr]) {\n\t\tconst middlewareStart = that.hrTimeToMs();\n\n\t\tthat.middlewares[nr](req, res, function cb(err) {\n\t\t\tconst runTime = (that.hrTimeToMs() - middlewareStart).toFixed(3);\n\n\t\t\tif (err) {\n\t\t\t\tthat.log.warn(logPrefix + 'Error running middleware: ' + err.stack);\n\n\t\t\t\treturn that.emit('error', err, req, res);\n\t\t\t}\n\n\t\t\treq.timing['middleware_' + String(nr).padStart(3, '0')] = {\n\t\t\t\t'runTime': runTime,\n\t\t\t\t'name':    that.middlewares[nr].name\n\t\t\t};\n\t\t\tthat.log.debug(logPrefix + 'req.uuid: ' + req.uuid + ' middleware_' + String(nr).padStart(3, '0') + ' (' + that.middlewares[nr].name + '): ' + runTime);\n\n\t\t\t// Run the next middleware\n\t\t\tthat.runMiddleware(nr + 1, req, res);\n\t\t});\n\t} else {\n\t\treq.timing.reqEnd     = that.hrTimeToMs();\n\t\treq.timing.totReqTime = (req.timing.reqEnd - req.timing.reqStart).toFixed(3);\n\t\tthat.log.debug(logPrefix + 'req.uuid: ' + req.uuid + ' to url: ' + that.logUrl(req) + ' completed, run time: ' + req.timing.totReqTime + 'ms');\n\t}\n};\n\nApp.prototype.start = function start(cb) {\n\tconst logPrefix = topLogPrefix + 'start() - ';\n\tconst that      = this;\n\n\tif (! Array.isArray(that.middlewares)) {\n\t\tconst err = new Error('At least one middleware is required');\n\n\t\tthat.log.error(logPrefix + err.message);\n\n\t\treturn cb(err);\n\t}\n\n\tthat.httpServer = http.createServer(function handleReq(req, res) {\n\t\tthat.handleReq(req, res);\n\t});\n\n\tthat.httpServer.on('listening', function cb() {\n\t\tthat.log.info(logPrefix + 'http server listening on port ' + that.httpServer.address().port);\n\t});\n\n\tthat.httpServer.listen(that.options.httpOptions, cb);\n};\n\nApp.prototype.logUrl = function logUrl(req) {\n\t// Do not log password\n\treturn ! req || ! req.url ? '' : req.url.replace(/password=[^&]*/ig, 'password=xxxxx');\n};\n\nexports = module.exports = App;\n"]}