UNPKG

1.22 kBJavaScriptView Raw
1'use strict'
2
3const la = require('lazy-ass')
4const is = require('check-more-types')
5const spawn = require('cross-spawn')
6
7function runCommand (command, extraEnv) {
8 if (is.string(command)) {
9 command = command.split(' ')
10 }
11 la(is.array(command), 'expected command and args array', command)
12 la(command.length > 0, 'missing command, needs at least something', command)
13 la(is.object(extraEnv), 'expected env object', extraEnv)
14
15 return new Promise(function (resolve, reject) {
16 const customEnv = Object.assign({}, process.env, extraEnv)
17
18 const spawnOptions = {
19 env: customEnv,
20 stdio: 'inherit'
21 }
22 const prog = command[0]
23 const args = command.slice(1)
24 console.log(`running "${prog}" with extra env keys`,
25 Object.keys(extraEnv))
26
27 const proc = spawn(prog, args, spawnOptions)
28
29 proc.on('error', (err) => {
30 console.error('prog error')
31 console.error(err)
32 reject(err)
33 })
34
35 proc.on('close', (code) => {
36 // debug(`${prog} exit code ${code}`)
37 if (code) {
38 const msg = `${prog} exit code ${code}`
39 console.error(msg)
40 return reject(new Error(msg))
41 }
42 resolve()
43 })
44 })
45}
46
47module.exports = runCommand