resolvePath function

String resolvePath(
  1. String path, [
  2. Map<String, String> env = const {}
])

Resolves a path string into an absolute, normalized system path.

Expands ~ to the user's home directory and replaces environment variables (e.g., $VAR) with their corresponding values, then returns the absolute and normalized path.

Implementation

String resolvePath(String path, [Map<String, String> env = const {}]) {
  path = path.trim();
  if (path.isEmpty) return path;
  if (env.isEmpty) env = Platform.environment;

  if (path.startsWith('~')) {
    final home = env['HOME'] ?? env['USERPROFILE'];
    if (home != null) path = path.replaceFirst('~', home);
  }
  if (path.contains(r'$') || path.contains('%')) {
    if (Platform.isWindows) {
      // Windows: %VAR%
      path = path.replaceAllMapped(RegExp(r'%([^%]+)%'), (match) {
        return env[match.group(1)!] ?? match.group(0)!;
      });
    } else {
      // POSIX: $VAR or ${VAR}
      path = path.replaceAllMapped(RegExp(r'\$(\w+|\{([^}]+)\})'), (match) {
        final varName = match.group(2) ?? match.group(1)!;
        return env[varName] ?? match.group(0)!;
      });
    }
  }

  return p.normalize(p.absolute(path));
}