diff options
Diffstat (limited to '')
| -rw-r--r-- | packages/shared/tryCatch.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/packages/shared/tryCatch.ts b/packages/shared/tryCatch.ts new file mode 100644 index 00000000..9b50a121 --- /dev/null +++ b/packages/shared/tryCatch.ts @@ -0,0 +1,24 @@ +// 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 }; + } +} |
