add some monkeypatched istanbul interop - closes #660

This commit is contained in:
Sebastian McKenzie
2015-02-02 20:28:24 +11:00
parent 2e3226b520
commit ca0539190e

View File

@@ -34,7 +34,6 @@ var cache = registerCache.get();
var transformOpts = {};
var ignoreRegex = /node_modules/;
var onlyRegex;
var whitelist = [];
var exts = {};
var maps = {};
var old = require.extensions[".js"];
@@ -43,11 +42,7 @@ var mtime = function (filename) {
return +fs.statSync(filename).mtime;
};
var loader = function (m, filename) {
if ((ignoreRegex && ignoreRegex.test(filename)) || (onlyRegex && !onlyRegex.test(filename))) {
return old.apply(this, arguments);
}
var compile = function (filename) {
var result;
if (cache) {
@@ -57,11 +52,12 @@ var loader = function (m, filename) {
}
}
result = result || to5.transformFileSync(filename, extend({
whitelist: whitelist,
sourceMap: true,
ast: false
}, transformOpts));
if (!result) {
result = to5.transformFileSync(filename, extend({
sourceMap: true,
ast: false
}, transformOpts));
}
if (cache) {
result.mtime = mtime(filename);
@@ -70,7 +66,44 @@ var loader = function (m, filename) {
maps[filename] = result.map;
m._compile(result.code, filename);
return result.code;
};
var shouldIgnore = function (filename) {
console.log(filename);
return (ignoreRegex && ignoreRegex.test(filename)) || (onlyRegex && !onlyRegex.test(filename));
};
var istanbulLoader = function (m, filename, old) {
// we need to monkey patch fs.readFileSync so we can hook into
// what istanbul gets, it's extremely dirty but it's the only way
var _readFileSync = fs.readFileSync;
fs.readFileSync = function () {
fs.readFileSync = _readFileSync;
return compile(filename);
};
old(m, filename);
};
var normalLoader = function (m, filename) {
m._compile(compile(filename), filename);
};
var registerExtension = function (ext) {
var old = require.extensions[ext];
var loader = normalLoader;
if (process.env.running_under_istanbul) loader = istanbulLoader;
require.extensions[ext] = function (m, filename) {
if (shouldIgnore(filename)) {
old(m, filename);
} else {
loader(m, filename, old);
}
};
};
var hookExtensions = function (_exts) {
@@ -82,7 +115,7 @@ var hookExtensions = function (_exts) {
each(_exts, function (ext) {
exts[ext] = require.extensions[ext];
require.extensions[ext] = loader;
registerExtension(ext);
});
};