mgechev / aspect.js

JavaScript library for aspect-oriented programming using modern syntax.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Need help

carrbrpoa opened this issue · comments

Hello,

How would I "intercept" a dependency built like this?

(function( window, undefined ) {

    var Keycloak = function (config) {
        if (!(this instanceof Keycloak)) {
            return new Keycloak(config);
        }

        var kc = this;
        var adapter;
        var refreshQueue = [];

        var loginIframe = {
            enable: true,
            callbackMap: [],
            interval: 5
        };

        kc.init = function (initOptions) {
            kc.authenticated = false;
            ...

I've tried the following, but nothing is logged:

@beforeMethod({
	classNamePattern: /^Keycloak/,
	methodNamePattern: /^init/
})
static invokeBeforeMethod(meta: Metadata): void {
	let message: string = `method: ${meta.method.name}, args: ${meta.method.args.join(', ')}`;
	console.log('BEFORE ASPECT: ', meta);
	console.log('BEFORE ASPECT message: ', message);
	LoaderService.isLoading.next(true);
}

@afterMethod({
	classNamePattern: /^Keycloak/,
	methodNamePattern: /^init/
})
static invokeAfterMethod(meta: Metadata): void {
	let message: string = `method: ${meta.method.name}, args: ${meta.method.args.join(', ')}`;
	console.log('AFTER ASPECT: ', meta);
	console.log('AFTER ASPECT message: ', message);
	LoaderService.isLoading.next(false);
}

PS: I'm in Angular 8 app.

class LoggerAspect {
  @beforeMethod({
    classes: [Keycloak],
    methods: [Keycloak.init]
  })
  invokeBeforeMethod(meta: Metadata) {
    // meta.advisedMetadata == { bar: 42 }
    console.log(`Inside of the logger. Called ${meta.className}.${meta.method.name} with args: ${meta.method.args.join(', ')}.`);
  }
}

Something like this should work.