| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | 
							- 'use strict';
 
- const path = require('path');
 
- const fs = require('fs');
 
- const {promisify} = require('util');
 
- const pLocate = require('p-locate');
 
- const fsStat = promisify(fs.stat);
 
- const fsLStat = promisify(fs.lstat);
 
- const typeMappings = {
 
- 	directory: 'isDirectory',
 
- 	file: 'isFile'
 
- };
 
- function checkType({type}) {
 
- 	if (type in typeMappings) {
 
- 		return;
 
- 	}
 
- 	throw new Error(`Invalid type specified: ${type}`);
 
- }
 
- const matchType = (type, stat) => type === undefined || stat[typeMappings[type]]();
 
- module.exports = async (paths, options) => {
 
- 	options = {
 
- 		cwd: process.cwd(),
 
- 		type: 'file',
 
- 		allowSymlinks: true,
 
- 		...options
 
- 	};
 
- 	checkType(options);
 
- 	const statFn = options.allowSymlinks ? fsStat : fsLStat;
 
- 	return pLocate(paths, async path_ => {
 
- 		try {
 
- 			const stat = await statFn(path.resolve(options.cwd, path_));
 
- 			return matchType(options.type, stat);
 
- 		} catch (_) {
 
- 			return false;
 
- 		}
 
- 	}, options);
 
- };
 
- module.exports.sync = (paths, options) => {
 
- 	options = {
 
- 		cwd: process.cwd(),
 
- 		allowSymlinks: true,
 
- 		type: 'file',
 
- 		...options
 
- 	};
 
- 	checkType(options);
 
- 	const statFn = options.allowSymlinks ? fs.statSync : fs.lstatSync;
 
- 	for (const path_ of paths) {
 
- 		try {
 
- 			const stat = statFn(path.resolve(options.cwd, path_));
 
- 			if (matchType(options.type, stat)) {
 
- 				return path_;
 
- 			}
 
- 		} catch (_) {
 
- 		}
 
- 	}
 
- };
 
 
  |