Mercurial > repos > fubar > jbrowse2
annotate x/static/js/7911.764ec401.chunk.js.map @ 127:fbabf7498471 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 116b1a4bbd62251ad552306df2dc8aa8f46c6721
author | fubar |
---|---|
date | Mon, 07 Oct 2024 02:11:55 +0000 |
parents | 49f3d3878413 |
children |
rev | line source |
---|---|
125
49f3d3878413
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/tools/jbrowse2 commit 5ea1f9c1eef1de76232e69aa6d34cda77d90d566
fubar
parents:
diff
changeset
|
1 {"version":3,"file":"static/js/7911.764ec401.chunk.js","mappings":"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","sources":["../../../plugins/legacy-jbrowse/src/JBrowse1Connection/util.ts","../../../plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigParse.ts","../../../plugins/legacy-jbrowse/src/JBrowse1Connection/jb1ConfigLoad.ts","../../../node_modules/get-value/index.js","../../../node_modules/is-primitive/index.js","../../../node_modules/isobject/index.js","../../../node_modules/set-value/index.js","../../../node_modules/set-value/node_modules/is-plain-object/index.js"],"sourcesContent":["import getValue from 'get-value'\nimport { Track, Source } from './types'\n\nexport function isTrack(arg: any): arg is Track {\n return arg?.label && typeof arg.label === 'string'\n}\n\nexport function isSource(arg: any): arg is Source {\n return arg?.url && typeof arg.url === 'string'\n}\n\n/**\n * updates a with values from b, recursively\n */\n\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 (a[prop] === undefined || b[prop] !== undefined) {\n a[prop] = b[prop]\n }\n }\n return a\n}\n\n/**\n * replace variables in a template string with values\n *\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.replaceAll(/{([\\s\\w.]+)}/g, (match, varName) => {\n varName = varName.replaceAll(/\\s+/g, '')\n const fill = getValue(fillWith, varName)\n if (fill !== undefined) {\n return typeof fill === 'function' ? fill(varName) : fill\n }\n if (fillWith.callback) {\n // @ts-expect-error\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 * 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\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: unknown[]\n if (Array.isArray(src)) {\n // array\n r = []\n for (let 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(\n dest: Obj,\n source: Obj,\n copyFunc?: (arg: unknown) => unknown,\n): Obj {\n const empty = {}\n for (const 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 const s = source[name]\n if (\n !(name in dest) ||\n // @ts-expect-error\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: Config\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: Config\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 = /^json:(.+)/i.exec(value)\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 = Number.parseFloat(value.replaceAll(',', ''))\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, ...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|\\r\\n|\\r/).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 = /^\\s*\\[([^\\]]+)/.exec(line))) {\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 // @ts-expect-error\n ;[, , operation] = match\n if (isAlwaysArray([...section, ...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 = /^\\s{0,4}\\+\\s*(.+)/.exec(line))\n ) {\n recordVal()\n operation = '+='\n value = match[1]!.trim()\n }\n // add to existing value\n else if (value !== undefined && (match = /^\\s+(\\S.*)/.exec(line))) {\n const m = match[1]!\n value += value.length ? ` ${m.trim()}` : m.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?.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 = /\\.(\\w+)$/.exec(sourceDef)\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 trackConfig.config = undefined\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?.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?.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 const storeClass = trackConfig.storeClass\n ? regularizeClass('JBrowse/Store', trackConfig.storeClass)\n : guessStoreClass(trackConfig, urlTemplate)\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 storeConf.name =\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?.refseqs\n ? 'refseqs'\n : `store${objectHash(storeConf)}`\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 // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (location as UriLocation).uri !== undefined\n}\n\nfunction isLocalPathLocation(\n location: JBLocation,\n): location is LocalPathLocation {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return (location as LocalPathLocation).localPath !== undefined\n}\n\nexport async function fetchJb1(\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\n dataRoot: JBLocation = { uri: '', locationType: 'UriLocation' },\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\n baseConfig: Config = {\n include: ['{dataRoot}/trackList.json', '{dataRoot}/tracks.conf'],\n },\n // eslint-disable-next-line unicorn/no-object-as-default-parameter\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(0, -1)\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(0, -1)\n }\n let newConfig: Config = {}\n for (const conf of ['jbrowse.conf', 'jbrowse_conf.json']) {\n let fetchedConfig = null\n try {\n // @ts-expect-error\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\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-expect-error\n typeof b[prop] === 'object' &&\n // @ts-expect-error\n typeof a[prop] === 'object'\n ) {\n // @ts-expect-error\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-expect-error\n } else if (a[prop] === undefined || b[prop] !== undefined) {\n // @ts-expect-error\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 config.include = undefined\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\nfunction fillTemplates<T>(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 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-expect-error\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","/*!\n * get-value <https://github.com/jonschlinkert/get-value>\n *\n * Copyright (c) 2014-2018, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nconst isObject = require('isobject');\n\nmodule.exports = function(target, path, options) {\n if (!isObject(options)) {\n options = { default: options };\n }\n\n if (!isValidObject(target)) {\n return typeof options.default !== 'undefined' ? options.default : target;\n }\n\n if (typeof path === 'number') {\n path = String(path);\n }\n\n const isArray = Array.isArray(path);\n const isString = typeof path === 'string';\n const splitChar = options.separator || '.';\n const joinChar = options.joinChar || (typeof splitChar === 'string' ? splitChar : '.');\n\n if (!isString && !isArray) {\n return target;\n }\n\n if (isString && path in target) {\n return isValid(path, target, options) ? target[path] : options.default;\n }\n\n let segs = isArray ? path : split(path, splitChar, options);\n let len = segs.length;\n let idx = 0;\n\n do {\n let prop = segs[idx];\n if (typeof prop === 'number') {\n prop = String(prop);\n }\n\n while (prop && prop.slice(-1) === '\\\\') {\n prop = join([prop.slice(0, -1), segs[++idx] || ''], joinChar, options);\n }\n\n if (prop in target) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n } else {\n let hasProp = false;\n let n = idx + 1;\n\n while (n < len) {\n prop = join([prop, segs[n++]], joinChar, options);\n\n if ((hasProp = prop in target)) {\n if (!isValid(prop, target, options)) {\n return options.default;\n }\n\n target = target[prop];\n idx = n - 1;\n break;\n }\n }\n\n if (!hasProp) {\n return options.default;\n }\n }\n } while (++idx < len && isValidObject(target));\n\n if (idx === len) {\n return target;\n }\n\n return options.default;\n};\n\nfunction join(segs, joinChar, options) {\n if (typeof options.join === 'function') {\n return options.join(segs);\n }\n return segs[0] + joinChar + segs[1];\n}\n\nfunction split(path, splitChar, options) {\n if (typeof options.split === 'function') {\n return options.split(path);\n }\n return path.split(splitChar);\n}\n\nfunction isValid(key, target, options) {\n if (typeof options.isValid === 'function') {\n return options.isValid(key, target);\n }\n return true;\n}\n\nfunction isValidObject(val) {\n return isObject(val) || Array.isArray(val) || typeof val === 'function';\n}\n","/*!\n * is-primitive <https://github.com/jonschlinkert/is-primitive>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isPrimitive(val) {\n if (typeof val === 'object') {\n return val === null;\n }\n return typeof val !== 'function';\n};\n","/*!\n * isobject <https://github.com/jonschlinkert/isobject>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function isObject(val) {\n return val != null && typeof val === 'object' && Array.isArray(val) === false;\n};\n","/*!\n * set-value <https://github.com/jonschlinkert/set-value>\n *\n * Copyright (c) Jon Schlinkert (https://github.com/jonschlinkert).\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst { deleteProperty } = Reflect;\nconst isPrimitive = require('is-primitive');\nconst isPlainObject = require('is-plain-object');\n\nconst isObject = value => {\n return (typeof value === 'object' && value !== null) || typeof value === 'function';\n};\n\nconst isUnsafeKey = key => {\n return key === '__proto__' || key === 'constructor' || key === 'prototype';\n};\n\nconst validateKey = key => {\n if (!isPrimitive(key)) {\n throw new TypeError('Object keys must be strings or symbols');\n }\n\n if (isUnsafeKey(key)) {\n throw new Error(`Cannot set unsafe key: \"${key}\"`);\n }\n};\n\nconst toStringKey = input => {\n return Array.isArray(input) ? input.flat().map(String).join(',') : input;\n};\n\nconst createMemoKey = (input, options) => {\n if (typeof input !== 'string' || !options) return input;\n let key = input + ';';\n if (options.arrays !== undefined) key += `arrays=${options.arrays};`;\n if (options.separator !== undefined) key += `separator=${options.separator};`;\n if (options.split !== undefined) key += `split=${options.split};`;\n if (options.merge !== undefined) key += `merge=${options.merge};`;\n if (options.preservePaths !== undefined) key += `preservePaths=${options.preservePaths};`;\n return key;\n};\n\nconst memoize = (input, options, fn) => {\n const key = toStringKey(options ? createMemoKey(input, options) : input);\n validateKey(key);\n\n const value = setValue.cache.get(key) || fn();\n setValue.cache.set(key, value);\n return value;\n};\n\nconst splitString = (input, options = {}) => {\n const sep = options.separator || '.';\n const preserve = sep === '/' ? false : options.preservePaths;\n\n if (typeof input === 'string' && preserve !== false && /\\//.test(input)) {\n return [input];\n }\n\n const parts = [];\n let part = '';\n\n const push = part => {\n let number;\n if (part.trim() !== '' && Number.isInteger((number = Number(part)))) {\n parts.push(number);\n } else {\n parts.push(part);\n }\n };\n\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n\n if (value === '\\\\') {\n part += input[++i];\n continue;\n }\n\n if (value === sep) {\n push(part);\n part = '';\n continue;\n }\n\n part += value;\n }\n\n if (part) {\n push(part);\n }\n\n return parts;\n};\n\nconst split = (input, options) => {\n if (options && typeof options.split === 'function') return options.split(input);\n if (typeof input === 'symbol') return [input];\n if (Array.isArray(input)) return input;\n return memoize(input, options, () => splitString(input, options));\n};\n\nconst assignProp = (obj, prop, value, options) => {\n validateKey(prop);\n\n // Delete property when \"value\" is undefined\n if (value === undefined) {\n deleteProperty(obj, prop);\n\n } else if (options && options.merge) {\n const merge = options.merge === 'function' ? options.merge : Object.assign;\n\n // Only merge plain objects\n if (merge && isPlainObject(obj[prop]) && isPlainObject(value)) {\n obj[prop] = merge(obj[prop], value);\n } else {\n obj[prop] = value;\n }\n\n } else {\n obj[prop] = value;\n }\n\n return obj;\n};\n\nconst setValue = (target, path, value, options) => {\n if (!path || !isObject(target)) return target;\n\n const keys = split(path, options);\n let obj = target;\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const next = keys[i + 1];\n\n validateKey(key);\n\n if (next === undefined) {\n assignProp(obj, key, value, options);\n break;\n }\n\n if (typeof next === 'number' && !Array.isArray(obj[key])) {\n obj = obj[key] = [];\n continue;\n }\n\n if (!isObject(obj[key])) {\n obj[key] = {};\n }\n\n obj = obj[key];\n }\n\n return target;\n};\n\nsetValue.split = split;\nsetValue.cache = new Map();\nsetValue.clear = () => {\n setValue.cache = new Map();\n};\n\nmodule.exports = setValue;\n","/*!\n * is-plain-object <https://github.com/jonschlinkert/is-plain-object>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isObject = require('isobject');\n\nfunction isObjectObject(o) {\n return isObject(o) === true\n && Object.prototype.toString.call(o) === '[object Object]';\n}\n\nmodule.exports = function isPlainObject(o) {\n var ctor,prot;\n\n if (isObjectObject(o) === false) return false;\n\n // If has modified constructor\n ctor = o.constructor;\n if (typeof ctor !== 'function') return false;\n\n // If has modified prototype\n prot = ctor.prototype;\n if (isObjectObject(prot) === false) return false;\n\n // If constructor does not have an Object-specific method\n if (prot.hasOwnProperty('isPrototypeOf') === false) {\n return false;\n }\n\n // Most likely a plain Object\n return true;\n};\n"],"names":["isTrack","arg","label","deepUpdate","a","b","prop","Object","keys","undefined","clone","src","prototype","toString","call","nodeType","cloneNode","Date","getTime","RegExp","r","Array","isArray","i","l","length","constructor","dest","source","copyFunc","empty","name","s","mixin","regularizeConf","conf","url","tracks","track","push","meta","trackMetadata","sources","map","sourceDef","newSourceDef","typeMatch","exec","type","toLowerCase","sourceUrl","startsWith","URL","window","location","href","baseUrl","endsWith","addBase","stores","values","names","forEach","t","refSeqs","nameUrl","trackConfig","config","c","store","trackClassName","regularizeClass","synthesizeTrackStoreConfig","histograms","root","className","includes","replace","mainConf","urlTemplate","storeClass","backendVersion","test","guessStoreClass","console","warn","storeConf","useAsRefSeqStore","refseqs","objectHash","isUriLocation","uri","isLocalPathLocation","localPath","async","fetchJb1","dataRoot","locationType","baseConfig","include","baseConfigRoot","protocol","dataRootReg","JSON","parse","stringify","dataRootLocation","slice","baseProtocol","baseConfigLocation","newConfig","fetchedConfig","fetchConfigFile","error","mergeConfigs","createFinalConfig","defaults","configDefaults","configWithDefaults","finalConfig","inputConfig","loadRecur","upstreamConf","Error","newUpstreamConf","fillTemplates","format","version","regularizeIncludes","loads","cacheBuster","Promise","all","includedData","loadIncludes","validateConfig","result","openLocation","readFile","parseJb1","trim","parsedConf","parseJB1Json","text","keyPath","operation","value","section","data","lineNumber","recordVal","parsedValue","match","Number","parseFloat","replaceAll","join","path","existing","getValue","setValue","e","split","textLine","line","m","parseJB1Conf","aTracks","bTracks","mergeTrackConfigs","index","bT","aT","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","isObject","segs","joinChar","options","isValid","key","target","isValidObject","val","module","exports","default","String","isString","splitChar","separator","len","idx","hasProp","n","deleteProperty","Reflect","isPrimitive","isPlainObject","validateKey","TypeError","isUnsafeKey","input","fn","flat","toStringKey","arrays","merge","preservePaths","createMemoKey","cache","get","set","memoize","sep","preserve","parts","part","number","isInteger","splitString","assignProp","obj","assign","next","Map","clear","isObjectObject","o","ctor","prot","hasOwnProperty"],"sourceRoot":""} |