What is upath?
The 'upath' npm package is a utility for working with file and directory paths across different operating systems. It provides a consistent API for handling paths, ensuring compatibility between Windows, macOS, and Linux.
What are upath's main functionalities?
Normalization
The 'normalize' function converts a given path to a consistent format, replacing backslashes with forward slashes and resolving '..' and '.' segments.
const upath = require('upath');
const normalizedPath = upath.normalize('foo\bar//baz/asdf/quux/..');
console.log(normalizedPath); // Outputs: 'foo/bar/baz/asdf'
Joining Paths
The 'join' function concatenates multiple path segments into a single path, ensuring the correct separators are used.
const upath = require('upath');
const joinedPath = upath.join('foo', 'bar', 'baz/asdf', 'quux', '..');
console.log(joinedPath); // Outputs: 'foo/bar/baz/asdf'
Resolving Paths
The 'resolve' function computes the absolute path by resolving '..' and '.' segments and considering the current working directory.
const upath = require('upath');
const resolvedPath = upath.resolve('foo/bar', '/tmp/file/', '..', 'a/../subfile');
console.log(resolvedPath); // Outputs: '/tmp/subfile'
Getting Directory Name
The 'dirname' function returns the directory name of a given path.
const upath = require('upath');
const dirName = upath.dirname('/foo/bar/baz/asdf/quux');
console.log(dirName); // Outputs: '/foo/bar/baz/asdf'
Getting Base Name
The 'basename' function returns the last portion of a path, typically the file name.
const upath = require('upath');
const baseName = upath.basename('/foo/bar/baz/asdf/quux.html');
console.log(baseName); // Outputs: 'quux.html'
Getting Extension Name
The 'extname' function returns the extension of the path, from the last occurrence of the '.' character to the end of the string.
const upath = require('upath');
const extName = upath.extname('/foo/bar/baz/asdf/quux.html');
console.log(extName); // Outputs: '.html'
Other packages similar to upath
path
The 'path' module is a built-in Node.js module that provides utilities for working with file and directory paths. It offers similar functionalities to 'upath' but does not normalize paths to a consistent format across different operating systems.
path-posix
The 'path-posix' module is a subset of the Node.js 'path' module that specifically handles POSIX (Unix-like) paths. It is useful for environments where only POSIX paths are needed, but it does not handle Windows paths.
path-browserify
The 'path-browserify' module is a port of the Node.js 'path' module for use in browser environments. It provides similar functionalities but is designed to work within the constraints of browser-based JavaScript.
upath v0.1.0
A proxy to nodejs's path
that:
-
Replaces the windows \
with the unix /
in all string results.
-
Adds methods to add, trim, change, and default filename extensions.
-
Add a normalizeSafe
method to preserve any leading ./
** Useful note: these docs are actually auto generated from specs.**
Added methods
upath.normalizeSafe(path)
Exactly like path.normalize(path)
, but it keeps the first meaningful './'
.
Note that the unix '/'
is returned everywhere, so windows '' is always converted to unix '/'.
Examples / specs & how it differs from vanilla path
upath.normalizeSafe(path)
--returns-->
✓ `''` ---> `'.`' // equal to `path.normalize()`
✓ `'.'` ---> `'.`' // equal to `path.normalize()`
✓ `'./'` ---> `'./`' // equal to `path.normalize()`
✓ `'./..'` ---> `'..`' // equal to `path.normalize()`
✓ `'./../dep'` ---> `'../dep`' // equal to `path.normalize()`
✓ `'../path/dep'` ---> `'../path/dep`' // equal to `path.normalize()`
✓ `'../path/../dep'` ---> `'../dep`' // equal to `path.normalize()`
✓ `'dep'` ---> `'dep`' // equal to `path.normalize()`
✓ `'path//dep'` ---> `'path/dep`' // equal to `path.normalize()`
✓ `'./dep'` ---> `'./dep`' // `path.normalize()` gives `'dep'`
✓ `'./path/dep'` ---> `'./path/dep`' // `path.normalize()` gives `'path/dep'`
✓ `'./path/../dep'` ---> `'./dep`' // `path.normalize()` gives `'dep'`
✓ `'.//windows\\unix/mixed/'` ---> `'./windows/unix/mixed/`' // `path.normalize()` gives `'windows\unix/mixed/'`
✓ `'..//windows\\unix/mixed'` ---> `'../windows/unix/mixed`' // `path.normalize()` gives `'../windows\unix/mixed'`
✓ `'windows\\unix/mixed/'` ---> `'windows/unix/mixed/`' // `path.normalize()` gives `'windows\unix/mixed/'`
✓ `'..//windows\\..\unix/mixed'` ---> `'../unix/mixed`' // `path.normalize()` gives `'../windows\..\unix/mixed'`
Added methods for filename extension manipulation.
** Happy notes: **
-
All methods support '.ext' & 'ext' - the dot '.' on the extension is always adjusted correctly.
-
You can omit the 'ext'
param in all methods (or pass null/undefined) and the common sense thing will happen.
upath.addExt(filename, [ext])
Adds .ext
to filename
, but only if it doesn't already have the exact extension.
Examples / specs
`upath.addExt(filename, 'js')` --returns-->
✓ `'myfile/addExt'` ---> `'myfile/addExt.js`'
✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt.js`'
✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js`'
✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min..js`'
It adds nothing if no ext
param is passed.
`upath.addExt(filename)` --returns-->
✓ `'myfile/addExt'` ---> `'myfile/addExt`'
✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt`'
✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js`'
✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min.`'
upath.trimExt(filename)
Trims a filename's extension.
Examples / specs
`upath.trimExt(filename)` --returns-->
✓ `'my/trimedExt.txt'` ---> `'my/trimedExt`'
✓ `'my/trimedExt'` ---> `'my/trimedExt`'
✓ `'my/trimedExt.min.js'` ---> `'my/trimedExt.min`'
✓ `'../my/trimedExt.longExt'` ---> `'../my/trimedExt`'
upath.changeExt(filename, [ext])
Changes a filename's extension to ext
. If it has no extension, it adds it.
Examples / specs
`upath.changeExt(filename, 'js')` --returns-->
✓ `'my/module.coffee'` ---> `'my/module.js`'
✓ `'my/module'` ---> `'my/module.js`'
✓ `'file/withDot.'` ---> `'file/withDot.js`'
If no ext
param is is given, it trims the current extension (if any).
upath.changeExt(filename)
--returns-->
✓ `'my/module.coffee'` ---> `'my/module`'
✓ `'my/module'` ---> `'my/module`'
✓ `'file/withDot.'` ---> `'file/withDot`'
upath.defaultExt(file, [ext], [ignoreExts], [maxSize=6])
Adds .ext
to a filename, only if it doesn't already have any old extension.
-
Old extensions can be an Array
of ignoreExts
(eg [.min
]), adding the default .ext
even if one of these is present.
-
Old extensions are considered to be up to maxSize
chars long, counting the dot (defaults to 6).
Examples / specs
upath.defaultExt(filename, 'js')
--returns-->
✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js`'
✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js`'
✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min`'
✓ `'fileWith/defaultExt.longExt'` --->`'fileWith/defaultExt.longExt.js`'
If no ext
param is passed, it leaves filename intact.
upath.defaultExt(filename)
--returns-->
✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt`'
✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js`'
✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min`'
✓ `'fileWith/defaultExt.longExt'` --->`'fileWith/defaultExt.longExt`'
It is ignoring '.min' & '.dev' as extensions, and considers exts with up to 8 chars (incl dot) as extensions.
`upath.defaultExt(filename, 'js', ['min', 'dev'], 8) --returns-->
✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js`'
✓ `'fileWith/defaultExt.min'` --->`'fileWith/defaultExt.min.js`'
✓ `'fileWith/defaultExt.dev'` --->`'fileWith/defaultExt.dev.js`'
✓ `'fileWith/defaultExt.longExt'` --->`'fileWith/defaultExt.longExt`'
✓ `'fileWith/defaultExt.longRext'` --->`'fileWith/defaultExt.longRext.js`'
License
The MIT License
Copyright (c) 2013-2014 Agelos Pikoulas (agelos.pikoulas@gmail.com)
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.