Link bookmarking tool built on aproto (early alpha)
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}