lifts
TypeScript icon, indicating that this package has built-in type declarations

0.1.4 • Public • Published

Lifts

LIghtweight Functional programming library for TypeScript

Install

yarn add lifts
# or 
npm i -S lifts

Usage

Do

Shorthand for Immediately Invoked Function Expression

const date = new Date('2020-04-17')
 
const result: number | null = Do(() => {
    // check date is valid
    if (!isNaN(date)) {
        return date.getDate()
    } else {
        return null
    }
})
result // => 17
 
// equivalent to
const result = (() => {
    if (!isNaN(date)) {
        return date.getDate()
    } else {
        return null
    }
})()

Switch

Object-Style switch

const fn = (value: string) =>
    Switch(value)(
        {
            a: () => 'String A',
            b: () => 'String B',
        },
        () => null, // default value
    )
 
fn('a') // => 'string A'
fn('b') // => 'string B'
fn('c') // => null (default value)

Result

const parseDate = (dateStr: string): IResult<Date, Error> => {
    const date = new Date(dateStr)
 
    // check date is valid
    if (!isNaN(date)) {
        return Result.ok(date)
    } else {
        return Result.err(new Error('Invalid Date'))
    }
}
 
parseDate('2020-04-17')
// => { isOk: true, valueOrError: Date('2020-04-17') }
 
parseDate('foo')
// => { isOk: false, valueOrError: Error('Invalid Date') }

Result.switch

const result = parseDate('2020-04-17')
 
Result.switch(result)({
    ok: (value: Date) => {
        // called if result is Ok
        return value.getDate()
    },
    err: (error: Error) => {
        // called if result is Err
        return null
    },
})
// => 17
const result = parseDate('foo')
 
Result.switch(result)({
    ok: (value) => {
        return value.getDate()
    },
    err: (error) => {
        return null
    },
})
// => null

Result.wrap

Wraps Error with Result.err() if error caught, else wraps value with Result.ok().

const result = Result.wrap(() => {
    if (condition) {
        return true
    } else {
        throw new Error()
    }
})

MapAsync

Pipe

Readme

Keywords

none

Package Sidebar

Install

npm i lifts

Weekly Downloads

103

Version

0.1.4

License

MIT

Unpacked Size

33.3 kB

Total Files

71

Last publish

Collaborators

  • yarnaimo