apiconnect-cli-loopback
Version:
Plugin for IBM API Connect Developer Toolkit
71 lines (61 loc) • 2.24 kB
JavaScript
/********************************************************* {COPYRIGHT-TOP} ***
* Licensed Materials - Property of IBM
* 5725-Z22, 5725-Z63, 5725-U33, 5725-Z63
*
* (C) Copyright IBM Corporation 2016, 2017
*
* All Rights Reserved.
* US Government Users Restricted Rights - Use, duplication or disclosure
* restricted by GSA ADP Schedule Contract with IBM Corp.
********************************************************** {COPYRIGHT-END} **/
// Node module: apiconnect-cli-loopback
var Promise = require('bluebird');
var chalk = require('chalk');
var g = require('strong-globalize')();
var spawn = require('cross-spawn');
function npmInstall(options) {
var oldCwd = process.cwd();
return new Promise(function(resolve, reject) {
process.chdir(options.dir);
var cmdArgs = [ 'install' ];
if (options.type === 'add' && options.module) {
cmdArgs.push('--save', options.module);
}
var commandStr = 'npm ' + cmdArgs.join(' ');
var msg = g.f('\n\nRunning %s' +
' for you to install the required dependencies.' +
' If this fails, try running the command yourself.\n\n',
chalk.yellow.bold(commandStr));
options.outstream.write(msg);
if (options.npmLogLevel) {
cmdArgs.push('--loglevel');
cmdArgs.push(options.npmLogLevel);
}
var spawnOptions = { stdio: [ 'inherit', 'inherit', 'inherit' ] };
if (options.npmLogPipe) {
spawnOptions = { stdio: [ 'inherit', 'pipe', 'pipe' ] };
}
var install = spawn('npm', cmdArgs, spawnOptions);
if (options.npmLogPipe) {
install.stdout.setEncoding('utf8');
install.stdout.on('data', function(data) {
options.outstream.write({ data: data, type: 'stdout' });
});
install.stderr.setEncoding('utf8');
install.stderr.on('data', function(data) {
options.errstream.write({ data: data, type: 'stderr' });
});
}
install.on('close', function(code) {
var msg = g.f('child process %s exited with code %s\n', commandStr, code);
options.outstream.write(msg);
if (code !== 0) {
return reject(new Error(msg));
}
resolve();
});
}).finally(function() {
process.chdir(oldCwd);
});
}
module.exports = npmInstall;