yf-fpm-server
Version:
yf fast-platform api server
86 lines (70 loc) • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.loadPlugin = undefined;
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _exception = require('./exception.js');
var _exception2 = _interopRequireDefault(_exception);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const CWD = process.cwd();
const bindPlugin = (plugin, plugins, fpm) => {
if (plugin.isBound) return;
const pkg = plugin.package;
let deps;
if (_lodash2.default.isFunction(pkg.getDependencies)) {
deps = pkg.getDependencies() || [];
}
const len = _lodash2.default.size(deps);
if (len < 1) {
plugin.ref = pkg.bind(fpm);
plugin.isBound = true;
return plugin;
}
_lodash2.default.map(deps, dname => {
if (!_lodash2.default.has(plugins, dname)) {
throw new _exception2.default(_exception.E.System.PLUGIN_LOAD_ERROR(p.name, d.name));
}
const dep = plugins[deps[i]];
if (!dep.isBound) {
bindPlugin(dep, plugins, fpm);
}
});
plugin.ref = pkg.bind(fpm);
plugin.isBound = true;
return plugin;
};
const loadPlugin = fpm => {
const modulesDir = _path2.default.join(CWD, 'node_modules');
let files = _fs2.default.readdirSync(modulesDir);
files = _lodash2.default.filter(files, f => {
return _lodash2.default.startsWith(f, 'fpm-plugin-');
});
let plugins = {};
_lodash2.default.map(files, f => {
let pkg = require(_path2.default.join(modulesDir, f));
if (_lodash2.default.has(pkg, 'default')) {
pkg = pkg.default;
}
const packageInfo = require(_path2.default.join(modulesDir, f, 'package.json'));
plugins[packageInfo.name] = {
name: packageInfo.name,
version: packageInfo.version,
info: packageInfo,
npm: `https://www.npmjs.com/package/${packageInfo.name}`,
registry: `http://registry.npmjs.org/${packageInfo.name}`,
'package': pkg,
isBound: false
};
});
_lodash2.default.map(plugins, (p, pname) => {
plugins[pname] = bindPlugin(p, plugins, fpm);
});
return plugins;
};
exports.loadPlugin = loadPlugin;