mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-12-23 14:02:59 -05:00
116 lines
3.4 KiB
JavaScript
116 lines
3.4 KiB
JavaScript
var window = self;
|
|
var Global = self;
|
|
|
|
importScripts("/javascripts/lodash.js", "/javascripts/aether.js");
|
|
|
|
try {
|
|
//Detect very modern javascript support.
|
|
(0,eval("'use strict'; let test = WeakMap && (class Test { *gen(a=7) { yield yield * () => true ; } });"));
|
|
console.log("Modern javascript detected, aw yeah!");
|
|
self.importScripts('/javascripts/esper.modern.js');
|
|
} catch (e) {
|
|
console.log("Legacy javascript detected, falling back...", e.message);
|
|
self.importScripts('/javascripts/esper.js');
|
|
}
|
|
|
|
//console.log("Aether Tome worker has finished importing scripts.");
|
|
var aethers = {};
|
|
var languagesImported = {};
|
|
|
|
var ensureLanguageImported = function(language) {
|
|
if (languagesImported[language]) return;
|
|
if (language === 'html') return;
|
|
importScripts("/javascripts/app/vendor/aether-" + language + ".js");
|
|
languagesImported[language] = true;
|
|
};
|
|
|
|
var createAether = function (spellKey, options) {
|
|
ensureLanguageImported(options.language);
|
|
aethers[spellKey] = new Aether(options);
|
|
return JSON.stringify({
|
|
"message": "Created aether for " + spellKey,
|
|
"function": "createAether"
|
|
});
|
|
};
|
|
|
|
var hasChangedSignificantly = function(spellKey, a,b,careAboutLineNumbers,careAboutLint) {
|
|
var hasChanged = aethers[spellKey].hasChangedSignificantly(a,b,careAboutLineNumbers,careAboutLint);
|
|
var functionName = "hasChangedSignificantly";
|
|
var returnObject = {
|
|
"function":functionName,
|
|
"hasChanged": hasChanged,
|
|
"spellKey": spellKey
|
|
};
|
|
return JSON.stringify(returnObject);
|
|
};
|
|
|
|
var updateLanguageAether = function(newLanguage) {
|
|
ensureLanguageImported(newLanguage);
|
|
for (var spellKey in aethers)
|
|
{
|
|
if (aethers.hasOwnProperty(spellKey))
|
|
{
|
|
aethers[spellKey].setLanguage(newLanguage);
|
|
}
|
|
|
|
}
|
|
};
|
|
|
|
var lint = function(spellKey, source) {
|
|
var currentAether = aethers[spellKey];
|
|
var lintMessages = currentAether.lint(source);
|
|
var functionName = "lint";
|
|
var returnObject = {
|
|
"lintMessages": lintMessages,
|
|
"function": functionName
|
|
};
|
|
return JSON.stringify(returnObject);
|
|
};
|
|
|
|
var transpile = function(spellKey, source) {
|
|
var currentAether = aethers[spellKey];
|
|
currentAether.transpile(source);
|
|
var functionName = "transpile";
|
|
var returnObject = {
|
|
"problems": currentAether.problems,
|
|
"function": functionName,
|
|
"spellKey": spellKey
|
|
};
|
|
return JSON.stringify(returnObject);
|
|
};
|
|
|
|
self.addEventListener('message', function(e) {
|
|
var data = JSON.parse(e.data);
|
|
if (data.function == "createAether")
|
|
{
|
|
self.postMessage(createAether(data.spellKey, data.options));
|
|
}
|
|
else if (data.function == "updateLanguageAether")
|
|
{
|
|
updateLanguageAether(data.newLanguage);
|
|
}
|
|
else if (data.function == "hasChangedSignificantly")
|
|
{
|
|
self.postMessage(hasChangedSignificantly(
|
|
data.spellKey,
|
|
data.a,
|
|
data.b,
|
|
data.careAboutLineNumbers,
|
|
data.careAboutLint
|
|
));
|
|
}
|
|
else if (data.function == "lint")
|
|
{
|
|
self.postMessage(lint(data.spellKey, data.source));
|
|
}
|
|
else if (data.function == "transpile")
|
|
{
|
|
self.postMessage(transpile(data.spellKey, data.source));
|
|
}
|
|
else
|
|
{
|
|
var message = "Didn't execute any function...";
|
|
var returnObject = {"message":message, "function":"none"};
|
|
self.postMessage(JSON.stringify(returnObject));
|
|
}
|
|
}, false);
|