fuck-env
Version:
Fuck environment variables everywhere
42 lines (37 loc) • 1.08 kB
JavaScript
const path = require('path')
const {spawn} = require('cross-spawn')
const load = require('../load')
const ENV_UNIX_RE = /\$(\w+)|\${(\w+)}/g
const ENV_RE = /^(\w+)=(['"]?)(.*)\2$/
const isWin32 = process.platform === 'win32'
module.exports = function fuckEnvCmd (args) {
const env = {}
let cmd
while (args.length) {
cmd = args.shift()
const match = ENV_RE.exec(cmd)
if (!match) {
break
}
const key = match[1]
const value = match[3]
env[key] = value
}
if (isWin32) {
cmd = path.normalize(cmd)
for (const key of Object.keys(env)) {
env[key] = env[key].replace(ENV_UNIX_RE, '%$1$2%')
}
}
const subprocess = spawn(cmd, args, {
stdio: 'inherit',
env: Object.assign({}, process.env, load(), env),
shell: isWin32
})
process.on('SIGTERM', () => subprocess.kill('SIGTERM'))
process.on('SIGINT', () => subprocess.kill('SIGINT'))
process.on('SIGBREAK', () => subprocess.kill('SIGBREAK'))
process.on('SIGHUP', () => subprocess.kill('SIGHUP'))
subprocess.on('exit', process.exit)
}