Skip to content
fe659b2
98 lines (79 sloc) 1.89 KB
/* eslint-disable no-eval */
/* global importScripts, application */
// executes the given code and handles the result
function importScript(url, error) {
try {
importScripts(url);
} catch (e) {
error = e;
}
return error;
}
function run(code, cb) {
var err = null;
var result = {};
try {
var codeExec = runHidden(code);
result.type = typeof codeExec;
result.output = stringify(codeExec);
} catch (e) {
err = e.message;
}
if (err) {
cb(err, null);
} else {
cb(null, result);
}
self.close();
}
// protects even the worker scope from being accessed
function runHidden(code) {
/* eslint-disable no-unused-vars */
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;
/* eslint-enable no-unused-vars */
var error = null;
error = importScript(
'https://cdnjs.cloudflare.com/ajax/libs/chai/2.2.0/chai.min.js'
);
/* eslint-disable*/
var assert = chai.assert;
/* eslint-enable */
if (error) {
return error;
}
return eval(code);
}
// converts the output into a string
function stringify(output) {
var result;
if (typeof output === 'undefined') {
result = 'undefined';
} else if (output === null) {
result = 'null';
} else {
result = JSON.stringify(output) || output.toString();
}
return result;
}
application.setInterface({ run: run });
Something went wrong with that request. Please try again.