{"version":3,"file":"logger.mjs","sources":["../../src/services/logger.ts"],"sourcesContent":["import chalk from 'chalk';\nimport stringify from 'fast-safe-stringify';\n\nimport ora from 'ora';\nimport * as cliProgress from 'cli-progress';\n\nexport interface LoggerOptions {\n  silent?: boolean;\n  debug?: boolean;\n  timestamp?: boolean;\n}\n\nexport interface Logger {\n  warnings: number;\n  errors: number;\n  debug: (...args: unknown[]) => void;\n  info: (...args: unknown[]) => void;\n  success: (...args: unknown[]) => void;\n  warn: (...args: unknown[]) => void;\n  error: (...args: unknown[]) => void;\n  log: (...args: unknown[]) => void;\n  spinner: (text: string) => Pick<ora.Ora, 'succeed' | 'fail' | 'start' | 'text' | 'isSpinning'>;\n  progressBar: (\n    totalSize: number,\n    text: string\n  ) => Pick<cliProgress.SingleBar, 'start' | 'stop' | 'update'>;\n}\n\nconst stringifyArg = (arg: unknown) => {\n  return typeof arg === 'object' ? stringify(arg) : arg;\n};\n\nconst createLogger = (options: LoggerOptions = {}): Logger => {\n  const { silent = false, debug = false, timestamp = true } = options;\n\n  const state = { errors: 0, warning: 0 };\n\n  return {\n    get warnings() {\n      return state.warning;\n    },\n\n    get errors() {\n      return state.errors;\n    },\n\n    async debug(...args) {\n      if (silent || !debug) {\n        return;\n      }\n\n      console.log(\n        chalk.cyan(`[DEBUG]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    info(...args) {\n      if (silent) {\n        return;\n      }\n\n      console.info(\n        chalk.blue(`[INFO]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    log(...args) {\n      if (silent) {\n        return;\n      }\n\n      console.info(\n        chalk.blue(`${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    success(...args) {\n      if (silent) {\n        return;\n      }\n\n      console.info(\n        chalk.green(`[SUCCESS]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    warn(...args) {\n      state.warning += 1;\n\n      if (silent) {\n        return;\n      }\n\n      console.warn(\n        chalk.yellow(`[WARN]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    error(...args) {\n      state.errors += 1;\n\n      if (silent) {\n        return;\n      }\n\n      console.error(\n        chalk.red(`[ERROR]${timestamp ? `\\t[${new Date().toISOString()}]` : ''}`),\n        ...args.map(stringifyArg)\n      );\n    },\n\n    // @ts-expect-error – returning a subpart of ora is fine because the types tell us what is what.\n    spinner(text: string) {\n      if (silent) {\n        return {\n          succeed() {\n            return this;\n          },\n          fail() {\n            return this;\n          },\n          start() {\n            return this;\n          },\n          text: '',\n          isSpinning: false,\n        };\n      }\n\n      return ora(text);\n    },\n\n    progressBar(totalSize: number, text: string) {\n      if (silent) {\n        return {\n          start() {\n            return this;\n          },\n          stop() {\n            return this;\n          },\n          update() {\n            return this;\n          },\n        };\n      }\n\n      const progressBar = new cliProgress.SingleBar({\n        format: `${text ? `${text} |` : ''}${chalk.green('{bar}')}| {percentage}%`,\n        barCompleteChar: '\\u2588',\n        barIncompleteChar: '\\u2591',\n        hideCursor: true,\n        forceRedraw: true,\n      });\n\n      progressBar.start(totalSize, 0);\n\n      return progressBar;\n    },\n  };\n};\n\nexport { createLogger };\n"],"names":["stringifyArg","arg","stringify","createLogger","options","silent","debug","timestamp","state","errors","warning","warnings","args","console","log","chalk","cyan","Date","toISOString","map","info","blue","success","green","warn","yellow","error","red","spinner","text","succeed","fail","start","isSpinning","ora","progressBar","totalSize","stop","update","cliProgress","SingleBar","format","barCompleteChar","barIncompleteChar","hideCursor","forceRedraw"],"mappings":"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"}