normalizePath function

String normalizePath(
  1. String path
)

Normalizes a file-system path by collapsing separators, resolving . and .. segments, and converting backslashes to forward slashes.

Implementation

String normalizePath(String path) {
  if (path.isEmpty) return '.';

  // Convert backslashes to forward slashes.
  var p = path.replaceAll('\\', '/');

  // Preserve leading double-slash (UNC on Windows).
  final isUnc = p.startsWith('//');

  // Collapse consecutive slashes.
  p = p.replaceAll(RegExp(r'/+'), '/');
  if (isUnc) p = '/$p';

  final isAbs = p.startsWith('/');
  final segments = p.split('/');
  final resolved = <String>[];

  for (final seg in segments) {
    if (seg == '.' || seg.isEmpty) {
      continue;
    } else if (seg == '..') {
      if (resolved.isNotEmpty && resolved.last != '..') {
        resolved.removeLast();
      } else if (!isAbs) {
        resolved.add('..');
      }
    } else {
      resolved.add(seg);
    }
  }

  var result = resolved.join('/');
  if (isAbs) result = '/$result';
  if (result.isEmpty) return isAbs ? '/' : '.';
  return result;
}