discoverModules function
Implementation
List<Map<String, String>> discoverModules(String pluginName, {String baseDir = '.'}) {
final libDir = Directory(p.join(baseDir, 'lib'));
if (!libDir.existsSync()) {
return [
{'lib': pluginName, 'module': pluginName}
];
}
final specs = libDir.listSync(recursive: true).whereType<File>().where((f) => f.path.endsWith('.native.dart')).toList();
if (specs.isEmpty) {
return [
{'lib': pluginName, 'module': pluginName}
];
}
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('-', '_');
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;
}