Have ideas to improve npm?Join in the discussion! »

    ng-aspect
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.5 • Public • Published

    NgAspect 1.0 BETA

    NPM

    Build Status

    NgAspect is a little library of decorators that unlocks aspect-oriented programming features in JavaScript.

    Aspect-oriented programming suggests separating cross-cutting concerns (logging, caching, monitoring, data validation, error detection and so on) from main business logic. In brief it introduces:

    • advice - code implementing cross-cutting concerns
    • pointcut - when code where in your main code advices shall be applied

    NgAspect provides decorators @Before and @After that allow to bind an advice to a pointcut e.g. @Before( Class/Constructor, "methodName" ). It also exports @Pointcut decorator that points out what method can be supplied with advices.

    How does it work?

    import { Before, After, Pointcut } from "./aspect";
     
    class Foo {
      @Pointcut
      bar(){
        console.log( "calling bar", arguments );
      }
    }
     
    class Advice {
      @Before( Foo, "bar" )
      preLog() {
        console.log( "calling pre-log", arguments );
      }
     
      @After( Foo, "bar" )
      postLog() {
        console.log( "calling post-log" );
      }
    }
     
    (new Foo()).bar( 1, 2, 3 );
     

    Output:

    calling pre-log 1,2,3
    calling bar 1,2,3
    calling post-log
    

    The same goes for static methods

    import { Before, After, Pointcut } from "./aspect";
     
    class Foo {
      @Pointcut
      static bar(){
        console.log( "calling bar" );
      }
    }
     
    class Advice {
      @Before( Foo, "bar" )
      @After( Foo, "bar" )
      static log() {
        console.log( "log" );
      }
    }
     
    Foo.bar();
     

    Syntax

    Setting a single target

    @Before( Foo, "bar" )
    @After( Foo, "bar" )
    

    or

    @Before([ Foo, "bar" ])
    @After([ Foo, "bar" ])
    

    Setting multiple targets

    @Before([
      [ Foo, "bar" ],
      [ Baz, "quiz" ],
    ])
    
    

    Analytics

    Install

    npm i ng-aspect

    DownloadsWeekly Downloads

    0

    Version

    0.0.5

    License

    none

    Last publish

    Collaborators

    • avatar