56 lines
2.1 KiB
JavaScript
Raw Normal View History

2018-09-10 14:01:36 +05:30
let fs = require('./../../core/fs.js');
let utils = require('./../../utils/utils.js');
let async = require('async');
2018-09-09 23:07:55 +05:30
class PluginCommand {
2018-09-10 14:01:36 +05:30
constructor(embark, config) {
2018-09-09 23:22:57 +05:30
this.embark = embark;
2018-09-10 14:01:36 +05:30
this.config = config;
2018-09-10 22:38:17 +05:30
this.embarkConfig = this.config.embarkConfig;
2018-09-10 18:25:17 +05:30
this.registerCommand();
2018-09-09 23:07:55 +05:30
}
2018-09-10 18:25:17 +05:30
registerCommand() {
2018-09-10 16:19:37 +05:30
const self = this;
self.embark.registerConsoleCommand((cmd, _options) => {
2018-09-10 14:01:36 +05:30
let cmdArray = cmd.split(' ');
2018-09-10 16:19:37 +05:30
cmdArray = cmdArray.filter(cmd => cmd.trim().length > 0);
2018-09-10 14:01:36 +05:30
let cmdName = cmdArray[0];
2018-09-09 23:07:55 +05:30
return {
2018-09-10 14:01:36 +05:30
match: () => cmdName === 'plugin',
process: (callback) => {
if(cmdArray.length < 3 || cmdArray[1] !== 'install' || typeof cmdArray[2] === 'undefined') {
2018-09-10 18:25:17 +05:30
return callback('invalid use of plugin command. Please use plugin install <package>');
2018-09-10 14:01:36 +05:30
}
2018-09-10 22:38:17 +05:30
let npmInstall = ['npm', 'install', '--save'];
2018-09-10 16:19:37 +05:30
npmInstall = npmInstall.concat(cmdArray.slice(2));
2018-09-10 14:01:36 +05:30
async.waterfall([
function npmInstallAsync(cb) {
utils.runCmd(npmInstall.join(' '), {silent: false, exitOnError: false}, (err) => {
if(err) {
return cb(err);
}
cb();
});
},
function addToEmbarkConfig(cb) {
2018-09-10 16:19:37 +05:30
// get the installed package from package.json
let packageFile = fs.readJSONSync(self.config.packageFile);
let dependencies = Object.keys(packageFile.dependencies);
let npmPackage = npmInstall[3];
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);
2018-09-10 14:01:36 +05:30
}
], (err) => {
if(err) {
2018-09-10 22:38:17 +05:30
return callback(err);
2018-09-10 14:01:36 +05:30
}
2018-09-10 22:38:17 +05:30
callback(null, 'npm package successfully installed as a plugin');
2018-09-10 14:01:36 +05:30
});
2018-09-09 23:22:57 +05:30
}
2018-09-09 23:07:55 +05:30
};
});
}
}
module.exports = PluginCommand;