resolve method

String resolve({
  1. required String rawTarget,
  2. String? overrideName,
  3. Directory? currentDirectory,
})

Resolves the intended package name for a target directory or argument.

Resolution precedence:

  1. Explicit overrideName passed via command-line flags.
  2. Existing zuq.yaml in targetDirectory.
  3. Existing pubspec.yaml in targetDirectory.
  4. Directory basename if target is . or current working directory.
  5. The rawTarget itself.

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);
}