wsf2vbs
Version:
Windows Script File (WSF) to Visual Basic Script (VBS)
76 lines (67 loc) • 2.42 kB
JavaScript
var path = require("path");
const vbspretty = require('vbspretty');
const wsf2json = require('wsf2json');
const newline = path.sep === '/' ? '\n' : '\r\n';
const extractVbsFromWsfJSON = (jobs) => {
let vbsOut = `' ======== START ======== ${newline}`
vbsOut += jobs.reduce((vbs, job)=>{
let { id, script, runtime } = job;
vbs += newline;
if (id) {
vbs += `' ================================== Job: ${id} ================================== ${newline}`
}
if (script) {
vbs += script.reduce((s, scr)=>{
let {type, src, language, value} = scr;
if (type) {
s += `' ================= ${type}`
if (type === 'src') {
s += ` : ${src}`
} else {
s += ` script`
}
s += ` ================= ${newline}`
}
if (language.toLowerCase() === "vbscript" && value) {
s += value;
}
return s;
}, '');
}
//Inject arguments usage
if (runtime) {
let usage = runtime.reduce((str, param)=>{
let {name, helpstring} = param;
str += `Wscript.Echo "/${name}: ${helpstring}"\r\n`;
return str;
},'');
vbs = vbs.replace('WScript.Arguments.ShowUsage', usage);
}
return vbs;
},`' vbs file generated from wsf file using wsf2vbs npm package ${newline}`);
return vbsOut + ` ${newline}' ======== END ========`
}
const prettify = (vbs) => {
var sourcePretty = vbspretty({
level: 0,
indentChar: '\t',
breakLineChar: '\r\n',
breakOnSeperator: false,
removeComments: false,
source: vbs,
});
return sourcePretty;
}
const extract = (wsfPath='', debug) => {
return wsf2json.parseWSF(wsfPath, debug).then((json) => {
if (debug) console.log('json output', json);
return prettify(extractVbsFromWsfJSON(json));
})
}
const extractFromStr = (wsfStr='', baseDir, debug) => {
return wsf2json.parseWSFStr(wsfStr, baseDir, debug).then((json)=> {
if (debug) console.log('json output', json);
return prettify(extractVbsFromWsfJSON(json));
})
}
module.exports = { extract, extractFromStr }