trace-runner.ts 904 B

1234567891011121314151617181920212223242526
  1. import picocolors from 'picocolors';
  2. type Formatter = (result: string) => string;
  3. export function traceSync<T>(prefix: string, fn: () => T, timeFormatter: Formatter = picocolors.blue): T {
  4. const start = Bun.nanoseconds();
  5. const result = fn();
  6. const end = Bun.nanoseconds();
  7. console.log(`${timeFormatter(`[${((end - start) / 1e6).toFixed(3)}ms]`)} ${prefix}`);
  8. return result;
  9. }
  10. traceSync.skip = <T>(_prefix: string, fn: () => T): T => fn();
  11. export const traceAsync = async <T>(prefix: string, fn: () => Promise<T>, timeFormatter: Formatter = picocolors.blue): Promise<T> => {
  12. const start = Bun.nanoseconds();
  13. const result = await fn();
  14. const end = Bun.nanoseconds();
  15. console.log(`${timeFormatter(`[${((end - start) / 1e6).toFixed(3)}ms]`)} ${prefix}`);
  16. return result;
  17. };
  18. export interface TaskResult {
  19. readonly start: number,
  20. readonly end: number,
  21. readonly taskName: string
  22. }