// Type definitions for Async 0.1.23
// Project: https://github.com/caolan/async
// Definitions by: Boris Yankov
// Definitions: https://github.com/borisyankov/DefinitelyTyped
interface AsyncMultipleResultsCallback { (err: string, results: T[]): any; }
interface AsyncSingleResultCallback { (err: string, result: T): any; }
interface AsyncTimesCallback { (n: number, callback: AsyncMultipleResultsCallback): void; }
interface AsyncIterator { (item: T, callback: AsyncMultipleResultsCallback): void; }
interface AsyncMemoIterator { (memo: T, item: T, callback: AsyncSingleResultCallback): void; }
interface AsyncWorker { (task: T, callback: Function): void; }
interface AsyncQueue {
length(): number;
concurrency: number;
push(task: T, callback: AsyncMultipleResultsCallback): void;
saturated: AsyncMultipleResultsCallback;
empty: AsyncMultipleResultsCallback;
drain: AsyncMultipleResultsCallback;
}
interface Async {
// Collections
forEach(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback): void;
forEachSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback): void;
forEachLimit(arr: T[], limit: number, iterator: AsyncIterator, callback: AsyncMultipleResultsCallback): void;
map(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
mapSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
filter(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
select(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
filterSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
selectSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
reject(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
rejectSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
reduce(arr: T[], memo: T, iterator: AsyncMemoIterator, callback: AsyncSingleResultCallback);
inject(arr: T[], memo: T, iterator: AsyncMemoIterator, callback: AsyncSingleResultCallback);
foldl(arr: T[], memo: T, iterator: AsyncMemoIterator, callback: AsyncSingleResultCallback);
reduceRight(arr: T[], memo: T, iterator: AsyncMemoIterator, callback: AsyncSingleResultCallback);
foldr(arr: T[], memo: T, iterator: AsyncMemoIterator, callback: AsyncSingleResultCallback);
detect(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
detectSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
sortBy(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
some(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
any(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
every(arr: T[], iterator: AsyncIterator, callback: (result: boolean) => any);
all(arr: T[], iterator: AsyncIterator, callback: (result: boolean) => any);
concat(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
concatSeries(arr: T[], iterator: AsyncIterator, callback: AsyncMultipleResultsCallback);
// Control Flow
series(tasks: T[], callback?: AsyncMultipleResultsCallback): void;
series(tasks: T, callback?: AsyncMultipleResultsCallback): void;
parallel(tasks: T[], callback?: AsyncMultipleResultsCallback): void;
parallel(tasks: T, callback?: AsyncMultipleResultsCallback): void;
whilst(test: Function, fn: Function, callback: Function): void;
until(test: Function, fn: Function, callback: Function): void;
waterfall(tasks: T[], callback?: AsyncMultipleResultsCallback): void;
waterfall(tasks: T, callback?: AsyncMultipleResultsCallback): void;
queue(worker: AsyncWorker, concurrency: number): AsyncQueue;
// auto(tasks: any[], callback?: AsyncMultipleResultsCallback): void;
auto(tasks: any, callback?: AsyncMultipleResultsCallback): void;
iterator(tasks: Function[]): Function;
apply(fn: Function, ...arguments: any[]): void;
nextTick(callback: Function): void;
times (n: number, callback: AsyncTimesCallback): void;
timesSeries (n: number, callback: AsyncTimesCallback): void;
// Utils
memoize(fn: Function, hasher?: Function): Function;
unmemoize(fn: Function): Function;
log(fn: Function, ...arguments: any[]): void;
dir(fn: Function, ...arguments: any[]): void;
noConflict(): Async;
}
declare var async: Async;
declare module "async" {
export = async;
}