trace-runner.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import path from 'path';
  2. import picocolors from 'picocolors';
  3. function traceSync<T>(prefix: string, fn: () => T): T {
  4. const start = Bun.nanoseconds();
  5. const result = fn();
  6. const end = Bun.nanoseconds();
  7. console.log(`${picocolors.gray(`[${((end - start) / 1e6).toFixed(3)}ms]`)} ${prefix}`);
  8. return result;
  9. }
  10. traceSync.skip = <T>(prefix: string, fn: () => T): T => fn();
  11. export { traceSync };
  12. const traceAsync = async <T>(prefix: string, fn: () => Promise<T>): Promise<T> => {
  13. const start = Bun.nanoseconds();
  14. const result = await fn();
  15. const end = Bun.nanoseconds();
  16. console.log(`${picocolors.gray(`[${((end - start) / 1e6).toFixed(3)}ms]`)} ${prefix}`);
  17. return result;
  18. };
  19. export { traceAsync };
  20. export interface TaskResult {
  21. readonly start: number,
  22. readonly end: number,
  23. readonly taskName: string
  24. }
  25. const task = <T>(importMetaPath: string, fn: () => Promise<T>, customname: string | null = null) => {
  26. const taskName = customname ?? path.basename(importMetaPath, path.extname(importMetaPath));
  27. return async () => {
  28. console.log(`🏃 [${taskName}] Start executing`);
  29. const start = Bun.nanoseconds();
  30. await fn();
  31. const end = Bun.nanoseconds();
  32. console.log(`✅ [${taskName}] [${((end - start) / 1e6).toFixed(3)}ms] Executed successfully`);
  33. return { start, end, taskName } as TaskResult;
  34. };
  35. };
  36. export { task };