dsheiko / ng-aspect

⛔️ [DEPRECATED] Decorators to unlock aspect-oriented programming experience in JavaScript

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

NgAspect 1.0 BETA

No Maintenance Intended

WARNING - THIS PROJECT IS NO LONGER MAINTAINED!!!

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" ) or @Before([ [Class/Constructor, "methodName"], [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();

API

Setting a pointcut

@Pointcut

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

About

⛔️ [DEPRECATED] Decorators to unlock aspect-oriented programming experience in JavaScript


Languages

Language:JavaScript 61.8%Language:TypeScript 35.7%Language:HTML 2.5%