run method

Future<int> run()

Implementation

Future<int> run() async {
  final input   = _arg('--input',  '-i') ?? '';
  final output  = _arg('--output', '-o') ?? '';
  final verbose = _hasFlag('--verbose', '-v');
  final noFmt   = _hasFlag('--no-format');

  final defaults = NebulaProjectConfig(
    input:  input.isNotEmpty  ? input  : 'swagger.json',
    output: output.isNotEmpty ? output : 'lib/api',
  );
  final cfg = await ConfigLoader.loadOrDefault(defaults);

  final effectiveInput  = input.isNotEmpty  ? input  : cfg.input;
  final effectiveOutput = output.isNotEmpty ? output : cfg.output;

  if (!await File(effectiveInput).exists()) {
    stderr.writeln('❌  Spec file not found: $effectiveInput');
    return 1;
  }

  final options = CompilerOptions(
    outputDir:  effectiveOutput,
    format:     !noFmt && cfg.format,
    verbose:    verbose || cfg.verbose,
  );

  final compiler = NebulaCompiler();

  final watcher = SpecWatcher(
    specPath: effectiveInput,
    debounce: const Duration(milliseconds: 200),
    onRebuild: () async {
      try {
        final result = await compiler.compileFile(effectiveInput, options);
        print('✅  ${result.emitResult.filesWritten.join(', ')} written '
            '(${result.elapsed.inMilliseconds}ms)');
      } on CompilerException catch (e) {
        stderr.writeln('❌  $e');
      }
    },
  );

  await watcher.start();
  return 0;
}