Comparing version 0.0.1 to 0.1.0
109
index.js
@@ -6,5 +6,9 @@ var Module = require('module'); | ||
exports.addCoverage = function addCoverage(code, filename) { | ||
filename = filename.replace(/\\/g, '\\\\'); | ||
if (!~filename.indexOf(addCoverage.subdir)) { | ||
return code; | ||
} | ||
if (process.env.COVERAGE && !~filename.indexOf(process.env.COVERAGE)) { | ||
return code; | ||
} | ||
var lines = code.split('\n'); | ||
@@ -28,3 +32,6 @@ | ||
exports.init = function init(subdir) { | ||
var projectName; | ||
exports.init = function init(subdir, name) { | ||
projectName = name; | ||
if (process.env.NOCOV || global.__cov) return; | ||
@@ -71,20 +78,22 @@ if (!subdir) { | ||
total_lines += cnt; | ||
var html = '<div class="row">'; | ||
var html = '<div id="' + id + '" class="file"><div class="row" style="margin-left: 30px;">'; | ||
html += '<div class="span5">'; | ||
html += '<a href="#' + id + | ||
'" class="filename" name="' + id + | ||
'" onclick="var el = document.getElementById(\'' + id + | ||
'\'); el.style.display = el.style.display ? \'\' : \'none\';">' + shortFileName + | ||
'" class="filename trigger" name="' + id + '"' + | ||
'>' + shortFileName + | ||
'</a>'; | ||
html += '</div><div class="span6">'; | ||
var progressClass = 'progress-danger'; | ||
if (coveredPercentage > 30) progressClass = 'progress-warning'; | ||
if (coveredPercentage >= 80) progressClass = 'progress-success'; | ||
if (coveredPercentage > 30) { | ||
progressClass = 'progress-warning'; | ||
} | ||
if (coveredPercentage >= 80) { | ||
progressClass = 'progress-success'; | ||
} | ||
html += '<div class="progress ' + progressClass + '"> <div class="bar" style="width: ' + coveredPercentage + | ||
'%"><strong>' + coveredPercentage + | ||
'%</strong> [' + cnt + '/' + | ||
code.length + ']</div></div></div>'; | ||
'%</strong> [' + covered + '/' + cnt + ']</div></div></div>'; | ||
html += '</div>'; | ||
html += '<div id="' + id + '" style="display:none;"><pre><ol>'; | ||
html += '<div class="file-contents"><pre><ol>'; | ||
code.forEach(function (line, i) { | ||
@@ -97,3 +106,3 @@ html += '<li class="' + (__cov[file][i] ? 'covered' : (line.match(/;$/) && !line.match(/ \* /) ? 'uncovered' : '')) + '"><code>' + line + '</code>'; | ||
}); | ||
html += '</ol></pre></div>'; | ||
html += '</ol></pre></div></div>'; | ||
@@ -111,7 +120,49 @@ if (cnt > 1) { | ||
var html = files.sort(function (x, y) { | ||
var groups = {}; | ||
files.sort(byName).forEach(function (f) { | ||
var group = f.name.replace(/\/[^\/]+$/, ''); | ||
if (!groups[group]) groups[group] = []; | ||
groups[group].push(f); | ||
}); | ||
var groupsListHTML = []; | ||
var html = Object.keys(groups).map(function (g) { | ||
var tltc = 0; // total lines to cover | ||
var tlcd = 0; // total lines covered | ||
var files = groups[g].sort(bySize).map(function (f) { | ||
tltc += f.lines; | ||
tlcd += f.covered; | ||
return f.html; | ||
}).join('\n'); | ||
var gid = g.toLowerCase().replace(/[^a-z]/i, '-'); | ||
var percentage = Math.round(100 * tlcd / tltc); | ||
groupsListHTML.push('<li><a href="#' + gid + '">./' + g + ' (' + percentage + '%)</a></li>'); | ||
return '<div class="group-header row" id="' + gid + '"><div class="group-name span5">./' + g + '</div><div class="span6">' + progressBar(tlcd, tltc) + '</div></div>' + files; | ||
}).join('\n'); | ||
function byName(x, y) { | ||
return x.name > y.name ? -1 : 1; | ||
} | ||
function bySize(x, y) { | ||
return y.lines - x.lines; | ||
}).map(function (f) { return f.html }).join('\n'); | ||
} | ||
fs.writeFileSync(cwd + '/coverage.html', fs.readFileSync(path.join(__dirname, 'coverage.html')).toString().replace('CODE', html.replace(/\$'/g, '$\''))); | ||
if (!fs.existsSync(cwd + '/coverage')) fs.mkdirSync(cwd + '/coverage'); | ||
fs.writeFileSync(cwd + '/coverage/index.html', | ||
fs.readFileSync(path.join(__dirname, '/assets/coverage.html')) | ||
.toString() | ||
.replace('PROJECT', projectName || '') | ||
.replace('PROGRESS', progressBar(total_covered, total_lines)) | ||
.replace('CODE', html.replace(/\$'/g, '$\'')) | ||
.replace('GROUPS', groupsListHTML.join('')) | ||
); | ||
copy('bootstrap.css'); | ||
copy('style.css'); | ||
copy('coverage.js'); | ||
copy('bootstrap.js'); | ||
copy('jquery.min.js'); | ||
console.log('===================='); | ||
@@ -121,2 +172,24 @@ console.log('TOTAL COVERAGE:', Math.round((total_covered / (total_lines)) * 100) + '%'); | ||
function progressBar(x, total) { | ||
var percentage = total === 0 ? 100 : Math.round((x / total) * 100); | ||
var progressClass = 'progress-danger'; | ||
if (percentage > 30) { | ||
progressClass = 'progress-warning'; | ||
} | ||
if (percentage >= 80) { | ||
progressClass = 'progress-success'; | ||
} | ||
return '<div class="progress ' + progressClass + '"> <div class="bar" style="width: ' + percentage + | ||
'%"><strong>' + percentage + | ||
'%</strong> [' + x + '/' + total + ']</div></div>'; | ||
} | ||
function copy(file) { | ||
var source = path.join(__dirname, 'assets', file); | ||
var destination = path.join(process.cwd(), 'coverage', file); | ||
var contents = fs.readFileSync(source).toString(); | ||
fs.writeFileSync(destination, contents); | ||
} | ||
function syntax(code) { | ||
@@ -132,9 +205,11 @@ var comments = []; | ||
{ return safe[m]; }) | ||
.replace(/\/\*[\s\S]*?\*\//g, function(m) | ||
.replace(/\/\/.*$/gm, function (m) | ||
{ var l=comments.length; comments.push(m); return '~~~C'+l+'~~~'; }) | ||
.replace(/([^\\])((?:'(?:\\'|[^'\n])*')|(?:"(?:\\"|[^"\n])*"))/g, function(m, f, s) | ||
.replace(/\/\*[\s\S]*?\*\//g, function (m) | ||
{ var l=comments.length; comments.push(m); return '~~~C'+l+'~~~'; }) | ||
.replace(/([^\\])((?:'(?:\\'|[^'\n])*')|(?:"(?:\\"|[^"\n])*"))/g, function (m, f, s) | ||
{ var l=strings.length; strings.push(s); return f+'~~~S'+l+'~~~'; }) | ||
// .replace(/\/(\\\/|[^\/\n])*\/[gim]{0,3}/g, function(m) | ||
// { var l=res.length; res.push(m); return '~~~R'+l+'~~~'; }) | ||
.replace(/(var|function|typeof|new|return|if|for|in|while|break|do|continue|switch|case)([^a-z0-9\$_])/gi, | ||
.replace(/(var|function|typeof|new|return|prototype|if|for|in|while|break|do|continue|switch|case)([^a-z0-9\$_])/gi, | ||
'<span class="kwrd">$1</span>$2') | ||
@@ -141,0 +216,0 @@ .replace(/(\{|\}|\]|\[|\|)/gi, |
{ | ||
"author": "Anatoliy Chakkaev <rpm1602@gmail.com>", | ||
"name": "semicov", | ||
"version": "0.0.1", | ||
"version": "0.1.0", | ||
"main": "index.js", | ||
@@ -6,0 +6,0 @@ "dependencies": {}, |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
258098
9
2466
7
1