Skip to content

Instantly share code, notes, and snippets.

@davidpfahler
Last active June 16, 2022 13:27
Show Gist options
  • Save davidpfahler/0fb8fc594075a70a844baf83ca7fe5c0 to your computer and use it in GitHub Desktop.
Save davidpfahler/0fb8fc594075a70a844baf83ca7fe5c0 to your computer and use it in GitHub Desktop.
import { Prisma } from "@prisma/client";
type PrismaError =
| Prisma.PrismaClientKnownRequestError
| Prisma.PrismaClientUnknownRequestError
| Prisma.PrismaClientRustPanicError
| Prisma.PrismaClientInitializationError
| Prisma.PrismaClientValidationError;
export const catchPromiseErrors = async <E, T>(promise: Promise<T>): Promise<[T, null] | [null, E]> => {
try {
return [await promise, null];
} catch (e) {
return [null, e as E];
}
};
export const catchFunctionErrors = async <E, T>(fn: () => Promise<T> | T): Promise<[T, null] | [null, E]> => {
try {
return [await fn(), null];
} catch (e) {
return [null, e as E];
}
};
export const catchPrimsaErrors = async <T>(promise: Promise<T>): Promise<[T, null] | [null, PrismaError]> => {
const [res, err] = await catchPromiseErrors<PrismaError, T>(promise);
if (err == null) {
return [res, null];
}
if (
err instanceof Prisma.PrismaClientKnownRequestError ||
err instanceof Prisma.PrismaClientUnknownRequestError ||
err instanceof Prisma.PrismaClientRustPanicError ||
err instanceof Prisma.PrismaClientInitializationError ||
err instanceof Prisma.PrismaClientValidationError
) {
return [null, err];
}
throw err;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment