Usage
$ npm install fasta-parser
var parser = require('fasta-parser')
var fastaData = new Buffer ('>sequence1\n\
ATGCACGTCACGTCAGTACTCGTCAGTAC\n\
>sequence2\n\
CAGTCCTACTGCATGCATGCATGCATGCATCGATGCATGTCGACTGCATGCATGC\n')
var parser = fasta()
parser.on('data', function(data) {
console.log(JSON.parse(data.toString()))
})
parser.write(fastaData)
parser.end()
For a more useful API, check the dependent module:
bionode-fasta
var through = require('through2')
var split = require('split')
var pumpify = require('pumpify')
module.exports = function() {
return pumpify(split(), parser())
}
function parser() {
var cacheBuf
var cacheBufLen = 8
var openID = new Buffer('{"id":"')
var closeIDOpenSeq = new Buffer('","seq":"')
var closeSeq = new Buffer('"}\n')
var stream = through(transform, flush)
return stream
function transform(buf, enc, next) {
if (buf[0] === 62) {
if (cacheBuf) {
cacheBuf = Buffer.concat([cacheBuf, closeSeq], cacheBufLen+3)
this.push(cacheBuf)
}
var id = buf.toString().slice(1).trim().replace(/"/g, '\\"')
cacheBufLen = id.length + 16
cacheBuf = Buffer.concat([openID, new Buffer(id), closeIDOpenSeq], cacheBufLen)
}
else {
cacheBufLen += buf.length
cacheBuf = Buffer.concat([cacheBuf, buf], cacheBufLen)
}
next()
}
function flush() {
cacheBuf = Buffer.concat([cacheBuf, closeSeq], cacheBufLen+3)
this.push(cacheBuf)
this.push(null)
}
}