resolve method
Resolves the intended package name for a target directory or argument.
Resolution precedence:
- Explicit
overrideNamepassed via command-line flags. - Existing
zuq.yamlintargetDirectory. - Existing
pubspec.yamlintargetDirectory. - Directory basename if target is
.or current working directory. - The
rawTargetitself.
Implementation
String resolve({
required String rawTarget,
String? overrideName,
Directory? currentDirectory,
}) {
if (overrideName != null && overrideName.trim().isNotEmpty) {
return sanitize(overrideName);
}
final targetDir = currentDirectory ?? Directory.current;
final isCurrentDirectory = rawTarget == '.' || rawTarget.trim().isEmpty;
if (isCurrentDirectory) {
// 1. Check existing zuq.yaml in current directory
final zuqFile = File(p.join(targetDir.path, 'zuq.yaml'));
if (zuqFile.existsSync()) {
try {
final yaml = loadYaml(zuqFile.readAsStringSync());
if (yaml is Map && yaml['name'] is String && yaml['name'] != '.') {
return sanitize(yaml['name'] as String);
}
} catch (_) {}
}
// 2. Check existing pubspec.yaml in current directory
final pubspecFile = File(p.join(targetDir.path, 'pubspec.yaml'));
if (pubspecFile.existsSync()) {
try {
final yaml = loadYaml(pubspecFile.readAsStringSync());
if (yaml is Map && yaml['name'] is String && yaml['name'] != '.') {
return sanitize(yaml['name'] as String);
}
} catch (_) {}
}
// 3. Fallback to current directory's folder name
final folderName = p.basename(p.normalize(targetDir.absolute.path));
return sanitize(folderName);
}
return sanitize(rawTarget);
}