koa-node-jscover
Version:
koa middleware for instrument code using node-jscover
57 lines (55 loc) • 1.62 kB
JavaScript
var fs = require('fs');
var Path = require('path');
var cwd = process.cwd();
module.exports = function (option) {
var jscover = option.jscover;
var originalFileLoader = option.originalFileLoader;
return function *(next) {
var path = this.path;
var originalSrc = path.match(/\/node-jscover\/lib\/front-end\/original-src\/(.+)/);
if (originalSrc) {
var srcPath = Path.join(cwd, originalSrc[1]);
this.set('Content-Type', 'application/javascript;charset=utf-8');
if (!fs.existsSync(srcPath)) {
srcPath = srcPath.replace(/\.js$/, '.jsx');
}
if (originalFileLoader) {
originalFileLoader(this, srcPath);
} else {
this.body = fs.readFileSync(srcPath, {
encoding: 'utf-8'
});
}
return;
}
var pathname;
if (this.url.match(/-coverage\.js/)) {
pathname = this.path.replace(/-coverage/, '');
}
if (!pathname) {
yield *next;
return;
}
var codeFile = Path.join(cwd, pathname);
var name = pathname.substring(1);
this.set('Content-Type', 'application/javascript;charset=utf-8');
var content = this.body;
if (!content) {
if (!fs.existsSync(codeFile)) {
codeFile = codeFile.replace(/\.js$/, '.jsx');
}
content = fs.readFileSync(codeFile, {
encoding: 'utf-8'
});
}
if (!option.onlyLoad || !option.onlyLoad.call(this)) {
content = jscover.instrument(content, name, {
excludeHeader: true
});
}
this.body = content;
if (option.next && option.next.call(this)) {
yield *next;
}
};
};