{"version":3,"sources":["../src/start.ts"],"names":["start","config","then","logger","startWithLoggerAndConfig","catch","shutdownRequests","handleError","exc","error","process","exit","finish","exitCode","run","setUncaughtExceptionCaptureCallback","on","log","shutdown","mod","console","dump","err","teardown","undefined","isShuttingDown"],"mappings":";;;;;;;AAAA;;AAEA;;;;;;AAEO,SAASA,KAAT,CAAeC,MAAf,EAAuC;AAC5C,oDAA2BA,MAA3B,EACGC,IADH,CACSC,MAAD,IAAY;AAChBC,IAAAA,wBAAwB,CAACH,MAAD,EAASE,MAAT,CAAxB;AACD,GAHH,EAIGE,KAJH,CAIS,MAAM;AACX;AACA;AACA;AACD,GARH;AASD;;AAED,IAAIC,gBAAgB,GAAG,CAAvB;;AAEA,SAASF,wBAAT,CAAkCH,MAAlC,EAA0DE,MAA1D,EAA+E;AAC7E,WAASI,WAAT,CAAqBC,GAArB,EAAmC;AACjCL,IAAAA,MAAM,CAACM,KAAP,CAAa,MAAb,EAAqBD,GAArB;AACAE,IAAAA,OAAO,CAACC,IAAR,CAAa,CAAb;AACD;;AAED,WAASC,MAAT,GAAkB;AAChBF,IAAAA,OAAO,CAACG,QAAR,GAAmB,CAAnB;AACD;;AAED,iBAAeC,GAAf,GAAqB;AACnBJ,IAAAA,OAAO,CAACK,mCAAR,CAA4CR,WAA5C;AAEAG,IAAAA,OAAO,CAACM,EAAR,CAAW,QAAX,EAAqB,MAAM;AACzBb,MAAAA,MAAM,CAACc,GAAP,CAAW,oCAAX;AAEAC,MAAAA,QAAQ,GAAGhB,IAAX,CAAgBU,MAAhB,EAAwBP,KAAxB,CAA8BE,WAA9B;AAEAD,MAAAA,gBAAgB,IAAI,CAApB;;AACA,UAAIA,gBAAgB,GAAG,CAAvB,EAA0B;AACxB,qEAAO,SAAP,IACGJ,IADH,CACSiB,GAAD,IAAS;AACbC,UAAAA,OAAO,CAACH,GAAR,CAAY,oBAAZ;AACAE,UAAAA,GAAG,CAACE,IAAJ;AACAD,UAAAA,OAAO,CAACH,GAAR,CAAY,GAAZ;AACD,SALH,EAMGZ,KANH,CAMUiB,GAAD,IAAS;AACdF,UAAAA,OAAO,CAACH,GAAR,CAAYK,GAAZ;AACD,SARH;AASD;;AACD,UAAIhB,gBAAgB,GAAG,CAAvB,EAA0B;AACxBI,QAAAA,OAAO,CAACC,IAAR,CAAa,CAAb;AACD;AACF,KApBD;AAsBAD,IAAAA,OAAO,CAACM,EAAR,CAAW,SAAX,EAAsB,MAAM;AAC1Bb,MAAAA,MAAM,CAACc,GAAP,CAAW,qCAAX;AAEAC,MAAAA,QAAQ,GAAGhB,IAAX,CAAgBU,MAAhB,EAAwBP,KAAxB,CAA8BE,WAA9B;AACD,KAJD;AAMA,UAAMgB,QAAQ,GAAG,MAAM,0BAAUtB,MAAV,EAAkBuB,SAAlB,EAA6BrB,MAA7B,CAAvB;AAEA,QAAIsB,cAAc,GAAG,KAArB;;AACA,UAAMP,QAAQ,GAAG,YAAY;AAC3B,UAAIO,cAAJ,EAAoB;AAClB;AACD;;AACDA,MAAAA,cAAc,GAAG,IAAjB;AACA,YAAMF,QAAQ,EAAd;AACD,KAND;AAOD;;AAEDT,EAAAA,GAAG,GAAGT,KAAN,CAAYE,WAAZ;AACD","sourcesContent":["import { startCore } from './startCore';\nimport { IServiceConfig, BasicLogger } from './shared';\nimport { initializeLoggerOrFallback } from './setup/initializeLogger';\n\nexport function start(config: IServiceConfig) {\n  initializeLoggerOrFallback(config)\n    .then((logger) => {\n      startWithLoggerAndConfig(config, logger);\n    })\n    .catch(() => {\n      // logger initialization cannot throw\n      // this handler here is to supress warning\n      return;\n    });\n}\n\nlet shutdownRequests = 0;\n\nfunction startWithLoggerAndConfig(config: IServiceConfig, logger: BasicLogger) {\n  function handleError(exc: unknown) {\n    logger.error('💥  ', exc);\n    process.exit(1);\n  }\n\n  function finish() {\n    process.exitCode = 0;\n  }\n\n  async function run() {\n    process.setUncaughtExceptionCaptureCallback(handleError);\n\n    process.on('SIGINT', () => {\n      logger.log('\\nShutting down due to SIGINT...\\n');\n\n      shutdown().then(finish).catch(handleError);\n\n      shutdownRequests += 1;\n      if (shutdownRequests > 1) {\n        import('wtfnode')\n          .then((mod) => {\n            console.log('== Open Handles ==');\n            mod.dump();\n            console.log(' ');\n          })\n          .catch((err) => {\n            console.log(err);\n          });\n      }\n      if (shutdownRequests > 5) {\n        process.exit(1);\n      }\n    });\n\n    process.on('SIGTERM', () => {\n      logger.log('\\nShutting down due to SIGTERM...\\n');\n\n      shutdown().then(finish).catch(handleError);\n    });\n\n    const teardown = await startCore(config, undefined, logger);\n\n    let isShuttingDown = false;\n    const shutdown = async () => {\n      if (isShuttingDown) {\n        return;\n      }\n      isShuttingDown = true;\n      await teardown();\n    };\n  }\n\n  run().catch(handleError);\n}\n"],"file":"start.js"}