compileFile method

Future<CompileResult> compileFile(
  1. String specPath,
  2. CompilerOptions options
)

Reads specPath (JSON or YAML), compiles it, and writes Dart files to options.outputDir.

Throws CompilerException on unrecoverable errors.

Implementation

Future<CompileResult> compileFile(
    String specPath, CompilerOptions options) async {
  final sw = Stopwatch()..start();

  // 1. Load spec
  _log(options, '▶ Loading spec: $specPath');
  final spec = await _loadSpec(specPath);

  // 2. Parse
  final parser = _selectParser(spec);
  _log(options, '▶ Parser: ${parser.formatName}');
  final parseResult = parser.parse(spec);
  _log(options,
      '▶ Parsed: ${parseResult.ast.stats}');

  // 3. Optimize
  var ast = parseResult.ast;
  ast = _runOptimizers(ast, options);

  // 4. Emit
  _log(options, '▶ Generating code → ${options.outputDir}');
  final emitResult = await _emitter.emit(
    ast,
    options.outputDir,
    format: options.format,
    verbose: options.verbose,
  );

  sw.stop();

  final result = CompileResult(
    ast: ast,
    emitResult: emitResult,
    warnings: parseResult.warnings,
    elapsed: sw.elapsed,
  );

  _log(options, result.toString());
  return result;
}