Skip to content

Latest commit

 

History

History
185 lines (130 loc) · 3.71 KB

README.md

File metadata and controls

185 lines (130 loc) · 3.71 KB

🖇️ ts-utility

A simple and lightweight way to create a safe result in Typescript

Build Status GitHub package.json version (subfolder of monorepo) GitHub repo size

Motivation

Because in sometimes, we need to use safe conditions with try/catch, but we not want use blocks

Documentation

Version Documentation
unreleased https://github.com/thadeu/ts-utility/blob/main/README.md

Table of Contents

Compatibility

kind branch javascript
unreleased main >= 14.x, <= 21.x

Installation

Use Yarn

yarn add @thadeu/ts-utility

or use NPM

npm i @thadeu/ts-utility

or use PNPM

pnpm add @thadeu/ts-utility

or use Github directly

pnpm add github:thadeu/ts-utility

and then, enjoy!

For example:

Imagine that you have an class like this:

class User {
  static async all() {
    return [{ id: 1 }, { id: 2 }]
  }

  static async throwed() {
    throw new Error(`User not found`)
  }
}

Now, look it.

import { Try } from '@thadeu/ts-utility'

When success, you receive promise resolved.

 let tryOptions = {
  onError: error => {
    // console.log(error)
    return []
  },
}

let result = await Try(User.all, tryOptions)
// or
let result = await Try(_ => User.all(), tryOptions)
// result => [{ id: 1 }, { id: 2 }]

When fail you receive onError callback OR null

let tryOptions = {
  onError: async error => {
    // console.log(error)
    return []
  },
}

let result = await Try(User.throwed, tryOptions)
// result => []
let tryOptions = {
  onError: async error => {
    // console.log(error)
    return []
  },
}

let result = await Try(async () => User.throwed(params), tryOptions)
// result => []

Others examples.

let counter = 0
let tryOptions = { max: 3, onError: {}, onRetry: (count, isReached) => (counter = count) }

await Try(_ => JSON.parse('{'), tryOptions)

expect(counter).toEqual(3)
let counter = 0

let tryOptions = {
  max: 3,
  onError: {},
  onRetry: count => (counter = count)
}

let result = await Try(_ => JSON.parse('{ "user": "1" }'), tryOptions)

expect(counter).toEqual(0)
expect(result).toEqual({ user: '1' })

Using exponential parameter

let result = await Try(_ => JSON.parse('{'), {
  onError: {},
  max: 3,
  exponential: 2 
})

expect(result).toEqual({})

Configuration

Without configuration, because we use only JavaScript. ❤️

Usage Try

⬆️  Back to Top

Development

After checking out the repo, install dependencies. Then, run test to run the tests.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/thadeu/ts-utility. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.