mirror of
https://github.com/YMFE/yapi.git
synced 2024-12-15 05:10:47 +08:00
132 lines
2.9 KiB
JavaScript
132 lines
2.9 KiB
JavaScript
|
let hooks, pluginModule;
|
||
|
|
||
|
/**
|
||
|
* type component 组件
|
||
|
* listener 监听函数
|
||
|
* mulit 是否绑定多个监听函数
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
hooks = {
|
||
|
/**
|
||
|
* 第三方登录 //可参考 yapi-plugin-qsso 插件
|
||
|
*/
|
||
|
third_login: {
|
||
|
type: 'component',
|
||
|
mulit: false,
|
||
|
listener: null
|
||
|
},
|
||
|
/**
|
||
|
* 导入数据
|
||
|
* @param Object importDataModule
|
||
|
*
|
||
|
* @info
|
||
|
* 可参考 vendors/exts/yapi-plugin-import-swagger插件
|
||
|
* importDataModule = {};
|
||
|
*
|
||
|
*/
|
||
|
import_data: {
|
||
|
type: 'listener',
|
||
|
mulit: true,
|
||
|
listener: []
|
||
|
},
|
||
|
/**
|
||
|
* 导出数据
|
||
|
* @param Object exportDataModule
|
||
|
* @param projectId
|
||
|
* @info
|
||
|
* exportDataModule = {};
|
||
|
* exportDataModule.pdf = {
|
||
|
* name: 'Pdf',
|
||
|
* route: '/api/plugin/export/pdf',
|
||
|
* desc: '导出项目接口文档为 pdf 文件'
|
||
|
* }
|
||
|
*/
|
||
|
export_data: {
|
||
|
type: 'listener',
|
||
|
mulit: true,
|
||
|
listener: []
|
||
|
},
|
||
|
/**
|
||
|
* 接口页面 tab 钩子
|
||
|
* @param InterfaceTabs
|
||
|
*
|
||
|
* @info
|
||
|
* 可参考 vendors/exts/yapi-plugin-advanced-mock
|
||
|
* let InterfaceTabs = {
|
||
|
view: {
|
||
|
component: View,
|
||
|
name: '预览'
|
||
|
},
|
||
|
edit: {
|
||
|
component: Edit,
|
||
|
name: '编辑'
|
||
|
},
|
||
|
run: {
|
||
|
component: Run,
|
||
|
name: '运行'
|
||
|
}
|
||
|
}
|
||
|
*/
|
||
|
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)) {
|
||
|
let promiseAll = [];
|
||
|
hook.listener.forEach(item => {
|
||
|
if (typeof item === 'function') {
|
||
|
promiseAll.push(Promise.resolve(item.call(pluginModule, ...args)))
|
||
|
}
|
||
|
})
|
||
|
return Promise.all(promiseAll);
|
||
|
}
|
||
|
} else if (hook.mulit === false && hook.type === 'listener') {
|
||
|
if (typeof hook.listener === 'function') {
|
||
|
return Promise.resolve(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;
|