generateExport function
Implementation
bool generateExport(
Directory directory, {
String? fileName,
String ext = '.exports',
bool recursive = true,
}) {
print('[GEN] Library: ${directory.path}');
final items = directory.listSync();
items.sort((a, b) => a.path.compareTo(b.path));
var isLibrary = false;
final libFileName =
directory.absolute.path + '/' + '${packageName}_' + 'library.dart';
final libFile = File(libFileName);
if (libFile.existsSync()) {
isLibrary = true;
}
final directoryName = fileName ??
directory.absolute.path.substring(
directory.absolute.path.lastIndexOf('/') + 1,
);
final exportFile = File(
'${directory.absolute.path}${Platform.pathSeparator}$directoryName$ext.dart');
var exports = '';
for (var item in items) {
if (item is Directory && recursive) {
if (isLibrary && item.path == 'lib/src') {
continue;
}
if (getLibraryName(item) != null) {
print('${item.path} is a library, skipping');
continue;
}
final res = generateExport(item);
if (!res) continue;
final subDirName = item.absolute.path.substring(
item.absolute.path.lastIndexOf('/') + 1,
);
exports +=
"export '$subDirName${Platform.pathSeparator}$subDirName.exports.dart';\n";
continue;
}
if (item is File &&
item.path.toLowerCase().endsWith('.dart') &&
!item.path.toLowerCase().endsWith('generated_plugin_registrant.dart') &&
!item.path.toLowerCase().endsWith('.g.dart')) {
final content = item.readAsStringSync();
var force = false;
if (content.contains('genexp: force')) {
force = true;
}
if (!force) {
if (content.contains('genexp: ignore')) {
continue;
}
if (content.contains('// GENERATED CODE - DO NOT MODIFY BY HAND')) {
continue;
}
}
if (content.contains(RegExp(r'part of .+;'))) {
continue;
}
if (item.absolute.path == exportFile.absolute.path) continue;
fixImport(item);
final path =
item.absolute.path.substring(directory.absolute.path.length + 1);
exports += "export '$path';\n";
continue;
}
}
if (exports.isNotEmpty) {
final content = '$_templateHeader$exports';
exportFile.writeAsStringSync(content, flush: true);
return true;
}
return false;
}