Skip to content

A library of tools to quickly empower your projects with plugins!

License

Notifications You must be signed in to change notification settings

yee94/plugin-decorator

Repository files navigation

plugin-decorator

Using TypeScript MIT License NPM

plugin-decorator is a library of tools to quickly empower your projects with plugins!

import { Hook, Inject, PluginTarget, Plugin } from 'plugin-decorator';

class DemoTarget extends PluginTarget {
  @Hook()
  public method1() {
    console.log('origin method');
  }
}

class DemoPlugin extends Plugin {
  @Inject()
  public method1(next) {
    next();
    console.log('plugin method');
  }
}

const demoTarget = new DemoTarget();
demoTarget.install(new DemoPlugin());
demoTarget.method1();

// => origin method
// => plugin method

Decorator

import { Hook, Inject, PluginTarget, Plugin } from 'plugin-decorator';

class DemoTarget extends PluginTarget {
  @Hook()
  public method1() {
    return 'origin method';
  }
}

class DemoPlugin extends Plugin {
  @Inject()
  public method1(next) {
    return `plugin ${next()}`;
  }
}

const demoTarget = new DemoTarget();
demoTarget.install(new DemoPlugin());

demoTarget.method1();

// => plugin origin method

Promise

import { Hook, Inject, PluginTarget, Plugin } from 'plugin-decorator';

class DemoTarget extends PluginTarget {
  @Hook()
  public methodPromise() {
    return new Promise((resolve) => {
      setTimeout(() => resolve('origin method'), 1000);
    });
  }
}

class DemoPlugin extends Plugin {
  @Inject()
  public async methodPromise(next) {
    return `plugin ${await next()}`;
  }
}

const demoTarget = new DemoTarget();
demoTarget.install(new DemoPlugin());

demoTarget.methodPromise().then(console.log);

// => Promise<plugin origin method>

About

A library of tools to quickly empower your projects with plugins!

Resources

License

Stars

Watchers

Forks

Packages

No packages published