{"version":3,"sources":["../../src/utils/cli.utils.ts"],"names":["logger","execa","path","fs"],"mappings":"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","file":"cli.utils.cjs","sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\n\nimport { execa } from 'execa';\n\nimport type {\n  FormatCommandOptions,\n  FormatTool,\n  LintCommandOptions,\n  LintTool,\n  ToolSelectionOptions,\n} from '#types/option.types';\nimport { logger } from '#utils/logger.utils';\n\nexport const runCommand = async (\n  tool: string,\n  args: string[],\n  label: string,\n): Promise<boolean> => {\n  logger.info(`Running: ${tool} ${args.join(' ')}`);\n  try {\n    await execa(tool, args, { stdio: 'inherit', preferLocal: true });\n\n    logger.success(`${label} check passed.`);\n\n    return true;\n  } catch (error) {\n    logger.error(`${label} check failed.`, error);\n    return false;\n  }\n};\n\nexport const getToolsToRun = <TTool extends LintTool | FormatTool>(\n  allTools: readonly TTool[],\n  options: ToolSelectionOptions<TTool>,\n): TTool[] => {\n  let toolsToRun: TTool[] = [...allTools];\n  switch (true) {\n    case options.only && allTools.includes(options.only):\n      toolsToRun = [options.only];\n      break;\n    case options.only && !allTools.includes(options.only):\n      logger.error(\n        `Warning: Tool specified in 'only' (\"${options.only}\") is not available for this command.\n        \\nAvailable: ${allTools.join(', ')}. No tools will be run.`,\n      );\n      toolsToRun = [];\n      break;\n    case options.skip && options.skip.length > 0: {\n      const skipSet = new Set(options.skip);\n      toolsToRun = toolsToRun.filter((tool) => !skipSet.has(tool));\n      break;\n    }\n    default:\n      break;\n  }\n\n  if (options.only) {\n    if (allTools.includes(options.only)) {\n      toolsToRun = [options.only];\n    }\n  } else if (options.skip) {\n    const skipSet = new Set(options.skip);\n    toolsToRun = toolsToRun.filter((tool) => !skipSet.has(tool));\n  }\n\n  return toolsToRun;\n};\n\nexport const handleCache = async (\n  options: LintCommandOptions | FormatCommandOptions,\n  toolArgs: string[],\n  defaultCacheLocation: string,\n): Promise<void> => {\n  const cacheFlag: string = '--cache';\n  const cacheLocationFlag: string = '--cache-location';\n  const cacheLocation = options.cacheLocation || defaultCacheLocation;\n  const cacheLocationResolved = path.resolve(process.cwd(), cacheLocation);\n\n  if (options.refreshCache) {\n    logger.info(`Refreshing cache at ${cacheLocationResolved}`);\n    try {\n      await execa('rimraf', [cacheLocationResolved], { stdio: 'pipe' });\n    } catch (err) {\n      logger.warn(`Failed to delete cache at ${cacheLocationResolved}`, err);\n    }\n  } else if (options.cache) {\n    toolArgs.push(cacheFlag);\n    if (options.cacheLocation) {\n      toolArgs.push(cacheLocationFlag, cacheLocationResolved);\n    }\n  } else if (!options.cache) {\n    logger.info('Cache disabled');\n  }\n};\n\nexport const handlePrettierIgnore = async (\n  options: { ignorePath?: string },\n  prettierArgs: string[],\n): Promise<void> => {\n  const ignorePathOption: string | undefined = options.ignorePath;\n  if (ignorePathOption) {\n    try {\n      const ignorePathResolved = path.resolve(process.cwd(), ignorePathOption);\n\n      await fs.access(ignorePathResolved);\n\n      prettierArgs.push('--ignore-path', ignorePathResolved);\n      logger.info(`Using Prettier ignore path: ${ignorePathResolved}`);\n    } catch {\n      logger.warn(\n        `Prettier ignore path not found at ${ignorePathOption}, skipping...`,\n      );\n    }\n  } else {\n    logger.info(\n      'No --ignore-path provided. Prettier might use local .gitignore and .prettierignore if found.',\n    );\n  }\n};\n\nexport const runPrettier = async <\n  TOptions extends {\n    cache?: boolean;\n    refreshCache?: boolean;\n    cacheLocation?: string;\n    ignorePath?: string;\n  },\n>(\n  files: string[],\n  options: TOptions,\n  isCheck: boolean,\n): Promise<boolean> => {\n  const prettierArgs = [isCheck ? '--check' : '--write', '--ignore-unknown'];\n\n  await handleCache(\n    options,\n    prettierArgs,\n    './node_modules/.cache/prettier/.prettier-cache',\n  );\n  await handlePrettierIgnore(options, prettierArgs);\n\n  prettierArgs.push(...files);\n\n  return runCommand(\n    'prettier',\n    prettierArgs,\n    isCheck ? 'Prettier Check' : 'Prettier Format',\n  );\n};\n\nexport const runEslint = async (\n  files: string[],\n  options: LintCommandOptions | FormatCommandOptions,\n  isFix: boolean,\n): Promise<boolean> => {\n  const eslintArgs = [];\n\n  if (isFix) eslintArgs.push('--fix');\n  if (options.maxWarnings !== undefined) {\n    eslintArgs.push('--max-warnings', options.maxWarnings.toString());\n  }\n\n  await handleCache(options, eslintArgs, './.eslintcache');\n\n  eslintArgs.push(...files);\n\n  return runCommand(\n    'eslint',\n    eslintArgs,\n    isFix ? 'ESLint Fix' : 'ESLint Check',\n  );\n};\n\nexport const runTsc = async (options: LintCommandOptions): Promise<boolean> => {\n  const tsconfigPath = path.resolve(\n    process.cwd(),\n    options.project || 'tsconfig.json',\n  );\n  logger.warn(`TSC check using config: ${tsconfigPath}`);\n  const tscArgs = ['--noEmit', '--project', tsconfigPath];\n  return runCommand('tsc', tscArgs, 'TypeScript');\n};\n"]}