Custom classes for Type-safe handling of exceptions in your application.
npm install @fastkit/catcher
import { build, axiosErrorResolver } from '@fastkit/catcher';
type YourAppErrorInput = string | number | { [key: string]: any };
interface YourAppErrorNormalized {
name: string;
message: string;
stack?: string;
status: number;
}
export class YourAppError extends build({
resolvers: [axiosErrorResolver],
normalizer: (resolvedData) => {
return (input: YourAppErrorInput): YourAppErrorNormalized => {
let { name, message, status } = resolveYourAppErrorInput(input);
let stack: string | undefined;
const { axiosError, nativeError } = resolvedData;
if (axiosError) {
name = axiosError.name;
message = axiosError.message;
stack = axiosError.stack;
const { response } = axiosError;
if (response) {
status = response.status;
}
} else if (nativeError) {
name = nativeError.name;
message = nativeError.message;
stack = nativeError.stack;
if (nativeError.name === 'PayloadTooLargeError') {
status = 413;
}
}
const statusResolved = resolveStatusMessage(status);
status = statusResolved.status;
if (!message) {
message = statusResolved.message;
}
return {
name,
message,
stack,
status,
};
},
},
});
ts
import { YourAppError } from './error';
export async function someFn() {
try {
const result = await axios.get('/some/path/');
return result.data;
} catch (_err) {
const err = YourAppError.from(_err);
if (err.status === 404) {
alert('Not found...!!!');
return;
}
throw err;
}
}
ts
<Resolvers extends AnyResolvers, Normalizer extends AnyNormalizer<Resolvers>>(opts: CatcherBuilderOptions<Resolvers, Normalizer>): CatcherConstructor<Resolvers, Normalizer>
Generate exception catcher constructor
Name | Type | Default |
---|---|---|
opts* | CatcherBuilderOptions<Resolvers, Normalizer> | |
CatcherConstructor<Resolvers, Normalizer>
Exception catcher constructor
Catcher constructor generation options
Exception catcher constructor
(errorInfo: Parameters<ReturnType<Normalizer>>[0]): Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on the error information.
Name | Type | Default |
---|---|---|
errorInfo* | Parameters<ReturnType<Normalizer>>[0] |
Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on the error information.
(errorInfo: Parameters<ReturnType<Normalizer>>[0]): Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on the error information.
Name | Type | Default |
---|---|---|
errorInfo* | Parameters<ReturnType<Normalizer>>[0] |
Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on the error information.
(unknownException: unknown, overrides?: Partial<ReturnType<ReturnType<Normalizer>> & ErrorImplements>): Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on an unknown exception. The fields of the error instance can be overwritten by specifying an object as the second argument.
Name | Type | Default |
---|---|---|
unknownException* | unknown | |
overrides | Partial<ReturnType<ReturnType<Normalizer>> & ErrorImplements> | undefined |
Catcher<Resolvers, ReturnType<ReturnType<Normalizer>>> & ReturnType<ReturnType<Normalizer>>
Create an error instance based on an unknown exception. The fields of the error instance can be overwritten by specifying an object as the second argument.
Caught exception instances
true
It is a catcher instance
CatcherData<T>
Error information fully processed by custom resolvers and normalizers
UnionToIntersection<ReturnType<MergeParametersAndReturnTypes<[(source: unknown) => NativeErrorOverrides | undefined, ...Resolvers]>>>
Data extracted by custom resolvers
undefined | Catcher<Resolvers, T>
Catcher instance generated from original exception source before override
Catcher<Resolvers, T>[]
List of extension sources for own instance
string[]
全ての歴史を辿ったメッセージのリスト
(): ErrorImplements & CatcherData<T> & { messages: string[]; }
Obtain as a JSON object
Name | Type | Default |
---|
ErrorImplements & T & { $__catcher: true; } & { messages: string[]; }
Obtain as a JSON object
(indent?: number | boolean): string
Obtain as JSON string
Name | Type | Default |
---|---|---|
indent | number | boolean | undefined | |
number of indentations |
string
Obtain as JSON string