65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| declare namespace pLocate {
 | |
| 	interface Options {
 | |
| 		/**
 | |
| 		Number of concurrently pending promises returned by `tester`. Minimum: `1`.
 | |
| 
 | |
| 		@default Infinity
 | |
| 		*/
 | |
| 		readonly concurrency?: number;
 | |
| 
 | |
| 		/**
 | |
| 		Preserve `input` order when searching.
 | |
| 
 | |
| 		Disable this to improve performance if you don't care about the order.
 | |
| 
 | |
| 		@default true
 | |
| 		*/
 | |
| 		readonly preserveOrder?: boolean;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| declare const pLocate: {
 | |
| 	/**
 | |
| 	Get the first fulfilled promise that satisfies the provided testing function.
 | |
| 
 | |
| 	@param input - An iterable of promises/values to test.
 | |
| 	@param tester - This function will receive resolved values from `input` and is expected to return a `Promise<boolean>` or `boolean`.
 | |
| 	@returns A `Promise` that is fulfilled when `tester` resolves to `true` or the iterable is done, or rejects if any of the promises reject. The fulfilled value is the current iterable value or `undefined` if `tester` never resolved to `true`.
 | |
| 
 | |
| 	@example
 | |
| 	```
 | |
| 	import pathExists = require('path-exists');
 | |
| 	import pLocate = require('p-locate');
 | |
| 
 | |
| 	const files = [
 | |
| 		'unicorn.png',
 | |
| 		'rainbow.png', // Only this one actually exists on disk
 | |
| 		'pony.png'
 | |
| 	];
 | |
| 
 | |
| 	(async () => {
 | |
| 		const foundPath = await pLocate(files, file => pathExists(file));
 | |
| 
 | |
| 		console.log(foundPath);
 | |
| 		//=> 'rainbow'
 | |
| 	})();
 | |
| 	```
 | |
| 	*/
 | |
| 	<ValueType>(
 | |
| 		input: Iterable<PromiseLike<ValueType> | ValueType>,
 | |
| 		tester: (element: ValueType) => PromiseLike<boolean> | boolean,
 | |
| 		options?: pLocate.Options
 | |
| 	): Promise<ValueType | undefined>;
 | |
| 
 | |
| 	// TODO: Remove this for the next major release, refactor the whole definition to:
 | |
| 	// declare function pLocate<ValueType>(
 | |
| 	// 	input: Iterable<PromiseLike<ValueType> | ValueType>,
 | |
| 	// 	tester: (element: ValueType) => PromiseLike<boolean> | boolean,
 | |
| 	// 	options?: pLocate.Options
 | |
| 	// ): Promise<ValueType | undefined>;
 | |
| 	// export = pLocate;
 | |
| 	default: typeof pLocate;
 | |
| };
 | |
| 
 | |
| export = pLocate;
 |