discoverModules function

List<Map<String, String>> discoverModules(
  1. String pluginName
)

Discovers all modules by scanning lib/ for *.native.dart files. Returns a list of maps with 'lib' and 'module' keys.

Implementation

List<Map<String, String>> discoverModules(String pluginName) {
  final libDir = Directory('lib');
  if (!libDir.existsSync()) return [];
  final specs = libDir.listSync(recursive: true).whereType<File>().where((f) => f.path.endsWith('.native.dart')).toList();
  if (specs.isEmpty) return [];

  final modules = <Map<String, String>>[];
  for (final spec in specs) {
    final content = spec.readAsStringSync();
    final stem = p.basename(spec.path).replaceAll(RegExp(r'\.native\.dart$'), '');

    final libName = extractLibNameFromSpec(spec) ?? stem.replaceAll('-', '_');

    // Extract module name (e.g. 'MyCamera' from 'abstract class MyCamera')
    final moduleMatch = RegExp(r'abstract class (\w+) extends HybridObject').firstMatch(content);
    final moduleName = moduleMatch?.group(1) ?? stem.split('_').map((w) => w[0].toUpperCase() + w.substring(1)).join('');

    if (!modules.any((m) => m['module'] == moduleName)) {
      modules.add({'lib': libName, 'module': moduleName});
    }
  }
  return modules;
}