Add base app

This commit is contained in:
2022-04-24 23:12:11 +02:00
commit de8c03f342
33 changed files with 1380 additions and 0 deletions

View File

@@ -0,0 +1 @@
export * as result from './result'

View File

@@ -0,0 +1,60 @@
import { result } from '.'
type Ok<T> = {
type: 'ok'
val: T
}
export const ok = <T>(val: T): Ok<T> => ({ type: 'ok', val })
type Err<T> = {
type: 'err'
err: T
}
export const err = <T>(err: T): Err<T> => ({ type: 'err', err })
export type Result<TOk, TErr> = Ok<TOk> | Err<TErr>
export const isOk = <TOk, TErr>(r: result.Result<TOk, TErr>): boolean => {
switch (r.type) {
case 'ok':
return true
default:
return false
}
}
export const getValue = <TOk, TErr>(r: result.Result<TOk, TErr>): TOk => {
if (r.type === 'ok') {
return r.val
}
throw new Error(`couldn't get value as type is error: ${r.err}`)
}
export const tap = <TOk, TErr>(
r: result.Result<TOk, TErr>,
okFunc: (okRes: TOk) => void,
errFunc: (errRes: TErr) => void = (err) => {
console.log("default tap catch of error, note tap doesn't break chain")
}
): result.Result<TOk, TErr> => {
switch (r.type) {
case 'ok':
okFunc(r.val)
break
case 'err':
errFunc(r.err)
break
}
return r
}
export const getError = <TOk, TErr = string>(
r: result.Result<TOk, TErr>
): TErr => {
if (r.type === 'err') {
return r.err
}
throw new Error(`couldn't get value as type is ok: ${r.val}`)
}