build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  // Only run for the synthetic input
  if (buildStep.inputId.path != r'lib/$lib$') return;

  final outputFileName =
      options.config['output_file_name'] as String? ?? 'json_factory';
  final outputPath = options.config['output_path'] as String? ?? 'lib';

  final generator = JsonFactoryConfigGenerator(
    outputFileName: outputFileName,
    outputPath: outputPath,
  );

  final models = await generator.findAnnotatedModels(buildStep);

  if (models.isEmpty) {
    log.warning('No @jsonModel classes found');
    return;
  }

  // Get package name for generating package imports
  final packageName = buildStep.inputId.package;
  final content = generator.generateFactoryFile(models, packageName);

  // Use the configured output path and filename
  final outputFilePath = '$outputPath/$outputFileName.dart';

  final outputId = AssetId(
    buildStep.inputId.package,
    outputFilePath,
  );

  await buildStep.writeAsString(outputId, content);
}