fliphub-monorepo
Version:
the builder of builders
114 lines (103 loc) • 2.92 kB
JavaScript
const cwd = process.cwd()
const {execSync} = require('child_process')
const Chainable = require('./chain/Chainable')
const inspect = require('./inspect')
const execSyncStd = (cmd) => {
var env = Object.create(process.env)
const filtered = {
NODE_ENV: env.NODE_ENV,
BENCH_FILTER: env.BENCH_FILTER,
PKG_FILTER: env.PKG_FILTER,
}
// console.log(inspect(filtered))
console.log(inspect(cmd))
// should pass in the current set node_env regardless of system
return execSync(cmd, {stdio: 'inherit', cwd, env})
}
const execSyncSilent = (cmd) => {
var env = Object.create(process.env)
const filtered = {
NODE_ENV: env.NODE_ENV,
BENCH_FILTER: env.BENCH_FILTER,
PKG_FILTER: env.PKG_FILTER,
}
// console.log(inspect(filtered))
console.log(inspect(cmd))
// should pass in the current set node_env regardless of system
return execSync(cmd, {stdio: 'inherit', cwd, env})
// return execSync(cmd, {cwd, env})
}
class Scripty extends Chainable {
nodeModuleFor(node_module) {
let resolved = require.resolve(node_module)
if (resolved) return resolved
}
binFor(node_module) {
// exec in child_process, capture the buffer output, assign to var
const npmBin = this.npmBin ||
execSync('npm bin').toString().replace(/\n/gmi, '')
return npmBin + '/' + node_module
}
static node_env(env) {
// const cross_env = 'cross-env'
// const cross_env = binFor(`cross-env`)
const cross_env = ''
return `${cross_env} NODE_ENV=${env}`
}
envFor(name, val) {
}
cmdFor({cmd, flags, env}) {
const nodeFlags = ' --harmony --max_old_space_size=8000'
const script = `${env} ${cmd} ${flags}`
return script
}
scriptFor({name, cmd, flags, env}) {
return this.cmdFor({
env: env || '',
cmd: this.nodeModuleFor(name),
flags: flags || '',
})
}
scriptForBin({name, cmd, flags, env}) {
return this.cmdFor({
env: env || '',
cmd: this.binFor(name),
flags: flags || '',
})
}
runScriptFor({name, cmd, flags}) {
let script = this.scriptFor({name, flags}) + cmd
// if we error, prefix with node
try {
const ran = execSyncSilent(script)
console.log(ran)
return ran
} catch (e) {
try {
script = ' node ' + script
const ran = execSyncStd(script)
return ran
} catch (e) {
console.log(e)
}
}
}
runNodeForModule({name, cmd, flags, env}) {
const script = (env || '') + ' node ' + this.binFor(name) + `${cmd} ${flags || ''}`
return execSyncStd(script)
}
runScriptForBin({name, cmd, flags}) {
const script = this.scriptForBin({name, flags}) + cmd
return execSyncStd(script)
}
}
const envrmts = {
browser: Scripty.node_env('browser'),
dev: Scripty.node_env('development'),
prod: Scripty.node_env('production'),
}
module.exports = {
Scripty,
envrmts,
execSyncStd,
}