Skip to content

Commit 156f5bc

Browse files
committed
made compile a promise
1 parent 4ec14f8 commit 156f5bc

File tree

2 files changed

+122
-117
lines changed

2 files changed

+122
-117
lines changed

lib/generator.js

Lines changed: 59 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -626,64 +626,67 @@ exports.getAst = function (ast, oldFile) {
626626
});
627627
};
628628
const parseCode = function (ast, oldFile, preOptions = null) {
629-
if (preOptions) {
630-
vars = vars.concat(preOptions.vars.filter(x => vars.indexOf(x) === -1));
631-
632-
modals = modals.concat(preOptions.modals.filter(x => modals.indexOf(x) === -1));
633-
634-
tags = tags.concat(preOptions.tags.filter(x => tags.indexOf(x) === -1));
635-
636-
consts = consts.concat(preOptions.consts.filter(x => consts.indexOf(x) === -1))
637-
}
638-
if (oldFile.split(".").slice(-2).join(".") === 'gl.mcscript') oldFile = oldFile.replace('gl.', '');
639-
oldFile = oldFile.replace(/scripts\//, "functions/");
640-
// let stream = InputStream(str)
641-
// let output = TokenStream(stream)
642-
// let ast = parse(output)
643-
// console.log(JSON.stringify(ast))
644-
let prjPath = oldFile.split("/").indexOf("functions");
645-
let prjName = "noname";
646-
if (prjPath > -1) {
647-
prjName = oldFile.split("/")[prjPath - 1];
648-
prjPath = oldFile.split("/").slice(0, prjPath + 1).join("/").replace(".//", "")
649-
} else {
650-
prjPath = "."
651-
}
652-
let data = generate(ast, oldFile, prjPath, prjName);
653-
if (oldFile.split("/").splice(-2).join('/') === 'functions/load.mcscript' || oldFile.split("/").splice(-2).join('/') === 'scripts/load.mcscript') {
654-
data = '#file: ./mcscript/load\n#file: ./load\nfunction ' + prjName + ':mcscript/load' + "\n" + data.replace("#file: ./load", "");
655-
if (tags.length) data += '\nexecute unless entity @e[tag=mcscriptTags] at @p run summon armor_stand ~ ~ ~ {Tags:[mcscriptTags],Invisible:1,Invulnerable:1,NoGravity:1}'
656-
}
657-
let savedData = data;
658-
let extendArr = [];
659-
data = data.split("#file: ");
660-
for (let datChunk of data) {
661-
let extended = datChunk.split("#extend: ");
662-
if (extended.length > 1) {
663-
extendArr = extended.slice(1);
664-
data[data.indexOf(datChunk)] = extended[0];
665-
}
666-
}
667-
checkFilename(data, oldFile, function (file, dat) {
668-
dat = "#######\n# Compiled from " + oldFile.split("/").splice(-4).join('/') + "\n# to " + file.split("\\").splice(-4).join('/') + ".mcfunction\n#\n# Generated by Minecraft Script for 1.13\n######\n" + dat.join("\n");
669-
670-
ensureDirectoryExistence(file);
671-
fs.writeFile(file + '.mcfunction', dat, (err) => {
672-
if (err) throw err;
673-
console.log("\x1b[36m", "Generated ", "\x1b[33m", file + '.mcfunction', "\x1b[0m")
674-
});
675-
});
629+
return new Promise(function (resolve, reject) {
630+
if (preOptions) {
631+
vars = vars.concat(preOptions.vars.filter(x => vars.indexOf(x) === -1));
632+
633+
modals = modals.concat(preOptions.modals.filter(x => modals.indexOf(x) === -1));
676634

677-
// extend file
678-
extendArr.push("");
679-
checkFilename(extendArr, oldFile, function (file, dat) {
680-
dat = "\n# Extended from " + oldFile.split("/").splice(-4).join('/') + "\n# to " + file.split("\\").splice(-4).join('/') + ".mcfunction\n" + dat.join("\n");
681-
ensureDirectoryExistence(file);
682-
fs.appendFile(file + '.mcfunction', dat, (err) => {
683-
if (err) throw err;
684-
console.log("\x1b[36m", "Extended ", "\x1b[33m", file + '.mcfunction', "\x1b[0m")
635+
tags = tags.concat(preOptions.tags.filter(x => tags.indexOf(x) === -1));
636+
637+
consts = consts.concat(preOptions.consts.filter(x => consts.indexOf(x) === -1))
638+
}
639+
if (oldFile.split(".").slice(-2).join(".") === 'gl.mcscript') oldFile = oldFile.replace('gl.', '');
640+
oldFile = oldFile.replace(/scripts\//, "functions/");
641+
// let stream = InputStream(str)
642+
// let output = TokenStream(stream)
643+
// let ast = parse(output)
644+
// console.log(JSON.stringify(ast))
645+
let prjPath = oldFile.split("/").indexOf("functions");
646+
let prjName = "noname";
647+
if (prjPath > -1) {
648+
prjName = oldFile.split("/")[prjPath - 1];
649+
prjPath = oldFile.split("/").slice(0, prjPath + 1).join("/").replace(".//", "")
650+
} else {
651+
prjPath = "."
652+
}
653+
let data = generate(ast, oldFile, prjPath, prjName);
654+
if (oldFile.split("/").splice(-2).join('/') === 'functions/load.mcscript' || oldFile.split("/").splice(-2).join('/') === 'scripts/load.mcscript') {
655+
data = '#file: ./mcscript/load\n#file: ./load\nfunction ' + prjName + ':mcscript/load' + "\n" + data.replace("#file: ./load", "");
656+
if (tags.length) data += '\nexecute unless entity @e[tag=mcscriptTags] at @p run summon armor_stand ~ ~ ~ {Tags:[mcscriptTags],Invisible:1,Invulnerable:1,NoGravity:1}'
657+
}
658+
let savedData = data;
659+
let extendArr = [];
660+
data = data.split("#file: ");
661+
for (let datChunk of data) {
662+
let extended = datChunk.split("#extend: ");
663+
if (extended.length > 1) {
664+
extendArr = extended.slice(1);
665+
data[data.indexOf(datChunk)] = extended[0];
666+
}
667+
}
668+
checkFilename(data, oldFile, function (file, dat) {
669+
dat = "#######\n# Compiled from " + oldFile.split("/").splice(-4).join('/') + "\n# to " + file.split("\\").splice(-4).join('/') + ".mcfunction\n#\n# Generated by Minecraft Script for 1.13\n######\n" + dat.join("\n");
670+
671+
ensureDirectoryExistence(file);
672+
fs.writeFile(file + '.mcfunction', dat, (err) => {
673+
if (err) throw err;
674+
console.log("\x1b[36m", "Generated ", "\x1b[33m", file + '.mcfunction', "\x1b[0m");
675+
resolve()
676+
});
685677
});
686-
}, true)
678+
679+
// extend file
680+
extendArr.push("");
681+
checkFilename(extendArr, oldFile, function (file, dat) {
682+
dat = "\n# Extended from " + oldFile.split("/").splice(-4).join('/') + "\n# to " + file.split("\\").splice(-4).join('/') + ".mcfunction\n" + dat.join("\n");
683+
ensureDirectoryExistence(file);
684+
fs.appendFile(file + '.mcfunction', dat, (err) => {
685+
if (err) throw err;
686+
console.log("\x1b[36m", "Extended ", "\x1b[33m", file + '.mcfunction', "\x1b[0m")
687+
});
688+
}, true)
689+
})
687690
};
688691
exports.parseCode = parseCode;
689692
// only node.js

lib/index.js

Lines changed: 63 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,45 @@ const consoletheme = require("./consoletheme.js");
77

88
let preOptions;
99
const compile = function (path, fullErr) {
10-
11-
let num = 1;
12-
gen.clearVars();
13-
if (fs.lstatSync(path).isFile()) {
14-
15-
readFile(path);
16-
console.log(consoletheme.FgGreen, "Read " + num + " Files and compiled successfully", consoletheme.Reset);
17-
18-
} else {
19-
20-
if (fs.existsSync(path + "/mcscript")) gen.getFiles(path + "/mcscript", "mcfunction").forEach((item) => {
21-
fs.unlink(item, () => false);
22-
});
23-
24-
preOptions = {
25-
vars: [],
26-
modals: [],
27-
tags: [],
28-
consts: []
29-
};
30-
let files = gen.getFiles(path);
31-
let globals = files.filter(x => {
32-
if (x.split(".").slice(-2).join(".") === 'gl.mcscript') {
33-
files.splice(files.indexOf(x), 1);
34-
return true
10+
return new Promise(function (resolve, reject) {
11+
let num = 1;
12+
gen.clearVars();
13+
if (fs.lstatSync(path).isFile()) {
14+
15+
readFile(path);
16+
console.log(consoletheme.FgGreen, "Read " + num + " Files and compiled successfully", consoletheme.Reset);
17+
18+
} else {
19+
20+
if (fs.existsSync(path + "/mcscript")) gen.getFiles(path + "/mcscript", "mcfunction").forEach((item) => {
21+
fs.unlink(item, () => false);
22+
});
23+
24+
preOptions = {
25+
vars: [],
26+
modals: [],
27+
tags: [],
28+
consts: []
29+
};
30+
let files = gen.getFiles(path);
31+
let globals = files.filter(x => {
32+
if (x.split(".").slice(-2).join(".") === 'gl.mcscript') {
33+
files.splice(files.indexOf(x), 1);
34+
return true
35+
}
36+
return false
37+
});
38+
for (let file of globals) {
39+
readFile(file, {noParse: 'vars', fullErr: fullErr});
40+
}
41+
for (let file of files) {
42+
num++;
43+
readFile(file, {fullErr: fullErr});
3544
}
36-
return false
37-
});
38-
for (let file of globals) {
39-
readFile(file, {noParse: 'vars', fullErr: fullErr});
40-
}
41-
for (let file of files) {
42-
num++;
43-
readFile(file, {fullErr: fullErr});
44-
}
4545

46-
console.log(consoletheme.FgGreen, "Read " + num + " Files and compiled successfully", consoletheme.Reset);
47-
}
46+
console.log(consoletheme.FgGreen, "Read " + num + " Files and compiled successfully", consoletheme.Reset);
47+
}
48+
})
4849
};
4950

5051
function changeOptions(opt) {
@@ -87,36 +88,37 @@ const watch = function (path, fullErr) {
8788
};
8889

8990
function readFile(file, options = {}) {
91+
return new Promise(function (resolve, reject) {
92+
fs.readFile(file, {encoding: "utf8"}, function (err, data) {
9093

91-
fs.readFile(file, {encoding: "utf8"}, function (err, data) {
94+
data = data.split("\n");
95+
for (let item of data) {
9296

93-
data = data.split("\n");
94-
for (let item of data) {
97+
if (item.trim() === "{")
98+
data[data.indexOf(item) - 1] = data[data.indexOf(item) - 1].substr(0, data[data.indexOf(item) - 1].length - 2);
9599

96-
if (item.trim() === "{")
97-
data[data.indexOf(item) - 1] = data[data.indexOf(item) - 1].substr(0, data[data.indexOf(item) - 1].length - 2);
100+
if (",;({[".indexOf(item.trim().slice(-1)) === -1)
101+
data[data.indexOf(item)] += ";"
98102

99-
if (",;({[".indexOf(item.trim().slice(-1)) === -1)
100-
data[data.indexOf(item)] += ";"
101-
102-
}
103-
data = data.join("\n");
104-
if (options.noParse === "modal") gen.getModals(parser.parse(lexer.lexer(data)), file);
105-
else if (options.noParse === "json") gen.getAst(parser.parse(lexer.lexer(data)), file);
106-
else if (options.noParse === "vars") changeOptions(gen.getVars(parser.parse(lexer.lexer(data)), file, preOptions));
107-
else
108-
try {
109-
gen.parseCode(parser.parse(lexer.lexer(data, file)), file, preOptions)
110-
} catch (err) {
111-
if (err.message && err.message.substr(0, 7) === "[Debug]") {
112-
console.log(err.message);
113-
let oldMess = err.message.split(" ")[0].substr(7);
114-
err.message = err.message.split(" ").slice(1).join(" ");
115-
console.log(consoletheme.FgRed, "[Debugger]", consoletheme.FgCyan, oldMess, consoletheme.FgWhite, err, consoletheme.Reset,);
116-
} else if (!options.fullErr) console.log(consoletheme.FgRed, "[Error]", err.message, "\n\n " + file + " was not compiled!", consoletheme.Reset);
117-
else console.log(err);
118103
}
119-
});
104+
data = data.join("\n");
105+
if (options.noParse === "modal") gen.getModals(parser.parse(lexer.lexer(data)), file);
106+
else if (options.noParse === "json") gen.getAst(parser.parse(lexer.lexer(data)), file);
107+
else if (options.noParse === "vars") changeOptions(gen.getVars(parser.parse(lexer.lexer(data)), file, preOptions));
108+
else
109+
try {
110+
gen.parseCode(parser.parse(lexer.lexer(data, file)), file, preOptions).then(resolve)
111+
} catch (err) {
112+
if (err.message && err.message.substr(0, 7) === "[Debug]") {
113+
console.log(err.message);
114+
let oldMess = err.message.split(" ")[0].substr(7);
115+
err.message = err.message.split(" ").slice(1).join(" ");
116+
console.log(consoletheme.FgRed, "[Debugger]", consoletheme.FgCyan, oldMess, consoletheme.FgWhite, err, consoletheme.Reset,);
117+
} else if (!options.fullErr) console.log(consoletheme.FgRed, "[Error]", err.message, "\n\n " + file + " was not compiled!", consoletheme.Reset);
118+
else console.log(err);
119+
}
120+
});
121+
})
120122
}
121123

122124
exports.compile = compile;

0 commit comments

Comments
 (0)