1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 'use strict';
- const path = require('path');
- const locatePath = require('locate-path');
- const pathExists = require('path-exists');
-
- const stop = Symbol('findUp.stop');
-
- module.exports = async (name, options = {}) => {
- let directory = path.resolve(options.cwd || '');
- const {root} = path.parse(directory);
- const paths = [].concat(name);
-
- const runMatcher = async locateOptions => {
- if (typeof name !== 'function') {
- return locatePath(paths, locateOptions);
- }
-
- const foundPath = await name(locateOptions.cwd);
- if (typeof foundPath === 'string') {
- return locatePath([foundPath], locateOptions);
- }
-
- return foundPath;
- };
-
- // eslint-disable-next-line no-constant-condition
- while (true) {
- // eslint-disable-next-line no-await-in-loop
- const foundPath = await runMatcher({...options, cwd: directory});
-
- if (foundPath === stop) {
- return;
- }
-
- if (foundPath) {
- return path.resolve(directory, foundPath);
- }
-
- if (directory === root) {
- return;
- }
-
- directory = path.dirname(directory);
- }
- };
-
- module.exports.sync = (name, options = {}) => {
- let directory = path.resolve(options.cwd || '');
- const {root} = path.parse(directory);
- const paths = [].concat(name);
-
- const runMatcher = locateOptions => {
- if (typeof name !== 'function') {
- return locatePath.sync(paths, locateOptions);
- }
-
- const foundPath = name(locateOptions.cwd);
- if (typeof foundPath === 'string') {
- return locatePath.sync([foundPath], locateOptions);
- }
-
- return foundPath;
- };
-
- // eslint-disable-next-line no-constant-condition
- while (true) {
- const foundPath = runMatcher({...options, cwd: directory});
-
- if (foundPath === stop) {
- return;
- }
-
- if (foundPath) {
- return path.resolve(directory, foundPath);
- }
-
- if (directory === root) {
- return;
- }
-
- directory = path.dirname(directory);
- }
- };
-
- module.exports.exists = pathExists;
-
- module.exports.sync.exists = pathExists.sync;
-
- module.exports.stop = stop;
|