@antora/expand-path-helper
Version:
Provides a helper function to expand a path to a normalized absolute path. This function also expands dot, tilde, and tilde plus when used as the first path segment.
134 lines (92 loc) • 3.9 kB
Markdown
# @antora/expand-path-helper
A Node.js module that provides a helper function to expand a path to a normalized absolute path.
This function also expands the following shorthand expressions when used as the first path segment: dot (`.`), tilde (`~`), or tilde plus (`~+`).
The expanded path is system dependent.
Developed for use in Antora.
## Install
```console
$ npm i @antora/expand-path-helper
```
## API
```js
function expandPath (path[, context])
```
Expands the specified path to a normalized absolute path.
The main purpose of this function is path expansion and normalization.
* `path` <string> - The path to expand.
This parameter is required.
If the path is already absolute, the path is normalized and returned.
* `context` <Object> - Named parameters that control how the path is resolved.
All named parameters are optional.
This parameter can also be specified as a String, in which case it’s used as the base context argument.
**Default:** `{}`.
* `base` <string> - The base directory from which to resolve a relative path instead of the working directory.
**Default:** `~+`
* `cwd` <string> - The absolute directory to use as the working directory instead of the current working directory.
If not specified, the current working directory is used.
**Default:** `undefined`
* `dot` <string> - The value to use to replace a leading dot (`.`) segment.
If the value is `.`, the value of the `base` context argument is used instead.
**Default:** `.`
If the first segment of the path argument, the base context argument, or the dot context argument is `~` or `~+`, that value is expanded to the user’s home directory or current working directory, respectively.
If the first segment of the path argument is `.`, that value is replaced with the dot context argument after the dot context argument is expanded.
## Usage
The output of `expandPath` depends on the system on which it is run (specifically on the `path.sep` value).
### *nix
```js
const expandPath = require('@antora/expand-path-helper')
expandPath('/absolute/path')
//=> /absolute/path
expandPath('/absolute/./path/..')
//=> /absolute
expandPath('foo/bar')
//=> $PWD/foo/bar
expandPath('./foo/bar')
//=> $PWD/foo/bar
expandPath('~/foo/bar')
//=> $HOME/foo/bar
expandPath('~+/foo/bar')
//=> $PWD/foo/bar
expandPath('~+/foo/bar', { cwd: '/working/dir' })
//=> /working/dir/foo/bar
expandPath('foo/bar', '/base/dir')
//=> /base/dir/foo/bar
expandPath('foo/bar', { base: '/base/dir' })
//=> /base/dir/foo/bar
expandPath('./foo/bar', { base: '/base/dir' })
//=> /base/dir/foo/bar
expandPath('./foo/bar', { dot: '/dot/dir' })
//=> /dot/dir/foo/bar
```
### Windows
```js
const expandPath = require('@antora/expand-path-helper')
expandPath('C:\\absolute\\path')
//=> C:\absolute\path
expandPath('C:/absolute/path')
//=> C:\absolute\path
expandPath('C:\\absolute\\.\\path\\..')
//=> C:\absolute
expandPath('foo\\bar')
//=> C:\current\directory\foo\bar
expandPath('.\\foo\\bar')
//=> C:\current\directory\foo\bar
expandPath('~\\foo\\bar')
//=> C:\Users\user\foo\bar
expandPath('~+\\foo\\bar')
//=> C:\current\directory\foo\bar
expandPath('~+\\foo\\bar', { cwd: 'C:\\working\\dir' })
//=> C:\working\dir\foo\bar
expandPath('foo\\bar', 'C:\\base\\dir')
//=> C:\base\dir\foo\bar
expandPath('foo\\bar', { base: 'C:\\base\\dir' })
//=> C:\base\dir\foo\bar
expandPath('.\\foo\\bar', { base: 'C:\\base\\dir' })
//=> C:\base\dir\foo\bar
expandPath('.\\foo\\bar', { dot: 'C:\\dot\\dir' })
//=> C:\dot\dir\foo\bar
```
On Windows, the input path may use forward slashes, but the expanded path will always have backslashes.
## Copyright and License
Copyright (C) 2018-present by OpenDevise Inc. and the individual contributors to Antora.
Use of this software is granted under the terms of the [Mozilla Public License Version 2.0](https://www.mozilla.org/en-US/MPL/2.0/) (MPL-2.0).