0.1.0 • Published 6 years ago

awesome-catch-decorator v0.1.0

Weekly downloads
8
License
MIT
Repository
github
Last release
6 years ago

Awesome @Catch Decorator

$ npm install awesome-catch-decorator

Signature

Catch(ErrorType: Error, handler: (e) => any)

handler result value will replace method's return if exception is raised.

Usage

import Catch from "awesome-catch-decorator"

class AnyES6Class {
  @Catch(SyntaxError, () => ({}))
  static parseResponse(unvalidatedInputValue) {
    return JSON.parse(unvalidatedInputValue)
  }
}

// will always return an object
AnyES6Class.parseResponse()
AnyES6Class.parseResponse(",,,s,ds,sd,")
AnyES6Class.parseResponse('{ "message": "Okay, I get it" }')

I just want to catch all errors!

import Catch from "awesome-catch-decorator"

// create a new decorator
const CatchAll = Catch(Error, e => console.warn("catched exception: ", e))

class Dummy {
  @CatchAll
  doSomething() {
    undefinedFunction();
  }
}

// no exception will be raised

I just want to catch errors and trigger different actions for each one!

import Catch from "awesome-catch-decorator"

import { CustomError1, CustomError2 } from "./my-errors"

class VerySeriousClass {

  @Catch(CustomError1, handleError1)
  @Catch(CustomError2, handleError2)
  async fetch() {
    await this.mayThrowCustomError1();
    await this.mayRejectCustomError2();
    await this.mayThrowAnyError();
  }
}

code above do the following:

  • if mayThrowCustomError1 throws a CustomError1, then handleError1 will be executed

  • if mayRejectCustomError2 returns a promise which rejects with CustomError2, then handleError2 will be executed

  • if another kind of exception is raised, lets say a TypeError, then exception will be thrown.

How

This library was easily made with kaop-ts with provides hooks to attach behaviors on ES6 classes.

Credits

@lukeed for improving the initial idea.