From ff0f86a9006c9004f28a2a331740bcee17c1452b Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Sat, 16 Jul 2022 16:04:16 -0500 Subject: [PATCH 1/3] feat(dart_frog_cli): debounce file watcher events --- .../lib/src/commands/dev/dev.dart | 7 +++-- packages/dart_frog_cli/pubspec.yaml | 1 + .../test/src/commands/dev/dev_test.dart | 27 +++++++++++++------ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart index fb8a8c143..50c84d648 100644 --- a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart +++ b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart @@ -6,6 +6,7 @@ import 'package:dart_frog_cli/src/commands/commands.dart'; import 'package:dart_frog_cli/src/commands/dev/templates/dart_frog_dev_server_bundle.dart'; import 'package:mason/mason.dart'; import 'package:path/path.dart' as path; +import 'package:stream_transform/stream_transform.dart'; import 'package:watcher/watcher.dart'; /// Typedef for [io.Process.start]. @@ -152,8 +153,10 @@ class DevCommand extends DartFrogCommand { } final watcher = _directoryWatcher(path.join(cwd.path)); - final subscription = - watcher.events.where(shouldRunCodegen).listen((_) => codegen()); + final subscription = watcher.events + .where(shouldRunCodegen) + .debounce(Duration.zero) + .listen((_) => codegen()); await subscription.asFuture(); await subscription.cancel(); diff --git a/packages/dart_frog_cli/pubspec.yaml b/packages/dart_frog_cli/pubspec.yaml index 4ad233aaf..91e5c6ce9 100644 --- a/packages/dart_frog_cli/pubspec.yaml +++ b/packages/dart_frog_cli/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: mason: ^0.1.0-dev.24 meta: ^1.7.0 path: ^1.8.1 + stream_transform: ^2.0.0 watcher: ^1.0.1 dev_dependencies: diff --git a/packages/dart_frog_cli/test/src/commands/dev/dev_test.dart b/packages/dart_frog_cli/test/src/commands/dev/dev_test.dart index 0f7d6b5fd..c41d9a6ca 100644 --- a/packages/dart_frog_cli/test/src/commands/dev/dev_test.dart +++ b/packages/dart_frog_cli/test/src/commands/dev/dev_test.dart @@ -177,8 +177,9 @@ void main() { ]); }); - test('runs codegen when changes are made to the public/routes directory', - () async { + test( + 'runs codegen w/debounce ' + 'when changes are made to the public/routes directory', () async { final controller = StreamController(); final generatorHooks = _MockGeneratorHooks(); when( @@ -219,14 +220,22 @@ void main() { ), ).called(1); - controller.add( - WatchEvent( - ChangeType.MODIFY, - path.join(Directory.current.path, 'routes', 'index.dart'), - ), - ); + controller + ..add( + WatchEvent( + ChangeType.ADD, + path.join(Directory.current.path, 'routes', 'users.dart'), + ), + ) + ..add( + WatchEvent( + ChangeType.REMOVE, + path.join(Directory.current.path, 'routes', 'user.dart'), + ), + ); await Future.delayed(Duration.zero); + await Future.delayed(Duration.zero); verify( () => generator.generate( @@ -243,6 +252,7 @@ void main() { ), ); + await Future.delayed(Duration.zero); await Future.delayed(Duration.zero); verify( @@ -260,6 +270,7 @@ void main() { ), ); + await Future.delayed(Duration.zero); await Future.delayed(Duration.zero); verifyNever( From 53c120140963a4547abfe69be52eb06d7dcc1804 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Tue, 26 Jul 2022 15:41:47 -0500 Subject: [PATCH 2/3] chore: trim stderr output --- packages/dart_frog_cli/lib/src/commands/dev/dev.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart index 50c84d648..24148722c 100644 --- a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart +++ b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart @@ -120,7 +120,8 @@ class DevCommand extends DartFrogCommand { var hasError = false; process.stderr.listen((_) async { hasError = true; - logger.err(utf8.decode(_)); + final message = utf8.decode(_).trim(); + if (message.isNotEmpty) logger.err(message); if (!hotReloadEnabled) { await _killProcess(process); From 5f804616ad81a1efba1e2f2d91cde5038b03e774 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Wed, 27 Jul 2022 09:43:52 -0500 Subject: [PATCH 3/3] wip: vscode debugging --- packages/dart_frog_cli/lib/src/commands/dev/dev.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart index 24148722c..d6fb5f751 100644 --- a/packages/dart_frog_cli/lib/src/commands/dev/dev.dart +++ b/packages/dart_frog_cli/lib/src/commands/dev/dev.dart @@ -108,7 +108,11 @@ class DevCommand extends DartFrogCommand { Future serve() async { final process = await _startProcess( 'dart', - ['--enable-vm-service', path.join('.dart_frog', 'server.dart')], + [ + '--enable-vm-service', + '--write-service-info=file:///tmp/dart_proc_info', + path.join('.dart_frog', 'server.dart') + ], runInShell: true, );