UNPKG

yf-fpm-server

Version:

yf fast-platform api server

86 lines (70 loc) 2.3 kB
'use strict'; 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;