module.exports = function normalize(path) {
var parts = path.split(/(\\+|\/+)/);
if(parts.length === 1)
return path;
var result = [];
var absolutePathStart = 0;
for(var i = 0, sep = false; i < parts.length; i++, sep = !sep) {
var part = parts[i];
if(i === 0 && /^([A-Z]:)?$/i.test(part)) {
result.push(part);
absolutePathStart = 2;
} else if(sep) {
result.push(part[0]);
} else if(part === "..") {
switch(result.length) {
case 0:
result.push(part);
break;
case 2:
i++;
sep = !sep;
result.length = absolutePathStart;
break;
case 4:
if(absolutePathStart === 0) {
result.length -= 3;
} else {
i++;
sep = !sep;
result.length = 2;
}
break;
default:
result.length -= 3;
break;
}
} else if(part === ".") {
switch(result.length) {
case 0:
result.push(part);
break;
case 2:
if(absolutePathStart === 0) {
result.length--;
} else {
i++;
sep = !sep;
}
break;
default:
result.length--;
break;
}
} else if(part) {
result.push(part);
}
}
if(result.length === 1 && /^[A-Za-z]:$/.test(result))
return result[0] + "\\";
return result.join("");
};