A simple and lightweight way to create a safe result in Typescript
Because in sometimes, we need to use safe conditions with try/catch, but we not want use blocks
Version | Documentation |
---|---|
unreleased | https://github.com/thadeu/ts-utility/blob/main/README.md |
kind | branch | javascript |
---|---|---|
unreleased | main | >= 14.x, <= 21.x |
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({})
Without configuration, because we use only JavaScript. โค๏ธ
After checking out the repo, install dependencies. Then, run test
to run the tests.
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.
The gem is available as open source under the terms of the MIT License.