build method
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
}
}