1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- 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("");
- };
|