yapi/common/lib.js

116 lines
3.1 KiB
JavaScript
Raw Normal View History

2017-10-05 09:12:44 +08:00
const path = require('path');
2017-10-26 16:42:35 +08:00
const _ =require('underscore');
2017-09-17 13:36:51 +08:00
2017-10-05 09:12:44 +08:00
function getPluginConfig(name, type) {
let pluginConfig;
if(type === 'ext'){
pluginConfig = require('../exts/yapi-plugin-' + name);
}else {
pluginConfig = require('../node_modules/yapi-plugin-' + name);
}
2017-09-30 19:27:06 +08:00
if(!pluginConfig || typeof pluginConfig !== 'object'){
2017-10-05 09:12:44 +08:00
throw new Error(`Plugin ${name} Config 配置错误,请检查 yapi-plugin-${name}/index.js`);
}
return {
server: pluginConfig.server,
client: pluginConfig.client
2017-09-30 19:27:06 +08:00
}
}
function isObj(object) {
return object && typeof (object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";
}
function isArray(object) {
return object && typeof (object) == 'object' && object.constructor == Array;
}
function getLength(object) {
return Object.keys(object).length;
}
function Compare(objA, objB) {
if (!isObj(objA) && !isObj(objB)){
return objA === objB;
}
if (!isObj(objA) || !isObj(objB)) return false;
if (getLength(objA) != getLength(objB)) return false;
return CompareObj(objA, objB, true);
}
function CompareObj(objA, objB, flag) {
for (var key in objA) {
if (!flag)
break;
if (!objB.hasOwnProperty(key)) { flag = false; break; }
if (!isArray(objA[key])) {
if (objB[key] != objA[key]) { flag = false; break; }
} else {
if (!isArray(objB[key])) { flag = false; break; }
var oA = objA[key], oB = objB[key];
if (oA.length != oB.length) { flag = false; break; }
for (var k in oA) {
if (!flag)
break;
flag = CompareObj(oA[k], oB[k], flag);
}
}
}
return flag;
}
/**
2017-10-05 09:12:44 +08:00
* type @string enum[plugin, ext] plugin是外部插件ext是内部插件
*/
exports.initPlugins = function (plugins, type) {
if (!plugins) {
return [];
}
if (typeof plugins !== 'object' || !Array.isArray(plugins)) {
throw new Error('插件配置有误,请检查', plugins);
}
2017-10-26 16:42:35 +08:00
plugins = plugins.map(item => {
let pluginConfig;
if (item && typeof item === 'string') {
pluginConfig = getPluginConfig(item, type);
return Object.assign({}, pluginConfig, { name: item, enable: true })
} else if (item && typeof item === 'object') {
pluginConfig = getPluginConfig(item.name, type);
return Object.assign({},
pluginConfig,
{
name: item.name,
options: item.options,
enable: item.enable === false ? false : true
})
2017-09-17 13:36:51 +08:00
}
})
2017-10-26 16:42:35 +08:00
plugins = plugins.filter(item=>{
return item.enable === true && (item.server || item.client)
})
return _.uniq(plugins, item=>item.name)
}
exports.jsonEqual = Compare;
exports.isDeepMatch = function(obj, properties){
if(!properties || typeof properties !== 'object'){
return false;
}
if(!obj || typeof obj !== 'object'){
return true;
}
2017-09-17 13:36:51 +08:00
let match = true;
for(var i in properties){
if(!Compare(obj[i], properties[i])){
match = false;
break;
}
2017-09-17 13:36:51 +08:00
}
return match;
2017-09-17 13:36:51 +08:00
}