Comparing version 0.4.0 to 0.4.1
@@ -1,38 +0,86 @@ | ||
var doubleSlashWinRegExp = /\\+/g; | ||
var doubleSlashNixRegExp = /\/+/g; | ||
var currentDirectoryWinMiddleRegExp = /\\(\.\\)+/; | ||
var currentDirectoryWinEndRegExp = /\\\.$/; | ||
var parentDirectoryWinMiddleRegExp = /\\+[^\\]+\\+\.\.\\/; | ||
var parentDirectoryWinEndRegExp1 = /([A-Z]:\\)\\*[^\\]+\\+\.\.$/i; | ||
var parentDirectoryWinEndRegExp2 = /\\+[^\\]+\\+\.\.$/; | ||
var currentDirectoryNixMiddleRegExp = /\/+(\.\/)+/; | ||
var currentDirectoryNixEndRegExp1 = /^\/+\.$/; | ||
var currentDirectoryNixEndRegExp2 = /\/+\.$/; | ||
var parentDirectoryNixMiddleRegExp = /(^|\/[^\/]+)\/+\.\.\/+/; | ||
var parentDirectoryNixEndRegExp1 = /^\/[^\/]+\/+\.\.$/; | ||
var parentDirectoryNixEndRegExp2 = /\/+[^\/]+\/+\.\.$/; | ||
var parentDirectoryNixEndRegExp3 = /^\/+\.\.$/; | ||
// RegExp magic :) | ||
module.exports = function normalize(path) { | ||
while(currentDirectoryWinMiddleRegExp.test(path)) | ||
path = path.replace(currentDirectoryWinMiddleRegExp, "\\"); | ||
path = path.replace(currentDirectoryWinEndRegExp, ""); | ||
while(parentDirectoryWinMiddleRegExp.test(path)) | ||
path = path.replace(parentDirectoryWinMiddleRegExp, "\\"); | ||
path = path.replace(parentDirectoryWinEndRegExp1, "$1"); | ||
path = path.replace(parentDirectoryWinEndRegExp2, ""); | ||
while(currentDirectoryNixMiddleRegExp.test(path)) | ||
path = path.replace(currentDirectoryNixMiddleRegExp, "/"); | ||
path = path.replace(currentDirectoryNixEndRegExp1, "/"); | ||
path = path.replace(currentDirectoryNixEndRegExp2, ""); | ||
while(parentDirectoryNixMiddleRegExp.test(path)) | ||
path = path.replace(parentDirectoryNixMiddleRegExp, "/"); | ||
path = path.replace(parentDirectoryNixEndRegExp1, "/"); | ||
path = path.replace(parentDirectoryNixEndRegExp2, ""); | ||
path = path.replace(parentDirectoryNixEndRegExp3, "/"); | ||
return path.replace(doubleSlashWinRegExp, "\\").replace(doubleSlashNixRegExp, "/"); | ||
}; | ||
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: | ||
// i. e. ".." => ".." | ||
// i. e. "../a/b/c" => "../a/b/c" | ||
result.push(part); | ||
break; | ||
case 2: | ||
// i. e. "a/.." => "" | ||
// i. e. "/.." => "/" | ||
// i. e. "C:\.." => "C:\" | ||
// i. e. "a/../b/c" => "b/c" | ||
// i. e. "/../b/c" => "/b/c" | ||
// i. e. "C:\..\a\b\c" => "C:\a\b\c" | ||
i++; | ||
sep = !sep; | ||
result.length = absolutePathStart; | ||
break; | ||
case 4: | ||
// i. e. "a/b/.." => "a" | ||
// i. e. "/a/.." => "/" | ||
// i. e. "C:\a\.." => "C:\" | ||
// i. e. "/a/../b/c" => "/b/c" | ||
if(absolutePathStart === 0) { | ||
result.length -= 3; | ||
} else { | ||
i++; | ||
sep = !sep; | ||
result.length = 2; | ||
} | ||
break; | ||
default: | ||
// i. e. "/a/b/.." => "/a" | ||
// i. e. "/a/b/../c" => "/a/c" | ||
result.length -= 3; | ||
break; | ||
} | ||
} else if(part === ".") { | ||
switch(result.length) { | ||
case 0: | ||
// i. e. "." => "." | ||
// i. e. "./a/b/c" => "./a/b/c" | ||
result.push(part); | ||
break; | ||
case 2: | ||
// i. e. "a/." => "a" | ||
// i. e. "/." => "/" | ||
// i. e. "C:\." => "C:\" | ||
// i. e. "C:\.\a\b\c" => "C:\a\b\c" | ||
if(absolutePathStart === 0) { | ||
result.length--; | ||
} else { | ||
i++; | ||
sep = !sep; | ||
} | ||
break; | ||
default: | ||
// i. e. "a/b/." => "a/b" | ||
// i. e. "/a/." => "/" | ||
// i. e. "C:\a\." => "C:\" | ||
// i. e. "a/./b/c" => "a/b/c" | ||
// i. e. "/a/./b/c" => "/a/b/c" | ||
result.length--; | ||
break; | ||
} | ||
} else if(part) { | ||
result.push(part); | ||
} | ||
} | ||
if(result.length === 1 && /^[A-Za-z]:$/.test(result)) | ||
return result[0] + "\\"; | ||
return result.join(""); | ||
}; |
{ | ||
"name": "memory-fs", | ||
"version": "0.4.0", | ||
"version": "0.4.1", | ||
"description": "A simple in-memory filesystem. Holds data in a javascript object.", | ||
@@ -5,0 +5,0 @@ "main": "lib/MemoryFileSystem.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
13424
396