UNPKG

atomic-reactor-cli

Version:

A CLI for creating Atomic Reactor Awesomeness

71 lines (60 loc) 2.06 kB
const npm = require('npm'); const tar = require('tar'); const path = require('path'); const chalk = require('chalk'); const fs = require('fs-extra'); const _ = require('underscore'); const op = require('object-path'); const request = require('request'); const mod = path.dirname(require.main.filename); const targetApp = require(`${mod}/lib/targetApp`); const ActionSequence = require('action-sequence'); module.exports = spinner => { let app, cwd, plugins; const actions = require('./actions')(spinner); op.del(actions, 'npm'); op.del(actions, 'complete'); op.del(actions, 'registerPkg'); const message = text => { if (spinner) { spinner.text = text; } }; const normalize = (...args) => path.normalize(path.join(...args)); return { init: ({ params, props }) => { cwd = op.get(props, 'cwd'); app = targetApp(cwd); }, plugins: () => { const pkgPath = normalize(cwd, 'package.json'); const pkg = require(pkgPath); const depKey = `${app}Dependencies`; const deps = op.get(pkg, depKey); plugins = Object.entries(deps).map( ([name, version]) => `${name}@${version}`, ); plugins.sort(); }, install: async ({ params, props }) => { for (const i in plugins) { const name = plugins[i]; spinner.stopAndPersist({ text: `Installing ${chalk.cyan(name)}...`, symbol: chalk.cyan('+'), }); await ActionSequence({ actions, options: { params: { ...params, name, unattended: true }, props }, }); } }, complete: () => { console.log(''); spinner.start(); spinner.succeed(`Installed:`); spinner.stop(); plugins.forEach(plugin => console.log(' ', chalk.cyan(plugin))); } }; };