normalizePath function
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;
}