You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							47 lines
						
					
					
						
							968 B
						
					
					
				
			
		
		
	
	
							47 lines
						
					
					
						
							968 B
						
					
					
				| 'use strict';
 | |
| const path = require('path');
 | |
| const locatePath = require('locate-path');
 | |
| 
 | |
| module.exports = (filename, opts = {}) => {
 | |
| 	const startDir = path.resolve(opts.cwd || '');
 | |
| 	const {root} = path.parse(startDir);
 | |
| 
 | |
| 	const filenames = [].concat(filename);
 | |
| 
 | |
| 	return new Promise(resolve => {
 | |
| 		(function find(dir) {
 | |
| 			locatePath(filenames, {cwd: dir}).then(file => {
 | |
| 				if (file) {
 | |
| 					resolve(path.join(dir, file));
 | |
| 				} else if (dir === root) {
 | |
| 					resolve(null);
 | |
| 				} else {
 | |
| 					find(path.dirname(dir));
 | |
| 				}
 | |
| 			});
 | |
| 		})(startDir);
 | |
| 	});
 | |
| };
 | |
| 
 | |
| module.exports.sync = (filename, opts = {}) => {
 | |
| 	let dir = path.resolve(opts.cwd || '');
 | |
| 	const {root} = path.parse(dir);
 | |
| 
 | |
| 	const filenames = [].concat(filename);
 | |
| 
 | |
| 	// eslint-disable-next-line no-constant-condition
 | |
| 	while (true) {
 | |
| 		const file = locatePath.sync(filenames, {cwd: dir});
 | |
| 
 | |
| 		if (file) {
 | |
| 			return path.join(dir, file);
 | |
| 		}
 | |
| 
 | |
| 		if (dir === root) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		dir = path.dirname(dir);
 | |
| 	}
 | |
| };
 |