@jbrowse/plugin-legacy-jbrowse 1.5.8 → 1.6.2

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.
@@ -189,14 +189,14 @@ function _inherits(subClass, superClass) {
189
189
  throw new TypeError("Super expression must either be null or a function");
190
190
  }
191
191
 
192
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
193
+ constructor: {
194
+ value: subClass,
195
+ writable: true,
196
+ configurable: true
197
+ }
198
+ });
192
199
  Object.defineProperty(subClass, "prototype", {
193
- value: Object.create(superClass && superClass.prototype, {
194
- constructor: {
195
- value: subClass,
196
- writable: true,
197
- configurable: true
198
- }
199
- }),
200
200
  writable: false
201
201
  });
202
202
  if (superClass) _setPrototypeOf(subClass, superClass);
@@ -1,2 +1,2 @@
1
- "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("@jbrowse/core/pluggableElementTypes/AdapterType")),r=e(require("@jbrowse/core/pluggableElementTypes/TextSearchAdapterType")),n=e(require("@jbrowse/core/pluggableElementTypes/ConnectionType")),a=e(require("@jbrowse/core/Plugin")),o=require("@jbrowse/core/configuration"),i=require("@jbrowse/core/data_adapters/BaseAdapter"),c=e(require("@jbrowse/core/TextSearch/BaseResults")),s=e(require("buffer-crc32")),u=require("@jbrowse/core/util/tracks"),l=require("@jbrowse/core/util"),f=require("@jbrowse/core/pluggableElementTypes/models"),p=require("mobx-state-tree"),h=require("@jbrowse/core/util/io"),d=e(require("get-value")),y=e(require("set-value")),v=e(require("@gmod/nclist")),m=require("@jbrowse/core/util/rxjs"),b=require("generic-filehandle");function g(e){var t,r,n,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);a--;){if(r&&null!=(t=e[r]))return t.call(e);if(n&&null!=(t=e[n]))return new w(t.call(e));r="@@asyncIterator",n="@@iterator"}throw new TypeError("Object is not async iterable")}function w(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return(w=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new w(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function x(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){F(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function k(e){return(k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e,t,r,n,a,o,i){try{var c=e[o](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,a)}function U(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){S(o,n,a,i,c,"next",e)}function c(e){S(o,n,a,i,c,"throw",e)}i(void 0)}))}}function L(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function j(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function B(e,t,r){return t&&j(e.prototype,t),r&&j(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function q(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");Object.defineProperty(e,"prototype",{value:Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),writable:!1}),t&&(Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function C(e){return(C=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function J(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function O(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=C(e);if(t){var a=C(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return J(this,r)}}function A(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||E(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?R(e,t):void 0}}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var _=o.ConfigurationSchema("NCListAdapter",{rootUrlTemplate:{type:"fileLocation",defaultValue:{uri:"/path/to/my/{refseq}/trackData.json",locationType:"UriLocation"}},refNames:{type:"stringArray",defaultValue:[],description:"List of refNames used by the NCList used for aliasing"}},{explicitlyTyped:!0});function P(e,t){return e(t={exports:{}},t.exports),t.exports}var N=P((function(e){var t=function(e){var t=Object.prototype,r=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",o=n.asyncIterator||"@@asyncIterator",i=n.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var a=Object.create((t&&t.prototype instanceof f?t:f).prototype),o=new k(n||[]);return a._invoke=function(e,t,r){var n="suspendedStart";return function(a,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw o;return{value:void 0,done:!0}}for(r.method=a,r.arg=o;;){var i=r.delegate;if(i){var c=w(i,r);if(c){if(c===l)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var s=u(e,t,r);if("normal"===s.type){if(n=r.done?"completed":"suspendedYield",s.arg===l)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n="completed",r.method="throw",r.arg=s.arg)}}}(e,r,o),a}function u(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var l={};function f(){}function p(){}function h(){}var d={};c(d,a,(function(){return this}));var y=Object.getPrototypeOf,v=y&&y(y(S([])));v&&v!==t&&r.call(v,a)&&(d=v);var m=h.prototype=f.prototype=Object.create(d);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function g(e,t){var n;this._invoke=function(a,o){function i(){return new t((function(n,i){!function n(a,o,i,c){var s=u(e[a],e,o);if("throw"!==s.type){var l=s.arg,f=l.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(f).then((function(e){l.value=e,i(l)}),(function(e){return n("throw",e,i,c)}))}c(s.arg)}(a,o,n,i)}))}return n=n?n.then(i,i):i()}}function w(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var n=u(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,l;var a=n.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function S(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:U}}function U(){return{value:void 0,done:!0}}return p.prototype=h,c(m,"constructor",h),c(h,"constructor",p),p.displayName=c(h,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,c(e,i,"GeneratorFunction")),e.prototype=Object.create(m),e},e.awrap=function(e){return{__await:e}},b(g.prototype),c(g.prototype,o,(function(){return this})),e.AsyncIterator=g,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new g(s(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},b(m),c(m,i,"Generator"),c(m,a,(function(){return this})),c(m,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=S,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(x),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return i.type="throw",i.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var a=this.tryEntries.length-1;a>=0;--a){var o=this.tryEntries[a],i=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var c=r.call(o,"catchLoc"),s=r.call(o,"finallyLoc");if(c&&s){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),x(r),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;x(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:S(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},e}(e.exports);try{regeneratorRuntime=t}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}})),I=function(){function e(t){L(this,e),this.url=/\/$/.test(t.url)?t.url:"".concat(t.url,"/")}var t,r,n,a,o,i,c,u;return B(e,[{key:"readMeta",value:(u=U(N.mark((function e(){var t,r,n,a;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadFile("meta.json");case 2:return r=(t=e.sent).compress,n=t.track_names,a=Math.ceil(t.hash_bits/4),e.abrupt("return",{hashHexCharacters:a,compress:r,tracks:n});case 6:case"end":return e.stop()}}),e,this)}))),function(){return u.apply(this,arguments)})},{key:"getHashHexCharacters",value:(c=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.hashHexCharacters);case 4:case"end":return e.stop()}}),e,this)}))),function(){return c.apply(this,arguments)})},{key:"getCompress",value:(i=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.compress);case 4:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"getTrackNames",value:(o=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.tracks);case 4:case"end":return e.stop()}}),e,this)}))),function(){return o.apply(this,arguments)})},{key:"get",value:(a=U(N.mark((function e(t){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getBucket(t);case 2:return e.abrupt("return",e.sent[t]);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"getBucket",value:(n=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.hash(t),e.next=3,this.hexToDirPath(r);case 3:return e.abrupt("return",this.loadFile(e.sent));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"loadFile",value:(r=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat(this.url).concat(t));case 2:if((r=e.sent).ok){e.next=5;break}throw new Error("HTTP ".concat(r.status," ").concat(r.statusText));case 5:return e.abrupt("return",r.json());case 6:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"hexToDirPath",value:(t=U(N.mark((function e(t){var r,n,a,o;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getHashHexCharacters();case 2:if(!(r=e.sent)){e.next=12;break}return e.next=6,this.getCompress();case 6:for(n=e.sent;t.length<8;)t="0".concat(t);for(t=t.substr(8-r),a=[],o=0;o<t.length;o+=3)a.push(t.substring(o,o+3));return e.abrupt("return","".concat(a.join("/"),".json").concat(n?"z":""));case 12:return e.abrupt("return","");case 13:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"hash",value:function(e){return s(Buffer.from(e)).toString("hex").toLowerCase().replace("-","n")}}]),e}(),D=function(e){q(a,i.BaseAdapter);var t,r,n=O(a);function a(e,t,r){var i;L(this,a),i=n.call(this,e,t,r);var c=o.readConfObject(e,"namesIndexLocation");if(!c)throw new Error("must provide namesIndexLocation");return i.httpMap=new I({url:c.baseUri?new URL(c.uri,c.baseUri).href:c.uri}),i}return B(a,[{key:"loadIndexFile",value:(r=U(N.mark((function e(t){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.httpMap.getBucket(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"searchIndex",value:(t=U(N.mark((function e(t){var r,n,a,o;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.searchType,n=t.queryString,e.t0=this.tracksNames,e.t0){e.next=6;break}return e.next=5,this.httpMap.getTrackNames();case 5:e.t0=e.sent;case 6:return a=e.t0,e.next=9,this.loadIndexFile(n.toLowerCase());case 9:if(!(o=e.sent)[n]){e.next=12;break}return e.abrupt("return",this.formatResults(o[n],a,r));case 12:return e.abrupt("return",[]);case 13:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"formatResults",value:function(e,t,r){return[].concat(A("exact"===r?[]:e.prefix.map((function(e){return new c({label:"object"===k(e)?e.name:e,matchedAttribute:"name",matchedObject:{result:e}})}))),A(e.exact.map((function(e){var r=e[0],n=e[1],a=e[4],o=e[5],i="".concat(e[3]||r,":").concat(a,"-").concat(o);return new c({locString:i,label:r,matchedAttribute:"name",matchedObject:e,trackId:t[n]})})))).filter((function(e){return"too many matches"!==e.getLabel()}))}},{key:"freeResources",value:function(){}}]),a}(),M=o.ConfigurationSchema("JBrowse1TextSearchAdapter",{namesIndexLocation:{type:"fileLocation",defaultValue:{uri:"/volvox/names",locationType:"UriLocation"},description:"the location of the JBrowse1 names index data directory"},tracks:{type:"stringArray",defaultValue:[],description:"List of tracks covered by text search adapter"},assemblyNames:{type:"stringArray",defaultValue:[],description:"List of assemblies covered by text search adapter"}},{explicitlyTyped:!0,explicitIdentifier:"textSearchAdapterId"}),V=o.ConfigurationSchema("JBrowse1Connection",{dataDirLocation:{type:"fileLocation",defaultValue:{uri:"http://mysite.com/jbrowse/data/",locationType:"UriLocation"},description:"the location of the JBrowse 1 data directory, often something like http://mysite.com/jbrowse/data/"},assemblyNames:{description:"name of the assembly the connection belongs to, should be a single entry",type:"stringArray",defaultValue:[]}},{baseConfiguration:f.baseConnectionConfig});function G(e){return e&&e.label&&"string"==typeof e.label}function W(e,t){for(var r=0,n=Object.keys(t);r<n.length;r++){var a=n[r];a in e&&"object"===k(t[a])&&"object"===k(e[a])?W(e[a],t[a]):void 0!==e[a]&&void 0===t[a]||(e[a]=t[a])}return e}function z(e){if(!e||"object"!==k(e)||"[object Function]"===Object.prototype.toString.call(e))return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);var t,r,n;if(Array.isArray(e))for(t=[],r=0,n=e.length;r<n;++r)r in e&&(t[r]=z(e[r]));else t=e.constructor?new e.constructor:{};return function(e,t,r){var n,a,o={};for(n in t)a=t[n],n in e&&(e[n]===a||n in o&&o[n]===a)||(e[n]=r?r(a):a);return e}(t,e,z)}function $(e,t){if("string"==typeof e){var r;try{r=JSON.parse(e)}catch(e){throw new Error("".concat(e," when parsing configuration."))}return Y(r,t)}return Y(e,t)}function H(e,t){var r;try{r=function(e,t){var r,n,a,o,i=[],c={tracks:{}};function s(){var e;if(void 0!==a)try{var s=a.match(/^json:(.+)/i);if(e=s?JSON.parse(s[1]):/^[+-]?[\d.,]+([eE][-+]?\d+)?$/.test(a)?parseFloat(a.replace(/,/g,"")):a,!r)throw new Error("Error parsing in section ".concat(i.join(" - ")));var u=i.concat(r).join(".");if("+="===n){var l=d(c,u);l?Array.isArray(l)||(l=[l]):l=[],l.push(e),e=l}"true"===e&&(e=!0),"false"===e&&(e=!1),y(c,u,e)}catch(e){throw new Error("syntax error".concat(t?" in ".concat(t):"").concat(o?" at line ".concat(o-1):""))}}return e.split("\n").forEach((function(e,t){o=t+1;var c,u,l=e.replace(/^\s*#.+/,"");if(c=l.match(/^\s*\[([^\]]+)/))s(),r=void 0,a=void 0,1===(i=c[1].trim().split(/\s*\.\s*/)).length&&"general"===i[0].toLowerCase()&&(i=[]);else if(c=l.match(void 0===a?/^([^+=]+)(\+?=)(.*)/:/^(\S[^+=]+)(\+?=)(.*)/)){s(),r=c[1].trim().split(/\s*\.\s*/);var f=function(e){if(Array.isArray(e))return e}(u=c)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(o.push(n.value),3!==o.length);i=!0);}catch(e){c=!0,a=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw a}}return o}}(u)||E(u,3)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();n=f[2],"include"===i.concat(r).join(".")&&(n="+="),a=c[3].trim()}else void 0!==r&&(c=l.match(/^\s{0,4}\+\s*(.+)/))?(s(),n="+=",a=c[1].trim()):void 0!==a&&(c=l.match(/^\s+(\S.*)/))?a+=a.length?" ".concat(c[1].trim()):c[1].trim():(s(),r=void 0,a=void 0)})),s(),c}(e,t)}catch(e){throw new Error("".concat(e," when parsing configuration."))}return Y(r,t)}function Y(e,t){if(e.tracks&&!Array.isArray(e.tracks))if(G(e.tracks))e.tracks=[e.tracks];else{for(var r=[],n=0,a=Object.keys(e.tracks);n<a.length;n++){var o=a[n],i=e.tracks[o];G(i)?r.push(i):r.push(x({label:o},i))}e.tracks=r}var c,s=e.trackMetadata;if(s&&s.sources){if("string"==typeof s.sources&&(s.sources=[s.sources]),(c=s.sources)&&c.url&&"string"==typeof c.url&&(s.sources=[s.sources]),!Array.isArray(s.sources)){for(var u=[],l=0,f=Object.keys(s.sources);l<f.length;l++){var p=f[l],h=s.sources[p];"name"in h||(h.name=p),u.push(h)}s.sources=u}s.sources=s.sources.map((function(e){if("string"==typeof e){var t={url:e},r=e.match(/\.(\w+)$/);return r&&(t.type=r[1].toLowerCase()),t}return e}))}if(e.sourceUrl=e.sourceUrl||t,e.sourceUrl.startsWith("/")&&(e.sourceUrl=new URL(e.sourceUrl,window.location.href).href),e.baseUrl=e.baseUrl||new URL(".",e.sourceUrl).href,e.baseUrl.length&&!e.baseUrl.endsWith("/")&&(e.baseUrl+="/"),e.sourceUrl){var d=[];e.tracks&&d.push.apply(d,A(e.tracks)),e.stores&&d.push.apply(d,A(Object.values(e.stores))),e.names&&d.push(e.names),d.forEach((function(t){t.baseUrl||(t.baseUrl=e.baseUrl||"/")})),e.refSeqs&&"string"==typeof e.refSeqs&&(e.refSeqs=new URL(e.refSeqs,e.sourceUrl).href),e.nameUrl&&(e.nameUrl=new URL(e.nameUrl,e.sourceUrl).href)}return e.stores=e.stores||{},(e.tracks||[]).forEach((function(t){if(t.config){var r=t.config;delete t.config,t=x(x({},r),t)}var n;t.store||(n="FeatureTrack"===t.type?"JBrowse/View/Track/HTMLFeatures":"ImageTrack"===t.type?"JBrowse/View/Track/FixedImage":"ImageTrack.Wiggle"===t.type?"JBrowse/View/Track/FixedImage/Wiggle":"SequenceTrack"===t.type?"JBrowse/View/Track/Sequence":X("JBrowse/View/Track",t.type),t.type=n,Q(e,t),t.histograms&&(t.histograms.baseUrl||(t.histograms.baseUrl=t.baseUrl),Q(e,t.histograms)))})),e}function X(e,t){return t?(t.includes("/")||(t="".concat(e,"/").concat(t)),t=t.replace(/^\//,"")):""}function Q(e,t){var r,n=t.urlTemplate,a=void 0===n?"":n;if(r=t.storeClass?X("JBrowse/Store",t.storeClass):function(e,t){return e?e.type&&e.type.includes("/FixedImage")?"JBrowse/Store/TiledImage/Fixed".concat(0===e.backendVersion?"_v0":""):/\.jsonz?$/i.test(t)?"JBrowse/Store/SeqFeature/NCList".concat(0===e.backendVersion?"_v0":""):/\.bam$/i.test(t)?"JBrowse/Store/SeqFeature/BAM":/\.cram$/i.test(t)?"JBrowse/Store/SeqFeature/CRAM":/\.gff3?$/i.test(t)?"JBrowse/Store/SeqFeature/GFF3":/\.bed$/i.test(t)?"JBrowse/Store/SeqFeature/BED":/\.vcf.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/VCFTabix":/\.gff3?.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/GFF3Tabix":/\.bed.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/BEDTabix":/\.(bw|bigwig)$/i.test(t)?"JBrowse/Store/SeqFeature/BigWig":/\.(bb|bigbed)$/i.test(t)?"JBrowse/Store/SeqFeature/BigBed":/\.(fa|fasta)$/i.test(t)?"JBrowse/Store/SeqFeature/IndexedFasta":/\.(fa|fasta)\.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/BgzipIndexedFasta":/\.2bit$/i.test(t)?"JBrowse/Store/SeqFeature/TwoBit":e.type&&e.type.endsWith("/Sequence")?"JBrowse/Store/Sequence/StaticChunked":"":""}(t,a)){var o=x(x({},t),{},{type:r});o.name="JBrowse/Store/Sequence/StaticChunked"!==r&&"JBrowse/Store/Sequence/IndexedFasta"!==r&&"JBrowse/Store/SeqFeature/IndexedFasta"!==r&&"JBrowse/Store/SeqFeature/BgzipIndexedFasta"!==r&&"JBrowse/Store/SeqFeature/TwoBit"!==r&&"JBrowse/Store/Sequence/TwoBit"!==r&&!t.useAsRefSeqStore||e.stores&&e.stores.refseqs?"store".concat(l.objectHash(o)):"refseqs",e.stores||(e.stores={}),e.stores[o.name]=o,t.store=o.name}else console.warn("Unable to determine an appropriate data store to use with track '".concat(t.label,"', please explicitly specify a storeClass in the configuration."))}function K(e){return void 0!==e.uri}function Z(e){return void 0!==e.localPath}function ee(){return(ee=U(N.mark((function e(){var t,r,n,a,o,i,c,s,u,l,f,p,h,d,y=arguments;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=y.length>1&&void 0!==y[1]?y[1]:{include:["{dataRoot}/trackList.json","{dataRoot}/tracks.conf"]},n=y.length>2&&void 0!==y[2]?y[2]:{uri:"",locationType:"UriLocation"},a="uri"in(t=y.length>0&&void 0!==y[0]?y[0]:{uri:"",locationType:"UriLocation"})?"uri":"localPath",o=JSON.parse(JSON.stringify(t)),i="",K(t)&&(i=t.uri),Z(t)&&(i=t.localPath),i.endsWith("/")&&(o[a]=i.slice(0,i.length-1)),!(K(n)&&n.uri||Z(n)&&n.localPath)){e.next=35;break}c="uri"in n?"uri":"localPath",s="",K(n)&&(s=n.uri),Z(n)&&(s=n.localPath),s.endsWith("/")&&(s=s.slice(0,s.length-1)),u={},l=0,f=["jbrowse.conf","jbrowse_conf.json"];case 17:if(!(l<f.length)){e.next=33;break}return p=f[l],h=null,e.prev=20,e.next=23,ne(F({},c,"".concat(s,"/").concat(p)));case 23:h=e.sent,e.next=29;break;case 26:e.prev=26,e.t0=e.catch(20),console.error("tried to access ".concat(s,"/").concat(p,", but failed"));case 29:u=ie(u,h)||{};case 30:l++,e.next=17;break;case 33:return o[a]&&(u.dataRoot=o[a]),e.abrupt("return",te(u));case 35:return d=Y(r,window.location.href),o[a]&&(d.dataRoot=o[a]),e.abrupt("return",te(d));case 38:case"end":return e.stop()}}),e,null,[[20,26]])})))).apply(this,arguments)}function te(e){return re.apply(this,arguments)}function re(){return(re=U(N.mark((function e(t){var r,n,a=arguments;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=W(z(a.length>1&&void 0!==a[1]?a[1]:pe),t),e.next=4,se(r);case 4:return fe(n=ie(n=e.sent,t)||n,n),he(n),e.abrupt("return",n);case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ne(e){return ae.apply(this,arguments)}function ae(){return(ae=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,h.openLocation(t).readFile("utf8");case 2:if(r=e.sent,!K(t)){e.next=5;break}return e.abrupt("return",oe(r,t.uri));case 5:if(!Z(t)){e.next=7;break}return e.abrupt("return",oe(r,t.localPath));case 7:return e.abrupt("return",oe(r));case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function oe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.trim().startsWith("{")?$(e,t):H(e,t)}function ie(e,t){if(null===t)return null;null===e&&(e={});for(var r=0,n=Object.keys(t);r<n.length;r++){var a=n[r];if("tracks"===a&&a in e){var o=e[a]||[],i=t[a]||[];if(!Array.isArray(o)||!Array.isArray(i))throw new Error("Track config has not been properly regularized: ".concat(o," ").concat(i));e[a]=ce(o||[],i||[])}else"datasets"!==a&&a in e&&"object"===k(t[a])&&"object"===k(e[a])?e[a]=W(e[a],t[a]):"dataRoot"===a?(void 0===e[a]||"data"===e[a]&&void 0!==t[a])&&(e[a]=t[a]):void 0!==e[a]&&void 0===t[a]||(e[a]=t[a])}return e}function ce(e,t){if(!t.length)return e;var r={};return e.forEach((function(e,t){e.index=t,r[e.label]=e})),t.forEach((function(t){var n=r[t.label];n?ie(n,t):e.push(t)})),e}function se(e){return ue.apply(this,arguments)}function ue(){return(ue=U(N.mark((function e(t){var r,n;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=function(){return(n=U(N.mark((function e(n,a){var o,i,c,s;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=n.sourceUrl||n.baseUrl){e.next=3;break}throw new Error("Could not determine source URL: ".concat(JSON.stringify(n)));case 3:if(i=ie(z(a),n)){e.next=6;break}throw new Error("Problem merging configs");case 6:return c=fe(le(n.include||[]),i),delete n.include,s=c.map(function(){var e=U(N.mark((function e(n){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.cacheBuster=t.cacheBuster,e.next=3,ne({uri:new URL(n.url,o).href,locationType:"UriLocation"});case 3:return e.abrupt("return",r(e.sent,i));case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),e.next=11,Promise.all(s);case 11:return e.sent.forEach((function(e){n=ie(n,e)||n})),e.abrupt("return",n);case 14:case"end":return e.stop()}}),e)})))).apply(this,arguments)},r=function(e,t){return n.apply(this,arguments)},t=z(t),e.abrupt("return",r(t,{}));case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function le(e){return e?(Array.isArray(e)||(e=[e]),e.map((function(e){return"string"==typeof e&&(e={url:e}),"format"in e||(e.format=e.url.endsWith(".conf")?"conf":"JB_json"),"JB_json"!==e.format||"version"in e||(e.version=1),e}))):[]}function fe(e,t){if(!e)return e;if(Array.isArray(e))for(var r=0;r<e.length;r+=1)e[r]=fe(e[r],t);else if("object"===k(e))for(var n=e,a=0,o=Object.keys(n);a<o.length;a++){var i=o[a];n[i]=fe(n[i],t)}else if("string"==typeof e)return function(e,t){var r=this;return e.replace(/\{([\w\s.]+)\}/g,(function(e,n){n=n.replace(/\s+/g,"");var a=d(t,n);if(void 0!==a)return"function"==typeof a?a(n):a;if(t.callback){var o=t.callback.call(r,n);if(void 0!==o)return o}return e}))}(e,t);return e}var pe={tracks:[],containerID:"GenomeBrowser",dataRoot:"data",show_tracklist:!0,show_nav:!0,show_menu:!0,show_overview:!0,show_fullviewlink:!0,update_browser_title:!0,updateBrowserURL:!0,refSeqs:"{dataRoot}/seq/refSeqs.json",include:["jbrowse.conf","jbrowse_conf.json"],nameUrl:"{dataRoot}/names/root.json",datasets:{_DEFAULT_EXAMPLES:!0,volvox:{url:"?data=sample_data/json/volvox",name:"Volvox Example"},modencode:{url:"?data=sample_data/json/modencode",name:"MODEncode Example"},yeast:{url:"?data=sample_data/json/yeast",name:"Yeast Example"}},highlightSearchedRegions:!1,highResolutionMode:"auto"};function he(e){if(e.tracks||(e.tracks=[]),!e.baseUrl)throw new Error("Must provide a `baseUrl` in configuration")}function de(e){return p.types.compose("JBrowse1Connection",f.BaseConnectionModelFactory(e),p.types.model({configuration:o.ConfigurationReference(V),type:p.types.literal("JBrowse1Connection")}).actions((function(e){return{connect:function(){var t=o.readConfObject(e.configuration,"dataDirLocation"),r=l.getSession(e);(function(){return ee.apply(this,arguments)})(t).then((function(t){var n=o.readConfObject(e.configuration,"assemblyNames")[0];if(!n)throw new Error("assembly name required for JBrowse 1 connection");var a=r.assemblies.find((function(e){return o.readConfObject(e,"name")===n})),i=o.readConfObject(a,["sequence","adapter"]),c=t.tracks.map((function(e){var r=function(e,t,r){var n={trackId:l.objectHash(e),name:e.key||e.label},a=e.metadata&&(e.metadata.description||e.metadata.Description);a&&(n.description=a);var o=e.category||e.metadata&&e.metadata.category;n.category=o?o.split(/\s*\/\s*/):[];var i=e.storeClass;if(!e.urlTemplate){if(!i||!i.endsWith("FromConfig")){var c=e.key||e.label;return console.warn('Could not import JBrowse1 track "'.concat(c,'" because it does not have a "urlTemplate" or is not a "FromConfig" track')),u.generateUnsupportedTrackConf(n.name,c,n.category)}return function(e,t){var r=(e.features||[]).map((function(e){var t=JSON.parse(JSON.stringify(e));return t.refName=e.seq_id,t.uniqueId="".concat(e.seq_id,":").concat(e.start,"-").concat(e.end,":").concat(e.name||""),t}));return t.adapter={type:"FromConfigAdapter",features:r},t.type="FeatureTrack",t}(e,n)}var s=function(e){return new URL(e,"".concat(t,"/")).href.replace(/%7B/gi,"{").replace(/%7D/gi,"}")},f=s(e.urlTemplate);if(i){if("JBrowse/Store/SeqFeature/BAM"===i){var p={type:"BamAdapter",bamLocation:{uri:f,locationType:"UriLocation"}};return p.index=e.baiUrlTemplate?{location:{uri:s(e.baiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".bai"),locationType:"UriLocation"}},x(x({},n),{},{type:"AlignmentsTrack",adapter:p})}if("JBrowse/Store/SeqFeature/CRAM"===i){var h={type:"CramAdapter",cramLocation:{uri:f,locationType:"UriLocation"},sequenceAdapter:r};return h.craiLocation=e.craiUrlTemplate?{uri:s(e.craiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".crai"),locationType:"UriLocation"},x(x({},n),{},{type:"AlignmentsTrack",adapter:h})}if("JBrowse/Store/SeqFeature/NCList"===i)return x(x({},n),{},{type:"FeatureTrack",adapter:{type:"NCListAdapter",rootUrlTemplate:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/BigWig"===i||"JBrowse/Store/BigWig"===i)return e.type&&e.type.endsWith("XYPlot")?n.defaultRendering="xyplot":e.type&&e.type.endsWith("Density")&&(n.defaultRendering="density"),x(x({},n),{},{type:"QuantitativeTrack",adapter:{type:"BigWigAdapter",bigWigLocation:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/VCFTabix"===i){var d={type:"VcfTabixAdapter",vcfGzLocation:{uri:f,locationType:"UriLocation"}};return d.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"VariantTrack",adapter:d})}if("JBrowse/Store/SeqFeature/VCFTribble"===i)return u.generateUnsupportedTrackConf(n.name,"VCFTribble (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/GFF3"===i)return u.generateUnsupportedTrackConf(n.name,"GFF3 (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/BigBed"===i)return x(x({},n),{},{type:"FeatureTrack",adapter:{type:"BigBedAdapter",bigBedLocation:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/GFF3Tabix"===i){var y={type:"Gff3TabixAdapter",gffGzLocation:{uri:f,locationType:"UriLocation"}};return y.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"FeatureTrack",adapter:y})}if("JBrowse/Store/SeqFeature/BED"===i)return u.generateUnsupportedTrackConf(n.name,"BED (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/BEDTabix"===i){var v={type:"BedTabixAdapter",bedGzLocation:{uri:f,locationType:"UriLocation"}};return v.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"FeatureTrack",adapter:v})}if("JBrowse/Store/SeqFeature/GTF"===i)return u.generateUnsupportedTrackConf(n.name,"GTF (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/StaticChunked"===i||"JBrowse/Store/Sequence/StaticChunked"===i)return u.generateUnsupportedTrackConf(n.name,"StaticChunked (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/UnindexedFasta"===i)return u.generateUnsupportedTrackConf(n.name,"UnindexedFasta (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/IndexedFasta"===i){var m={type:"IndexedFastaAdapter",fastaLocation:{uri:f,locationType:"UriLocation"}};return m.faiLocation=e.faiUrlTemplate?{uri:s(e.faiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".fai"),locationType:"UriLocation"},x(x({},n),{},{type:"SequenceTrack",adapter:m})}if("JBrowse/Store/SeqFeature/BgzipIndexedFasta"===i){var b={type:"BgzipFastaAdapter",fastaLocation:{uri:f,locationType:"UriLocation"}};return b.faiLocation=e.faiUrlTemplate?{uri:s(e.faiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".fai"),locationType:"UriLocation"},b.gziLocation=e.gziUrlTemplate?{uri:s(e.gziUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".gzi"),locationType:"UriLocation"},x(x({},n),{},{type:"ReferenceSequenceTrack",adapter:b})}if("JBrowse/Store/SeqFeature/TwoBit"===i)return x(x({},n),{},{type:"ReferenceSequenceTrack",adapter:{type:"TwoBitAdapter",twoBitLocation:{uri:f,locationType:"UriLocation"}}})}if(n.adapter=u.guessAdapter({uri:f,locationType:"UriLocation"},void 0,f),!n.adapter)throw new Error("Could not determine adapter");return n.adapter.type===u.UNSUPPORTED?u.generateUnsupportedTrackConf(n.name,f,n.category):n.adapter.type===u.UNKNOWN?u.generateUnknownTrackConf(n.name,f,n.category):(n.type=u.guessTrackType(n.adapter.type),"QuantitativeTrack"===n.type&&(e.type&&e.type.endsWith("XYPlot")?n.defaultRendering="xyplot":e.type&&e.type.endsWith("Density")&&(n.defaultRendering="density")),n)}(e,t.dataRoot,i);return r.assemblyNames=[n],r}));e.setTrackConfs(c)})).catch((function(t){console.error(t),r.notify('There was a problem connecting to the JBrowse 1 data directory "'.concat(e.name,'". Please make sure you have entered a valid location. The error that was thrown is: "').concat(t,'"'),"error"),r.breakConnection(e.configuration)}))}}})))}var ye=function(e){q(i,a);var o=O(i);function i(){var e;return L(this,i),(e=o.apply(this,arguments)).name="LegacyJBrowsePlugin",e}return B(i,[{key:"install",value:function(e){e.addAdapterType((function(){return new t({name:"NCListAdapter",configSchema:_,getAdapterClass:function(){return Promise.resolve().then((function(){return ge})).then((function(e){return e.default}))}})})),e.addToExtensionPoint("Core-guessAdapterForLocation",(function(e){return function(t,r,n){var a=u.getFileName(t);return/trackData.jsonz?$/i.test(a)||"NCListAdapter"===n?{type:"NCListAdapter",rootUrlTemplate:t}:e(t,r,n)}})),e.addTextSearchAdapterType((function(){return new r({name:"JBrowse1TextSearchAdapter",configSchema:M,AdapterClass:D,description:"A JBrowse 1 text search adapter"})})),e.addConnectionType((function(){return new n({name:"JBrowse1Connection",configSchema:V,stateModel:de(e),displayName:"JBrowse 1 Data",description:"A JBrowse 1 data directory",url:"//jbrowse.org/"})}))}}]),i}(),ve={refName:"seq_id"},me={seq_id:"refName"},be=function(){function e(t,r,n){L(this,e),this.ncFeature=t,this.uniqueId=n||t.id(),this.parentHandle=r}return B(e,[{key:"set",value:function(){throw new Error("not implemented")}},{key:"jb2TagToJb1Tag",value:function(e){return(ve[e]||e).toLowerCase()}},{key:"jb1TagToJb2Tag",value:function(e){var t=e.toLowerCase();return me[t]||t}},{key:"get",value:function(t){var r=this,n=this.ncFeature.get(this.jb2TagToJb1Tag(t));return n&&"subfeatures"===t?n.map((function(t){return new e(t,r)})):n}},{key:"tags",value:function(){var e=this;return this.ncFeature.tags().map((function(t){return e.jb1TagToJb2Tag(t)}))}},{key:"id",value:function(){return this.uniqueId}},{key:"parent",value:function(){return this.parentHandle}},{key:"children",value:function(){return this.get("subfeatures")}},{key:"toJSON",value:function(){var t=this,r={uniqueId:this.id()};return this.ncFeature.tags().forEach((function(n){var a=t.jb1TagToJb2Tag(n),o=t.ncFeature.get(n);"subfeatures"===a?r.subfeatures=(o||[]).map((function(r){return new e(r,t).toJSON()})):r[a]=o})),r}}]),e}(),ge={__proto__:null,default:function(e){q(n,i.BaseFeatureDataAdapter);var t,r=O(n);function n(e,t,a){var i;L(this,n),i=r.call(this,e,t,a);var c=o.readConfObject(e,"refNames"),s=o.readConfObject(e,"rootUrlTemplate");return i.configRefNames=c,i.nclist=new v({baseUrl:"",urlTemplate:s.uri,readFile:function(e){return new b.RemoteFile(String(s.baseUri?new URL(e,s.baseUri).toString():e)).readFile()}}),i}return B(n,[{key:"getFeatures",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return m.ObservableCreate(function(){var n=U(N.mark((function n(a){var o,i,c,s,u,f,p;return N.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:o=r.signal,i=!1,c=!1,n.prev=3,u=g(t.nclist.getFeatures(e,r));case 5:return n.next=7,u.next();case 7:if(!(i=!(f=n.sent).done)){n.next=14;break}p=f.value,l.checkAbortSignal(o),a.next(t.wrapFeature(p));case 11:i=!1,n.next=5;break;case 14:n.next=20;break;case 16:n.prev=16,n.t0=n.catch(3),c=!0,s=n.t0;case 20:if(n.prev=20,n.prev=21,!i||null==u.return){n.next=25;break}return n.next=25,u.return();case 25:if(n.prev=25,!c){n.next=28;break}throw s;case 28:return n.finish(25);case 29:return n.finish(20);case 30:a.complete();case 31:case"end":return n.stop()}}),n,null,[[3,16,20,30],[21,,25,29]])})));return function(e){return n.apply(this,arguments)}}())}},{key:"wrapFeature",value:function(e){return new be(e,void 0,"".concat(this.id,"-").concat(e.id()))}},{key:"hasDataForRefName",value:(t=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.nclist.getDataRoot(t);case 2:return e.abrupt("return",!!((r=e.sent)&&r.stats&&r.stats.featureCount));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"getRefNames",value:function(){return Promise.resolve(this.configRefNames||[])}},{key:"freeResources",value:function(){}}]),n}()};exports.default=ye;
1
+ "use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(exports,"__esModule",{value:!0});var t=e(require("@jbrowse/core/pluggableElementTypes/AdapterType")),r=e(require("@jbrowse/core/pluggableElementTypes/TextSearchAdapterType")),n=e(require("@jbrowse/core/pluggableElementTypes/ConnectionType")),a=e(require("@jbrowse/core/Plugin")),o=require("@jbrowse/core/configuration"),i=require("@jbrowse/core/data_adapters/BaseAdapter"),c=e(require("@jbrowse/core/TextSearch/BaseResults")),s=e(require("buffer-crc32")),u=require("@jbrowse/core/util/tracks"),l=require("@jbrowse/core/util"),f=require("@jbrowse/core/pluggableElementTypes/models"),p=require("mobx-state-tree"),h=require("@jbrowse/core/util/io"),d=e(require("get-value")),y=e(require("set-value")),m=e(require("@gmod/nclist")),v=require("@jbrowse/core/util/rxjs"),b=require("generic-filehandle");function g(e){var t,r,n,a=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);a--;){if(r&&null!=(t=e[r]))return t.call(e);if(n&&null!=(t=e[n]))return new w(t.call(e));r="@@asyncIterator",n="@@iterator"}throw new TypeError("Object is not async iterable")}function w(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return(w=function(e){this.s=e,this.n=e.next}).prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new w(e)}function T(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function x(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?T(Object(r),!0).forEach((function(t){F(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):T(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function k(e){return(k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function S(e,t,r,n,a,o,i){try{var c=e[o](i),s=c.value}catch(e){return void r(e)}c.done?t(s):Promise.resolve(s).then(n,a)}function U(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){S(o,n,a,i,c,"next",e)}function c(e){S(o,n,a,i,c,"throw",e)}i(void 0)}))}}function L(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function j(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function B(e,t,r){return t&&j(e.prototype,t),r&&j(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function F(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function q(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&(Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function C(e){return(C=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function J(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}function O(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,n=C(e);if(t){var a=C(this).constructor;r=Reflect.construct(n,arguments,a)}else r=n.apply(this,arguments);return J(this,r)}}function A(e){return function(e){if(Array.isArray(e))return R(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||E(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){if(e){if("string"==typeof e)return R(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?R(e,t):void 0}}function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var _=o.ConfigurationSchema("NCListAdapter",{rootUrlTemplate:{type:"fileLocation",defaultValue:{uri:"/path/to/my/{refseq}/trackData.json",locationType:"UriLocation"}},refNames:{type:"stringArray",defaultValue:[],description:"List of refNames used by the NCList used for aliasing"}},{explicitlyTyped:!0});function P(e,t){return e(t={exports:{}},t.exports),t.exports}var N=P((function(e){var t=function(e){var t=Object.prototype,r=t.hasOwnProperty,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",o=n.asyncIterator||"@@asyncIterator",i=n.toStringTag||"@@toStringTag";function c(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{c({},"")}catch(e){c=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var a=Object.create((t&&t.prototype instanceof f?t:f).prototype),o=new k(n||[]);return a._invoke=function(e,t,r){var n="suspendedStart";return function(a,o){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===a)throw o;return{value:void 0,done:!0}}for(r.method=a,r.arg=o;;){var i=r.delegate;if(i){var c=w(i,r);if(c){if(c===l)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var s=u(e,t,r);if("normal"===s.type){if(n=r.done?"completed":"suspendedYield",s.arg===l)continue;return{value:s.arg,done:r.done}}"throw"===s.type&&(n="completed",r.method="throw",r.arg=s.arg)}}}(e,r,o),a}function u(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}e.wrap=s;var l={};function f(){}function p(){}function h(){}var d={};c(d,a,(function(){return this}));var y=Object.getPrototypeOf,m=y&&y(y(S([])));m&&m!==t&&r.call(m,a)&&(d=m);var v=h.prototype=f.prototype=Object.create(d);function b(e){["next","throw","return"].forEach((function(t){c(e,t,(function(e){return this._invoke(t,e)}))}))}function g(e,t){var n;this._invoke=function(a,o){function i(){return new t((function(n,i){!function n(a,o,i,c){var s=u(e[a],e,o);if("throw"!==s.type){var l=s.arg,f=l.value;return f&&"object"==typeof f&&r.call(f,"__await")?t.resolve(f.__await).then((function(e){n("next",e,i,c)}),(function(e){n("throw",e,i,c)})):t.resolve(f).then((function(e){l.value=e,i(l)}),(function(e){return n("throw",e,i,c)}))}c(s.arg)}(a,o,n,i)}))}return n=n?n.then(i,i):i()}}function w(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,w(e,t),"throw"===t.method))return l;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return l}var n=u(r,e.iterator,t.arg);if("throw"===n.type)return t.method="throw",t.arg=n.arg,t.delegate=null,l;var a=n.arg;return a?a.done?(t[e.resultName]=a.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,l):a:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,l)}function T(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function x(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(T,this),this.reset(!0)}function S(e){if(e){var t=e[a];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,o=function t(){for(;++n<e.length;)if(r.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:U}}function U(){return{value:void 0,done:!0}}return p.prototype=h,c(v,"constructor",h),c(h,"constructor",p),p.displayName=c(h,i,"GeneratorFunction"),e.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===p||"GeneratorFunction"===(t.displayName||t.name))},e.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,h):(e.__proto__=h,c(e,i,"GeneratorFunction")),e.prototype=Object.create(v),e},e.awrap=function(e){return{__await:e}},b(g.prototype),c(g.prototype,o,(function(){return this})),e.AsyncIterator=g,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new g(s(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},b(v),c(v,i,"Generator"),c(v,a,(function(){return this})),c(v,"toString",(function(){return"[object Generator]"})),e.keys=function(e){var t=[];for(var r in e)t.push(r);return t.reverse(),function r(){for(;t.length;){var n=t.pop();if(n in e)return r.value=n,r.done=!1,r}return r.done=!0,r}},e.values=S,k.prototype={constructor:k,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(x),!e)for(var t in this)"t"===t.charAt(0)&&r.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function n(r,n){return i.type="throw",i.arg=e,t.next=r,n&&(t.method="next",t.arg=void 0),!!n}for(var a=this.tryEntries.length-1;a>=0;--a){var o=this.tryEntries[a],i=o.completion;if("root"===o.tryLoc)return n("end");if(o.tryLoc<=this.prev){var c=r.call(o,"catchLoc"),s=r.call(o,"finallyLoc");if(c&&s){if(this.prev<o.catchLoc)return n(o.catchLoc,!0);if(this.prev<o.finallyLoc)return n(o.finallyLoc)}else if(c){if(this.prev<o.catchLoc)return n(o.catchLoc,!0)}else{if(!s)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return n(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,l):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),l},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),x(r),l}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;x(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:S(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),l}},e}(e.exports);try{regeneratorRuntime=t}catch(e){"object"==typeof globalThis?globalThis.regeneratorRuntime=t:Function("r","regeneratorRuntime = r")(t)}})),I=function(){function e(t){L(this,e),this.url=/\/$/.test(t.url)?t.url:"".concat(t.url,"/")}var t,r,n,a,o,i,c,u;return B(e,[{key:"readMeta",value:(u=U(N.mark((function e(){var t,r,n,a;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.loadFile("meta.json");case 2:return r=(t=e.sent).compress,n=t.track_names,a=Math.ceil(t.hash_bits/4),e.abrupt("return",{hashHexCharacters:a,compress:r,tracks:n});case 6:case"end":return e.stop()}}),e,this)}))),function(){return u.apply(this,arguments)})},{key:"getHashHexCharacters",value:(c=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.hashHexCharacters);case 4:case"end":return e.stop()}}),e,this)}))),function(){return c.apply(this,arguments)})},{key:"getCompress",value:(i=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.compress);case 4:case"end":return e.stop()}}),e,this)}))),function(){return i.apply(this,arguments)})},{key:"getTrackNames",value:(o=U(N.mark((function e(){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.readMeta();case 2:return e.abrupt("return",e.sent.tracks);case 4:case"end":return e.stop()}}),e,this)}))),function(){return o.apply(this,arguments)})},{key:"get",value:(a=U(N.mark((function e(t){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getBucket(t);case 2:return e.abrupt("return",e.sent[t]);case 4:case"end":return e.stop()}}),e,this)}))),function(e){return a.apply(this,arguments)})},{key:"getBucket",value:(n=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=this.hash(t),e.next=3,this.hexToDirPath(r);case 3:return e.abrupt("return",this.loadFile(e.sent));case 5:case"end":return e.stop()}}),e,this)}))),function(e){return n.apply(this,arguments)})},{key:"loadFile",value:(r=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch("".concat(this.url).concat(t));case 2:if((r=e.sent).ok){e.next=5;break}throw new Error("HTTP ".concat(r.status," ").concat(r.statusText));case 5:return e.abrupt("return",r.json());case 6:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"hexToDirPath",value:(t=U(N.mark((function e(t){var r,n,a,o;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.getHashHexCharacters();case 2:if(!(r=e.sent)){e.next=12;break}return e.next=6,this.getCompress();case 6:for(n=e.sent;t.length<8;)t="0".concat(t);for(t=t.substr(8-r),a=[],o=0;o<t.length;o+=3)a.push(t.substring(o,o+3));return e.abrupt("return","".concat(a.join("/"),".json").concat(n?"z":""));case 12:return e.abrupt("return","");case 13:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"hash",value:function(e){return s(Buffer.from(e)).toString("hex").toLowerCase().replace("-","n")}}]),e}(),D=function(e){q(a,i.BaseAdapter);var t,r,n=O(a);function a(e,t,r){var i;L(this,a),i=n.call(this,e,t,r);var c=o.readConfObject(e,"namesIndexLocation");if(!c)throw new Error("must provide namesIndexLocation");return i.httpMap=new I({url:c.baseUri?new URL(c.uri,c.baseUri).href:c.uri}),i}return B(a,[{key:"loadIndexFile",value:(r=U(N.mark((function e(t){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",this.httpMap.getBucket(t));case 1:case"end":return e.stop()}}),e,this)}))),function(e){return r.apply(this,arguments)})},{key:"searchIndex",value:(t=U(N.mark((function e(t){var r,n,a,o;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=t.searchType,n=t.queryString,e.t0=this.tracksNames,e.t0){e.next=6;break}return e.next=5,this.httpMap.getTrackNames();case 5:e.t0=e.sent;case 6:return a=e.t0,e.next=9,this.loadIndexFile(n.toLowerCase());case 9:if(!(o=e.sent)[n]){e.next=12;break}return e.abrupt("return",this.formatResults(o[n],a,r));case 12:return e.abrupt("return",[]);case 13:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"formatResults",value:function(e,t,r){return[].concat(A("exact"===r?[]:e.prefix.map((function(e){return new c({label:"object"===k(e)?e.name:e,matchedAttribute:"name",matchedObject:{result:e}})}))),A(e.exact.map((function(e){var r=e[0],n=e[1],a=e[4],o=e[5],i="".concat(e[3]||r,":").concat(a,"-").concat(o);return new c({locString:i,label:r,matchedAttribute:"name",matchedObject:e,trackId:t[n]})})))).filter((function(e){return"too many matches"!==e.getLabel()}))}},{key:"freeResources",value:function(){}}]),a}(),M=o.ConfigurationSchema("JBrowse1TextSearchAdapter",{namesIndexLocation:{type:"fileLocation",defaultValue:{uri:"/volvox/names",locationType:"UriLocation"},description:"the location of the JBrowse1 names index data directory"},tracks:{type:"stringArray",defaultValue:[],description:"List of tracks covered by text search adapter"},assemblyNames:{type:"stringArray",defaultValue:[],description:"List of assemblies covered by text search adapter"}},{explicitlyTyped:!0,explicitIdentifier:"textSearchAdapterId"}),V=o.ConfigurationSchema("JBrowse1Connection",{dataDirLocation:{type:"fileLocation",defaultValue:{uri:"http://mysite.com/jbrowse/data/",locationType:"UriLocation"},description:"the location of the JBrowse 1 data directory, often something like http://mysite.com/jbrowse/data/"},assemblyNames:{description:"name of the assembly the connection belongs to, should be a single entry",type:"stringArray",defaultValue:[]}},{baseConfiguration:f.baseConnectionConfig});function G(e){return e&&e.label&&"string"==typeof e.label}function W(e,t){for(var r=0,n=Object.keys(t);r<n.length;r++){var a=n[r];a in e&&"object"===k(t[a])&&"object"===k(e[a])?W(e[a],t[a]):void 0!==e[a]&&void 0===t[a]||(e[a]=t[a])}return e}function z(e){if(!e||"object"!==k(e)||"[object Function]"===Object.prototype.toString.call(e))return e;if(e.nodeType&&"cloneNode"in e)return e.cloneNode(!0);if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);var t,r,n;if(Array.isArray(e))for(t=[],r=0,n=e.length;r<n;++r)r in e&&(t[r]=z(e[r]));else t=e.constructor?new e.constructor:{};return function(e,t,r){var n,a,o={};for(n in t)a=t[n],n in e&&(e[n]===a||n in o&&o[n]===a)||(e[n]=r?r(a):a);return e}(t,e,z)}function $(e,t){if("string"==typeof e){var r;try{r=JSON.parse(e)}catch(e){throw new Error("".concat(e," when parsing configuration."))}return Y(r,t)}return Y(e,t)}function H(e,t){var r;try{r=function(e,t){var r,n,a,o,i=[],c={tracks:{}};function s(){var e;if(void 0!==a)try{var s=a.match(/^json:(.+)/i);if(e=s?JSON.parse(s[1]):/^[+-]?[\d.,]+([eE][-+]?\d+)?$/.test(a)?parseFloat(a.replace(/,/g,"")):a,!r)throw new Error("Error parsing in section ".concat(i.join(" - ")));var u=i.concat(r).join(".");if("+="===n){var l=d(c,u);l?Array.isArray(l)||(l=[l]):l=[],l.push(e),e=l}"true"===e&&(e=!0),"false"===e&&(e=!1),y(c,u,e)}catch(e){throw new Error("syntax error".concat(t?" in ".concat(t):"").concat(o?" at line ".concat(o-1):""))}}return e.split("\n").forEach((function(e,t){o=t+1;var c,u,l=e.replace(/^\s*#.+/,"");if(c=l.match(/^\s*\[([^\]]+)/))s(),r=void 0,a=void 0,1===(i=c[1].trim().split(/\s*\.\s*/)).length&&"general"===i[0].toLowerCase()&&(i=[]);else if(c=l.match(void 0===a?/^([^+=]+)(\+?=)(.*)/:/^(\S[^+=]+)(\+?=)(.*)/)){s(),r=c[1].trim().split(/\s*\.\s*/);var f=function(e){if(Array.isArray(e))return e}(u=c)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o=[],i=!0,c=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(o.push(n.value),3!==o.length);i=!0);}catch(e){c=!0,a=e}finally{try{i||null==r.return||r.return()}finally{if(c)throw a}}return o}}(u)||E(u,3)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();n=f[2],"include"===i.concat(r).join(".")&&(n="+="),a=c[3].trim()}else void 0!==r&&(c=l.match(/^\s{0,4}\+\s*(.+)/))?(s(),n="+=",a=c[1].trim()):void 0!==a&&(c=l.match(/^\s+(\S.*)/))?a+=a.length?" ".concat(c[1].trim()):c[1].trim():(s(),r=void 0,a=void 0)})),s(),c}(e,t)}catch(e){throw new Error("".concat(e," when parsing configuration."))}return Y(r,t)}function Y(e,t){if(e.tracks&&!Array.isArray(e.tracks))if(G(e.tracks))e.tracks=[e.tracks];else{for(var r=[],n=0,a=Object.keys(e.tracks);n<a.length;n++){var o=a[n],i=e.tracks[o];G(i)?r.push(i):r.push(x({label:o},i))}e.tracks=r}var c,s=e.trackMetadata;if(s&&s.sources){if("string"==typeof s.sources&&(s.sources=[s.sources]),(c=s.sources)&&c.url&&"string"==typeof c.url&&(s.sources=[s.sources]),!Array.isArray(s.sources)){for(var u=[],l=0,f=Object.keys(s.sources);l<f.length;l++){var p=f[l],h=s.sources[p];"name"in h||(h.name=p),u.push(h)}s.sources=u}s.sources=s.sources.map((function(e){if("string"==typeof e){var t={url:e},r=e.match(/\.(\w+)$/);return r&&(t.type=r[1].toLowerCase()),t}return e}))}if(e.sourceUrl=e.sourceUrl||t,e.sourceUrl.startsWith("/")&&(e.sourceUrl=new URL(e.sourceUrl,window.location.href).href),e.baseUrl=e.baseUrl||new URL(".",e.sourceUrl).href,e.baseUrl.length&&!e.baseUrl.endsWith("/")&&(e.baseUrl+="/"),e.sourceUrl){var d=[];e.tracks&&d.push.apply(d,A(e.tracks)),e.stores&&d.push.apply(d,A(Object.values(e.stores))),e.names&&d.push(e.names),d.forEach((function(t){t.baseUrl||(t.baseUrl=e.baseUrl||"/")})),e.refSeqs&&"string"==typeof e.refSeqs&&(e.refSeqs=new URL(e.refSeqs,e.sourceUrl).href),e.nameUrl&&(e.nameUrl=new URL(e.nameUrl,e.sourceUrl).href)}return e.stores=e.stores||{},(e.tracks||[]).forEach((function(t){if(t.config){var r=t.config;delete t.config,t=x(x({},r),t)}var n;t.store||(n="FeatureTrack"===t.type?"JBrowse/View/Track/HTMLFeatures":"ImageTrack"===t.type?"JBrowse/View/Track/FixedImage":"ImageTrack.Wiggle"===t.type?"JBrowse/View/Track/FixedImage/Wiggle":"SequenceTrack"===t.type?"JBrowse/View/Track/Sequence":X("JBrowse/View/Track",t.type),t.type=n,Q(e,t),t.histograms&&(t.histograms.baseUrl||(t.histograms.baseUrl=t.baseUrl),Q(e,t.histograms)))})),e}function X(e,t){return t?(t.includes("/")||(t="".concat(e,"/").concat(t)),t=t.replace(/^\//,"")):""}function Q(e,t){var r,n=t.urlTemplate,a=void 0===n?"":n;if(r=t.storeClass?X("JBrowse/Store",t.storeClass):function(e,t){return e?e.type&&e.type.includes("/FixedImage")?"JBrowse/Store/TiledImage/Fixed".concat(0===e.backendVersion?"_v0":""):/\.jsonz?$/i.test(t)?"JBrowse/Store/SeqFeature/NCList".concat(0===e.backendVersion?"_v0":""):/\.bam$/i.test(t)?"JBrowse/Store/SeqFeature/BAM":/\.cram$/i.test(t)?"JBrowse/Store/SeqFeature/CRAM":/\.gff3?$/i.test(t)?"JBrowse/Store/SeqFeature/GFF3":/\.bed$/i.test(t)?"JBrowse/Store/SeqFeature/BED":/\.vcf.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/VCFTabix":/\.gff3?.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/GFF3Tabix":/\.bed.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/BEDTabix":/\.(bw|bigwig)$/i.test(t)?"JBrowse/Store/SeqFeature/BigWig":/\.(bb|bigbed)$/i.test(t)?"JBrowse/Store/SeqFeature/BigBed":/\.(fa|fasta)$/i.test(t)?"JBrowse/Store/SeqFeature/IndexedFasta":/\.(fa|fasta)\.b?gz$/i.test(t)?"JBrowse/Store/SeqFeature/BgzipIndexedFasta":/\.2bit$/i.test(t)?"JBrowse/Store/SeqFeature/TwoBit":e.type&&e.type.endsWith("/Sequence")?"JBrowse/Store/Sequence/StaticChunked":"":""}(t,a)){var o=x(x({},t),{},{type:r});o.name="JBrowse/Store/Sequence/StaticChunked"!==r&&"JBrowse/Store/Sequence/IndexedFasta"!==r&&"JBrowse/Store/SeqFeature/IndexedFasta"!==r&&"JBrowse/Store/SeqFeature/BgzipIndexedFasta"!==r&&"JBrowse/Store/SeqFeature/TwoBit"!==r&&"JBrowse/Store/Sequence/TwoBit"!==r&&!t.useAsRefSeqStore||e.stores&&e.stores.refseqs?"store".concat(l.objectHash(o)):"refseqs",e.stores||(e.stores={}),e.stores[o.name]=o,t.store=o.name}else console.warn("Unable to determine an appropriate data store to use with track '".concat(t.label,"', please explicitly specify a storeClass in the configuration."))}function K(e){return void 0!==e.uri}function Z(e){return void 0!==e.localPath}function ee(){return(ee=U(N.mark((function e(){var t,r,n,a,o,i,c,s,u,l,f,p,h,d,y=arguments;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=y.length>1&&void 0!==y[1]?y[1]:{include:["{dataRoot}/trackList.json","{dataRoot}/tracks.conf"]},n=y.length>2&&void 0!==y[2]?y[2]:{uri:"",locationType:"UriLocation"},a="uri"in(t=y.length>0&&void 0!==y[0]?y[0]:{uri:"",locationType:"UriLocation"})?"uri":"localPath",o=JSON.parse(JSON.stringify(t)),i="",K(t)&&(i=t.uri),Z(t)&&(i=t.localPath),i.endsWith("/")&&(o[a]=i.slice(0,i.length-1)),!(K(n)&&n.uri||Z(n)&&n.localPath)){e.next=35;break}c="uri"in n?"uri":"localPath",s="",K(n)&&(s=n.uri),Z(n)&&(s=n.localPath),s.endsWith("/")&&(s=s.slice(0,s.length-1)),u={},l=0,f=["jbrowse.conf","jbrowse_conf.json"];case 17:if(!(l<f.length)){e.next=33;break}return p=f[l],h=null,e.prev=20,e.next=23,ne(F({},c,"".concat(s,"/").concat(p)));case 23:h=e.sent,e.next=29;break;case 26:e.prev=26,e.t0=e.catch(20),console.error("tried to access ".concat(s,"/").concat(p,", but failed"));case 29:u=ie(u,h)||{};case 30:l++,e.next=17;break;case 33:return o[a]&&(u.dataRoot=o[a]),e.abrupt("return",te(u));case 35:return d=Y(r,window.location.href),o[a]&&(d.dataRoot=o[a]),e.abrupt("return",te(d));case 38:case"end":return e.stop()}}),e,null,[[20,26]])})))).apply(this,arguments)}function te(e){return re.apply(this,arguments)}function re(){return(re=U(N.mark((function e(t){var r,n,a=arguments;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=W(z(a.length>1&&void 0!==a[1]?a[1]:pe),t),e.next=4,se(r);case 4:return fe(n=ie(n=e.sent,t)||n,n),he(n),e.abrupt("return",n);case 9:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function ne(e){return ae.apply(this,arguments)}function ae(){return(ae=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,h.openLocation(t).readFile("utf8");case 2:if(r=e.sent,!K(t)){e.next=5;break}return e.abrupt("return",oe(r,t.uri));case 5:if(!Z(t)){e.next=7;break}return e.abrupt("return",oe(r,t.localPath));case 7:return e.abrupt("return",oe(r));case 8:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function oe(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e.trim().startsWith("{")?$(e,t):H(e,t)}function ie(e,t){if(null===t)return null;null===e&&(e={});for(var r=0,n=Object.keys(t);r<n.length;r++){var a=n[r];if("tracks"===a&&a in e){var o=e[a]||[],i=t[a]||[];if(!Array.isArray(o)||!Array.isArray(i))throw new Error("Track config has not been properly regularized: ".concat(o," ").concat(i));e[a]=ce(o||[],i||[])}else"datasets"!==a&&a in e&&"object"===k(t[a])&&"object"===k(e[a])?e[a]=W(e[a],t[a]):"dataRoot"===a?(void 0===e[a]||"data"===e[a]&&void 0!==t[a])&&(e[a]=t[a]):void 0!==e[a]&&void 0===t[a]||(e[a]=t[a])}return e}function ce(e,t){if(!t.length)return e;var r={};return e.forEach((function(e,t){e.index=t,r[e.label]=e})),t.forEach((function(t){var n=r[t.label];n?ie(n,t):e.push(t)})),e}function se(e){return ue.apply(this,arguments)}function ue(){return(ue=U(N.mark((function e(t){var r,n;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=function(){return(n=U(N.mark((function e(n,a){var o,i,c,s;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(o=n.sourceUrl||n.baseUrl){e.next=3;break}throw new Error("Could not determine source URL: ".concat(JSON.stringify(n)));case 3:if(i=ie(z(a),n)){e.next=6;break}throw new Error("Problem merging configs");case 6:return c=fe(le(n.include||[]),i),delete n.include,s=c.map(function(){var e=U(N.mark((function e(n){return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n.cacheBuster=t.cacheBuster,e.next=3,ne({uri:new URL(n.url,o).href,locationType:"UriLocation"});case 3:return e.abrupt("return",r(e.sent,i));case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()),e.next=11,Promise.all(s);case 11:return e.sent.forEach((function(e){n=ie(n,e)||n})),e.abrupt("return",n);case 14:case"end":return e.stop()}}),e)})))).apply(this,arguments)},r=function(e,t){return n.apply(this,arguments)},t=z(t),e.abrupt("return",r(t,{}));case 4:case"end":return e.stop()}}),e)})))).apply(this,arguments)}function le(e){return e?(Array.isArray(e)||(e=[e]),e.map((function(e){return"string"==typeof e&&(e={url:e}),"format"in e||(e.format=e.url.endsWith(".conf")?"conf":"JB_json"),"JB_json"!==e.format||"version"in e||(e.version=1),e}))):[]}function fe(e,t){if(!e)return e;if(Array.isArray(e))for(var r=0;r<e.length;r+=1)e[r]=fe(e[r],t);else if("object"===k(e))for(var n=e,a=0,o=Object.keys(n);a<o.length;a++){var i=o[a];n[i]=fe(n[i],t)}else if("string"==typeof e)return function(e,t){var r=this;return e.replace(/\{([\w\s.]+)\}/g,(function(e,n){n=n.replace(/\s+/g,"");var a=d(t,n);if(void 0!==a)return"function"==typeof a?a(n):a;if(t.callback){var o=t.callback.call(r,n);if(void 0!==o)return o}return e}))}(e,t);return e}var pe={tracks:[],containerID:"GenomeBrowser",dataRoot:"data",show_tracklist:!0,show_nav:!0,show_menu:!0,show_overview:!0,show_fullviewlink:!0,update_browser_title:!0,updateBrowserURL:!0,refSeqs:"{dataRoot}/seq/refSeqs.json",include:["jbrowse.conf","jbrowse_conf.json"],nameUrl:"{dataRoot}/names/root.json",datasets:{_DEFAULT_EXAMPLES:!0,volvox:{url:"?data=sample_data/json/volvox",name:"Volvox Example"},modencode:{url:"?data=sample_data/json/modencode",name:"MODEncode Example"},yeast:{url:"?data=sample_data/json/yeast",name:"Yeast Example"}},highlightSearchedRegions:!1,highResolutionMode:"auto"};function he(e){if(e.tracks||(e.tracks=[]),!e.baseUrl)throw new Error("Must provide a `baseUrl` in configuration")}function de(e){return p.types.compose("JBrowse1Connection",f.BaseConnectionModelFactory(e),p.types.model({configuration:o.ConfigurationReference(V),type:p.types.literal("JBrowse1Connection")}).actions((function(e){return{connect:function(){var t=o.readConfObject(e.configuration,"dataDirLocation"),r=l.getSession(e);(function(){return ee.apply(this,arguments)})(t).then((function(t){var n=o.readConfObject(e.configuration,"assemblyNames")[0];if(!n)throw new Error("assembly name required for JBrowse 1 connection");var a=r.assemblies.find((function(e){return o.readConfObject(e,"name")===n})),i=o.readConfObject(a,["sequence","adapter"]),c=t.tracks.map((function(e){var r=function(e,t,r){var n={trackId:l.objectHash(e),name:e.key||e.label},a=e.metadata&&(e.metadata.description||e.metadata.Description);a&&(n.description=a);var o=e.category||e.metadata&&e.metadata.category;n.category=o?o.split(/\s*\/\s*/):[];var i=e.storeClass;if(!e.urlTemplate){if(!i||!i.endsWith("FromConfig")){var c=e.key||e.label;return console.warn('Could not import JBrowse1 track "'.concat(c,'" because it does not have a "urlTemplate" or is not a "FromConfig" track')),u.generateUnsupportedTrackConf(n.name,c,n.category)}return function(e,t){var r=(e.features||[]).map((function(e){var t=JSON.parse(JSON.stringify(e));return t.refName=e.seq_id,t.uniqueId="".concat(e.seq_id,":").concat(e.start,"-").concat(e.end,":").concat(e.name||""),t}));return t.adapter={type:"FromConfigAdapter",features:r},t.type="FeatureTrack",t}(e,n)}var s=function(e){return new URL(e,"".concat(t,"/")).href.replace(/%7B/gi,"{").replace(/%7D/gi,"}")},f=s(e.urlTemplate);if(i){if("JBrowse/Store/SeqFeature/BAM"===i){var p={type:"BamAdapter",bamLocation:{uri:f,locationType:"UriLocation"}};return p.index=e.baiUrlTemplate?{location:{uri:s(e.baiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".bai"),locationType:"UriLocation"}},x(x({},n),{},{type:"AlignmentsTrack",adapter:p})}if("JBrowse/Store/SeqFeature/CRAM"===i){var h={type:"CramAdapter",cramLocation:{uri:f,locationType:"UriLocation"},sequenceAdapter:r};return h.craiLocation=e.craiUrlTemplate?{uri:s(e.craiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".crai"),locationType:"UriLocation"},x(x({},n),{},{type:"AlignmentsTrack",adapter:h})}if("JBrowse/Store/SeqFeature/NCList"===i)return x(x({},n),{},{type:"FeatureTrack",adapter:{type:"NCListAdapter",rootUrlTemplate:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/BigWig"===i||"JBrowse/Store/BigWig"===i)return e.type&&e.type.endsWith("XYPlot")?n.defaultRendering="xyplot":e.type&&e.type.endsWith("Density")&&(n.defaultRendering="density"),x(x({},n),{},{type:"QuantitativeTrack",adapter:{type:"BigWigAdapter",bigWigLocation:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/VCFTabix"===i){var d={type:"VcfTabixAdapter",vcfGzLocation:{uri:f,locationType:"UriLocation"}};return d.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"VariantTrack",adapter:d})}if("JBrowse/Store/SeqFeature/VCFTribble"===i)return u.generateUnsupportedTrackConf(n.name,"VCFTribble (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/GFF3"===i)return u.generateUnsupportedTrackConf(n.name,"GFF3 (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/BigBed"===i)return x(x({},n),{},{type:"FeatureTrack",adapter:{type:"BigBedAdapter",bigBedLocation:{uri:f,locationType:"UriLocation"}}});if("JBrowse/Store/SeqFeature/GFF3Tabix"===i){var y={type:"Gff3TabixAdapter",gffGzLocation:{uri:f,locationType:"UriLocation"}};return y.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"FeatureTrack",adapter:y})}if("JBrowse/Store/SeqFeature/BED"===i)return u.generateUnsupportedTrackConf(n.name,"BED (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/BEDTabix"===i){var m={type:"BedTabixAdapter",bedGzLocation:{uri:f,locationType:"UriLocation"}};return m.index=e.tbiUrlTemplate?{location:{uri:s(e.tbiUrlTemplate),locationType:"UriLocation"}}:e.csiUrlTemplate?{location:{uri:s(e.csiUrlTemplate),locationType:"UriLocation"},indexType:"CSI"}:{location:{uri:"".concat(f,".tbi"),locationType:"UriLocation"}},x(x({},n),{},{type:"FeatureTrack",adapter:m})}if("JBrowse/Store/SeqFeature/GTF"===i)return u.generateUnsupportedTrackConf(n.name,"GTF (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/StaticChunked"===i||"JBrowse/Store/Sequence/StaticChunked"===i)return u.generateUnsupportedTrackConf(n.name,"StaticChunked (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/UnindexedFasta"===i)return u.generateUnsupportedTrackConf(n.name,"UnindexedFasta (".concat(f,")"),n.category);if("JBrowse/Store/SeqFeature/IndexedFasta"===i){var v={type:"IndexedFastaAdapter",fastaLocation:{uri:f,locationType:"UriLocation"}};return v.faiLocation=e.faiUrlTemplate?{uri:s(e.faiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".fai"),locationType:"UriLocation"},x(x({},n),{},{type:"SequenceTrack",adapter:v})}if("JBrowse/Store/SeqFeature/BgzipIndexedFasta"===i){var b={type:"BgzipFastaAdapter",fastaLocation:{uri:f,locationType:"UriLocation"}};return b.faiLocation=e.faiUrlTemplate?{uri:s(e.faiUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".fai"),locationType:"UriLocation"},b.gziLocation=e.gziUrlTemplate?{uri:s(e.gziUrlTemplate),locationType:"UriLocation"}:{uri:"".concat(f,".gzi"),locationType:"UriLocation"},x(x({},n),{},{type:"ReferenceSequenceTrack",adapter:b})}if("JBrowse/Store/SeqFeature/TwoBit"===i)return x(x({},n),{},{type:"ReferenceSequenceTrack",adapter:{type:"TwoBitAdapter",twoBitLocation:{uri:f,locationType:"UriLocation"}}})}if(n.adapter=u.guessAdapter({uri:f,locationType:"UriLocation"},void 0,f),!n.adapter)throw new Error("Could not determine adapter");return n.adapter.type===u.UNSUPPORTED?u.generateUnsupportedTrackConf(n.name,f,n.category):n.adapter.type===u.UNKNOWN?u.generateUnknownTrackConf(n.name,f,n.category):(n.type=u.guessTrackType(n.adapter.type),"QuantitativeTrack"===n.type&&(e.type&&e.type.endsWith("XYPlot")?n.defaultRendering="xyplot":e.type&&e.type.endsWith("Density")&&(n.defaultRendering="density")),n)}(e,t.dataRoot,i);return r.assemblyNames=[n],r}));e.setTrackConfs(c)})).catch((function(t){console.error(t),r.notify('There was a problem connecting to the JBrowse 1 data directory "'.concat(e.name,'". Please make sure you have entered a valid location. The error that was thrown is: "').concat(t,'"'),"error"),r.breakConnection(e.configuration)}))}}})))}var ye=function(e){q(i,a);var o=O(i);function i(){var e;return L(this,i),(e=o.apply(this,arguments)).name="LegacyJBrowsePlugin",e}return B(i,[{key:"install",value:function(e){e.addAdapterType((function(){return new t({name:"NCListAdapter",configSchema:_,getAdapterClass:function(){return Promise.resolve().then((function(){return ge})).then((function(e){return e.default}))}})})),e.addToExtensionPoint("Core-guessAdapterForLocation",(function(e){return function(t,r,n){var a=u.getFileName(t);return/trackData.jsonz?$/i.test(a)||"NCListAdapter"===n?{type:"NCListAdapter",rootUrlTemplate:t}:e(t,r,n)}})),e.addTextSearchAdapterType((function(){return new r({name:"JBrowse1TextSearchAdapter",configSchema:M,AdapterClass:D,description:"A JBrowse 1 text search adapter"})})),e.addConnectionType((function(){return new n({name:"JBrowse1Connection",configSchema:V,stateModel:de(e),displayName:"JBrowse 1 Data",description:"A JBrowse 1 data directory",url:"//jbrowse.org/"})}))}}]),i}(),me={refName:"seq_id"},ve={seq_id:"refName"},be=function(){function e(t,r,n){L(this,e),this.ncFeature=t,this.uniqueId=n||t.id(),this.parentHandle=r}return B(e,[{key:"set",value:function(){throw new Error("not implemented")}},{key:"jb2TagToJb1Tag",value:function(e){return(me[e]||e).toLowerCase()}},{key:"jb1TagToJb2Tag",value:function(e){var t=e.toLowerCase();return ve[t]||t}},{key:"get",value:function(t){var r=this,n=this.ncFeature.get(this.jb2TagToJb1Tag(t));return n&&"subfeatures"===t?n.map((function(t){return new e(t,r)})):n}},{key:"tags",value:function(){var e=this;return this.ncFeature.tags().map((function(t){return e.jb1TagToJb2Tag(t)}))}},{key:"id",value:function(){return this.uniqueId}},{key:"parent",value:function(){return this.parentHandle}},{key:"children",value:function(){return this.get("subfeatures")}},{key:"toJSON",value:function(){var t=this,r={uniqueId:this.id()};return this.ncFeature.tags().forEach((function(n){var a=t.jb1TagToJb2Tag(n),o=t.ncFeature.get(n);"subfeatures"===a?r.subfeatures=(o||[]).map((function(r){return new e(r,t).toJSON()})):r[a]=o})),r}}]),e}(),ge={__proto__:null,default:function(e){q(n,i.BaseFeatureDataAdapter);var t,r=O(n);function n(e,t,a){var i;L(this,n),i=r.call(this,e,t,a);var c=o.readConfObject(e,"refNames"),s=o.readConfObject(e,"rootUrlTemplate");return i.configRefNames=c,i.nclist=new m({baseUrl:"",urlTemplate:s.uri,readFile:function(e){return new b.RemoteFile(String(s.baseUri?new URL(e,s.baseUri).toString():e)).readFile()}}),i}return B(n,[{key:"getFeatures",value:function(e){var t=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return v.ObservableCreate(function(){var n=U(N.mark((function n(a){var o,i,c,s,u,f,p;return N.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:o=r.signal,i=!1,c=!1,n.prev=3,u=g(t.nclist.getFeatures(e,r));case 5:return n.next=7,u.next();case 7:if(!(i=!(f=n.sent).done)){n.next=14;break}p=f.value,l.checkAbortSignal(o),a.next(t.wrapFeature(p));case 11:i=!1,n.next=5;break;case 14:n.next=20;break;case 16:n.prev=16,n.t0=n.catch(3),c=!0,s=n.t0;case 20:if(n.prev=20,n.prev=21,!i||null==u.return){n.next=25;break}return n.next=25,u.return();case 25:if(n.prev=25,!c){n.next=28;break}throw s;case 28:return n.finish(25);case 29:return n.finish(20);case 30:a.complete();case 31:case"end":return n.stop()}}),n,null,[[3,16,20,30],[21,,25,29]])})));return function(e){return n.apply(this,arguments)}}())}},{key:"wrapFeature",value:function(e){return new be(e,void 0,"".concat(this.id,"-").concat(e.id()))}},{key:"hasDataForRefName",value:(t=U(N.mark((function e(t){var r;return N.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,this.nclist.getDataRoot(t);case 2:return e.abrupt("return",!!((r=e.sent)&&r.stats&&r.stats.featureCount));case 4:case"end":return e.stop()}}),e,this)}))),function(e){return t.apply(this,arguments)})},{key:"getRefNames",value:function(){return Promise.resolve(this.configRefNames||[])}},{key:"freeResources",value:function(){}}]),n}()};exports.default=ye;
2
2
  //# sourceMappingURL=plugin-legacy-jbrowse.cjs.production.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-legacy-jbrowse.cjs.production.min.js","sources":["../src/NCListAdapter/configSchema.ts","../../../node_modules/regenerator-runtime/runtime.js","../src/JBrowse1TextSeachAdapter/HttpMap.ts","../src/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.ts","../src/JBrowse1TextSeachAdapter/configSchema.ts","../src/JBrowse1Connection/configSchema.ts","../src/JBrowse1Connection/util.ts","../src/JBrowse1Connection/jb1ConfigParse.ts","../src/JBrowse1Connection/jb1ConfigLoad.ts","../src/JBrowse1Connection/model.js","../src/JBrowse1Connection/jb1ToJb2.ts","../src/index.ts","../src/NCListAdapter/NCListFeature.ts","../src/NCListAdapter/NCListAdapter.ts"],"sourcesContent":["import { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'NCListAdapter',\n {\n rootUrlTemplate: {\n type: 'fileLocation',\n defaultValue: {\n uri: '/path/to/my/{refseq}/trackData.json',\n locationType: 'UriLocation',\n },\n },\n refNames: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of refNames used by the NCList used for aliasing',\n },\n },\n { explicitlyTyped: true },\n)\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*\n * Helper class allows reading names index generated in JBrowse1\n * Adapted from https://github.com/GMOD/jbrowse/blob/master/src/JBrowse/Store/Hash.js\n */\nimport crc32 from 'buffer-crc32'\n\nexport default class HttpMap {\n url: string\n\n constructor(args: { url: string }) {\n // make sure url has a trailing slash\n this.url = /\\/$/.test(args.url) ? args.url : `${args.url}/`\n }\n\n /**\n * loads meta.json file from names directory and reads number of hash_bits used\n */\n async readMeta() {\n const meta = await this.loadFile('meta.json')\n const { compress, track_names: tracks } = meta\n const hashHexCharacters = Math.ceil(meta.hash_bits / 4)\n return { hashHexCharacters, compress, tracks }\n }\n\n async getHashHexCharacters() {\n const meta = await this.readMeta()\n return meta.hashHexCharacters\n }\n\n async getCompress() {\n const meta = await this.readMeta()\n return meta.compress\n }\n\n async getTrackNames() {\n const meta = await this.readMeta()\n return meta.tracks\n }\n\n /**\n * Returns contents of a bucket given a key\n * @param key - string\n */\n async get(key: string) {\n const bucket = await this.getBucket(key)\n return bucket[key]\n }\n\n /**\n * Returns a bucket given a key\n * @param key - string\n */\n async getBucket(key: string) {\n const bucketIdent = this.hash(key)\n const hexToDirPath = await this.hexToDirPath(bucketIdent)\n return this.loadFile(hexToDirPath)\n }\n\n /**\n * Loads a file using the url and provided id.\n * Returns response object with contents of the file\n * @param id - string\n */\n async loadFile(id: string) {\n const response = await fetch(`${this.url}${id}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} ${response.statusText}`)\n }\n return response.json()\n }\n\n /**\n * Returns the corresponding path of the file given a hex string\n * @param hex - hex string\n */\n async hexToDirPath(hex: string) {\n // zero-pad the hex string to be 8 chars if necessary\n const hashHexCharacters = await this.getHashHexCharacters()\n if (hashHexCharacters) {\n const compress = await this.getCompress()\n while (hex.length < 8) {\n hex = `0${hex}`\n }\n hex = hex.substr(8 - hashHexCharacters)\n const dirpath = []\n for (let i = 0; i < hex.length; i += 3) {\n dirpath.push(hex.substring(i, i + 3))\n }\n return `${dirpath.join('/')}.json${compress ? 'z' : ''}`\n }\n return ''\n }\n\n hash(data: string) {\n return crc32(Buffer.from(data))\n .toString('hex')\n .toLowerCase()\n .replace('-', 'n')\n }\n}\n","import {\n BaseTextSearchAdapter,\n BaseArgs,\n BaseAdapter,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport BaseResult from '@jbrowse/core/TextSearch/BaseResults'\nimport { Instance } from 'mobx-state-tree'\nimport { readConfObject } from '@jbrowse/core/configuration'\nimport MyConfigSchema from './configSchema'\nimport HttpMap from './HttpMap'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\n\nexport interface TooManyHits {\n name: string\n hitLimit: number\n}\n\ninterface SearchResults {\n prefix: ({ name: string } | string)[]\n exact: [string, number, string, string, number, number][]\n}\n\nexport type NamesIndexRecord = string | Array<string | number>\n\n// Jbrowse1 text search adapter\n// Uses index built by generate-names.pl\nexport default class JBrowse1TextSearchAdapter\n extends BaseAdapter\n implements BaseTextSearchAdapter\n{\n httpMap: HttpMap\n\n tracksNames?: string[]\n\n constructor(\n config: Instance<typeof MyConfigSchema>,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n const namesIndexLocation = readConfObject(config, 'namesIndexLocation')\n if (!namesIndexLocation) {\n throw new Error('must provide namesIndexLocation')\n }\n this.httpMap = new HttpMap({\n url: namesIndexLocation.baseUri\n ? new URL(namesIndexLocation.uri, namesIndexLocation.baseUri).href\n : namesIndexLocation.uri,\n })\n }\n\n /**\n * Returns the contents of the file containing the query if it exists\n * else it returns empty\n * @param query - string query\n */\n async loadIndexFile(query: string): Promise<Record<string, SearchResults>> {\n return this.httpMap.getBucket(query)\n }\n\n async searchIndex(args: BaseArgs) {\n const { searchType, queryString } = args\n const tracks = this.tracksNames || (await this.httpMap.getTrackNames())\n const entries = await this.loadIndexFile(queryString.toLowerCase())\n if (entries[queryString]) {\n return this.formatResults(entries[queryString], tracks, searchType)\n }\n return []\n }\n formatResults(results: SearchResults, tracks: string[], searchType?: string) {\n return [\n ...(searchType === 'exact'\n ? []\n : results.prefix.map(result => {\n return new BaseResult({\n label: typeof result === 'object' ? result.name : result,\n matchedAttribute: 'name',\n matchedObject: { result: result },\n })\n })),\n ...results.exact.map(result => {\n const name = result[0] as string\n const trackIndex = result[1] as number\n const refName = result[3] as string\n const start = result[4] as number\n const end = result[5] as number\n const locstring = `${refName || name}:${start}-${end}`\n return new BaseResult({\n locString: locstring,\n label: name,\n matchedAttribute: 'name',\n matchedObject: result,\n trackId: tracks[trackIndex],\n })\n }),\n ].filter(result => result.getLabel() !== 'too many matches')\n }\n\n freeResources() {}\n}\n","import { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'JBrowse1TextSearchAdapter',\n {\n // metadata about tracks and assemblies covered by text search adapter\n namesIndexLocation: {\n type: 'fileLocation',\n defaultValue: { uri: '/volvox/names', locationType: 'UriLocation' },\n description: 'the location of the JBrowse1 names index data directory',\n },\n tracks: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of tracks covered by text search adapter',\n },\n assemblyNames: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of assemblies covered by text search adapter',\n },\n },\n { explicitlyTyped: true, explicitIdentifier: 'textSearchAdapterId' },\n)\n","import { baseConnectionConfig } from '@jbrowse/core/pluggableElementTypes/models'\nimport { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'JBrowse1Connection',\n {\n dataDirLocation: {\n type: 'fileLocation',\n defaultValue: {\n uri: 'http://mysite.com/jbrowse/data/',\n locationType: 'UriLocation',\n },\n description:\n 'the location of the JBrowse 1 data directory, often something like http://mysite.com/jbrowse/data/',\n },\n assemblyNames: {\n description:\n 'name of the assembly the connection belongs to, should be a single entry',\n type: 'stringArray',\n defaultValue: [],\n },\n },\n { baseConfiguration: baseConnectionConfig },\n)\n","import getValue from 'get-value'\nimport { Track, Source } from './types'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isTrack(arg: any): arg is Track {\n return arg && arg.label && typeof arg.label === 'string'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isSource(arg: any): arg is Source {\n return arg && arg.url && typeof arg.url === 'string'\n}\n\n/**\n * updates a with values from b, recursively\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Obj = Record<string, any>\nexport function deepUpdate(a: Obj, b: Obj): Obj {\n for (const prop of Object.keys(b)) {\n if (\n prop in a &&\n typeof b[prop] === 'object' &&\n typeof a[prop] === 'object'\n ) {\n deepUpdate(a[prop], b[prop])\n } else if (\n typeof a[prop] === 'undefined' ||\n typeof b[prop] !== 'undefined'\n ) {\n a[prop] = b[prop]\n }\n }\n return a\n}\n\n/**\n * replace variables in a template string with values\n * @param template - String with variable names in curly brackets\n * e.g., `http://foo/{bar}?arg={baz.foo}`\n * @param fillWith - object with attribute-value mappings\n * e.g., `{ 'bar': 'someurl', 'baz': { 'foo': 42 } }`\n * @returns the template string with variables in fillWith replaced\n * e.g., 'htp://foo/someurl?arg=valueforbaz'\n */\nexport function fillTemplate(template: string, fillWith: Obj): string {\n return template.replace(\n /\\{([\\w\\s.]+)\\}/g,\n (match, varName: string): string => {\n varName = varName.replace(/\\s+/g, '') // remove all whitespace\n const fill = getValue(fillWith, varName)\n if (fill !== undefined) {\n if (typeof fill === 'function') {\n return fill(varName)\n }\n return fill\n }\n if (fillWith.callback) {\n // @ts-ignore\n const v = fillWith.callback.call(this, varName)\n if (v !== undefined) {\n return v\n }\n }\n return match\n },\n )\n}\n\n/**\n * Clones objects (including DOM nodes) and all children.\n * Warning: do not clone cyclic structures\n * (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)\n * @param src - The object to clone\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function clone(src: any): any {\n if (\n !src ||\n typeof src !== 'object' ||\n Object.prototype.toString.call(src) === '[object Function]'\n ) {\n // null, undefined, any non-object, or function\n return src // anything\n }\n if (src.nodeType && 'cloneNode' in src) {\n // DOM Node\n return src.cloneNode(true) // Node\n }\n if (src instanceof Date) {\n // Date\n return new Date(src.getTime()) // Date\n }\n if (src instanceof RegExp) {\n // RegExp\n return new RegExp(src) // RegExp\n }\n let r\n let i\n let l\n if (Array.isArray(src)) {\n // array\n r = []\n for (i = 0, l = src.length; i < l; ++i) {\n if (i in src) {\n r[i] = clone(src[i])\n }\n }\n // we don't clone functions for performance reasons\n // }else if(d.isFunction(src)){\n // // function\n // r = function(){ return src.apply(this, arguments); };\n } else {\n // generic objects\n r = src.constructor ? new src.constructor() : {}\n }\n return mixin(r, src, clone)\n}\n\n/**\n * Copies/adds all properties of source to dest; returns dest.\n * (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)\n *\n * All properties, including functions (sometimes termed \"methods\"), excluding\n * any non-standard extensions found in Object.prototype, are copied/added to\n * dest. Copying/adding each particular property is delegated to copyFunc\n * (if any); copyFunc defaults to the Javascript assignment operator if not\n * provided. Notice that by default, mixin executes a so-called \"shallow copy\"\n * and aggregate types are copied/added by reference.\n * @param dest - The object to which to copy/add all properties contained in\n * source.\n * @param source - The object from which to draw all properties to copy into dest.\n * @param copyFunc - The process used to copy/add a property in source; defaults\n * to the Javascript assignment operator.\n * @returns dest, as modified\n */\nfunction mixin(dest: Obj, source: Obj, copyFunc: Function): Obj {\n let name\n let s\n const empty = {}\n for (name in source) {\n // the (!(name in empty) || empty[name] !== s) condition avoids copying\n // properties in \"source\" inherited from Object.prototype.\t For example,\n // if dest has a custom toString() method, don't overwrite it with the\n // toString() method that source inherited from Object.prototype\n s = source[name]\n if (\n !(name in dest) ||\n // @ts-ignore\n (dest[name] !== s && (!(name in empty) || empty[name] !== s))\n ) {\n dest[name] = copyFunc ? copyFunc(s) : s\n }\n }\n\n return dest // Object\n}\n","/* eslint no-cond-assign: [\"error\", \"except-parens\"] */\nimport getValue from 'get-value'\nimport setValue from 'set-value'\nimport { objectHash } from '@jbrowse/core/util'\nimport { isSource, isTrack } from './util'\nimport { Config, Track, Source, Store, Names } from './types'\n\nexport function parseJB1Json(config: Config | string, url: string): Config {\n if (typeof config === 'string') {\n let parsedConf\n try {\n parsedConf = JSON.parse(config)\n } catch (error) {\n throw new Error(`${error} when parsing configuration.`)\n }\n return regularizeConf(parsedConf, url)\n }\n return regularizeConf(config, url)\n}\n\nexport function parseJB1Conf(config: string, url: string): Config {\n let parsedConf\n try {\n parsedConf = parse(config, url)\n } catch (error) {\n throw new Error(`${error} when parsing configuration.`)\n }\n return regularizeConf(parsedConf, url)\n}\n\nfunction isAlwaysArray(varName: string): boolean {\n if (varName === 'include') {\n return true\n }\n return false\n}\n\nfunction parse(text: string, url: string): Config {\n let section: string[] = []\n let keyPath: string[] | undefined\n let operation: string\n let value: string | undefined\n const data: Config = { tracks: {} }\n let lineNumber: number\n\n function recordVal(): void {\n if (value !== undefined) {\n let parsedValue:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n try {\n // parse json\n const match = value.match(/^json:(.+)/i)\n if (match) {\n parsedValue = JSON.parse(match[1])\n }\n // parse numbers if it looks numeric\n else if (/^[+-]?[\\d.,]+([eE][-+]?\\d+)?$/.test(value)) {\n parsedValue = parseFloat(value.replace(/,/g, ''))\n } else {\n parsedValue = value\n }\n\n if (!keyPath) {\n throw new Error(`Error parsing in section ${section.join(' - ')}`)\n }\n const path = section.concat(keyPath).join('.')\n if (operation === '+=') {\n let existing = getValue(data, path)\n if (existing) {\n if (!Array.isArray(existing)) {\n existing = [existing]\n }\n } else {\n existing = []\n }\n\n existing.push(parsedValue)\n parsedValue = existing\n }\n if (parsedValue === 'true') {\n parsedValue = true\n }\n if (parsedValue === 'false') {\n parsedValue = false\n }\n setValue(data, path, parsedValue)\n } catch (e) {\n throw new Error(\n `syntax error${url ? ` in ${url}` : ''}${\n lineNumber ? ` at line ${lineNumber - 1}` : ''\n }`,\n )\n }\n }\n }\n\n text.split('\\n').forEach((textLine, i): void => {\n lineNumber = i + 1\n const line = textLine.replace(/^\\s*#.+/, '')\n\n // new section\n let match: RegExpMatchArray | null\n if ((match = line.match(/^\\s*\\[([^\\]]+)/))) {\n // new section\n recordVal()\n keyPath = undefined\n value = undefined\n section = match[1].trim().split(/\\s*\\.\\s*/)\n if (section.length === 1 && section[0].toLowerCase() === 'general') {\n section = []\n }\n }\n // new value\n else if (\n (match = line.match(\n value === undefined ? /^([^+=]+)(\\+?=)(.*)/ : /^(\\S[^+=]+)(\\+?=)(.*)/,\n ))\n ) {\n recordVal()\n keyPath = match[1].trim().split(/\\s*\\.\\s*/)\n ;[, , operation] = match\n if (isAlwaysArray(section.concat(keyPath).join('.'))) {\n operation = '+='\n }\n value = match[3].trim()\n }\n // add to existing array value\n else if (\n keyPath !== undefined &&\n (match = line.match(/^\\s{0,4}\\+\\s*(.+)/))\n ) {\n recordVal()\n operation = '+='\n value = match[1].trim()\n }\n // add to existing value\n else if (value !== undefined && (match = line.match(/^\\s+(\\S.*)/))) {\n value += value.length ? ` ${match[1].trim()}` : match[1].trim()\n }\n // done with last value\n else {\n recordVal()\n keyPath = undefined\n value = undefined\n }\n })\n\n recordVal()\n\n return data\n}\n\n/**\n * Applies defaults and any other necessary tweaks to the loaded configuration.\n * @param conf - the object containing the configuration, which it modifies\n * in-place\n * @param url - URL of the config file\n * @returns the same object it was passed\n */\nexport function regularizeConf(conf: Config, url: string): Config {\n // if tracks is not an array, convert it to one\n if (conf.tracks && !Array.isArray(conf.tracks)) {\n // if it's a single track config, wrap it in an arrayref\n if (isTrack(conf.tracks)) {\n conf.tracks = [conf.tracks]\n }\n // otherwise, coerce it to an array\n else {\n const tracks: Track[] = []\n for (const label of Object.keys(conf.tracks)) {\n const track = conf.tracks[label]\n if (isTrack(track)) {\n tracks.push(track)\n } else {\n tracks.push({ label, ...track })\n }\n }\n conf.tracks = tracks\n }\n }\n\n // regularize trackMetadata.sources\n const meta = conf.trackMetadata\n if (meta && meta.sources) {\n // if it's a single source config, wrap it in an arrayref\n if (typeof meta.sources === 'string') {\n meta.sources = [meta.sources]\n }\n if (isSource(meta.sources)) {\n meta.sources = [meta.sources]\n }\n\n if (!Array.isArray(meta.sources)) {\n const sources: Source[] = []\n for (const name of Object.keys(meta.sources)) {\n const source = meta.sources[name]\n if (!('name' in source)) {\n source.name = name\n }\n sources.push(source)\n }\n meta.sources = sources\n }\n\n // coerce any string source defs to be URLs, and try to detect their types\n meta.sources = meta.sources.map((sourceDef: string | Source): Source => {\n if (typeof sourceDef === 'string') {\n const newSourceDef: Source = { url: sourceDef }\n const typeMatch = sourceDef.match(/\\.(\\w+)$/)\n if (typeMatch) {\n newSourceDef.type = typeMatch[1].toLowerCase()\n }\n return newSourceDef\n }\n return sourceDef\n })\n }\n\n conf.sourceUrl = conf.sourceUrl || url\n if (conf.sourceUrl.startsWith('/')) {\n conf.sourceUrl = new URL(conf.sourceUrl, window.location.href).href\n }\n conf.baseUrl = conf.baseUrl || new URL('.', conf.sourceUrl).href\n if (conf.baseUrl.length && !conf.baseUrl.endsWith('/')) {\n conf.baseUrl += '/'\n }\n\n if (conf.sourceUrl) {\n // set a default baseUrl in each of the track and store confs, and the names\n // conf, if needed\n const addBase: (Track | Store | Names)[] = []\n if (conf.tracks) {\n addBase.push(...conf.tracks)\n }\n if (conf.stores) {\n addBase.push(...Object.values(conf.stores))\n }\n if (conf.names) {\n addBase.push(conf.names)\n }\n\n addBase.forEach((t): void => {\n if (!t.baseUrl) {\n t.baseUrl = conf.baseUrl || '/'\n }\n })\n\n // resolve the refSeqs and nameUrl if present\n if (conf.refSeqs && typeof conf.refSeqs === 'string') {\n conf.refSeqs = new URL(conf.refSeqs, conf.sourceUrl).href\n }\n if (conf.nameUrl) {\n conf.nameUrl = new URL(conf.nameUrl, conf.sourceUrl).href\n }\n }\n\n conf.stores = conf.stores || {}\n ;(conf.tracks || []).forEach((trackConfig: Track): void => {\n // if there is a `config` subpart, just copy its keys in to the top-level\n // config\n if (trackConfig.config) {\n const c = trackConfig.config\n delete trackConfig.config\n trackConfig = { ...c, ...trackConfig }\n }\n\n // skip if it's a new-style track def\n if (trackConfig.store) {\n return\n }\n\n let trackClassName: string\n if (trackConfig.type === 'FeatureTrack') {\n trackClassName = 'JBrowse/View/Track/HTMLFeatures'\n } else if (trackConfig.type === 'ImageTrack') {\n trackClassName = 'JBrowse/View/Track/FixedImage'\n } else if (trackConfig.type === 'ImageTrack.Wiggle') {\n trackClassName = 'JBrowse/View/Track/FixedImage/Wiggle'\n } else if (trackConfig.type === 'SequenceTrack') {\n trackClassName = 'JBrowse/View/Track/Sequence'\n } else {\n trackClassName = regularizeClass('JBrowse/View/Track', trackConfig.type)\n }\n\n trackConfig.type = trackClassName\n\n synthesizeTrackStoreConfig(conf, trackConfig)\n\n if (trackConfig.histograms) {\n if (!trackConfig.histograms.baseUrl) {\n trackConfig.histograms.baseUrl = trackConfig.baseUrl\n }\n synthesizeTrackStoreConfig(conf, trackConfig.histograms)\n }\n })\n\n return conf\n}\n\n/**\n * prefix class name with `root` if it contains no slashes\n * @param root - Prefix root\n * @param className - class name\n */\nfunction regularizeClass(root: string, className: string | undefined): string {\n if (!className) {\n return ''\n }\n if (!className.includes('/')) {\n className = `${root}/${className}`\n }\n className = className.replace(/^\\//, '')\n return className\n}\n\nfunction guessStoreClass(\n trackConfig: Track | undefined,\n urlTemplate: string,\n): string {\n if (!trackConfig) {\n return ''\n }\n if (trackConfig.type && trackConfig.type.includes('/FixedImage')) {\n return `JBrowse/Store/TiledImage/Fixed${\n trackConfig.backendVersion === 0 ? '_v0' : ''\n }`\n }\n if (/\\.jsonz?$/i.test(urlTemplate)) {\n return `JBrowse/Store/SeqFeature/NCList${\n trackConfig.backendVersion === 0 ? '_v0' : ''\n }`\n }\n if (/\\.bam$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BAM'\n }\n if (/\\.cram$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/CRAM'\n }\n if (/\\.gff3?$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/GFF3'\n }\n if (/\\.bed$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BED'\n }\n if (/\\.vcf.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/VCFTabix'\n }\n if (/\\.gff3?.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/GFF3Tabix'\n }\n if (/\\.bed.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BEDTabix'\n }\n if (/\\.(bw|bigwig)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BigWig'\n }\n if (/\\.(bb|bigbed)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BigBed'\n }\n if (/\\.(fa|fasta)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/IndexedFasta'\n }\n if (/\\.(fa|fasta)\\.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BgzipIndexedFasta'\n }\n if (/\\.2bit$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/TwoBit'\n }\n if (trackConfig.type && trackConfig.type.endsWith('/Sequence')) {\n return 'JBrowse/Store/Sequence/StaticChunked'\n }\n return ''\n}\n\nfunction synthesizeTrackStoreConfig(\n mainConf: Config,\n trackConfig: Track,\n): void {\n // figure out what data store class to use with the track, applying some\n // defaults if it is not explicit in the configuration\n const { urlTemplate = '' } = trackConfig\n\n let storeClass: string\n if (trackConfig.storeClass) {\n storeClass = regularizeClass('JBrowse/Store', trackConfig.storeClass)\n } else {\n storeClass = guessStoreClass(trackConfig, urlTemplate)\n }\n\n if (!storeClass) {\n console.warn(\n `Unable to determine an appropriate data store to use with track '${trackConfig.label}', please explicitly specify a storeClass in the configuration.`,\n )\n return\n }\n\n // synthesize a separate store conf\n const storeConf: Store = { ...trackConfig, type: storeClass }\n\n // if this is the first sequence store we see, and we have no refseqs store\n // defined explicitly, make this the refseqs store.\n if (\n (storeClass === 'JBrowse/Store/Sequence/StaticChunked' ||\n storeClass === 'JBrowse/Store/Sequence/IndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/IndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/BgzipIndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/TwoBit' ||\n storeClass === 'JBrowse/Store/Sequence/TwoBit' ||\n trackConfig.useAsRefSeqStore) &&\n !(mainConf.stores && mainConf.stores.refseqs)\n ) {\n storeConf.name = 'refseqs'\n } else {\n storeConf.name = `store${objectHash(storeConf)}`\n }\n // record it\n if (!mainConf.stores) {\n mainConf.stores = {}\n }\n mainConf.stores[storeConf.name] = storeConf\n\n // connect it to the track conf\n trackConfig.store = storeConf.name\n}\n","import { openLocation } from '@jbrowse/core/util/io'\nimport { parseJB1Json, parseJB1Conf, regularizeConf } from './jb1ConfigParse'\nimport { clone, deepUpdate, fillTemplate } from './util'\nimport {\n JBLocation,\n UriLocation,\n LocalPathLocation,\n Config,\n Track,\n Include,\n} from './types'\n\nfunction isUriLocation(location: JBLocation): location is UriLocation {\n return (location as UriLocation).uri !== undefined\n}\n\nfunction isLocalPathLocation(\n location: JBLocation,\n): location is LocalPathLocation {\n return (location as LocalPathLocation).localPath !== undefined\n}\n\nexport async function fetchJb1(\n dataRoot: JBLocation = { uri: '', locationType: 'UriLocation' },\n baseConfig: Config = {\n include: ['{dataRoot}/trackList.json', '{dataRoot}/tracks.conf'],\n },\n baseConfigRoot: JBLocation = { uri: '', locationType: 'UriLocation' },\n): Promise<Config> {\n const protocol = 'uri' in dataRoot ? 'uri' : 'localPath'\n const dataRootReg = JSON.parse(JSON.stringify(dataRoot))\n let dataRootLocation = ''\n if (isUriLocation(dataRoot)) {\n dataRootLocation = dataRoot.uri\n }\n if (isLocalPathLocation(dataRoot)) {\n dataRootLocation = dataRoot.localPath\n }\n if (dataRootLocation.endsWith('/')) {\n dataRootReg[protocol] = dataRootLocation.slice(\n 0,\n dataRootLocation.length - 1,\n )\n }\n if (\n (isUriLocation(baseConfigRoot) && baseConfigRoot.uri) ||\n (isLocalPathLocation(baseConfigRoot) && baseConfigRoot.localPath)\n ) {\n const baseProtocol = 'uri' in baseConfigRoot ? 'uri' : 'localPath'\n let baseConfigLocation = ''\n if (isUriLocation(baseConfigRoot)) {\n baseConfigLocation = baseConfigRoot.uri\n }\n if (isLocalPathLocation(baseConfigRoot)) {\n baseConfigLocation = baseConfigRoot.localPath\n }\n if (baseConfigLocation.endsWith('/')) {\n baseConfigLocation = baseConfigLocation.slice(\n 0,\n baseConfigLocation.length - 1,\n )\n }\n let newConfig: Config = {}\n for (const conf of ['jbrowse.conf', 'jbrowse_conf.json']) {\n let fetchedConfig = null\n try {\n // @ts-ignore\n fetchedConfig = await fetchConfigFile({\n [baseProtocol]: `${baseConfigLocation}/${conf}`,\n })\n } catch (error) {\n console.error(\n `tried to access ${baseConfigLocation}/${conf}, but failed`,\n )\n }\n newConfig = mergeConfigs(newConfig, fetchedConfig) || {}\n }\n if (dataRootReg[protocol]) {\n newConfig.dataRoot = dataRootReg[protocol]\n }\n return createFinalConfig(newConfig)\n }\n const newConfig = regularizeConf(baseConfig, window.location.href)\n if (dataRootReg[protocol]) {\n newConfig.dataRoot = dataRootReg[protocol]\n }\n return createFinalConfig(newConfig)\n}\n\nexport async function createFinalConfig(\n baseConfig: Config,\n defaults = configDefaults,\n): Promise<Config> {\n const configWithDefaults = deepUpdate(clone(defaults), baseConfig)\n let finalConfig = await loadIncludes(configWithDefaults)\n finalConfig = mergeConfigs(finalConfig, baseConfig) || finalConfig\n fillTemplates(finalConfig, finalConfig)\n validateConfig(finalConfig)\n return finalConfig\n}\n\nexport async function fetchConfigFile(location: JBLocation): Promise<Config> {\n const result = await openLocation(location).readFile('utf8')\n if (isUriLocation(location)) {\n return parseJb1(result, location.uri)\n }\n if (isLocalPathLocation(location)) {\n return parseJb1(result, location.localPath)\n }\n return parseJb1(result)\n}\n\nexport function parseJb1(config: string, url = ''): Config {\n if (config.trim().startsWith('{')) {\n return parseJB1Json(config, url)\n }\n return parseJB1Conf(config, url)\n}\n\n/**\n * Merges config object b into a. Properties in b override those in a.\n */\nfunction mergeConfigs(a: Config | null, b: Config | null): Config | null {\n if (b === null) {\n return null\n }\n\n if (a === null) {\n a = {}\n }\n\n for (const prop of Object.keys(b)) {\n if (prop === 'tracks' && prop in a) {\n const aTracks = a[prop] || []\n const bTracks = b[prop] || []\n if (Array.isArray(aTracks) && Array.isArray(bTracks)) {\n a[prop] = mergeTrackConfigs(aTracks || [], bTracks || [])\n } else {\n throw new Error(\n `Track config has not been properly regularized: ${aTracks} ${bTracks}`,\n )\n }\n } else if (\n !noRecursiveMerge(prop) &&\n prop in a &&\n // @ts-ignore\n typeof b[prop] === 'object' &&\n // @ts-ignore\n typeof a[prop] === 'object'\n ) {\n // @ts-ignore\n a[prop] = deepUpdate(a[prop], b[prop])\n } else if (prop === 'dataRoot') {\n if (\n a[prop] === undefined ||\n (a[prop] === 'data' && b[prop] !== undefined)\n ) {\n a[prop] = b[prop]\n }\n // @ts-ignore\n } else if (a[prop] === undefined || b[prop] !== undefined) {\n // @ts-ignore\n a[prop] = b[prop]\n }\n }\n return a\n}\n\n/**\n * Special-case merging of two `tracks` configuration arrays.\n */\nfunction mergeTrackConfigs(a: Track[], b: Track[]): Track[] {\n if (!b.length) {\n return a\n }\n\n // index the tracks in `a` by track label\n const aTracks: Record<string, Track> = {}\n a.forEach((t, i): void => {\n t.index = i\n aTracks[t.label] = t\n })\n\n b.forEach((bT): void => {\n const aT = aTracks[bT.label]\n if (aT) {\n mergeConfigs(aT, bT)\n } else {\n a.push(bT)\n }\n })\n\n return a\n}\n\n/**\n * Recursively fetch, parse, and merge all the includes in the given config\n * object. Calls the callback with the resulting configuration when finished.\n * @param inputConfig - Config to load includes into\n */\nasync function loadIncludes(inputConfig: Config): Promise<Config> {\n inputConfig = clone(inputConfig)\n\n async function loadRecur(\n config: Config,\n upstreamConf: Config,\n ): Promise<Config> {\n const sourceUrl = config.sourceUrl || config.baseUrl\n if (!sourceUrl) {\n throw new Error(\n `Could not determine source URL: ${JSON.stringify(config)}`,\n )\n }\n const newUpstreamConf = mergeConfigs(clone(upstreamConf), config)\n if (!newUpstreamConf) {\n throw new Error('Problem merging configs')\n }\n const includes = fillTemplates(\n regularizeIncludes(config.include || []),\n newUpstreamConf,\n )\n delete config.include\n\n const loads = includes.map(async (include): Promise<Config> => {\n include.cacheBuster = inputConfig.cacheBuster\n const includedData = await fetchConfigFile({\n uri: new URL(include.url, sourceUrl).href,\n locationType: 'UriLocation',\n })\n return loadRecur(includedData, newUpstreamConf)\n })\n const includedDataObjects = await Promise.all(loads)\n includedDataObjects.forEach((includedData): void => {\n config = mergeConfigs(config, includedData) || config\n })\n return config\n }\n\n return loadRecur(inputConfig, {})\n}\n\nfunction regularizeIncludes(\n includes: Include | string | (Include | string)[] | null,\n): Include[] {\n if (!includes) {\n return []\n }\n\n // coerce include to an array\n if (!Array.isArray(includes)) {\n includes = [includes]\n }\n\n return includes.map((include): Include => {\n // coerce bare strings in the includes to URLs\n if (typeof include === 'string') {\n include = { url: include }\n }\n\n // set defaults for format and version\n if (!('format' in include)) {\n include.format = include.url.endsWith('.conf') ? 'conf' : 'JB_json'\n }\n if (include.format === 'JB_json' && !('version' in include)) {\n include.version = 1\n }\n return include\n })\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction fillTemplates<T extends any>(subconfig: T, config: Config): T {\n if (!subconfig) {\n return subconfig\n }\n if (Array.isArray(subconfig)) {\n for (let i = 0; i < subconfig.length; i += 1) {\n subconfig[i] = fillTemplates(subconfig[i], config)\n }\n } else if (typeof subconfig === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sub = subconfig as Record<string, any>\n for (const name of Object.keys(sub)) {\n sub[name] = fillTemplates(sub[name], config)\n }\n } else if (typeof subconfig === 'string') {\n // @ts-ignore\n return fillTemplate(subconfig, config)\n }\n\n return subconfig\n}\n\n/**\n * list of config properties that should not be recursively merged\n * @param propName - name of config property\n */\nfunction noRecursiveMerge(propName: string): boolean {\n return propName === 'datasets'\n}\n\nconst configDefaults = {\n tracks: [],\n\n containerID: 'GenomeBrowser',\n dataRoot: 'data',\n show_tracklist: true,\n show_nav: true,\n show_menu: true,\n show_overview: true,\n show_fullviewlink: true,\n update_browser_title: true,\n updateBrowserURL: true,\n\n refSeqs: '{dataRoot}/seq/refSeqs.json',\n include: ['jbrowse.conf', 'jbrowse_conf.json'],\n nameUrl: '{dataRoot}/names/root.json',\n\n datasets: {\n _DEFAULT_EXAMPLES: true,\n volvox: { url: '?data=sample_data/json/volvox', name: 'Volvox Example' },\n modencode: {\n url: '?data=sample_data/json/modencode',\n name: 'MODEncode Example',\n },\n yeast: { url: '?data=sample_data/json/yeast', name: 'Yeast Example' },\n },\n\n highlightSearchedRegions: false,\n highResolutionMode: 'auto',\n}\n\n/**\n * Examine the loaded and merged configuration for errors. Throws\n * exceptions if it finds anything amiss.\n * @returns nothing meaningful\n */\nfunction validateConfig(config: Config): void {\n if (!config.tracks) {\n config.tracks = []\n }\n if (!config.baseUrl) {\n throw new Error('Must provide a `baseUrl` in configuration')\n }\n}\n","import {\n ConfigurationReference,\n readConfObject,\n} from '@jbrowse/core/configuration'\nimport { getSession } from '@jbrowse/core/util'\nimport { BaseConnectionModelFactory } from '@jbrowse/core/pluggableElementTypes/models'\nimport { types } from 'mobx-state-tree'\nimport configSchema from './configSchema'\n\nimport { fetchJb1 } from './jb1ConfigLoad'\nimport { convertTrackConfig } from './jb1ToJb2'\n\nexport default function (pluginManager) {\n return types.compose(\n 'JBrowse1Connection',\n BaseConnectionModelFactory(pluginManager),\n types\n .model({\n configuration: ConfigurationReference(configSchema),\n type: types.literal('JBrowse1Connection'),\n })\n .actions(self => ({\n connect() {\n const dataDirLocation = readConfObject(\n self.configuration,\n 'dataDirLocation',\n )\n const session = getSession(self)\n fetchJb1(dataDirLocation)\n .then(config => {\n const assemblyName = readConfObject(\n self.configuration,\n 'assemblyNames',\n )[0]\n if (!assemblyName) {\n throw new Error(\n 'assembly name required for JBrowse 1 connection',\n )\n }\n const assemblyConf = session.assemblies.find(\n assembly => readConfObject(assembly, 'name') === assemblyName,\n )\n const sequenceAdapter = readConfObject(assemblyConf, [\n 'sequence',\n 'adapter',\n ])\n const jb2Tracks = config.tracks.map(jb1Track => {\n const jb2Track = convertTrackConfig(\n jb1Track,\n config.dataRoot,\n sequenceAdapter,\n )\n jb2Track.assemblyNames = [assemblyName]\n return jb2Track\n })\n self.setTrackConfs(jb2Tracks)\n })\n .catch(error => {\n console.error(error)\n session.notify(\n `There was a problem connecting to the JBrowse 1 data directory \"${self.name}\". Please make sure you have entered a valid location. The error that was thrown is: \"${error}\"`,\n 'error',\n )\n session.breakConnection(self.configuration)\n })\n },\n })),\n )\n}\n","import { openLocation } from '@jbrowse/core/util/io'\nimport { objectHash } from '@jbrowse/core/util'\nimport {\n generateUnknownTrackConf,\n generateUnsupportedTrackConf,\n guessAdapter,\n guessTrackType,\n UNKNOWN,\n UNSUPPORTED,\n} from '@jbrowse/core/util/tracks'\nimport { Track, RefSeqs, RefSeq } from './types'\n\ninterface Jb2Track {\n trackId: string\n name: string\n description?: string\n category?: string[]\n adapter?: Jb2Adapter\n type?: string\n defaultRendering?: string\n}\n\ninterface Jb2Adapter {\n type: string\n features?: Jb2Feature[]\n bamLocation?: Jb2Location\n cramLocation?: Jb2Location\n craiLocation?: Jb2Location\n fastaLocation?: Jb2Location\n faiLocation?: Jb2Location\n gziLocation?: Jb2Location\n twoBitLocation?: Jb2Location\n bigWigLocation?: Jb2Location\n bigBedLocation?: Jb2Location\n vcfGzLocation?: Jb2Location\n gffGzLocation?: Jb2Location\n bedGzLocation?: Jb2Location\n index?: { location: Jb2Location; indexType?: string }\n rootUrlTemplate?: Jb2Location\n sequenceAdapter?: Jb2Adapter\n}\n\ninterface Jb2Feature {\n refName: string\n uniqueId: string\n start: number\n end: number\n}\n\ninterface Jb2Location {\n uri?: string\n localPath?: string\n blobId?: string\n locationType?: string\n}\n\nexport function convertTrackConfig(\n jb1TrackConfig: Track,\n dataRoot: string,\n sequenceAdapter: Jb2Adapter,\n): Jb2Track {\n const jb2TrackConfig: Jb2Track = {\n trackId: objectHash(jb1TrackConfig),\n name: jb1TrackConfig.key || jb1TrackConfig.label,\n }\n\n const description =\n jb1TrackConfig.metadata &&\n (jb1TrackConfig.metadata.description || jb1TrackConfig.metadata.Description)\n if (description) {\n jb2TrackConfig.description = description\n }\n\n const category =\n jb1TrackConfig.category ||\n (jb1TrackConfig.metadata && jb1TrackConfig.metadata.category)\n jb2TrackConfig.category = category ? category.split(/\\s*\\/\\s*/) : []\n\n const { storeClass } = jb1TrackConfig\n if (!jb1TrackConfig.urlTemplate) {\n if (!(storeClass && storeClass.endsWith('FromConfig'))) {\n const trackIdentifier = jb1TrackConfig.key || jb1TrackConfig.label\n console.warn(\n `Could not import JBrowse1 track \"${trackIdentifier}\" because it does not have a \"urlTemplate\" or is not a \"FromConfig\" track`,\n )\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n trackIdentifier,\n jb2TrackConfig.category,\n )\n }\n return generateFromConfigTrackConfig(jb1TrackConfig, jb2TrackConfig)\n }\n\n const resolveUrlTemplate = (urlTemplate: string) => {\n return new URL(urlTemplate, `${dataRoot}/`).href\n .replace(/%7B/gi, '{')\n .replace(/%7D/gi, '}')\n }\n const urlTemplate = resolveUrlTemplate(jb1TrackConfig.urlTemplate)\n\n if (storeClass) {\n if (storeClass === 'JBrowse/Store/SeqFeature/BAM') {\n const adapter: Jb2Adapter = {\n type: 'BamAdapter',\n bamLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.baiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.baiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.bai`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'AlignmentsTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/CRAM') {\n const adapter: Jb2Adapter = {\n type: 'CramAdapter',\n cramLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n sequenceAdapter,\n }\n if (jb1TrackConfig.craiUrlTemplate) {\n adapter.craiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.craiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.craiLocation = {\n uri: `${urlTemplate}.crai`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'AlignmentsTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/NCList') {\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter: {\n type: 'NCListAdapter',\n rootUrlTemplate: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (\n storeClass === 'JBrowse/Store/SeqFeature/BigWig' ||\n storeClass === 'JBrowse/Store/BigWig'\n ) {\n if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('XYPlot')) {\n jb2TrackConfig.defaultRendering = 'xyplot'\n } else if (\n jb1TrackConfig.type &&\n jb1TrackConfig.type.endsWith('Density')\n ) {\n jb2TrackConfig.defaultRendering = 'density'\n }\n return {\n ...jb2TrackConfig,\n type: 'QuantitativeTrack',\n adapter: {\n type: 'BigWigAdapter',\n bigWigLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/VCFTabix') {\n const adapter: Jb2Adapter = {\n type: 'VcfTabixAdapter',\n vcfGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'VariantTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/VCFTribble') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `VCFTribble (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GFF3') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `GFF3 (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BigBed') {\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter: {\n type: 'BigBedAdapter',\n bigBedLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GFF3Tabix') {\n const adapter: Jb2Adapter = {\n type: 'Gff3TabixAdapter',\n gffGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BED') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `BED (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BEDTabix') {\n const adapter: Jb2Adapter = {\n type: 'BedTabixAdapter',\n bedGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GTF') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `GTF (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (\n storeClass === 'JBrowse/Store/SeqFeature/StaticChunked' ||\n storeClass === 'JBrowse/Store/Sequence/StaticChunked'\n ) {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `StaticChunked (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/UnindexedFasta') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `UnindexedFasta (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/IndexedFasta') {\n const adapter: Jb2Adapter = {\n type: 'IndexedFastaAdapter',\n fastaLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.faiUrlTemplate) {\n adapter.faiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.faiLocation = {\n uri: `${urlTemplate}.fai`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'SequenceTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BgzipIndexedFasta') {\n const adapter: Jb2Adapter = {\n type: 'BgzipFastaAdapter',\n fastaLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.faiUrlTemplate) {\n adapter.faiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.faiLocation = {\n uri: `${urlTemplate}.fai`,\n locationType: 'UriLocation',\n }\n }\n if (jb1TrackConfig.gziUrlTemplate) {\n adapter.gziLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.gziUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.gziLocation = {\n uri: `${urlTemplate}.gzi`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'ReferenceSequenceTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/TwoBit') {\n return {\n ...jb2TrackConfig,\n type: 'ReferenceSequenceTrack',\n adapter: {\n type: 'TwoBitAdapter',\n twoBitLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n }\n\n // If we don't recogize the store class, make a best effort to guess by file type\n jb2TrackConfig.adapter = guessAdapter(\n { uri: urlTemplate, locationType: 'UriLocation' },\n undefined,\n urlTemplate,\n )\n if (!jb2TrackConfig.adapter) {\n throw new Error('Could not determine adapter')\n }\n\n if (jb2TrackConfig.adapter.type === UNSUPPORTED) {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n urlTemplate,\n jb2TrackConfig.category,\n )\n }\n if (jb2TrackConfig.adapter.type === UNKNOWN) {\n return generateUnknownTrackConf(\n jb2TrackConfig.name,\n urlTemplate,\n jb2TrackConfig.category,\n )\n }\n\n jb2TrackConfig.type = guessTrackType(jb2TrackConfig.adapter.type)\n\n if (jb2TrackConfig.type === 'QuantitativeTrack') {\n if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('XYPlot')) {\n jb2TrackConfig.defaultRendering = 'xyplot'\n } else if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('Density')) {\n jb2TrackConfig.defaultRendering = 'density'\n }\n }\n\n return jb2TrackConfig\n}\n\nfunction generateFromConfigTrackConfig(\n jb1TrackConfig: Track,\n jb2TrackConfig: Jb2Track,\n): Jb2Track {\n const jb1Features = jb1TrackConfig.features || []\n const jb2Features = jb1Features.map((feature): Jb2Feature => {\n const jb2Feature: Jb2Feature = JSON.parse(JSON.stringify(feature))\n jb2Feature.refName = feature.seq_id\n jb2Feature.uniqueId = `${feature.seq_id}:${feature.start}-${feature.end}:${\n feature.name || ''\n }`\n return jb2Feature\n })\n jb2TrackConfig.adapter = {\n type: 'FromConfigAdapter',\n features: jb2Features,\n }\n jb2TrackConfig.type = 'FeatureTrack'\n return jb2TrackConfig\n}\n\nexport async function createRefSeqsAdapter(\n refSeqs: string | RefSeqs,\n): Promise<Jb2Adapter> {\n if (typeof refSeqs === 'string') {\n // assume refSeqs is a url if it is string\n refSeqs = {\n url: refSeqs,\n }\n }\n\n // check refseq urls\n if (refSeqs.url) {\n if (refSeqs.url.match(/.fai$/)) {\n return {\n type: 'IndexedFastaAdapter',\n fastaLocation: {\n uri: refSeqs.url.slice(0, -4),\n locationType: 'UriLocation',\n },\n faiLocation: {\n uri: refSeqs.url,\n locationType: 'UriLocation',\n },\n }\n }\n if (refSeqs.url.match(/.2bit$/)) {\n return {\n type: 'TwoBitAdapter',\n twoBitLocation: { uri: refSeqs.url, locationType: 'UriLocation' },\n }\n }\n if (refSeqs.url.match(/.fa$/)) {\n throw new Error('Unindexed FASTA adapter not available')\n }\n if (refSeqs.url.match(/.sizes/)) {\n throw new Error('chromosome SIZES adapter not available')\n }\n const refSeqsJson = await openLocation({\n uri: refSeqs.url,\n locationType: 'UriLocation',\n }).readFile('utf8')\n const refSeqsData: RefSeq[] = JSON.parse(refSeqsJson)\n return refSeqAdapterFromConfig(refSeqsData)\n }\n if ('data' in refSeqs) {\n return refSeqAdapterFromConfig(refSeqs.data || [])\n }\n throw new Error(\n `Could not determine adapter for JBrowse1 refSeqs: ${\n refSeqs.url || JSON.stringify(refSeqs)\n }`,\n )\n}\n\nfunction refSeqAdapterFromConfig(refSeqsData: RefSeq[]): Jb2Adapter {\n const features = refSeqsData.map(\n (refSeq): Jb2Feature => ({\n refName: refSeq.name,\n uniqueId: refSeq.name,\n start: refSeq.start,\n end: refSeq.end,\n }),\n )\n return {\n type: 'FromConfigAdapter',\n features,\n }\n}\n","import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'\nimport TextSearchAdapterType from '@jbrowse/core/pluggableElementTypes/TextSearchAdapterType'\nimport ConnectionType from '@jbrowse/core/pluggableElementTypes/ConnectionType'\nimport Plugin from '@jbrowse/core/Plugin'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { FileLocation } from '@jbrowse/core/util/types'\nimport { configSchema as ncListAdapterConfigSchema } from './NCListAdapter'\nimport {\n AdapterClass as JBrowse1TextSearchAdapterClass,\n configSchema as jbrowse1AdapterConfigSchema,\n} from './JBrowse1TextSeachAdapter'\nimport { AdapterGuesser, getFileName } from '@jbrowse/core/util/tracks'\n\nimport {\n configSchema as jbrowse1ConfigSchema,\n modelFactory as jbrowse1ModelFactory,\n} from './JBrowse1Connection'\n\nexport default class LegacyJBrowsePlugin extends Plugin {\n name = 'LegacyJBrowsePlugin'\n\n install(pluginManager: PluginManager) {\n pluginManager.addAdapterType(\n () =>\n new AdapterType({\n name: 'NCListAdapter',\n configSchema: ncListAdapterConfigSchema,\n getAdapterClass: () =>\n import('./NCListAdapter/NCListAdapter').then(r => r.default),\n }),\n )\n pluginManager.addToExtensionPoint(\n 'Core-guessAdapterForLocation',\n (adapterGuesser: AdapterGuesser) => {\n return (\n file: FileLocation,\n index?: FileLocation,\n adapterHint?: string,\n ) => {\n const regexGuess = /trackData.jsonz?$/i\n const adapterName = 'NCListAdapter'\n const fileName = getFileName(file)\n if (regexGuess.test(fileName) || adapterHint === adapterName) {\n return {\n type: adapterName,\n rootUrlTemplate: file,\n }\n }\n return adapterGuesser(file, index, adapterHint)\n }\n },\n )\n\n pluginManager.addTextSearchAdapterType(\n () =>\n new TextSearchAdapterType({\n name: 'JBrowse1TextSearchAdapter',\n configSchema: jbrowse1AdapterConfigSchema,\n AdapterClass: JBrowse1TextSearchAdapterClass,\n description: 'A JBrowse 1 text search adapter',\n }),\n )\n\n pluginManager.addConnectionType(\n () =>\n new ConnectionType({\n name: 'JBrowse1Connection',\n configSchema: jbrowse1ConfigSchema,\n stateModel: jbrowse1ModelFactory(pluginManager),\n displayName: 'JBrowse 1 Data',\n description: 'A JBrowse 1 data directory',\n url: '//jbrowse.org/',\n }),\n )\n }\n}\n","import {\n Feature,\n SimpleFeatureSerialized,\n} from '@jbrowse/core/util/simpleFeature'\n\nconst jb2ToJb1 = { refName: 'seq_id' }\n\nconst jb1ToJb2 = { seq_id: 'refName' }\n\n/**\n * wrapper to adapt nclist features to act like jbrowse 2 features\n */\nexport default class NCListFeature implements Feature {\n private parentHandle?: Feature\n\n private uniqueId: string\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(private ncFeature: any, parent?: Feature, id?: string) {\n this.uniqueId = id || ncFeature.id()\n this.parentHandle = parent\n }\n\n set(): void {\n throw new Error('not implemented')\n }\n\n jb2TagToJb1Tag(tag: string): string {\n // @ts-ignore\n const mapped = jb2ToJb1[tag] || tag\n return mapped.toLowerCase()\n }\n\n jb1TagToJb2Tag(tag: string): string {\n const t = tag.toLowerCase()\n // @ts-ignore\n const mapped = jb1ToJb2[t] || t\n return mapped\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(attrName: string): any {\n const attr = this.ncFeature.get(this.jb2TagToJb1Tag(attrName))\n if (attr && attrName === 'subfeatures') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return attr.map((subfeature: any) => new NCListFeature(subfeature, this))\n }\n return attr\n }\n\n /**\n * Get an array listing which data keys are present in this feature.\n */\n tags(): string[] {\n return this.ncFeature.tags().map((t: string) => this.jb1TagToJb2Tag(t))\n }\n\n /**\n * Get the unique ID of this feature.\n */\n id(): string {\n return this.uniqueId\n }\n\n /**\n * Get this feature's parent feature, or undefined if none.\n */\n parent(): Feature | undefined {\n return this.parentHandle\n }\n\n /**\n * Get an array of child features, or undefined if none.\n */\n children(): Feature[] | undefined {\n return this.get('subfeatures')\n }\n\n toJSON(): SimpleFeatureSerialized {\n const data: SimpleFeatureSerialized = { uniqueId: this.id() }\n this.ncFeature.tags().forEach((tag: string) => {\n const mappedTag = this.jb1TagToJb2Tag(tag)\n const value = this.ncFeature.get(tag)\n if (mappedTag === 'subfeatures') {\n data.subfeatures = (value || []).map((f: Feature) => {\n // note: was new NCListFeature(f, `${this.id()}-${i}`, this).toJSON()\n return new NCListFeature(f, this).toJSON()\n })\n } else {\n data[mappedTag] = value\n }\n })\n return data\n }\n}\n","import NCListStore from '@gmod/nclist'\nimport { Region } from '@jbrowse/core/util/types'\nimport {\n BaseFeatureDataAdapter,\n BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { Feature } from '@jbrowse/core/util/simpleFeature'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\nimport { checkAbortSignal } from '@jbrowse/core/util'\nimport { RemoteFile } from 'generic-filehandle'\nimport { Instance } from 'mobx-state-tree'\nimport { readConfObject } from '@jbrowse/core/configuration'\nimport NCListFeature from './NCListFeature'\nimport MyConfigSchema from './configSchema'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\n\nexport default class NCListAdapter extends BaseFeatureDataAdapter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private nclist: any\n\n private configRefNames?: string[]\n\n constructor(\n config: Instance<typeof MyConfigSchema>,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n const refNames = readConfObject(config, 'refNames')\n const rootUrlTemplate = readConfObject(config, 'rootUrlTemplate')\n this.configRefNames = refNames\n\n this.nclist = new NCListStore({\n baseUrl: '',\n urlTemplate: rootUrlTemplate.uri,\n readFile: (url: string) =>\n new RemoteFile(\n String(\n rootUrlTemplate.baseUri\n ? new URL(url, rootUrlTemplate.baseUri).toString()\n : url,\n ),\n ).readFile(),\n })\n }\n\n /**\n * Fetch features for a certain region. Use getFeaturesInRegion() if you also\n * want to verify that the store has features for the given reference sequence\n * before fetching.\n * @param region -\n * @param opts - [signal] optional signalling object for aborting the fetch\n * @returns Observable of Feature objects in the region\n */\n getFeatures(region: Region, opts: BaseOptions = {}) {\n return ObservableCreate<Feature>(async observer => {\n const { signal } = opts\n for await (const feature of this.nclist.getFeatures(region, opts)) {\n checkAbortSignal(signal)\n observer.next(this.wrapFeature(feature))\n }\n observer.complete()\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapFeature(ncFeature: any): NCListFeature {\n return new NCListFeature(\n ncFeature,\n undefined,\n `${this.id}-${ncFeature.id()}`,\n )\n }\n\n async hasDataForRefName(refName: string) {\n const root = await this.nclist.getDataRoot(refName)\n return !!(root && root.stats && root.stats.featureCount)\n }\n\n /*\n * NCList is unable to get list of ref names so returns empty\n * @return Promise<string[]> of empty list\n */\n getRefNames() {\n return Promise.resolve(this.configRefNames || [])\n }\n\n /**\n * called to provide a hint that data tied to a certain region\n * will not be needed for the forseeable future and can be purged\n * from caches, etc\n */\n freeResources() {}\n}\n"],"names":["ConfigurationSchema","rootUrlTemplate","type","defaultValue","uri","locationType","refNames","description","explicitlyTyped","runtime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","generator","create","Generator","context","Context","_invoke","state","method","arg","Error","undefined","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","__await","then","unwrapped","error","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","HttpMap","args","url","test","loadFile","compress","meta","tracks","track_names","hashHexCharacters","Math","ceil","hash_bits","readMeta","getBucket","bucketIdent","hash","hexToDirPath","id","fetch","response","ok","status","statusText","json","hex","getHashHexCharacters","getCompress","substr","dirpath","substring","join","data","crc32","Buffer","from","toString","toLowerCase","replace","JBrowse1TextSearchAdapter","BaseAdapter","config","getSubAdapter","pluginManager","namesIndexLocation","readConfObject","httpMap","baseUri","URL","href","query","searchType","queryString","tracksNames","getTrackNames","loadIndexFile","entries","formatResults","results","prefix","map","BaseResult","label","_typeof","matchedAttribute","matchedObject","exact","trackIndex","start","end","locstring","locString","trackId","filter","getLabel","assemblyNames","explicitIdentifier","dataDirLocation","baseConfiguration","baseConnectionConfig","isTrack","deepUpdate","a","b","prop","clone","src","nodeType","cloneNode","Date","getTime","RegExp","r","l","Array","isArray","dest","source","copyFunc","s","empty","mixin","parseJB1Json","parsedConf","JSON","parse","regularizeConf","parseJB1Conf","text","keyPath","operation","lineNumber","section","recordVal","parsedValue","match","parseFloat","path","concat","existing","getValue","setValue","e","split","textLine","line","trim","conf","track","trackMetadata","sources","sourceDef","newSourceDef","typeMatch","sourceUrl","startsWith","window","location","baseUrl","endsWith","addBase","stores","names","t","refSeqs","nameUrl","trackConfig","c","trackClassName","store","regularizeClass","synthesizeTrackStoreConfig","histograms","root","className","includes","mainConf","storeClass","urlTemplate","backendVersion","guessStoreClass","storeConf","useAsRefSeqStore","refseqs","objectHash","console","warn","isUriLocation","isLocalPathLocation","localPath","baseConfig","include","baseConfigRoot","protocol","dataRoot","dataRootReg","stringify","dataRootLocation","baseProtocol","baseConfigLocation","newConfig","fetchedConfig","fetchConfigFile","mergeConfigs","createFinalConfig","configWithDefaults","configDefaults","loadIncludes","fillTemplates","finalConfig","validateConfig","openLocation","readFile","parseJb1","aTracks","bTracks","mergeTrackConfigs","index","bT","aT","inputConfig","loadRecur","upstreamConf","newUpstreamConf","regularizeIncludes","loads","cacheBuster","all","includedData","format","version","subconfig","sub","template","fillWith","varName","fill","callback","v","_this","fillTemplate","containerID","show_tracklist","show_nav","show_menu","show_overview","show_fullviewlink","update_browser_title","updateBrowserURL","datasets","_DEFAULT_EXAMPLES","volvox","modencode","yeast","highlightSearchedRegions","highResolutionMode","types","compose","BaseConnectionModelFactory","model","configuration","ConfigurationReference","configSchema","literal","actions","connect","session","getSession","fetchJb1","assemblyName","assemblyConf","assemblies","find","assembly","sequenceAdapter","jb2Tracks","jb1Track","jb2Track","jb1TrackConfig","jb2TrackConfig","metadata","Description","category","trackIdentifier","generateUnsupportedTrackConf","jb2Features","features","feature","jb2Feature","refName","seq_id","uniqueId","adapter","generateFromConfigTrackConfig","resolveUrlTemplate","bamLocation","baiUrlTemplate","csiUrlTemplate","indexType","cramLocation","craiLocation","craiUrlTemplate","defaultRendering","bigWigLocation","vcfGzLocation","tbiUrlTemplate","bigBedLocation","gffGzLocation","bedGzLocation","fastaLocation","faiLocation","faiUrlTemplate","gziLocation","gziUrlTemplate","twoBitLocation","guessAdapter","UNSUPPORTED","UNKNOWN","generateUnknownTrackConf","guessTrackType","convertTrackConfig","setTrackConfs","notify","breakConnection","LegacyJBrowsePlugin","Plugin","addAdapterType","AdapterType","ncListAdapterConfigSchema","getAdapterClass","addToExtensionPoint","adapterGuesser","file","adapterHint","fileName","getFileName","addTextSearchAdapterType","TextSearchAdapterType","jbrowse1AdapterConfigSchema","AdapterClass","JBrowse1TextSearchAdapterClass","addConnectionType","ConnectionType","jbrowse1ConfigSchema","stateModel","jbrowse1ModelFactory","jb2ToJb1","jb1ToJb2","NCListFeature","ncFeature","parent","parentHandle","tag","attrName","attr","get","jb2TagToJb1Tag","subfeature","tags","_this2","jb1TagToJb2Tag","mappedTag","_this3","subfeatures","f","toJSON","BaseFeatureDataAdapter","configRefNames","nclist","NCListStore","RemoteFile","String","region","opts","ObservableCreate","observer","signal","getFeatures","checkAbortSignal","wrapFeature","getDataRoot","stats","featureCount"],"mappings":"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"}
1
+ {"version":3,"file":"plugin-legacy-jbrowse.cjs.production.min.js","sources":["../src/NCListAdapter/configSchema.ts","../../../node_modules/regenerator-runtime/runtime.js","../src/JBrowse1TextSeachAdapter/HttpMap.ts","../src/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.ts","../src/JBrowse1TextSeachAdapter/configSchema.ts","../src/JBrowse1Connection/configSchema.ts","../src/JBrowse1Connection/util.ts","../src/JBrowse1Connection/jb1ConfigParse.ts","../src/JBrowse1Connection/jb1ConfigLoad.ts","../src/JBrowse1Connection/model.js","../src/JBrowse1Connection/jb1ToJb2.ts","../src/index.ts","../src/NCListAdapter/NCListFeature.ts","../src/NCListAdapter/NCListAdapter.ts"],"sourcesContent":["import { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'NCListAdapter',\n {\n rootUrlTemplate: {\n type: 'fileLocation',\n defaultValue: {\n uri: '/path/to/my/{refseq}/trackData.json',\n locationType: 'UriLocation',\n },\n },\n refNames: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of refNames used by the NCList used for aliasing',\n },\n },\n { explicitlyTyped: true },\n)\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function define(obj, key, value) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n return obj[key];\n }\n try {\n // IE 8 has a broken Object.defineProperty that only works on DOM objects.\n define({}, \"\");\n } catch (err) {\n define = function(obj, key, value) {\n return obj[key] = value;\n };\n }\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n define(IteratorPrototype, iteratorSymbol, function () {\n return this;\n });\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = GeneratorFunctionPrototype;\n define(Gp, \"constructor\", GeneratorFunctionPrototype);\n define(GeneratorFunctionPrototype, \"constructor\", GeneratorFunction);\n GeneratorFunction.displayName = define(\n GeneratorFunctionPrototype,\n toStringTagSymbol,\n \"GeneratorFunction\"\n );\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n define(prototype, method, function(arg) {\n return this._invoke(method, arg);\n });\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n define(genFun, toStringTagSymbol, \"GeneratorFunction\");\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n define(AsyncIterator.prototype, asyncIteratorSymbol, function () {\n return this;\n });\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n define(Gp, toStringTagSymbol, \"Generator\");\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n define(Gp, iteratorSymbol, function() {\n return this;\n });\n\n define(Gp, \"toString\", function() {\n return \"[object Generator]\";\n });\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, in modern engines\n // we can explicitly access globalThis. In older engines we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n if (typeof globalThis === \"object\") {\n globalThis.regeneratorRuntime = runtime;\n } else {\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n }\n}\n","/*\n * Helper class allows reading names index generated in JBrowse1\n * Adapted from https://github.com/GMOD/jbrowse/blob/master/src/JBrowse/Store/Hash.js\n */\nimport crc32 from 'buffer-crc32'\n\nexport default class HttpMap {\n url: string\n\n constructor(args: { url: string }) {\n // make sure url has a trailing slash\n this.url = /\\/$/.test(args.url) ? args.url : `${args.url}/`\n }\n\n /**\n * loads meta.json file from names directory and reads number of hash_bits used\n */\n async readMeta() {\n const meta = await this.loadFile('meta.json')\n const { compress, track_names: tracks } = meta\n const hashHexCharacters = Math.ceil(meta.hash_bits / 4)\n return { hashHexCharacters, compress, tracks }\n }\n\n async getHashHexCharacters() {\n const meta = await this.readMeta()\n return meta.hashHexCharacters\n }\n\n async getCompress() {\n const meta = await this.readMeta()\n return meta.compress\n }\n\n async getTrackNames() {\n const meta = await this.readMeta()\n return meta.tracks\n }\n\n /**\n * Returns contents of a bucket given a key\n * @param key - string\n */\n async get(key: string) {\n const bucket = await this.getBucket(key)\n return bucket[key]\n }\n\n /**\n * Returns a bucket given a key\n * @param key - string\n */\n async getBucket(key: string) {\n const bucketIdent = this.hash(key)\n const hexToDirPath = await this.hexToDirPath(bucketIdent)\n return this.loadFile(hexToDirPath)\n }\n\n /**\n * Loads a file using the url and provided id.\n * Returns response object with contents of the file\n * @param id - string\n */\n async loadFile(id: string) {\n const response = await fetch(`${this.url}${id}`)\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} ${response.statusText}`)\n }\n return response.json()\n }\n\n /**\n * Returns the corresponding path of the file given a hex string\n * @param hex - hex string\n */\n async hexToDirPath(hex: string) {\n // zero-pad the hex string to be 8 chars if necessary\n const hashHexCharacters = await this.getHashHexCharacters()\n if (hashHexCharacters) {\n const compress = await this.getCompress()\n while (hex.length < 8) {\n hex = `0${hex}`\n }\n hex = hex.substr(8 - hashHexCharacters)\n const dirpath = []\n for (let i = 0; i < hex.length; i += 3) {\n dirpath.push(hex.substring(i, i + 3))\n }\n return `${dirpath.join('/')}.json${compress ? 'z' : ''}`\n }\n return ''\n }\n\n hash(data: string) {\n return crc32(Buffer.from(data))\n .toString('hex')\n .toLowerCase()\n .replace('-', 'n')\n }\n}\n","import {\n BaseTextSearchAdapter,\n BaseArgs,\n BaseAdapter,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport BaseResult from '@jbrowse/core/TextSearch/BaseResults'\nimport { Instance } from 'mobx-state-tree'\nimport { readConfObject } from '@jbrowse/core/configuration'\nimport MyConfigSchema from './configSchema'\nimport HttpMap from './HttpMap'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\n\nexport interface TooManyHits {\n name: string\n hitLimit: number\n}\n\ninterface SearchResults {\n prefix: ({ name: string } | string)[]\n exact: [string, number, string, string, number, number][]\n}\n\nexport type NamesIndexRecord = string | Array<string | number>\n\n// Jbrowse1 text search adapter\n// Uses index built by generate-names.pl\nexport default class JBrowse1TextSearchAdapter\n extends BaseAdapter\n implements BaseTextSearchAdapter\n{\n httpMap: HttpMap\n\n tracksNames?: string[]\n\n constructor(\n config: Instance<typeof MyConfigSchema>,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n const namesIndexLocation = readConfObject(config, 'namesIndexLocation')\n if (!namesIndexLocation) {\n throw new Error('must provide namesIndexLocation')\n }\n this.httpMap = new HttpMap({\n url: namesIndexLocation.baseUri\n ? new URL(namesIndexLocation.uri, namesIndexLocation.baseUri).href\n : namesIndexLocation.uri,\n })\n }\n\n /**\n * Returns the contents of the file containing the query if it exists\n * else it returns empty\n * @param query - string query\n */\n async loadIndexFile(query: string): Promise<Record<string, SearchResults>> {\n return this.httpMap.getBucket(query)\n }\n\n async searchIndex(args: BaseArgs) {\n const { searchType, queryString } = args\n const tracks = this.tracksNames || (await this.httpMap.getTrackNames())\n const entries = await this.loadIndexFile(queryString.toLowerCase())\n if (entries[queryString]) {\n return this.formatResults(entries[queryString], tracks, searchType)\n }\n return []\n }\n formatResults(results: SearchResults, tracks: string[], searchType?: string) {\n return [\n ...(searchType === 'exact'\n ? []\n : results.prefix.map(result => {\n return new BaseResult({\n label: typeof result === 'object' ? result.name : result,\n matchedAttribute: 'name',\n matchedObject: { result: result },\n })\n })),\n ...results.exact.map(result => {\n const name = result[0] as string\n const trackIndex = result[1] as number\n const refName = result[3] as string\n const start = result[4] as number\n const end = result[5] as number\n const locstring = `${refName || name}:${start}-${end}`\n return new BaseResult({\n locString: locstring,\n label: name,\n matchedAttribute: 'name',\n matchedObject: result,\n trackId: tracks[trackIndex],\n })\n }),\n ].filter(result => result.getLabel() !== 'too many matches')\n }\n\n freeResources() {}\n}\n","import { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'JBrowse1TextSearchAdapter',\n {\n // metadata about tracks and assemblies covered by text search adapter\n namesIndexLocation: {\n type: 'fileLocation',\n defaultValue: { uri: '/volvox/names', locationType: 'UriLocation' },\n description: 'the location of the JBrowse1 names index data directory',\n },\n tracks: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of tracks covered by text search adapter',\n },\n assemblyNames: {\n type: 'stringArray',\n defaultValue: [],\n description: 'List of assemblies covered by text search adapter',\n },\n },\n { explicitlyTyped: true, explicitIdentifier: 'textSearchAdapterId' },\n)\n","import { baseConnectionConfig } from '@jbrowse/core/pluggableElementTypes/models'\nimport { ConfigurationSchema } from '@jbrowse/core/configuration'\n\nexport default ConfigurationSchema(\n 'JBrowse1Connection',\n {\n dataDirLocation: {\n type: 'fileLocation',\n defaultValue: {\n uri: 'http://mysite.com/jbrowse/data/',\n locationType: 'UriLocation',\n },\n description:\n 'the location of the JBrowse 1 data directory, often something like http://mysite.com/jbrowse/data/',\n },\n assemblyNames: {\n description:\n 'name of the assembly the connection belongs to, should be a single entry',\n type: 'stringArray',\n defaultValue: [],\n },\n },\n { baseConfiguration: baseConnectionConfig },\n)\n","import getValue from 'get-value'\nimport { Track, Source } from './types'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isTrack(arg: any): arg is Track {\n return arg && arg.label && typeof arg.label === 'string'\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isSource(arg: any): arg is Source {\n return arg && arg.url && typeof arg.url === 'string'\n}\n\n/**\n * updates a with values from b, recursively\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Obj = Record<string, any>\nexport function deepUpdate(a: Obj, b: Obj): Obj {\n for (const prop of Object.keys(b)) {\n if (\n prop in a &&\n typeof b[prop] === 'object' &&\n typeof a[prop] === 'object'\n ) {\n deepUpdate(a[prop], b[prop])\n } else if (\n typeof a[prop] === 'undefined' ||\n typeof b[prop] !== 'undefined'\n ) {\n a[prop] = b[prop]\n }\n }\n return a\n}\n\n/**\n * replace variables in a template string with values\n * @param template - String with variable names in curly brackets\n * e.g., `http://foo/{bar}?arg={baz.foo}`\n * @param fillWith - object with attribute-value mappings\n * e.g., `{ 'bar': 'someurl', 'baz': { 'foo': 42 } }`\n * @returns the template string with variables in fillWith replaced\n * e.g., 'htp://foo/someurl?arg=valueforbaz'\n */\nexport function fillTemplate(template: string, fillWith: Obj): string {\n return template.replace(\n /\\{([\\w\\s.]+)\\}/g,\n (match, varName: string): string => {\n varName = varName.replace(/\\s+/g, '') // remove all whitespace\n const fill = getValue(fillWith, varName)\n if (fill !== undefined) {\n if (typeof fill === 'function') {\n return fill(varName)\n }\n return fill\n }\n if (fillWith.callback) {\n // @ts-ignore\n const v = fillWith.callback.call(this, varName)\n if (v !== undefined) {\n return v\n }\n }\n return match\n },\n )\n}\n\n/**\n * Clones objects (including DOM nodes) and all children.\n * Warning: do not clone cyclic structures\n * (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)\n * @param src - The object to clone\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function clone(src: any): any {\n if (\n !src ||\n typeof src !== 'object' ||\n Object.prototype.toString.call(src) === '[object Function]'\n ) {\n // null, undefined, any non-object, or function\n return src // anything\n }\n if (src.nodeType && 'cloneNode' in src) {\n // DOM Node\n return src.cloneNode(true) // Node\n }\n if (src instanceof Date) {\n // Date\n return new Date(src.getTime()) // Date\n }\n if (src instanceof RegExp) {\n // RegExp\n return new RegExp(src) // RegExp\n }\n let r\n let i\n let l\n if (Array.isArray(src)) {\n // array\n r = []\n for (i = 0, l = src.length; i < l; ++i) {\n if (i in src) {\n r[i] = clone(src[i])\n }\n }\n // we don't clone functions for performance reasons\n // }else if(d.isFunction(src)){\n // // function\n // r = function(){ return src.apply(this, arguments); };\n } else {\n // generic objects\n r = src.constructor ? new src.constructor() : {}\n }\n return mixin(r, src, clone)\n}\n\n/**\n * Copies/adds all properties of source to dest; returns dest.\n * (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)\n *\n * All properties, including functions (sometimes termed \"methods\"), excluding\n * any non-standard extensions found in Object.prototype, are copied/added to\n * dest. Copying/adding each particular property is delegated to copyFunc\n * (if any); copyFunc defaults to the Javascript assignment operator if not\n * provided. Notice that by default, mixin executes a so-called \"shallow copy\"\n * and aggregate types are copied/added by reference.\n * @param dest - The object to which to copy/add all properties contained in\n * source.\n * @param source - The object from which to draw all properties to copy into dest.\n * @param copyFunc - The process used to copy/add a property in source; defaults\n * to the Javascript assignment operator.\n * @returns dest, as modified\n */\nfunction mixin(dest: Obj, source: Obj, copyFunc: Function): Obj {\n let name\n let s\n const empty = {}\n for (name in source) {\n // the (!(name in empty) || empty[name] !== s) condition avoids copying\n // properties in \"source\" inherited from Object.prototype.\t For example,\n // if dest has a custom toString() method, don't overwrite it with the\n // toString() method that source inherited from Object.prototype\n s = source[name]\n if (\n !(name in dest) ||\n // @ts-ignore\n (dest[name] !== s && (!(name in empty) || empty[name] !== s))\n ) {\n dest[name] = copyFunc ? copyFunc(s) : s\n }\n }\n\n return dest // Object\n}\n","/* eslint no-cond-assign: [\"error\", \"except-parens\"] */\nimport getValue from 'get-value'\nimport setValue from 'set-value'\nimport { objectHash } from '@jbrowse/core/util'\nimport { isSource, isTrack } from './util'\nimport { Config, Track, Source, Store, Names } from './types'\n\nexport function parseJB1Json(config: Config | string, url: string): Config {\n if (typeof config === 'string') {\n let parsedConf\n try {\n parsedConf = JSON.parse(config)\n } catch (error) {\n throw new Error(`${error} when parsing configuration.`)\n }\n return regularizeConf(parsedConf, url)\n }\n return regularizeConf(config, url)\n}\n\nexport function parseJB1Conf(config: string, url: string): Config {\n let parsedConf\n try {\n parsedConf = parse(config, url)\n } catch (error) {\n throw new Error(`${error} when parsing configuration.`)\n }\n return regularizeConf(parsedConf, url)\n}\n\nfunction isAlwaysArray(varName: string): boolean {\n if (varName === 'include') {\n return true\n }\n return false\n}\n\nfunction parse(text: string, url: string): Config {\n let section: string[] = []\n let keyPath: string[] | undefined\n let operation: string\n let value: string | undefined\n const data: Config = { tracks: {} }\n let lineNumber: number\n\n function recordVal(): void {\n if (value !== undefined) {\n let parsedValue:\n | string\n | number\n | boolean\n | string[]\n | number[]\n | boolean[]\n try {\n // parse json\n const match = value.match(/^json:(.+)/i)\n if (match) {\n parsedValue = JSON.parse(match[1])\n }\n // parse numbers if it looks numeric\n else if (/^[+-]?[\\d.,]+([eE][-+]?\\d+)?$/.test(value)) {\n parsedValue = parseFloat(value.replace(/,/g, ''))\n } else {\n parsedValue = value\n }\n\n if (!keyPath) {\n throw new Error(`Error parsing in section ${section.join(' - ')}`)\n }\n const path = section.concat(keyPath).join('.')\n if (operation === '+=') {\n let existing = getValue(data, path)\n if (existing) {\n if (!Array.isArray(existing)) {\n existing = [existing]\n }\n } else {\n existing = []\n }\n\n existing.push(parsedValue)\n parsedValue = existing\n }\n if (parsedValue === 'true') {\n parsedValue = true\n }\n if (parsedValue === 'false') {\n parsedValue = false\n }\n setValue(data, path, parsedValue)\n } catch (e) {\n throw new Error(\n `syntax error${url ? ` in ${url}` : ''}${\n lineNumber ? ` at line ${lineNumber - 1}` : ''\n }`,\n )\n }\n }\n }\n\n text.split('\\n').forEach((textLine, i): void => {\n lineNumber = i + 1\n const line = textLine.replace(/^\\s*#.+/, '')\n\n // new section\n let match: RegExpMatchArray | null\n if ((match = line.match(/^\\s*\\[([^\\]]+)/))) {\n // new section\n recordVal()\n keyPath = undefined\n value = undefined\n section = match[1].trim().split(/\\s*\\.\\s*/)\n if (section.length === 1 && section[0].toLowerCase() === 'general') {\n section = []\n }\n }\n // new value\n else if (\n (match = line.match(\n value === undefined ? /^([^+=]+)(\\+?=)(.*)/ : /^(\\S[^+=]+)(\\+?=)(.*)/,\n ))\n ) {\n recordVal()\n keyPath = match[1].trim().split(/\\s*\\.\\s*/)\n ;[, , operation] = match\n if (isAlwaysArray(section.concat(keyPath).join('.'))) {\n operation = '+='\n }\n value = match[3].trim()\n }\n // add to existing array value\n else if (\n keyPath !== undefined &&\n (match = line.match(/^\\s{0,4}\\+\\s*(.+)/))\n ) {\n recordVal()\n operation = '+='\n value = match[1].trim()\n }\n // add to existing value\n else if (value !== undefined && (match = line.match(/^\\s+(\\S.*)/))) {\n value += value.length ? ` ${match[1].trim()}` : match[1].trim()\n }\n // done with last value\n else {\n recordVal()\n keyPath = undefined\n value = undefined\n }\n })\n\n recordVal()\n\n return data\n}\n\n/**\n * Applies defaults and any other necessary tweaks to the loaded configuration.\n * @param conf - the object containing the configuration, which it modifies\n * in-place\n * @param url - URL of the config file\n * @returns the same object it was passed\n */\nexport function regularizeConf(conf: Config, url: string): Config {\n // if tracks is not an array, convert it to one\n if (conf.tracks && !Array.isArray(conf.tracks)) {\n // if it's a single track config, wrap it in an arrayref\n if (isTrack(conf.tracks)) {\n conf.tracks = [conf.tracks]\n }\n // otherwise, coerce it to an array\n else {\n const tracks: Track[] = []\n for (const label of Object.keys(conf.tracks)) {\n const track = conf.tracks[label]\n if (isTrack(track)) {\n tracks.push(track)\n } else {\n tracks.push({ label, ...track })\n }\n }\n conf.tracks = tracks\n }\n }\n\n // regularize trackMetadata.sources\n const meta = conf.trackMetadata\n if (meta && meta.sources) {\n // if it's a single source config, wrap it in an arrayref\n if (typeof meta.sources === 'string') {\n meta.sources = [meta.sources]\n }\n if (isSource(meta.sources)) {\n meta.sources = [meta.sources]\n }\n\n if (!Array.isArray(meta.sources)) {\n const sources: Source[] = []\n for (const name of Object.keys(meta.sources)) {\n const source = meta.sources[name]\n if (!('name' in source)) {\n source.name = name\n }\n sources.push(source)\n }\n meta.sources = sources\n }\n\n // coerce any string source defs to be URLs, and try to detect their types\n meta.sources = meta.sources.map((sourceDef: string | Source): Source => {\n if (typeof sourceDef === 'string') {\n const newSourceDef: Source = { url: sourceDef }\n const typeMatch = sourceDef.match(/\\.(\\w+)$/)\n if (typeMatch) {\n newSourceDef.type = typeMatch[1].toLowerCase()\n }\n return newSourceDef\n }\n return sourceDef\n })\n }\n\n conf.sourceUrl = conf.sourceUrl || url\n if (conf.sourceUrl.startsWith('/')) {\n conf.sourceUrl = new URL(conf.sourceUrl, window.location.href).href\n }\n conf.baseUrl = conf.baseUrl || new URL('.', conf.sourceUrl).href\n if (conf.baseUrl.length && !conf.baseUrl.endsWith('/')) {\n conf.baseUrl += '/'\n }\n\n if (conf.sourceUrl) {\n // set a default baseUrl in each of the track and store confs, and the names\n // conf, if needed\n const addBase: (Track | Store | Names)[] = []\n if (conf.tracks) {\n addBase.push(...conf.tracks)\n }\n if (conf.stores) {\n addBase.push(...Object.values(conf.stores))\n }\n if (conf.names) {\n addBase.push(conf.names)\n }\n\n addBase.forEach((t): void => {\n if (!t.baseUrl) {\n t.baseUrl = conf.baseUrl || '/'\n }\n })\n\n // resolve the refSeqs and nameUrl if present\n if (conf.refSeqs && typeof conf.refSeqs === 'string') {\n conf.refSeqs = new URL(conf.refSeqs, conf.sourceUrl).href\n }\n if (conf.nameUrl) {\n conf.nameUrl = new URL(conf.nameUrl, conf.sourceUrl).href\n }\n }\n\n conf.stores = conf.stores || {}\n ;(conf.tracks || []).forEach((trackConfig: Track): void => {\n // if there is a `config` subpart, just copy its keys in to the top-level\n // config\n if (trackConfig.config) {\n const c = trackConfig.config\n delete trackConfig.config\n trackConfig = { ...c, ...trackConfig }\n }\n\n // skip if it's a new-style track def\n if (trackConfig.store) {\n return\n }\n\n let trackClassName: string\n if (trackConfig.type === 'FeatureTrack') {\n trackClassName = 'JBrowse/View/Track/HTMLFeatures'\n } else if (trackConfig.type === 'ImageTrack') {\n trackClassName = 'JBrowse/View/Track/FixedImage'\n } else if (trackConfig.type === 'ImageTrack.Wiggle') {\n trackClassName = 'JBrowse/View/Track/FixedImage/Wiggle'\n } else if (trackConfig.type === 'SequenceTrack') {\n trackClassName = 'JBrowse/View/Track/Sequence'\n } else {\n trackClassName = regularizeClass('JBrowse/View/Track', trackConfig.type)\n }\n\n trackConfig.type = trackClassName\n\n synthesizeTrackStoreConfig(conf, trackConfig)\n\n if (trackConfig.histograms) {\n if (!trackConfig.histograms.baseUrl) {\n trackConfig.histograms.baseUrl = trackConfig.baseUrl\n }\n synthesizeTrackStoreConfig(conf, trackConfig.histograms)\n }\n })\n\n return conf\n}\n\n/**\n * prefix class name with `root` if it contains no slashes\n * @param root - Prefix root\n * @param className - class name\n */\nfunction regularizeClass(root: string, className: string | undefined): string {\n if (!className) {\n return ''\n }\n if (!className.includes('/')) {\n className = `${root}/${className}`\n }\n className = className.replace(/^\\//, '')\n return className\n}\n\nfunction guessStoreClass(\n trackConfig: Track | undefined,\n urlTemplate: string,\n): string {\n if (!trackConfig) {\n return ''\n }\n if (trackConfig.type && trackConfig.type.includes('/FixedImage')) {\n return `JBrowse/Store/TiledImage/Fixed${\n trackConfig.backendVersion === 0 ? '_v0' : ''\n }`\n }\n if (/\\.jsonz?$/i.test(urlTemplate)) {\n return `JBrowse/Store/SeqFeature/NCList${\n trackConfig.backendVersion === 0 ? '_v0' : ''\n }`\n }\n if (/\\.bam$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BAM'\n }\n if (/\\.cram$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/CRAM'\n }\n if (/\\.gff3?$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/GFF3'\n }\n if (/\\.bed$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BED'\n }\n if (/\\.vcf.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/VCFTabix'\n }\n if (/\\.gff3?.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/GFF3Tabix'\n }\n if (/\\.bed.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BEDTabix'\n }\n if (/\\.(bw|bigwig)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BigWig'\n }\n if (/\\.(bb|bigbed)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BigBed'\n }\n if (/\\.(fa|fasta)$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/IndexedFasta'\n }\n if (/\\.(fa|fasta)\\.b?gz$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/BgzipIndexedFasta'\n }\n if (/\\.2bit$/i.test(urlTemplate)) {\n return 'JBrowse/Store/SeqFeature/TwoBit'\n }\n if (trackConfig.type && trackConfig.type.endsWith('/Sequence')) {\n return 'JBrowse/Store/Sequence/StaticChunked'\n }\n return ''\n}\n\nfunction synthesizeTrackStoreConfig(\n mainConf: Config,\n trackConfig: Track,\n): void {\n // figure out what data store class to use with the track, applying some\n // defaults if it is not explicit in the configuration\n const { urlTemplate = '' } = trackConfig\n\n let storeClass: string\n if (trackConfig.storeClass) {\n storeClass = regularizeClass('JBrowse/Store', trackConfig.storeClass)\n } else {\n storeClass = guessStoreClass(trackConfig, urlTemplate)\n }\n\n if (!storeClass) {\n console.warn(\n `Unable to determine an appropriate data store to use with track '${trackConfig.label}', please explicitly specify a storeClass in the configuration.`,\n )\n return\n }\n\n // synthesize a separate store conf\n const storeConf: Store = { ...trackConfig, type: storeClass }\n\n // if this is the first sequence store we see, and we have no refseqs store\n // defined explicitly, make this the refseqs store.\n if (\n (storeClass === 'JBrowse/Store/Sequence/StaticChunked' ||\n storeClass === 'JBrowse/Store/Sequence/IndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/IndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/BgzipIndexedFasta' ||\n storeClass === 'JBrowse/Store/SeqFeature/TwoBit' ||\n storeClass === 'JBrowse/Store/Sequence/TwoBit' ||\n trackConfig.useAsRefSeqStore) &&\n !(mainConf.stores && mainConf.stores.refseqs)\n ) {\n storeConf.name = 'refseqs'\n } else {\n storeConf.name = `store${objectHash(storeConf)}`\n }\n // record it\n if (!mainConf.stores) {\n mainConf.stores = {}\n }\n mainConf.stores[storeConf.name] = storeConf\n\n // connect it to the track conf\n trackConfig.store = storeConf.name\n}\n","import { openLocation } from '@jbrowse/core/util/io'\nimport { parseJB1Json, parseJB1Conf, regularizeConf } from './jb1ConfigParse'\nimport { clone, deepUpdate, fillTemplate } from './util'\nimport {\n JBLocation,\n UriLocation,\n LocalPathLocation,\n Config,\n Track,\n Include,\n} from './types'\n\nfunction isUriLocation(location: JBLocation): location is UriLocation {\n return (location as UriLocation).uri !== undefined\n}\n\nfunction isLocalPathLocation(\n location: JBLocation,\n): location is LocalPathLocation {\n return (location as LocalPathLocation).localPath !== undefined\n}\n\nexport async function fetchJb1(\n dataRoot: JBLocation = { uri: '', locationType: 'UriLocation' },\n baseConfig: Config = {\n include: ['{dataRoot}/trackList.json', '{dataRoot}/tracks.conf'],\n },\n baseConfigRoot: JBLocation = { uri: '', locationType: 'UriLocation' },\n): Promise<Config> {\n const protocol = 'uri' in dataRoot ? 'uri' : 'localPath'\n const dataRootReg = JSON.parse(JSON.stringify(dataRoot))\n let dataRootLocation = ''\n if (isUriLocation(dataRoot)) {\n dataRootLocation = dataRoot.uri\n }\n if (isLocalPathLocation(dataRoot)) {\n dataRootLocation = dataRoot.localPath\n }\n if (dataRootLocation.endsWith('/')) {\n dataRootReg[protocol] = dataRootLocation.slice(\n 0,\n dataRootLocation.length - 1,\n )\n }\n if (\n (isUriLocation(baseConfigRoot) && baseConfigRoot.uri) ||\n (isLocalPathLocation(baseConfigRoot) && baseConfigRoot.localPath)\n ) {\n const baseProtocol = 'uri' in baseConfigRoot ? 'uri' : 'localPath'\n let baseConfigLocation = ''\n if (isUriLocation(baseConfigRoot)) {\n baseConfigLocation = baseConfigRoot.uri\n }\n if (isLocalPathLocation(baseConfigRoot)) {\n baseConfigLocation = baseConfigRoot.localPath\n }\n if (baseConfigLocation.endsWith('/')) {\n baseConfigLocation = baseConfigLocation.slice(\n 0,\n baseConfigLocation.length - 1,\n )\n }\n let newConfig: Config = {}\n for (const conf of ['jbrowse.conf', 'jbrowse_conf.json']) {\n let fetchedConfig = null\n try {\n // @ts-ignore\n fetchedConfig = await fetchConfigFile({\n [baseProtocol]: `${baseConfigLocation}/${conf}`,\n })\n } catch (error) {\n console.error(\n `tried to access ${baseConfigLocation}/${conf}, but failed`,\n )\n }\n newConfig = mergeConfigs(newConfig, fetchedConfig) || {}\n }\n if (dataRootReg[protocol]) {\n newConfig.dataRoot = dataRootReg[protocol]\n }\n return createFinalConfig(newConfig)\n }\n const newConfig = regularizeConf(baseConfig, window.location.href)\n if (dataRootReg[protocol]) {\n newConfig.dataRoot = dataRootReg[protocol]\n }\n return createFinalConfig(newConfig)\n}\n\nexport async function createFinalConfig(\n baseConfig: Config,\n defaults = configDefaults,\n): Promise<Config> {\n const configWithDefaults = deepUpdate(clone(defaults), baseConfig)\n let finalConfig = await loadIncludes(configWithDefaults)\n finalConfig = mergeConfigs(finalConfig, baseConfig) || finalConfig\n fillTemplates(finalConfig, finalConfig)\n validateConfig(finalConfig)\n return finalConfig\n}\n\nexport async function fetchConfigFile(location: JBLocation): Promise<Config> {\n const result = await openLocation(location).readFile('utf8')\n if (isUriLocation(location)) {\n return parseJb1(result, location.uri)\n }\n if (isLocalPathLocation(location)) {\n return parseJb1(result, location.localPath)\n }\n return parseJb1(result)\n}\n\nexport function parseJb1(config: string, url = ''): Config {\n if (config.trim().startsWith('{')) {\n return parseJB1Json(config, url)\n }\n return parseJB1Conf(config, url)\n}\n\n/**\n * Merges config object b into a. Properties in b override those in a.\n */\nfunction mergeConfigs(a: Config | null, b: Config | null): Config | null {\n if (b === null) {\n return null\n }\n\n if (a === null) {\n a = {}\n }\n\n for (const prop of Object.keys(b)) {\n if (prop === 'tracks' && prop in a) {\n const aTracks = a[prop] || []\n const bTracks = b[prop] || []\n if (Array.isArray(aTracks) && Array.isArray(bTracks)) {\n a[prop] = mergeTrackConfigs(aTracks || [], bTracks || [])\n } else {\n throw new Error(\n `Track config has not been properly regularized: ${aTracks} ${bTracks}`,\n )\n }\n } else if (\n !noRecursiveMerge(prop) &&\n prop in a &&\n // @ts-ignore\n typeof b[prop] === 'object' &&\n // @ts-ignore\n typeof a[prop] === 'object'\n ) {\n // @ts-ignore\n a[prop] = deepUpdate(a[prop], b[prop])\n } else if (prop === 'dataRoot') {\n if (\n a[prop] === undefined ||\n (a[prop] === 'data' && b[prop] !== undefined)\n ) {\n a[prop] = b[prop]\n }\n // @ts-ignore\n } else if (a[prop] === undefined || b[prop] !== undefined) {\n // @ts-ignore\n a[prop] = b[prop]\n }\n }\n return a\n}\n\n/**\n * Special-case merging of two `tracks` configuration arrays.\n */\nfunction mergeTrackConfigs(a: Track[], b: Track[]): Track[] {\n if (!b.length) {\n return a\n }\n\n // index the tracks in `a` by track label\n const aTracks: Record<string, Track> = {}\n a.forEach((t, i): void => {\n t.index = i\n aTracks[t.label] = t\n })\n\n b.forEach((bT): void => {\n const aT = aTracks[bT.label]\n if (aT) {\n mergeConfigs(aT, bT)\n } else {\n a.push(bT)\n }\n })\n\n return a\n}\n\n/**\n * Recursively fetch, parse, and merge all the includes in the given config\n * object. Calls the callback with the resulting configuration when finished.\n * @param inputConfig - Config to load includes into\n */\nasync function loadIncludes(inputConfig: Config): Promise<Config> {\n inputConfig = clone(inputConfig)\n\n async function loadRecur(\n config: Config,\n upstreamConf: Config,\n ): Promise<Config> {\n const sourceUrl = config.sourceUrl || config.baseUrl\n if (!sourceUrl) {\n throw new Error(\n `Could not determine source URL: ${JSON.stringify(config)}`,\n )\n }\n const newUpstreamConf = mergeConfigs(clone(upstreamConf), config)\n if (!newUpstreamConf) {\n throw new Error('Problem merging configs')\n }\n const includes = fillTemplates(\n regularizeIncludes(config.include || []),\n newUpstreamConf,\n )\n delete config.include\n\n const loads = includes.map(async (include): Promise<Config> => {\n include.cacheBuster = inputConfig.cacheBuster\n const includedData = await fetchConfigFile({\n uri: new URL(include.url, sourceUrl).href,\n locationType: 'UriLocation',\n })\n return loadRecur(includedData, newUpstreamConf)\n })\n const includedDataObjects = await Promise.all(loads)\n includedDataObjects.forEach((includedData): void => {\n config = mergeConfigs(config, includedData) || config\n })\n return config\n }\n\n return loadRecur(inputConfig, {})\n}\n\nfunction regularizeIncludes(\n includes: Include | string | (Include | string)[] | null,\n): Include[] {\n if (!includes) {\n return []\n }\n\n // coerce include to an array\n if (!Array.isArray(includes)) {\n includes = [includes]\n }\n\n return includes.map((include): Include => {\n // coerce bare strings in the includes to URLs\n if (typeof include === 'string') {\n include = { url: include }\n }\n\n // set defaults for format and version\n if (!('format' in include)) {\n include.format = include.url.endsWith('.conf') ? 'conf' : 'JB_json'\n }\n if (include.format === 'JB_json' && !('version' in include)) {\n include.version = 1\n }\n return include\n })\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction fillTemplates<T extends any>(subconfig: T, config: Config): T {\n if (!subconfig) {\n return subconfig\n }\n if (Array.isArray(subconfig)) {\n for (let i = 0; i < subconfig.length; i += 1) {\n subconfig[i] = fillTemplates(subconfig[i], config)\n }\n } else if (typeof subconfig === 'object') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sub = subconfig as Record<string, any>\n for (const name of Object.keys(sub)) {\n sub[name] = fillTemplates(sub[name], config)\n }\n } else if (typeof subconfig === 'string') {\n // @ts-ignore\n return fillTemplate(subconfig, config)\n }\n\n return subconfig\n}\n\n/**\n * list of config properties that should not be recursively merged\n * @param propName - name of config property\n */\nfunction noRecursiveMerge(propName: string): boolean {\n return propName === 'datasets'\n}\n\nconst configDefaults = {\n tracks: [],\n\n containerID: 'GenomeBrowser',\n dataRoot: 'data',\n show_tracklist: true,\n show_nav: true,\n show_menu: true,\n show_overview: true,\n show_fullviewlink: true,\n update_browser_title: true,\n updateBrowserURL: true,\n\n refSeqs: '{dataRoot}/seq/refSeqs.json',\n include: ['jbrowse.conf', 'jbrowse_conf.json'],\n nameUrl: '{dataRoot}/names/root.json',\n\n datasets: {\n _DEFAULT_EXAMPLES: true,\n volvox: { url: '?data=sample_data/json/volvox', name: 'Volvox Example' },\n modencode: {\n url: '?data=sample_data/json/modencode',\n name: 'MODEncode Example',\n },\n yeast: { url: '?data=sample_data/json/yeast', name: 'Yeast Example' },\n },\n\n highlightSearchedRegions: false,\n highResolutionMode: 'auto',\n}\n\n/**\n * Examine the loaded and merged configuration for errors. Throws\n * exceptions if it finds anything amiss.\n * @returns nothing meaningful\n */\nfunction validateConfig(config: Config): void {\n if (!config.tracks) {\n config.tracks = []\n }\n if (!config.baseUrl) {\n throw new Error('Must provide a `baseUrl` in configuration')\n }\n}\n","import {\n ConfigurationReference,\n readConfObject,\n} from '@jbrowse/core/configuration'\nimport { getSession } from '@jbrowse/core/util'\nimport { BaseConnectionModelFactory } from '@jbrowse/core/pluggableElementTypes/models'\nimport { types } from 'mobx-state-tree'\nimport configSchema from './configSchema'\n\nimport { fetchJb1 } from './jb1ConfigLoad'\nimport { convertTrackConfig } from './jb1ToJb2'\n\nexport default function (pluginManager) {\n return types.compose(\n 'JBrowse1Connection',\n BaseConnectionModelFactory(pluginManager),\n types\n .model({\n configuration: ConfigurationReference(configSchema),\n type: types.literal('JBrowse1Connection'),\n })\n .actions(self => ({\n connect() {\n const dataDirLocation = readConfObject(\n self.configuration,\n 'dataDirLocation',\n )\n const session = getSession(self)\n fetchJb1(dataDirLocation)\n .then(config => {\n const assemblyName = readConfObject(\n self.configuration,\n 'assemblyNames',\n )[0]\n if (!assemblyName) {\n throw new Error(\n 'assembly name required for JBrowse 1 connection',\n )\n }\n const assemblyConf = session.assemblies.find(\n assembly => readConfObject(assembly, 'name') === assemblyName,\n )\n const sequenceAdapter = readConfObject(assemblyConf, [\n 'sequence',\n 'adapter',\n ])\n const jb2Tracks = config.tracks.map(jb1Track => {\n const jb2Track = convertTrackConfig(\n jb1Track,\n config.dataRoot,\n sequenceAdapter,\n )\n jb2Track.assemblyNames = [assemblyName]\n return jb2Track\n })\n self.setTrackConfs(jb2Tracks)\n })\n .catch(error => {\n console.error(error)\n session.notify(\n `There was a problem connecting to the JBrowse 1 data directory \"${self.name}\". Please make sure you have entered a valid location. The error that was thrown is: \"${error}\"`,\n 'error',\n )\n session.breakConnection(self.configuration)\n })\n },\n })),\n )\n}\n","import { openLocation } from '@jbrowse/core/util/io'\nimport { objectHash } from '@jbrowse/core/util'\nimport {\n generateUnknownTrackConf,\n generateUnsupportedTrackConf,\n guessAdapter,\n guessTrackType,\n UNKNOWN,\n UNSUPPORTED,\n} from '@jbrowse/core/util/tracks'\nimport { Track, RefSeqs, RefSeq } from './types'\n\ninterface Jb2Track {\n trackId: string\n name: string\n description?: string\n category?: string[]\n adapter?: Jb2Adapter\n type?: string\n defaultRendering?: string\n}\n\ninterface Jb2Adapter {\n type: string\n features?: Jb2Feature[]\n bamLocation?: Jb2Location\n cramLocation?: Jb2Location\n craiLocation?: Jb2Location\n fastaLocation?: Jb2Location\n faiLocation?: Jb2Location\n gziLocation?: Jb2Location\n twoBitLocation?: Jb2Location\n bigWigLocation?: Jb2Location\n bigBedLocation?: Jb2Location\n vcfGzLocation?: Jb2Location\n gffGzLocation?: Jb2Location\n bedGzLocation?: Jb2Location\n index?: { location: Jb2Location; indexType?: string }\n rootUrlTemplate?: Jb2Location\n sequenceAdapter?: Jb2Adapter\n}\n\ninterface Jb2Feature {\n refName: string\n uniqueId: string\n start: number\n end: number\n}\n\ninterface Jb2Location {\n uri?: string\n localPath?: string\n blobId?: string\n locationType?: string\n}\n\nexport function convertTrackConfig(\n jb1TrackConfig: Track,\n dataRoot: string,\n sequenceAdapter: Jb2Adapter,\n): Jb2Track {\n const jb2TrackConfig: Jb2Track = {\n trackId: objectHash(jb1TrackConfig),\n name: jb1TrackConfig.key || jb1TrackConfig.label,\n }\n\n const description =\n jb1TrackConfig.metadata &&\n (jb1TrackConfig.metadata.description || jb1TrackConfig.metadata.Description)\n if (description) {\n jb2TrackConfig.description = description\n }\n\n const category =\n jb1TrackConfig.category ||\n (jb1TrackConfig.metadata && jb1TrackConfig.metadata.category)\n jb2TrackConfig.category = category ? category.split(/\\s*\\/\\s*/) : []\n\n const { storeClass } = jb1TrackConfig\n if (!jb1TrackConfig.urlTemplate) {\n if (!(storeClass && storeClass.endsWith('FromConfig'))) {\n const trackIdentifier = jb1TrackConfig.key || jb1TrackConfig.label\n console.warn(\n `Could not import JBrowse1 track \"${trackIdentifier}\" because it does not have a \"urlTemplate\" or is not a \"FromConfig\" track`,\n )\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n trackIdentifier,\n jb2TrackConfig.category,\n )\n }\n return generateFromConfigTrackConfig(jb1TrackConfig, jb2TrackConfig)\n }\n\n const resolveUrlTemplate = (urlTemplate: string) => {\n return new URL(urlTemplate, `${dataRoot}/`).href\n .replace(/%7B/gi, '{')\n .replace(/%7D/gi, '}')\n }\n const urlTemplate = resolveUrlTemplate(jb1TrackConfig.urlTemplate)\n\n if (storeClass) {\n if (storeClass === 'JBrowse/Store/SeqFeature/BAM') {\n const adapter: Jb2Adapter = {\n type: 'BamAdapter',\n bamLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.baiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.baiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.bai`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'AlignmentsTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/CRAM') {\n const adapter: Jb2Adapter = {\n type: 'CramAdapter',\n cramLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n sequenceAdapter,\n }\n if (jb1TrackConfig.craiUrlTemplate) {\n adapter.craiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.craiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.craiLocation = {\n uri: `${urlTemplate}.crai`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'AlignmentsTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/NCList') {\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter: {\n type: 'NCListAdapter',\n rootUrlTemplate: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (\n storeClass === 'JBrowse/Store/SeqFeature/BigWig' ||\n storeClass === 'JBrowse/Store/BigWig'\n ) {\n if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('XYPlot')) {\n jb2TrackConfig.defaultRendering = 'xyplot'\n } else if (\n jb1TrackConfig.type &&\n jb1TrackConfig.type.endsWith('Density')\n ) {\n jb2TrackConfig.defaultRendering = 'density'\n }\n return {\n ...jb2TrackConfig,\n type: 'QuantitativeTrack',\n adapter: {\n type: 'BigWigAdapter',\n bigWigLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/VCFTabix') {\n const adapter: Jb2Adapter = {\n type: 'VcfTabixAdapter',\n vcfGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'VariantTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/VCFTribble') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `VCFTribble (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GFF3') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `GFF3 (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BigBed') {\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter: {\n type: 'BigBedAdapter',\n bigBedLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GFF3Tabix') {\n const adapter: Jb2Adapter = {\n type: 'Gff3TabixAdapter',\n gffGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BED') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `BED (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BEDTabix') {\n const adapter: Jb2Adapter = {\n type: 'BedTabixAdapter',\n bedGzLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.tbiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.tbiUrlTemplate),\n locationType: 'UriLocation',\n },\n }\n } else if (jb1TrackConfig.csiUrlTemplate) {\n adapter.index = {\n location: {\n uri: resolveUrlTemplate(jb1TrackConfig.csiUrlTemplate),\n locationType: 'UriLocation',\n },\n indexType: 'CSI',\n }\n } else {\n adapter.index = {\n location: { uri: `${urlTemplate}.tbi`, locationType: 'UriLocation' },\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'FeatureTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/GTF') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `GTF (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (\n storeClass === 'JBrowse/Store/SeqFeature/StaticChunked' ||\n storeClass === 'JBrowse/Store/Sequence/StaticChunked'\n ) {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `StaticChunked (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/UnindexedFasta') {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n `UnindexedFasta (${urlTemplate})`,\n jb2TrackConfig.category,\n )\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/IndexedFasta') {\n const adapter: Jb2Adapter = {\n type: 'IndexedFastaAdapter',\n fastaLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.faiUrlTemplate) {\n adapter.faiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.faiLocation = {\n uri: `${urlTemplate}.fai`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'SequenceTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/BgzipIndexedFasta') {\n const adapter: Jb2Adapter = {\n type: 'BgzipFastaAdapter',\n fastaLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n }\n if (jb1TrackConfig.faiUrlTemplate) {\n adapter.faiLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.faiUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.faiLocation = {\n uri: `${urlTemplate}.fai`,\n locationType: 'UriLocation',\n }\n }\n if (jb1TrackConfig.gziUrlTemplate) {\n adapter.gziLocation = {\n uri: resolveUrlTemplate(jb1TrackConfig.gziUrlTemplate),\n locationType: 'UriLocation',\n }\n } else {\n adapter.gziLocation = {\n uri: `${urlTemplate}.gzi`,\n locationType: 'UriLocation',\n }\n }\n return {\n ...jb2TrackConfig,\n type: 'ReferenceSequenceTrack',\n adapter,\n }\n }\n if (storeClass === 'JBrowse/Store/SeqFeature/TwoBit') {\n return {\n ...jb2TrackConfig,\n type: 'ReferenceSequenceTrack',\n adapter: {\n type: 'TwoBitAdapter',\n twoBitLocation: { uri: urlTemplate, locationType: 'UriLocation' },\n },\n }\n }\n }\n\n // If we don't recogize the store class, make a best effort to guess by file type\n jb2TrackConfig.adapter = guessAdapter(\n { uri: urlTemplate, locationType: 'UriLocation' },\n undefined,\n urlTemplate,\n )\n if (!jb2TrackConfig.adapter) {\n throw new Error('Could not determine adapter')\n }\n\n if (jb2TrackConfig.adapter.type === UNSUPPORTED) {\n return generateUnsupportedTrackConf(\n jb2TrackConfig.name,\n urlTemplate,\n jb2TrackConfig.category,\n )\n }\n if (jb2TrackConfig.adapter.type === UNKNOWN) {\n return generateUnknownTrackConf(\n jb2TrackConfig.name,\n urlTemplate,\n jb2TrackConfig.category,\n )\n }\n\n jb2TrackConfig.type = guessTrackType(jb2TrackConfig.adapter.type)\n\n if (jb2TrackConfig.type === 'QuantitativeTrack') {\n if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('XYPlot')) {\n jb2TrackConfig.defaultRendering = 'xyplot'\n } else if (jb1TrackConfig.type && jb1TrackConfig.type.endsWith('Density')) {\n jb2TrackConfig.defaultRendering = 'density'\n }\n }\n\n return jb2TrackConfig\n}\n\nfunction generateFromConfigTrackConfig(\n jb1TrackConfig: Track,\n jb2TrackConfig: Jb2Track,\n): Jb2Track {\n const jb1Features = jb1TrackConfig.features || []\n const jb2Features = jb1Features.map((feature): Jb2Feature => {\n const jb2Feature: Jb2Feature = JSON.parse(JSON.stringify(feature))\n jb2Feature.refName = feature.seq_id\n jb2Feature.uniqueId = `${feature.seq_id}:${feature.start}-${feature.end}:${\n feature.name || ''\n }`\n return jb2Feature\n })\n jb2TrackConfig.adapter = {\n type: 'FromConfigAdapter',\n features: jb2Features,\n }\n jb2TrackConfig.type = 'FeatureTrack'\n return jb2TrackConfig\n}\n\nexport async function createRefSeqsAdapter(\n refSeqs: string | RefSeqs,\n): Promise<Jb2Adapter> {\n if (typeof refSeqs === 'string') {\n // assume refSeqs is a url if it is string\n refSeqs = {\n url: refSeqs,\n }\n }\n\n // check refseq urls\n if (refSeqs.url) {\n if (refSeqs.url.match(/.fai$/)) {\n return {\n type: 'IndexedFastaAdapter',\n fastaLocation: {\n uri: refSeqs.url.slice(0, -4),\n locationType: 'UriLocation',\n },\n faiLocation: {\n uri: refSeqs.url,\n locationType: 'UriLocation',\n },\n }\n }\n if (refSeqs.url.match(/.2bit$/)) {\n return {\n type: 'TwoBitAdapter',\n twoBitLocation: { uri: refSeqs.url, locationType: 'UriLocation' },\n }\n }\n if (refSeqs.url.match(/.fa$/)) {\n throw new Error('Unindexed FASTA adapter not available')\n }\n if (refSeqs.url.match(/.sizes/)) {\n throw new Error('chromosome SIZES adapter not available')\n }\n const refSeqsJson = await openLocation({\n uri: refSeqs.url,\n locationType: 'UriLocation',\n }).readFile('utf8')\n const refSeqsData: RefSeq[] = JSON.parse(refSeqsJson)\n return refSeqAdapterFromConfig(refSeqsData)\n }\n if ('data' in refSeqs) {\n return refSeqAdapterFromConfig(refSeqs.data || [])\n }\n throw new Error(\n `Could not determine adapter for JBrowse1 refSeqs: ${\n refSeqs.url || JSON.stringify(refSeqs)\n }`,\n )\n}\n\nfunction refSeqAdapterFromConfig(refSeqsData: RefSeq[]): Jb2Adapter {\n const features = refSeqsData.map(\n (refSeq): Jb2Feature => ({\n refName: refSeq.name,\n uniqueId: refSeq.name,\n start: refSeq.start,\n end: refSeq.end,\n }),\n )\n return {\n type: 'FromConfigAdapter',\n features,\n }\n}\n","import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'\nimport TextSearchAdapterType from '@jbrowse/core/pluggableElementTypes/TextSearchAdapterType'\nimport ConnectionType from '@jbrowse/core/pluggableElementTypes/ConnectionType'\nimport Plugin from '@jbrowse/core/Plugin'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { FileLocation } from '@jbrowse/core/util/types'\nimport { configSchema as ncListAdapterConfigSchema } from './NCListAdapter'\nimport {\n AdapterClass as JBrowse1TextSearchAdapterClass,\n configSchema as jbrowse1AdapterConfigSchema,\n} from './JBrowse1TextSeachAdapter'\nimport { AdapterGuesser, getFileName } from '@jbrowse/core/util/tracks'\n\nimport {\n configSchema as jbrowse1ConfigSchema,\n modelFactory as jbrowse1ModelFactory,\n} from './JBrowse1Connection'\n\nexport default class LegacyJBrowsePlugin extends Plugin {\n name = 'LegacyJBrowsePlugin'\n\n install(pluginManager: PluginManager) {\n pluginManager.addAdapterType(\n () =>\n new AdapterType({\n name: 'NCListAdapter',\n configSchema: ncListAdapterConfigSchema,\n getAdapterClass: () =>\n import('./NCListAdapter/NCListAdapter').then(r => r.default),\n }),\n )\n pluginManager.addToExtensionPoint(\n 'Core-guessAdapterForLocation',\n (adapterGuesser: AdapterGuesser) => {\n return (\n file: FileLocation,\n index?: FileLocation,\n adapterHint?: string,\n ) => {\n const regexGuess = /trackData.jsonz?$/i\n const adapterName = 'NCListAdapter'\n const fileName = getFileName(file)\n if (regexGuess.test(fileName) || adapterHint === adapterName) {\n return {\n type: adapterName,\n rootUrlTemplate: file,\n }\n }\n return adapterGuesser(file, index, adapterHint)\n }\n },\n )\n\n pluginManager.addTextSearchAdapterType(\n () =>\n new TextSearchAdapterType({\n name: 'JBrowse1TextSearchAdapter',\n configSchema: jbrowse1AdapterConfigSchema,\n AdapterClass: JBrowse1TextSearchAdapterClass,\n description: 'A JBrowse 1 text search adapter',\n }),\n )\n\n pluginManager.addConnectionType(\n () =>\n new ConnectionType({\n name: 'JBrowse1Connection',\n configSchema: jbrowse1ConfigSchema,\n stateModel: jbrowse1ModelFactory(pluginManager),\n displayName: 'JBrowse 1 Data',\n description: 'A JBrowse 1 data directory',\n url: '//jbrowse.org/',\n }),\n )\n }\n}\n","import {\n Feature,\n SimpleFeatureSerialized,\n} from '@jbrowse/core/util/simpleFeature'\n\nconst jb2ToJb1 = { refName: 'seq_id' }\n\nconst jb1ToJb2 = { seq_id: 'refName' }\n\n/**\n * wrapper to adapt nclist features to act like jbrowse 2 features\n */\nexport default class NCListFeature implements Feature {\n private parentHandle?: Feature\n\n private uniqueId: string\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(private ncFeature: any, parent?: Feature, id?: string) {\n this.uniqueId = id || ncFeature.id()\n this.parentHandle = parent\n }\n\n set(): void {\n throw new Error('not implemented')\n }\n\n jb2TagToJb1Tag(tag: string): string {\n // @ts-ignore\n const mapped = jb2ToJb1[tag] || tag\n return mapped.toLowerCase()\n }\n\n jb1TagToJb2Tag(tag: string): string {\n const t = tag.toLowerCase()\n // @ts-ignore\n const mapped = jb1ToJb2[t] || t\n return mapped\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n get(attrName: string): any {\n const attr = this.ncFeature.get(this.jb2TagToJb1Tag(attrName))\n if (attr && attrName === 'subfeatures') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return attr.map((subfeature: any) => new NCListFeature(subfeature, this))\n }\n return attr\n }\n\n /**\n * Get an array listing which data keys are present in this feature.\n */\n tags(): string[] {\n return this.ncFeature.tags().map((t: string) => this.jb1TagToJb2Tag(t))\n }\n\n /**\n * Get the unique ID of this feature.\n */\n id(): string {\n return this.uniqueId\n }\n\n /**\n * Get this feature's parent feature, or undefined if none.\n */\n parent(): Feature | undefined {\n return this.parentHandle\n }\n\n /**\n * Get an array of child features, or undefined if none.\n */\n children(): Feature[] | undefined {\n return this.get('subfeatures')\n }\n\n toJSON(): SimpleFeatureSerialized {\n const data: SimpleFeatureSerialized = { uniqueId: this.id() }\n this.ncFeature.tags().forEach((tag: string) => {\n const mappedTag = this.jb1TagToJb2Tag(tag)\n const value = this.ncFeature.get(tag)\n if (mappedTag === 'subfeatures') {\n data.subfeatures = (value || []).map((f: Feature) => {\n // note: was new NCListFeature(f, `${this.id()}-${i}`, this).toJSON()\n return new NCListFeature(f, this).toJSON()\n })\n } else {\n data[mappedTag] = value\n }\n })\n return data\n }\n}\n","import NCListStore from '@gmod/nclist'\nimport { Region } from '@jbrowse/core/util/types'\nimport {\n BaseFeatureDataAdapter,\n BaseOptions,\n} from '@jbrowse/core/data_adapters/BaseAdapter'\nimport { Feature } from '@jbrowse/core/util/simpleFeature'\nimport { ObservableCreate } from '@jbrowse/core/util/rxjs'\nimport { checkAbortSignal } from '@jbrowse/core/util'\nimport { RemoteFile } from 'generic-filehandle'\nimport { Instance } from 'mobx-state-tree'\nimport { readConfObject } from '@jbrowse/core/configuration'\nimport NCListFeature from './NCListFeature'\nimport MyConfigSchema from './configSchema'\nimport PluginManager from '@jbrowse/core/PluginManager'\nimport { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'\n\nexport default class NCListAdapter extends BaseFeatureDataAdapter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private nclist: any\n\n private configRefNames?: string[]\n\n constructor(\n config: Instance<typeof MyConfigSchema>,\n getSubAdapter?: getSubAdapterType,\n pluginManager?: PluginManager,\n ) {\n super(config, getSubAdapter, pluginManager)\n const refNames = readConfObject(config, 'refNames')\n const rootUrlTemplate = readConfObject(config, 'rootUrlTemplate')\n this.configRefNames = refNames\n\n this.nclist = new NCListStore({\n baseUrl: '',\n urlTemplate: rootUrlTemplate.uri,\n readFile: (url: string) =>\n new RemoteFile(\n String(\n rootUrlTemplate.baseUri\n ? new URL(url, rootUrlTemplate.baseUri).toString()\n : url,\n ),\n ).readFile(),\n })\n }\n\n /**\n * Fetch features for a certain region. Use getFeaturesInRegion() if you also\n * want to verify that the store has features for the given reference sequence\n * before fetching.\n * @param region -\n * @param opts - [signal] optional signalling object for aborting the fetch\n * @returns Observable of Feature objects in the region\n */\n getFeatures(region: Region, opts: BaseOptions = {}) {\n return ObservableCreate<Feature>(async observer => {\n const { signal } = opts\n for await (const feature of this.nclist.getFeatures(region, opts)) {\n checkAbortSignal(signal)\n observer.next(this.wrapFeature(feature))\n }\n observer.complete()\n })\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n wrapFeature(ncFeature: any): NCListFeature {\n return new NCListFeature(\n ncFeature,\n undefined,\n `${this.id}-${ncFeature.id()}`,\n )\n }\n\n async hasDataForRefName(refName: string) {\n const root = await this.nclist.getDataRoot(refName)\n return !!(root && root.stats && root.stats.featureCount)\n }\n\n /*\n * NCList is unable to get list of ref names so returns empty\n * @return Promise<string[]> of empty list\n */\n getRefNames() {\n return Promise.resolve(this.configRefNames || [])\n }\n\n /**\n * called to provide a hint that data tied to a certain region\n * will not be needed for the forseeable future and can be purged\n * from caches, etc\n */\n freeResources() {}\n}\n"],"names":["ConfigurationSchema","rootUrlTemplate","type","defaultValue","uri","locationType","refNames","description","explicitlyTyped","runtime","exports","Op","Object","prototype","hasOwn","hasOwnProperty","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","obj","key","value","defineProperty","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","generator","create","Generator","context","Context","_invoke","state","method","arg","Error","undefined","done","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","fn","call","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","this","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","result","__await","then","unwrapped","error","TypeError","info","resultName","next","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","iterable","iteratorMethod","isNaN","length","i","doneResult","displayName","isGeneratorFunction","genFun","ctor","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","object","reverse","pop","skipTempReset","prev","charAt","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","thrown","delegateYield","module","regeneratorRuntime","accidentalStrictMode","globalThis","Function","HttpMap","args","url","test","loadFile","compress","meta","tracks","track_names","hashHexCharacters","Math","ceil","hash_bits","readMeta","getBucket","bucketIdent","hash","hexToDirPath","id","fetch","response","ok","status","statusText","json","hex","getHashHexCharacters","getCompress","substr","dirpath","substring","join","data","crc32","Buffer","from","toString","toLowerCase","replace","JBrowse1TextSearchAdapter","BaseAdapter","config","getSubAdapter","pluginManager","namesIndexLocation","readConfObject","httpMap","baseUri","URL","href","query","searchType","queryString","tracksNames","getTrackNames","loadIndexFile","entries","formatResults","results","prefix","map","BaseResult","label","_typeof","matchedAttribute","matchedObject","exact","trackIndex","start","end","locstring","locString","trackId","filter","getLabel","assemblyNames","explicitIdentifier","dataDirLocation","baseConfiguration","baseConnectionConfig","isTrack","deepUpdate","a","b","prop","clone","src","nodeType","cloneNode","Date","getTime","RegExp","r","l","Array","isArray","dest","source","copyFunc","s","empty","mixin","parseJB1Json","parsedConf","JSON","parse","regularizeConf","parseJB1Conf","text","keyPath","operation","lineNumber","section","recordVal","parsedValue","match","parseFloat","path","concat","existing","getValue","setValue","e","split","textLine","line","trim","conf","track","trackMetadata","sources","sourceDef","newSourceDef","typeMatch","sourceUrl","startsWith","window","location","baseUrl","endsWith","addBase","stores","names","t","refSeqs","nameUrl","trackConfig","c","trackClassName","store","regularizeClass","synthesizeTrackStoreConfig","histograms","root","className","includes","mainConf","storeClass","urlTemplate","backendVersion","guessStoreClass","storeConf","useAsRefSeqStore","refseqs","objectHash","console","warn","isUriLocation","isLocalPathLocation","localPath","baseConfig","include","baseConfigRoot","protocol","dataRoot","dataRootReg","stringify","dataRootLocation","baseProtocol","baseConfigLocation","newConfig","fetchedConfig","fetchConfigFile","mergeConfigs","createFinalConfig","configWithDefaults","configDefaults","loadIncludes","fillTemplates","finalConfig","validateConfig","openLocation","readFile","parseJb1","aTracks","bTracks","mergeTrackConfigs","index","bT","aT","inputConfig","loadRecur","upstreamConf","newUpstreamConf","regularizeIncludes","loads","cacheBuster","all","includedData","format","version","subconfig","sub","template","fillWith","varName","fill","callback","v","_this","fillTemplate","containerID","show_tracklist","show_nav","show_menu","show_overview","show_fullviewlink","update_browser_title","updateBrowserURL","datasets","_DEFAULT_EXAMPLES","volvox","modencode","yeast","highlightSearchedRegions","highResolutionMode","types","compose","BaseConnectionModelFactory","model","configuration","ConfigurationReference","configSchema","literal","actions","connect","session","getSession","fetchJb1","assemblyName","assemblyConf","assemblies","find","assembly","sequenceAdapter","jb2Tracks","jb1Track","jb2Track","jb1TrackConfig","jb2TrackConfig","metadata","Description","category","trackIdentifier","generateUnsupportedTrackConf","jb2Features","features","feature","jb2Feature","refName","seq_id","uniqueId","adapter","generateFromConfigTrackConfig","resolveUrlTemplate","bamLocation","baiUrlTemplate","csiUrlTemplate","indexType","cramLocation","craiLocation","craiUrlTemplate","defaultRendering","bigWigLocation","vcfGzLocation","tbiUrlTemplate","bigBedLocation","gffGzLocation","bedGzLocation","fastaLocation","faiLocation","faiUrlTemplate","gziLocation","gziUrlTemplate","twoBitLocation","guessAdapter","UNSUPPORTED","UNKNOWN","generateUnknownTrackConf","guessTrackType","convertTrackConfig","setTrackConfs","notify","breakConnection","LegacyJBrowsePlugin","Plugin","addAdapterType","AdapterType","ncListAdapterConfigSchema","getAdapterClass","addToExtensionPoint","adapterGuesser","file","adapterHint","fileName","getFileName","addTextSearchAdapterType","TextSearchAdapterType","jbrowse1AdapterConfigSchema","AdapterClass","JBrowse1TextSearchAdapterClass","addConnectionType","ConnectionType","jbrowse1ConfigSchema","stateModel","jbrowse1ModelFactory","jb2ToJb1","jb1ToJb2","NCListFeature","ncFeature","parent","parentHandle","tag","attrName","attr","get","jb2TagToJb1Tag","subfeature","tags","_this2","jb1TagToJb2Tag","mappedTag","_this3","subfeatures","f","toJSON","BaseFeatureDataAdapter","configRefNames","nclist","NCListStore","RemoteFile","String","region","opts","ObservableCreate","observer","signal","getFeatures","checkAbortSignal","wrapFeature","getDataRoot","stats","featureCount"],"mappings":"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"}
@@ -183,14 +183,14 @@ function _inherits(subClass, superClass) {
183
183
  throw new TypeError("Super expression must either be null or a function");
184
184
  }
185
185
 
186
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
187
+ constructor: {
188
+ value: subClass,
189
+ writable: true,
190
+ configurable: true
191
+ }
192
+ });
186
193
  Object.defineProperty(subClass, "prototype", {
187
- value: Object.create(superClass && superClass.prototype, {
188
- constructor: {
189
- value: subClass,
190
- writable: true,
191
- configurable: true
192
- }
193
- }),
194
194
  writable: false
195
195
  });
196
196
  if (superClass) _setPrototypeOf(subClass, superClass);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-legacy-jbrowse",
3
- "version": "1.5.8",
3
+ "version": "1.6.2",
4
4
  "description": "JBrowse 2 plugin for connecting to and reading JBrowse 1 data",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -49,5 +49,5 @@
49
49
  "publishConfig": {
50
50
  "access": "public"
51
51
  },
52
- "gitHead": "f16afc382629a4a830f9040410a9ff1a3a328918"
52
+ "gitHead": "92455c6021abd69548496a450983d89f8837860d"
53
53
  }