ms/packages/plugin/src/decorators.ts

21 lines
797 B
TypeScript
Raw Normal View History

import { interfaces } from './interfaces'
import { METADATA_KEY } from './constants'
import { injectable, decorate } from "inversify";
import { getPluginMetadatas } from './utils'
/**
* MiaoScript plugin
* @param name namespace name default is '/'
* @param middleware middleware array
*/
export function plugin(currentMetadata: interfaces.PluginMetadata) {
return function(target: any) {
target.description = currentMetadata;
currentMetadata.target = target;
decorate(injectable(), target);
Reflect.defineMetadata(METADATA_KEY.plugin, currentMetadata, target);
const previousMetadata: interfaces.PluginMetadata[] = getPluginMetadatas();
Reflect.defineMetadata(METADATA_KEY.plugin, [currentMetadata, ...previousMetadata], Reflect);
};
}