main function

void main()

Automated export file generator for Dart packages.

This utility script automatically scans the lib/ directory and generates a package.dart file containing export statements for all Dart files found. Useful for maintaining package-level exports without manual tracking.

Functionality:

  • Recursively scans lib/ directory for .dart files
  • Generates export statements for each file
  • Excludes the generated package.dart file itself
  • Creates/overwrites lib/package.dart with all exports

Usage: Run this script using Dart CLI:

dart run lib/package_export_generator.dart

Generated Output Example:

export 'app/core/utils/rt_utils.dart';
export 'app/widgets/rt_common_widgets.dart';
export 'app/models/prediction.dart';
// ... etc

Note: This is a development utility script and should not be included in production builds. It's primarily used during package development to maintain export files automatically.

See also:

  • rtbase.dart for the main package export file (manually curated)

Implementation

void main() async {
  final Directory libDir =
      Directory('./lib'); // or 'lib' depending on your folder structure
  final File exportFile = File('lib/package.dart');

  if (!await libDir.exists()) {
    debugPrint('Source directory does not exist.');
    return;
  }

  final List<FileSystemEntity> files = libDir.listSync(recursive: true);

  // Gather all .dart files, except the current export file or unwanted files
  final List<String> dartFiles = files
      .whereType<File>()
      .where((file) =>
          file.path.endsWith('.dart') && !file.path.contains('package.dart'))
      .map((file) => file.path.replaceFirst('lib/', ''))
      .toList();

  // Create the export content
  final StringBuffer exportsBuffer = StringBuffer();
  for (final String file in dartFiles) {
    exportsBuffer.writeln("export '$file';");
  }

  // Write the exports to the package.dart file
  await exportFile.writeAsString(exportsBuffer.toString());

  debugPrint('Export file generated: lib/package.dart');
}