Last active
September 17, 2024 10:22
-
-
Save iota9star/19e001ae76178b41d0a9ae8139215790 to your computer and use it in GitHub Desktop.
Revisions
-
iota9star revised this gist
Sep 17, 2024 . 1 changed file with 12 additions and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -31,20 +31,24 @@ Future<bool> createExport(Directory root, Directory dir, {String? fileName, bool } final dirName = fileName ?? path.basename(dir.path); final exportFileName = '$dirName.dart'; final exportFile = File(path.join(dir.path, exportFileName)); final exportParts = []; for (final child in children) { final basename = path.basename(child); if (basename != exportFileName) { exportParts.add("export '$basename';"); } } for (final d in dirs) { exportParts.add("export '$d/$d.dart';"); } exportParts.sort(); final sb = StringBuffer(); exportParts.forEach(sb.writeln); sb.writeln(); exportFile.writeAsStringSync(sb.toString()); print('Created: ${exportFile.path.substring(root.path.length + 1)}'); return true; } -
iota9star created this gist
Sep 17, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,59 @@ import 'dart:convert'; import 'dart:io'; import 'package:path/path.dart' as path; Future<void> main() async { final root = Directory.current; final lib = Directory(path.join(root.path, 'lib')); final projectName = await getProjectName(root); createExport(lib, lib, fileName: projectName, skipChildren: true); } Future<bool> createExport(Directory root, Directory dir, {String? fileName, bool skipChildren = false}) async { final children = []; final dirs = []; for (final file in dir.listSync()) { if (file is Directory) { final has = await createExport(root, file); if (has) { dirs.add(path.basename(file.path)); } } else if (!skipChildren) { if (file.path.endsWith('.dart') && !file.path.endsWith('.web.dart') && !await hasPartOf(file as File)) { children.add(file.path); } } } if (children.isEmpty && dirs.isEmpty) { return false; } final dirName = fileName ?? path.basename(dir.path); final export = File(path.join(dir.path, '$dirName.dart')); final exports = []; for (final child in children) { final basename = path.basename(child); if (basename != '$dirName.dart') { exports.add("export '$basename';"); } } for (final d in dirs) { exports.add("export '$d/$d.dart';"); } exports.sort(); export.writeAsStringSync(exports.join('\n')); print('Created: ${export.path.substring(root.path.length + 1)}'); return true; } Future<String> getProjectName(Directory root) async { final lines = File(path.join(root.path, 'pubspec.yaml')).openRead().transform(utf8.decoder).transform(const LineSplitter()); final name = await lines.firstWhere((line) => line.startsWith('name:')); return name.split(':').last.trim(); } Future<bool> hasPartOf(File file) async { return file.openRead().transform(utf8.decoder).transform(const LineSplitter()).any((line) => line.startsWith('part of')); }