| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | /* eslint-disable no-eval */ | 
					
						
							|  |  |  | /* global importScripts, application */ | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  | // executes the given code and handles the result
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function importScript(url, error) { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     importScripts(url); | 
					
						
							|  |  |  |   } catch (e) { | 
					
						
							|  |  |  |     error = e; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   return error; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function run(code) { | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  |   var result = { | 
					
						
							|  |  |  |     input: code, | 
					
						
							|  |  |  |     output: null, | 
					
						
							|  |  |  |     error: null, | 
					
						
							|  |  |  |     type: null | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     var codeExec = runHidden(code); | 
					
						
							|  |  |  |     result.type = typeof codeExec; | 
					
						
							|  |  |  |     result.output = stringify(codeExec); | 
					
						
							|  |  |  |   } catch(e) { | 
					
						
							|  |  |  |     result.error = e.message; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   application.remote.output(result); | 
					
						
							|  |  |  |   self.close(); | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // protects even the worker scope from being accessed
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | function runHidden(code) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /* eslint-disable */ | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  |   var indexedDB = null; | 
					
						
							|  |  |  |   var location = null; | 
					
						
							|  |  |  |   var navigator = null; | 
					
						
							|  |  |  |   var onerror = null; | 
					
						
							|  |  |  |   var onmessage = null; | 
					
						
							|  |  |  |   var performance = null; | 
					
						
							|  |  |  |   var self = null; | 
					
						
							|  |  |  |   var webkitIndexedDB = null; | 
					
						
							|  |  |  |   var postMessage = null; | 
					
						
							|  |  |  |   var close = null; | 
					
						
							|  |  |  |   var openDatabase = null; | 
					
						
							|  |  |  |   var openDatabaseSync = null; | 
					
						
							|  |  |  |   var webkitRequestFileSystem = null; | 
					
						
							|  |  |  |   var webkitRequestFileSystemSync = null; | 
					
						
							|  |  |  |   var webkitResolveLocalFileSystemSyncURL = null; | 
					
						
							|  |  |  |   var webkitResolveLocalFileSystemURL = null; | 
					
						
							|  |  |  |   var addEventListener = null; | 
					
						
							|  |  |  |   var dispatchEvent = null; | 
					
						
							|  |  |  |   var removeEventListener = null; | 
					
						
							|  |  |  |   var dump = null; | 
					
						
							|  |  |  |   var onoffline = null; | 
					
						
							|  |  |  |   var ononline = null; | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  |   /* eslint-enable */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   var error = null; | 
					
						
							|  |  |  |   error = importScript( | 
					
						
							|  |  |  |     error, | 
					
						
							|  |  |  |     'https://cdnjs.cloudflare.com/ajax/libs/ramda/0.13.0/ramda.min.js' | 
					
						
							|  |  |  |   ); | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  |   error = importScript( | 
					
						
							|  |  |  |     'https://cdnjs.cloudflare.com/ajax/libs/chai/2.2.0/chai.min.js' | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-27 12:36:29 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /* eslint-disable*/ | 
					
						
							|  |  |  |   var expect = chai.expect; | 
					
						
							|  |  |  |   var assert = chai.assert; | 
					
						
							|  |  |  |   /* eslint-enable */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  |   if (error) { | 
					
						
							|  |  |  |     return error; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   return eval(code); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // converts the output into a string
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | function stringify(output) { | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  |   var result; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  |   if (typeof output === 'undefined') { | 
					
						
							| 
									
										
										
										
											2015-04-14 23:04:54 -04:00
										 |  |  |     result = 'undefined'; | 
					
						
							|  |  |  |   } else if (output === null) { | 
					
						
							|  |  |  |     result = 'null'; | 
					
						
							|  |  |  |   } else { | 
					
						
							|  |  |  |     result = JSON.stringify(output) || output.toString(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-27 11:35:41 -07:00
										 |  |  | application.setInterface({ run: run }); |