2.0.0 • Published 11 months ago

ultres v2.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

ultres

npm JavaScript Style Guide ci Coverage Status

Flexible and functional Result type for handling success and error cases.

Naming Things Is Hard™

Result > Res ult > ult Res > Ultres.

Yup.

Why

  • Zero dependencies: banana only, no gorilla or jungle whatsoever
  • ESM: native ESM package
  • CommonJS: support for older runtimes
  • TypeScript: first-class support
  • ES6: only used ES6 features
  • Familiar APIs: most of the idea were stolen from Rust
  • Promise support: added Promise/async support with the AsyncResult lib (see docs)

Install

npm i ultres

Quick example

import Result from 'ultres'
import AsyncResult from 'ultres/async'

const integer = value => {
  if (typeof value === 'bigint' || Number.isInteger(value)) {
    return Result.ok(value)
  } else if (typeof value === 'string' && /^[+-]\d+$/.test(value)) {
    return Result.ok(parseInt(value))
  } else {
    return Result.err(`Value ${value} is not an integer`)
  }
}

const double = value => value * 2

console.log(
  integer(5).map(double).unwrap() // 10
)

console.log(
  integer('-2').map(double).unwrap() // -4
)

console.log(
  integer(null).map(double).unwrapErr() // Value null is not an integer
)

const process = async value => {
  console.log(`process ${value} items`)
  return Result.ok(new Date())
}

const date = await AsyncResult.ok(integer(2))
  .andThen(process)
  .unwrap() // process 2 items

console.log(date) // 2024-08-22T15:19:04.830Z

const errInstance = await AsyncResult.ok(Promise.reject(new Error('Oh no')))
  .catchRejection()
  .unwrapErr()

console.log(errInstance.message) // Oh no

Docs

See docs website.

Donate

Thank you!

"Buy Me A Coffee"

2.0.0

11 months ago

1.0.0

1 year ago

0.6.0

1 year ago

0.5.0

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.4.1

2 years ago

0.4.0

2 years ago

0.3.0

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago