compileFile method
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;
}