@hexadrop/either
v2.0.1
Published
Hexagonal architecture utils library
Downloads
1,068
Maintainers
Readme
npm install --save @hexadrop/either
Using bun
bun add @hexadrop/either
What it does
It provides an implementation of the Either monad in TypeScript. The Either monad is a popular functional programming concept used to handle computations that can result in two possible outcomes: a successful result (Right) or an error (Left). This is useful for handling computations that can fail, providing a way to chain operations while keeping error handling separate.
How to use
The @hexadrop/either
package default exports a class Either
with methods to create an instance
representing a left or right value (Either.left
and Either.right
),
check the type of the value (isLeft
and isRight
),
retrieve the value (getLeft
, getRight
, getLeftOrElse
, getRightOrElse
),
and transform the value (mapLeft
, mapRight
, flatMapLeft
, flatMapRight
).
Creating an instance
import Either from '@hexadrop/either';
// Create a Right value
const right = Either.right('This is a right value');
console.log(right.isRight()); // true
console.log(right.getRight()); // 'This is a right value'
// Create a Left value
const left = Either.left('This is a left value');
console.log(left.isLeft()); // true
console.log(left.getLeft()); // 'This is a left value'
Transforming the value
// Use mapRight to transform a Right value
const transformedRight = right.mapRight(value => value.toUpperCase());
console.log(transformedRight.getRight()); // 'THIS IS A RIGHT VALUE'
// Use mapLeft to transform a Left value
const transformedLeft = left.mapLeft(value => value.toUpperCase());
console.log(transformedLeft.getLeft()); // 'THIS IS A LEFT VALUE'
Using flatMap
// Use flatMapRight to transform a Right value into a new Either
const flatMappedRight = right.flatMapRight(value => Either.right(value.length));
console.log(flatMappedRight.getRight()); // 20
// Use flatMapLeft to transform a Left value into a new Either
const flatMappedLeft = left.flatMapLeft(value => Either.left(value.length));
console.log(flatMappedLeft.getLeft()); // 19
Hexadrop Code Quality Standards
Publishing this package we are committing ourselves to the following code quality standards:
- Respect Semantic Versioning: No breaking changes in patch or minor versions
- No surprises in transitive dependencies: Use the bare minimum dependencies needed to meet the purpose
- One specific purpose to meet without having to carry a bunch of unnecessary other utilities
- Tests as documentation and usage examples
- Well documented README showing how to install and use
- License favoring Open Source and collaboration