import { Action } from '@rhom6us/func'; type InferArgs = F extends NodeStyleFn ? args : never; type InferResult = F extends NodeStyleFn ? result : never; type Callback = Action<[error: TError, result: TResult]>; type NodeStyleFn = Action<[...args: Args, callback: Callback]>; export function nodeCallbackToAsync(fn: T) { return (...args: InferArgs) => new Promise>((resolve, reject) => { fn(...args, (err: any, result: any) => { if (err !== undefined) { reject(err); } else { resolve(result); } }); }); }