catch-error-decorator
TypeScript icon, indicating that this package has built-in type declarations

0.0.7 • Public • Published

Build Status npm version

Catch error decorator

A decorator which can prevent throw error from your function and you shall been handle it in catchHandle. It has 2 styles, es-next spec and old-functional-style.

Install

npm install catch-error-decorator --save
 
# or 
 
yarn add catch-error-decorator

Definitions

export function catchError<T>(catchFunction: CatchCallback, throwErr: boolean = true, defaultValueOnError?: any, bindContext?: any): any;
export function catchError<T>(options: CatchErrorOptions): any;
export interface CatchErrorOptions {
    catchFunction: CatchCallback;
    throwErr?: boolean; //default true
    defaultValueOnError?: any;
    bindContext?: any;
}
 
export type CatchCallback = (errMessage: string, errStack: string, funcName: string, className: string, context: any, args: any[]) => void;

Usage

import { catchError, CatchCallback } from 'catch-error-decorator';
 
const logFunction: CatchCallback = (errMessage: string, errStack: string, funcName: string, className: string, context: any, args: any[]) => {
  logger.log({level: 'error', message: JSON.stringify({errMessage, funcName, className, context})});
}
 
// Method decoration
 
class Foo {
 
  @catchError(logFunction, false, 'defaultValue')
  method1(): string { // return 'defaultValue' and log a error;
    throw new Error('bar');
  }
 
  @catchError(logFunction, false, 'defaultValue')
  method2(): Promise<string> { // return Promise<'defaultValue'> and log a error;
    return Promise.reject(new Error('bar'));
  }
 
  @catchError({ catchFunction: logFunction, throwErr: true })
  async method(): Promise<any> { // reject Error('baz') and log function call
    const value = await (async function() { throw new Error('baz'); })();
    return value;
  }
 
  @catchError(logFunction)
  get property() { // throw Error('deprecated method') and log call function
    throw new Error('deprecated method');
  }
 
  @catchError(logFunction, false)
  static Method() { // return undefined and log static function call. Cause you haven't define defaultValueOnError.
    return Promise.reject(new Error('baz'));
  }
 
  @catchError(logFunction)
  static get Property() { // just return 123;
    return 123;
  }
}
 
 
// Function decoration
 
function throwAlarm(arg1, arg2) {
  const value = this.Property;
  console.log(value); // 123
  throw new Error('alarm');
}
 
const catchErrorOptions = {
  catchFunction: logFunction, 
  throwErr: false, 
  defaultValueOnError: 'baz', 
  bindContext: Foo
};
 
const result = catchError(catchErrorOptions)(throwAlarm)('000', '123'); // result === 'baz', logger.log message === '{"errMessage":"alarm","funcName":"throwAlarm","className":"Function","args":["000","123"]}'
 

License

MIT License.

Readme

Keywords

none

Package Sidebar

Install

npm i catch-error-decorator

Weekly Downloads

2

Version

0.0.7

License

MIT

Last publish

Collaborators

  • yejioob