Hexagonal architecture utils library
npm install @hexadrop/either
Either monad implementation
``bash`
npm install --save @hexadrop/either
Using bun
`bash`
bun add @hexadrop/either
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.
The @hexadrop/either package default exports a class Either with methods to create an instanceEither.left
representing a left or right value ( and Either.right),isLeft
check the type of the value ( and isRight),getLeft
retrieve the value (, getRight, getLeftOrElse, getRightOrElse),mapLeft
and transform the value (, mapRight, flatMapLeft, flatMapRight).
`typescript
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'
`
`typescript
// 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'
`
`typescript
// 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
``
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