diff --git a/index.d.ts b/index.d.ts index 1fe075b..14115e1 100644 --- a/index.d.ts +++ b/index.d.ts @@ -1,30 +1,64 @@ -export interface Options { - /** - * Number of concurrently pending promises returned by `tester`. Minimum: `1`. - * - * @default Infinity - */ - readonly concurrency?: number; +declare namespace pLocate { + interface Options { + /** + Number of concurrently pending promises returned by `tester`. Minimum: `1`. - /** - * Preserve `input` order when searching. - * - * Disable this to improve performance if you don't care about the order. - * - * @default true - */ - readonly preserveOrder?: boolean; + @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; + } } -/** - * 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` 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`. - */ -export default function pLocate( - input: Iterable | ValueType>, - tester: (element: ValueType) => PromiseLike | boolean, - options?: Options -): Promise; +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` 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' + })(); + ``` + */ + ( + input: Iterable | ValueType>, + tester: (element: ValueType) => PromiseLike | boolean, + options?: pLocate.Options + ): Promise; + + // TODO: Remove this for the next major release, refactor the whole definition to: + // declare function pLocate( + // input: Iterable | ValueType>, + // tester: (element: ValueType) => PromiseLike | boolean, + // options?: pLocate.Options + // ): Promise; + // export = pLocate; + default: typeof pLocate; +}; + +export = pLocate; diff --git a/index.js b/index.js index 7e7fb80..e13ce15 100644 --- a/index.js +++ b/index.js @@ -48,4 +48,5 @@ const pLocate = async (iterable, tester, options) => { }; module.exports = pLocate; +// TODO: Remove this for the next major release module.exports.default = pLocate; diff --git a/index.test-d.ts b/index.test-d.ts index ee4cc30..43b8979 100644 --- a/index.test-d.ts +++ b/index.test-d.ts @@ -1,5 +1,5 @@ -import {expectType} from 'tsd-check'; -import pLocate from '.'; +import {expectType} from 'tsd'; +import pLocate = require('.'); const files = new Set([ 'unicorn.png', diff --git a/package.json b/package.json index f317bd9..137b122 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "node": ">=8" }, "scripts": { - "test": "xo && ava && tsd-check" + "test": "xo && ava && tsd" }, "files": [ "index.js", @@ -40,14 +40,14 @@ "bluebird" ], "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" }, "devDependencies": { - "ava": "^1.3.1", + "ava": "^1.4.1", "delay": "^4.1.0", "in-range": "^1.0.0", "time-span": "^3.0.0", - "tsd-check": "^0.3.0", + "tsd": "^0.7.2", "xo": "^0.24.0" } }