mkg-deploy-tool
Version:
A deployment tool for servers
64 lines (56 loc) • 1.49 kB
JavaScript
const shellEscape = require('shell-escape')
const parser = require('bash-parser')
const treeFnc = {
if: (sCond, sIf, ...args) => {
let out = ['if ' + sCond + '; then', sIf]
while (args.length >= 2) {
let [sCond, sElif] = args.splice(0, 2)
out.push(['elif ' + sCond + '; then', sElif])
}
if (args.length) {
out.push(['else', args[0]])
}
out.push('fi')
return out.join('\n')
},
varArray: (name, ar) => {
return name + '=(' + shellEscape(ar) + ')'
},
var: (name, val) => {
return name + '=' + shellEscape([val])
},
for: (as, from, code) => {
return ['for ' + as + ' in ' + from + '; do', code, done].join('\n')
},
append: (...str) => str.join('\n')
}
function tree () {
let obj = {_isTreeObj: true}
let out = []
for (const fnc in treeFnc) { // eslint-disable-line guard-for-in
obj[fnc] = (...args) => {
args = args.map(a => a._isTreeObj ? a.str() : a)
out.push(treeFnc[fnc](...args))
}
}
obj.str = () => out.join('\n')
}
function parseCmd (line) {
return parser(line).commands[0].suffix.map(s => s.text)
}
const crypto = require('crypto')
const shortHash = (str) => {
let hash = crypto.createHash('sha512').update(str).digest('hex')
return hash.substr(parseInt(hash.substr(0, 1), 16), 16)
}
function wrap (type, data, prop) {
return Object.assign({id: shortHash(data), type}, prop)
}
module.exports = {
parseCmd,
shellEscape,
wrap,
tree,
shortHash
}