@teselagen/bio-parsers 0.3.7 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.umd.js CHANGED
@@ -1,7 +1,4 @@
1
- (function(global2, factory) {
2
- typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.bioParsers = {}));
3
- })(this, function(exports2) {
4
- "use strict";var __defProp = Object.defineProperty;
1
+ var __defProp = Object.defineProperty;
5
2
  var __defProps = Object.defineProperties;
6
3
  var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
4
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -42,7 +39,11 @@ var __async = (__this, __arguments, generator) => {
42
39
  step((generator = generator.apply(__this, __arguments)).next());
43
40
  });
44
41
  };
45
-
42
+ (function(global2, factory) {
43
+ typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.bioParsers = {}));
44
+ })(this, function(exports2) {
45
+ var _a2, _b2;
46
+ "use strict";
46
47
  const untitledSequenceName = "Untitled Sequence";
47
48
  const gbDivisions = {
48
49
  // https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html#GenBankDivisionB
@@ -98,6 +99,19 @@ var __async = (__this, __arguments, generator) => {
98
99
  };
99
100
  }
100
101
  __name(createInitialSequence, "createInitialSequence");
102
+ function extractFileExtension(name2) {
103
+ if (typeof name2 === "string") {
104
+ let ext = "";
105
+ const match = name2.match(/\.(\w+)$/);
106
+ if (match && match[1]) {
107
+ ext = match[1];
108
+ }
109
+ return ext;
110
+ } else {
111
+ return "";
112
+ }
113
+ }
114
+ __name(extractFileExtension, "extractFileExtension");
101
115
  function splitStringIntoLines(string) {
102
116
  let lines = [];
103
117
  if (string === "") {
@@ -123,10 +137,7 @@ var __async = (__this, __arguments, generator) => {
123
137
  if (typeof f == "function") {
124
138
  var a = /* @__PURE__ */ __name(function a2() {
125
139
  if (this instanceof a2) {
126
- var args = [null];
127
- args.push.apply(args, arguments);
128
- var Ctor = Function.bind.apply(f, args);
129
- return new Ctor();
140
+ return Reflect.construct(f, arguments, this.constructor);
130
141
  }
131
142
  return f.apply(this, arguments);
132
143
  }, "a");
@@ -19561,7 +19572,11 @@ var __async = (__this, __arguments, generator) => {
19561
19572
  return parsingResultArray;
19562
19573
  }
19563
19574
  __name(validateSequenceArray, "validateSequenceArray");
19564
- function fastaToJson(fileString, options) {
19575
+ function fastaToJson(fileString, options = {}) {
19576
+ const ext = extractFileExtension(options.fileName);
19577
+ if (/^(faa)$/.test(ext)) {
19578
+ options.isProtein = true;
19579
+ }
19565
19580
  let resultArray = [];
19566
19581
  let result = null;
19567
19582
  try {
@@ -20223,7 +20238,7 @@ var __async = (__this, __arguments, generator) => {
20223
20238
  }
20224
20239
  }
20225
20240
  __name(getLengthOfWhiteSpaceBeforeStartOfLetters, "getLengthOfWhiteSpaceBeforeStartOfLetters");
20226
- class Match {
20241
+ const _Match = class _Match {
20227
20242
  constructor(props) {
20228
20243
  Object.assign(this, props);
20229
20244
  this.value = this.obj[this.prop];
@@ -20240,8 +20255,9 @@ var __async = (__this, __arguments, generator) => {
20240
20255
  log() {
20241
20256
  console.info(this.toString());
20242
20257
  }
20243
- }
20244
- __name(Match, "Match");
20258
+ };
20259
+ __name(_Match, "Match");
20260
+ let Match = _Match;
20245
20261
  const GLOBAL = typeof window == "object" ? window : global;
20246
20262
  function searchWholeObjByName(what, where) {
20247
20263
  const searchBy = /* @__PURE__ */ __name((what2, where2, prop) => what2 == prop, "searchBy");
@@ -20287,13 +20303,13 @@ var __async = (__this, __arguments, generator) => {
20287
20303
  }
20288
20304
  __name(searchWholeObjByName, "searchWholeObjByName");
20289
20305
  function searchWholeObjByNameSimple(what, where) {
20290
- var _a2, _b2, _c;
20291
- return (_c = (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value) == null ? void 0 : _c[0];
20306
+ var _a3, _b3, _c;
20307
+ return (_c = (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value) == null ? void 0 : _c[0];
20292
20308
  }
20293
20309
  __name(searchWholeObjByNameSimple, "searchWholeObjByNameSimple");
20294
20310
  function searchWholeObjByNameSimpleArray(what, where) {
20295
- var _a2, _b2;
20296
- return (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value;
20311
+ var _a3, _b3;
20312
+ return (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value;
20297
20313
  }
20298
20314
  __name(searchWholeObjByNameSimpleArray, "searchWholeObjByNameSimpleArray");
20299
20315
  var validator$2 = {};
@@ -20721,7 +20737,7 @@ var __async = (__this, __arguments, generator) => {
20721
20737
  }, "buildOptions$1");
20722
20738
  OptionsBuilder.buildOptions = buildOptions$1;
20723
20739
  OptionsBuilder.defaultOptions = defaultOptions$1;
20724
- class XmlNode {
20740
+ const _XmlNode = class _XmlNode {
20725
20741
  constructor(tagname) {
20726
20742
  this.tagname = tagname;
20727
20743
  this.child = [];
@@ -20741,8 +20757,9 @@ var __async = (__this, __arguments, generator) => {
20741
20757
  this.child.push({ [node.tagname]: node.child });
20742
20758
  }
20743
20759
  }
20744
- }
20745
- __name(XmlNode, "XmlNode");
20760
+ };
20761
+ __name(_XmlNode, "XmlNode");
20762
+ let XmlNode = _XmlNode;
20746
20763
  var xmlNode$1 = XmlNode;
20747
20764
  const util$2 = util$4;
20748
20765
  function readDocType$1(xmlData, i2) {
@@ -20953,7 +20970,7 @@ var __async = (__this, __arguments, generator) => {
20953
20970
  const readDocType = DocTypeReader;
20954
20971
  const toNumber = strnum;
20955
20972
  "<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g, util$1.nameRegexp);
20956
- let OrderedObjParser$1 = /* @__PURE__ */ __name(class OrderedObjParser {
20973
+ let OrderedObjParser$1 = (_a2 = class {
20957
20974
  constructor(options) {
20958
20975
  this.options = options;
20959
20976
  this.currentNode = null;
@@ -20992,7 +21009,7 @@ var __async = (__this, __arguments, generator) => {
20992
21009
  this.saveTextToParentTag = saveTextToParentTag;
20993
21010
  this.addChild = addChild;
20994
21011
  }
20995
- }, "OrderedObjParser");
21012
+ }, __name(_a2, "OrderedObjParser"), _a2);
20996
21013
  function addExternalEntities(externalEntities) {
20997
21014
  const entKeys = Object.keys(externalEntities);
20998
21015
  for (let i2 = 0; i2 < entKeys.length; i2++) {
@@ -21224,6 +21241,7 @@ var __async = (__this, __arguments, generator) => {
21224
21241
  if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
21225
21242
  if (tagName[tagName.length - 1] === "/") {
21226
21243
  tagName = tagName.substr(0, tagName.length - 1);
21244
+ jPath = jPath.substr(0, jPath.length - 1);
21227
21245
  tagExp = tagName;
21228
21246
  } else {
21229
21247
  tagExp = tagExp.substr(0, tagExp.length - 1);
@@ -21544,7 +21562,7 @@ var __async = (__this, __arguments, generator) => {
21544
21562
  const OrderedObjParser = OrderedObjParser_1;
21545
21563
  const { prettify } = node2json;
21546
21564
  const validator$1 = validator$2;
21547
- let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21565
+ let XMLParser$1 = (_b2 = class {
21548
21566
  constructor(options) {
21549
21567
  this.externalEntities = {};
21550
21568
  this.options = buildOptions(options);
@@ -21594,7 +21612,7 @@ var __async = (__this, __arguments, generator) => {
21594
21612
  this.externalEntities[key] = value;
21595
21613
  }
21596
21614
  }
21597
- }, "XMLParser");
21615
+ }, __name(_b2, "XMLParser"), _b2);
21598
21616
  var XMLParser_1 = XMLParser$1;
21599
21617
  const EOL = "\n";
21600
21618
  function toXml(jArray, options) {
@@ -21799,13 +21817,18 @@ var __async = (__this, __arguments, generator) => {
21799
21817
  let attrStr = "";
21800
21818
  let val2 = "";
21801
21819
  for (let key in jObj) {
21802
- if (typeof jObj[key] === "undefined")
21803
- ;
21804
- else if (jObj[key] === null) {
21805
- if (key[0] === "?")
21820
+ if (typeof jObj[key] === "undefined") {
21821
+ if (this.isAttribute(key)) {
21822
+ val2 += "";
21823
+ }
21824
+ } else if (jObj[key] === null) {
21825
+ if (this.isAttribute(key)) {
21826
+ val2 += "";
21827
+ } else if (key[0] === "?") {
21806
21828
  val2 += this.indentate(level) + "<" + key + "?" + this.tagEndChar;
21807
- else
21829
+ } else {
21808
21830
  val2 += this.indentate(level) + "<" + key + "/" + this.tagEndChar;
21831
+ }
21809
21832
  } else if (jObj[key] instanceof Date) {
21810
21833
  val2 += this.buildTextValNode(jObj[key], key, "", level);
21811
21834
  } else if (typeof jObj[key] !== "object") {
@@ -21891,7 +21914,7 @@ var __async = (__this, __arguments, generator) => {
21891
21914
  piClosingChar = "?";
21892
21915
  tagEndExp = "";
21893
21916
  }
21894
- if (attrStr && val2.indexOf("<") === -1) {
21917
+ if ((attrStr || attrStr === "") && val2.indexOf("<") === -1) {
21895
21918
  return this.indentate(level) + "<" + key + attrStr + piClosingChar + ">" + val2 + tagEndExp;
21896
21919
  } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
21897
21920
  return this.indentate(level) + `<!--${val2}-->` + this.newLine;
@@ -21943,7 +21966,7 @@ var __async = (__this, __arguments, generator) => {
21943
21966
  }
21944
21967
  __name(indentate, "indentate");
21945
21968
  function isAttribute(name2) {
21946
- if (name2.startsWith(this.options.attributeNamePrefix)) {
21969
+ if (name2.startsWith(this.options.attributeNamePrefix) && name2 !== this.options.textNodeName) {
21947
21970
  return name2.substr(this.attrPrefixLen);
21948
21971
  } else {
21949
21972
  return false;
@@ -22071,19 +22094,6 @@ var __async = (__this, __arguments, generator) => {
22071
22094
  };
22072
22095
  }
22073
22096
  __name(parseSbolJson, "parseSbolJson");
22074
- function extractFileExtension(name2) {
22075
- if (typeof name2 === "string") {
22076
- let ext = "";
22077
- const match = name2.match(/\.(\w+)$/);
22078
- if (match && match[1]) {
22079
- ext = match[1];
22080
- }
22081
- return ext;
22082
- } else {
22083
- return "";
22084
- }
22085
- }
22086
- __name(extractFileExtension, "extractFileExtension");
22087
22097
  /*!
22088
22098
  * Copyright 2008 Fair Oaks Labs, Inc.
22089
22099
  * All rights reserved.
@@ -25886,7 +25896,8 @@ var __async = (__this, __arguments, generator) => {
25886
25896
  }, "fill");
25887
25897
  const errors = {};
25888
25898
  function E(sym, getMessage, Base) {
25889
- errors[sym] = /* @__PURE__ */ __name(class NodeError extends Base {
25899
+ var _a3;
25900
+ errors[sym] = (_a3 = class extends Base {
25890
25901
  constructor() {
25891
25902
  super();
25892
25903
  Object.defineProperty(this, "message", {
@@ -25912,7 +25923,7 @@ var __async = (__this, __arguments, generator) => {
25912
25923
  toString() {
25913
25924
  return `${this.name} [${sym}]: ${this.message}`;
25914
25925
  }
25915
- }, "NodeError");
25926
+ }, __name(_a3, "NodeError"), _a3);
25916
25927
  }
25917
25928
  __name(E, "E");
25918
25929
  E(
@@ -29395,7 +29406,7 @@ ${seq.sequence}
29395
29406
  Parent: "child_features",
29396
29407
  Derives_from: "derived_features"
29397
29408
  };
29398
- class FASTAParser {
29409
+ const _FASTAParser = class _FASTAParser {
29399
29410
  constructor(seqCallback) {
29400
29411
  this.seqCallback = seqCallback;
29401
29412
  this.currentSequence = void 0;
@@ -29418,9 +29429,10 @@ ${seq.sequence}
29418
29429
  finish() {
29419
29430
  this._flush();
29420
29431
  }
29421
- }
29422
- __name(FASTAParser, "FASTAParser");
29423
- class Parser {
29432
+ };
29433
+ __name(_FASTAParser, "FASTAParser");
29434
+ let FASTAParser = _FASTAParser;
29435
+ const _Parser = class _Parser {
29424
29436
  constructor(args) {
29425
29437
  this.fastaParser = void 0;
29426
29438
  this.eof = false;
@@ -29539,14 +29551,14 @@ ${seq.sequence}
29539
29551
  }
29540
29552
  // do the right thing with a newly-parsed feature line
29541
29553
  _bufferLine(line) {
29542
- var _a2, _b2, _c;
29554
+ var _a3, _b3, _c;
29543
29555
  const rawFeatureLine = parseFeature(line);
29544
29556
  const featureLine = __spreadProps(__spreadValues({}, rawFeatureLine), {
29545
29557
  child_features: [],
29546
29558
  derived_features: []
29547
29559
  });
29548
- const ids = ((_a2 = featureLine.attributes) === null || _a2 === void 0 ? void 0 : _a2.ID) || [];
29549
- const parents = ((_b2 = featureLine.attributes) === null || _b2 === void 0 ? void 0 : _b2.Parent) || [];
29560
+ const ids = ((_a3 = featureLine.attributes) === null || _a3 === void 0 ? void 0 : _a3.ID) || [];
29561
+ const parents = ((_b3 = featureLine.attributes) === null || _b3 === void 0 ? void 0 : _b3.Parent) || [];
29550
29562
  const derives = this.disableDerivesFromReferences ? [] : ((_c = featureLine.attributes) === null || _c === void 0 ? void 0 : _c.Derives_from) || [];
29551
29563
  if (!ids.length && !parents.length && !derives.length) {
29552
29564
  this._emitItem([featureLine]);
@@ -29644,8 +29656,9 @@ ${seq.sequence}
29644
29656
  }
29645
29657
  });
29646
29658
  }
29647
- }
29648
- __name(Parser, "Parser");
29659
+ };
29660
+ __name(_Parser, "Parser");
29661
+ let Parser = _Parser;
29649
29662
  function _callback(callback) {
29650
29663
  if (process && process.nextTick)
29651
29664
  process.nextTick(callback);
@@ -29672,7 +29685,7 @@ ${seq.sequence}
29672
29685
  return out;
29673
29686
  }
29674
29687
  __name(_processParseOptions, "_processParseOptions");
29675
- class GFFTransform extends streamBrowserify.Transform {
29688
+ const _GFFTransform = class _GFFTransform extends streamBrowserify.Transform {
29676
29689
  constructor(inputOptions = {}) {
29677
29690
  super({ objectMode: true });
29678
29691
  this.textBuffer = "";
@@ -29712,8 +29725,9 @@ ${seq.sequence}
29712
29725
  this.parser.finish();
29713
29726
  _callback(callback);
29714
29727
  }
29715
- }
29716
- __name(GFFTransform, "GFFTransform");
29728
+ };
29729
+ __name(_GFFTransform, "GFFTransform");
29730
+ let GFFTransform = _GFFTransform;
29717
29731
  function parseStream(options = {}) {
29718
29732
  return new GFFTransform(options);
29719
29733
  }
@@ -29757,7 +29771,7 @@ ${seq.sequence}
29757
29771
  return str;
29758
29772
  }
29759
29773
  __name(formatSync, "formatSync");
29760
- class FormattingTransform extends streamBrowserify.Transform {
29774
+ const _FormattingTransform = class _FormattingTransform extends streamBrowserify.Transform {
29761
29775
  constructor(options = {}) {
29762
29776
  super(Object.assign(options, { objectMode: true }));
29763
29777
  this.linesSinceLastSyncMark = 0;
@@ -29799,8 +29813,9 @@ ${seq.sequence}
29799
29813
  this.haveWeEmittedData = true;
29800
29814
  _callback(callback);
29801
29815
  }
29802
- }
29803
- __name(FormattingTransform, "FormattingTransform");
29816
+ };
29817
+ __name(_FormattingTransform, "FormattingTransform");
29818
+ let FormattingTransform = _FormattingTransform;
29804
29819
  function formatStream(options = {}) {
29805
29820
  return new FormattingTransform(options);
29806
29821
  }
@@ -29904,8 +29919,8 @@ ${seq.sequence}
29904
29919
  const toRet = lodashExports.filter(
29905
29920
  resultArray,
29906
29921
  (r) => {
29907
- var _a2, _b2;
29908
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
29922
+ var _a3, _b3;
29923
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
29909
29924
  }
29910
29925
  );
29911
29926
  if (toRet.length)
@@ -30015,8 +30030,8 @@ ${seq.sequence}
30015
30030
  const toRet = lodashExports.filter(
30016
30031
  resultArray,
30017
30032
  (r) => {
30018
- var _a2, _b2;
30019
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
30033
+ var _a3, _b3;
30034
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
30020
30035
  }
30021
30036
  );
30022
30037
  if (toRet.length)
@@ -30468,7 +30483,7 @@ ${seq.sequence}
30468
30483
  } else if (td) {
30469
30484
  return td.decode(dat);
30470
30485
  } else {
30471
- var _a2 = dutf8(dat), s = _a2.s, r = _a2.r;
30486
+ var _a3 = dutf8(dat), s = _a3.s, r = _a3.r;
30472
30487
  if (r.length)
30473
30488
  err(8);
30474
30489
  return s;
@@ -30480,7 +30495,7 @@ ${seq.sequence}
30480
30495
  }, "slzh");
30481
30496
  var zh = /* @__PURE__ */ __name(function(d, b, z) {
30482
30497
  var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
30483
- var _a2 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a2[0], su = _a2[1], off = _a2[2];
30498
+ var _a3 = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a3[0], su = _a3[1], off = _a3[2];
30484
30499
  return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
30485
30500
  }, "zh");
30486
30501
  var z64e = /* @__PURE__ */ __name(function(d, b) {
@@ -30510,7 +30525,7 @@ ${seq.sequence}
30510
30525
  }
30511
30526
  var fltr = opts && opts.filter;
30512
30527
  for (var i2 = 0; i2 < c; ++i2) {
30513
- var _a2 = zh(data, o, z), c_2 = _a2[0], sc = _a2[1], su = _a2[2], fn = _a2[3], no = _a2[4], off = _a2[5], b = slzh(data, off);
30528
+ var _a3 = zh(data, o, z), c_2 = _a3[0], sc = _a3[1], su = _a3[2], fn = _a3[3], no = _a3[4], off = _a3[5], b = slzh(data, off);
30514
30529
  o = no;
30515
30530
  if (!fltr || fltr({
30516
30531
  name: fn,
@@ -30569,7 +30584,7 @@ ${seq.sequence}
30569
30584
  );
30570
30585
  }
30571
30586
  }
30572
- if (/^(fasta|fas|fa|fna|ffn)$/.test(ext)) {
30587
+ if (/^(fasta|fas|fa|fna|ffn|faa)$/.test(ext)) {
30573
30588
  return fastaToJson(fileContentString, options);
30574
30589
  } else if (/^(gb|gbk)$/.test(ext)) {
30575
30590
  return genbankToJson(fileContentString, options);
@@ -32398,7 +32413,7 @@ ${seq.sequence}
32398
32413
  }
32399
32414
  __name(jsonToGenbank, "jsonToGenbank");
32400
32415
  function createGenbankLocus(serSeq, options) {
32401
- var _a2, _b2;
32416
+ var _a3, _b3;
32402
32417
  if (serSeq.sequence.symbols) {
32403
32418
  serSeq.sequence = serSeq.sequence.symbols.split("");
32404
32419
  }
@@ -32407,9 +32422,9 @@ ${seq.sequence}
32407
32422
  if (serSeq.isProtein) {
32408
32423
  dnaType = "";
32409
32424
  } else if (serSeq.type === "RNA") {
32410
- dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "RNA" : (_a2 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _a2 : "ss-RNA";
32425
+ dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "RNA" : (_a3 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _a3 : "ss-RNA";
32411
32426
  } else {
32412
- dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "DNA" : (_b2 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _b2 : "DNA";
32427
+ dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "DNA" : (_b3 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _b3 : "DNA";
32413
32428
  }
32414
32429
  const date = getCurrentDateString();
32415
32430
  let line = StringUtil.rpad("LOCUS", " ", 12);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@teselagen/bio-parsers",
3
- "version": "0.3.7",
3
+ "version": "0.3.8",
4
4
  "type": "commonjs",
5
5
  "dependencies": {
6
6
  "@teselagen/sequence-utils": "0.3.7",
package/src/anyToJson.js CHANGED
@@ -71,7 +71,7 @@ async function anyToJson(fileContentStringOrFileObj, options) {
71
71
  }
72
72
  // console.log(`fileContentString.includes("seq:seq"):`,fileContentString.includes("seq:seq"))
73
73
  // console.log(`fileContentString.includes("jbei")):`,fileContentString.includes("jbei"))
74
- if (/^(fasta|fas|fa|fna|ffn)$/.test(ext)) {
74
+ if (/^(fasta|fas|fa|fna|ffn|faa)$/.test(ext)) {
75
75
  // FASTA
76
76
  return fastaToJson(fileContentString, options);
77
77
  } else if (/^(gb|gbk)$/.test(ext)) {
@@ -1,4 +1,5 @@
1
1
  import createInitialSequence from "./utils/createInitialSequence";
2
+ import extractFileExtension from "./utils/extractFileExtension";
2
3
  import splitStringIntoLines from "./utils/splitStringIntoLines.js";
3
4
  import validateSequenceArray from "./utils/validateSequenceArray";
4
5
 
@@ -9,7 +10,12 @@ import validateSequenceArray from "./utils/validateSequenceArray";
9
10
  * @author Joshua P Nixon
10
11
  */
11
12
 
12
- function fastaToJson(fileString, options) {
13
+ function fastaToJson(fileString, options = {}) {
14
+ const ext = extractFileExtension(options.fileName);
15
+ if (/^(faa)$/.test(ext)) {
16
+ options.isProtein = true;
17
+ }
18
+
13
19
  let resultArray = [];
14
20
  let result = null;
15
21
  try {
@@ -28,8 +34,8 @@ function fastaToJson(fileString, options) {
28
34
  resultArray = [
29
35
  {
30
36
  success: false,
31
- messages: ["Import Error: Invalid File"],
32
- },
37
+ messages: ["Import Error: Invalid File"]
38
+ }
33
39
  ];
34
40
  }
35
41
  return validateSequenceArray(resultArray, options);
@@ -71,10 +77,9 @@ function fastaToJson(fileString, options) {
71
77
  }
72
78
 
73
79
  function parseTitle(line) {
74
-
75
- if (options && 'parseName' in options && !options.parseName){
76
- result.parsedSequence.name = line.slice(1)
77
- return
80
+ if (options && "parseName" in options && !options.parseName) {
81
+ result.parsedSequence.name = line.slice(1);
82
+ return;
78
83
  }
79
84
 
80
85
  const pipeIndex = line.indexOf("|");
@@ -114,7 +114,12 @@ export default function validateSequence(sequence, options = {}) {
114
114
  u === "U" ? "T" : "t"
115
115
  );
116
116
  }
117
- if (temp !== sequence.sequence && !sequence.isDNA && !sequence.isProtein && sequence.isRNA !== false) {
117
+ if (
118
+ temp !== sequence.sequence &&
119
+ !sequence.isDNA &&
120
+ !sequence.isProtein &&
121
+ sequence.isRNA !== false
122
+ ) {
118
123
  sequence.type = "RNA";
119
124
  sequence.sequence = temp;
120
125
  } else {