UNPKG

fasta-parser

Version:

Buffer Stream parser from FASTA to JSON

119 lines (95 loc) 6.13 kB
<!DOCTYPE html> <html> <head> <title>fasta-parser</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, target-densitydpi=160dpi, initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"> <link rel="stylesheet" media="all" href="docco.css" /> </head> <body> <div id="container"> <div id="background"></div> <ul class="sections"> <li id="section-1"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-1">&#182;</a> </div> <h1 id="fasta-parser">fasta-parser</h1> <blockquote> <p>Buffer Stream parser from FASTA to JSON.</p> <p>doi: <a href="?">?</a> author: <a href="http://bmpvieira.com">Bruno Vieira</a> email: <a href="&#x6d;&#x61;&#105;&#108;&#116;&#x6f;&#58;&#x6d;&#97;&#105;&#x6c;&#64;&#98;&#x6d;&#112;&#118;&#105;&#x65;&#x69;&#x72;&#x61;&#46;&#x63;&#x6f;&#109;">&#x6d;&#97;&#105;&#x6c;&#64;&#98;&#x6d;&#112;&#118;&#105;&#x65;&#x69;&#x72;&#x61;&#46;&#x63;&#x6f;&#109;</a> license: <a href="https://raw.githubusercontent.com/bionode/fasta-parser/master/LICENSE">MIT</a></p> </blockquote> <hr> </div> </li> <li id="section-2"> <div class="annotation"> <div class="pilwrap "> <a class="pilcrow" href="#section-2">&#182;</a> </div> <h2 id="usage">Usage</h2> <pre><code>$ npm install fasta-parser <span class="hljs-keyword">var</span> parser = <span class="hljs-built_in">require</span>(<span class="hljs-string">'fasta-parser'</span>) <span class="hljs-keyword">var</span> fastaData = <span class="hljs-keyword">new</span> Buffer (<span class="hljs-string">'&gt;sequence1\n\ ATGCACGTCACGTCAGTACTCGTCAGTAC\n\ &gt;sequence2\n\ CAGTCCTACTGCATGCATGCATGCATGCATCGATGCATGTCGACTGCATGCATGC\n'</span>) <span class="hljs-keyword">var</span> parser = fasta() parser.on(<span class="hljs-string">'data'</span>, <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">(data)</span> </span>{ <span class="hljs-built_in">console</span>.log(<span class="hljs-built_in">JSON</span>.parse(data.toString())) }) parser.write(fastaData) parser.end() <span class="hljs-comment">// { id: 'sequence1',</span> <span class="hljs-comment">// seq: 'ATGCACGTCACGTCAGTACTCGTCAGTAC' }</span> <span class="hljs-comment">// { id: 'sequence2',</span> <span class="hljs-comment">// seq: 'CAGTCCTACTGCATGCATGCATGCATGCATCGATGCATGTCGACTGCATGCATGC' }</span> </code></pre><p>For a more useful API, check the dependent module:</p> <p><a href="http://github.com/bionode/bionode-fasta">bionode-fasta</a></p> </div> <div class="content"><div class='highlight'><pre> <span class="hljs-keyword">var</span> through = <span class="hljs-built_in">require</span>(<span class="hljs-string">'through2'</span>) <span class="hljs-keyword">var</span> split = <span class="hljs-built_in">require</span>(<span class="hljs-string">'split'</span>) <span class="hljs-keyword">var</span> pumpify = <span class="hljs-built_in">require</span>(<span class="hljs-string">'pumpify'</span>) <span class="hljs-built_in">module</span>.exports = <span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-params">()</span> </span>{ <span class="hljs-keyword">return</span> pumpify(split(), parser()) } <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">parser</span><span class="hljs-params">()</span> </span>{ <span class="hljs-keyword">var</span> cacheBuf <span class="hljs-keyword">var</span> cacheBufLen = <span class="hljs-number">8</span> <span class="hljs-keyword">var</span> openID = <span class="hljs-keyword">new</span> Buffer(<span class="hljs-string">'{"id":"'</span>) <span class="hljs-keyword">var</span> closeIDOpenSeq = <span class="hljs-keyword">new</span> Buffer(<span class="hljs-string">'","seq":"'</span>) <span class="hljs-keyword">var</span> closeSeq = <span class="hljs-keyword">new</span> Buffer(<span class="hljs-string">'"}\n'</span>) <span class="hljs-keyword">var</span> stream = through(transform, flush) <span class="hljs-keyword">return</span> stream <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transform</span><span class="hljs-params">(buf, enc, next)</span> </span>{ <span class="hljs-keyword">if</span> (buf[<span class="hljs-number">0</span>] === <span class="hljs-number">62</span>) { <span class="hljs-comment">// If line starts with '&gt;', this is an ID</span> <span class="hljs-keyword">if</span> (cacheBuf) { <span class="hljs-comment">// If a previous object is in cache, push it</span> cacheBuf = Buffer.concat([cacheBuf, closeSeq], cacheBufLen+<span class="hljs-number">3</span>) <span class="hljs-keyword">this</span>.push(cacheBuf) } <span class="hljs-keyword">var</span> id = buf.toString().slice(<span class="hljs-number">1</span>).trim().replace(<span class="hljs-regexp">/"/g</span>, <span class="hljs-string">'\\"'</span>) cacheBufLen = id.length + <span class="hljs-number">16</span> cacheBuf = Buffer.concat([openID, <span class="hljs-keyword">new</span> Buffer(id), closeIDOpenSeq], cacheBufLen) } <span class="hljs-keyword">else</span> { cacheBufLen += buf.length cacheBuf = Buffer.concat([cacheBuf, buf], cacheBufLen) } next() } <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">flush</span><span class="hljs-params">()</span> </span>{ cacheBuf = Buffer.concat([cacheBuf, closeSeq], cacheBufLen+<span class="hljs-number">3</span>) <span class="hljs-keyword">this</span>.push(cacheBuf) <span class="hljs-keyword">this</span>.push(<span class="hljs-literal">null</span>) } }</pre></div></div> </li> </ul> </div> </body> </html>