diff --git a/lib/sandboxed_module.js b/lib/sandboxed_module.js index 6bf483c..17aeef0 100644 --- a/lib/sandboxed_module.js +++ b/lib/sandboxed_module.js @@ -8,6 +8,7 @@ var builtinModules = require('./builtin_modules.json'); var parent = module.parent; var globalOptions = {}; var registeredBuiltInSourceTransformers = ['coffee']; +var builtInSourceTransformersConfig = {}; module.exports = SandboxedModule; function SandboxedModule() { @@ -27,7 +28,7 @@ SandboxedModule.load = function(moduleId, options, trace) { var sandboxedModule = new SandboxedModule(); sandboxedModule._init(moduleId, trace, options); - sandboxedModule._compile() + sandboxedModule._compile(); return sandboxedModule; }; @@ -42,10 +43,11 @@ SandboxedModule.configure = function(options) { }); }; -SandboxedModule.registerBuiltInSourceTransformer = function(name) { +SandboxedModule.registerBuiltInSourceTransformer = function(name, config) { if(registeredBuiltInSourceTransformers.indexOf(name) === -1) { - registeredBuiltInSourceTransformers.push(name) + registeredBuiltInSourceTransformers.push(name); } + builtInSourceTransformersConfig[name] = config; }; @@ -308,24 +310,33 @@ function getStartingSourceTransformers() { var builtInSourceTransformers = { coffee: function(source) { if (this.filename.search(/\.coffee$/) !== -1){ - return require('coffee-script').compile(source); + return require('coffee-script').compile(source, builtInSourceTransformersConfig.coffee); } else { return source; } }, istanbul: function(source) { - var coverageVariable, istanbulCoverageMayBeRunning = false; - Object.keys(global).forEach(function(name) { - if((name.indexOf("$$cov_") === 0 || name === '__coverage__') && global[name]) { - istanbulCoverageMayBeRunning = true; - coverageVariable = name; - } - }); + var config = {}; + if(builtInSourceTransformersConfig.istanbul) { + Object.keys(builtInSourceTransformersConfig.istanbul).forEach(function(option) { + config[option] = builtInSourceTransformersConfig.istanbul[option]; + }); + } + + var istanbulCoverageMayBeRunning = config.coverageVariable && global[config.coverageVariable]; + if(!istanbulCoverageMayBeRunning) { + Object.keys(global).forEach(function(name) { + if((name.indexOf("$$cov_") === 0 || name === '__coverage__') && global[name]) { + istanbulCoverageMayBeRunning = true; + config.coverageVariable = name; + } + }); + } if(istanbulCoverageMayBeRunning) { try { var istanbul = require('istanbul'), - instrumenter = new istanbul.Instrumenter({coverageVariable: coverageVariable}), + instrumenter = new istanbul.Instrumenter(config), instrumentMethod = instrumenter.instrumentSync.bind(instrumenter); source = instrumentMethod(source, this.filename); } catch(e) {}