resolveParentPaths
Resolve paths from a set of paths by walking parent directories.
Usage
var resolveParentPaths = require( '@stdlib/fs/resolve-parent-paths' );
resolveParentPaths( paths[, options], clbk )
Asynchronously resolves paths from a set of paths by walking parent directories.
resolveParentPaths( [ 'package.json', 'package-lock.json' ], onPaths );
function onPaths( error, paths ) {
if ( error ) {
throw error;
}
console.log( paths );
// => [...]
}
The function accepts the following options
:
dir: base directory from which to begin walking. May be either an absolute path or a path relative to the current working directory.
mode: mode of operation. The following modes are supported:
first
: return the first resolved path.some
: return one or more paths resolved within the first directory level containing a match.all
: return all resolved paths within the first directory level containing matches for all provided paths.each
: independently return the first resolved path for each path at any directory level.
Default:
'all'
.
By default, the function begins walking from the current working directory. To specify an alternative directory, set the dir
option.
var opts = {
'dir': __dirname
};
resolveParentPaths( [ 'package.json' ], opts, onPaths );
function onPaths( error, paths ) {
if ( error ) {
throw error;
}
console.log( paths );
// => [...]
}
By default, the function requires that a directory contains matches for all provided paths before returning results. To specify an alternative operation mode, set the mode
option.
var opts = {
'dir': __dirname,
'mode': 'first'
};
resolveParentPaths( [ 'package.json', 'package-lock.json' ], opts, onPaths );
function onPaths( error, paths ) {
if ( error ) {
throw error;
}
console.log( paths );
// => [...]
}
resolveParentPaths.sync( paths[, options] )
Synchronously resolves paths from a set of paths by walking parent directories.
var paths = resolveParentPaths.sync( [ 'package.json', 'README.md' ] );
// returns [...]
The function accepts the same options
as resolveParentPaths()
.
Notes
- In
some
mode, the return order of asynchronously resolved paths is not guaranteed. - This implementation is not similar in functionality to core
path.resolve
. The latter performs string manipulation to generate a full path. This implementation walks parent directories to perform a search, thereby touching the file system. Accordingly, this implementation resolves real absolute file paths and is intended for use when a target's location in a parent directory is unknown relative to a child directory; e.g., when wanting to find a package root from deep within a package directory.
Examples
var resolveParentPaths = require( '@stdlib/fs/resolve-parent-paths' );
var opts = {
'dir': __dirname
};
/* Sync */
var out = resolveParentPaths.sync( [ 'package.json', 'README.md' ], opts );
// returns [...]
out = resolveParentPaths.sync( [ 'non_existent_basename' ], opts );
// returns []
opts.mode = 'first';
out = resolveParentPaths.sync( [ 'non_existent_basename', 'package.json' ], opts );
// returns [...]
/* Async */
resolveParentPaths( [ 'package.json', 'README.md' ], opts, onPaths );
resolveParentPaths( [ './../non_existent_path' ], onPaths );
function onPaths( error, paths ) {
if ( error ) {
throw error;
}
console.log( paths );
}
CLI
Usage
Usage: resolve-parent-paths [options] <path> [<path>...]
Options:
-h, --help Print this message.
-V, --version Print the package version.
--dir dir Base search directory.
--mode mode Mode of operation.
Examples
$ resolve-parent-paths package.json package-lock.json