@teselagen/bio-parsers 0.3.7 → 0.3.9

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.mjs CHANGED
@@ -39,6 +39,7 @@ var __async = (__this, __arguments, generator) => {
39
39
  step((generator = generator.apply(__this, __arguments)).next());
40
40
  });
41
41
  };
42
+ var _a, _b;
42
43
  const untitledSequenceName = "Untitled Sequence";
43
44
  const gbDivisions = {
44
45
  // https://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html#GenBankDivisionB
@@ -94,6 +95,19 @@ function createInitialSequence(options) {
94
95
  };
95
96
  }
96
97
  __name(createInitialSequence, "createInitialSequence");
98
+ function extractFileExtension(name) {
99
+ if (typeof name === "string") {
100
+ let ext = "";
101
+ const match = name.match(/\.(\w+)$/);
102
+ if (match && match[1]) {
103
+ ext = match[1];
104
+ }
105
+ return ext;
106
+ } else {
107
+ return "";
108
+ }
109
+ }
110
+ __name(extractFileExtension, "extractFileExtension");
97
111
  function splitStringIntoLines(string) {
98
112
  let lines = [];
99
113
  if (string === "") {
@@ -119,10 +133,7 @@ function getAugmentedNamespace(n) {
119
133
  if (typeof f == "function") {
120
134
  var a = /* @__PURE__ */ __name(function a2() {
121
135
  if (this instanceof a2) {
122
- var args = [null];
123
- args.push.apply(args, arguments);
124
- var Ctor = Function.bind.apply(f, args);
125
- return new Ctor();
136
+ return Reflect.construct(f, arguments, this.constructor);
126
137
  }
127
138
  return f.apply(this, arguments);
128
139
  }, "a");
@@ -6270,8 +6281,8 @@ function getOverlapsOfPotentiallyCircularRanges(rangeA, rangeB, maxRangeLength,
6270
6281
  maxRangeLength
6271
6282
  );
6272
6283
  let overlaps = [];
6273
- normalizedRangeA.forEach(function(nonCircularRangeA, iA) {
6274
- normalizedRangeB.forEach(function(nonCircularRangeB, iB) {
6284
+ normalizedRangeA.forEach(function(nonCircularRangeA) {
6285
+ normalizedRangeB.forEach(function(nonCircularRangeB) {
6275
6286
  const overlap = getOverlapOfNonCircularRanges(
6276
6287
  nonCircularRangeA,
6277
6288
  nonCircularRangeB
@@ -6283,7 +6294,7 @@ function getOverlapsOfPotentiallyCircularRanges(rangeA, rangeB, maxRangeLength,
6283
6294
  });
6284
6295
  if (joinIfPossible && normalizedRangeA.length === 2 && normalizedRangeB.length === 2 && maxRangeLength) {
6285
6296
  const joinedOverlap = {};
6286
- overlaps = lodashExports.flatMap(overlaps, (o, i) => {
6297
+ overlaps = lodashExports.flatMap(overlaps, (o) => {
6287
6298
  if (o.start === 0) {
6288
6299
  joinedOverlap.end = o.end;
6289
6300
  return [];
@@ -6381,12 +6392,14 @@ function trimRangeByAnotherRange(rangeToBeTrimmed, trimmingRange, sequenceLength
6381
6392
  });
6382
6393
  splitRangesToBeTrimmed[index] = nonCircularRangeToBeTrimmed;
6383
6394
  });
6384
- const outputSplitRanges = splitRangesToBeTrimmed.filter(function(trimmedRange) {
6385
- if (trimmedRange) {
6386
- return true;
6395
+ const outputSplitRanges = splitRangesToBeTrimmed.filter(
6396
+ function(trimmedRange) {
6397
+ if (trimmedRange) {
6398
+ return true;
6399
+ }
6400
+ return false;
6387
6401
  }
6388
- return false;
6389
- });
6402
+ );
6390
6403
  let outputTrimmedRange;
6391
6404
  if (outputSplitRanges.length < 0)
6392
6405
  ;
@@ -6436,8 +6449,14 @@ function normalizePositionByRangeLength(pPosition, sequenceLength, isInBetweenPo
6436
6449
  __name(normalizePositionByRangeLength, "normalizePositionByRangeLength");
6437
6450
  function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
6438
6451
  return lodashExports.assign({}, rangeToBeAdjusted, {
6439
- start: normalizePositionByRangeLength(rangeToBeAdjusted.start + translateBy, rangeLength),
6440
- end: normalizePositionByRangeLength(rangeToBeAdjusted.end + translateBy, rangeLength)
6452
+ start: normalizePositionByRangeLength(
6453
+ rangeToBeAdjusted.start + translateBy,
6454
+ rangeLength
6455
+ ),
6456
+ end: normalizePositionByRangeLength(
6457
+ rangeToBeAdjusted.end + translateBy,
6458
+ rangeLength
6459
+ )
6441
6460
  });
6442
6461
  }
6443
6462
  __name(translateRange, "translateRange");
@@ -11378,13 +11397,13 @@ function coerceLocation({
11378
11397
  messages.push(
11379
11398
  "Invalid annotation start: " + location.start + " detected for " + location.name + " and set to size: " + size
11380
11399
  );
11381
- location.start = size - (isProtein ? 3 : 1);
11400
+ location.start = Math.max(0, size - (isProtein ? 3 : 1));
11382
11401
  }
11383
11402
  if (location.end < 0 || !(location.end <= size - 1) || location.end > size - 1) {
11384
11403
  messages.push(
11385
11404
  "Invalid annotation end: " + location.end + " detected for " + location.name + " and set to seq size: " + size
11386
11405
  );
11387
- location.end = size - 1;
11406
+ location.end = Math.max(0, size - 1);
11388
11407
  }
11389
11408
  if (location.start > location.end && circular === false) {
11390
11409
  messages.push(
@@ -11397,9 +11416,9 @@ __name(coerceLocation, "coerceLocation");
11397
11416
  function filterAminoAcidSequenceString(sequenceString, options) {
11398
11417
  options = options || {};
11399
11418
  if (options.includeStopCodon) {
11400
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
11419
+ return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
11401
11420
  }
11402
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
11421
+ return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
11403
11422
  }
11404
11423
  __name(filterAminoAcidSequenceString, "filterAminoAcidSequenceString");
11405
11424
  function getDegenerateDnaStringFromAAString(aaString) {
@@ -11597,7 +11616,7 @@ const calcTmMethods = {
11597
11616
  calculateTemperature: function(sequence, type, A, R, C, Na) {
11598
11617
  if (typeof type === "undefined") {
11599
11618
  type = this.TABLE_BRESLAUER;
11600
- } else if (type != this.TABLE_BRESLAUER && (type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO)) {
11619
+ } else if (type != this.TABLE_BRESLAUER && type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO) {
11601
11620
  throw new Error("Invalid table type!");
11602
11621
  }
11603
11622
  if (!A) {
@@ -19557,7 +19576,11 @@ function validateSequenceArray(parsingResultArray, options) {
19557
19576
  return parsingResultArray;
19558
19577
  }
19559
19578
  __name(validateSequenceArray, "validateSequenceArray");
19560
- function fastaToJson(fileString, options) {
19579
+ function fastaToJson(fileString, options = {}) {
19580
+ const ext = extractFileExtension(options.fileName);
19581
+ if (/^(faa)$/.test(ext)) {
19582
+ options.isProtein = true;
19583
+ }
19561
19584
  let resultArray = [];
19562
19585
  let result = null;
19563
19586
  try {
@@ -19744,18 +19767,20 @@ function genbankToJson(string, options = {}) {
19744
19767
  const isKeyRunon = isKeywordRunon(line);
19745
19768
  const isSubKey = isSubKeyword(line);
19746
19769
  const isKey = isKeyword(line);
19747
- if (key === "LOCUS") {
19748
- LINETYPE = key;
19749
- } else if (key === "REFERENCE") {
19750
- LINETYPE = key;
19751
- } else if (key === "FEATURES") {
19752
- LINETYPE = key;
19753
- } else if (key === "ORIGIN") {
19754
- LINETYPE = key;
19755
- } else if (key === "//") {
19756
- LINETYPE = key;
19757
- } else if (isKey === true) {
19758
- LINETYPE = key;
19770
+ if (!isKeyRunon) {
19771
+ if (key === "LOCUS") {
19772
+ LINETYPE = key;
19773
+ } else if (key === "REFERENCE") {
19774
+ LINETYPE = key;
19775
+ } else if (key === "FEATURES") {
19776
+ LINETYPE = key;
19777
+ } else if (key === "ORIGIN") {
19778
+ LINETYPE = key;
19779
+ } else if (key === "//") {
19780
+ LINETYPE = key;
19781
+ } else if (isKey === true) {
19782
+ LINETYPE = key;
19783
+ }
19759
19784
  }
19760
19785
  if (line.trim() === "" || key === ";") {
19761
19786
  return false;
@@ -19924,7 +19949,6 @@ function genbankToJson(string, options = {}) {
19924
19949
  __name(parseOrigin, "parseOrigin");
19925
19950
  function parseLocus(line) {
19926
19951
  result = createInitialSequence(options);
19927
- let locusName;
19928
19952
  let circular;
19929
19953
  let gbDivision;
19930
19954
  let date;
@@ -19935,7 +19959,7 @@ function genbankToJson(string, options = {}) {
19935
19959
  );
19936
19960
  addMessage("Import Warning: Locus line contains no values: " + line);
19937
19961
  }
19938
- locusName = lineArr[1];
19962
+ const locusName = lineArr[1];
19939
19963
  for (let i = 1; i < lineArr.length; i++) {
19940
19964
  if (lineArr[i].match(/circular/gi)) {
19941
19965
  circular = true;
@@ -20088,10 +20112,10 @@ function genbankToJson(string, options = {}) {
20088
20112
  }
20089
20113
  __name(parseFeatureLocation, "parseFeatureLocation");
20090
20114
  function parseFeatureNote(line) {
20091
- let newLine, lineArr;
20115
+ let newLine;
20092
20116
  newLine = line.trimLeft();
20093
20117
  newLine = newLine.replace(/^\/|"$/g, "");
20094
- lineArr = newLine.split(/="|=/);
20118
+ const lineArr = newLine.split(/="|=/);
20095
20119
  let val2 = lineArr.slice(1).join("=");
20096
20120
  if (val2) {
20097
20121
  val2 = val2.replace(/\\/g, " ");
@@ -20219,7 +20243,7 @@ function getLengthOfWhiteSpaceBeforeStartOfLetters(string) {
20219
20243
  }
20220
20244
  }
20221
20245
  __name(getLengthOfWhiteSpaceBeforeStartOfLetters, "getLengthOfWhiteSpaceBeforeStartOfLetters");
20222
- class Match {
20246
+ const _Match = class _Match {
20223
20247
  constructor(props) {
20224
20248
  Object.assign(this, props);
20225
20249
  this.value = this.obj[this.prop];
@@ -20236,8 +20260,9 @@ class Match {
20236
20260
  log() {
20237
20261
  console.info(this.toString());
20238
20262
  }
20239
- }
20240
- __name(Match, "Match");
20263
+ };
20264
+ __name(_Match, "Match");
20265
+ let Match = _Match;
20241
20266
  const GLOBAL = typeof window == "object" ? window : global;
20242
20267
  function searchWholeObjByName(what, where) {
20243
20268
  const searchBy = /* @__PURE__ */ __name((what2, where2, prop) => what2 == prop, "searchBy");
@@ -20283,13 +20308,13 @@ function searchWholeObjByName(what, where) {
20283
20308
  }
20284
20309
  __name(searchWholeObjByName, "searchWholeObjByName");
20285
20310
  function searchWholeObjByNameSimple(what, where) {
20286
- var _a2, _b2, _c;
20287
- return (_c = (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value) == null ? void 0 : _c[0];
20311
+ var _a3, _b3, _c;
20312
+ return (_c = (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value) == null ? void 0 : _c[0];
20288
20313
  }
20289
20314
  __name(searchWholeObjByNameSimple, "searchWholeObjByNameSimple");
20290
20315
  function searchWholeObjByNameSimpleArray(what, where) {
20291
- var _a2, _b2;
20292
- return (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value;
20316
+ var _a3, _b3;
20317
+ return (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value;
20293
20318
  }
20294
20319
  __name(searchWholeObjByNameSimpleArray, "searchWholeObjByNameSimpleArray");
20295
20320
  var validator$2 = {};
@@ -20717,7 +20742,7 @@ const buildOptions$1 = /* @__PURE__ */ __name(function(options) {
20717
20742
  }, "buildOptions$1");
20718
20743
  OptionsBuilder.buildOptions = buildOptions$1;
20719
20744
  OptionsBuilder.defaultOptions = defaultOptions$1;
20720
- class XmlNode {
20745
+ const _XmlNode = class _XmlNode {
20721
20746
  constructor(tagname) {
20722
20747
  this.tagname = tagname;
20723
20748
  this.child = [];
@@ -20737,8 +20762,9 @@ class XmlNode {
20737
20762
  this.child.push({ [node.tagname]: node.child });
20738
20763
  }
20739
20764
  }
20740
- }
20741
- __name(XmlNode, "XmlNode");
20765
+ };
20766
+ __name(_XmlNode, "XmlNode");
20767
+ let XmlNode = _XmlNode;
20742
20768
  var xmlNode$1 = XmlNode;
20743
20769
  const util$2 = util$4;
20744
20770
  function readDocType$1(xmlData, i) {
@@ -20949,7 +20975,7 @@ const xmlNode = xmlNode$1;
20949
20975
  const readDocType = DocTypeReader;
20950
20976
  const toNumber = strnum;
20951
20977
  "<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g, util$1.nameRegexp);
20952
- let OrderedObjParser$1 = /* @__PURE__ */ __name(class OrderedObjParser {
20978
+ let OrderedObjParser$1 = (_a = class {
20953
20979
  constructor(options) {
20954
20980
  this.options = options;
20955
20981
  this.currentNode = null;
@@ -20988,7 +21014,7 @@ let OrderedObjParser$1 = /* @__PURE__ */ __name(class OrderedObjParser {
20988
21014
  this.saveTextToParentTag = saveTextToParentTag;
20989
21015
  this.addChild = addChild;
20990
21016
  }
20991
- }, "OrderedObjParser");
21017
+ }, __name(_a, "OrderedObjParser"), _a);
20992
21018
  function addExternalEntities(externalEntities) {
20993
21019
  const entKeys = Object.keys(externalEntities);
20994
21020
  for (let i = 0; i < entKeys.length; i++) {
@@ -21220,6 +21246,7 @@ const parseXml = /* @__PURE__ */ __name(function(xmlData) {
21220
21246
  if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
21221
21247
  if (tagName[tagName.length - 1] === "/") {
21222
21248
  tagName = tagName.substr(0, tagName.length - 1);
21249
+ jPath = jPath.substr(0, jPath.length - 1);
21223
21250
  tagExp = tagName;
21224
21251
  } else {
21225
21252
  tagExp = tagExp.substr(0, tagExp.length - 1);
@@ -21537,10 +21564,10 @@ function isLeafTag(obj, options) {
21537
21564
  __name(isLeafTag, "isLeafTag");
21538
21565
  node2json.prettify = prettify$1;
21539
21566
  const { buildOptions } = OptionsBuilder;
21540
- const OrderedObjParser2 = OrderedObjParser_1;
21567
+ const OrderedObjParser = OrderedObjParser_1;
21541
21568
  const { prettify } = node2json;
21542
21569
  const validator$1 = validator$2;
21543
- let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21570
+ let XMLParser$1 = (_b = class {
21544
21571
  constructor(options) {
21545
21572
  this.externalEntities = {};
21546
21573
  this.options = buildOptions(options);
@@ -21566,7 +21593,7 @@ let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21566
21593
  throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);
21567
21594
  }
21568
21595
  }
21569
- const orderedObjParser = new OrderedObjParser2(this.options);
21596
+ const orderedObjParser = new OrderedObjParser(this.options);
21570
21597
  orderedObjParser.addExternalEntities(this.externalEntities);
21571
21598
  const orderedResult = orderedObjParser.parseXml(xmlData);
21572
21599
  if (this.options.preserveOrder || orderedResult === void 0)
@@ -21590,7 +21617,7 @@ let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21590
21617
  this.externalEntities[key] = value;
21591
21618
  }
21592
21619
  }
21593
- }, "XMLParser");
21620
+ }, __name(_b, "XMLParser"), _b);
21594
21621
  var XMLParser_1 = XMLParser$1;
21595
21622
  const EOL = "\n";
21596
21623
  function toXml(jArray, options) {
@@ -21795,13 +21822,18 @@ Builder.prototype.j2x = function(jObj, level) {
21795
21822
  let attrStr = "";
21796
21823
  let val2 = "";
21797
21824
  for (let key in jObj) {
21798
- if (typeof jObj[key] === "undefined")
21799
- ;
21800
- else if (jObj[key] === null) {
21801
- if (key[0] === "?")
21825
+ if (typeof jObj[key] === "undefined") {
21826
+ if (this.isAttribute(key)) {
21827
+ val2 += "";
21828
+ }
21829
+ } else if (jObj[key] === null) {
21830
+ if (this.isAttribute(key)) {
21831
+ val2 += "";
21832
+ } else if (key[0] === "?") {
21802
21833
  val2 += this.indentate(level) + "<" + key + "?" + this.tagEndChar;
21803
- else
21834
+ } else {
21804
21835
  val2 += this.indentate(level) + "<" + key + "/" + this.tagEndChar;
21836
+ }
21805
21837
  } else if (jObj[key] instanceof Date) {
21806
21838
  val2 += this.buildTextValNode(jObj[key], key, "", level);
21807
21839
  } else if (typeof jObj[key] !== "object") {
@@ -21887,7 +21919,7 @@ Builder.prototype.buildObjectNode = function(val2, key, attrStr, level) {
21887
21919
  piClosingChar = "?";
21888
21920
  tagEndExp = "";
21889
21921
  }
21890
- if (attrStr && val2.indexOf("<") === -1) {
21922
+ if ((attrStr || attrStr === "") && val2.indexOf("<") === -1) {
21891
21923
  return this.indentate(level) + "<" + key + attrStr + piClosingChar + ">" + val2 + tagEndExp;
21892
21924
  } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
21893
21925
  return this.indentate(level) + `<!--${val2}-->` + this.newLine;
@@ -21939,7 +21971,7 @@ function indentate(level) {
21939
21971
  }
21940
21972
  __name(indentate, "indentate");
21941
21973
  function isAttribute(name) {
21942
- if (name.startsWith(this.options.attributeNamePrefix)) {
21974
+ if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {
21943
21975
  return name.substr(this.attrPrefixLen);
21944
21976
  } else {
21945
21977
  return false;
@@ -21948,10 +21980,10 @@ function isAttribute(name) {
21948
21980
  __name(isAttribute, "isAttribute");
21949
21981
  var json2xml = Builder;
21950
21982
  const validator = validator$2;
21951
- const XMLParser2 = XMLParser_1;
21983
+ const XMLParser = XMLParser_1;
21952
21984
  const XMLBuilder = json2xml;
21953
21985
  var fxp = {
21954
- XMLParser: XMLParser2,
21986
+ XMLParser,
21955
21987
  XMLValidator: validator,
21956
21988
  XMLBuilder
21957
21989
  };
@@ -22067,19 +22099,6 @@ function parseSbolJson(sbolJson, options) {
22067
22099
  };
22068
22100
  }
22069
22101
  __name(parseSbolJson, "parseSbolJson");
22070
- function extractFileExtension(name) {
22071
- if (typeof name === "string") {
22072
- let ext = "";
22073
- const match = name.match(/\.(\w+)$/);
22074
- if (match && match[1]) {
22075
- ext = match[1];
22076
- }
22077
- return ext;
22078
- } else {
22079
- return "";
22080
- }
22081
- }
22082
- __name(extractFileExtension, "extractFileExtension");
22083
22102
  /*!
22084
22103
  * Copyright 2008 Fair Oaks Labs, Inc.
22085
22104
  * All rights reserved.
@@ -25882,7 +25901,8 @@ var buffer$1 = {};
25882
25901
  }, "fill");
25883
25902
  const errors = {};
25884
25903
  function E(sym, getMessage, Base) {
25885
- errors[sym] = /* @__PURE__ */ __name(class NodeError extends Base {
25904
+ var _a3;
25905
+ errors[sym] = (_a3 = class extends Base {
25886
25906
  constructor() {
25887
25907
  super();
25888
25908
  Object.defineProperty(this, "message", {
@@ -25908,7 +25928,7 @@ var buffer$1 = {};
25908
25928
  toString() {
25909
25929
  return `${this.name} [${sym}]: ${this.message}`;
25910
25930
  }
25911
- }, "NodeError");
25931
+ }, __name(_a3, "NodeError"), _a3);
25912
25932
  }
25913
25933
  __name(E, "E");
25914
25934
  E(
@@ -29391,7 +29411,7 @@ const containerAttributes = {
29391
29411
  Parent: "child_features",
29392
29412
  Derives_from: "derived_features"
29393
29413
  };
29394
- class FASTAParser {
29414
+ const _FASTAParser = class _FASTAParser {
29395
29415
  constructor(seqCallback) {
29396
29416
  this.seqCallback = seqCallback;
29397
29417
  this.currentSequence = void 0;
@@ -29414,9 +29434,10 @@ class FASTAParser {
29414
29434
  finish() {
29415
29435
  this._flush();
29416
29436
  }
29417
- }
29418
- __name(FASTAParser, "FASTAParser");
29419
- class Parser {
29437
+ };
29438
+ __name(_FASTAParser, "FASTAParser");
29439
+ let FASTAParser = _FASTAParser;
29440
+ const _Parser = class _Parser {
29420
29441
  constructor(args) {
29421
29442
  this.fastaParser = void 0;
29422
29443
  this.eof = false;
@@ -29535,14 +29556,14 @@ class Parser {
29535
29556
  }
29536
29557
  // do the right thing with a newly-parsed feature line
29537
29558
  _bufferLine(line) {
29538
- var _a2, _b2, _c;
29559
+ var _a3, _b3, _c;
29539
29560
  const rawFeatureLine = parseFeature(line);
29540
29561
  const featureLine = __spreadProps(__spreadValues({}, rawFeatureLine), {
29541
29562
  child_features: [],
29542
29563
  derived_features: []
29543
29564
  });
29544
- const ids = ((_a2 = featureLine.attributes) === null || _a2 === void 0 ? void 0 : _a2.ID) || [];
29545
- const parents = ((_b2 = featureLine.attributes) === null || _b2 === void 0 ? void 0 : _b2.Parent) || [];
29565
+ const ids = ((_a3 = featureLine.attributes) === null || _a3 === void 0 ? void 0 : _a3.ID) || [];
29566
+ const parents = ((_b3 = featureLine.attributes) === null || _b3 === void 0 ? void 0 : _b3.Parent) || [];
29546
29567
  const derives = this.disableDerivesFromReferences ? [] : ((_c = featureLine.attributes) === null || _c === void 0 ? void 0 : _c.Derives_from) || [];
29547
29568
  if (!ids.length && !parents.length && !derives.length) {
29548
29569
  this._emitItem([featureLine]);
@@ -29640,8 +29661,9 @@ class Parser {
29640
29661
  }
29641
29662
  });
29642
29663
  }
29643
- }
29644
- __name(Parser, "Parser");
29664
+ };
29665
+ __name(_Parser, "Parser");
29666
+ let Parser = _Parser;
29645
29667
  function _callback(callback) {
29646
29668
  if (process && process.nextTick)
29647
29669
  process.nextTick(callback);
@@ -29668,7 +29690,7 @@ function _processParseOptions(options) {
29668
29690
  return out;
29669
29691
  }
29670
29692
  __name(_processParseOptions, "_processParseOptions");
29671
- class GFFTransform extends streamBrowserify.Transform {
29693
+ const _GFFTransform = class _GFFTransform extends streamBrowserify.Transform {
29672
29694
  constructor(inputOptions = {}) {
29673
29695
  super({ objectMode: true });
29674
29696
  this.textBuffer = "";
@@ -29708,8 +29730,9 @@ class GFFTransform extends streamBrowserify.Transform {
29708
29730
  this.parser.finish();
29709
29731
  _callback(callback);
29710
29732
  }
29711
- }
29712
- __name(GFFTransform, "GFFTransform");
29733
+ };
29734
+ __name(_GFFTransform, "GFFTransform");
29735
+ let GFFTransform = _GFFTransform;
29713
29736
  function parseStream(options = {}) {
29714
29737
  return new GFFTransform(options);
29715
29738
  }
@@ -29753,7 +29776,7 @@ function formatSync(items) {
29753
29776
  return str;
29754
29777
  }
29755
29778
  __name(formatSync, "formatSync");
29756
- class FormattingTransform extends streamBrowserify.Transform {
29779
+ const _FormattingTransform = class _FormattingTransform extends streamBrowserify.Transform {
29757
29780
  constructor(options = {}) {
29758
29781
  super(Object.assign(options, { objectMode: true }));
29759
29782
  this.linesSinceLastSyncMark = 0;
@@ -29795,8 +29818,9 @@ class FormattingTransform extends streamBrowserify.Transform {
29795
29818
  this.haveWeEmittedData = true;
29796
29819
  _callback(callback);
29797
29820
  }
29798
- }
29799
- __name(FormattingTransform, "FormattingTransform");
29821
+ };
29822
+ __name(_FormattingTransform, "FormattingTransform");
29823
+ let FormattingTransform = _FormattingTransform;
29800
29824
  function formatStream(options = {}) {
29801
29825
  return new FormattingTransform(options);
29802
29826
  }
@@ -29897,13 +29921,10 @@ function geneiousXmlToJson(string, options) {
29897
29921
  });
29898
29922
  }
29899
29923
  });
29900
- const toRet = lodashExports.filter(
29901
- resultArray,
29902
- (r) => {
29903
- var _a2, _b2;
29904
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
29905
- }
29906
- );
29924
+ const toRet = lodashExports.filter(resultArray, (r) => {
29925
+ var _a3, _b3;
29926
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
29927
+ });
29907
29928
  if (toRet.length)
29908
29929
  return toRet;
29909
29930
  return onFileParsed(resultArray);
@@ -30008,13 +30029,10 @@ function jbeiXmlToJson(string, options) {
30008
30029
  messages: ["Error while parsing JBEI format"]
30009
30030
  });
30010
30031
  }
30011
- const toRet = lodashExports.filter(
30012
- resultArray,
30013
- (r) => {
30014
- var _a2, _b2;
30015
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
30016
- }
30017
- );
30032
+ const toRet = lodashExports.filter(resultArray, (r) => {
30033
+ var _a3, _b3;
30034
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
30035
+ });
30018
30036
  if (toRet.length)
30019
30037
  return toRet;
30020
30038
  return onFileParsed(resultArray);
@@ -30159,9 +30177,9 @@ var freb = /* @__PURE__ */ __name(function(eb, start) {
30159
30177
  }
30160
30178
  return { b, r };
30161
30179
  }, "freb");
30162
- var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
30180
+ var _a2 = freb(fleb, 2), fl = _a2.b, revfl = _a2.r;
30163
30181
  fl[28] = 258, revfl[258] = 28;
30164
- var _b = freb(fdeb, 0), fd = _b.b;
30182
+ var _b2 = freb(fdeb, 0), fd = _b2.b;
30165
30183
  var rev = new u16(32768);
30166
30184
  for (var i = 0; i < 32768; ++i) {
30167
30185
  var x = (i & 43690) >> 1 | (i & 21845) << 1;
@@ -30464,7 +30482,7 @@ function strFromU8(dat, latin1) {
30464
30482
  } else if (td) {
30465
30483
  return td.decode(dat);
30466
30484
  } else {
30467
- var _a2 = dutf8(dat), s = _a2.s, r = _a2.r;
30485
+ var _a3 = dutf8(dat), s = _a3.s, r = _a3.r;
30468
30486
  if (r.length)
30469
30487
  err(8);
30470
30488
  return s;
@@ -30476,7 +30494,7 @@ var slzh = /* @__PURE__ */ __name(function(d, b) {
30476
30494
  }, "slzh");
30477
30495
  var zh = /* @__PURE__ */ __name(function(d, b, z) {
30478
30496
  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);
30479
- 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];
30497
+ 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];
30480
30498
  return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
30481
30499
  }, "zh");
30482
30500
  var z64e = /* @__PURE__ */ __name(function(d, b) {
@@ -30506,7 +30524,7 @@ function unzipSync(data, opts) {
30506
30524
  }
30507
30525
  var fltr = opts && opts.filter;
30508
30526
  for (var i = 0; i < c; ++i) {
30509
- 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);
30527
+ 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);
30510
30528
  o = no;
30511
30529
  if (!fltr || fltr({
30512
30530
  name: fn,
@@ -30565,7 +30583,7 @@ function anyToJson(fileContentStringOrFileObj, options) {
30565
30583
  );
30566
30584
  }
30567
30585
  }
30568
- if (/^(fasta|fas|fa|fna|ffn)$/.test(ext)) {
30586
+ if (/^(fasta|fas|fa|fna|ffn|faa)$/.test(ext)) {
30569
30587
  return fastaToJson(fileContentString, options);
30570
30588
  } else if (/^(gb|gbk)$/.test(ext)) {
30571
30589
  return genbankToJson(fileContentString, options);
@@ -32394,18 +32412,17 @@ function jsonToGenbank(_serSeq, options) {
32394
32412
  }
32395
32413
  __name(jsonToGenbank, "jsonToGenbank");
32396
32414
  function createGenbankLocus(serSeq, options) {
32397
- var _a2, _b2;
32415
+ var _a3, _b3;
32398
32416
  if (serSeq.sequence.symbols) {
32399
32417
  serSeq.sequence = serSeq.sequence.symbols.split("");
32400
32418
  }
32401
- let tmp;
32402
32419
  let dnaType;
32403
32420
  if (serSeq.isProtein) {
32404
32421
  dnaType = "";
32405
32422
  } else if (serSeq.type === "RNA") {
32406
- dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "RNA" : (_a2 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _a2 : "ss-RNA";
32423
+ dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "RNA" : (_a3 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _a3 : "ss-RNA";
32407
32424
  } else {
32408
- dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "DNA" : (_b2 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _b2 : "DNA";
32425
+ dnaType = (serSeq == null ? void 0 : serSeq.doubleStranded) ? "DNA" : (_b3 = serSeq == null ? void 0 : serSeq.sequenceTypeFromLocus) != null ? _b3 : "DNA";
32409
32426
  }
32410
32427
  const date = getCurrentDateString();
32411
32428
  let line = StringUtil.rpad("LOCUS", " ", 12);
@@ -32415,7 +32432,7 @@ function createGenbankLocus(serSeq, options) {
32415
32432
  line += " ";
32416
32433
  line += StringUtil.lpad(String(serSeq.sequence.length), " ", 11);
32417
32434
  line += serSeq.isProtein ? " aa " : " bp ";
32418
- tmp = "";
32435
+ const tmp = "";
32419
32436
  line += StringUtil.lpad(tmp, " ", 3);
32420
32437
  line += StringUtil.rpad(dnaType, " ", 6);
32421
32438
  line += " ";