prepareExecutables method
Iterable<({String executablePath, Future<ProcessResult> process})>
prepareExecutables(
- List<
DefinedHook> definedHooks, { - required Directory hooksDartToolDir,
- required Directory executablesDir,
Implementation
Iterable<({String executablePath, Future<ProcessResult> process})>
prepareExecutables(
List<DefinedHook> definedHooks, {
required Directory hooksDartToolDir,
required Directory executablesDir,
}) sync* {
if (hooksDartToolDir.existsSync()) {
hooksDartToolDir.deleteSync(recursive: true);
}
executablesDir.createSync(recursive: true);
logger.info(yellow.wrap('Preparing hooks'));
for (final hook in definedHooks.where((e) => e.isDart)) {
final relativePath = fs.path.relative(
hook.path,
from: hooksDartToolDir.path,
);
final content =
'''
import 'package:hooksman/hooksman.dart';
import '$relativePath' as hook;
void main(List<String> args) {
executeHook('${hook.name}', hook.main(), args);
}''';
final file =
fs.file(
fs.path.join(
hooksDartToolDir.path,
fs.path.basename(hook.fileName),
),
)
..createSync(recursive: true)
..writeAsStringSync(content);
logger.info(darkGray.wrap(' - ${hook.name}'));
final outFile = executablesDir.childFile(hook.name);
final process = compiler.compile(file: file.path, outFile: outFile.path);
yield (executablePath: outFile.path, process: process);
}
for (final hook in definedHooks.where((e) => e.isShell)) {
logger.info(darkGray.wrap(' - ${hook.name}'));
final outFile = executablesDir.childFile(hook.name);
final process = compiler.prepareShellExecutable(
file: hook.path,
outFile: outFile.path,
);
yield (executablePath: outFile.path, process: process);
}
logger.write('\n');
}