{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 813c9b14652724232b54","webpack:///./src/index.js","webpack:///./src/utils/flattenSequenceArray.js","webpack:///./src/utils/convertOldSequenceDataToNewDataType.js","webpack:///./src/utils/validateSequenceArray.js","webpack:///./src/utils/validateSequence.js","webpack:///./node_modules/validate.io-nonnegative-integer-array/lib/index.js","webpack:///./node_modules/validate.io-array/lib/index.js","webpack:///./node_modules/validate.io-nonnegative-integer/lib/index.js","webpack:///./node_modules/validate.io-integer/lib/index.js","webpack:///./node_modules/validate.io-number/lib/index.js","webpack:///./src/utils/NameUtils.js","webpack:///./src/seq/FeatureTypes.js","webpack:///./src/seq/filterAminoAcidSequenceString.js","webpack:///./src/seq/filterSequenceString.js","webpack:///./src/seq/guessIfSequenceIsDnaAndNotProtein.js","webpack:///./src/utils/splitStringIntoLines.js","webpack:///./src/utils/createInitialSequence.js","webpack:///./src/utils/constants.js"],"names":["flattenSequenceArray","require","validateSequenceArray","splitStringIntoLines","createInitialSequence","genbankToJson","string","options","inclusive1BasedStart","inclusive1BasedEnd","resultsArray","result","currentFeatureNote","genbankAnnotationKey","LOCUS_TAG","DEFINITION_TAG","ACCESSION_TAG","VERSION_TAG","KEYWORDS_TAG","SOURCE_TAG","ORGANISM_TAG","REFERENCE_TAG","AUTHORS_TAG","CONSORTIUM_TAG","TITLE_TAG","JOURNAL_TAG","PUBMED_TAG","REMARK_TAG","COMMENT_TAG","FEATURES_TAG","BASE_COUNT_TAG","ORIGIN_TAG","END_SEQUENCE_TAG","lines","LINETYPE","featureLocationIndentation","addMessage","hasFoundLocus","some","line","key","getLineKey","val","getLineVal","isKeyRunon","isKeywordRunon","isSubKey","isSubKeyword","isKey","isKeyword","trim","parseLocus","parseFeatures","parseOrigin","endSeq","replace","parsedSequence","comments","indexOf","teselagen_unique_id","library","description","push","extractExtraLine","e","console","error","success","messages","length","postProcessCurSeq","getCurrentFeature","features","msg","i","postProcessGenbankFeature","new_line","sequence","locusName","linear","date","lineArr","split","warn","match","j","name","circular","extraLines","lastLineWasFeaturesTag","lastLineWasLocation","strand","getLengthOfWhiteSpaceBeforeStartOfLetters","isFeatureLineRunon","parseFeatureLocation","isNote","parseFeatureNote","newFeature","feat","type","locations","notes","qual","charAt","locStr","locArr","start","parseInt","end","isNaN","location","newLine","currentNotes","arr","substr","runon","label","gene","ApEinfo_label","organism","locus_tag","note","oldName","String","indentationOfLine","trimmed","exec","module","exports","convertOldSequenceDataToNewDataType","parsingResultArray","Array","isArray","forEach","parsingResult","convertToNewDataType","oldTeselagenJson","feature","clonedFeature","JSON","parse","stringify","join","validateSequence","res","concat","validatedAndCleanedSequence","areNonNegativeIntegers","NameUtils","FeatureTypes","filterAminoAcidSequenceString","filterSequenceString","guessIfSequenceIsDnaAndNotProtein","isProtein","guessIfProtein","guessIfProteinOptions","reformatSeqName","additionalValidChars","acceptParts","response","Error","reformatName","validChars","newSeq","size","circularityExplicitlyDefined","filter","Math","max","invalidFeatureType","featureType","toLowerCase","pragma","parts","isNonNegativeInteger","isNonNegativeIntegerArray","value","len","Object","prototype","toString","call","isInteger","isNumber","valueOf","pName","sequenceString","includeStopCodon","arguments","undefined","RegExp","seq","_options$threshold","threshold","_options$dnaLetters","dnaLetters","dnaLetterMap","reduce","acc","letter","toUpperCase","count","index","constants","fileName","untitledSequenceName"],"mappings":"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","file":"genbank-parser.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"genbankParser\"] = factory();\n\telse\n\t\troot[\"genbankParser\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 813c9b14652724232b54","'use strict';\n\nvar flattenSequenceArray = require('./utils/flattenSequenceArray');\nvar validateSequenceArray = require('./utils/validateSequenceArray');\nvar splitStringIntoLines = require('./utils/splitStringIntoLines.js');\nvar createInitialSequence = require('./utils/createInitialSequence');\n\nfunction genbankToJson(string, options) {\n  options = options || {};\n  var inclusive1BasedStart = options.inclusive1BasedStart;\n  var inclusive1BasedEnd = options.inclusive1BasedEnd;\n\n  var resultsArray = [];\n  var result;\n  var currentFeatureNote;\n\n  var genbankAnnotationKey = {\n    LOCUS_TAG: 'LOCUS',\n    DEFINITION_TAG: 'DEFINITION',\n    ACCESSION_TAG: 'ACCESSION',\n    VERSION_TAG: 'VERSION',\n    KEYWORDS_TAG: 'KEYWORDS',\n    //SEGMENT_TAG:\"SEGMENT\"\n    SOURCE_TAG: 'SOURCE',\n    ORGANISM_TAG: 'ORGANISM',\n    REFERENCE_TAG: 'REFERENCE',\n    AUTHORS_TAG: 'AUTHORS',\n    CONSORTIUM_TAG: 'CONSRTM',\n    TITLE_TAG: 'TITLE',\n    JOURNAL_TAG: 'JOURNAL',\n    PUBMED_TAG: 'PUBMED',\n    REMARK_TAG: 'REMARK',\n    COMMENT_TAG: 'COMMENT',\n    FEATURES_TAG: 'FEATURES',\n    BASE_COUNT_TAG: 'BASE COUNT',\n    //CONTIG_TAG: \"CONTIG\"\n    ORIGIN_TAG: 'ORIGIN',\n    END_SEQUENCE_TAG: '//'\n  };\n\n  try {\n    var lines = splitStringIntoLines(string);\n    var LINETYPE = false;\n    var featureLocationIndentation;\n\n    if (lines === null) {\n      addMessage('Import Error: Sequence file is empty');\n    }\n    var hasFoundLocus = false;\n\n    lines.some(function(line) {\n      if (line === null) {\n        return true; //break the some loop\n      }\n      var key = getLineKey(line);\n      var val = getLineVal(line);\n      var isKeyRunon = isKeywordRunon(line);\n      var isSubKey = isSubKeyword(line);\n      var isKey = isKeyword(line);\n\n      //only set a new LINETYPE in the case that we've encountered a key that warrants it.\n      if (key === 'LOCUS') {\n        LINETYPE = key;\n      } else if (key === 'REFERENCE') {\n        LINETYPE = key;\n      } else if (key === 'FEATURES') {\n        LINETYPE = key;\n      } else if (key === 'ORIGIN') {\n        LINETYPE = key;\n      } else if (key === '//') {\n        LINETYPE = key;\n      } else if (isKey === true) {\n        LINETYPE = key;\n      }\n\n      // IGNORE LINES: DO NOT EVEN PROCESS\n      if (line.trim() === '' || key === ';') {\n        //tnr: don't add the following message because it is not particularly informative\n        // addMessage(\n        //     \"Warning: Empty line, or ';' detected. Ignoring line: \" +\n        //     line);\n        return false; // go to next line\n      }\n\n      if (!hasFoundLocus && LINETYPE !== genbankAnnotationKey.LOCUS_TAG) {\n        // 'Genbank files must start with a LOCUS tag so this must not be a genbank'\n        return true; //break the some loop\n      }\n\n      switch (LINETYPE) {\n        case genbankAnnotationKey.LOCUS_TAG:\n          hasFoundLocus = true;\n          parseLocus(line, key, val);\n          break;\n        case genbankAnnotationKey.FEATURES_TAG:\n          //If no location is specified, exclude feature and return messages\n          if (val === '') {\n            addMessage(\n              \"Warning: The feature '\" +\n                key +\n                \"'' has no location specified. This line has been ignored: line\" +\n                line\n            );\n            break;\n          }\n          parseFeatures(line, key, val);\n          break;\n        case genbankAnnotationKey.ORIGIN_TAG:\n          parseOrigin(line, key);\n          break;\n        case genbankAnnotationKey.END_SEQUENCE_TAG:\n          endSeq();\n          break;\n        case 'COMMENT':\n          line = line.replace(/COMMENT/, '');\n          line = line.trim();\n          if (result.parsedSequence) {\n            if (!result.parsedSequence.comments) {\n              result.parsedSequence.comments = [];\n            }\n            if (line.indexOf('teselagen_unique_id:') > -1) {\n              //capture the special comment\n              result.parsedSequence.teselagen_unique_id = line\n                .replace(/ /g, '')\n                .replace('teselagen_unique_id:', '');\n            } else if (line.indexOf('library:') > -1) {\n              result.parsedSequence.library = line\n                .replace(/ /g, '')\n                .replace('library:', '');\n            } else if (line.indexOf('description:') > -1) {\n              result.parsedSequence.description = line\n                .trim()\n                .replace('description: ', '');\n            } else {\n              result.parsedSequence.comments.push(line);\n            }\n          } else {\n            throw 'no sequence yet created upon which to extract an extra line!';\n          }\n          break;\n        default:\n          // FOLLOWING FOR KEYWORDS NOT PREVIOUSLY DEFINED IN CASES\n          extractExtraLine(line);\n          if (key === 'BASE') {\n            // do nothing;              // BLANK LINES || line with ;;;;;;;;;  || \"BASE COUNT\"\n            // console.warn(\"Parsing GenBank File: This line with BaseCount has been ignored: \" + line);\n            addMessage(\n              'Warning: This BaseCount line has been ignored: ' + line\n            );\n            break;\n          } else if (isKey) {\n            // REGULAR KEYWORDS (NOT LOCUS/FEATURES/ORIGIN) eg VERSION, ACCESSION, SOURCE, REFERENCE\n            // lastObj = parseKeyword(line, gb);\n          } else if (isSubKey) {\n            // REGULAR SUBKEYWORD, NOT FEATURE eg AUTHOR, ORGANISM\n            // tmp = gb.getLastKeyword();\n            // lastObj = parseSubKeyword(tmp, line, gb);\n          } else if (isKeyRunon) {\n            // RUNON LINES FOR NON-FEATURES\n            // lastObj.setValue(lastObj.getValue() + Teselagen.StringUtil.rpad(\"\\n\",\" \",13) + Ext.String.trim(line));\n            // lastObj.appendValue(Teselagen.StringUtil.rpad(\"\\n\",\" \",13) + Ext.String.trim(line), gb);\n          } else {\n            // console.warn(\"Parsing GenBank File: This line has been ignored: \" + line);\n            addMessage('Warning: This line has been ignored: ' + line);\n          }\n      }\n    });\n  } catch (e) {\n    //catch any errors and set the result\n    console.error('Error trying to parse file as .gb:', e);\n    result = {\n      success: false,\n      messages: ['Import Error: Invalid File']\n    };\n  }\n\n  //catch the case where we've successfully started a sequence and parsed it, but endSeq isn't called correctly\n  if (result.success && resultsArray[resultsArray.length - 1] !== result) {\n    //current result isn't in resultsArray yet\n    //so we call endSeq here\n    endSeq();\n  }\n  //call the callback\n  return validateSequenceArray(flattenSequenceArray(resultsArray), options);\n  //before we call the onFileParsed callback, we need to flatten the sequence, and convert the old sequence data to the new data type\n\n  function endSeq() {\n    //do some post processing clean-up\n    postProcessCurSeq();\n    //push the result into the resultsArray\n    resultsArray.push(result);\n  }\n\n  function getCurrentFeature() {\n    return result.parsedSequence.features[\n      result.parsedSequence.features.length - 1\n    ];\n  }\n\n  function addMessage(msg) {\n    if (result.messages.indexOf(msg === -1)) {\n      return result.messages.push(msg);\n    }\n  }\n\n  function postProcessCurSeq() {\n    if (result.parsedSequence && result.parsedSequence.features) {\n      for (var i = 0; i < result.parsedSequence.features.length; i++) {\n        result.parsedSequence.features[i] = postProcessGenbankFeature(\n          result.parsedSequence.features[i]\n        );\n      }\n    }\n  }\n\n  function parseOrigin(line, key) {\n    if (key !== genbankAnnotationKey.ORIGIN_TAG) {\n      var new_line = line.replace(/[\\s]*[0-9]*/g, '');\n      result.parsedSequence.sequence += new_line;\n    }\n  }\n\n  function parseLocus(line) {\n    result = createInitialSequence(options);\n    var locusName;\n    var linear;\n    var date;\n    var lineArr = line.split(/[\\s]+/g);\n\n    if (lineArr.length <= 1) {\n      console.warn(\n        'Parsing GenBank File: WARNING! Locus line contains no values!'\n      );\n      // TODO\n      addMessage('Import Warning: Locus line contains no values: ' + line);\n    }\n    locusName = lineArr[1];\n\n    // Linear vs Circular?\n    linear = true;\n    for (var i = 1; i < lineArr.length; i++) {\n      if (lineArr[i].match(/circular/gi)) {\n        linear = false;\n      }\n    }\n\n    // Date and Div\n    // Date is in format:1-APR-2012\n    for (var j = 1; j < lineArr.length; j++) {\n      if (lineArr[j].match(/-[A-Z]{3}-/g)) {\n        date = lineArr[j];\n      }\n      //tnr: not sure what this is supposed to be doing..\n      // if (lineArr[j].match(/^[A-Z]{3}/g) && lineArr[j].length === 3 && !lineArr[j].match(/DNA|RNA/g)) {\n      //     div = lineArr[j];\n      // }\n    }\n\n    //don't use \"exported as a file name unless it is out last option\"\n    if (\n      locusName !== 'Exported' ||\n      result.parsedSequence.name === 'Untitled Sequence'\n    ) {\n      result.parsedSequence.name = locusName;\n    }\n    result.parsedSequence.date = date;\n    result.parsedSequence.circular = !linear;\n  }\n\n  function extractExtraLine(line) {\n    if (result.parsedSequence) {\n      if (!result.parsedSequence.extraLines) {\n        result.parsedSequence.extraLines = [];\n      }\n      result.parsedSequence.extraLines.push(line);\n    } else {\n      throw 'no sequence yet created upon which to extract an extra line!';\n    }\n  }\n  var lastLineWasFeaturesTag;\n  var lastLineWasLocation;\n  function parseFeatures(line, key, val) {\n    var strand;\n    // FOR THE MAIN FEATURES LOCATION/QUALIFIER LINE\n    if (key === genbankAnnotationKey.FEATURES_TAG) {\n      lastLineWasFeaturesTag = true;\n      return;\n    }\n\n    if (lastLineWasFeaturesTag) {\n      //we need to get the indentation of feature locations\n      featureLocationIndentation = getLengthOfWhiteSpaceBeforeStartOfLetters(\n        line\n      );\n      //set lastLineWasFeaturesTag to false\n      lastLineWasFeaturesTag = false;\n    }\n\n    // FOR LOCATION && QUALIFIER LINES\n    if (isFeatureLineRunon(line, featureLocationIndentation)) {\n      //the line is a continuation of the above line\n      if (lastLineWasLocation) {\n        //the last line was a location, so the run-on line is expected to be a feature location as well\n        parseFeatureLocation(line.trim());\n        lastLineWasLocation = true;\n      } else {\n        //the last line was a note\n        if (currentFeatureNote) {\n          //append to the currentFeatureNote\n          currentFeatureNote[\n            currentFeatureNote.length - 1\n          ] += line.trim().replace(/\\\"/g, '');\n        }\n        lastLineWasLocation = false;\n      }\n    } else {\n      // New Element/Qualifier lines. Not runon lines.\n      if (isNote(line)) {\n        // is a new Feature Element (e.g. source, CDS) in the form of  \"[\\s] KEY  SEQLOCATION\"\n        // is a FeatureQualifier in the /KEY=\"BLAH\" format; could be multiple per Element\n        //Check that feature did not get skipped for missing location\n        if (getCurrentFeature()) {\n          parseFeatureNote(line);\n          lastLineWasLocation = false;\n        } else {\n          return;\n        }\n      } else {\n        //the line is a location, so we make a new feature from it\n        if (val.match(/complement/g)) {\n          strand = -1;\n        } else {\n          strand = 1;\n        }\n\n        newFeature();\n        var feat = getCurrentFeature();\n        feat.type = key;\n        feat.strand = strand;\n\n        parseFeatureLocation(val);\n        lastLineWasLocation = true;\n      }\n    }\n  }\n\n  function newFeature() {\n    result.parsedSequence.features.push({\n      locations: [],\n      notes: {}\n    });\n  }\n\n  function isNote(line) {\n    var qual = false;\n    /*if (line.charAt(21) === \"/\") {//T.H. Hard coded method\n           qual = true;\n         }*/\n    if (\n      line\n        .trim()\n        .charAt(0)\n        .match(/\\//)\n    ) {\n      // searches based on looking for / in beginning of line\n      qual = true;\n    } else if (line.match(/^[\\s]*\\/[\\w]+=[\\S]+/)) {\n      // searches based on \"   /key=BLAH\" regex\n      qual = true;\n    }\n    return qual;\n  }\n\n  function parseFeatureLocation(locStr) {\n    locStr = locStr.trim();\n    var locArr = [];\n    locStr.replace(/(\\d+)/g, function(string, match) {\n      locArr.push(match);\n    });\n    for (var i = 0; i < locArr.length; i += 2) {\n      var start = parseInt(locArr[i]) - (inclusive1BasedStart ? 0 : 1);\n      var end = parseInt(locArr[i + 1]) - (inclusive1BasedEnd ? 0 : 1);\n      if (isNaN(end)) {\n        //if no end is supplied, assume that the end should be set to whatever the start is\n        //this makes a feature location passed as:\n        //147\n        //function like:\n        //147..147\n        end = start;\n      }\n      var location = {\n        start: start,\n        end: end\n      };\n      var feat = getCurrentFeature();\n      feat.locations.push(location);\n    }\n  }\n\n  function parseFeatureNote(line) {\n    var newLine, lineArr;\n\n    newLine = line.trim();\n    newLine = newLine.replace(/^\\/|\"$/g, '');\n    lineArr = newLine.split(/=\\\"|=/);\n\n    var val = lineArr[1];\n\n    if (val) {\n      val = val.replace(/\\\\/g, ' ');\n\n      if (line.match(/=\\\"/g)) {\n        val = val.replace(/\\\".*/g, '');\n      } else if (val.match(/^\\d+$/g)) {\n        val = parseInt(val);\n      }\n    }\n    var key = lineArr[0];\n    var currentNotes = getCurrentFeature().notes;\n    if (currentNotes[key]) {\n      //array already exists, so push value into it\n      currentNotes[key].push(val);\n    } else {\n      //array doesn't exist yet, so create it and populate it with the value\n      currentNotes[key] = [val];\n    }\n    currentFeatureNote = currentNotes[key];\n  }\n\n  function getLineKey(line) {\n    var arr;\n    line = line.replace(/^[\\s]*/, '');\n\n    if (line.indexOf('=') < 0) {\n      arr = line.split(/[\\s]+/);\n    } else {\n      arr = line.split(/=/);\n    }\n\n    return arr[0];\n  }\n\n  function getLineVal(line) {\n    var arr;\n\n    if (line.indexOf('=') < 0) {\n      line = line.replace(/^[\\s]*[\\S]+[\\s]+|[\\s]+$/, '');\n      line = line.trim();\n      return line;\n    } else {\n      arr = line.split(/=/);\n      return arr[1];\n    }\n  }\n\n  function isKeyword(line) {\n    var isKey = false;\n    if (line.substr(0, 10).match(/^[\\S]+/)) {\n      isKey = true;\n    }\n    return isKey;\n  }\n\n  function isSubKeyword(line) {\n    var isSubKey = false;\n    if (line.substr(0, 10).match(/^[\\s]+[\\S]+/)) {\n      isSubKey = true;\n    }\n    return isSubKey;\n  }\n\n  function isKeywordRunon(line) {\n    var runon;\n    if (line.substr(0, 10).match(/[\\s]{10}/)) {\n      runon = true;\n    } else {\n      runon = false;\n    }\n    return runon;\n  }\n\n  function postProcessGenbankFeature(feat) {\n    if (feat.notes.label) {\n      feat.name = feat.notes.label[0];\n    } else if (feat.notes.gene) {\n      feat.name = feat.notes.gene[0];\n    } else if (feat.notes.ApEinfo_label) {\n      feat.name = feat.notes.ApEinfo_label[0];\n    } else if (feat.notes.name) {\n      feat.name = feat.notes.name[0];\n    } else if (feat.notes.organism) {\n      feat.name = feat.notes.organism[0];\n    } else if (feat.notes.locus_tag) {\n      feat.name = feat.notes.locus_tag[0];\n    } else if (feat.notes.note) {\n      //if the name is coming from a note, shorten the name to 100 chars long\n      feat.name = feat.notes.note[0].substr(0, 100);\n    } else {\n      feat.name = '';\n    }\n    //shorten the name to a reasonable length if necessary and warn the user about it\n    var oldName = feat.name;\n    if (feat.name !== 0 && !feat.name) {\n      feat.name = 'Untitled Feature';\n    }\n    feat.name = typeof feat.name === 'string' ? feat.name : String(feat.name);\n    feat.name = feat.name.substr(0, 100);\n    if (feat.name !== oldName) {\n      addMessage('Warning: Shortening name of sequence (max 100 chars)');\n    }\n    return feat;\n  }\n}\n\nfunction isFeatureLineRunon(line, featureLocationIndentation) {\n  var indentationOfLine = getLengthOfWhiteSpaceBeforeStartOfLetters(line);\n  if (featureLocationIndentation === indentationOfLine) {\n    //the feature location indentation calculated right after the feature tag\n    //cannot be the same as the indentation of the line\n    //\n    //FEATURES             Location/Qualifiers\n    //     rep_origin      complement(1074..3302)\n    //01234  <-- this is the indentation we're talking about\n    return false; //the line is NOT a run on\n  }\n\n  var trimmed = line.trim();\n  if (trimmed.charAt(0).match(/\\//)) {\n    //the first char in the trimmed line cannot be a /\n    return false; //the line is NOT a run on\n  }\n  //the line is a run on\n  return true;\n  //run-on line example:\n  //FEATURES             Location/Qualifiers\n  //     rep_origin      complement(1074..3302)\n  //                 /label=pSC101**\n  //                 /note=\"REP_ORIGIN REP_ORIGIN pSC101* aka pMPP6, gives plasm\n  //                 id number 3 -4 copies per cell, BglII site in pSC101* ori h <--run-on line!\n  //                 as been dele ted by quick change agatcT changed to agatcA g <--run-on line!\n  //                 iving pSC101* * pSC101* aka pMPP6, gives plasmid number 3-4 <--run-on line!\n  //                 copies p er cell, BglII site in pSC101* ori has been delet  <--run-on line!\n  //                 ed by quic k change agatcT changed to agatcA giving pSC101* <--run-on line!\n  //                 * [pBbS0a-RFP]\"                                             <--run-on line!\n  //                 /gene=\"SC101** Ori\"\n  //                 /note=\"pSC101* aka pMPP6, gives plasmid number 3-4 copies p\n  //                 er cell, BglII site in pSC101* ori has been deleted by qui\n  //                 c k change agatcT changed to agatcA giving pSC101**\"\n  //                 /vntifkey=\"33\"\n}\n\nfunction getLengthOfWhiteSpaceBeforeStartOfLetters(string) {\n  var match = /^\\s*/.exec(string);\n  if (match !== null) {\n    return match[0].length;\n  } else {\n    return 0;\n  }\n}\n\nmodule.exports = genbankToJson;\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","var convertOldSequenceDataToNewDataType = require('./convertOldSequenceDataToNewDataType.js');\nmodule.exports = function flattenSequenceArray(parsingResultArray) {\n    if (parsingResultArray) {\n        if (!Array.isArray(parsingResultArray)) {\n            //wrap the parsingResult into an array if it isn't one already\n            parsingResultArray = [parsingResultArray];\n        }\n        //should convert the old data type to the new data type (flattened sequence)\n        parsingResultArray.forEach(function(parsingResult) {\n            if (parsingResult.success) {\n                convertOldSequenceDataToNewDataType(parsingResult.parsedSequence);\n            }\n        });\n    }\n    return parsingResultArray;\n};\n\n\n// WEBPACK FOOTER //\n// ./src/utils/flattenSequenceArray.js","module.exports = function convertToNewDataType(oldTeselagenJson) {\n  //after the file has been parsed, but before it's been saved, check for features with multiple locations and split them\n  oldTeselagenJson.features.forEach(function(feature) {\n    if (feature.locations[0]) {\n      if (feature.locations.length > 1) {\n        for (let i = 1; i < feature.locations.length; i++) { //start at index 1, not 0!\n          //for every location except for the first one, \n          const location = feature.locations[i];\n          let clonedFeature = JSON.parse(JSON.stringify(feature));\n          clonedFeature.start = location.start;\n          clonedFeature.end = location.end;\n          delete clonedFeature.locations; //This array is no longer used to get start and end bp and doesn't need to be in db\n          //clonedFeature.locations = []; //strip the locations from the cloned feature (we won't be using locations whatsoever in our app)\n          oldTeselagenJson.features.push(clonedFeature);\n        }\n        //strip the locations from the original feature (this should prevent any \n        //issues from the locations data contradicting the feature start/end data)\n        //feature.locations = [];\n      }\n\n      feature.start = feature.locations[0].start;\n      feature.end = feature.locations[0].end;\n    }\n    delete feature.locations;\n\n  });\n  if (Array.isArray(oldTeselagenJson.sequence)) {\n    oldTeselagenJson.sequence = oldTeselagenJson.sequence.join('');\n  }\n};\n\n\n// WEBPACK FOOTER //\n// ./src/utils/convertOldSequenceDataToNewDataType.js","const validateSequence = require('./validateSequence.js');\nmodule.exports = function validateSequenceArray(parsingResultArray, options) {\n    if (parsingResultArray) {\n        if (!Array.isArray(parsingResultArray)) {\n            //wrap the parsingResult into an array if it isn't one already\n            parsingResultArray = [parsingResultArray];\n        }\n        //should convert the old data type to the new data type (flattened sequence)\n        parsingResultArray.forEach(function(parsingResult) {\n            if (parsingResult.success) {\n                const res = validateSequence(parsingResult.parsedSequence, options);\n                //add any validation error messages to the parsed sequence results messages\n                parsingResult.messages = parsingResult.messages.concat(res.messages);\n                parsingResult.parsedSequence = res.validatedAndCleanedSequence;\n            }\n        });\n    }\n    return parsingResultArray;\n};\n\n\n// WEBPACK FOOTER //\n// ./src/utils/validateSequenceArray.js","const areNonNegativeIntegers = require('validate.io-nonnegative-integer-array');\nconst NameUtils = require('./NameUtils.js');\nconst FeatureTypes = require('../seq/FeatureTypes');\nconst filterAminoAcidSequenceString = require('../seq/filterAminoAcidSequenceString');\nconst filterSequenceString = require('../seq/filterSequenceString');\nconst guessIfSequenceIsDnaAndNotProtein = require('../seq/guessIfSequenceIsDnaAndNotProtein');\n\n//validation checking\n/**\n * validation and sanitizing of our teselagen sequence data type\n * @param  {object} sequence Our teselagen sequence data type\n * @return response         {\n    validatedAndCleanedSequence: {},\n    messages: [],\n  };\n */\nmodule.exports = function validateSequence(\n  sequence,\n  {\n    isProtein,\n    guessIfProtein,\n    guessIfProteinOptions,\n    reformatSeqName,\n    inclusive1BasedStart,\n    inclusive1BasedEnd,\n    additionalValidChars,\n    acceptParts\n  } = {}\n) {\n  const response = {\n    validatedAndCleanedSequence: {},\n    messages: []\n  };\n  if (!sequence || typeof sequence !== 'object') {\n    throw new Error('Invalid sequence');\n  }\n  if (!sequence.name) {\n    //we'll handle transferring the file name outside of this function\n    //for now just set it to a blank string\n    sequence.name = '';\n  }\n  if (!sequence.extraLines) {\n    sequence.extraLines = [];\n  }\n  if (!sequence.comments) {\n    sequence.comments = [];\n  }\n  const oldName = sequence.name;\n  if (reformatSeqName) {\n    sequence.name = NameUtils.reformatName(sequence.name);\n  }\n  if (oldName !== sequence.name) {\n    response.messages.push(\n      'Name (' + oldName + ') reformatted to ' + sequence.name\n    );\n  }\n\n  if (Array.isArray(sequence.sequence)) {\n    sequence.sequence = sequence.sequence.join('');\n  }\n  if (!sequence.sequence) {\n    response.messages.push('No sequence detected');\n    sequence.sequence = '';\n  }\n  let validChars;\n  if (guessIfProtein) {\n    isProtein = !guessIfSequenceIsDnaAndNotProtein(\n      sequence.sequence,\n      guessIfProteinOptions\n    );\n  }\n  if (isProtein) {\n    //tnr: add code to strip invalid protein data..\n    validChars = filterAminoAcidSequenceString(sequence.sequence);\n    if (validChars !== sequence.sequence) {\n      sequence.sequence = validChars;\n      response.messages.push(\n        'Import Error: Illegal character(s) detected and removed from amino acid sequence. Allowed characters are: xtgalmfwkqespvicyhrndu'\n      );\n    }\n    sequence.type = 'PROTEIN';\n  } else {\n    //todo: this logic won't catch every case of RNA, so we should probably handle RNA conversion at another level..\n    let newSeq = sequence.sequence.replace(/u/g, 't');\n    newSeq = newSeq.replace(/U/g, 'T');\n    if (newSeq !== sequence.sequence) {\n      sequence.type = 'RNA';\n      sequence.sequence = newSeq;\n    } else {\n      sequence.type = 'DNA';\n    }\n\n    validChars = filterSequenceString(sequence.sequence, additionalValidChars);\n    if (validChars !== sequence.sequence) {\n      sequence.sequence = validChars;\n      response.messages.push(\n        'Import Error: Illegal character(s) detected and removed from sequence. Allowed characters are: atgcyrswkmbvdhn'\n      );\n    }\n  }\n\n  if (!sequence.size) {\n    sequence.size = sequence.sequence.length;\n  }\n  let circularityExplicitlyDefined;\n  if (\n    sequence.circular === false ||\n    sequence.circular === 'false' ||\n    sequence.circular === -1\n  ) {\n    sequence.circular = false;\n  } else if (!sequence.circular) {\n    sequence.circular = false;\n    circularityExplicitlyDefined = false;\n  } else {\n    sequence.circular = true;\n  }\n\n  if (!sequence.features || !Array.isArray(sequence.features)) {\n    response.messages.push('No valid features detected');\n    sequence.features = [];\n  }\n  //tnr: maybe this should be wrapped in its own function (in case we want to use it elsewhere)\n  sequence.features = sequence.features.filter(function(feature) {\n    if (!feature || typeof feature !== 'object') {\n      response.messages.push('Invalid feature detected and removed');\n      return false;\n    }\n    feature.start = parseInt(feature.start, 10);\n    feature.end = parseInt(feature.end, 10);\n\n    if (!feature.name || typeof feature.name !== 'string') {\n      response.messages.push(\n        'Unable to detect valid name for feature, setting name to \"Untitled Feature\"'\n      );\n      feature.name = 'Untitled Feature';\n    }\n    if (\n      !areNonNegativeIntegers([feature.start]) ||\n      feature.start > sequence.size - (inclusive1BasedStart ? 0 : 1)\n    ) {\n      response.messages.push(\n        'Invalid feature start: ' +\n          feature.start +\n          ' detected for ' +\n          feature.name +\n          ' and set to 1'\n      ); //setting it to 0 internally, but users will see it as 1\n      feature.start = 0;\n    }\n    if (\n      !areNonNegativeIntegers([feature.end]) ||\n      feature.end > sequence.size - (inclusive1BasedEnd ? 0 : 1)\n    ) {\n      response.messages.push(\n        'Invalid feature end:  ' +\n          feature.end +\n          ' detected for ' +\n          feature.name +\n          ' and set to 1'\n      ); //setting it to 0 internally, but users will see it as 1\n      feature.end = Math.max(sequence.size - 1, inclusive1BasedEnd ? 0 : 1);\n      // feature.end = 0;\n    }\n\n    if (\n      feature.start - (inclusive1BasedStart ? 0 : 1) >\n        feature.end - (inclusive1BasedEnd ? 0 : 1) &&\n      sequence.circular === false\n    ) {\n      if (circularityExplicitlyDefined) {\n        response.messages.push(\n          'Invalid circular feature detected in explicitly linear sequence. ' +\n            feature.name +\n            '. start set to 1'\n        ); //setting it to 0 internally, but users will see it as 1\n        feature.start = 0;\n      } else {\n        response.messages.push(\n          'Circular feature detected in implicitly linear sequence. Setting sequence to be circular.'\n        );\n        sequence.circular = true;\n      }\n    }\n\n    feature.strand = parseInt(feature.strand, 10);\n    if (\n      feature.strand === -1 ||\n      feature.strand === false ||\n      feature.strand === 'false' ||\n      feature.strand === '-'\n    ) {\n      feature.strand = -1;\n    } else {\n      feature.strand = 1;\n    }\n    let invalidFeatureType;\n    if (\n      !feature.type ||\n      typeof feature.type !== 'string' ||\n      !FeatureTypes.some(function(featureType) {\n        if (featureType.toLowerCase() === feature.type.toLowerCase()) {\n          feature.type = featureType; //this makes sure the feature.type is being set to the exact value of the accepted featureType\n          return true;\n        }\n        return false;\n      })\n    ) {\n      response.messages.push(\n        'Invalid feature type detected:  \"' +\n          feature.type +\n          '\" within ' +\n          feature.name +\n          '. set type to misc_feature'\n      );\n      if (typeof feature.type === 'string') {\n        invalidFeatureType = feature.type;\n      }\n      feature.type = 'misc_feature';\n    }\n    if (!feature.notes) {\n      feature.notes = {};\n    }\n    //if the original feature type was invalid, push it onto the notes object under featureType\n    if (invalidFeatureType) {\n      if (!feature.notes.featureType) {\n        feature.notes.featureType = [];\n      }\n      feature.notes.featureType.push(invalidFeatureType);\n    }\n    if (feature.notes.label) {\n      //we've already used the label as the name by default if both gene and label were present\n      delete feature.notes.label;\n    } else if (feature.notes.gene) {\n      //gene was useds for name (if it existed)\n      delete feature.notes.gene;\n    } else if (feature.notes.name) {\n      //name was used for name (if it existed)\n      delete feature.notes.name;\n    }\n    if (\n      acceptParts &&\n      feature.notes.pragma &&\n      feature.notes.pragma[0] === 'Teselagen_Part'\n    ) {\n      if (!sequence.parts) {\n        sequence.parts = []; //initialize an empty array if necessary\n      }\n      feature.type = 'part';\n      sequence.parts.push(feature);\n      return false; //don't include the features\n    }\n    return true;\n  });\n  response.validatedAndCleanedSequence = sequence;\n  return response;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/validateSequence.js","/**\n*\n*\tVALIDATE: nonnegative-integer-array\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a nonnegative integer array.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2015. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2015.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isArray = require( 'validate.io-array' ),\n\tisNonNegativeInteger = require( 'validate.io-nonnegative-integer' );\n\n\n// IS NONNEGATIVE INTEGER ARRAY //\n\n/**\n* FUNCTION: isNonNegativeIntegerArray( value )\n*\tValidates if a value is a nonnegative integer array.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating if a value is a nonnegative integer array\n*/\nfunction isNonNegativeIntegerArray( value ) {\n\tvar len;\n\tif ( !isArray( value ) ) {\n\t\treturn false;\n\t}\n\tlen = value.length;\n\tif ( !len ) {\n\t\treturn false;\n\t}\n\tfor ( var i = 0; i < len; i++ ) {\n\t\tif ( !isNonNegativeInteger( value[i] ) ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n} // end FUNCTION isNonNegativeIntegerArray()\n\n\n// EXPORTS //\n\nmodule.exports = isNonNegativeIntegerArray;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/validate.io-nonnegative-integer-array/lib/index.js","'use strict';\n\n/**\n* FUNCTION: isArray( value )\n*\tValidates if a value is an array.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is an array\n*/\nfunction isArray( value ) {\n\treturn Object.prototype.toString.call( value ) === '[object Array]';\n} // end FUNCTION isArray()\n\n// EXPORTS //\n\nmodule.exports = Array.isArray || isArray;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/validate.io-array/lib/index.js","/**\n*\n*\tVALIDATE: nonnegative-integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a nonnegative integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2015. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2015.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isInteger = require( 'validate.io-integer' );\n\n\n// IS NONNEGATIVE INTEGER //\n\n/**\n* FUNCTION: isNonNegativeInteger( value )\n*\tValidates if a value is a nonnegative integer.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating if a value is a nonnegative integer\n*/\nfunction isNonNegativeInteger( value ) {\n\treturn isInteger( value ) && value >= 0;\n} // end FUNCTION isNonNegativeInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isNonNegativeInteger;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/validate.io-nonnegative-integer/lib/index.js","/**\n*\n*\tVALIDATE: integer\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is an integer.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n// MODULES //\n\nvar isNumber = require( 'validate.io-number' );\n\n\n// ISINTEGER //\n\n/**\n* FUNCTION: isInteger( value )\n*\tValidates if a value is an integer.\n*\n* @param {Number} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is an integer\n*/\nfunction isInteger( value ) {\n\treturn isNumber( value ) && value%1 === 0;\n} // end FUNCTION isInteger()\n\n\n// EXPORTS //\n\nmodule.exports = isInteger;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/validate.io-integer/lib/index.js","/**\n*\n*\tVALIDATE: number\n*\n*\n*\tDESCRIPTION:\n*\t\t- Validates if a value is a number.\n*\n*\n*\tNOTES:\n*\t\t[1]\n*\n*\n*\tTODO:\n*\t\t[1]\n*\n*\n*\tLICENSE:\n*\t\tMIT\n*\n*\tCopyright (c) 2014. Athan Reines.\n*\n*\n*\tAUTHOR:\n*\t\tAthan Reines. kgryte@gmail.com. 2014.\n*\n*/\n\n'use strict';\n\n/**\n* FUNCTION: isNumber( value )\n*\tValidates if a value is a number.\n*\n* @param {*} value - value to be validated\n* @returns {Boolean} boolean indicating whether value is a number\n*/\nfunction isNumber( value ) {\n\treturn ( typeof value === 'number' || Object.prototype.toString.call( value ) === '[object Number]' ) && value.valueOf() === value.valueOf();\n} // end FUNCTION isNumber()\n\n\n// EXPORTS //\n\nmodule.exports = isNumber;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/validate.io-number/lib/index.js","// Basically a copy of 'Teselagen.utils.NameUtils' for use within workers.\n\nmodule.exports = {\n\t/**\n\t * Reformat name to replaces whitespace with underscores.\n\t * @param {String} pName\n\t * @returns {String} New name.\n\t */\n\treformatName: function(pName) {\n\t\treturn pName.toString().replace(/ /g, '_');\n\t},\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/NameUtils.js","'use strict';\n\n// Options for the \"Type\" combo box in the Create New Features.\nmodule.exports = [\n  '-10_signal',\n  '-35_signal',\n  \"3'clip\",\n  \"5'clip\",\n  \"3'UTR\",\n  \"5'UTR\",\n  'allele',\n  'assembly_gap',\n  'attenuator',\n  'C_region',\n  'CAAT_signal',\n  'centromere',\n  'CDS',\n  'conserved',\n  'D_segment',\n  'D-loop',\n  'enhancer',\n  'exon',\n  'gap',\n  'GC_signal',\n  'gene',\n  'iDNA',\n  'intron',\n  'J_region',\n  'J_segment',\n  'LTR',\n  'mat_peptide',\n  'misc_binding',\n  'misc_difference',\n  'misc_feature',\n  'misc_marker',\n  'misc_recomb',\n  'misc_RNA',\n  'misc_signal',\n  'misc_structure',\n  'mobile_element',\n  'modified_base',\n  'mRNA',\n  'N_region',\n  'ncRNA',\n  'old_sequence',\n  'operator',\n  'operon',\n  'oriT',\n  'plasmid',\n  'polyA_signal',\n  'polyA_site',\n  'precursor_RNA',\n  'prim_transcript',\n  'primer',\n  'primer_bind',\n  'promoter',\n  'proprotein',\n  'protein',\n  'protein_domain',\n  'protein_bind',\n  'RBS',\n  'regulatory',\n  'rep_origin',\n  'repeat_region',\n  'repeat_unit',\n  'rRNA',\n  's_mutation',\n  'S_region',\n  'satellite',\n  'scRNA',\n  'sig_peptide',\n  'snoRNA',\n  'snRNA',\n  'source',\n  'start',\n  'stem_loop',\n  'stop',\n  'STS',\n  'tag',\n  'TATA_signal',\n  'telomere',\n  'terminator',\n  'tmRNA',\n  'transit_peptide',\n  'transposon',\n  'tRNA',\n  'V_region',\n  'V_segment',\n  'variation',\n  'unsure'\n];\n\n\n\n// WEBPACK FOOTER //\n// ./src/seq/FeatureTypes.js","'use strict';\n\nmodule.exports = function filterAminoAcidSequenceString(\n  sequenceString,\n  options\n) {\n  options = options || {};\n  if (options.includeStopCodon) {\n    return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu\\.]/gi, '');\n  }\n  return sequenceString.replace(/[^xtgalmfwkqespvicyhrndu]/gi, '');\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/seq/filterAminoAcidSequenceString.js","'use strict';\n\n// this is throwing a weird eslint error\n\n// var ac = require('ve-api-check');\nmodule.exports = function filterSequenceString(sequenceString) {\n  var additionalValidChars =\n    arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n  // ac.throw(ac.string,sequenceString);\n  if (sequenceString) {\n    return sequenceString.replace(\n      new RegExp(\n        '[^atgcyrswkmbvdhn' + additionalValidChars.split('').join('\\\\') + ']',\n        'gi'\n      ),\n      ''\n    );\n  } else {\n    return sequenceString;\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/seq/filterSequenceString.js","'use strict';\n\nmodule.exports = function guessIfSequenceIsDnaAndNotProtein(seq) {\n  var options =\n    arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _options$threshold = options.threshold,\n    threshold = _options$threshold === undefined ? 0.9 : _options$threshold,\n    _options$dnaLetters = options.dnaLetters,\n    dnaLetters =\n      _options$dnaLetters === undefined\n        ? ['G', 'A', 'T', 'C']\n        : _options$dnaLetters;\n\n  // Guess if the given sequence is DNA or Protein.\n\n  //   It's considered DNA if more than 90% of the sequence is GATCs. The threshold\n  //   is configurable via the threshold parameter. dnaLetters can be used to configure\n  //   which letters are considered DNA; for instance, adding N might be useful if\n  //   you are expecting data with ambiguous bases.\n\n  var dnaLetterMap = dnaLetters.reduce(function(acc, letter) {\n    acc[letter.toUpperCase()] = true;\n    return acc;\n  }, {});\n  var count = 0;\n  for (var index = 0; index < seq.length; index++) {\n    var letter = seq[index];\n    if (dnaLetterMap[letter.toUpperCase()]) {\n      count = count + 1;\n    }\n  }\n  if (count / seq.length > threshold) {\n    return true; //it is DNA\n  }\n  return false; //it is protein\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/seq/guessIfSequenceIsDnaAndNotProtein.js","module.exports = function splitStringIntoLines(string) {\n\tvar lines = [];\n\tif (string === \"\") {\n\t\treturn lines;\n\t}\n\telse {\n\t\tlines = string.split(/\\r?\\n/);\n\t\tif (lines.length == 1) { //tnr: not sure why this check is being made... but keeping it in because it is probably doing something\n\t\t\tlines = string.split('\\\\n');\n\t\t}\n\t\treturn lines;\n\t}\n};\n\n\n// WEBPACK FOOTER //\n// ./src/utils/splitStringIntoLines.js","const constants = require('./constants');\nmodule.exports = function createInitialSequence(options) {\n    options = options || {}\n    return {\n        messages: [],\n        success: true,\n        parsedSequence: {\n            features: [],\n            name: (options.fileName && options.fileName.replace(/\\.[^/.]+$/, \"\")) || constants.untitledSequenceName,\n            sequence: ''\n        }\n    };\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/createInitialSequence.js","module.exports = {\n    untitledSequenceName: 'Untitled Sequence'\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/constants.js"],"sourceRoot":""}