import 'dart:io'; import 'package:brick_generator/models/brick_config.dart'; import 'package:brick_generator/models/variable_string_syntax.dart'; import 'package:brick_generator/models/variable_type.dart'; class FileSystemUtils { static Future convertValuesToVariablesInFolder( BrickConfig brickConfig, String path, ) async { await Future.wait( Directory(path) .listSync(recursive: true) .whereType() .map((_) async { var file = _; var contents = await file.readAsString(); // Transform all values in variables if (brickConfig.variables != null) { for (final variable in brickConfig.variables!) { // Replace all string variables if (variable?.type == VariabelType.string) { for (final syntax in VariableStringSyntax.values) { final toReplace = variable?.syntax?[syntax.mapKey] as String?; if (toReplace != null) { contents = contents.replaceAll( toReplace, '{{#${syntax.id}}}{{${variable?.name}}}{{/${syntax.id}}}', ); } } } stdout.writeln( '🍺 variables ${variable?.name} added in ${file.path}', ); } } // Replace content file = await file.writeAsString(contents); }), ); } static Future renamePathsInFolder( BrickConfig brickConfig, String path, ) async { await Future.wait( Directory(path) .listSync(recursive: true) .whereType() .map((_) async { final file = _; // Rename file if needed if (brickConfig.variables != null) { for (final variable in brickConfig.variables!) { if (variable?.type == VariabelType.string && variable?.syntax?[VariableStringSyntax.snakeCase.mapKey] != null) { final newPath = file.path.replaceAll( variable!.syntax![VariableStringSyntax.snakeCase.mapKey] as String, '{{${variable.name}.snakeCase()}}', ); await File(newPath).create(recursive: true); await file.rename(newPath); } } } }), ); } static Future deleteEmptyFolders(String path) async { for (final dir in Directory(path).listSync(recursive: true).reversed) { if (dir is Directory) { if (await dir.exists() && await dir.list().isEmpty) { await dir.delete(recursive: true); } } } } }