export async function logStep( inProgressText: string, step: () => Promise | T, ): Promise; export async function logStep( inProgressText: string, step: () => Promise | T, doneText: string, ): Promise; export async function logStep( inProgressText: string, step: () => Promise | T, doneText: string = `Completed step "${inProgressText}"`, ) { console.time(doneText); console.log(`${inProgressText}...`); return Promise.resolve(step()).then((value) => { console.timeEnd(doneText); return value; }); }