biojs-io-fasta
Version:
Parses FASTA files
58 lines (54 loc) • 1.49 kB
JavaScript
// Generated by CoffeeScript 1.9.0
var Fasta, extend, st;
st = require("msa-seqtools");
extend = require("./extend");
module.exports = Fasta = {
getMeta: st.getMeta,
extend: function(metaParser) {
var customFasta;
customFasta = extend(Fasta);
Fasta.getMeta = metaParser;
return customFasta;
},
parse: function(text) {
var currentSeq, getMeta, id, label, line, obj, seqs, _i, _len;
seqs = [];
if (!text || text.length === 0) {
return [];
}
if (Object.prototype.toString.call(text) !== '[object Array]') {
text = text.split("\n");
}
getMeta = Fasta.getMeta;
for (_i = 0, _len = text.length; _i < _len; _i++) {
line = text[_i];
if (line[0] === ">" || line[0] === ";") {
label = line.slice(1);
obj = getMeta(label);
label = obj.name;
id = obj.id || seqs.length;
currentSeq = new st.model("", obj.name, id);
currentSeq.ids = obj.ids || {};
currentSeq.details = obj.details || {};
seqs.push(currentSeq);
} else {
currentSeq.seq += line;
}
}
return seqs;
},
write: function(seqs, access) {
var seq, text, _i, _len;
text = "";
for (_i = 0, _len = seqs.length; _i < _len; _i++) {
seq = seqs[_i];
if (access != null) {
seq = access(seq);
}
text += ">" + seq.name + "\n";
text += (st.splitNChars(seq.seq, 80)).join("\n");
text += "\n";
}
return text;
}
};