UNPKG

npm-kludge-search

Version:
1,304 lines (1,206 loc) 141 kB
<!doctype html> <html> <head> <title>Tests &amp; 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 &quot;write&quot; </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">&#x27;use strict&#x27;;</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 &#x27;=&#x27; + m.name;</td> </tr> <tr class="hit"> <td class="line">6</td> <td class="hits"></td> <td class="source"> }).join(&#x27; &#x27;);</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">&#x27;use strict&#x27;;</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">&#x27;use strict&#x27;;</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(&#x27;./main&#x27;);</td> </tr> <tr class="hit"> <td class="line">4</td> <td class="hits">1</td> <td class="source">var complete = require(&#x27;./complete&#x27;);</td> </tr> <tr class="hit"> <td class="line">5</td> <td class="hits">1</td> <td class="source">var makeWriteReporter = require(&#x27;./reporters/write&#x27;);</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">&#x27;use strict&#x27;;</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(&#x27;hoek&#x27;);</td> </tr> <tr class="hit"> <td class="line">4</td> <td class="hits">1</td> <td class="source">var authors = require(&#x27;./authors&#x27;);</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 &amp;&amp; w.trim &amp;&amp; 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(&#x27; &#x27;)</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(&#x27; &#x27;);</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">&#x27;use strict&#x27;;</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(&#x27;./makeDb&#x27;);</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>