modern-errors
Advanced tools
Comparing version 2.0.0 to 2.0.1
import { | ||
ErrorName, | ||
ErrorConstructor as RawErrorConstructor, | ||
ErrorInstance as RawErrorInstance, | ||
CustomError as RawCustomError, | ||
ErrorParams, | ||
@@ -25,3 +24,3 @@ Options as CreateErrorTypesOptions, | ||
/** | ||
* Called on any `new ErrorType('message', parameters)`. | ||
* Called on any `new CustomErrorType('message', parameters)`. | ||
* Can be used to customize error parameters or to set error type properties. | ||
@@ -47,3 +46,3 @@ * By default, any `parameters` are set as error properties. | ||
readonly onCreate?: ( | ||
error: ErrorInstance<ErrorNames>, | ||
error: CustomError<ErrorNames, ErrorParamsArg>, | ||
params: Parameters< | ||
@@ -72,3 +71,3 @@ NonNullable< | ||
> = { | ||
[errorName in ErrorNames]: ErrorConstructor<errorName, ErrorParamsArg> | ||
[errorName in ErrorNames]: typeof CustomError<errorName, ErrorParamsArg> | ||
} & { | ||
@@ -90,3 +89,3 @@ /** | ||
*/ | ||
errorHandler: ErrorHandler<ErrorNames> | ||
errorHandler: ErrorHandler<ErrorNames, ErrorParamsArg> | ||
@@ -126,54 +125,50 @@ /** | ||
export type ErrorConstructor< | ||
export declare class CustomError< | ||
ErrorNames extends ErrorName = ErrorName, | ||
ErrorParamsArg extends ErrorParams = ErrorParams, | ||
> = new ( | ||
...args: ConstructorParameters< | ||
RawErrorConstructor<ErrorNames, ErrorParamsArg> | ||
> extends RawCustomError<ErrorNames, ErrorParamsArg> { | ||
/** | ||
* Convert errors to plain objects that are | ||
* [always safe](https://github.com/ehmicky/error-serializer#json-safety) to | ||
* serialize with JSON | ||
* ([or YAML](https://github.com/ehmicky/error-serializer#custom-serializationparsing), | ||
* etc.). All error properties | ||
* [are kept](https://github.com/ehmicky/error-serializer#additional-error-properties), | ||
* including | ||
* [`cause`](https://github.com/ehmicky/error-serializer#errorcause-and-aggregateerror). | ||
* | ||
* @example | ||
* ```js | ||
* try { | ||
* await readFile(filePath) | ||
* } catch (cause) { | ||
* const error = new InputError('Could not read the file.', { | ||
* cause, | ||
* filePath: '/path', | ||
* }) | ||
* const errorObject = error.toJSON() | ||
* // { | ||
* // name: 'InputError', | ||
* // message: 'Could not read the file', | ||
* // stack: '...', | ||
* // cause: { name: 'Error', ... }, | ||
* // filePath: '/path' | ||
* // } | ||
* const errorString = JSON.stringify(error) | ||
* // '{"name":"InputError",...}' | ||
* } | ||
* ``` | ||
*/ | ||
toJSON: () => ReturnType< | ||
typeof serialize<RawCustomError<ErrorNames, ErrorParamsArg>> | ||
> | ||
) => ErrorInstance<ErrorNames> | ||
} | ||
export type ErrorInstance<ErrorNames extends ErrorName = ErrorName> = | ||
RawErrorInstance<ErrorNames> & { | ||
/** | ||
* Convert errors to plain objects that are | ||
* [always safe](https://github.com/ehmicky/error-serializer#json-safety) to | ||
* serialize with JSON | ||
* ([or YAML](https://github.com/ehmicky/error-serializer#custom-serializationparsing), | ||
* etc.). All error properties | ||
* [are kept](https://github.com/ehmicky/error-serializer#additional-error-properties), | ||
* including | ||
* [`cause`](https://github.com/ehmicky/error-serializer#errorcause-and-aggregateerror). | ||
* | ||
* @example | ||
* ```js | ||
* try { | ||
* await readFile(filePath) | ||
* } catch (cause) { | ||
* const error = new InputError('Could not read the file.', { | ||
* cause, | ||
* filePath: '/path', | ||
* }) | ||
* const errorObject = error.toJSON() | ||
* // { | ||
* // name: 'InputError', | ||
* // message: 'Could not read the file', | ||
* // stack: '...', | ||
* // cause: { name: 'Error', ... }, | ||
* // filePath: '/path' | ||
* // } | ||
* const errorString = JSON.stringify(error) | ||
* // '{"name":"InputError",...}' | ||
* } | ||
* ``` | ||
*/ | ||
toJSON: () => ReturnType<typeof serialize<RawErrorInstance<ErrorNames>>> | ||
} | ||
/** | ||
* Type of `errorHandler()` | ||
*/ | ||
export type ErrorHandler<ErrorNames extends ErrorName = ErrorName> = ( | ||
error: unknown, | ||
) => ErrorInstance<ErrorNames> | ||
export type ErrorHandler< | ||
ErrorNames extends ErrorName = ErrorName, | ||
ErrorParamsArg extends ErrorParams = ErrorParams, | ||
> = (error: unknown) => CustomError<ErrorNames, ErrorParamsArg> | ||
@@ -180,0 +175,0 @@ /** |
@@ -15,3 +15,3 @@ import createErrorTypes from"create-error-types"; | ||
const{onCreate,bugsUrl}=getOpts(opts); | ||
const{errorHandler:innerHandler,...ErrorTypes}=createErrorTypes( | ||
const{errorHandler:innerHandler,...CustomErrorTypes}=createErrorTypes( | ||
errorNames, | ||
@@ -21,5 +21,5 @@ {onCreate,bugsUrl}); | ||
const errorHandler=callErrorHandler.bind(undefined,innerHandler); | ||
setErrorTypesToJSON(ErrorTypes); | ||
const parse=parseValue.bind(undefined,ErrorTypes); | ||
return{...ErrorTypes,errorHandler,parse}; | ||
setErrorTypesToJSON(CustomErrorTypes); | ||
const parse=parseValue.bind(undefined,CustomErrorTypes); | ||
return{...CustomErrorTypes,errorHandler,parse}; | ||
} | ||
@@ -26,0 +26,0 @@ |
import{serialize,parse as parseLib}from"error-serializer"; | ||
export const setErrorTypesToJSON=function(ErrorTypes){ | ||
Object.values(ErrorTypes).forEach(setErrorTypeToJSON); | ||
export const setErrorTypesToJSON=function(CustomErrorTypes){ | ||
Object.values(CustomErrorTypes).forEach(setErrorTypeToJSON); | ||
}; | ||
const setErrorTypeToJSON=function(ErrorType){ | ||
const setErrorTypeToJSON=function(CustomErrorType){ | ||
Object.defineProperty(ErrorType.prototype,"toJSON",{ | ||
Object.defineProperty(CustomErrorType.prototype,"toJSON",{ | ||
value:toJSON, | ||
@@ -24,5 +24,5 @@ enumerable:false, | ||
export const parseValue=function(ErrorTypes,value){ | ||
return parseLib(value,{types:ErrorTypes,loose:true}); | ||
export const parseValue=function(CustomErrorTypes,value){ | ||
return parseLib(value,{types:CustomErrorTypes,loose:true}); | ||
}; | ||
//# sourceMappingURL=serialize.js.map |
{ | ||
"name": "modern-errors", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"type": "module", | ||
@@ -49,3 +49,3 @@ "exports": "./build/src/main.js", | ||
"dependencies": { | ||
"create-error-types": "^2.0.0", | ||
"create-error-types": "^2.0.1", | ||
"error-cause-polyfill": "^1.1.0", | ||
@@ -52,0 +52,0 @@ "error-serializer": "^1.3.2", |
@@ -96,3 +96,3 @@ <picture> | ||
_Type_: `ErrorType` | ||
_Type_: `CustomErrorType` | ||
@@ -125,4 +125,5 @@ Any error name passed as argument is returned as an error type. | ||
Called on any [`new ErrorType('message', parameters)`](#set-error-properties). | ||
Can be used to [customize error parameters](#customize-error-parameters) or set | ||
Called on any | ||
[`new CustomErrorType('message', parameters)`](#set-error-properties). Can be | ||
used to [customize error parameters](#customize-error-parameters) or set | ||
[error type properties](#error-type-properties). By default, any `parameters` | ||
@@ -481,7 +482,8 @@ are [set as error properties](#set-error-properties). | ||
`error.toJSON()` converts custom errors to plain objects that are | ||
[always safe](https://github.com/ehmicky/error-serializer#json-safety) to | ||
serialize with JSON | ||
`error.toJSON()` converts errors to plain objects that are | ||
[serializable](https://github.com/ehmicky/error-serializer#json-safety) to JSON | ||
([or YAML](https://github.com/ehmicky/error-serializer#custom-serializationparsing), | ||
etc.). All error properties | ||
etc.). It is | ||
[automatically called](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#tojson_behavior) | ||
by `JSON.stringify()`. All error properties | ||
[are kept](https://github.com/ehmicky/error-serializer#additional-error-properties), | ||
@@ -491,2 +493,10 @@ including | ||
The `error` must be from [one of the types](#any-error-type) created by | ||
[`modernErrors()`](#modernerrorserrornames-options). However, any other error | ||
type (including `Error`, `TypeError`, etc.) is also serializable if it has been | ||
either: | ||
- Handled by [`errorHandler()`](#errorhandler) | ||
- Wrapped [as an `error.cause`](#re-throw-errors) | ||
```js | ||
@@ -518,2 +528,9 @@ try { | ||
The original error type is generically preserved. However, it is converted to a | ||
generic `Error` if it is neither: | ||
- From [one of the types](#any-error-type) created by | ||
[`modernErrors()`](#modernerrorserrornames-options) | ||
- Native (`Error`, `TypeError`, etc.) | ||
```js | ||
@@ -520,0 +537,0 @@ const newErrorObject = JSON.parse(errorString) |
36918
604
229
Updatedcreate-error-types@^2.0.1