{"version":3,"sources":["../src/index.ts","../src/cli.ts","../src/commands/generate.ts","../src/config.ts","../src/commands/watch.ts"],"sourcesContent":["/**\n * @dorval/cli\n * CLI exports for programmatic usage\n */\n\nexport { runCLI } from './cli';\nexport { loadConfig } from './config';\nexport { generateCommand } from './commands/generate';\nexport { watchCommand } from './commands/watch';","/**\n * CLI runner for programmatic usage\n */\n\nimport { Command } from 'commander';\nimport { generateCommand } from './commands/generate';\nimport { watchCommand } from './commands/watch';\n\nexport function runCLI(args: string[]): void {\n  const program = new Command();\n  \n  program\n    .name('dorval')\n    .description('Generate Dart API clients from OpenAPI specifications');\n  \n  program\n    .command('generate')\n    .description('Generate Dart code')\n    .option('-c, --config <path>', 'Config file path')\n    .option('-i, --input <path>', 'Input spec')\n    .option('-o, --output <path>', 'Output directory')\n    .action(generateCommand);\n  \n  program\n    .command('watch')\n    .description('Watch for changes')\n    .option('-c, --config <path>', 'Config file path')\n    .action(watchCommand);\n  \n  program.parse(args);\n}","/**\n * Generate command implementation\n */\n\nimport chalk from 'chalk';\nimport { generateDartCode, DartGeneratorOptions } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface GenerateOptions {\n  config?: string;\n  input?: string;\n  output?: string;\n  client?: 'dio' | 'http' | 'chopper';\n  watch?: boolean;\n}\n\nexport async function generateCommand(options: GenerateOptions) {\n  // Dynamic import for ora to support both CJS and ESM\n  const ora = await import('ora').then(m => m.default || m);\n  const spinner = ora('Loading configuration...').start();\n  \n  try {\n    // Load configuration\n    let config: DartGeneratorOptions;\n    \n    if (options.input && options.output) {\n      // Use command line options\n      config = {\n        input: options.input,\n        output: {\n          target: options.output,\n          client: options.client || 'dio',\n          mode: 'split',\n          override: {\n            generator: {\n              freezed: true,\n              jsonSerializable: true,\n              nullSafety: true\n            }\n          }\n        }\n      };\n    } else if (options.config) {\n      config = await loadConfig(options.config);\n    } else {\n      // Try to load from default locations\n      try {\n        config = await loadConfig();\n      } catch {\n        throw new Error('Either provide a config file or use -i and -o options');\n      }\n    }\n    \n    spinner.text = 'Parsing OpenAPI specification...';\n    \n    // Generate code\n    const files = await generateDartCode(config);\n    \n    spinner.succeed(chalk.green(`✅ Generated ${files.length} files`));\n    \n    // List generated files\n    console.log(chalk.cyan('\\nGenerated files:'));\n    files.forEach(file => {\n      console.log(chalk.gray(`  - ${file.path}`));\n    });\n    \n    // Run post-generation hooks\n    if (config.hooks?.afterAllFilesWrite) {\n      spinner.start('Running post-generation hooks...');\n      // TODO: Implement hook execution\n      spinner.succeed('Hooks completed');\n    }\n    \n    console.log(chalk.green('\\n✨ Generation completed successfully!'));\n    \n  } catch (error) {\n    spinner.fail(chalk.red('Generation failed'));\n    console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n    process.exit(1);\n  }\n}","/**\n * Configuration loader\n */\n\nimport { cosmiconfigSync } from 'cosmiconfig';\nimport { DartGeneratorOptions } from '@dorval/core';\n\n// Create explorer lazily to avoid initialization issues\nfunction getExplorer() {\n  return cosmiconfigSync('orval', {\n    searchPlaces: [\n      'orval.config.ts',\n      'orval.config.js',\n      'orval.config.cjs',\n      '.orvalrc',\n      '.orvalrc.json',\n      '.orvalrc.yaml',\n      '.orvalrc.yml',\n      'package.json'\n    ]\n  });\n}\n\nexport async function loadConfig(configPath?: string): Promise<DartGeneratorOptions> {\n  const explorer = getExplorer();\n  const result = configPath\n    ? explorer.load(configPath)\n    : explorer.search();\n  \n  if (!result) {\n    throw new Error('No configuration file found');\n  }\n  \n  // Handle default export or direct config\n  const config = result.config.default || result.config;\n  \n  // If config has multiple specs, use the first one\n  if (typeof config === 'object' && !config.input) {\n    const firstKey = Object.keys(config)[0];\n    return config[firstKey];\n  }\n  \n  return config;\n}","/**\n * Watch command implementation\n */\n\nimport chalk from 'chalk';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { generateDartCode } from '@dorval/core';\nimport { loadConfig } from '../config.js';\n\ninterface WatchOptions {\n  config?: string;\n}\n\nexport async function watchCommand(options: WatchOptions) {\n  // Dynamic import for ora to support both CJS and ESM\n  const ora = await import('ora').then(m => m.default || m);\n  const spinner = ora('Starting watch mode...').start();\n  \n  try {\n    // Load configuration\n    const config = await loadConfig(options.config);\n    \n    if (typeof config.input !== 'string') {\n      throw new Error('Watch mode requires a file path input');\n    }\n    \n    const inputPath = path.resolve(config.input);\n    \n    spinner.succeed(chalk.green(`Watching ${inputPath} for changes...`));\n    \n    // Initial generation\n    await generateDartCode(config);\n    console.log(chalk.cyan('✅ Initial generation completed'));\n    \n    // Watch for changes\n    fs.watchFile(inputPath, async () => {\n      console.log(chalk.yellow('\\n📝 File changed, regenerating...'));\n      \n      try {\n        await generateDartCode(config);\n        console.log(chalk.green('✅ Regeneration completed'));\n      } catch (error) {\n        console.error(chalk.red(`❌ Regeneration failed: ${error instanceof Error ? error.message : String(error)}`));\n      }\n    });\n    \n    // Keep process alive\n    process.stdin.resume();\n    \n    // Handle exit\n    process.on('SIGINT', () => {\n      console.log(chalk.yellow('\\n👋 Stopping watch mode...'));\n      fs.unwatchFile(inputPath);\n      process.exit(0);\n    });\n    \n  } catch (error) {\n    spinner.fail(chalk.red('Watch mode failed'));\n    console.error(chalk.red(`\\nError: ${error instanceof Error ? error.message : String(error)}`));\n    process.exit(1);\n  }\n}"],"mappings":"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","names":["chalk","import_chalk","import_core","chalk"]}