npm-kludge-search
Version:
Kludgy fast npm searcher
1,304 lines (1,206 loc) • 141 kB
HTML
<!doctype html>
<html>
<head>
<title>Tests & Coverage</title>
<script>
headings = [];
onload = function () {
headings = document.querySelectorAll('h2');
reset();
};
onscroll = function (e) {
var heading = find(window.scrollY);
if (!heading) return;
var links = document.querySelectorAll('#menu a')
, link;
for (var i = 0, len = links.length; i < len; ++i) {
link = links[i];
link.className = link.getAttribute('href') == '#' + heading.id ? 'active' : '';
}
};
function find (y) {
var i = headings.length
, heading;
while (i--) {
heading = headings[i];
if (y >= heading.offsetTop) {
return heading;
}
}
}
function toggle (className) {
var elements = document.getElementsByClassName(className);
for (var i = 0, il = elements.length; i < il; ++i) {
var element = elements[i];
if (element.classList.contains('hide')) {
element.classList.remove('hide');
element.classList.add('show');
}
else {
element.classList.remove('show');
element.classList.add('hide');
}
};
}
function reset () {
var shownElements = document.getElementsByClassName('show');
var filterElements = document.querySelectorAll('input[type=checkbox]');
for (var i = 0, il = filterElements.length; i < il; ++i) {
filterElements[i].checked = false;
}
// Check any filters with visible elements
for (i = 0, il = shownElements.length; i < il; ++i) {
var shownElement = shownElements[i];
var classNames = shownElement.className.split(' ');
for (var ci = 0, cl = classNames.length; ci < cl; ++ci){
var element = document.getElementById('show-' + classNames[ci]);
if (element) {
element.checked = true;
}
}
}
};
function filter (element) {
toggle(element.value);
reset();
}
</script>
<style>
body {
font: 14px/1.6 Helvetica, Arial, sans-serif;
margin: 0;
color: #2c2c2c;
}
#coverage {
padding: 60px;
}
h1 a:hover {
text-decoration: none;
}
h2 {
width: 80%;
margin-top: 80px;
margin-bottom: 0;
font-weight: 100;
letter-spacing: 1px;
}
ul {
margin-top: 20px;
padding: 0 15px;
width: 100%;
}
ul li {
float: left;
width: 40%;
margin-top: 5px;
margin-right: 60px;
list-style: none;
padding: 5px 0;
font-size: 12px;
}
#menu {
position: fixed;
font-size: 12px;
overflow-y: auto;
top: 0;
right: 0;
margin: 0;
height: 100%;
padding: 15px 15px;
border-left: 1px solid #eee;
background-color: #666;
}
#menu::after {
display: block;
content: '';
padding-top: 80px;
}
#menu li a {
display: block;
color: white;
padding: 0 5px 0 35px;
transition: background 300ms;
text-decoration: none;
}
#menu li {
position: relative;
list-style: none;
}
#menu a:hover,
#menu a.active {
text-decoration: none;
background: rgba(255,255,255,.4);
}
#menu li:hover .cov {
opacity: 1;
}
#menu li .dirname {
opacity: .60;
padding-right: 2px;
}
#menu li .basename {
opacity: 1;
}
#menu .cov {
background: rgba(0,0,0,.3);
position: absolute;
top: 0;
font-size: 9px;
text-align: center;
opacity: .8;
width: 22px;
border-radius: 10px;
padding: 2px 3px;
}
#files .stats:nth-child(2n) {
display: inline-block;
margin-top: 15px;
border: 1px solid #eee;
padding: 10px;
border-radius: 5px;
}
.stats div {
float: left;
padding: 0 5px;
}
.stats::after {
display: block;
content: '';
clear: both;
}
.stats .sloc::after {
content: ' SLOC';
color: #b6b6b6;
}
.stats .percentage::after {
content: ' coverage';
color: #b6b6b6;
}
.stats .hits::before {
content: '(';
color: #b6b6b6;
}
.stats .hits::after {
content: ' Covered';
color: #b6b6b6;
}
.stats .misses::after {
content: ' Not Covered)';
color: #b6b6b6;
}
.stats .failures::after {
content: ' Failures';
color: #b6b6b6;
}
.stats .skipped::after {
content: ' Skipped';
color: #b6b6b6;
}
.stats .test-count::after {
content: ' Tests';
color: #b6b6b6;
}
.stats .duration::before {
content: '(';
color: #b6b6b6;
}
.stats .duration::after {
content: ' ms)';
color: #b6b6b6;
}
.high {
color: #00d4b4;
}
.medium {
color: #e87d0d;
}
.low {
color: #d4081a;
}
.terrible {
color: #d4081a;
font-weight: bold;
}
#files table {
width: 80%;
margin-top: 10px;
border-collapse: collapse;
border: 1px solid #cbcbcb;
color: #363636;
border-radius: 3px;
}
#files thead {
display: none;
}
table td.line,
table td.hits {
width: 20px;
background: #eaeaea;
text-align: center;
font-size: 11px;
padding: 0 10px;
color: #949494;
}
table td.hits {
width: 10px;
padding: 2px 5px;
color: rgba(0,0,0,.2);
background: #f0f0f0;
}
table td.sourcemaps {
width: 1%;
border-left: 1px solid #cbcbcb;
padding: 0 10px;
}
td.sourcemaps.file {
background: #f0f0f0;
}
tr.miss td.line,
tr.miss td.hits {
background: #e6c3c7;
}
tr.miss td {
background: #f8d5d8;
}
td.source {
padding-left: 15px;
line-height: 15px;
white-space: pre;
font: 12px monaco, monospace;
}
td.source div {
display: inline-block;
}
td.source div.true {
background: #bae8bf;
}
td.source div.false {
background: #e8e5ba;
}
td.source div.never {
background: #f8d5d8;
}
#tests {
padding: 60px;
}
#tests table {
width: 80%;
margin-top: 10px;
border-collapse: collapse;
border: 1px solid #cbcbcb;
color: #363636;
border-radius: 3px;
}
#tests thead {
background: #F5F5F5;
}
#tests tr {
border: 1px solid #ccc;
}
#tests td {
padding-left: 8px;
}
#tests .success:nth-child(2n) {
background: #F5F5F5;
}
#tests .failure {
background: #FF9E9E;
}
#tests table .skipped {
background: #AA82FF;
}
#tests .success {
color: #949494;
}
#tests .failure .test-title {
font-weight: bold;
margin-top: 5px;
}
#tests .stack {
margin-top: 4px;
padding-left: 15px;
margin-bottom: 12px;
font: 12px monaco, monospace;
white-space: pre;
line-height: 15px;
}
.hide {
position: absolute;
left: -9999em;
}
.show {
position: relative;
}
#filters {
width: 75%;
margin-top: 25px;
}
#filters label {
margin-right: 10px;
}
</style>
</head>
<body>
<div id="tests">
<h1>Test Report</h1>
<div class="stats high">
<div class="failures">0</div>
<div class="skipped">0</div>
<div class="test-count">25</div>
<div class="duration">64</div>
</div>
<div id="filters">
<input type="checkbox" checked="" onchange="filter(this)" value="success" id="show-success"><label for="show-success">Show Success</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="failure" id="show-failure"><label for="show-failure">Show Failure</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="fixTime" id="show-fixTime"><label for="show-fixTime">fixTime</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="cacheDb" id="show-cacheDb"><label for="show-cacheDb">cacheDb</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="complete" id="show-complete"><label for="show-complete">complete</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="trimit" id="show-trimit"><label for="show-trimit">trimit</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="main" id="show-main"><label for="show-main">main</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="getReporter" id="show-getReporter"><label for="show-getReporter">getReporter</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="getOptions" id="show-getOptions"><label for="show-getOptions">getOptions</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="getCommand" id="show-getCommand"><label for="show-getCommand">getCommand</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="runCommand" id="show-runCommand"><label for="show-runCommand">runCommand</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="script" id="show-script"><label for="show-script">script</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="version" id="show-version"><label for="show-version">version</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="withDb" id="show-withDb"><label for="show-withDb">withDb</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="cleanup_objects" id="show-cleanup_objects"><label for="show-cleanup_objects">cleanup objects</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="populate_db" id="show-populate_db"><label for="show-populate_db">populate db</label></input>
<input type="checkbox" checked="" onchange="filter(this)" value="search" id="show-search"><label for="show-search">search</label></input>
</div>
<table>
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Duration (ms)</th>
</tr>
</thead>
<tbody>
<tr class="show fixTime success">
<td class="test-id">1</td>
<td class="test-title">fixTime processes time.modified
</td>
<td class="test-duration">8</td>
</tr>
<tr class="show cacheDb success">
<td class="test-id">2</td>
<td class="test-title">cacheDb handles errors
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show complete success">
<td class="test-id">3</td>
<td class="test-title">complete passes expected args to database
</td>
<td class="test-duration">2</td>
</tr>
<tr class="show trimit success">
<td class="test-id">4</td>
<td class="test-title">trimit does not error on nonwords
</td>
<td class="test-duration">0</td>
</tr>
<tr class="show main success">
<td class="test-id">5</td>
<td class="test-title">main can produce help
</td>
<td class="test-duration">6</td>
</tr>
<tr class="show main getReporter success">
<td class="test-id">6</td>
<td class="test-title">main getReporter has a default of "write"
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show main getReporter success">
<td class="test-id">7</td>
<td class="test-title">main getReporter has default that can be overridden by cmd
</td>
<td class="test-duration">5</td>
</tr>
<tr class="show main getReporter success">
<td class="test-id">8</td>
<td class="test-title">main getReporter cmd can be overridden by user cmd
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show main getOptions success">
<td class="test-id">9</td>
<td class="test-title">main getOptions has default db
</td>
<td class="test-duration">2</td>
</tr>
<tr class="show main getOptions success">
<td class="test-id">10</td>
<td class="test-title">main getOptions default db can be overridden
</td>
<td class="test-duration">0</td>
</tr>
<tr class="show main getCommand success">
<td class="test-id">11</td>
<td class="test-title">main getCommand identifies command when set
</td>
<td class="test-duration">0</td>
</tr>
<tr class="show main getCommand success">
<td class="test-id">12</td>
<td class="test-title">main getCommand returns search when no command set
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show main runCommand success">
<td class="test-id">13</td>
<td class="test-title">main runCommand avoids db when not required
</td>
<td class="test-duration">0</td>
</tr>
<tr class="show main runCommand success">
<td class="test-id">14</td>
<td class="test-title">main runCommand loads db when required
</td>
<td class="test-duration">13</td>
</tr>
<tr class="show script success">
<td class="test-id">15</td>
<td class="test-title">script writes out the nks completion script
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show version success">
<td class="test-id">16</td>
<td class="test-title">version writes out the nks script
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show withDb success">
<td class="test-id">17</td>
<td class="test-title">withDb handles early error
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show cleanup_objects success">
<td class="test-id">18</td>
<td class="test-title">cleanup objects gracefully handles missing members
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show populate_db success">
<td class="test-id">19</td>
<td class="test-title">populate db can add a record
</td>
<td class="test-duration">2</td>
</tr>
<tr class="show populate_db success">
<td class="test-id">20</td>
<td class="test-title">populate db can freeze db
</td>
<td class="test-duration">6</td>
</tr>
<tr class="show populate_db success">
<td class="test-id">21</td>
<td class="test-title">populate db misses missing records
</td>
<td class="test-duration">4</td>
</tr>
<tr class="show populate_db success">
<td class="test-id">22</td>
<td class="test-title">populate db can find by fts
</td>
<td class="test-duration">4</td>
</tr>
<tr class="show search success">
<td class="test-id">23</td>
<td class="test-title">search searches single word fts
</td>
<td class="test-duration">1</td>
</tr>
<tr class="show search success">
<td class="test-id">24</td>
<td class="test-title">search searches by name
</td>
<td class="test-duration">0</td>
</tr>
<tr class="show search success">
<td class="test-id">25</td>
<td class="test-title">search handles missing search by name
</td>
<td class="test-duration">1</td>
</tr>
</tbody>
</table>
</div>
<div id="coverage">
<h1>Code Coverage Report</h1>
<div id="menu">
<li><a href="#tests">Test Report</a></li>
<li><a href="#coverage">Coverage Report</a></li>
<li>
<span class="cov high">100</span>
<a href="#lib/authors.js"><span class="dirname">lib/</span><span class="basename">authors.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/complete.js"><span class="dirname">lib/</span><span class="basename">complete.js</span></a>
</li>
<li>
<span class="cov high">84.62</span>
<a href="#lib/completeApi.js"><span class="dirname">lib/</span><span class="basename">completeApi.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/fts.js"><span class="dirname">lib/</span><span class="basename">fts.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/getDb.js"><span class="dirname">lib/</span><span class="basename">getDb.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/help.js"><span class="dirname">lib/</span><span class="basename">help.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/main.js"><span class="dirname">lib/</span><span class="basename">main.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/makeDb.js"><span class="dirname">lib/</span><span class="basename">makeDb.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/name.js"><span class="dirname">lib/</span><span class="basename">name.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/populateDb.js"><span class="dirname">lib/</span><span class="basename">populateDb.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/script.js"><span class="dirname">lib/</span><span class="basename">script.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/search.js"><span class="dirname">lib/</span><span class="basename">search.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/version.js"><span class="dirname">lib/</span><span class="basename">version.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/reporters/json.js"><span class="dirname">lib/reporters/</span><span class="basename">json.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/reporters/null.js"><span class="dirname">lib/reporters/</span><span class="basename">null.js</span></a>
</li>
<li>
<span class="cov high">100</span>
<a href="#lib/reporters/write.js"><span class="dirname">lib/reporters/</span><span class="basename">write.js</span></a>
</li>
</div>
<div class="stats high">
<div class="percentage">99.37%</div>
<div class="sloc">316</div>
<div class="hits">314</div>
<div class="misses">2</div>
</div>
<div id="files">
<div class="file">
<h2 id="lib/authors.js">lib/authors.js</h2>
<div class="stats high">
<div class="percentage">100%</div>
<div class="sloc">6</div>
<div class="hits">6</div>
<div class="misses">0</div>
</div>
<table>
<thead>
<tr>
<th>Line</th>
<th>Hits</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr class="hit">
<td class="line">1</td>
<td class="hits">1</td>
<td class="source">'use strict';</td>
</tr>
<tr class="hit">
<td class="line">2</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">3</td>
<td class="hits">1</td>
<td class="source">module.exports = function (maintainers) {</td>
</tr>
<tr class="hit">
<td class="line">4</td>
<td class="hits">4</td>
<td class="source"> return (maintainers || []).map(function (m) {</td>
</tr>
<tr class="hit">
<td class="line">5</td>
<td class="hits">2</td>
<td class="source"> return '=' + m.name;</td>
</tr>
<tr class="hit">
<td class="line">6</td>
<td class="hits"></td>
<td class="source"> }).join(' ');</td>
</tr>
<tr class="hit">
<td class="line">7</td>
<td class="hits"></td>
<td class="source">};</td>
</tr>
<tr class="hit">
<td class="line">8</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
</tbody>
</table>
</div>
<div class="file">
<h2 id="lib/complete.js">lib/complete.js</h2>
<div class="stats high">
<div class="percentage">100%</div>
<div class="sloc">14</div>
<div class="hits">14</div>
<div class="misses">0</div>
</div>
<table>
<thead>
<tr>
<th>Line</th>
<th>Hits</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr class="hit">
<td class="line">1</td>
<td class="hits">1</td>
<td class="source">'use strict';</td>
</tr>
<tr class="hit">
<td class="line">2</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">3</td>
<td class="hits">1</td>
<td class="source">function complete(db, opts, done) {</td>
</tr>
<tr class="hit">
<td class="line">4</td>
<td class="hits">1</td>
<td class="source"> var start = opts.complete,</td>
</tr>
<tr class="hit">
<td class="line">5</td>
<td class="hits"></td>
<td class="source"> end = start + String.fromCharCode(0x10FFFF),</td>
</tr>
<tr class="hit">
<td class="line">6</td>
<td class="hits"></td>
<td class="source"> reporter = opts.reporter;</td>
</tr>
<tr class="hit">
<td class="line">7</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">8</td>
<td class="hits">1</td>
<td class="source"> db.findRange(start, end, function (err, val) {</td>
</tr>
<tr class="hit">
<td class="line">9</td>
<td class="hits"></td>
<td class="source"> /*jslint unparam: true*/</td>
</tr>
<tr class="hit">
<td class="line">10</td>
<td class="hits">1</td>
<td class="source"> reporter.write(val);</td>
</tr>
<tr class="hit">
<td class="line">11</td>
<td class="hits"></td>
<td class="source"> }, function () {</td>
</tr>
<tr class="hit">
<td class="line">12</td>
<td class="hits">1</td>
<td class="source"> done();</td>
</tr>
<tr class="hit">
<td class="line">13</td>
<td class="hits"></td>
<td class="source"> });</td>
</tr>
<tr class="hit">
<td class="line">14</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">15</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">16</td>
<td class="hits">1</td>
<td class="source">module.exports = complete;</td>
</tr>
<tr class="hit">
<td class="line">17</td>
<td class="hits">1</td>
<td class="source">complete.useDb = true;</td>
</tr>
<tr class="hit">
<td class="line">18</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
</tbody>
</table>
</div>
<div class="file">
<h2 id="lib/completeApi.js">lib/completeApi.js</h2>
<div class="stats high">
<div class="percentage">84.62%</div>
<div class="sloc">13</div>
<div class="hits">11</div>
<div class="misses">2</div>
</div>
<table>
<thead>
<tr>
<th>Line</th>
<th>Hits</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr class="hit">
<td class="line">1</td>
<td class="hits">1</td>
<td class="source">'use strict';</td>
</tr>
<tr class="hit">
<td class="line">2</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">3</td>
<td class="hits">1</td>
<td class="source">var main = require('./main');</td>
</tr>
<tr class="hit">
<td class="line">4</td>
<td class="hits">1</td>
<td class="source">var complete = require('./complete');</td>
</tr>
<tr class="hit">
<td class="line">5</td>
<td class="hits">1</td>
<td class="source">var makeWriteReporter = require('./reporters/write');</td>
</tr>
<tr class="hit">
<td class="line">6</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">7</td>
<td class="hits">1</td>
<td class="source">function completeApi(term, stream, done) {</td>
</tr>
<tr class="miss">
<td class="line">8</td>
<td class="hits"></td>
<td class="source"> var opts = {</td>
</tr>
<tr class="hit">
<td class="line">9</td>
<td class="hits"></td>
<td class="source"> db: main.defaultDb(),</td>
</tr>
<tr class="hit">
<td class="line">10</td>
<td class="hits"></td>
<td class="source"> reporter: makeWriteReporter(stream),</td>
</tr>
<tr class="hit">
<td class="line">11</td>
<td class="hits"></td>
<td class="source"> complete: term</td>
</tr>
<tr class="hit">
<td class="line">12</td>
<td class="hits"></td>
<td class="source"> };</td>
</tr>
<tr class="hit">
<td class="line">13</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="miss">
<td class="line">14</td>
<td class="hits"></td>
<td class="source"> main.runCommand(complete, opts, done);</td>
</tr>
<tr class="hit">
<td class="line">15</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">16</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">17</td>
<td class="hits">1</td>
<td class="source">module.exports = completeApi;</td>
</tr>
<tr class="hit">
<td class="line">18</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
</tbody>
</table>
</div>
<div class="file">
<h2 id="lib/fts.js">lib/fts.js</h2>
<div class="stats high">
<div class="percentage">100%</div>
<div class="sloc">18</div>
<div class="hits">18</div>
<div class="misses">0</div>
</div>
<table>
<thead>
<tr>
<th>Line</th>
<th>Hits</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr class="hit">
<td class="line">1</td>
<td class="hits">1</td>
<td class="source">'use strict';</td>
</tr>
<tr class="hit">
<td class="line">2</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">3</td>
<td class="hits">1</td>
<td class="source">var Hoek = require('hoek');</td>
</tr>
<tr class="hit">
<td class="line">4</td>
<td class="hits">1</td>
<td class="source">var authors = require('./authors');</td>
</tr>
<tr class="hit">
<td class="line">5</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">6</td>
<td class="hits">1</td>
<td class="source">function trimit(w) {</td>
</tr>
<tr class="hit">
<td class="line">7</td>
<td class="hits">3</td>
<td class="source"> return w && w.trim && w.trim();</td>
</tr>
<tr class="hit">
<td class="line">8</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">9</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">10</td>
<td class="hits">1</td>
<td class="source">function fts(obj) {</td>
</tr>
<tr class="hit">
<td class="line">11</td>
<td class="hits">2</td>
<td class="source"> var words = [ obj.name ]</td>
</tr>
<tr class="hit">
<td class="line">12</td>
<td class="hits"></td>
<td class="source"> .concat(obj.keywords)</td>
</tr>
<tr class="hit">
<td class="line">13</td>
<td class="hits"></td>
<td class="source"> .concat(obj.description);</td>
</tr>
<tr class="hit">
<td class="line">14</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">15</td>
<td class="hits">2</td>
<td class="source"> words = words.join(' ')</td>
</tr>
<tr class="hit">
<td class="line">16</td>
<td class="hits"></td>
<td class="source"> .split(/(\s|[\.-\/\\!=])+/);</td>
</tr>
<tr class="hit">
<td class="line">17</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">18</td>
<td class="hits">2</td>
<td class="source"> words = words.concat(authors(obj.maintainers));</td>
</tr>
<tr class="hit">
<td class="line">19</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">20</td>
<td class="hits">2</td>
<td class="source"> words = Hoek.unique(words);</td>
</tr>
<tr class="hit">
<td class="line">21</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">22</td>
<td class="hits">2</td>
<td class="source"> return words.join(' ');</td>
</tr>
<tr class="hit">
<td class="line">23</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">24</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">25</td>
<td class="hits">1</td>
<td class="source">module.exports = fts;</td>
</tr>
<tr class="hit">
<td class="line">26</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">27</td>
<td class="hits">1</td>
<td class="source">fts.trimit = trimit;</td>
</tr>
<tr class="hit">
<td class="line">28</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">29</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
</tbody>
</table>
</div>
<div class="file">
<h2 id="lib/getDb.js">lib/getDb.js</h2>
<div class="stats high">
<div class="percentage">100%</div>
<div class="sloc">23</div>
<div class="hits">23</div>
<div class="misses">0</div>
</div>
<table>
<thead>
<tr>
<th>Line</th>
<th>Hits</th>
<th>Source</th>
</tr>
</thead>
<tbody>
<tr class="hit">
<td class="line">1</td>
<td class="hits">1</td>
<td class="source">'use strict';</td>
</tr>
<tr class="hit">
<td class="line">2</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">3</td>
<td class="hits">1</td>
<td class="source">var dbs = {},</td>
</tr>
<tr class="hit">
<td class="line">4</td>
<td class="hits"></td>
<td class="source"> makeDb = require('./makeDb');</td>
</tr>
<tr class="hit">
<td class="line">5</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">6</td>
<td class="hits">1</td>
<td class="source">function cacheDb(name, cb) {</td>
</tr>
<tr class="hit">
<td class="line">7</td>
<td class="hits">3</td>
<td class="source"> return function (err, db) {</td>
</tr>
<tr class="hit">
<td class="line">8</td>
<td class="hits">3</td>
<td class="source"> if (err) {</td>
</tr>
<tr class="hit">
<td class="line">9</td>
<td class="hits">1</td>
<td class="source"> return cb(err);</td>
</tr>
<tr class="hit">
<td class="line">10</td>
<td class="hits"></td>
<td class="source"> }</td>
</tr>
<tr class="hit">
<td class="line">11</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">12</td>
<td class="hits">2</td>
<td class="source"> dbs[name] = db;</td>
</tr>
<tr class="hit">
<td class="line">13</td>
<td class="hits">2</td>
<td class="source"> cb(null, db);</td>
</tr>
<tr class="hit">
<td class="line">14</td>
<td class="hits"></td>
<td class="source"> };</td>
</tr>
<tr class="hit">
<td class="line">15</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">16</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">17</td>
<td class="hits"></td>
<td class="source"></td>
</tr>
<tr class="hit">
<td class="line">18</td>
<td class="hits">1</td>
<td class="source">function getDb(name, cb) {</td>
</tr>
<tr class="hit">
<td class="line">19</td>
<td class="hits">3</td>
<td class="source"> if (!dbs[name]) {</td>
</tr>
<tr class="hit">
<td class="line">20</td>
<td class="hits">2</td>
<td class="source"> makeDb(name, cacheDb(name, cb));</td>
</tr>
<tr class="hit">
<td class="line">21</td>
<td class="hits"></td>
<td class="source"> } else {</td>
</tr>
<tr class="hit">
<td class="line">22</td>
<td class="hits">1</td>
<td class="source"> setImmediate(function () {</td>
</tr>
<tr class="hit">
<td class="line">23</td>
<td class="hits">1</td>
<td class="source"> cb(null, dbs[name]);</td>
</tr>
<tr class="hit">
<td class="line">24</td>
<td class="hits"></td>
<td class="source"> });</td>
</tr>
<tr class="hit">
<td class="line">25</td>
<td class="hits"></td>
<td class="source"> }</td>
</tr>
<tr class="hit">
<td class="line">26</td>
<td class="hits"></td>
<td class="source">}</td>
</tr>
<tr class="hit">
<td class="line">27</td>
<td class="hits"></td>
<td class="source"></td>
</tr>