replies timeline only, appview-less bluesky client
at main 795 B view raw
1export type Ok<T> = { 2 ok: true; 3 value: T; 4}; 5export type Err<E> = { 6 ok: false; 7 error: E; 8}; 9export type Result<T, E> = Ok<T> | Err<E>; 10 11export const ok = <T>(value: T): Ok<T> => { 12 return { ok: true, value }; 13}; 14export const err = <E>(error: E): Err<E> => { 15 // console.error(error); 16 return { ok: false, error }; 17}; 18export const expect = <T, E>(v: Result<T, E>, msg: string = 'expected result to not be error:') => { 19 if (v.ok) { 20 return v.value; 21 } 22 throw `${msg} ${v.error}`; 23}; 24export const map = <T, E, U>(v: Result<T, E>, fn: (value: T) => U): Result<U, E> => { 25 if (v.ok) { 26 return ok(fn(v.value)); 27 } 28 return err(v.error); 29}; 30 31export type OkType<R> = R extends { ok: true; value: infer T } ? T : never; 32export type ErrType<R> = R extends { ok: false; error: infer E } ? E : never;