///
import { EventEmitter } from 'events';
/**
* 提供两种方式对Class进行扩展
* 方法1:
* 给Class中的每个方法都添加before after两个钩子
* 给Class添加一个usePlugin方法,use方法可以传入一个包含before或者after方法的对象
*
* 例如:
* Class EditorService extends BaseService {
* constructor() {
* super(['add']);
* }
* add(value) { return result; }
* };
*
* const editorService = new EditorService();
*
* editorService.usePlugin({
* beforeAdd(value) { return [value] },
* afterAdd(value, result) {},
* });
*
* editorService.add(); 最终会变成 () => {
* editorService.beforeAdd();
* editorService.add();
* editorService.afterAdd();
* }
*
* 调用时的参数会透传到before方法的参数中, 然后before的return 会作为原方法的参数和after的参数,after第一个参数则是原方法的return值;
* 如需终止后续方法调用可以return new Error();
*
* 方法2:
* 给Class中的每个方法都添加中间件
* 给Class添加一个use方法,use方法可以传入一个包含源对象方法名作为key值的对象
*
* 例如:
* Class EditorService extends BaseService {
* constructor() {
* super(['add']);
* }
* add(value) { return result; }
* };
*
* const editorService = new EditorService();
* editorService.use({
* add(value, next) { console.log(value); next() },
* });
*/
export default class extends EventEmitter {
private pluginOptionsList;
private middleware;
private taskList;
private doingTask;
constructor(methods?: string[], serialMethods?: string[]);
use(options: Record): void;
usePlugin(options: Record): void;
private doTask;
}