in frontend_server_client/example/vm_client.dart [14:77]
void main(List<String> args) async {
watch.start();
if (args.isNotEmpty) {
throw ArgumentError('No command line args are supported');
}
var client = await FrontendServerClient.start('org-dartlang-root:///$app',
outputDill, p.join(sdkDir, 'lib', '_internal', 'vm_platform_strong.dill'),
target: 'vm',
fileSystemRoots: [p.current],
fileSystemScheme: 'org-dartlang-root',
verbose: true);
_print('compiling $app');
var result = await client.compile();
client.accept();
_print('done compiling $app');
Process appProcess;
final vmServiceCompleter = Completer<VmService>();
appProcess = await Process.start(Platform.resolvedExecutable,
['--observe', '--no-pause-isolates-on-exit', result!.dillOutput]);
appProcess.stdout
.transform(utf8.decoder)
.transform(const LineSplitter())
.listen((line) {
stdout.writeln('APP -> $line');
if (line.startsWith('Observatory listening on')) {
var observatoryUri =
'${line.split(' ').last.replaceFirst('http', 'ws')}ws';
vmServiceCompleter.complete(vmServiceConnectUri(observatoryUri));
}
});
appProcess.stderr
.transform(utf8.decoder)
.transform(const LineSplitter())
.listen((line) {
stderr.writeln('APP -> $line');
});
final vmService = await vmServiceCompleter.future;
_print('editing $app');
var appFile = File(app);
var originalContent = await appFile.readAsString();
var newContent = originalContent.replaceFirst('hello', 'goodbye');
await appFile.writeAsString(newContent);
_print('recompiling $app with edits');
result = await client.compile([Uri.parse('org-dartlang-root:///$app')]);
client.accept();
_print('done recompiling $app');
_print('reloading $app');
var vm = await vmService.getVM();
await vmService.reloadSources(vm.isolates!.first.id!,
rootLibUri: result!.dillOutput);
_print('restoring $app to original contents');
await appFile.writeAsString(originalContent);
_print('exiting');
await client.shutdown().timeout(const Duration(seconds: 1), onTimeout: () {
client.kill();
return 1;
});
}