UNPKG

23.2 kBTypeScriptView Raw
1// Type definitions for Async 3.2
2// Project: https://github.com/caolan/async, https://caolan.github.io/async
3// Definitions by: Boris Yankov <https://github.com/borisyankov>
4// Arseniy Maximov <https://github.com/kern0>
5// Joe Herman <https://github.com/Penryn>
6// Angus Fenying <https://github.com/fenying>
7// Pascal Martin <https://github.com/pascalmartin>
8// Dmitri Trofimov <https://github.com/Dmitri1337>
9// Etienne Rossignon <https://github.com/erossignon>
10// Lifeng Zhu <https://github.com/Juliiii>
11// Tümay Çeber <https://github.com/brendtumi>
12// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
13// TypeScript Version: 2.3
14
15export as namespace async;
16
17export interface Dictionary<T> { [key: string]: T; }
18export type IterableCollection<T> = T[] | IterableIterator<T> | Dictionary<T>;
19
20export interface ErrorCallback<E = Error> { (err?: E | null): void; }
21export interface AsyncBooleanResultCallback<E = Error> { (err?: E | null, truthValue?: boolean): void; }
22export interface AsyncResultCallback<T, E = Error> { (err?: E | null, result?: T): void; }
23export interface AsyncResultArrayCallback<T, E = Error> { (err?: E | null, results?: Array<T | undefined>): void; }
24export interface AsyncResultObjectCallback<T, E = Error> { (err: E | undefined, results: Dictionary<T | undefined>): void; }
25
26export interface AsyncFunction<T, E = Error> { (callback: (err?: E | null, result?: T) => void): void; }
27export interface AsyncFunctionEx<T, E = Error> { (callback: (err?: E | null, ...results: T[]) => void): void; }
28export interface AsyncIterator<T, E = Error> { (item: T, callback: ErrorCallback<E>): void; }
29export interface AsyncForEachOfIterator<T, E = Error> { (item: T, key: number|string, callback: ErrorCallback<E>): void; }
30export interface AsyncResultIterator<T, R, E = Error> { (item: T, callback: AsyncResultCallback<R, E>): void; }
31export interface AsyncMemoIterator<T, R, E = Error> { (memo: R | undefined, item: T, callback: AsyncResultCallback<R, E>): void; }
32export interface AsyncBooleanIterator<T, E = Error> { (item: T, callback: AsyncBooleanResultCallback<E>): void; }
33
34export interface AsyncWorker<T, E = Error> { (task: T, callback: ErrorCallback<E>): void; }
35export interface AsyncVoidFunction<E = Error> { (callback: ErrorCallback<E>): void; }
36
37export type AsyncAutoTasks<R extends Dictionary<any>, E> = { [K in keyof R]: AsyncAutoTask<R[K], R, E> };
38export type AsyncAutoTask<R1, R extends Dictionary<any>, E> = AsyncAutoTaskFunctionWithoutDependencies<R1, E> | Array<keyof R | AsyncAutoTaskFunction<R1, R, E>>;
39export interface AsyncAutoTaskFunctionWithoutDependencies<R1, E = Error> { (cb: AsyncResultCallback<R1, E> | ErrorCallback<E>): void; }
40export interface AsyncAutoTaskFunction<R1, R extends Dictionary<any>, E = Error> { (results: R, cb: AsyncResultCallback<R1, E> | ErrorCallback<E>): void; }
41
42export interface DataContainer<T> {
43 data: T;
44 priority: number;
45}
46
47export interface CallbackContainer {
48 callback: Function;
49}
50
51export interface PriorityContainer {
52 priority: number;
53}
54
55export interface QueueObject<T> {
56 /**
57 * Returns the number of items waiting to be processed.
58 */
59 length(): number;
60
61 /**
62 * Indicates whether or not any items have been pushed and processed by the queue.
63 */
64 started: boolean;
65
66 /**
67 * Returns the number of items currently being processed.
68 */
69 running(): number;
70
71 /**
72 * Returns an array of items currently being processed.
73 */
74 workersList<TWorker extends DataContainer<T>, CallbackContainer>(): TWorker[];
75
76 /**
77 * Returns false if there are items waiting or being processed, or true if not.
78 */
79 idle(): boolean;
80
81 /**
82 * An integer for determining how many worker functions should be run in parallel.
83 * This property can be changed after a queue is created to alter the concurrency on-the-fly.
84 */
85 concurrency: number;
86
87 /**
88 * An integer that specifies how many items are passed to the worker function at a time.
89 * Only applies if this is a cargo object
90 */
91 payload: number;
92
93 /**
94 * Add a new task to the queue. Calls `callback` once the worker has finished
95 * processing the task.
96 *
97 * Instead of a single task, a tasks array can be submitted.
98 * The respective callback is used for every task in the list.
99 */
100 push<R>(task: T | T[]): Promise<R>;
101 push<R, E = Error>(task: T | T[], callback: AsyncResultCallback<R, E>): void;
102
103 /**
104 * Add a new task to the front of the queue
105 */
106 unshift<R>(task: T | T[]): Promise<R>;
107 unshift<R, E = Error>(task: T | T[], callback: AsyncResultCallback<R, E>): void;
108
109 /**
110 * The same as `q.push`, except this returns a promise that rejects if an error occurs.
111 * The `callback` arg is ignored
112 */
113 pushAsync<R>(task: T | T[]): Promise<R>;
114
115 /**
116 * The same as `q.unshift`, except this returns a promise that rejects if an error occurs.
117 * The `callback` arg is ignored
118 */
119 unshiftAsync<R>(task: T | T[]): Promise<R>;
120
121 /**
122 * Remove items from the queue that match a test function.
123 * The test function will be passed an object with a `data` property,
124 * and a `priority` property, if this is a `priorityQueue` object.
125 */
126 remove(filter: (node: DataContainer<T>) => boolean): void;
127
128 /**
129 * A function that sets a callback that is called when the number of
130 * running workers hits the `concurrency` limit, and further tasks will be
131 * queued.
132 *
133 * If the callback is omitted, `q.saturated()` returns a promise
134 * for the next occurrence.
135 */
136 saturated(): Promise<void>;
137 saturated(handler: () => void): void;
138
139 /**
140 * A function that sets a callback that is called when the number
141 * of running workers is less than the `concurrency` & `buffer` limits,
142 * and further tasks will not be queued
143 *
144 * If the callback is omitted, `q.unsaturated()` returns a promise
145 * for the next occurrence.
146 */
147 unsaturated(): Promise<void>;
148 unsaturated(handler: () => void): void;
149
150 /**
151 * A minimum threshold buffer in order to say that the `queue` is `unsaturated`.
152 */
153 buffer: number;
154
155 /**
156 * A function that sets a callback that is called when the last item from the `queue`
157 * is given to a `worker`.
158 *
159 * If the callback is omitted, `q.empty()` returns a promise for the next occurrence.
160 */
161 empty(): Promise<void>;
162 empty(handler: () => void): void;
163
164 /**
165 * A function that sets a callback that is called when the last item from
166 * the `queue` has returned from the `worker`.
167 *
168 * If the callback is omitted, `q.drain()` returns a promise for the next occurrence.
169 */
170 drain(): Promise<void>;
171 drain(handler: () => void): void;
172
173 /**
174 * A function that sets a callback that is called when a task errors.
175 *
176 * If the callback is omitted, `q.error()` returns a promise that rejects on the next error.
177 */
178 error(): Promise<never>;
179 error(handler: (error: Error, task: T) => void): void;
180
181 /**
182 * A boolean for determining whether the queue is in a paused state.
183 */
184 paused: boolean;
185
186 /**
187 * A function that pauses the processing of tasks until `q.resume()` is called.
188 */
189 pause(): void;
190
191 /**
192 * A function that resumes the processing of queued tasks when the queue
193 * is paused.
194 */
195 resume(): void;
196
197 /**
198 * A function that removes the drain callback and empties remaining tasks
199 * from the queue forcing it to go idle. No more tasks should be pushed to
200 * the queue after calling this function.
201 */
202 kill(): void;
203}
204
205/**
206 * A priorityQueue object to manage the tasks.
207 *
208 * There are two differences between queue and priorityQueue objects:
209 * - `push(task, priority, [callback])` — priority should be a number. If an array of tasks is given, all tasks will be assigned the same priority.
210 * - The `unshift` method was removed.
211 */
212// FIXME: can not use Omit due to ts version restriction. Replace Pick with Omit, when ts 3.5+ will be allowed
213export interface AsyncPriorityQueue<T> extends Pick<QueueObject<T>, Exclude<keyof QueueObject<T>, 'push' | 'unshift'>> {
214 push<R>(task: T | T[], priority?: number): Promise<R>;
215 push<R, E = Error>(task: T | T[], priority: number, callback: AsyncResultCallback<R, E>): void;
216}
217
218/**
219 * @deprecated this is a type that left here for backward compatibility.
220 * Please use QueueObject instead
221 */
222export type AsyncQueue<T> = QueueObject<T>;
223
224/**
225 * @deprecated this is a type that left here for backward compatibility.
226 * Please use QueueObject instead
227 */
228export type AsyncCargoQueue<T = any> = QueueObject<T>;
229
230// Collections
231export function each<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncIterator<T, E>, callback: ErrorCallback<E>): void;
232export function each<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncIterator<T, E>): Promise<void>;
233export const eachSeries: typeof each;
234export function eachLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncIterator<T, E>, callback: ErrorCallback<E>): void;
235export function eachLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncIterator<T, E>): Promise<void>;
236export const forEach: typeof each;
237export const forEachSeries: typeof each;
238export const forEachLimit: typeof eachLimit;
239export function forEachOf<T, E = Error>(obj: IterableCollection<T>, iterator: AsyncForEachOfIterator<T, E>, callback: ErrorCallback<E>): void;
240export function forEachOf<T, E = Error>(obj: IterableCollection<T>, iterator: AsyncForEachOfIterator<T, E>): Promise<void>;
241export const forEachOfSeries: typeof forEachOf;
242export function forEachOfLimit<T, E = Error>(obj: IterableCollection<T>, limit: number, iterator: AsyncForEachOfIterator<T, E>, callback: ErrorCallback<E>): void;
243export function forEachOfLimit<T, E = Error>(obj: IterableCollection<T>, limit: number, iterator: AsyncForEachOfIterator<T, E>): Promise<void>;
244export const eachOf: typeof forEachOf;
245export const eachOfSeries: typeof forEachOf;
246export const eachOfLimit: typeof forEachOfLimit;
247export function map<T, R, E = Error>(arr: T[] | IterableIterator<T> | Dictionary<T>, iterator: AsyncResultIterator<T, R, E>, callback: AsyncResultArrayCallback<R, E>): void;
248export function map<T, R, E = Error>(arr: T[] | IterableIterator<T> | Dictionary<T>, iterator: AsyncResultIterator<T, R, E>): Promise<R[]>;
249export const mapSeries: typeof map;
250export function mapLimit<T, R, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncResultIterator<T, R, E>, callback: AsyncResultArrayCallback<R, E>): void;
251export function mapLimit<T, R, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncResultIterator<T, R, E>): Promise<R[]>;
252
253export function mapValuesLimit<T, R, E = Error>(
254 obj: Dictionary<T>,
255 limit: number,
256 iteratee: (value: T, key: string, callback: AsyncResultCallback<R, E>) => void,
257 callback: AsyncResultObjectCallback<R, E>
258 ): void;
259export function mapValuesLimit<T, R, E = Error>(
260 obj: Dictionary<T>,
261 limit: number,
262 iteratee: (value: T, key: string, callback: AsyncResultCallback<R, E>) => void
263): Promise<R>;
264
265export function mapValues<T, R, E = Error>(obj: Dictionary<T>, iteratee: (value: T, key: string, callback: AsyncResultCallback<R, E>) => void, callback: AsyncResultObjectCallback<R, E>): void;
266export function mapValues<T, R, E = Error>(obj: Dictionary<T>, iteratee: (value: T, key: string, callback: AsyncResultCallback<R, E>) => void): Promise<R>;
267export const mapValuesSeries: typeof mapValues;
268export function filter<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncBooleanIterator<T, E>, callback: AsyncResultArrayCallback<T, E>): void;
269export function filter<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncBooleanIterator<T, E>): Promise<T[]>;
270export const filterSeries: typeof filter;
271export function filterLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncBooleanIterator<T, E>, callback: AsyncResultArrayCallback<T, E>): void;
272export function filterLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncBooleanIterator<T, E>): Promise<T[]>;
273export const select: typeof filter;
274export const selectSeries: typeof filter;
275export const selectLimit: typeof filterLimit;
276export const reject: typeof filter;
277export const rejectSeries: typeof filter;
278export const rejectLimit: typeof filterLimit;
279export function reduce<T, R, E = Error>(arr: T[] | IterableIterator<T>, memo: R, iterator: AsyncMemoIterator<T, R, E>, callback?: AsyncResultCallback<R, E>): void;
280export const inject: typeof reduce;
281export const foldl: typeof reduce;
282export const reduceRight: typeof reduce;
283export const foldr: typeof reduce;
284export function detect<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncResultCallback<T, E>): void;
285export const detectSeries: typeof detect;
286export function detectLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncResultCallback<T, E>): void;
287export const find: typeof detect;
288export const findSeries: typeof detect;
289export const findLimit: typeof detectLimit;
290export function sortBy<T, V, E = Error>(arr: T[] | IterableIterator<T>, iterator: AsyncResultIterator<T, V, E>, callback?: AsyncResultArrayCallback<T, E>): void;
291export function some<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncBooleanResultCallback<E>): void;
292export const someSeries: typeof some;
293export function someLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncBooleanResultCallback<E>): void;
294export const any: typeof some;
295export const anySeries: typeof someSeries;
296export const anyLimit: typeof someLimit;
297export function every<T, E = Error>(arr: IterableCollection<T>, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncBooleanResultCallback<E>): void;
298export const everySeries: typeof every;
299export function everyLimit<T, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncBooleanIterator<T, E>, callback?: AsyncBooleanResultCallback<E>): void;
300export const all: typeof every;
301export const allSeries: typeof every;
302export const allLimit: typeof everyLimit;
303
304export function concat<T, R, E = Error>(arr: IterableCollection<T>, iterator: AsyncResultIterator<T, R[], E>, callback?: AsyncResultArrayCallback<R, E>): void;
305export function concatLimit<T, R, E = Error>(arr: IterableCollection<T>, limit: number, iterator: AsyncResultIterator<T, R[], E>, callback?: AsyncResultArrayCallback<R, E>): void;
306export const concatSeries: typeof concat;
307
308// Control Flow
309export function series<T, E = Error>(tasks: Array<AsyncFunction<T, E>>, callback?: AsyncResultArrayCallback<T, E>): void;
310export function series<T, E = Error>(tasks: Dictionary<AsyncFunction<T, E>>, callback?: AsyncResultObjectCallback<T, E>): void;
311export function series<T, R, E = Error>(tasks: Array<AsyncFunction<T, E>> | Dictionary<AsyncFunction<T, E>>): Promise<R>;
312export function parallel<T, E = Error>(tasks: Array<AsyncFunction<T, E>>, callback?: AsyncResultArrayCallback<T, E>): void;
313export function parallel<T, E = Error>(tasks: Dictionary<AsyncFunction<T, E>>, callback?: AsyncResultObjectCallback<T, E>): void;
314export function parallel<T, R, E = Error>(tasks: Array<AsyncFunction<T, E>> | Dictionary<AsyncFunction<T, E>>): Promise<R>;
315export function parallelLimit<T, E = Error>(tasks: Array<AsyncFunction<T, E>>, limit: number, callback?: AsyncResultArrayCallback<T, E>): void;
316export function parallelLimit<T, E = Error>(tasks: Dictionary<AsyncFunction<T, E>>, limit: number, callback?: AsyncResultObjectCallback<T, E>): void;
317export function parallelLimit<T, R, E = Error>(tasks: Array<AsyncFunction<T, E>> | Dictionary<AsyncFunction<T, E>>, limit: number): Promise<R>;
318export function whilst<E = Error>(test: (cb: (err: any, truth: boolean) => boolean) => boolean, fn: AsyncVoidFunction<E>, callback: ErrorCallback<E>): void;
319export function whilst<R, E = Error>(test: (cb: (err: any, truth: boolean) => boolean) => boolean, fn: AsyncVoidFunction<E>): Promise<R>;
320export function doWhilst<T, E = Error>(fn: AsyncFunctionEx<T, E>, test: (...results: T[]) => boolean, callback: ErrorCallback<E>): void;
321export function doWhilst<T, R, E = Error>(fn: AsyncFunctionEx<T, E>, test: (...results: T[]) => boolean): Promise<R>;
322export function until<E = Error>(test: () => boolean, fn: AsyncVoidFunction<E>, callback: ErrorCallback<E>): void;
323export function until<R, E = Error>(test: () => boolean, fn: AsyncVoidFunction<E>): Promise<R>;
324export function doUntil<T, E = Error>(fn: AsyncFunctionEx<T, E>, test: (...results: T[]) => boolean, callback: ErrorCallback<E>): void;
325export function doUntil<T, R, E = Error>(fn: AsyncFunctionEx<T, E>, test: (...results: T[]) => boolean): Promise<R>;
326export function during<E = Error>(test: (testCallback: AsyncBooleanResultCallback<E>) => void, fn: AsyncVoidFunction<E>, callback: ErrorCallback<E>): void;
327export function doDuring<E = Error>(fn: AsyncVoidFunction<E>, test: (testCallback: AsyncBooleanResultCallback<E>) => void, callback: ErrorCallback<E>): void;
328export function forever<E = Error>(next: (next: ErrorCallback<E>) => void, errBack: ErrorCallback<E>): void;
329export function waterfall<T, E = Error>(tasks: Function[], callback?: AsyncResultCallback<T, E>): void;
330export function compose(...fns: Function[]): Function;
331export function seq(...fns: Function[]): Function;
332export function applyEach(fns: Function[], ...argsAndCallback: any[]): void; // applyEach(fns, args..., callback). TS does not support ... for a middle argument. Callback is optional.
333export function applyEachSeries(fns: Function[], ...argsAndCallback: any[]): void; // applyEachSeries(fns, args..., callback). TS does not support ... for a middle argument. Callback is optional.
334export function queue<T, E = Error>(worker: AsyncWorker<T, E>, concurrency?: number): QueueObject<T>;
335export function queue<T, R, E = Error>(worker: AsyncResultIterator<T, R, E>, concurrency?: number): QueueObject<T>;
336export function priorityQueue<T, E = Error>(worker: AsyncWorker<T, E>, concurrency?: number): AsyncPriorityQueue<T>;
337export function cargo<T, E = Error>(worker: AsyncWorker<T[], E>, payload?: number): QueueObject<T>;
338export function cargoQueue<T, E = Error>(
339 worker: AsyncWorker<T[], E>,
340 concurrency?: number,
341 payload?: number,
342): QueueObject<T>;
343export function auto<R extends Dictionary<any>, E = Error>(tasks: AsyncAutoTasks<R, E>, concurrency?: number, callback?: AsyncResultCallback<R, E>): void;
344export function auto<R extends Dictionary<any>, E = Error>(tasks: AsyncAutoTasks<R, E>, callback?: AsyncResultCallback<R, E>): void;
345export function autoInject<E = Error>(tasks: any, callback?: AsyncResultCallback<any, E>): void;
346
347export interface RetryOptions<E> {
348 times?: number | undefined;
349 interval?: number | ((retryCount: number) => number) | undefined;
350 errorFilter?: ((error: E) => boolean) | undefined;
351}
352export function retry<T, E = Error>(
353 task: (() => Promise<T>) | ((callback: AsyncResultCallback<T, E>) => void),
354): Promise<T>;
355export function retry<T, E = Error>(
356 opts: number | RetryOptions<E>,
357 task: (() => Promise<T>) | ((callback: AsyncResultCallback<T, E>) => void),
358): Promise<T>;
359export function retry<T, E = Error>(
360 task: (() => Promise<T>) | ((callback: AsyncResultCallback<T, E>) => void),
361 callback: AsyncResultCallback<T, E>,
362): void;
363export function retry<T, E = Error>(
364 opts: number | RetryOptions<E>,
365 task: (() => Promise<T>) | ((callback: AsyncResultCallback<T, E>) => void),
366 callback: AsyncResultCallback<T, E>,
367): void;
368
369export function retryable<T, E = Error>(task: AsyncFunction<T, E>): AsyncFunction<T, E>;
370export function retryable<T, E = Error>(
371 opts: number | (RetryOptions<E> & { arity?: number | undefined }),
372 task: AsyncFunction<T, E>,
373): AsyncFunction<T, E>;
374export function apply<E = Error>(fn: Function, ...args: any[]): AsyncFunction<any, E>;
375export function nextTick(callback: Function, ...args: any[]): void;
376export const setImmediate: typeof nextTick;
377
378export function reflect<T, E = Error>(fn: AsyncFunction<T, E>): (callback: (err: null, result: {error?: E | undefined, value?: T | undefined}) => void) => void;
379export function reflectAll<T, E = Error>(tasks: Array<AsyncFunction<T, E>>): Array<(callback: (err: null, result: {error?: E | undefined, value?: T | undefined}) => void) => void>;
380
381export function timeout<T, E = Error>(fn: AsyncFunction<T, E>, milliseconds: number, info?: any): AsyncFunction<T, E>;
382export function timeout<T, R, E = Error>(fn: AsyncResultIterator<T, R, E>, milliseconds: number, info?: any): AsyncResultIterator<T, R, E>;
383
384export function times<T, E = Error>(n: number, iterator: AsyncResultIterator<number, T, E>, callback: AsyncResultArrayCallback<T, E>): void;
385export function times<T, E = Error>(n: number, iterator: AsyncResultIterator<number, T, E>): Promise<T>;
386export const timesSeries: typeof times;
387export function timesLimit<T, E = Error>(n: number, limit: number, iterator: AsyncResultIterator<number, T, E>, callback: AsyncResultArrayCallback<T, E>): void;
388export function timesLimit<T, E = Error>(n: number, limit: number, iterator: AsyncResultIterator<number, T, E>): Promise<T>;
389
390export function transform<T, R, E = Error>(arr: T[], iteratee: (acc: R[], item: T, key: number, callback: (error?: E) => void) => void, callback?: AsyncResultArrayCallback<T, E>): void;
391export function transform<T, R, E = Error>(arr: T[], acc: R[], iteratee: (acc: R[], item: T, key: number, callback: (error?: E) => void) => void, callback?: AsyncResultArrayCallback<T, E>): void;
392
393export function transform<T, R, E = Error>(
394 arr: {[key: string]: T},
395 iteratee: (acc: {[key: string]: R}, item: T, key: string, callback: (error?: E) => void) => void,
396 callback?: AsyncResultObjectCallback<T, E>
397 ): void;
398
399export function transform<T, R, E = Error>(
400 arr: {[key: string]: T},
401 acc: {[key: string]: R},
402 iteratee: (acc: {[key: string]: R}, item: T, key: string, callback: (error?: E) => void) => void,
403 callback?: AsyncResultObjectCallback<T, E>
404 ): void;
405
406export function race<T, E = Error>(tasks: Array<AsyncFunction<T, E>>, callback: AsyncResultCallback<T, E>): void;
407
408// Utils
409export function memoize(fn: Function, hasher?: Function): Function;
410export function unmemoize(fn: Function): Function;
411export function ensureAsync(fn: (... argsAndCallback: any[]) => void): Function;
412export function constant(...values: any[]): AsyncFunction<any>;
413export function asyncify(fn: Function): (...args: any[]) => any;
414export function wrapSync(fn: Function): Function;
415export function log(fn: Function, ...args: any[]): void;
416export function dir(fn: Function, ...args: any[]): void;