Link bookmarking tool built on aproto (early alpha)
at main 847 B view raw
1type Err = { 2 ok: false 3 value: undefined 4 error: string | Error 5} 6 7type Success<T> = { 8 ok: true 9 value: T 10 error: undefined 11} 12 13type Result<T> = Err | Success<T> 14 15export function isErr(result: Result<unknown>): result is Err { 16 return !result.ok 17} 18 19export function err(error: string | Error): Err { 20 return { 21 ok: false, 22 value: undefined, 23 error, 24 } 25} 26 27export function ok<T>(value: T): Success<T> { 28 return { 29 ok: true, 30 value, 31 error: undefined, 32 } 33} 34 35export async function tryCatch<T>(promise: Promise<T>): Promise<Result<T>> { 36 try { 37 const value = await promise 38 return ok(value) 39 } catch (error) { 40 console.error(error) 41 if (Error.isError(error)) { 42 return err(error) 43 } 44 return err(String(error)) 45 } 46}