📦 YMFE / yapi

📄 plugin.js · 54 lines
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
54const _ = require('underscore');

function getPluginConfig(name, type) {
  let pluginConfig;
  if (type === 'ext') {
    pluginConfig = require('../exts/yapi-plugin-' + name);
  } else {
    pluginConfig = require('yapi-plugin-' + name);
  }

  if (!pluginConfig || typeof pluginConfig !== 'object') {
    throw new Error(`Plugin ${name} Config 配置错误,请检查 yapi-plugin-${name}/index.js`);
  }

  return {
    server: pluginConfig.server,
    client: pluginConfig.client
  }
}


/**
   * 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);
  }

  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
        })
    }
  })
  plugins = plugins.filter(item => {
    return item.enable === true && (item.server || item.client)
  })

  return _.uniq(plugins, item => item.name)
}