Files
trevstack/client/src/lib/utils.ts
2025-05-13 17:19:12 -04:00

31 lines
754 B
TypeScript

import type { ClassValue } from 'clsx';
import { clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
export async function attempt<T, E = Error>(
func: (() => T) | Promise<T>,
handler?: ((error: E) => void) | 'throw'
): Promise<{ result: T | null; error: E | null }> {
try {
const result = await (func instanceof Promise ? func : Promise.resolve().then(func));
return { result, error: null };
} catch (error) {
if (handler === 'throw') {
throw error;
}
if (handler) {
handler(error as E);
}
return { result: null, error: error as E };
}
}
export function delay(ms: number) {
return new Promise((resolve) => setTimeout(resolve, ms));
}