wyatt-bricks/tools/brick_generator/lib/file_system_utils.dart
2022-08-10 15:48:45 +01:00

90 lines
2.6 KiB
Dart

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<void> convertValuesToVariablesInFolder(
BrickConfig brickConfig,
String path,
) async {
await Future.wait(
Directory(path)
.listSync(recursive: true)
.whereType<File>()
.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<void> renamePathsInFolder(
BrickConfig brickConfig,
String path,
) async {
await Future.wait(
Directory(path)
.listSync(recursive: true)
.whereType<File>()
.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<void> 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);
}
}
}
}
}