import { InvisibleDictionary, baseCodecFrom } from './BaseCodec'; import { v7 } from 'uuid'; export const InvisibleCodec = baseCodecFrom(InvisibleDictionary); export function doTimed(message: string, callback: () => T): T { if (import.meta.env.DEV) { const hiddenId = InvisibleCodec.encode(v7()); console.time(message + hiddenId); try { const output = callback(); return output; } finally { console.timeEnd(message + hiddenId); } } else { return callback(); } } export function doTimedAsync ? Promise : T>( message: string, callback: () => R, throwError: boolean = false ): R { if (import.meta.env.DEV) { return new Promise(async (resolve, reject) => { const hiddenId = InvisibleCodec.encode(v7()); console.time(message + hiddenId); try { const output = await callback(); resolve(output); } catch (err) { console.error(`Error in timed operation "${message}":`, err); if (throwError) { reject(err); } else { resolve(undefined as R); } } finally { console.timeEnd(message + hiddenId); } }) as R; } else { return callback() as R; } }