2.3.36 • Published 1 year ago
@kollorg/sed-laboriosam-unde v2.3.36
BaseErr
A solid BaseError class that supports custom properties and wrapping errors
Installation
npm i --save @kollorg/sed-laboriosam-unde
Usage
Create a custom error class
import BaseError from '@kollorg/sed-laboriosam-unde'
class CustomError extends BaseError {}
const err = new CustomError('boom')
console.log(err.name // 'CustomError'
console.log(err.stack)
// CustomError: boom
// anonymous (filename:5:17)
Wrap an error with a custom error class
import BaseError from '@kollorg/sed-laboriosam-unde'
class CustomError extends BaseError {}
try {
throw new Error('pow')
} catch (_err) {
const err = CustomError.wrap('caught error', _err)
console.log(err.stack)
// CustomError: caught error
// anonymous (filename:8:17)
// ----
// Error: pow
// anonymous (filename:6:9)
}
Wrap an error with a custom error class in promise chain
import BaseError from '@kollorg/sed-laboriosam-unde'
class CustomError extends BaseError {}
Promise.reject(new Error('pow')).catch((err) =>
CustomError.wrapAndThrow('caught error', err),
)
// rejects with:
// CustomError: caught error
// anonymous (filename:6:3)
// ----
// Error: pow
// anonymous (filename:5:16)
Create custom error instance with data properties
import BaseError from '@kollorg/sed-laboriosam-unde'
class CustomError extends BaseError {}
const err = new CustomError('boom', { foo: 10, bar: 20 })
console.log(err.foo) // 10
console.log(err.bar) // 20
console.log(err.stack)
// CustomError: boom
// anonymous (filename:5:17)
// {
// "foo": 10,
// "bar": 20
// }
// TypeScripters use BaseError.create if you want to access extended properties with proper typing:
const err = CustomError.create('boom', { foo: 10, bar: 20 })
console.log(err.foo) // 10
console.log(err.bar) // 20
Create custom api client with robust error handling
import BaseError from '@kollorg/sed-laboriosam-unde'
class FetchError extends BaseError {}
class ResponseError extends BaseError {}
class ApiError extends BaseError {}
class ApiClient {
getData() {
const url = 'https://localhost:3000'
try {
const res = await Promise.race([
timeout(2000).then(() => {
throw new TimeoutError('request timed out', { statusCode: 504, url })
}),
fetch(url).catch(
FetchError.wrapAndThrow('network error', { statusCode: 503, url }),
),
])
if (res.statusCode !== 200) {
throw new ResponseError('status: ${res.statusCode}', {
statusCode: res.statusCode,
url,
})
}
return await res.json()
} catch (err) {
throw ApiError.wrap(err, { url, statusCode: err.statusCode || 500 })
// ApiError: boom
// anonymous (filename:row:col)
// {
// "url": 'https://localhost:3000',
// "statusCode": 504
// }
// ----
// TimedoutError: request timed out
// anonymous (filename:row:col)
// {
// "url": 'https://localhost:3000',
// "statusCode": 504
// }
}
}
}
Checkout the tests for more examples..
License
MIT
2.3.28
1 year ago
2.2.17
1 year ago
2.3.27
1 year ago
2.2.18
1 year ago
2.3.29
1 year ago
2.2.16
1 year ago
2.3.24
1 year ago
2.3.23
1 year ago
2.3.26
1 year ago
2.3.25
1 year ago
2.3.20
1 year ago
2.3.22
1 year ago
2.3.21
1 year ago
2.3.19
1 year ago
2.3.18
1 year ago
2.3.35
1 year ago
2.3.34
1 year ago
2.3.36
1 year ago
2.3.31
1 year ago
2.3.30
1 year ago
2.3.33
1 year ago
2.3.32
1 year ago
2.2.15
1 year ago
2.2.13
1 year ago
2.1.12
1 year ago
2.2.14
1 year ago
2.2.12
1 year ago
2.1.11
1 year ago
2.0.11
1 year ago
2.0.10
1 year ago
2.0.9
1 year ago
1.0.9
1 year ago
1.0.8
1 year ago
1.0.7
1 year ago
1.0.6
1 year ago
1.0.5
1 year ago
1.0.4
1 year ago
1.0.3
1 year ago
1.0.2
1 year ago
1.0.1
1 year ago
1.0.0
1 year ago