UNPKG

apiconnect-cli-loopback

Version:

Plugin for IBM API Connect Developer Toolkit

71 lines (61 loc) 2.24 kB
/********************************************************* {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;