blob: 49da529f5c6351cf35b91d6d57401fc33c0e5818 [file] [log] [blame]
declare namespace pMap {
interface Options {
/**
Number of concurrently pending promises returned by `mapper`.
@default Infinity
*/
concurrency?: number;
}
/**
Function which is called for every item in `input`. Expected to return a `Promise` or value.
@param input - Iterated element.
@param index - Index of the element in the source array.
*/
type Mapper<Element = any, NewElement = any> = (
input: Element,
index: number
) => NewElement | Promise<NewElement>;
}
declare const pMap: {
/**
Returns a `Promise` that is fulfilled when all promises in `input` and ones returned from `mapper` are fulfilled, or rejects if any of the promises reject. The fulfilled value is an `Array` of the fulfilled values returned from `mapper` in `input` order.
@param input - Iterated over concurrently in the `mapper` function.
@param mapper - Function which is called for every item in `input`. Expected to return a `Promise` or value.
@example
```
import pMap = require('p-map');
import got = require('got');
const sites = [
getWebsiteFromUsername('sindresorhus'), //=> Promise
'ava.li',
'todomvc.com',
'github.com'
];
(async () => {
const mapper = async site => {
const {requestUrl} = await got.head(site);
return requestUrl;
};
const result = await pMap(sites, mapper, {concurrency: 2});
console.log(result);
//=> ['http://sindresorhus.com/', 'http://ava.li/', 'http://todomvc.com/', 'http://github.com/']
})();
```
*/
<Element, NewElement>(
input: Iterable<Element>,
mapper: pMap.Mapper<Element, NewElement>,
options?: pMap.Options
): Promise<NewElement[]>;
// TODO: Remove this for the next major release, refactor the whole definition to:
// declare function pMap<Element, NewElement>(
// input: Iterable<Element>,
// mapper: pMap.Mapper<Element, NewElement>,
// options?: pMap.Options
// ): Promise<NewElement[]>;
// export = pMap;
default: typeof pMap;
};
export = pMap;