definedHooks method

(List<DefinedHook>, int?) definedHooks(
  1. String root
)

Implementation

(List<DefinedHook>, int?) definedHooks(String root) {
  final definedHooksDir = fs.directory(fs.path.join(root, 'hooks'));

  if (!definedHooksDir.existsSync()) {
    logger.err('No hooks defined');
    return (<DefinedHook>[], 1);
  }

  final dartGlob = Glob('*.dart');
  final dartFound = dartGlob.listFileSystemSync(
    fs,
    root: definedHooksDir.path,
  );

  logger.detail('Found ${dartFound.length} Dart hook(s)');
  for (final entity in dartFound) {
    logger.detail(darkGray.wrap('  - ${fs.path.basename(entity.path)}'));
  }

  final shellGlob = Glob('*.sh');
  final shellFound = shellGlob.listFileSystemSync(
    fs,
    root: definedHooksDir.path,
  );

  logger.detail('Found ${shellFound.length} Shell hook(s)');
  for (final entity in shellFound) {
    logger.detail(
      darkGray.wrap(
        '  - ${fs.path.basename(entity.path)} (${entity.runtimeType})',
      ),
    );
  }
  logger.detail('');

  final definedHooks = [
    for (final entity in dartFound.followedBy(shellFound))
      if (entity is File) DefinedHook(entity.path),
  ];

  if (definedHooks.isEmpty) {
    logger.err('No hooks to register');
    return ([], 1);
  }

  final s = definedHooks.length > 1 ? 's' : '';
  logger.info(green.wrap('Found ${definedHooks.length} hook$s'));
  for (final hook in definedHooks) {
    logger.info(darkGray.wrap('  - ${fs.path.basename(hook.fileName)}'));
  }
  logger.write('\n');

  return (definedHooks, null);
}