embark-area-51/lib/modules/plugin_cmd/index.js

67 lines
2.3 KiB
JavaScript
Raw Normal View History

2018-09-13 14:08:15 +00:00
const fs = require('./../../core/fs.js');
const utils = require('./../../utils/utils.js');
const async = require('async');
2018-09-09 17:37:55 +00:00
class PluginCommand {
2018-09-10 17:42:04 +00:00
constructor(embark) {
2018-09-09 17:52:57 +00:00
this.embark = embark;
2018-09-10 17:42:04 +00:00
this.config = this.embark.pluginConfig;
2018-09-10 17:08:17 +00:00
this.embarkConfig = this.config.embarkConfig;
2018-09-10 12:55:17 +00:00
this.registerCommand();
2018-09-09 17:37:55 +00:00
}
2018-09-13 14:08:15 +00:00
2018-09-10 12:55:17 +00:00
registerCommand() {
2018-09-13 14:08:15 +00:00
this.embark.registerConsoleCommand((cmd, _options) => {
2018-09-10 08:31:36 +00:00
let cmdArray = cmd.split(' ');
2018-09-10 10:49:37 +00:00
cmdArray = cmdArray.filter(cmd => cmd.trim().length > 0);
2018-09-10 08:31:36 +00:00
let cmdName = cmdArray[0];
2018-09-09 17:37:55 +00:00
return {
2018-09-13 14:08:15 +00:00
match: () => cmdName === 'plugin',
process: this.installPlugin.bind(this, cmdArray)
2018-09-09 17:37:55 +00:00
};
});
}
2018-09-13 14:08:15 +00:00
installPlugin(cmdArray, callback) {
const self = this;
if (cmdArray.length < 3 || cmdArray[1] !== 'install' || typeof cmdArray[2] === 'undefined') {
return callback(__('Invalid use of plugin command. Please use `plugin install <package>`'));
}
let npmInstall = ['npm', 'install', '--save'];
npmInstall = npmInstall.concat(cmdArray.slice(2));
let npmPackage = npmInstall[3];
2018-09-13 14:29:03 +00:00
if (!npmPackage.startsWith('embark')) {
npmPackage = 'embark-' + npmPackage;
}
2018-09-13 14:08:15 +00:00
self.embark.logger.info(__('Installing npm package %s...', npmPackage));
async.waterfall([
function npmInstallAsync(cb) {
utils.runCmd(npmInstall.join(' '), {silent: false, exitOnError: false}, (err) => {
if (err) {
return cb(err);
}
cb();
});
},
function addToEmbarkConfig(cb) {
// get the installed package from package.json
let packageFile = fs.readJSONSync(self.config.packageFile);
let dependencies = Object.keys(packageFile.dependencies);
let installedPackage = dependencies.filter((dep) => npmPackage.indexOf(dep) >= 0);
self.embarkConfig.plugins[installedPackage[0]] = {};
fs.writeFile(self.config.embarkConfigFile, JSON.stringify(self.embarkConfig, null, 2), cb);
}
], (err) => {
if (err) {
self.embark.logger.error(__('Error installing npm package %s. Please visit ' +
'https://embark.status.im/plugins/ for all supported plugins', npmPackage));
return callback(__('Error occurred'));
}
callback(null, __('NPM package %s successfully installed as a plugin', npmPackage));
});
}
2018-09-09 17:37:55 +00:00
}
module.exports = PluginCommand;