Files
karakeep-mirror/packages/shared/tryCatch.ts
2025-07-27 22:50:52 +01:00

25 lines
481 B
TypeScript

// Types for the result object with discriminated union
interface Success<T> {
data: T;
error: null;
}
interface Failure<E> {
data: null;
error: E;
}
type Result<T, E = Error> = Success<T> | Failure<E>;
// Main wrapper function
export async function tryCatch<T, E = Error>(
promise: Promise<T>,
): Promise<Result<T, E>> {
try {
const data = await promise;
return { data, error: null };
} catch (error) {
return { data: null, error: error as E };
}
}