2014-04-18 14:59:08 -07:00
var window = self ;
var Global = self ;
2016-06-22 15:07:43 -07:00
importScripts ( "/javascripts/lodash.js" , "/javascripts/aether.js" ) ;
try {
//Detect very modern javascript support.
2016-06-23 09:34:37 -07:00
( 0 , eval ( "'use strict'; let test = (class Test { *gen(a=7) { yield yield * () => WeakMap; } });" ) ) ;
2016-06-22 15:07:43 -07:00
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' ) ;
}
2014-08-21 16:27:52 -07:00
//console.log("Aether Tome worker has finished importing scripts.");
2014-04-18 14:59:08 -07:00
var aethers = { } ;
2014-12-01 15:26:53 -08:00
var languagesImported = { } ;
2014-04-18 14:59:08 -07:00
2014-12-01 15:26:53 -08:00
var ensureLanguageImported = function ( language ) {
if ( languagesImported [ language ] ) return ;
importScripts ( "/javascripts/app/vendor/aether-" + language + ".js" ) ;
languagesImported [ language ] = true ;
} ;
var createAether = function ( spellKey , options ) {
ensureLanguageImported ( options . language ) ;
2014-04-18 14:59:08 -07:00
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 ,
2014-04-22 11:04:56 -07:00
"hasChanged" : hasChanged ,
"spellKey" : spellKey
2014-04-18 14:59:08 -07:00
} ;
return JSON . stringify ( returnObject ) ;
} ;
2014-12-01 15:26:53 -08:00
var updateLanguageAether = function ( newLanguage ) {
ensureLanguageImported ( newLanguage ) ;
2014-04-18 14:59:08 -07:00
for ( var spellKey in aethers )
{
if ( aethers . hasOwnProperty ( spellKey ) )
{
aethers [ spellKey ] . setLanguage ( newLanguage ) ;
}
}
} ;
2014-12-01 15:26:53 -08:00
var lint = function ( spellKey , source ) {
2014-04-22 11:46:17 -07:00
var currentAether = aethers [ spellKey ] ;
2014-04-18 14:59:08 -07:00
var lintMessages = currentAether . lint ( source ) ;
var functionName = "lint" ;
var returnObject = {
"lintMessages" : lintMessages ,
"function" : functionName
} ;
return JSON . stringify ( returnObject ) ;
} ;
2014-04-22 11:46:17 -07:00
2014-12-01 15:26:53 -08:00
var transpile = function ( spellKey , source ) {
2014-04-22 11:46:17 -07:00
var currentAether = aethers [ spellKey ] ;
currentAether . transpile ( source ) ;
var functionName = "transpile" ;
var returnObject = {
"problems" : currentAether . problems ,
"function" : functionName ,
"spellKey" : spellKey
} ;
return JSON . stringify ( returnObject ) ;
} ;
2014-12-01 15:26:53 -08:00
2014-04-18 14:59:08 -07:00
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" )
{
2014-12-01 15:26:53 -08:00
updateLanguageAether ( data . newLanguage ) ;
2014-04-18 14:59:08 -07:00
}
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 ) ) ;
}
2014-04-22 11:46:17 -07:00
else if ( data . function == "transpile" )
{
self . postMessage ( transpile ( data . spellKey , data . source ) ) ;
}
2014-04-18 14:59:08 -07:00
else
{
var message = "Didn't execute any function..." ;
var returnObject = { "message" : message , "function" : "none" } ;
self . postMessage ( JSON . stringify ( returnObject ) ) ;
}
2014-05-02 12:32:41 -07:00
} , false ) ;