Decorators to unlock aspect-oriented programming experience in JavaScript
npm install ng-aspect

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.
``javascript
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
`javascript
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();
`
@Before( Foo, "bar" )
@After( Foo, "bar" )
`
or
`
@Before([ Foo, "bar" ])
@After([ Foo, "bar" ])
`Setting multiple targets
`
@Before([
[ Foo, "bar" ],
[ Baz, "quiz" ],
])``
