export interface Promisify { (func: (callback: (err: any, result: T) => void) => void): () => Promise; (func: (arg1: A1, callback: (err: any, result: T) => void) => void): (arg1: A1) => Promise; (func: (arg1: A1, arg2: A2, callback: (err: any, result: T) => void) => void): (arg1: A1, arg2: A2) => Promise; (func: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, result: T) => void) => void): (arg1: A1, arg2: A2, arg3: A3) => Promise; (func: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, result: T) => void) => void): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Promise; (func: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, result: T) => void) => void): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Promise; } /** * @example: const rReadFile = promisify(fs.readFile); * */ export const promisify: Promisify = function(func: Function) { return (...args: any[]) => { return new Promise((resolve, reject) => { func(...args, (err: any, response: any) => { if (err) { return reject(err); } if (response) { return resolve(response); } resolve(); }); }); }; }; export interface PromisifyNoResult { (func: (arg1: A1, callback: (err: any) => void) => void): (arg1: A1) => Promise; (func: (arg1: A1, arg2: A2, callback: (err: any) => void) => void): (arg1: A1, arg2: A2) => Promise; } export const promisifyNr: PromisifyNoResult = function(func: Function) { return (...args: any[]): Promise => { return new Promise((resolve, reject) => { func(...args, (err: any) => { if (err) { return reject(err); } resolve(); }); }); }; };