import 'dart:async';
import 'package:process/process.dart';
import 'package:process/record_replay.dart';
import 'common.dart';
import 'context.dart';
import 'file_system.dart';
import 'process.dart';
const String _kRecordingType = 'process';
const ProcessManager _kLocalProcessManager = LocalProcessManager();
ProcessManager get processManager => context.get<ProcessManager>() ?? _kLocalProcessManager;
RecordingProcessManager getRecordingProcessManager(String location) {
final Directory dir = getRecordingSink(location, _kRecordingType);
const ProcessManager delegate = LocalProcessManager();
final RecordingProcessManager manager = RecordingProcessManager(delegate, dir);
addShutdownHook(() async {
await manager.flush(finishRunningProcesses: true);
}, ShutdownStage.SERIALIZE_RECORDING);
return manager;
}
Future<ReplayProcessManager> getReplayProcessManager(String location) async {
final Directory dir = getReplaySource(location, _kRecordingType);
ProcessManager manager;
try {
manager = await ReplayProcessManager.create(dir);
} on ArgumentError catch (error) {
throwToolExit('Invalid replay-from: $error');
}
return manager;
}