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 {
  final fragmentsCommon = <FragmentDefinitionNode>[];

  var copyOptions = options;
  if (copyOptions.convertEnumToString) {
    final copyMapping = copyOptions.schemaMapping
        .map(
          (e) => e.copyWith(
            convertEnumToString: copyOptions.convertEnumToString,
          ),
        )
        .toList();

    copyOptions = copyOptions.copyWith(
      schemaMapping: copyMapping,
    );
  }

  final fragmentsGlob = copyOptions.fragmentsGlob;
  if (fragmentsGlob != null) {
    final commonFragments =
        (await readGraphQlFilesWithCache(buildStep, fragmentsGlob))
            .map((e) => e.definitions.whereType<FragmentDefinitionNode>())
            .expand((e) => e)
            .toList();

    if (commonFragments.isEmpty) {
      throw MissingFilesException(fragmentsGlob);
    }

    fragmentsCommon.addAll(commonFragments);
  }

  // Process all schema mappings in parallel
  final futures = copyOptions.schemaMapping.map((schemaMap) {
    return _processSchemaMapping(
      buildStep,
      schemaMap,
      fragmentsCommon,
      copyOptions,
    );
  });

  final results = await Future.wait(futures);

  // Write all outputs
  for (final result in results) {
    if (onBuild != null) {
      onBuild!(result.libDefinition);
    }

    await buildStep.writeAsString(result.outputFileId, result.content);
    // No forwarder files to write
  }
}