mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
90 lines • 3.19 kB
JavaScript
const normalizeStringPosix = (path, allowAboveRoot) => {
var res = "";
var lastSegmentLength = 0;
var lastSlash = -1;
var dots = 0;
var code;
for (var i = 0; i <= path.length; ++i) {
if (i < path.length)
code = path.charCodeAt(i);
else if (code === 47 /*/*/)
break;
else
code = 47; /*/*/
if (code === 47 /*/*/) {
if (lastSlash === i - 1 || dots === 1) {
// NOOP
}
else if (lastSlash !== i - 1 && dots === 2) {
if (res.length < 2 ||
lastSegmentLength !== 2 ||
res.charCodeAt(res.length - 1) !== 46 /*.*/ ||
res.charCodeAt(res.length - 2) !== 46 /*.*/) {
if (res.length > 2) {
var lastSlashIndex = res.lastIndexOf("/");
if (lastSlashIndex !== res.length - 1) {
if (lastSlashIndex === -1) {
res = "";
lastSegmentLength = 0;
}
else {
res = res.slice(0, lastSlashIndex);
lastSegmentLength =
res.length - 1 - res.lastIndexOf("/");
}
lastSlash = i;
dots = 0;
continue;
}
}
else if (res.length === 2 || res.length === 1) {
res = "";
lastSegmentLength = 0;
lastSlash = i;
dots = 0;
continue;
}
}
if (allowAboveRoot) {
if (res.length > 0)
res += "/..";
else
res = "..";
lastSegmentLength = 2;
}
}
else {
if (res.length > 0)
res += "/" + path.slice(lastSlash + 1, i);
else
res = path.slice(lastSlash + 1, i);
lastSegmentLength = i - lastSlash - 1;
}
lastSlash = i;
dots = 0;
}
else if (code === 46 /*.*/ && dots !== -1) {
++dots;
}
else {
dots = -1;
}
}
return res;
};
export default (path) => {
if (path.length === 0)
return ".";
var isAbsolute = path.charCodeAt(0) === 47; /*/*/
var trailingSeparator = path.charCodeAt(path.length - 1) === 47; /*/*/
// Normalize the path
path = normalizeStringPosix(path, !isAbsolute);
if (path.length === 0 && !isAbsolute)
path = ".";
if (path.length > 0 && trailingSeparator)
path += "/";
if (isAbsolute)
return "/" + path;
return path;
};
//# sourceMappingURL=normalizePath.js.map