forked from YMFE/yapi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplugin.js
executable file
·86 lines (75 loc) · 1.85 KB
/
plugin.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
let hooks, pluginModule;
/**
* type component 组件
* listener 监听函数
* mulit 是否绑定多个监听函数
*
*/
hooks = {
third_login: {
type: 'component',
mulit: false,
listener: null
},
add_interface: {
type: 'listener',
mulit: true,
listener: []
},
import_data: {
type: 'listener',
mulit: true,
listener: []
},
interface_tab: {
type: 'listener',
mulit: true,
listener: []
}
};
function bindHook(name, listener) {
if (!name) throw new Error('缺少hookname');
if (name in hooks === false) {
throw new Error('不存在的hookname');
}
if (hooks[name].mulit === true) {
hooks[name].listener.push(listener);
} else {
hooks[name].listener = listener;
}
}
function emitHook(name, ...args) {
if (!hooks[name]) throw new Error('不存在的hook name');
let hook = hooks[name];
if (hook.mulit === true && hook.type === 'listener') {
if (Array.isArray(hook.listener)) {
hook.listener.forEach(item => {
if (typeof item === 'function') {
item.call(pluginModule, ...args)
}
})
}
} else if (hook.mulit === false && hook.type === 'listener') {
if (typeof hook.listener === 'function') {
hook.listener.call(pluginModule, ...args);
}
} else if (hook.type === 'component') {
return hook.listener;
}
}
pluginModule = {
hooks: hooks,
bindHook: bindHook,
emitHook: emitHook
}
let pluginModuleList;
try{
pluginModuleList = require('./plugin-module.js');
}catch(err){pluginModuleList = {}}
Object.keys(pluginModuleList).forEach(plugin=>{
if (!pluginModuleList[plugin]) return null;
if(pluginModuleList[plugin] && typeof pluginModuleList[plugin].module === 'function'){
pluginModuleList[plugin].module.call(pluginModule, pluginModuleList[plugin].options)
}
})
module.exports = pluginModule;