Socket
Socket
Sign inDemoInstall

egg-aop

Package Overview
Dependencies
3
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    egg-aop

aop for egg.


Version published
Weekly downloads
3
decreased by-80%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

egg-aop

NPM version build status Test coverage David deps Known Vulnerabilities npm download

Add DI, AOP support for eggjs.

DI

Quick overview

import { Service, Context } from 'egg';
import { context, lazyInject } from 'egg-aop';

@context() // or @application()
export class TestService extends Service {
  get() {
    /* code */
  }
}

export class Controller {
  @lazyInject()
  private testService: TestService;
  
  demo() {
    this.testService.get();
  }
}

API

decoratros
  • @context(keyType?: any)

    Declaration life cycle of instance, is context level. You can provide a class type or from metadata by TypeScript emit.

  • @application(keyType?: any)

    Declaration life cycle of instance, is context level. You can provide a class type or from metadata by TypeScript emit.

  • @inject(keyType?: any)

    Inject component when the class instantiation.

  • @lazyInject(keyType?: any)

    Inject component when access the property.

functions
  • getInstance<T = any>(clsType: any, app: any, ctx: any): T

    You can use this function to manually get the component instance.

  • setCreateInstanceHook(func: CreateInstanceHookFunction)

    You can use this function to interception every new component instance.

    type CreateInstanceHookFunction = (instance: any, app: any, ctx?: any) => any;

typeLoader

typeLoader is a instance of IocContext, this stored all type's classes. You can use this to affect DI behavior.

AOP

Quick overview

function logging(type: string) {
  return aspect({
    // before method running
    before: (context) => { /* log code */ },
    // after method running
    after: (context) => { /* log code */ },
    // when method throw error
    onError: (context) => { /* log code */ },
  })
}

class DemoService {
  @logging('create')
  createData() {
    /* code */
  }
}

/* FunctionContext type define */
export interface FunctionContext<T = any> {
  readonly inst: T;
  readonly functionName: string;
  args: any[];
  ret: any;
  err: Error;
}

API

functions
  • aspect<T = any>(point: AspectPoint<T> = {})

    You can use this to interception method, this function provide before / after / error cross-section.

    interface AspectPoint<T = any> {
      before?: (context: FunctionContext<T>) => void;
      after?: (context: FunctionContext<T>) => void;
      error?: (context: FunctionContext<T>) => void;
    }
    

    The param context is the function's execution context. It include inst / args / ret. You can replace them to affect the function execute.

Keywords

FAQs

Last updated on 21 Sep 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc