{"version":3,"sources":["jsdelivr-header.js","/npm/microkit@0.12.2/lib/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,MAAM,KAAO,QAAQ,QACf,EAAI,QAAQ,UACZ,QAAU,QAAQ,YAElB,MAAQ,QAAQ,WAEhB,OAAS,QAAQ,YACjB,aAAe,QAAQ,WACvB,qBAAuB,QAAQ,WAC/B,eAAiB,QAAQ,aACzB,cAAgB,QAAQ,YACxB,WAAa,QAAQ,SACrB,QAAU,QAAQ,aAClB,OAAS,QAAQ,YAEvB,MAAM,SACJ,WAAA,CAAY,GACV,MAAM,EAAY,QAAQ,IAAI,iBAAmB,KAAK,KAAK,QAAQ,MAAO,UACpE,EAAM,QAAQ,IAAI,SAClB,EAAiB,CACrB,MAAO,CAAC,KAAM,OACd,QAAS,CAAC,KAAM,OAChB,MAAO,CAAC,KAAM,OACd,OAAQ,CAAC,KAAM,UAAW,UAAW,UACrC,aAAc,CAAC,KAAM,UAAW,UAAW,UAC3C,IAAK,CAAC,KAAM,WACZ,OAAQ,CACN,UAAW,CAAC,CACV,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,gBAC3B,eAAe,GACd,CACD,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,gBAC3B,eAAe,GACd,CACD,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,cAC3B,eAAe,GACd,CACD,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,GAAG,UAC9B,eAAe,GACd,CACD,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,GAAG,UAC9B,eAAe,GACd,CACD,KAAM,OACN,KAAM,KAAK,KAAK,EAAW,GAAG,QAC9B,eAAe,GACd,CACD,KAAM,MACN,KAAM,KAAK,KAAK,EAAW,qCAC3B,eAAe,GACd,CACD,KAAM,MACN,KAAM,KAAK,KAAK,EAAW,qCAC3B,eAAe,KAGnB,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,aAkBF,GAfA,KAAK,aAAe,IAAI,aACxB,KAAK,qBAAuB,IAAI,qBAChC,KAAK,eAAiB,IAAI,eAC1B,KAAK,cAAgB,IAAI,cACzB,KAAK,WAAa,IAAI,WAEtB,KAAK,MAAQ,IAAI,MACjB,KAAK,UAAY,GACjB,KAAK,kBAAoB,GAEzB,KAAK,QAAU,EAAE,aAAa,GAAW,CAAC,EAAG,GACzC,KAAK,QAAQ,aACf,KAAK,QAAU,EAAE,aAAa,KAAK,OAAO,SAAU,KAAK,WAGtD,KAAK,QAAQ,KAChB,MAAM,IAAI,MAAM,kCAGd,KAAK,QAAQ,cACf,QAAQ,KAAK,qBAAqB,IAChC,KAAK,OAAO,MAAM,oBAAqB,GAEhC,KAAK,MAAM,QAAQ,EAAK,CAAC,EAAG,CAAC,MAAM,IAAO,SAAQ,KACvD,GAAI,KAAK,QAAQ,mBACf,OAAO,KAAK,OAAO,MAAK,KACtB,QAAQ,KAAK,EAAE,GAEnB,OAIJ,QAAQ,KAAK,sBAAsB,IACjC,KAAK,OAAO,MAAM,qBAAsB,GAEjC,KAAK,MAAM,QAAQ,EAAK,CAAC,EAAG,CAAC,MAAM,IAAO,SAAQ,KACvD,GAAI,KAAK,QAAQ,mBACf,OAAO,KAAK,OAAO,MAAK,KACtB,QAAQ,KAAK,EAAE,GAEnB,QAKF,KAAK,QAAQ,aACf,QAAQ,GAAG,UAAU,KACnB,KAAK,OAAO,MAAK,IAAM,QAAQ,QAAO,IAI1C,QAAQ,GAAG,QAAQ,IACjB,KAAK,OAAO,KAAK,OAAQ,CAAC,OAAQ,GAAK,IAGzC,KAAK,aAAe,KAAK,cAAc,OACrC,KAAK,QAAQ,aAAa,KAC1B,EAAE,KAAK,KAAK,QAAQ,aAAc,QAEtC,CAEA,QAAI,GACF,OAAO,KAAK,QAAQ,IACtB,CAEA,IAAA,GACE,OAAO,QAAQ,IAAI,KAAK,mBAAmB,GAAW,MAAW,MAC/D,IACS,QAAQ,IAAI,KAAK,WAAW,GAAW,OAGpD,CAEA,WAAA,CAAY,GAEV,OADA,KAAK,QAAO,IAAM,EAAQ,YAAW,GAC9B,CACT,CAEA,WAAA,CAAY,GACV,MAAO,CACL,QAAS,KAAK,QAAQ,KACtB,MAAO,KAAK,MACZ,OAAQ,KAAK,aAAa,OAAO,GAErC,CAEA,SAAI,GACF,OAAO,KAAK,MAAM,SAAS,IAAM,KAAK,YACpC,KAAK,aAAa,OAChB,KAAK,QAAQ,MAAM,KACnB,EAAE,KAAK,KAAK,QAAQ,MAAO,QAC3B,KAAK,YAAY,YAGvB,CAEA,UAAI,GACF,OAAO,KAAK,MAAM,UAAU,IAAM,KAAK,YACrC,KAAK,cAAc,OACjB,KAAK,QAAQ,OAAO,KACpB,EAAE,KAAK,KAAK,QAAQ,OAAQ,QAC5B,KAAK,YAAY,aAGvB,CAEA,SAAI,GACF,OAAO,KAAK,MAAM,SAAS,IAAM,KAAK,qBAAqB,OACzD,KAAK,QAAQ,MAAM,KACnB,EAAE,KAAK,KAAK,QAAQ,MAAO,QAC3B,CACE,QAAS,KAAK,QAAQ,KACtB,OAAQ,KAAK,aAAa,OAAO,YAGvC,CAEA,UAAI,GACF,OAAO,MACT,CAEA,WAAI,GACF,OAAO,KAAK,MAAM,WAAW,IAAM,KAAK,eAAe,OACrD,KAAK,QAAQ,QAAQ,KACrB,EAAE,KAAK,KAAK,QAAQ,QAAS,QAC7B,KAAK,YAAY,aAErB,CAEA,OAAI,GACF,OAAO,KAAK,MAAM,OAAO,IAAM,KAAK,WAAW,OAC7C,KAAK,QAAQ,IAAI,KACjB,EAAE,KAAK,KAAK,QAAQ,IAAK,QACzB,KAAK,YAAY,SAErB,CAEA,WAAI,GACF,OAAO,KAAK,MAAM,WAAW,IAAM,KAAK,YACtC,IAAI,QAAQ,KAAK,QAAQ,QAAS,KAAK,YAAY,cAEvD,CAEA,UAAI,GACF,OAAO,KAAK,MAAM,UAAU,IAAM,IAAI,OAAO,KAAK,QAAQ,SAC5D,CAEA,MAAA,CAAO,EAAS,GACd,GAAI,EACF,OAAO,KAAK,kBAAkB,KAAK,GAGrC,KAAK,UAAU,KAAK,EACtB,EAGF,OAAO,QAAU,SAAU,GAEzB,GAAI,EAAQ,cAAe,CACzB,IAAI,EACJ,MAAM,EAAgB,QAAQ,EAAQ,eAGpC,EADE,EAAE,WAAW,GACA,EAAc,GAEd,EAGjB,EAAE,aAAa,EAAS,EAC1B,CAEA,OAAO,IAAI,SAAS,EACtB","file":"/npm/microkit@0.12.2/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/microkit@0.12.2/lib/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 path = require('path');\nconst _ = require('lodash');\nconst Promise = require('bluebird');\n\nconst Cache = require('./cache');\n\nconst errors = require('./errors');\nconst QueueFactory = require('./queue');\nconst ErrorReporterFactory = require('./error');\nconst MetricsFactory = require('./metrics');\nconst LoggerFactory = require('./logger');\nconst ApiFactory = require('./api');\nconst Express = require('./express');\nconst Config = require('./config');\n\nclass MicroKit {\n  constructor(options) {\n    const configDir = process.env.NODE_CONFIG_DIR || path.join(process.cwd(), 'config');\n    const env = process.env.NODE_ENV;\n    const defaultOptions = {\n      queue: {name: 'log'},\n      metrics: {name: 'log'},\n      error: {name: 'log'},\n      logger: {name: 'console', formatter: 'pretty'},\n      systemLogger: {name: 'console', formatter: 'pretty'},\n      api: {name: 'swagger'},\n      config: {\n        providers: [{\n          name: 'file',\n          file: path.join(configDir, 'default.json'),\n          ignoreMissing: true\n        }, {\n          name: 'file',\n          file: path.join(configDir, 'default.yaml'),\n          ignoreMissing: true\n        }, {\n          name: 'file',\n          file: path.join(configDir, 'default.js'),\n          ignoreMissing: true\n        }, {\n          name: 'file',\n          file: path.join(configDir, `${env}.json`),\n          ignoreMissing: true\n        }, {\n          name: 'file',\n          file: path.join(configDir, `${env}.yaml`),\n          ignoreMissing: true\n        }, {\n          name: 'file',\n          file: path.join(configDir, `${env}.js`),\n          ignoreMissing: true\n        }, {\n          name: 'env',\n          file: path.join(configDir, 'custom-environment-variables.json'),\n          ignoreMissing: true\n        }, {\n          name: 'env',\n          file: path.join(configDir, 'custom-environment-variables.yaml'),\n          ignoreMissing: true\n        }]\n      },\n      catchGlobal: true,\n      catchSigint: true,\n      restartOnException: false, // automatic restart can cause errors\n      configDir\n    };\n\n    this.queueFactory = new QueueFactory();\n    this.errorReporterFactory = new ErrorReporterFactory();\n    this.metricsFactory = new MetricsFactory();\n    this.loggerFactory = new LoggerFactory();\n    this.apiFactory = new ApiFactory();\n\n    this.cache = new Cache();\n    this.runOnExit = [];\n    this.runOnExitInternal = [];\n\n    this.options = _.defaultsDeep(options || {}, defaultOptions);\n    if (this.options.loadConfig) {\n      this.options = _.defaultsDeep(this.config.microkit, this.options);\n    }\n\n    if (!this.options.name) {\n      throw new Error('application name not specified');\n    }\n\n    if (this.options.catchGlobal) {\n      process.once('uncaughtException', err => {\n        this.logger.error('uncaughtException', err);\n\n        return this.error.capture(err, {}, {wait: true}).finally(() => {\n          if (this.options.restartOnException) {\n            return this.exit().then(() => {\n              process.exit(1);\n            });\n          }\n        });\n      });\n\n      process.once('unhandledRejection', err => {\n        this.logger.error('unhandledRejection', err);\n\n        return this.error.capture(err, {}, {wait: true}).finally(() => {\n          if (this.options.restartOnException) {\n            return this.exit().then(() => {\n              process.exit(1);\n            });\n          }\n        });\n      });\n    }\n\n    if (this.options.catchSigint) {\n      process.on('SIGINT', () => {\n        this.exit().then(() => process.exit());\n      });\n    }\n\n    process.on('exit', sig => {\n      this.logger.info('exit', {signal: sig});\n    });\n\n    this.systemLogger = this.loggerFactory.create(\n      this.options.systemLogger.name,\n      _.omit(this.options.systemLogger, 'name')\n    );\n  }\n\n  get name() {\n    return this.options.name;\n  }\n\n  exit() {\n    return Promise.map(this.runOnExitInternal, handler => handler()).then(\n      () => {\n        return Promise.map(this.runOnExit, handler => handler());\n      }\n    );\n  }\n\n  _toDisposal(service) {\n    this.onExit(() => service.dispose(), true);\n    return service;\n  }\n\n  _getContext(component) {\n    return {\n      service: this.options.name,\n      error: this.error,\n      logger: this.systemLogger.create(component)\n    };\n  }\n\n  get queue() {\n    return this.cache('queue', () => this._toDisposal(\n      this.queueFactory.create(\n        this.options.queue.name,\n        _.omit(this.options.queue, 'name'),\n        this._getContext('queue')\n      )\n    ));\n  }\n\n  get logger() {\n    return this.cache('logger', () => this._toDisposal(\n      this.loggerFactory.create(\n        this.options.logger.name,\n        _.omit(this.options.logger, 'name'),\n        this._getContext('logger')\n      )\n    ));\n  }\n\n  get error() {\n    return this.cache('error', () => this.errorReporterFactory.create(\n      this.options.error.name,\n      _.omit(this.options.error, 'name'),\n      {\n        service: this.options.name,\n        logger: this.systemLogger.create('error')\n      }\n    ));\n  }\n\n  get errors() {\n    return errors;\n  }\n\n  get metrics() {\n    return this.cache('metrics', () => this.metricsFactory.create(\n      this.options.metrics.name,\n      _.omit(this.options.metrics, 'name'),\n      this._getContext('metrics')\n    ));\n  }\n\n  get api() {\n    return this.cache('api', () => this.apiFactory.create(\n      this.options.api.name,\n      _.omit(this.options.api, 'name'),\n      this._getContext('api')\n    ));\n  }\n\n  get express() {\n    return this.cache('express', () => this._toDisposal(\n      new Express(this.options.express, this._getContext('express'))\n    ));\n  }\n\n  get config() {\n    return this.cache('config', () => new Config(this.options.config));\n  }\n\n  onExit(handler, internal) {\n    if (internal) {\n      return this.runOnExitInternal.push(handler);\n    }\n\n    this.runOnExit.push(handler);\n  }\n}\n\nmodule.exports = function (options) {\n  // load microkit options from config\n  if (options.optionsModule) {\n    let extraOptions;\n    const optionsModule = require(options.optionsModule);\n\n    if (_.isFunction(optionsModule)) {\n      extraOptions = optionsModule(options);\n    } else {\n      extraOptions = optionsModule;\n    }\n\n    _.defaultsDeep(options, extraOptions);\n  }\n\n  return new MicroKit(options);\n};\n"]}