Skip to content

Elixir's cond construct implementation for Javascript and Typescript

Notifications You must be signed in to change notification settings

mudssrali/cond-construct

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cond-construct

Inspired by Elixir's cond this is a simpler alternative to lodash's _.cond

CI status JavaScript Style Guide tested with jest

Install

Install with npm or yarn via

yarn add cond-construct

or

npm i cond-construct

API

type Cond = (
  pairs: Array<[boolean, unknown | (() => unknown)]>,
  options?: { strict: boolean }
) => unknown

Usage

import cond from 'cond-construct'

const value = cond([
  [false, 'false'],
  [true, 'true'],
  [true, 'true but too late']
])

// value === 'true'

You can disable strict checking by passing options as the second argument:

import cond from 'cond-construct'

const value = cond(
  [
    [false, 'false'],
    [1, 'truthy'],
    [true, 'true but also too late']
  ],
  { strict: false }
)

// value === 'truthy'

Also works nicely with React components as you can have the values lazily evaluated by wrapping it in a function:

import cond from 'cond-construct'

const Component = ({ hasErrors, isNew, isLoading }) => (
  <>
    {cond([
      [isLoading, () => <Loading />],
      [isNew, () => <Create />],
      [hasErrors, () => <ShowErrors />]
    ])}
  </>
)

Next

  • [] Handle multiple method executions
  • [] Add more option for falsy value

Note

As all predicates have to be evaluated before the right branch can be chosen, it can have a negative performance impact if you rely on heavy computations here. It's best have simple booleans and resort to _.cond for complex use cases.

About

Elixir's cond construct implementation for Javascript and Typescript

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published