fix(gbdialog): VBA is running.

This commit is contained in:
Rodrigo Rodriguez (pragmatismo.io) 2018-12-02 19:59:27 -02:00
parent 3bb9d652fd
commit 2dd359a344
5 changed files with 158 additions and 73 deletions

View file

@ -5,5 +5,4 @@
"arrowParens": "avoid",
"semi": true,
"singleQuote": true
}

View file

@ -73,12 +73,13 @@ export class GBVMService implements IGBCoreService {
public async run(source: any, path: string, min: any, deployer: GBDeployer, filename: string) {
// Converts VBS into TS.
//vb2ts.convertFile(source);
vb2ts.convertFile(source);
// Convert TS into JS.
const tsfile = `bot.ts`;
const tsc = new TSCompiler();
//tsc.compile([UrlJoin(path, tsfile)]);
tsc.compile([UrlJoin(path, tsfile)]);
// Run JS into the GB context.
const jsfile = `bot.js`;
let localPath = UrlJoin(path, jsfile);
@ -86,34 +87,38 @@ export class GBVMService implements IGBCoreService {
if (fs.existsSync(localPath)) {
let code: string = fs.readFileSync(localPath, 'utf8');
code = code.replace(/^.*exports.*$/gm, '');
let match1;
let match2;
let finalCode = '';
let pos = 0;
let nextCode = code;
// Finds all hear calls.
let parsedCode = code;
let hearExp = /(\w+).*hear.*\(\)/;
while (match1 = hearExp.exec(nextCode)) {
let match1;
// Write async body.
while ((match1 = hearExp.exec(code))) {
let pos = 0;
// Writes async body.
const variable = match1[1]; // variable = hear();
finalCode += code.substring(pos, pos + match1.index);
finalCode += `hear (async (${variable}) => {\n`;
parsedCode = code.substring(pos, pos + match1.index);
parsedCode += `hear (async (${variable}) => {\n`;
// Skip old construction and point to the async block.
// Skips old construction and point to the async block.
pos = pos + match1.index;
nextCode = code.substring(pos + match1[0].length + 1);
let tempCode = code.substring(pos + match1[0].length + 1);
let start = pos;
// Find last }
// Balances code blocks and checks for exits.
let right = 0;
let left = 1;
while ((match2 = /\{|\}/.exec(nextCode))) {
const c = nextCode.substring(match2.index, match2.index + 1);
let match2;
while ((match2 = /\{|\}/.exec(tempCode))) {
const c = tempCode.substring(match2.index, match2.index + 1);
if (c === '}') {
right++;
@ -121,48 +126,43 @@ export class GBVMService implements IGBCoreService {
left++;
}
let match3
if (match3 = hearExp.exec(nextCode))
{
nextCode = nextCode.substring(match3.index + 1);
pos += match3.index;
break;
}
nextCode = nextCode.substring(match2.index + 1);
tempCode = tempCode.substring(match2.index + 1);
pos += match2.index + 1;
if (left === right) {
break;
}
}
finalCode += code.substring(start + match1[0].length + 1, pos + match1[0].length);
finalCode += '});\n';
parsedCode += code.substring(start + match1[0].length + 1, pos + match1[0].length);
parsedCode += '});\n';
parsedCode += code.substring(pos + match1[0].length);
nextCode = code.substring(pos + match1[0].length);
// A interaction will be made for each hear.
code = parsedCode;
}
finalCode = finalCode.replace(/("[^"]*"|'[^']*')|\btalk\b/g, function($0, $1) {
parsedCode = parsedCode.replace(/("[^"]*"|'[^']*')|\btalk\b/g, function($0, $1) {
return $1 == undefined ? 'this.talk' : $1;
});
finalCode = finalCode.replace(/("[^"]*"|'[^']*')|\bhear\b/g, function($0, $1) {
parsedCode = parsedCode.replace(/("[^"]*"|'[^']*')|\bhear\b/g, function($0, $1) {
return $1 == undefined ? 'this.hear' : $1;
});
finalCode = finalCode.replace(/("[^"]*"|'[^']*')|\bsendEmail\b/g, function($0, $1) {
parsedCode = parsedCode.replace(/("[^"]*"|'[^']*')|\bsendEmail\b/g, function($0, $1) {
return $1 == undefined ? 'this.sendEmail' : $1;
});
finalCode = finalCode.replace(/this\./gm, 'await this.');
finalCode = finalCode.replace(/function/gm, 'async function');
console.log(finalCode);
parsedCode = parsedCode.replace(/this\./gm, 'await this.');
parsedCode = parsedCode.replace(/function/gm, 'async function');
fs.writeFileSync(localPath, parsedCode);
const sandbox: DialogClass = new DialogClass(min);
const context = vm.createContext(sandbox);
vm.runInContext(finalCode, context);
vm.runInContext(parsedCode, context);
min.sandbox = sandbox;
await deployer.deployScriptToStorage(min.instanceId, filename);
logger.info(`[GBVMService] Finished loading of ${filename}`);

View file

@ -43,6 +43,8 @@ export class TSCompiler {
public compile(
fileNames: string[],
options: ts.CompilerOptions = {
noStrictGenericChecks: true,
noImplicitUseStrict: true,
noEmitOnError: false,
noImplicitAny: true,
target: ts.ScriptTarget.ES5,
@ -51,7 +53,6 @@ export class TSCompiler {
noEmitHelpers: true,
maxNodeModuleJsDepth: 0,
esModuleInterop: false
}
) {
const program = ts.createProgram(fileNames, options);

View file

@ -31,34 +31,117 @@
'
'****************************************************************************
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
talk ("Please, what's your e-mail address?")
email = hear ()
talk("Thanks, sending e-mail to: " + email )
sendEmail(email, "Message from VBA Bot", "Yes, I can send e-mails.")
talk ("How many installments do you want to pay your Credit?")
installments = hear ()
name = hear ()
talk("Hey " + name + "!")
talk ("What is the amount requested?")
ammount = hear ()
talk ("What is the initial payment value?")
valorEntrada = hear ()
talk ("What is the best due date?")
dueDate = hear ()
juros =0
coeficiente1=0
if installments <12 then
juros = 1.60
coeficiente = 0.09748
end if
if installments > 12 and installments< 18 then
juros = 1.66
coeficiente = 0.06869
end if
if installments > 18 and installments< 36 then
juros = 1.64
coeficiente = 0.05397
end if
if installments > 36 and installments< 48 then
juros = 1.62
coeficiente = 0.03931
end if
if installments > 48 and installments< 60 then
juros = 1.70
coeficiente = 0.03270
end if
if installments =60 then
juros = 1.79
coeficiente = 0.02916
end if
if installments > 60 then
talk ("The maximum number of payments is 60")
end if
nInstallments = parseInt(installments)
vAmmount = parseFloat(ammount)
first = parseFloat(vAmmount) * 0.3 ' 30% of the value
tac = 800
coeficiente = 1.3
taxaJuros = parseFloat(juros)
valorFinanciado = ammount - valorEntrada + tac
valorParcela = valorFinanciado * coeficiente
valorTotalDoBem = valorParcela * nInstallments + valorEntrada
talk("Your credit analysis is done.")
talk("First payment" + valorEntrada)
talk("valorParcela" + valor)
talk("taxaJuros" + taxaJuros)
talk("valorFinanciado" + valorFinanciado)
talk("valorTotalDoBem" + valorTotalDoBem)
text = hear()
if email = "" then
text = hear()
if email = "" then
talk ()
text = hear()
i1 = 10
end if
else
text = hear()
if email = "" then
talk ()
text = hear()
i2 = 10
talk ()
text = hear()
talk ()
text = hear()
end if
end if
talk ()
text = hear()
i = 10
if i > 10 then
text = hear()
text = hear()
else
text = hear()
text = hear()
end if
%>

View file

@ -150,10 +150,12 @@ export class GBServer {
}
}
// // First line to run.
const path = 'packages/default.gbdialog';
const file = 'bot.vbs';
const source =(path + '/' + file);
let s = new GBVMService();
s.run(source, path, null, null, null)
//GBServer.run();
// First line to run.
// const path = 'packages/default.gbdialog';
// const file = 'bot.vbs';
// const source =(path + '/' + file);
// let s = new GBVMService();
// s.run(source, path, null, null, null)
GBServer.run();