diff --git a/CHANGELOG.md b/CHANGELOG.md index 9cd58fc..13be6ba 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Changelog ## [7.0.0] - 2023-08-14 -*BREAKING CHANGE*: Every type is now defined inline, this means that 'required' is no longer supported, if a field isn't nullable it is automatically required. This also means that the 'array' type is no longer supported and is instead just defined like 'List'. +- *BREAKING CHANGE*: Every type is now defined inline, this means that 'required' is no longer supported, if a field isn't nullable it is automatically required. This also means that the 'array' type is no longer supported and is instead just defined like 'List'. +- Logs of build runner now get shown in real time. ## [6.3.0] - 2023-06-05 - Fixed the deprecated `ignore` field. Added diff --git a/bin/model_generator.dart b/bin/model_generator.dart index 19aac2b..8ec3857 100644 --- a/bin/model_generator.dart +++ b/bin/model_generator.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:io'; import 'package:args/args.dart'; @@ -8,6 +9,7 @@ import 'package:model_generator/model/model/custom_model.dart'; import 'package:model_generator/model/model/enum_model.dart'; import 'package:model_generator/model/model/json_converter_model.dart'; import 'package:model_generator/model/model/object_model.dart'; +import 'package:model_generator/run_process/run_process.dart'; import 'package:model_generator/util/list_extensions.dart'; import 'package:model_generator/writer/enum_model_writer.dart'; import 'package:model_generator/writer/object_model_writer.dart'; @@ -140,34 +142,20 @@ void writeToFiles( } Future generateJsonGeneratedModels({required bool useFvm}) async { - ProcessResult result; - if (useFvm) { - result = Process.runSync('fvm', [ - 'flutter', - 'packages', - 'pub', - 'run', - 'build_runner', - 'build', - '--delete-conflicting-outputs', - ]); - } else { - result = Process.runSync('flutter', [ - 'packages', - 'pub', - 'run', - 'build_runner', - 'build', - '--delete-conflicting-outputs', - ]); - } - if (result.exitCode == 0) { - print('Successfully generated the jsonSerializable generated files'); - print(''); - } else { - print( - 'Failed to run `${useFvm ? 'fvm ' : ''}flutter packages pub run build_runner build --delete-conflicting-outputs`'); - print('StdErr: ${result.stderr}'); - print('StdOut: ${result.stdout}'); - } + final arguments = [ + if (useFvm) ...[ + 'fvm', + ], + 'flutter', + 'packages', + 'pub', + 'run', + 'build_runner', + 'build', + '--delete-conflicting-outputs', + ]; + await ProcessRunner.runProcessVerbose( + arguments.first, + arguments.skip(1).toList(), + ); } diff --git a/lib/run_process/run_process.dart b/lib/run_process/run_process.dart new file mode 100644 index 0000000..d47d40b --- /dev/null +++ b/lib/run_process/run_process.dart @@ -0,0 +1,30 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; + +class ProcessRunner { + ProcessRunner._(); + + static Future runProcessVerbose( + String command, List args) async { + print('\n$command ${args.join(' ')}\n'); + final completer = Completer(); + final result = await Process.start( + command, + args, + mode: ProcessStartMode.detachedWithStdio, + ); + print( + '======================================================================'); + final subscription = result.stdout + .listen((codeUnits) => stdout.write(utf8.decode(codeUnits))); + subscription.onDone(() { + print( + '======================================================================'); + completer.complete(); + }); + subscription.onError((dynamic error) => + completer.completeError('Failed to complete process run: $error')); + return completer.future; + } +}