@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.js CHANGED
@@ -40,6 +40,7 @@ var __async = (__this, __arguments, generator) => {
40
40
  step((generator = generator.apply(__this, __arguments)).next());
41
41
  });
42
42
  };
43
+ var _a, _b;
43
44
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
44
45
  const untitledSequenceName = "Untitled Sequence";
45
46
  const gbDivisions = {
@@ -96,6 +97,19 @@ function createInitialSequence(options) {
96
97
  };
97
98
  }
98
99
  __name(createInitialSequence, "createInitialSequence");
100
+ function extractFileExtension(name) {
101
+ if (typeof name === "string") {
102
+ let ext = "";
103
+ const match = name.match(/\.(\w+)$/);
104
+ if (match && match[1]) {
105
+ ext = match[1];
106
+ }
107
+ return ext;
108
+ } else {
109
+ return "";
110
+ }
111
+ }
112
+ __name(extractFileExtension, "extractFileExtension");
99
113
  function splitStringIntoLines(string) {
100
114
  let lines = [];
101
115
  if (string === "") {
@@ -121,10 +135,7 @@ function getAugmentedNamespace(n) {
121
135
  if (typeof f == "function") {
122
136
  var a = /* @__PURE__ */ __name(function a2() {
123
137
  if (this instanceof a2) {
124
- var args = [null];
125
- args.push.apply(args, arguments);
126
- var Ctor = Function.bind.apply(f, args);
127
- return new Ctor();
138
+ return Reflect.construct(f, arguments, this.constructor);
128
139
  }
129
140
  return f.apply(this, arguments);
130
141
  }, "a");
@@ -6272,8 +6283,8 @@ function getOverlapsOfPotentiallyCircularRanges(rangeA, rangeB, maxRangeLength,
6272
6283
  maxRangeLength
6273
6284
  );
6274
6285
  let overlaps = [];
6275
- normalizedRangeA.forEach(function(nonCircularRangeA, iA) {
6276
- normalizedRangeB.forEach(function(nonCircularRangeB, iB) {
6286
+ normalizedRangeA.forEach(function(nonCircularRangeA) {
6287
+ normalizedRangeB.forEach(function(nonCircularRangeB) {
6277
6288
  const overlap = getOverlapOfNonCircularRanges(
6278
6289
  nonCircularRangeA,
6279
6290
  nonCircularRangeB
@@ -6285,7 +6296,7 @@ function getOverlapsOfPotentiallyCircularRanges(rangeA, rangeB, maxRangeLength,
6285
6296
  });
6286
6297
  if (joinIfPossible && normalizedRangeA.length === 2 && normalizedRangeB.length === 2 && maxRangeLength) {
6287
6298
  const joinedOverlap = {};
6288
- overlaps = lodashExports.flatMap(overlaps, (o, i) => {
6299
+ overlaps = lodashExports.flatMap(overlaps, (o) => {
6289
6300
  if (o.start === 0) {
6290
6301
  joinedOverlap.end = o.end;
6291
6302
  return [];
@@ -6383,12 +6394,14 @@ function trimRangeByAnotherRange(rangeToBeTrimmed, trimmingRange, sequenceLength
6383
6394
  });
6384
6395
  splitRangesToBeTrimmed[index] = nonCircularRangeToBeTrimmed;
6385
6396
  });
6386
- const outputSplitRanges = splitRangesToBeTrimmed.filter(function(trimmedRange) {
6387
- if (trimmedRange) {
6388
- return true;
6397
+ const outputSplitRanges = splitRangesToBeTrimmed.filter(
6398
+ function(trimmedRange) {
6399
+ if (trimmedRange) {
6400
+ return true;
6401
+ }
6402
+ return false;
6389
6403
  }
6390
- return false;
6391
- });
6404
+ );
6392
6405
  let outputTrimmedRange;
6393
6406
  if (outputSplitRanges.length < 0)
6394
6407
  ;
@@ -6438,8 +6451,14 @@ function normalizePositionByRangeLength(pPosition, sequenceLength, isInBetweenPo
6438
6451
  __name(normalizePositionByRangeLength, "normalizePositionByRangeLength");
6439
6452
  function translateRange(rangeToBeAdjusted, translateBy, rangeLength) {
6440
6453
  return lodashExports.assign({}, rangeToBeAdjusted, {
6441
- start: normalizePositionByRangeLength(rangeToBeAdjusted.start + translateBy, rangeLength),
6442
- end: normalizePositionByRangeLength(rangeToBeAdjusted.end + translateBy, rangeLength)
6454
+ start: normalizePositionByRangeLength(
6455
+ rangeToBeAdjusted.start + translateBy,
6456
+ rangeLength
6457
+ ),
6458
+ end: normalizePositionByRangeLength(
6459
+ rangeToBeAdjusted.end + translateBy,
6460
+ rangeLength
6461
+ )
6443
6462
  });
6444
6463
  }
6445
6464
  __name(translateRange, "translateRange");
@@ -11380,13 +11399,13 @@ function coerceLocation({
11380
11399
  messages.push(
11381
11400
  "Invalid annotation start: " + location.start + " detected for " + location.name + " and set to size: " + size
11382
11401
  );
11383
- location.start = size - (isProtein ? 3 : 1);
11402
+ location.start = Math.max(0, size - (isProtein ? 3 : 1));
11384
11403
  }
11385
11404
  if (location.end < 0 || !(location.end <= size - 1) || location.end > size - 1) {
11386
11405
  messages.push(
11387
11406
  "Invalid annotation end: " + location.end + " detected for " + location.name + " and set to seq size: " + size
11388
11407
  );
11389
- location.end = size - 1;
11408
+ location.end = Math.max(0, size - 1);
11390
11409
  }
11391
11410
  if (location.start > location.end && circular === false) {
11392
11411
  messages.push(
@@ -11399,9 +11418,9 @@ __name(coerceLocation, "coerceLocation");
11399
11418
  function filterAminoAcidSequenceString(sequenceString, options) {
11400
11419
  options = options || {};
11401
11420
  if (options.includeStopCodon) {
11402
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
11421
+ return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu.*]/gi, "");
11403
11422
  }
11404
- return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
11423
+ return sequenceString == null ? void 0 : sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, "");
11405
11424
  }
11406
11425
  __name(filterAminoAcidSequenceString, "filterAminoAcidSequenceString");
11407
11426
  function getDegenerateDnaStringFromAAString(aaString) {
@@ -11599,7 +11618,7 @@ const calcTmMethods = {
11599
11618
  calculateTemperature: function(sequence, type, A, R, C, Na) {
11600
11619
  if (typeof type === "undefined") {
11601
11620
  type = this.TABLE_BRESLAUER;
11602
- } else if (type != this.TABLE_BRESLAUER && (type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO)) {
11621
+ } else if (type != this.TABLE_BRESLAUER && type != this.TABLE_UNIFIED && type != this.TABLE_SUGIMOTO) {
11603
11622
  throw new Error("Invalid table type!");
11604
11623
  }
11605
11624
  if (!A) {
@@ -19559,7 +19578,11 @@ function validateSequenceArray(parsingResultArray, options) {
19559
19578
  return parsingResultArray;
19560
19579
  }
19561
19580
  __name(validateSequenceArray, "validateSequenceArray");
19562
- function fastaToJson(fileString, options) {
19581
+ function fastaToJson(fileString, options = {}) {
19582
+ const ext = extractFileExtension(options.fileName);
19583
+ if (/^(faa)$/.test(ext)) {
19584
+ options.isProtein = true;
19585
+ }
19563
19586
  let resultArray = [];
19564
19587
  let result = null;
19565
19588
  try {
@@ -19746,18 +19769,20 @@ function genbankToJson(string, options = {}) {
19746
19769
  const isKeyRunon = isKeywordRunon(line);
19747
19770
  const isSubKey = isSubKeyword(line);
19748
19771
  const isKey = isKeyword(line);
19749
- if (key === "LOCUS") {
19750
- LINETYPE = key;
19751
- } else if (key === "REFERENCE") {
19752
- LINETYPE = key;
19753
- } else if (key === "FEATURES") {
19754
- LINETYPE = key;
19755
- } else if (key === "ORIGIN") {
19756
- LINETYPE = key;
19757
- } else if (key === "//") {
19758
- LINETYPE = key;
19759
- } else if (isKey === true) {
19760
- LINETYPE = key;
19772
+ if (!isKeyRunon) {
19773
+ if (key === "LOCUS") {
19774
+ LINETYPE = key;
19775
+ } else if (key === "REFERENCE") {
19776
+ LINETYPE = key;
19777
+ } else if (key === "FEATURES") {
19778
+ LINETYPE = key;
19779
+ } else if (key === "ORIGIN") {
19780
+ LINETYPE = key;
19781
+ } else if (key === "//") {
19782
+ LINETYPE = key;
19783
+ } else if (isKey === true) {
19784
+ LINETYPE = key;
19785
+ }
19761
19786
  }
19762
19787
  if (line.trim() === "" || key === ";") {
19763
19788
  return false;
@@ -19926,7 +19951,6 @@ function genbankToJson(string, options = {}) {
19926
19951
  __name(parseOrigin, "parseOrigin");
19927
19952
  function parseLocus(line) {
19928
19953
  result = createInitialSequence(options);
19929
- let locusName;
19930
19954
  let circular;
19931
19955
  let gbDivision;
19932
19956
  let date;
@@ -19937,7 +19961,7 @@ function genbankToJson(string, options = {}) {
19937
19961
  );
19938
19962
  addMessage("Import Warning: Locus line contains no values: " + line);
19939
19963
  }
19940
- locusName = lineArr[1];
19964
+ const locusName = lineArr[1];
19941
19965
  for (let i = 1; i < lineArr.length; i++) {
19942
19966
  if (lineArr[i].match(/circular/gi)) {
19943
19967
  circular = true;
@@ -20090,10 +20114,10 @@ function genbankToJson(string, options = {}) {
20090
20114
  }
20091
20115
  __name(parseFeatureLocation, "parseFeatureLocation");
20092
20116
  function parseFeatureNote(line) {
20093
- let newLine, lineArr;
20117
+ let newLine;
20094
20118
  newLine = line.trimLeft();
20095
20119
  newLine = newLine.replace(/^\/|"$/g, "");
20096
- lineArr = newLine.split(/="|=/);
20120
+ const lineArr = newLine.split(/="|=/);
20097
20121
  let val2 = lineArr.slice(1).join("=");
20098
20122
  if (val2) {
20099
20123
  val2 = val2.replace(/\\/g, " ");
@@ -20221,7 +20245,7 @@ function getLengthOfWhiteSpaceBeforeStartOfLetters(string) {
20221
20245
  }
20222
20246
  }
20223
20247
  __name(getLengthOfWhiteSpaceBeforeStartOfLetters, "getLengthOfWhiteSpaceBeforeStartOfLetters");
20224
- class Match {
20248
+ const _Match = class _Match {
20225
20249
  constructor(props) {
20226
20250
  Object.assign(this, props);
20227
20251
  this.value = this.obj[this.prop];
@@ -20238,8 +20262,9 @@ class Match {
20238
20262
  log() {
20239
20263
  console.info(this.toString());
20240
20264
  }
20241
- }
20242
- __name(Match, "Match");
20265
+ };
20266
+ __name(_Match, "Match");
20267
+ let Match = _Match;
20243
20268
  const GLOBAL = typeof window == "object" ? window : global;
20244
20269
  function searchWholeObjByName(what, where) {
20245
20270
  const searchBy = /* @__PURE__ */ __name((what2, where2, prop) => what2 == prop, "searchBy");
@@ -20285,13 +20310,13 @@ function searchWholeObjByName(what, where) {
20285
20310
  }
20286
20311
  __name(searchWholeObjByName, "searchWholeObjByName");
20287
20312
  function searchWholeObjByNameSimple(what, where) {
20288
- var _a2, _b2, _c;
20289
- return (_c = (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value) == null ? void 0 : _c[0];
20313
+ var _a3, _b3, _c;
20314
+ return (_c = (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value) == null ? void 0 : _c[0];
20290
20315
  }
20291
20316
  __name(searchWholeObjByNameSimple, "searchWholeObjByNameSimple");
20292
20317
  function searchWholeObjByNameSimpleArray(what, where) {
20293
- var _a2, _b2;
20294
- return (_b2 = (_a2 = searchWholeObjByName(what, where)) == null ? void 0 : _a2[0]) == null ? void 0 : _b2.value;
20318
+ var _a3, _b3;
20319
+ return (_b3 = (_a3 = searchWholeObjByName(what, where)) == null ? void 0 : _a3[0]) == null ? void 0 : _b3.value;
20295
20320
  }
20296
20321
  __name(searchWholeObjByNameSimpleArray, "searchWholeObjByNameSimpleArray");
20297
20322
  var validator$2 = {};
@@ -20719,7 +20744,7 @@ const buildOptions$1 = /* @__PURE__ */ __name(function(options) {
20719
20744
  }, "buildOptions$1");
20720
20745
  OptionsBuilder.buildOptions = buildOptions$1;
20721
20746
  OptionsBuilder.defaultOptions = defaultOptions$1;
20722
- class XmlNode {
20747
+ const _XmlNode = class _XmlNode {
20723
20748
  constructor(tagname) {
20724
20749
  this.tagname = tagname;
20725
20750
  this.child = [];
@@ -20739,8 +20764,9 @@ class XmlNode {
20739
20764
  this.child.push({ [node.tagname]: node.child });
20740
20765
  }
20741
20766
  }
20742
- }
20743
- __name(XmlNode, "XmlNode");
20767
+ };
20768
+ __name(_XmlNode, "XmlNode");
20769
+ let XmlNode = _XmlNode;
20744
20770
  var xmlNode$1 = XmlNode;
20745
20771
  const util$2 = util$4;
20746
20772
  function readDocType$1(xmlData, i) {
@@ -20951,7 +20977,7 @@ const xmlNode = xmlNode$1;
20951
20977
  const readDocType = DocTypeReader;
20952
20978
  const toNumber = strnum;
20953
20979
  "<((!\\[CDATA\\[([\\s\\S]*?)(]]>))|((NAME:)?(NAME))([^>]*)>|((\\/)(NAME)\\s*>))([^<]*)".replace(/NAME/g, util$1.nameRegexp);
20954
- let OrderedObjParser$1 = /* @__PURE__ */ __name(class OrderedObjParser {
20980
+ let OrderedObjParser$1 = (_a = class {
20955
20981
  constructor(options) {
20956
20982
  this.options = options;
20957
20983
  this.currentNode = null;
@@ -20990,7 +21016,7 @@ let OrderedObjParser$1 = /* @__PURE__ */ __name(class OrderedObjParser {
20990
21016
  this.saveTextToParentTag = saveTextToParentTag;
20991
21017
  this.addChild = addChild;
20992
21018
  }
20993
- }, "OrderedObjParser");
21019
+ }, __name(_a, "OrderedObjParser"), _a);
20994
21020
  function addExternalEntities(externalEntities) {
20995
21021
  const entKeys = Object.keys(externalEntities);
20996
21022
  for (let i = 0; i < entKeys.length; i++) {
@@ -21222,6 +21248,7 @@ const parseXml = /* @__PURE__ */ __name(function(xmlData) {
21222
21248
  if (tagExp.length > 0 && tagExp.lastIndexOf("/") === tagExp.length - 1) {
21223
21249
  if (tagName[tagName.length - 1] === "/") {
21224
21250
  tagName = tagName.substr(0, tagName.length - 1);
21251
+ jPath = jPath.substr(0, jPath.length - 1);
21225
21252
  tagExp = tagName;
21226
21253
  } else {
21227
21254
  tagExp = tagExp.substr(0, tagExp.length - 1);
@@ -21539,10 +21566,10 @@ function isLeafTag(obj, options) {
21539
21566
  __name(isLeafTag, "isLeafTag");
21540
21567
  node2json.prettify = prettify$1;
21541
21568
  const { buildOptions } = OptionsBuilder;
21542
- const OrderedObjParser2 = OrderedObjParser_1;
21569
+ const OrderedObjParser = OrderedObjParser_1;
21543
21570
  const { prettify } = node2json;
21544
21571
  const validator$1 = validator$2;
21545
- let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21572
+ let XMLParser$1 = (_b = class {
21546
21573
  constructor(options) {
21547
21574
  this.externalEntities = {};
21548
21575
  this.options = buildOptions(options);
@@ -21568,7 +21595,7 @@ let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21568
21595
  throw Error(`${result.err.msg}:${result.err.line}:${result.err.col}`);
21569
21596
  }
21570
21597
  }
21571
- const orderedObjParser = new OrderedObjParser2(this.options);
21598
+ const orderedObjParser = new OrderedObjParser(this.options);
21572
21599
  orderedObjParser.addExternalEntities(this.externalEntities);
21573
21600
  const orderedResult = orderedObjParser.parseXml(xmlData);
21574
21601
  if (this.options.preserveOrder || orderedResult === void 0)
@@ -21592,7 +21619,7 @@ let XMLParser$1 = /* @__PURE__ */ __name(class XMLParser {
21592
21619
  this.externalEntities[key] = value;
21593
21620
  }
21594
21621
  }
21595
- }, "XMLParser");
21622
+ }, __name(_b, "XMLParser"), _b);
21596
21623
  var XMLParser_1 = XMLParser$1;
21597
21624
  const EOL = "\n";
21598
21625
  function toXml(jArray, options) {
@@ -21797,13 +21824,18 @@ Builder.prototype.j2x = function(jObj, level) {
21797
21824
  let attrStr = "";
21798
21825
  let val2 = "";
21799
21826
  for (let key in jObj) {
21800
- if (typeof jObj[key] === "undefined")
21801
- ;
21802
- else if (jObj[key] === null) {
21803
- if (key[0] === "?")
21827
+ if (typeof jObj[key] === "undefined") {
21828
+ if (this.isAttribute(key)) {
21829
+ val2 += "";
21830
+ }
21831
+ } else if (jObj[key] === null) {
21832
+ if (this.isAttribute(key)) {
21833
+ val2 += "";
21834
+ } else if (key[0] === "?") {
21804
21835
  val2 += this.indentate(level) + "<" + key + "?" + this.tagEndChar;
21805
- else
21836
+ } else {
21806
21837
  val2 += this.indentate(level) + "<" + key + "/" + this.tagEndChar;
21838
+ }
21807
21839
  } else if (jObj[key] instanceof Date) {
21808
21840
  val2 += this.buildTextValNode(jObj[key], key, "", level);
21809
21841
  } else if (typeof jObj[key] !== "object") {
@@ -21889,7 +21921,7 @@ Builder.prototype.buildObjectNode = function(val2, key, attrStr, level) {
21889
21921
  piClosingChar = "?";
21890
21922
  tagEndExp = "";
21891
21923
  }
21892
- if (attrStr && val2.indexOf("<") === -1) {
21924
+ if ((attrStr || attrStr === "") && val2.indexOf("<") === -1) {
21893
21925
  return this.indentate(level) + "<" + key + attrStr + piClosingChar + ">" + val2 + tagEndExp;
21894
21926
  } else if (this.options.commentPropName !== false && key === this.options.commentPropName && piClosingChar.length === 0) {
21895
21927
  return this.indentate(level) + `<!--${val2}-->` + this.newLine;
@@ -21941,7 +21973,7 @@ function indentate(level) {
21941
21973
  }
21942
21974
  __name(indentate, "indentate");
21943
21975
  function isAttribute(name) {
21944
- if (name.startsWith(this.options.attributeNamePrefix)) {
21976
+ if (name.startsWith(this.options.attributeNamePrefix) && name !== this.options.textNodeName) {
21945
21977
  return name.substr(this.attrPrefixLen);
21946
21978
  } else {
21947
21979
  return false;
@@ -21950,10 +21982,10 @@ function isAttribute(name) {
21950
21982
  __name(isAttribute, "isAttribute");
21951
21983
  var json2xml = Builder;
21952
21984
  const validator = validator$2;
21953
- const XMLParser2 = XMLParser_1;
21985
+ const XMLParser = XMLParser_1;
21954
21986
  const XMLBuilder = json2xml;
21955
21987
  var fxp = {
21956
- XMLParser: XMLParser2,
21988
+ XMLParser,
21957
21989
  XMLValidator: validator,
21958
21990
  XMLBuilder
21959
21991
  };
@@ -22069,19 +22101,6 @@ function parseSbolJson(sbolJson, options) {
22069
22101
  };
22070
22102
  }
22071
22103
  __name(parseSbolJson, "parseSbolJson");
22072
- function extractFileExtension(name) {
22073
- if (typeof name === "string") {
22074
- let ext = "";
22075
- const match = name.match(/\.(\w+)$/);
22076
- if (match && match[1]) {
22077
- ext = match[1];
22078
- }
22079
- return ext;
22080
- } else {
22081
- return "";
22082
- }
22083
- }
22084
- __name(extractFileExtension, "extractFileExtension");
22085
22104
  /*!
22086
22105
  * Copyright 2008 Fair Oaks Labs, Inc.
22087
22106
  * All rights reserved.
@@ -25884,7 +25903,8 @@ var buffer$1 = {};
25884
25903
  }, "fill");
25885
25904
  const errors = {};
25886
25905
  function E(sym, getMessage, Base) {
25887
- errors[sym] = /* @__PURE__ */ __name(class NodeError extends Base {
25906
+ var _a3;
25907
+ errors[sym] = (_a3 = class extends Base {
25888
25908
  constructor() {
25889
25909
  super();
25890
25910
  Object.defineProperty(this, "message", {
@@ -25910,7 +25930,7 @@ var buffer$1 = {};
25910
25930
  toString() {
25911
25931
  return `${this.name} [${sym}]: ${this.message}`;
25912
25932
  }
25913
- }, "NodeError");
25933
+ }, __name(_a3, "NodeError"), _a3);
25914
25934
  }
25915
25935
  __name(E, "E");
25916
25936
  E(
@@ -29393,7 +29413,7 @@ const containerAttributes = {
29393
29413
  Parent: "child_features",
29394
29414
  Derives_from: "derived_features"
29395
29415
  };
29396
- class FASTAParser {
29416
+ const _FASTAParser = class _FASTAParser {
29397
29417
  constructor(seqCallback) {
29398
29418
  this.seqCallback = seqCallback;
29399
29419
  this.currentSequence = void 0;
@@ -29416,9 +29436,10 @@ class FASTAParser {
29416
29436
  finish() {
29417
29437
  this._flush();
29418
29438
  }
29419
- }
29420
- __name(FASTAParser, "FASTAParser");
29421
- class Parser {
29439
+ };
29440
+ __name(_FASTAParser, "FASTAParser");
29441
+ let FASTAParser = _FASTAParser;
29442
+ const _Parser = class _Parser {
29422
29443
  constructor(args) {
29423
29444
  this.fastaParser = void 0;
29424
29445
  this.eof = false;
@@ -29537,14 +29558,14 @@ class Parser {
29537
29558
  }
29538
29559
  // do the right thing with a newly-parsed feature line
29539
29560
  _bufferLine(line) {
29540
- var _a2, _b2, _c;
29561
+ var _a3, _b3, _c;
29541
29562
  const rawFeatureLine = parseFeature(line);
29542
29563
  const featureLine = __spreadProps(__spreadValues({}, rawFeatureLine), {
29543
29564
  child_features: [],
29544
29565
  derived_features: []
29545
29566
  });
29546
- const ids = ((_a2 = featureLine.attributes) === null || _a2 === void 0 ? void 0 : _a2.ID) || [];
29547
- const parents = ((_b2 = featureLine.attributes) === null || _b2 === void 0 ? void 0 : _b2.Parent) || [];
29567
+ const ids = ((_a3 = featureLine.attributes) === null || _a3 === void 0 ? void 0 : _a3.ID) || [];
29568
+ const parents = ((_b3 = featureLine.attributes) === null || _b3 === void 0 ? void 0 : _b3.Parent) || [];
29548
29569
  const derives = this.disableDerivesFromReferences ? [] : ((_c = featureLine.attributes) === null || _c === void 0 ? void 0 : _c.Derives_from) || [];
29549
29570
  if (!ids.length && !parents.length && !derives.length) {
29550
29571
  this._emitItem([featureLine]);
@@ -29642,8 +29663,9 @@ class Parser {
29642
29663
  }
29643
29664
  });
29644
29665
  }
29645
- }
29646
- __name(Parser, "Parser");
29666
+ };
29667
+ __name(_Parser, "Parser");
29668
+ let Parser = _Parser;
29647
29669
  function _callback(callback) {
29648
29670
  if (process && process.nextTick)
29649
29671
  process.nextTick(callback);
@@ -29670,7 +29692,7 @@ function _processParseOptions(options) {
29670
29692
  return out;
29671
29693
  }
29672
29694
  __name(_processParseOptions, "_processParseOptions");
29673
- class GFFTransform extends streamBrowserify.Transform {
29695
+ const _GFFTransform = class _GFFTransform extends streamBrowserify.Transform {
29674
29696
  constructor(inputOptions = {}) {
29675
29697
  super({ objectMode: true });
29676
29698
  this.textBuffer = "";
@@ -29710,8 +29732,9 @@ class GFFTransform extends streamBrowserify.Transform {
29710
29732
  this.parser.finish();
29711
29733
  _callback(callback);
29712
29734
  }
29713
- }
29714
- __name(GFFTransform, "GFFTransform");
29735
+ };
29736
+ __name(_GFFTransform, "GFFTransform");
29737
+ let GFFTransform = _GFFTransform;
29715
29738
  function parseStream(options = {}) {
29716
29739
  return new GFFTransform(options);
29717
29740
  }
@@ -29755,7 +29778,7 @@ function formatSync(items) {
29755
29778
  return str;
29756
29779
  }
29757
29780
  __name(formatSync, "formatSync");
29758
- class FormattingTransform extends streamBrowserify.Transform {
29781
+ const _FormattingTransform = class _FormattingTransform extends streamBrowserify.Transform {
29759
29782
  constructor(options = {}) {
29760
29783
  super(Object.assign(options, { objectMode: true }));
29761
29784
  this.linesSinceLastSyncMark = 0;
@@ -29797,8 +29820,9 @@ class FormattingTransform extends streamBrowserify.Transform {
29797
29820
  this.haveWeEmittedData = true;
29798
29821
  _callback(callback);
29799
29822
  }
29800
- }
29801
- __name(FormattingTransform, "FormattingTransform");
29823
+ };
29824
+ __name(_FormattingTransform, "FormattingTransform");
29825
+ let FormattingTransform = _FormattingTransform;
29802
29826
  function formatStream(options = {}) {
29803
29827
  return new FormattingTransform(options);
29804
29828
  }
@@ -29899,13 +29923,10 @@ function geneiousXmlToJson(string, options) {
29899
29923
  });
29900
29924
  }
29901
29925
  });
29902
- const toRet = lodashExports.filter(
29903
- resultArray,
29904
- (r) => {
29905
- var _a2, _b2;
29906
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
29907
- }
29908
- );
29926
+ const toRet = lodashExports.filter(resultArray, (r) => {
29927
+ var _a3, _b3;
29928
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
29929
+ });
29909
29930
  if (toRet.length)
29910
29931
  return toRet;
29911
29932
  return onFileParsed(resultArray);
@@ -30010,13 +30031,10 @@ function jbeiXmlToJson(string, options) {
30010
30031
  messages: ["Error while parsing JBEI format"]
30011
30032
  });
30012
30033
  }
30013
- const toRet = lodashExports.filter(
30014
- resultArray,
30015
- (r) => {
30016
- var _a2, _b2;
30017
- return (_b2 = (_a2 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a2.sequence) == null ? void 0 : _b2.length;
30018
- }
30019
- );
30034
+ const toRet = lodashExports.filter(resultArray, (r) => {
30035
+ var _a3, _b3;
30036
+ return (_b3 = (_a3 = r == null ? void 0 : r.parsedSequence) == null ? void 0 : _a3.sequence) == null ? void 0 : _b3.length;
30037
+ });
30020
30038
  if (toRet.length)
30021
30039
  return toRet;
30022
30040
  return onFileParsed(resultArray);
@@ -30161,9 +30179,9 @@ var freb = /* @__PURE__ */ __name(function(eb, start) {
30161
30179
  }
30162
30180
  return { b, r };
30163
30181
  }, "freb");
30164
- var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
30182
+ var _a2 = freb(fleb, 2), fl = _a2.b, revfl = _a2.r;
30165
30183
  fl[28] = 258, revfl[258] = 28;
30166
- var _b = freb(fdeb, 0), fd = _b.b;
30184
+ var _b2 = freb(fdeb, 0), fd = _b2.b;
30167
30185
  var rev = new u16(32768);
30168
30186
  for (var i = 0; i < 32768; ++i) {
30169
30187
  var x = (i & 43690) >> 1 | (i & 21845) << 1;
@@ -30466,7 +30484,7 @@ function strFromU8(dat, latin1) {
30466
30484
  } else if (td) {
30467
30485
  return td.decode(dat);
30468
30486
  } else {
30469
- var _a2 = dutf8(dat), s = _a2.s, r = _a2.r;
30487
+ var _a3 = dutf8(dat), s = _a3.s, r = _a3.r;
30470
30488
  if (r.length)
30471
30489
  err(8);
30472
30490
  return s;
@@ -30478,7 +30496,7 @@ var slzh = /* @__PURE__ */ __name(function(d, b) {
30478
30496
  }, "slzh");
30479
30497
  var zh = /* @__PURE__ */ __name(function(d, b, z) {
30480
30498
  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);
30481
- 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];
30499
+ 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];
30482
30500
  return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
30483
30501
  }, "zh");
30484
30502
  var z64e = /* @__PURE__ */ __name(function(d, b) {
@@ -30508,7 +30526,7 @@ function unzipSync(data, opts) {
30508
30526
  }
30509
30527
  var fltr = opts && opts.filter;
30510
30528
  for (var i = 0; i < c; ++i) {
30511
- 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);
30529
+ 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);
30512
30530
  o = no;
30513
30531
  if (!fltr || fltr({
30514
30532
  name: fn,
@@ -30567,7 +30585,7 @@ function anyToJson(fileContentStringOrFileObj, options) {
30567
30585
  );
30568
30586
  }
30569
30587
  }
30570
- if (/^(fasta|fas|fa|fna|ffn)$/.test(ext)) {
30588
+ if (/^(fasta|fas|fa|fna|ffn|faa)$/.test(ext)) {
30571
30589
  return fastaToJson(fileContentString, options);
30572
30590
  } else if (/^(gb|gbk)$/.test(ext)) {
30573
30591
  return genbankToJson(fileContentString, options);
@@ -32396,18 +32414,17 @@ function jsonToGenbank(_serSeq, options) {
32396
32414
  }
32397
32415
  __name(jsonToGenbank, "jsonToGenbank");
32398
32416
  function createGenbankLocus(serSeq, options) {
32399
- var _a2, _b2;
32417
+ var _a3, _b3;
32400
32418
  if (serSeq.sequence.symbols) {
32401
32419
  serSeq.sequence = serSeq.sequence.symbols.split("");
32402
32420
  }
32403
- let tmp;
32404
32421
  let dnaType;
32405
32422
  if (serSeq.isProtein) {
32406
32423
  dnaType = "";
32407
32424
  } else if (serSeq.type === "RNA") {
32408
- 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";
32409
32426
  } else {
32410
- 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";
32411
32428
  }
32412
32429
  const date = getCurrentDateString();
32413
32430
  let line = StringUtil.rpad("LOCUS", " ", 12);
@@ -32417,7 +32434,7 @@ function createGenbankLocus(serSeq, options) {
32417
32434
  line += " ";
32418
32435
  line += StringUtil.lpad(String(serSeq.sequence.length), " ", 11);
32419
32436
  line += serSeq.isProtein ? " aa " : " bp ";
32420
- tmp = "";
32437
+ const tmp = "";
32421
32438
  line += StringUtil.lpad(tmp, " ", 3);
32422
32439
  line += StringUtil.rpad(dnaType, " ", 6);
32423
32440
  line += " ";