build method

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

Generates the outputs for a given BuildStep.

Implementation

@override
FutureOr<void> build(BuildStep buildStep) async {
  try {
    final inputId = buildStep.inputId;
    final outputId = inputId.changeExtension(".dart");
    final source = await buildStep.readAsString(inputId);
    if (!inputId.pathSegments.last.endsWith(".openapi.yaml")) {
      return;
    }
    final inputIdBasename =
        inputId.pathSegments.last.replaceAll(".openapi.yaml", "");
    final api = _additionalComponentSchemas(
      _loadApiFromYaml(source),
    );

    final baseName = api.info!.extensions["x-dart-name"] as String? ??
        inputIdBasename.toPascalCase();
    final freezedPartFileName = AssetId(outputId.package, outputId.path)
        .changeExtension(".freezed.dart")
        .pathSegments
        .last;
    final partFileName = AssetId(outputId.package, outputId.path)
        .changeExtension(".g.dart")
        .pathSegments
        .last;

    final library = await OpenAPIGenerator(
      api,
      baseName,
      partFileName,
      freezedPartFileName,
    ).generate();

    final libraryOutput = _formatLibrary(
      library,
    );
    await buildStep.writeAsString(outputId, libraryOutput);
  } catch (e, stackTrace) {
    print(e.toString());
    print(stackTrace.toString());
  }
}