uascript
Version:
Javascript in Ukrainian
36 lines (35 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.compile = void 0;
const keyword_map_1 = require("./keyword-map");
function compile(source) {
return new Promise((resolve, reject) => {
try {
const { source: sourceWithoutStrings, strings } = parseString(source);
source = sourceWithoutStrings;
Object.entries(keyword_map_1.dataMap)
.map(map => source = source.replace(new RegExp(map[1], 'g'), map[0]));
source = restoreString(source, strings);
resolve(source);
}
catch (e) {
reject(e);
}
});
}
exports.compile = compile;
function parseString(source) {
const doubleQuoteStrings = source.match(/"(.*?)"/g) || [];
const singleQuoteStrings = source.match(/'(.*?)'/g) || [];
const templateQuoteStrings = source.match(/`(.*?)`/g) || [];
const strings = [...doubleQuoteStrings, ...singleQuoteStrings, ...templateQuoteStrings];
strings.forEach((savedString, i) => source = source.replace(savedString, `$${i}$`));
return {
source,
strings
};
}
function restoreString(source, savedStrings) {
savedStrings.forEach((savedString, i) => source = source.replace(`$${i}$`, savedString));
return source;
}