-
-
Save tonybolanyo/714d83a712a87ee4452d995a69c37047 to your computer and use it in GitHub Desktop.
Simple path join and dirname functions for generic javascript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'uses strict'; | |
// Joins path segments. Preserves initial "/" and resolves ".." and "." | |
// Does not support using ".." to go above/outside the root. | |
// This means that join("foo", "../../bar") will not resolve to "../bar" | |
const join = function(/* path segments */) { | |
// Split the inputs into a list of path commands. | |
var parts = []; | |
for (var i = 0, l = arguments.length; i < l; i++) { | |
parts = parts.concat(arguments[i].split('/')); | |
} | |
// Interpret the path commands to get the new resolved path. | |
var newParts = []; | |
for (i = 0, l = parts.length; i < l; i++) { | |
var part = parts[i]; | |
// Remove leading and trailing slashes | |
// Also remove "." segments | |
if (!part || part === '.') continue; | |
// Interpret ".." to pop the last segment | |
if (part === '..') newParts.pop(); | |
// Push new path segments. | |
else newParts.push(part); | |
} | |
// Preserve the initial slash if there was one. | |
if (parts[0] === '') newParts.unshift(''); | |
// Turn back into a single string path. | |
return newParts.join('/') || (newParts.length ? '/' : '.'); | |
}; | |
// A simple function to get the dirname of a path | |
// Trailing slashes are ignored. Leading slash is preserved. | |
const dirname = function(path) { | |
return join(path, '..'); | |
}; | |
module.exports.join = join; | |
module.exports.path = dirname; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment