// from https://github.com/KlausTrainer/sandbox.js exports.runInSandbox = function(src, ctx, whitelist) { var vm = require('vm'); var sandbox; if (ctx && ctx.require) { whitelist = whitelist || []; var insecureRequire = ctx.require; var module = require('module'); var oldModulePrototype = module.prototype; var secureRequire = function(moduleName) { if (whitelist.indexOf(moduleName) === -1) { module.prototype = oldModulePrototype; throw new Error("'" + moduleName + "' is not whitelisted"); } else { var requiredModule = insecureRequire(moduleName); module.prototype = oldModulePrototype; return requiredModule; } }; module.prototype = { require: secureRequire, load: module.prototype.load, _compile: module.prototype._compile }; module._cache = {}; ctx.require = secureRequire; sandbox = Object.freeze(vm.createContext(ctx)); ctx.require = insecureRequire; } else { sandbox = Object.freeze(vm.createContext(ctx || {})); } return vm.createScript('(function() {"use strict"; return (' + src + ')()}())').runInContext(sandbox); };