view x/static/js/1503.cc48d25a.chunk.js.map @ 125:49f3d3878413 draft

planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 5ea1f9c1eef1de76232e69aa6d34cda77d90d566
author fubar
date Sat, 05 Oct 2024 23:58:05 +0000
parents
children
line wrap: on
line source

{"version":3,"file":"static/js/1503.cc48d25a.chunk.js","mappings":"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","sources":["../../../node_modules/gtf-nostream/src/util.ts","../../../node_modules/gtf-nostream/src/parse.ts","../../../plugins/gtf/src/util.ts","../../../plugins/gtf/src/GtfAdapter/GtfAdapter.ts","../../../node_modules/gtf-nostream/src/api.ts"],"sourcesContent":["//@ts-nocheck\n/** @module util */\n\n// Forks @gmod/gff-js and adapts it to parse and format GTF.\n\nconst fieldNames = [\n  'seq_name',\n  'source',\n  'featureType',\n  'start',\n  'end',\n  'score',\n  'strand',\n  'frame',\n  'attributes',\n]\n\n// TODO: check about enconding/escaping in gtf 9th column\n/**\n * Unescape a string/text value used in a GTF attribute.\n * Textual attributes should be surrounded by double quotes\n * source info:\n * https://mblab.wustl.edu/GTF22.html\n * https://en.wikipedia.org/wiki/Gene_transfer_format\n *\n * @param {String} s\n * @returns {String}\n */\nexport function unescape(s) {\n  if (s === null) {\n    return null\n  }\n  return String(s).replace(/%([0-9A-Fa-f]{2})/g, (_, seq) =>\n    String.fromCharCode(parseInt(seq, 16)),\n  )\n}\n\n/**\n * Escape a value for use in a GTF attribute value.\n *\n * @param {String} s\n * @returns {String}\n */\nfunction _escape(regex, s) {\n  return String(s).replace(regex, ch => {\n    let hex = ch.charCodeAt(0).toString(16).toUpperCase()\n\n    // lol, apparently there's no native function for fixed-width hex output\n    if (hex.length < 2) {\n      hex = `0${hex}`\n    }\n    return `%${hex}`\n  })\n}\n\nexport function escape(s) {\n  // eslint-disable-next-line no-control-regex\n  return _escape(/[\\n;\\r\\t=%&,\\x00-\\x1f\\x7f-\\xff]/g, s)\n}\n\n/**\n * Escape a value for use in a GTF column value.\n *\n * @param {String} s\n * @returns {String}\n */\nexport function escapeColumn(s) {\n  // eslint-disable-next-line no-control-regex\n  return _escape(/[\\n\\r\\t%\\x00-\\x1f\\x7f-\\xff]/g, s)\n}\n\n/**\n * Parse the 9th column (attributes) of a GTF feature line.\n *\n * @param {String} attrString\n * @returns {Object}\n */\nexport function parseAttributes(attrString) {\n  if (!(attrString && attrString.length) || attrString === '.') {\n    return {}\n  }\n\n  const attrs = {}\n\n  attrString\n    .replace(/\\r?\\n$/, '')\n    .slice(0, -1) // need to remove the last semicolon in the attributes\n    .split(';')\n    .forEach(attribute => {\n      if (!attribute) {\n        return\n      }\n      const attr = attribute.trim().split(' ')\n      if (!(attr[1] && attr[1].length)) {\n        return\n      }\n\n      attr[0] = attr[0].trim()\n      let arec = attrs[attr[0].trim()]\n      if (!arec) {\n        arec = []\n        attrs[attr[0]] = arec\n      }\n\n      // arec.push(unescape(attr[1].trim()))\n      arec.push(\n        ...attr[1]\n          .split(',')\n          .map(s => s.trim())\n          .map(unescape),\n      )\n    })\n  return attrs\n}\n\n/**\n * Parse a GTF feature line.\n *\n * @param {String} line\n * returns the parsed line in an object\n */\nexport function parseFeature(line) {\n  // assumed that there are no comments at the end of a line\n  // split the line into columns and replace '.' with null in each column\n  const f = line.split('\\t').map(a => (a === '.' ? null : a))\n\n  // unescape only the seq_name, source, and feature columns\n  f[0] = unescape(f[0])\n  f[1] = unescape(f[1])\n  f[2] = unescape(f[2])\n\n  f[8] = parseAttributes(f[8])\n  const parsed = {}\n  for (let i = 0; i < fieldNames.length; i += 1) {\n    parsed[fieldNames[i]] = f[i] === '.' ? null : f[i]\n  }\n  if (parsed.start !== null) {\n    parsed.start = parseInt(parsed.start, 10)\n  }\n  if (parsed.end !== null) {\n    parsed.end = parseInt(parsed.end, 10)\n  }\n  if (parsed.score !== null) {\n    parsed.score = parseFloat(parsed.score, 10)\n  }\n  if (parsed.strand != null) {\n    parsed.strand = parsed.strand\n  }\n  return parsed\n}\n\n/**\n * Parse a GTF directive/comment line.\n *\n * @param {String} line\n * @returns {Object} the information in the directive\n */\nexport function parseDirective(line) {\n  const match = /^\\s*##\\s*(\\S+)\\s*(.*)/.exec(line)\n  // const match = /^\\s*\\#\\#\\s*(\\S+)\\s*(.*)/.exec(line)\n  if (!match) {\n    return null\n  }\n\n  // let [, name, contents] = match\n  const name = match[1]\n  let contents = match[2]\n  const parsed = { directive: name }\n  if (contents.length) {\n    contents = contents.replace(/\\r?\\n$/, '')\n    parsed.value = contents\n  }\n\n  // do a little additional parsing for sequence-region and genome-build directives\n  if (name === 'sequence-region') {\n    const [seqId, contentStart, contentEnd] = contents.split(/\\s+/, 3)\n    parsed.seq_id = seqId\n    parsed.start = contentStart && contentStart.replace(/\\D/g, '')\n    parsed.end = contentEnd && contentEnd.replace(/\\D/g, '')\n  } else if (name === 'genome-build') {\n    const [source, buildname] = contents.split(/\\s+/, 2)\n    parsed.source = source\n    parsed.buildname = buildname\n  }\n\n  return parsed\n}\n\n/**\n * Format an attributes object into a string suitable for the 9th column of GTF.\n *\n * @param {Object} attrs\n */\nexport function formatAttributes(attrs) {\n  const attrOrder = []\n  Object.keys(attrs).forEach(tag => {\n    const val = attrs[tag]\n    let valstring\n    // eslint-disable-next-line no-prototype-builtins\n    if (val.hasOwnProperty('toString')) {\n      valstring = escape(val.toString())\n    } else if (Array.isArray(val.values)) {\n      valstring = val.values.map(escape).join(',')\n    } else if (Array.isArray(val)) {\n      valstring = val.map(escape).join(',')\n    } else {\n      valstring = escape(val)\n    }\n    attrOrder.push(`${escape(tag)} ${valstring}`)\n  })\n  return attrOrder.length ? attrOrder.join('; ').concat(';') : '.'\n}\n\nconst translateStrand = ['-', '.', '+']\n\nfunction _formatSingleFeature(f, seenFeature) {\n  const attrString =\n    f.attributes === null || f.attributes === undefined\n      ? '.'\n      : formatAttributes(f.attributes)\n\n  const fields = []\n  for (let i = 0; i < 8; i += 1) {\n    const val = f[fieldNames[i]]\n    // deserialize strand\n    if (i === 6) {\n      fields[i] =\n        val === null || val === undefined\n          ? '.'\n          : translateStrand[val + 1] || val\n    } else {\n      fields[i] =\n        val === null || val === undefined ? '.' : escapeColumn(String(val))\n    }\n  }\n  fields[8] = attrString\n\n  const formattedString = `${fields.join('\\t')}\\n`\n\n  // if we have already output this exact feature, skip it\n  if (seenFeature[formattedString]) {\n    return ''\n  }\n\n  // eslint-disable-next-line no-param-reassign\n  seenFeature[formattedString] = true\n  return formattedString\n}\n\nfunction _formatFeature(feature, seenFeature) {\n  if (Array.isArray(feature)) {\n    return feature.map(f => _formatFeature(f, seenFeature)).join('')\n  }\n\n  const strings = [_formatSingleFeature(feature, seenFeature)]\n  ;['child_features', 'derived_features'].forEach(multiSlot => {\n    if (feature[multiSlot]) {\n      strings.push(\n        ...feature[multiSlot].map(f => _formatFeature(f, seenFeature)),\n      )\n    }\n  })\n  return strings.join('')\n}\n\n/**\n * Format a feature object or array of\n * feature objects into one or more lines of GTF.\n *\n * @param {Object|Array[Object]} featureOrFeatures\n */\nexport function formatFeature(featureOrFeatures) {\n  const seen = {}\n  return _formatFeature(featureOrFeatures, seen)\n}\n\n/**\n * Format a directive into a line of GTF.\n *\n * @param {Object} directive\n * @returns {String}\n */\nexport function formatDirective(directive) {\n  let str = `##${directive.directive}`\n  if (directive.value) {\n    str += ` ${directive.value}`\n  }\n  str += '\\n'\n  return str\n}\n\n/**\n * Format a comment into a GTF comment.\n * Yes I know this is just adding a # and a newline.\n *\n * @param {Object} comment\n * @returns {String}\n */\nexport function formatComment(comment) {\n  return `# ${comment.comment}\\n`\n}\n\n/**\n * Format a sequence object as FASTA\n *\n * @param {Object} seq\n * @returns {String} formatted single FASTA sequence\n */\nexport function formatSequence(seq) {\n  return `>${seq.id}${seq.description ? ` ${seq.description}` : ''}\\n${\n    seq.sequence\n  }\\n`\n}\n\n/**\n * Format a directive, comment, or feature,\n * or array of such items, into one or more lines of GTF.\n *\n * @param {Object|Array} itemOrItems\n */\nexport function formatItem(itemOrItems) {\n  function formatSingleItem(item) {\n    if (item[0] || item.attributes) {\n      return formatFeature(item)\n    }\n    if (item.directive) {\n      return formatDirective(item)\n    }\n    if (item.sequence) {\n      return formatSequence(item)\n    }\n    if (item.comment) {\n      return formatComment(item)\n    }\n    return '# (invalid item found during format)\\n'\n  }\n\n  if (Array.isArray(itemOrItems)) {\n    return itemOrItems.map(item => formatSingleItem(item))\n  }\n  return formatSingleItem(itemOrItems)\n}\n","//@ts-nocheck\nimport * as GTF from './util'\n\nconst containerAttributes = {\n  Parent: 'child_features',\n  Derives_from: 'derived_features',\n}\n\nexport default class Parser {\n  constructor(args) {\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    const nullFunc = () => {}\n\n    Object.assign(this, {\n      featureCallback: args.featureCallback || nullFunc,\n      endCallback: args.endCallback || nullFunc,\n      commentCallback: args.commentCallback || nullFunc,\n      errorCallback: args.errorCallback || nullFunc,\n      directiveCallback: args.directiveCallback || nullFunc,\n      sequenceCallback: args.sequenceCallback || nullFunc,\n\n      // number of lines to buffer\n      bufferSize: args.bufferSize === undefined ? 1000 : args.bufferSize,\n\n      // features that we have to keep on hand for now because they\n      // might be referenced by something else\n      _underConstructionTopLevel: [],\n      // index of the above by ID\n      _underConstructionById: {},\n\n      _completedReferences: {},\n\n      // features that reference something we have not seen yet\n      // structured as:\n      // {  'some_id' : {\n      //     'Parent' : [ orphans that have a Parent attr referencing it ],\n      //     'Derives_from' : [ orphans that have a Derives_from attr referencing it ],\n      //    }\n      // }\n      _underConstructionOrphans: {},\n\n      // if this is true, the parser ignores the\n      // rest of the lines in the file.\n      eof: false,\n\n      lineNumber: 0,\n    })\n  }\n\n  addLine(line) {\n    if (this.eof) {\n      // otherwise, if we are done, ignore this line\n      return\n    }\n\n    this.lineNumber += 1\n\n    if (/^\\s*[^#\\s>]/.test(line)) {\n      // feature line, most common case\n      this._bufferLine(line)\n      return\n    }\n\n    const match = /^\\s*(#+)(.*)/.exec(line)\n    if (match) {\n      // directive or comment\n      // eslint-disable-next-line prefer-const\n      let [, hashsigns, contents] = match\n\n      if (hashsigns.length === 3) {\n        // sync directive, all forward-references are resolved.\n        this._emitAllUnderConstructionFeatures()\n      } else if (hashsigns.length === 2) {\n        const directive = GTF.parseDirective(line)\n\n        this._emitItem(directive)\n      } else {\n        contents = contents.replace(/\\s*/, '')\n        this._emitItem({ comment: contents })\n      }\n    } else if (/^\\s*$/.test(line)) {\n      // blank line, do nothing\n    } else {\n      // it's a parse error\n      const errLine = line.replace(/\\r?\\n?$/g, '')\n      throw new Error(`GTF parse error.  Cannot parse '${errLine}'.`)\n    }\n  }\n\n  _emitItem(i) {\n    if (i[0]) {\n      this.featureCallback(i)\n    } else if (i.directive) {\n      this.directiveCallback(i)\n    } else if (i.comment) {\n      this.commentCallback(i)\n    }\n  }\n\n  finish() {\n    this._emitAllUnderConstructionFeatures()\n    this.endCallback()\n  }\n\n  _enforceBufferSizeLimit(additionalItemCount = 0) {\n    const _unbufferItem = item => {\n      if (\n        item?.[0]?.attributes?.ID?.[0]\n      ) {\n        const ids = item[0].attributes.ID\n        ids.forEach(id => {\n          delete this._underConstructionById[id]\n          delete this._completedReferences[id]\n        })\n        item.forEach(i => {\n          if (i.child_features) {\n            i.child_features.forEach(c => { _unbufferItem(c) })\n          }\n          if (i.derived_features) {\n            i.derived_features.forEach(d => { _unbufferItem(d) })\n          }\n        })\n      }\n    }\n\n    while (\n      this._underConstructionTopLevel.length + additionalItemCount >\n      this.bufferSize\n    ) {\n      const item = this._underConstructionTopLevel.shift()\n      this._emitItem(item)\n      _unbufferItem(item)\n    }\n  }\n\n  /**\n   * return all under-construction features, called when we know\n   * there will be no additional data to attach to them\n   * @private\n   */\n  _emitAllUnderConstructionFeatures() {\n    this._underConstructionTopLevel.forEach(this._emitItem.bind(this))\n\n    this._underConstructionTopLevel = []\n    this._underConstructionById = {}\n    this._completedReferences = {}\n\n    // if we have any orphans hanging around still, this is a\n    // problem. die with a parse error\n    if (\n      Object.values(this._underConstructionOrphans).filter(\n        entry => Object.keys(entry).length,\n      ).length\n    ) {\n      throw new Error(\n        `some features reference other features that do not exist in the file (or in the same '###' scope). ${JSON.stringify(\n          this._underConstructionOrphans,\n        )}`,\n      )\n    }\n  }\n\n  // do the right thing with a newly-parsed feature line\n  _bufferLine(line) {\n    const featureLine = GTF.parseFeature(line)\n    featureLine.child_features = []\n    featureLine.derived_features = []\n    // featureLine._lineNumber = this.lineNumber //< debugging aid\n\n    const featureNumber = this.lineNumber // no such thing as unique ID in GTF. make one up.\n    const isTranscript = featureLine.featureType === 'transcript' // trying to support the Cufflinks convention of adding a transcript line\n    // NOTE: a feature is an arrayref of one or more feature lines.\n    const ids = isTranscript\n      ? featureLine.attributes.transcript_id || []\n      : [featureNumber]\n    const parents = isTranscript\n      ? []\n      : featureLine.attributes.transcript_id || []\n    const derives = featureLine.attributes.Derives_from || []\n\n    if (!ids.length && !parents.length && !derives.length) {\n      // if it has no IDs and does not refer to anything, we can just\n      // output it\n      this._emitItem([featureLine])\n      return\n    }\n\n    function createTranscript(feature) {\n      const result = JSON.parse(JSON.stringify(feature))\n      result.featureType = 'transcript'\n      return GTF.formatFeature(result)\n    }\n\n    parents.forEach(parent => {\n      const underConst = this._underConstructionById[parent]\n      if (!underConst) {\n        this._bufferLine(createTranscript(featureLine))\n      }\n    })\n\n    let feature\n    ids.forEach(id => {\n      const existing = this._underConstructionById[id]\n      if (existing) {\n        existing.push(featureLine)\n        feature = existing\n      } else {\n        // haven't seen it yet, so buffer it so we can attach\n        // child features to it\n        feature = [featureLine]\n\n        this._enforceBufferSizeLimit(1)\n        if (!parents.length && !derives.length) {\n          this._underConstructionTopLevel.push(feature)\n        }\n        this._underConstructionById[id] = feature\n\n        // see if we have anything buffered that refers to it\n        this._resolveReferencesTo(feature, id)\n      }\n    })\n\n    // try to resolve all its references\n    this._resolveReferencesFrom(\n      feature || [featureLine],\n      { Parent: parents, Derives_from: derives },\n      ids,\n    )\n  }\n\n  _resolveReferencesTo(feature, id) {\n    const references = this._underConstructionOrphans[id]\n    if (!references) {\n      return\n    }\n\n    Object.keys(references).forEach(attrname => {\n      const pname = containerAttributes[attrname] || attrname.toLowerCase()\n      feature.forEach(loc => {\n        loc[pname].push(...references[attrname])\n        delete references[attrname]\n      })\n    })\n  }\n\n  _parseError(message) {\n    this.eof = true\n    this.errorCallback(`${this.lineNumber}: ${message}`)\n  }\n\n  _resolveReferencesFrom(feature, references, ids) {\n    // this is all a bit more awkward in javascript than it was in perl\n    function postSet(obj, slot1, slot2) {\n      let subObj = obj[slot1]\n      if (!subObj) {\n        subObj = {}\n         \n        obj[slot1] = subObj\n      }\n      const returnVal = subObj[slot2] || false\n      subObj[slot2] = true\n      return returnVal\n    }\n\n    function expandFeature(parentFeature, childFeature) {\n       \n      parentFeature[0].start = Math.min(\n        parentFeature[0].start,\n        childFeature[0].start,\n      )\n       \n      parentFeature[0].end = Math.max(parentFeature[0].end, childFeature[0].end)\n    }\n\n    Object.entries(references).forEach(([attrname, toIds]) => {\n      let pname\n      toIds.forEach(toId => {\n        const otherFeature = this._underConstructionById[toId]\n        if (otherFeature) {\n          expandFeature(otherFeature, feature)\n          if (!pname) {\n            pname = containerAttributes[attrname] || attrname.toLowerCase()\n          }\n\n          if (\n            !ids.filter(id =>\n              postSet(this._completedReferences, id, `${attrname},${toId}`),\n            ).length\n          ) {\n            otherFeature.forEach(location => {\n              location[pname].push(feature)\n            })\n          }\n        } else {\n          if (!this._underConstructionOrphans[toId]) {\n            this._underConstructionOrphans[toId] = {}\n          }\n          if (!this._underConstructionOrphans[toId][attrname]) {\n            this._underConstructionOrphans[toId][attrname] = []\n          }\n          this._underConstructionOrphans[toId][attrname].push(feature)\n        }\n      })\n    })\n  }\n}\n","export type Strand = '+' | '-' | '.' | '?'\nexport interface FeatureLoc {\n  [key: string]: unknown\n  start: number\n  end: number\n  strand: Strand\n  seq_name: string\n  child_features?: FeatureLoc[][]\n  data: unknown\n  derived_features: unknown\n  attributes: Record<string, unknown[]>\n}\n\nexport function featureData(data: FeatureLoc) {\n  const f: Record<string, unknown> = { ...data }\n  ;(f.start as number) -= 1 // convert to interbase\n  f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand] // convert strand\n  f.phase = Number(data.frame)\n  f.refName = data.seq_name\n  if (data.score === null) {\n    f.score = undefined\n  }\n  if (data.frame === null) {\n    f.score = undefined\n  }\n  const defaultFields = new Set([\n    'start',\n    'end',\n    'seq_name',\n    'score',\n    'featureType',\n    'source',\n    'frame',\n    'strand',\n  ])\n  for (const a of Object.keys(data.attributes)) {\n    let b = a.toLowerCase()\n    if (defaultFields.has(b)) {\n      // add \"suffix\" to tag name if it already exists\n      // reproduces behavior of NCList\n      b += '2'\n    }\n    if (data.attributes[a]) {\n      let attr = data.attributes[a] as string[] | string\n      if (Array.isArray(attr) && attr.length === 1) {\n        // gtf uses double quotes for text values in the attributes column,\n        // remove them\n        attr = attr[0]!.replaceAll(/^\"|\"$/g, '')\n      }\n      f[b] = attr\n    }\n  }\n  f.refName = f.seq_name\n  f.type = f.featureType\n\n  // the SimpleFeature constructor takes care of recursively inflating subfeatures\n  if (data.child_features && data.child_features.length > 0) {\n    f.subfeatures = data.child_features.flatMap(childLocs =>\n      childLocs.map(childLoc => featureData(childLoc)),\n    )\n  }\n\n  f.child_features = undefined\n  f.data = undefined\n  f.derived_features = undefined\n  f._linehash = undefined\n  f.attributes = undefined\n  f.seq_name = undefined\n  f.featureType = undefined\n  f.frame = undefined\n\n  if (f.transcript_id) {\n    f.name = f.transcript_id\n  }\n  return f\n}\n","import {\n  BaseFeatureDataAdapter,\n  BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { NoAssemblyRegion } from '@jbrowse/core/util/types'\nimport { openLocation } from '@jbrowse/core/util/io'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\nimport IntervalTree from '@flatten-js/interval-tree'\nimport {\n  SimpleFeature,\n  Feature,\n  updateStatus,\n  isGzip,\n} from '@jbrowse/core/util'\nimport { unzip } from '@gmod/bgzf-filehandle'\nimport { parseStringSync } from 'gtf-nostream'\nimport type { Buffer } from 'buffer'\n\n// locals\nimport { FeatureLoc, featureData } from '../util'\n\nconst decoder =\n  typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined\n\ntype StatusCallback = (arg: string) => void\n\nexport default class GtfAdapter extends BaseFeatureDataAdapter {\n  calculatedIntervalTreeMap: Record<string, IntervalTree> = {}\n\n  gtfFeatures?: Promise<{\n    header: string\n    intervalTreeMap: Record<string, (sc?: StatusCallback) => IntervalTree>\n  }>\n\n  private async loadDataP(opts?: BaseOptions) {\n    const { statusCallback = () => {} } = opts || {}\n    const buf = (await openLocation(\n      this.getConf('gtfLocation'),\n      this.pluginManager,\n    ).readFile(opts)) as Buffer\n\n    const buffer = isGzip(buf)\n      ? await updateStatus('Unzipping', statusCallback, () => unzip(buf))\n      : buf\n    const headerLines = []\n    const featureMap = {} as Record<string, string>\n    let blockStart = 0\n\n    let i = 0\n    while (blockStart < buffer.length) {\n      const n = buffer.indexOf('\\n', blockStart)\n      // could be a non-newline ended file, so slice to end of file if n===-1\n      const b =\n        n === -1 ? buffer.subarray(blockStart) : buffer.subarray(blockStart, n)\n      const line = (decoder?.decode(b) || b.toString()).trim()\n      if (line) {\n        if (line.startsWith('#')) {\n          headerLines.push(line)\n        } else if (line.startsWith('>')) {\n          break\n        } else {\n          const ret = line.indexOf('\\t')\n          const refName = line.slice(0, ret)\n          if (!featureMap[refName]) {\n            featureMap[refName] = ''\n          }\n          featureMap[refName] += `${line}\\n`\n        }\n      }\n      if (i++ % 10_000 === 0) {\n        statusCallback(\n          `Loading ${Math.floor(blockStart / 1_000_000).toLocaleString('en-US')}/${Math.floor(buffer.length / 1_000_000).toLocaleString('en-US')} MB`,\n        )\n      }\n\n      blockStart = n + 1\n    }\n\n    const intervalTreeMap = Object.fromEntries(\n      Object.entries(featureMap).map(([refName, lines]) => [\n        refName,\n        (sc?: (arg: string) => void) => {\n          if (!this.calculatedIntervalTreeMap[refName]) {\n            sc?.('Parsing GTF data')\n            const intervalTree = new IntervalTree()\n            ;(parseStringSync(lines) as FeatureLoc[][])\n              .flat()\n              .map(\n                (f, i) =>\n                  new SimpleFeature({\n                    data: featureData(f),\n                    id: `${this.id}-${refName}-${i}`,\n                  }),\n              )\n              .forEach(obj =>\n                intervalTree.insert([obj.get('start'), obj.get('end')], obj),\n              )\n            this.calculatedIntervalTreeMap[refName] = intervalTree\n          }\n          return this.calculatedIntervalTreeMap[refName]\n        },\n      ]),\n    )\n\n    return {\n      header: headerLines.join('\\n'),\n      intervalTreeMap,\n    }\n  }\n\n  private async loadData(opts: BaseOptions = {}) {\n    if (!this.gtfFeatures) {\n      this.gtfFeatures = this.loadDataP(opts).catch((e: unknown) => {\n        this.gtfFeatures = undefined\n        throw e\n      })\n    }\n\n    return this.gtfFeatures\n  }\n\n  public async getRefNames(opts: BaseOptions = {}) {\n    const { intervalTreeMap } = await this.loadData(opts)\n    return Object.keys(intervalTreeMap)\n  }\n\n  public async getHeader(opts: BaseOptions = {}) {\n    const { header } = await this.loadData(opts)\n    return header\n  }\n\n  public getFeatures(query: NoAssemblyRegion, opts: BaseOptions = {}) {\n    return ObservableCreate<Feature>(async observer => {\n      try {\n        const { start, end, refName } = query\n        const { intervalTreeMap } = await this.loadData(opts)\n        intervalTreeMap[refName]?.(opts.statusCallback)\n          .search([start, end])\n          .forEach(f => {\n            observer.next(f)\n          })\n        observer.complete()\n      } catch (e) {\n        observer.error(e)\n      }\n    }, opts.signal)\n  }\n  public freeResources(/* { region } */) {}\n}\n","import Parser from './parse'\n\nexport function parseStringSync(str: string): unknown[] {\n  if (!str) {\n    return []\n  }\n\n  const items: unknown[] = []\n\n  const parser = new Parser({\n    // @ts-expect-error\n    featureCallback: item => items.push(item),\n    // @ts-expect-error\n    errorCallback: err => {\n      throw err\n    },\n  })\n\n  for (const line of str.split(/\\r?\\n/)) {\n    parser.addLine(line)\n  }\n  parser.finish()\n\n  return items\n}\n"],"names":["fieldNames","s","String","replace","_","seq","fromCharCode","parseInt","_escape","regex","ch","hex","charCodeAt","toString","toUpperCase","length","translateStrand","_formatSingleFeature","f","seenFeature","attrString","attributes","undefined","attrs","attrOrder","Object","keys","forEach","tag","val","valstring","hasOwnProperty","Array","isArray","values","map","join","push","concat","formatAttributes","fields","i","formattedString","_formatFeature","feature","strings","multiSlot","formatFeature","featureOrFeatures","containerAttributes","Parent","Derives_from","Parser","constructor","args","nullFunc","assign","this","featureCallback","endCallback","commentCallback","errorCallback","directiveCallback","sequenceCallback","bufferSize","_underConstructionTopLevel","_underConstructionById","_completedReferences","_underConstructionOrphans","eof","lineNumber","addLine","line","test","_bufferLine","match","exec","hashsigns","contents","_emitAllUnderConstructionFeatures","directive","name","parsed","value","seqId","contentStart","contentEnd","split","seq_id","start","end","source","buildname","_emitItem","comment","errLine","Error","finish","_enforceBufferSizeLimit","additionalItemCount","_unbufferItem","item","ID","id","child_features","c","derived_features","d","shift","bind","filter","entry","JSON","stringify","featureLine","a","slice","attribute","attr","trim","arec","parseAttributes","score","parseFloat","strand","featureNumber","isTranscript","featureType","ids","transcript_id","parents","derives","parent","result","parse","createTranscript","existing","_resolveReferencesTo","_resolveReferencesFrom","references","attrname","pname","toLowerCase","loc","_parseError","message","entries","toIds","toId","otherFeature","parentFeature","childFeature","Math","min","max","obj","slot1","slot2","subObj","returnVal","postSet","location","featureData","data","phase","Number","frame","refName","seq_name","defaultFields","Set","b","has","replaceAll","type","subfeatures","flatMap","childLocs","childLoc","_linehash","decoder","TextDecoder","GtfAdapter","BaseFeatureDataAdapter","calculatedIntervalTreeMap","loadDataP","opts","statusCallback","buf","openLocation","getConf","pluginManager","readFile","buffer","isGzip","updateStatus","unzip","headerLines","featureMap","blockStart","n","indexOf","subarray","decode","startsWith","ret","floor","toLocaleString","intervalTreeMap","fromEntries","lines","sc","intervalTree","IntervalTree","str","items","parser","err","parseStringSync","flat","SimpleFeature","insert","get","header","loadData","gtfFeatures","catch","e","getRefNames","getHeader","getFeatures","query","ObservableCreate","async","search","observer","next","complete","error","signal","freeResources"],"sourceRoot":""}