atomic-reactor-cli
Version:
A CLI for creating Atomic Reactor Awesomeness
83 lines (74 loc) • 2.5 kB
JavaScript
const npm = require('npm');
const path = require('path');
const chalk = require('chalk');
const fs = require('fs-extra');
const _ = require('underscore');
const op = require('object-path');
const mod = path.dirname(require.main.filename);
const targetApp = require(`${mod}/lib/targetApp`);
module.exports = spinner => {
let dir, cwd, name, pkgdir;
const message = text => {
if (spinner) {
spinner.text = text;
}
};
const normalize = (...args) => path.normalize(path.join(...args));
return {
init: ({ action, params, props }) => {
cwd = props.cwd;
name = op.get(params, 'name');
},
check: () => {
app = targetApp(cwd);
if (!app) {
spinner.fail(
`Current working directory ${chalk.cyan(
cwd,
)} is not an Actinium or Reactium project`,
);
process.exit();
}
// Set module dir
dir = normalize(cwd, app + '_modules', name);
},
npm: async () => {
spinner.stopAndPersist({
text: `Uninstalling NPM ${chalk.cyan('package')}...`,
symbol: chalk.cyan('–'),
});
console.log('');
await new Promise((resolve, reject) =>
npm.load(err => {
if (err) reject(err);
npm.commands.uninstall([name], err => {
if (err) reject(err);
else resolve();
});
}),
)
.then(() => console.log(''))
.catch(err => {
console.log(err);
process.exit();
});
},
directory: () => {
spinner.start();
message(`Removing plugin ${chalk.cyan(name)}...`)
fs.removeSync(dir);
},
unregisterPkg: () => {
message(`Unregistering plugin...`);
const pkgjson = normalize(cwd, 'package.json');
const pkg = require(pkgjson);
op.del(pkg, [`${app}Dependencies`, name], version);
fs.writeFileSync(pkgjson, JSON.stringify(pkg, null, 2));
},
complete: () => {
console.log('');
spinner.start();
spinner.succeed(`Unnstalled ${chalk.cyan(name)}`);
},
};
};