Resolve Parent Path

Resolve a path by walking parent directories.

Usage

var resolveParentPath = require( '@stdlib/fs/resolve-parent-path' );

resolveParentPath( path, [options,] clbk )

Asynchronously resolves a path by walking parent directories.

resolveParentPath( 'package.json', onPath );

function onPath( error, path ) {
    if ( error ) {
        throw error;
    }
    console.log( path );
    // => '...'
}

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.

By default, the function begins walking from the current working directory. To specify an alternative directory, set the dir option.

var opts = {
    'dir': __dirname
};
resolveParentPath( 'package.json', opts, onPath );

function onPath( error, path ) {
    if ( error ) {
        throw error;
    }
    console.log( path );
    // => '...'
}

resolveParentPath.sync( path[, options] )

Synchronously resolves a path by walking parent directories.

var path = resolveParentPath.sync( 'package.json' );
console.log( path );

The function accepts the same options as resolveParentPath().

Notes

  • If unable to resolve a path, both functions return null.
  • 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 a real absolute file path 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 resolveParentPath = require( '@stdlib/fs/resolve-parent-path' );

var opts;
var out;

opts = {
    'dir': __dirname
};

/* Sync */

out = resolveParentPath.sync( 'package.json', opts );
// returns '...'

out = resolveParentPath.sync( 'non_existent_basename' );
// returns null


/* Async */

resolveParentPath( 'package.json', opts, onPath );
resolveParentPath( './../non_existent_path', onPath );

function onPath( error, path ) {
    if ( error ) {
        throw error;
    }
    console.log( path );
}

CLI

Usage

Usage: resolve-parent-path [options] <path>

Options:

  -h,    --help                Print this message.
  -V,    --version             Print the package version.
         --dir dir             Base search directory.

Examples

$ resolve-parent-path package.json