diff --git a/bin/jscoverage b/bin/jscoverage index a1ceaf3..71171e1 100755 --- a/bin/jscoverage +++ b/bin/jscoverage @@ -30,9 +30,8 @@ if (!dest) { } if (exclude) { - exclude = exclude.split(','); - exclude.forEach(function (v, i, a) { - a[i] = new RegExp(v.replace(/\./, '\\.').replace(/\*/g, '.*')); + exclude = exclude.split(',').map(function (v) { + return new RegExp(v.replace(/\./, '\\.').replace(/\*/g, '.*')); }); } try { @@ -40,30 +39,7 @@ try { if (sourceStat.isFile()) { jscoverage.processFile(source, dest); } else { - var count = 0; - fs.walk(source, function (err, file, done) { - if (err) { - console.log(err); - return done; - } - var flag = false; - if (exclude) { - exclude.forEach(function (v) { - if (v.test(file)) { - flag = true; - } - }); - } - count ++; - var destFile = path.join(dest, file.substr(source.length)); - if (flag) { - // copy exclude file - fs.save(destFile, fs.readFileSync(file)); - } else { - jscoverage.processFile(file, destFile); - } - done(); - }, function (err) { + jscoverage.processDir(source, dest, {exclude: exclude}, function(err, count) { if (err) { return console.log(err); } diff --git a/index.js b/index.js index 3333cd8..46915fc 100755 --- a/index.js +++ b/index.js @@ -165,11 +165,13 @@ exports.process = jscoverage.process; * @sync * @param {Path} source absolute Path * @param {Path} dest absolute Path - * @param {Object} option [description] */ -exports.processFile = function (source, dest, option) { +exports.processFile = function (source, dest, callback) { + callback = callback || function(){} + var content; var stats; + // test source is file or dir, or not a file try { stats = fs.statSync(source); @@ -203,13 +205,58 @@ exports.processFile = function (source, dest, option) { filename: source }); } - content = this.process(source, content); + content = exports.process(source, content); if (sheBang) { content = sheBang + content; } fs.writeFileSync(dest, content); + + callback() }; +/** + * processDir, instrument directory + * @sync + * @param {Path} source absolute Path + * @param {Path} dest absolute Path + * @param {Object} option [description] + */ +exports.processDir = function (source, dest, option, callback) { + if(option instanceof Function) { + callback = option + option = null + } + + var count = 0; + var exclude = option && option.exclude; + + fs.walk(source, function (err, file, done) { + if (err) { + return done(err); + } + + var flag = false; + if (exclude) { + for(var v in exclude) + if (v.test(file)) { + flag = true; + break; + } + } + count++; + var destFile = path.join(dest, file.substr(source.length)); + if (flag) { + // copy exclude file + fs.save(destFile, fs.readFileSync(file)); + done(); + } else { + exports.processFile(file, destFile, done); + } + }, function(err) { + callback(err, count) + }); +} + function fixData(num) { return Math.round(num * 10000) / 10000; } diff --git a/package.json b/package.json index b989bc2..4ad44fa 100644 --- a/package.json +++ b/package.json @@ -7,17 +7,17 @@ "jscoverage": "./bin/jscoverage" }, "scripts": { - "test": "./node_modules/mocha/bin/_mocha -t 60000 -r ./index.js -R spec --covinject true test/" + "test": "_mocha -t 60000 -r ./index.js -R spec --covinject true test/" }, "engines": { "node" : ">=0.8" }, "dependencies" : { - "uglify-js" : "2.4.15", - "optimist" : "0.3.1", + "uglify-js": "2.7.0", + "optimist": "0.6.1", "xfs" : "0.1.8", - "ejs": "1.0.0", - "debug": "1.0.3", + "ejs": "2.5.1", + "debug": "2.2.0", "coffee-script": "*" }, "devDependencies" : {