Custom classes for Type-safe handling of exceptions in your application.
npm install @fastkit/catcherimport { 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,
};
},
},
});tsimport { 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
trueIt 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): stringObtain as JSON string
| Name | Type | Default |
|---|---|---|
| indent | number | boolean | undefined | |
number of indentations | ||
stringObtain as JSON string