trace-runner.ts 929 B

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