@jbrowse/cli 5.0.0-beta.1 → 5.0.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -44
- package/dist/commands/add-track-utils/adapter-utils.js +47 -39
- package/dist/commands/add-track-utils/track-config.js +5 -7
- package/dist/commands/add-track.js +31 -9
- package/dist/commands/admin-server/index.js +13 -5
- package/dist/commands/admin-server/utils.js +8 -6
- package/dist/commands/make-density/density-generator.js +180 -0
- package/dist/commands/make-density/index.js +139 -0
- package/dist/commands/make-pif/index.js +62 -27
- package/dist/commands/make-pif/pif-generator.js +98 -132
- package/dist/commands/shared/density.js +12 -0
- package/dist/commands/text-index/adapter-utils.js +17 -7
- package/dist/commands/text-index/aggregate.js +5 -5
- package/dist/commands/text-index/command.js +3 -1
- package/dist/commands/text-index/config-utils.js +7 -7
- package/dist/commands/text-index/indexing-utils.js +21 -49
- package/dist/commands/validate/configManifest.generated.js +4071 -1845
- package/dist/commands/validate/configSchema.generated.js +20482 -0
- package/dist/commands/validate/index.js +21 -5
- package/dist/commands/validate/liftConfig.js +34 -0
- package/dist/commands/validate/markRules/aggregateFieldName.js +9 -0
- package/dist/commands/validate/markRules/autoBin.js +27 -0
- package/dist/commands/validate/markRules/colorScale.js +244 -0
- package/dist/commands/validate/markRules/cssColorsLevel4.js +162 -0
- package/dist/commands/validate/markRules/jexlStrings.js +23 -0
- package/dist/commands/validate/markRules/markProblems.js +573 -0
- package/dist/commands/validate/markRules/markRuleFacts.js +6 -0
- package/dist/commands/validate/markRules/markSpecs.js +84 -0
- package/dist/commands/validate/markRules/markVocabulary.js +59 -0
- package/dist/commands/validate/markRules/shapeNameList.js +7 -0
- package/dist/commands/validate/markRules/stepChannels.js +55 -0
- package/dist/commands/validate/schemaValidate.js +425 -0
- package/dist/commands/validate/validateConfig.js +317 -258
- package/dist/index.js +5 -0
- package/dist/version.js +1 -1
- package/package.json +6 -10
- package/bin/run +0 -4
- package/bundle/index.js +0 -1569
- package/dist/commands/make-pif/cigar-utils.js +0 -67
package/bundle/index.js
DELETED
|
@@ -1,1569 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/*
|
|
3
|
-
* ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
|
|
4
|
-
* This devtool is neither made for production nor for readable output files.
|
|
5
|
-
* It uses "eval()" calls to create a separate source file in the browser devtools.
|
|
6
|
-
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
-
* or disable the default devtool with "devtool: false".
|
|
8
|
-
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
-
*/
|
|
10
|
-
/******/ (() => { // webpackBootstrap
|
|
11
|
-
/******/ var __webpack_modules__ = ({
|
|
12
|
-
|
|
13
|
-
/***/ "../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js"
|
|
14
|
-
/*!**********************************************************************************!*\
|
|
15
|
-
!*** ../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js ***!
|
|
16
|
-
\**********************************************************************************/
|
|
17
|
-
(module) {
|
|
18
|
-
|
|
19
|
-
"use strict";
|
|
20
|
-
eval("{\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js?\n}");
|
|
21
|
-
|
|
22
|
-
/***/ },
|
|
23
|
-
|
|
24
|
-
/***/ "../../packages/add-track-core/src/formats.ts"
|
|
25
|
-
/*!****************************************************!*\
|
|
26
|
-
!*** ../../packages/add-track-core/src/formats.ts ***!
|
|
27
|
-
\****************************************************/
|
|
28
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
29
|
-
|
|
30
|
-
"use strict";
|
|
31
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formats: () => (/* binding */ formats),\n/* harmony export */ matchFormat: () => (/* binding */ matchFormat),\n/* harmony export */ resolveIndexType: () => (/* binding */ resolveIndexType),\n/* harmony export */ trackTypeForAdapter: () => (/* binding */ trackTypeForAdapter)\n/* harmony export */ });\n/* harmony import */ var _trackTypes_generated_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./trackTypes.generated.ts */ \"../../packages/add-track-core/src/trackTypes.generated.ts\");\n\n\n/**\n * A sidecar file sits next to the data file at `${location}${suffix}`, unless it\n * is the index and the caller was handed one explicitly (`fromIndex`).\n */\n\n/**\n * Every file format the \"Add track\" flow knows, in first-match order.\n *\n * One table, two consumers: `@jbrowse/core`'s `Core-guessAdapterForLocation`\n * chain and `@jbrowse/cli`'s `add-track`. ADR-077.\n *\n * An entry here does not make a build able to open the format. Core guesses an\n * entry only when its adapter type is registered, so the plugin providing the\n * adapter is still what decides, and there is no second list to keep in step.\n *\n * Order matters only where two regexes can match the same name:\n * `.anchors.simple.gz` must precede `.anchors.gz`, and the tabix entries must\n * precede their plain counterparts.\n */\nconst formats = [{\n regex: /\\.bam$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'BamAdapter',\n locField: 'bamLocation',\n suffix: '.bai',\n indexType: 'BAI'\n }\n}, {\n regex: /\\.cram$/i,\n spec: {\n kind: 'sidecar',\n adapterType: 'CramAdapter',\n locField: 'cramLocation',\n sidecars: [{\n field: 'craiLocation',\n suffix: '.crai',\n fromIndex: true\n }]\n }\n}, {\n regex: /\\.sam(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'SamAdapter',\n locField: 'samLocation'\n }\n}, {\n regex: /\\.gff3?\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'Gff3TabixAdapter',\n locField: 'gffGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.gff3?$/i,\n spec: {\n kind: 'single',\n adapterType: 'Gff3Adapter',\n locField: 'gffLocation'\n }\n}, {\n regex: /\\.gtf\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'GtfTabixAdapter',\n locField: 'gtfGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.gtf$/i,\n spec: {\n kind: 'single',\n adapterType: 'GtfAdapter',\n locField: 'gtfLocation'\n }\n}, {\n regex: /\\.vcf\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'VcfTabixAdapter',\n locField: 'vcfGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.vcf\\.idx$/i,\n spec: {\n kind: 'unsupported'\n }\n}, {\n regex: /\\.vcf$/i,\n spec: {\n kind: 'single',\n adapterType: 'VcfAdapter',\n locField: 'vcfLocation'\n }\n}, {\n regex: /\\.(ld|vcor)\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'PlinkLDTabixAdapter',\n locField: 'ldLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.(ld|vcor)$/i,\n spec: {\n kind: 'single',\n adapterType: 'PlinkLDAdapter',\n locField: 'ldLocation'\n }\n}, {\n regex: /\\.bedpe(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'BedpeAdapter',\n locField: 'bedpeLocation'\n }\n}, {\n // STAR-Fusion writes a plain TSV, so the tool's name in the filename is the\n // only thing separating it from any other `.tsv`\n regex: [/(star-?fusion|fusion_predictions)/i, /\\.tsv(\\.gz)?$/i],\n spec: {\n kind: 'single',\n adapterType: 'StarFusionAdapter',\n locField: 'starFusionLocation'\n }\n}, {\n regex: /\\.bedmethyl\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'BedTabixAdapter',\n locField: 'bedGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n },\n trackType: 'MultiQuantitativeTrack'\n}, {\n regex: /\\.bed\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'BedTabixAdapter',\n locField: 'bedGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.bg\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'BedGraphTabixAdapter',\n locField: 'bedGraphGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.bg$/i,\n spec: {\n kind: 'single',\n adapterType: 'BedGraphAdapter',\n locField: 'bedGraphLocation'\n }\n}, {\n regex: /\\.pif\\.b?gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'PairwiseIndexedPAFAdapter',\n locField: 'pifGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.bed$/i,\n spec: {\n kind: 'single',\n adapterType: 'BedAdapter',\n locField: 'bedLocation'\n }\n}, {\n regex: /\\.(bb|bigbed)$/i,\n spec: {\n kind: 'single',\n adapterType: 'BigBedAdapter',\n locField: 'bigBedLocation'\n }\n}, {\n regex: /\\.(bw|bigwig)$/i,\n spec: {\n kind: 'single',\n adapterType: 'BigWigAdapter',\n locField: 'bigWigLocation'\n }\n}, {\n // the Pan-UKBB GWAS flat-file convention. `.bed.gz` is deliberately left to\n // BedTabixAdapter — telling a GWAS BED from a generic one needs\n // column-level sniffing, not an extension\n regex: /\\.txt\\.gz$/i,\n spec: {\n kind: 'indexed',\n adapterType: 'GWASAdapter',\n locField: 'bedGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n regex: /\\.(fa|fasta|fas|fna|mfa)\\.b?gz$/i,\n spec: {\n kind: 'sidecar',\n adapterType: 'BgzipFastaAdapter',\n locField: 'fastaLocation',\n sidecars: [{\n field: 'faiLocation',\n suffix: '.fai'\n }, {\n field: 'gziLocation',\n suffix: '.gzi'\n }]\n }\n}, {\n regex: /\\.(fa|fasta|fas|fna|mfa)$/i,\n spec: {\n kind: 'sidecar',\n adapterType: 'IndexedFastaAdapter',\n locField: 'fastaLocation',\n sidecars: [{\n field: 'faiLocation',\n suffix: '.fai',\n fromIndex: true\n }]\n }\n}, {\n regex: /\\.2bit$/i,\n spec: {\n kind: 'single',\n adapterType: 'TwoBitAdapter',\n locField: 'twoBitLocation'\n }\n}, {\n regex: /\\.sizes$/i,\n spec: {\n kind: 'unsupported'\n }\n}, {\n regex: /trackData\\.jsonz?$/i,\n spec: {\n kind: 'single',\n adapterType: 'NCListAdapter',\n locField: 'rootUrlTemplate'\n }\n}, {\n regex: /^sparql$/i,\n spec: {\n kind: 'single',\n adapterType: 'SPARQLAdapter',\n locField: 'endpoint'\n }\n}, {\n regex: /\\.hic$/i,\n spec: {\n kind: 'single',\n adapterType: 'HicAdapter',\n locField: 'hicLocation'\n }\n}, {\n regex: /\\.paf(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'PAFAdapter',\n locField: 'pafLocation'\n }\n}, {\n regex: /\\.out(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'MashMapAdapter',\n locField: 'outLocation'\n }\n}, {\n regex: /\\.chain(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'ChainAdapter',\n locField: 'chainLocation'\n }\n}, {\n regex: /\\.delta(\\.gz)?$/i,\n spec: {\n kind: 'single',\n adapterType: 'DeltaAdapter',\n locField: 'deltaLocation'\n }\n}, {\n regex: /\\.anchors\\.simple(\\.gz)?$/i,\n spec: {\n kind: 'anchors',\n adapterType: 'MCScanSimpleAnchorsAdapter',\n locField: 'mcscanSimpleAnchorsLocation'\n }\n}, {\n regex: /\\.anchors(\\.gz)?$/i,\n spec: {\n kind: 'anchors',\n adapterType: 'MCScanAnchorsAdapter',\n locField: 'mcscanAnchorsLocation'\n }\n}, {\n // an all-vs-all PAF looks like any `.paf`; the assembly list and the PanSN\n // mapping come from its add-track form\n spec: {\n kind: 'single',\n adapterType: 'AllVsAllPAFAdapter',\n locField: 'pafLocation'\n }\n}, {\n // likewise an all-vs-all PIF against a pairwise one\n spec: {\n kind: 'indexed',\n adapterType: 'AllVsAllIndexedPAFAdapter',\n locField: 'pifGzLocation',\n suffix: '.tbi',\n indexType: 'TBI'\n }\n}, {\n spec: {\n kind: 'single',\n adapterType: 'MCScanBlocksAdapter',\n locField: 'mcscanBlocksLocation'\n }\n}, {\n spec: {\n kind: 'single',\n adapterType: 'BlastTabularAdapter',\n locField: 'blastTableLocation'\n }\n}];\nfunction matchesRegex(fileName, regex) {\n return Array.isArray(regex) ? regex.every(r => r.test(fileName)) : regex.test(fileName);\n}\n\n/**\n * The format `fileName` is, or — when `adapterHint` names an adapter type — that\n * adapter's format whatever the filename says. A hint always wins, which is what\n * lets the add-track form open a file the extension alone cannot identify.\n */\nfunction matchFormat(fileName, adapterHint) {\n return adapterHint ? formats.find(f => 'adapterType' in f.spec && f.spec.adapterType === adapterHint) : formats.find(f => f.regex && matchesRegex(fileName, f.regex));\n}\n\n/**\n * The track type to draw `adapterType` with, from its config schema's\n * `#trackType` tag. `fileName` is what distinguishes the formats that share an\n * adapter — a `.bedmethyl.gz` from a plain `.bed.gz` — so pass it when known.\n */\nfunction trackTypeForAdapter(adapterType, fileName) {\n const entry = fileName ? matchFormat(fileName) : undefined;\n return entry?.trackType && 'adapterType' in entry.spec && entry.spec.adapterType === adapterType ? entry.trackType : _trackTypes_generated_ts__WEBPACK_IMPORTED_MODULE_0__.adapterTypesToTrackTypeMap[adapterType];\n}\n\n/**\n * The index spelling a location implies: htslib writes `.csi` in place of a\n * `.bai` or a `.tbi` for a reference over 512 Mb, and on request at any size.\n */\nfunction resolveIndexType(indexName, fallback) {\n return indexName?.toUpperCase().endsWith('CSI') ? 'CSI' : fallback;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/add-track-core/src/formats.ts?\n}");
|
|
32
|
-
|
|
33
|
-
/***/ },
|
|
34
|
-
|
|
35
|
-
/***/ "../../packages/add-track-core/src/trackTypes.generated.ts"
|
|
36
|
-
/*!*****************************************************************!*\
|
|
37
|
-
!*** ../../packages/add-track-core/src/trackTypes.generated.ts ***!
|
|
38
|
-
\*****************************************************************/
|
|
39
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
40
|
-
|
|
41
|
-
"use strict";
|
|
42
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ adapterTypesToTrackTypeMap: () => (/* binding */ adapterTypesToTrackTypeMap)\n/* harmony export */ });\n// Generated by scripts/generateTrackTypeMap.ts — do not edit by hand.\n// Regenerate with `pnpm autogen` after adding or retagging an adapter.\n\n/**\n * The track type each adapter's features are drawn by, from the `#trackType`\n * tag on its config schema. An adapter absent here has no tag, and the guessers\n * fall back to `FeatureTrack`.\n */\nconst adapterTypesToTrackTypeMap = {\n AllVsAllIndexedPAFAdapter: 'SyntenyTrack',\n AllVsAllPAFAdapter: 'SyntenyTrack',\n BamAdapter: 'AlignmentsTrack',\n BedAdapter: 'FeatureTrack',\n BedGraphAdapter: 'QuantitativeTrack',\n BedGraphTabixAdapter: 'QuantitativeTrack',\n BedpeAdapter: 'VariantTrack',\n BedTabixAdapter: 'FeatureTrack',\n BgzipFastaAdapter: 'ReferenceSequenceTrack',\n BgzipMafAdapter: 'MafTrack',\n BgzipTaffyAdapter: 'MafTrack',\n BigBedAdapter: 'FeatureTrack',\n BigMafAdapter: 'MafTrack',\n BigWigAdapter: 'QuantitativeTrack',\n BlastTabularAdapter: 'SyntenyTrack',\n ChainAdapter: 'SyntenyTrack',\n ChromSizesAdapter: 'ReferenceSequenceTrack',\n CramAdapter: 'AlignmentsTrack',\n CrisprGuideAdapter: 'FeatureTrack',\n DeltaAdapter: 'SyntenyTrack',\n FromConfigAdapter: 'FeatureTrack',\n FromConfigRegionsAdapter: 'ReferenceSequenceTrack',\n FromConfigSequenceAdapter: 'ReferenceSequenceTrack',\n GCContentAdapter: 'QuantitativeTrack',\n Gff3Adapter: 'FeatureTrack',\n Gff3TabixAdapter: 'FeatureTrack',\n GtfAdapter: 'FeatureTrack',\n GtfTabixAdapter: 'FeatureTrack',\n GWASAdapter: 'GWASTrack',\n HicAdapter: 'HicTrack',\n HtsgetBamAdapter: 'AlignmentsTrack',\n IndexedFastaAdapter: 'ReferenceSequenceTrack',\n MafTabixAdapter: 'MafTrack',\n MashMapAdapter: 'SyntenyTrack',\n MCScanAnchorsAdapter: 'SyntenyTrack',\n MCScanBlocksAdapter: 'SyntenyTrack',\n MCScanSimpleAnchorsAdapter: 'SyntenyTrack',\n MultiWiggleAdapter: 'MultiQuantitativeTrack',\n NCListAdapter: 'FeatureTrack',\n PAFAdapter: 'SyntenyTrack',\n PairwiseIndexedPAFAdapter: 'SyntenyTrack',\n PlinkLDAdapter: 'LDTrack',\n PlinkLDTabixAdapter: 'LDTrack',\n SamAdapter: 'AlignmentsTrack',\n SequenceSearchAdapter: 'FeatureTrack',\n SPARQLAdapter: 'FeatureTrack',\n SplitVcfTabixAdapter: 'VariantTrack',\n StarFusionAdapter: 'VariantTrack',\n TwoBitAdapter: 'ReferenceSequenceTrack',\n UnindexedFastaAdapter: 'ReferenceSequenceTrack',\n VcfAdapter: 'VariantTrack',\n VcfTabixAdapter: 'VariantTrack'\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/add-track-core/src/trackTypes.generated.ts?\n}");
|
|
43
|
-
|
|
44
|
-
/***/ },
|
|
45
|
-
|
|
46
|
-
/***/ "../../packages/cigar-utils/src/cigarReorient.ts"
|
|
47
|
-
/*!*******************************************************!*\
|
|
48
|
-
!*** ../../packages/cigar-utils/src/cigarReorient.ts ***!
|
|
49
|
-
\*******************************************************/
|
|
50
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
51
|
-
|
|
52
|
-
"use strict";
|
|
53
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ flipCigar: () => (/* binding */ flipCigar),\n/* harmony export */ swapIndelCigar: () => (/* binding */ swapIndelCigar)\n/* harmony export */ });\n// Reverse a CIGAR's op order and swap insertions<->deletions. Used to view an\n// alignment from the opposite (query<->target) perspective on the reverse\n// strand, where both the direction and the indel sense flip.\nfunction flipCigar(cigar) {\n const ops = [];\n let len = 0;\n for (let i = 0, l = cigar.length; i < l; i++) {\n const c = cigar[i];\n if (c >= '0' && c <= '9') {\n len = len * 10 + (c.charCodeAt(0) - 48);\n } else {\n ops.push([len, c]);\n len = 0;\n }\n }\n let result = '';\n for (let i = ops.length - 1; i >= 0; i--) {\n const [l, op] = ops[i];\n result += l;\n result += op === 'D' ? 'I' : op === 'I' ? 'D' : op;\n }\n return result;\n}\n\n// Swap insertions<->deletions in place, leaving op order untouched. This is the\n// +-strand query<->target perspective flip, where only the indel sense reverses.\nfunction swapIndelCigar(cigar) {\n return cigar.replaceAll(/[DI]/g, op => op === 'D' ? 'I' : 'D');\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/cigar-utils/src/cigarReorient.ts?\n}");
|
|
54
|
-
|
|
55
|
-
/***/ },
|
|
56
|
-
|
|
57
|
-
/***/ "../../packages/cigar-utils/src/csOps.ts"
|
|
58
|
-
/*!***********************************************!*\
|
|
59
|
-
!*** ../../packages/cigar-utils/src/csOps.ts ***!
|
|
60
|
-
\***********************************************/
|
|
61
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
62
|
-
|
|
63
|
-
"use strict";
|
|
64
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ flipCs: () => (/* binding */ flipCs),\n/* harmony export */ forEachCsMismatch: () => (/* binding */ forEachCsMismatch),\n/* harmony export */ forEachCsOp: () => (/* binding */ forEachCsOp)\n/* harmony export */ });\n/* harmony import */ var _mismatchCallback_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mismatchCallback.ts */ \"../../packages/cigar-utils/src/mismatchCallback.ts\");\n\n\n/** An operation of the minimap2 `cs` grammar. */\n\nfunction isDigit(code) {\n return code >= 48 && code <= 57;\n}\nfunction isBaseChar(ch) {\n return ch !== undefined && /[A-Za-z]/.test(ch);\n}\nfunction scanBases(cs, start) {\n let i = start;\n while (i < cs.length && isBaseChar(cs[i])) {\n i++;\n }\n return i;\n}\nfunction scanDigits(cs, start) {\n let i = start;\n let value = 0;\n while (i < cs.length && isDigit(cs.charCodeAt(i))) {\n value = value * 10 + (cs.charCodeAt(i) - 48);\n i++;\n }\n return {\n value,\n next: i\n };\n}\n\n/**\n * Walk a minimap2 `cs` difference string\n * (https://github.com/lh3/minimap2#cs), calling `callback` once per operation.\n *\n * Short form is `:N` match run, `*ab` substitution (ref base a, query base b),\n * `+seq` insertion, `-seq` deletion; long form adds `=SEQ` match runs; `~ab12cd`\n * is a 12 bp intron between the given splice motifs. A character belonging to\n * none of those is skipped, so a truncated or extended string still walks to the\n * end rather than throwing.\n *\n * `refLen`/`queryLen` are the bases the operation consumes on each sequence, and\n * `[seqStart, seqEnd)` bounds its operand *within `cs`* — the bases for `=`/`+`/\n * `-`, the two substituted bases for `*`, the digits for `:`, the whole motif\n * for `~`. Offsets rather than a substring because the mismatch walk runs per\n * feature per frame, and only two of six ops ever need the text.\n *\n * **One walker, because four disagreed.** This replaces a copy in each of\n * `csToCigar`, `flipCs`, `forEachCsMismatch` and the (now removed) `visitCsOps`,\n * and every one of the divergences was silent: two of them dropped `~` and then\n * mis-scanned the rest of the string, one ignored `=SEQ` entirely and so never\n * advanced the reference across a long-form match run, and the three that\n * scanned `+`/`-` operands disagreed on where one ends.\n */\nfunction forEachCsOp(cs, callback) {\n let i = 0;\n while (i < cs.length) {\n const c = cs[i];\n if (c === ':') {\n const {\n value,\n next\n } = scanDigits(cs, i + 1);\n callback(':', value, value, i + 1, next);\n i = next;\n } else if (c === '=') {\n const next = scanBases(cs, i + 1);\n const len = next - i - 1;\n callback('=', len, len, i + 1, next);\n i = next;\n } else if (c === '*') {\n callback('*', 1, 1, i + 1, Math.min(i + 3, cs.length));\n i += 3;\n } else if (c === '+' || c === '-') {\n const next = scanBases(cs, i + 1);\n const len = next - i - 1;\n callback(c, c === '-' ? len : 0, c === '+' ? len : 0, i + 1, next);\n i = next;\n } else if (c === '~') {\n // the length sits between two 2-base splice motifs\n const {\n value,\n next\n } = scanDigits(cs, i + 3);\n const end = Math.min(next + 2, cs.length);\n callback('~', value, 0, i + 1, end);\n i = end;\n } else {\n i++;\n }\n }\n}\n\n/**\n * Rewrite a cs string from the target perspective to the query perspective (for\n * a synteny view anchored on the query assembly): `*ab` -> `*ba`, `+seq` ->\n * `-seq`, `-seq` -> `+seq`, match runs unchanged.\n *\n * Undefined when the string states something the query perspective cannot: an\n * intron is a gap in the *reference*, and flipped it becomes a gap in the query\n * with no sequence to write for it, which cs has no way to express. Callers fall\n * back to the CIGAR there, the same as they already do for reverse-strand\n * alignments (which additionally need a reverse-complement).\n */\nfunction flipCs(cs) {\n // The one op with no query-perspective form, and cs writes it nowhere else —\n // operands are base letters. Answered before the walk so the rewrite below is\n // total.\n if (cs.includes('~')) {\n return undefined;\n }\n let result = '';\n forEachCsOp(cs, (op, refLen, _queryLen, seqStart, seqEnd) => {\n if (op === ':') {\n result += `:${refLen}`;\n } else if (op === '=') {\n result += `=${cs.slice(seqStart, seqEnd)}`;\n } else if (op === '*') {\n result += `*${cs[seqStart + 1] ?? ''}${cs[seqStart] ?? ''}`;\n } else {\n result += `${op === '+' ? '-' : '+'}${cs.slice(seqStart, seqEnd)}`;\n }\n });\n return result;\n}\n\n/**\n * Walk a cs string and drive a {@link MismatchCallback} (the contract BAM/CRAM\n * features use), emitting per-base substitutions with their real query base plus\n * insertions, deletions and introns. Offsets are relative to the reference\n * (feature) start; `windowStart`/`windowEnd` (also reference-relative) clip the\n * output.\n */\nfunction forEachCsMismatch(cs, callback, windowStart, windowEnd) {\n const lo = windowStart ?? Number.NEGATIVE_INFINITY;\n const hi = windowEnd ?? Number.POSITIVE_INFINITY;\n let ref = 0;\n forEachCsOp(cs, (op, refLen, queryLen, seqStart, seqEnd) => {\n if (op === '*') {\n if (ref >= lo && ref < hi) {\n callback(_mismatchCallback_ts__WEBPACK_IMPORTED_MODULE_0__.MISMATCH_TYPE, ref, 1, cs[seqStart + 1] ?? '', -1, 0, 0);\n }\n } else if (op === '+') {\n if (ref >= lo && ref <= hi) {\n const seq = cs.slice(seqStart, seqEnd);\n callback(_mismatchCallback_ts__WEBPACK_IMPORTED_MODULE_0__.INSERTION_TYPE, ref, queryLen, seq, -1, 0, queryLen);\n }\n } else if (op === '-' || op === '~') {\n if (ref < hi && ref + refLen > lo) {\n // an intron is a reference gap the read skips rather than deletes, and\n // the two draw differently\n const type = op === '-' ? _mismatchCallback_ts__WEBPACK_IMPORTED_MODULE_0__.DELETION_TYPE : _mismatchCallback_ts__WEBPACK_IMPORTED_MODULE_0__.SKIP_TYPE;\n callback(type, ref, refLen, '', -1, 0, 0);\n }\n }\n ref += refLen;\n });\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/cigar-utils/src/csOps.ts?\n}");
|
|
65
|
-
|
|
66
|
-
/***/ },
|
|
67
|
-
|
|
68
|
-
/***/ "../../packages/cigar-utils/src/csToCigar.ts"
|
|
69
|
-
/*!***************************************************!*\
|
|
70
|
-
!*** ../../packages/cigar-utils/src/csToCigar.ts ***!
|
|
71
|
-
\***************************************************/
|
|
72
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
73
|
-
|
|
74
|
-
"use strict";
|
|
75
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ csToCigar: () => (/* binding */ csToCigar)\n/* harmony export */ });\n/* harmony import */ var _csOps_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./csOps.ts */ \"../../packages/cigar-utils/src/csOps.ts\");\n\n\n// Convert a minimap2 `cs` difference string to a standard CIGAR: matches -> `=`,\n// substitutions -> `X`, insertions -> `I`, deletions -> `D`, introns -> `N`.\n// Sequence bases are dropped so the result reorients with the same\n// flipCigar/swapIndelCigar helpers as a `cg` CIGAR. The grammar itself is\n// forEachCsOp's; this is only the op mapping.\nfunction csToCigar(cs) {\n const ops = [];\n function push(len, op) {\n if (len > 0) {\n const last = ops[ops.length - 1];\n if (last?.[1] === op) {\n last[0] += len;\n } else {\n ops.push([len, op]);\n }\n }\n }\n ;(0,_csOps_ts__WEBPACK_IMPORTED_MODULE_0__.forEachCsOp)(cs, (op, refLen, queryLen) => {\n if (op === '*') {\n push(1, 'X');\n } else if (op === '+') {\n push(queryLen, 'I');\n } else if (op === '-') {\n push(refLen, 'D');\n } else if (op === '~') {\n push(refLen, 'N');\n } else {\n push(refLen, '=');\n }\n });\n let result = '';\n for (const [len, op] of ops) {\n result += len;\n result += op;\n }\n return result;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/cigar-utils/src/csToCigar.ts?\n}");
|
|
76
|
-
|
|
77
|
-
/***/ },
|
|
78
|
-
|
|
79
|
-
/***/ "../../packages/cigar-utils/src/mismatchCallback.ts"
|
|
80
|
-
/*!**********************************************************!*\
|
|
81
|
-
!*** ../../packages/cigar-utils/src/mismatchCallback.ts ***!
|
|
82
|
-
\**********************************************************/
|
|
83
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
84
|
-
|
|
85
|
-
"use strict";
|
|
86
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DELETION_TYPE: () => (/* binding */ DELETION_TYPE),\n/* harmony export */ HARDCLIP_TYPE: () => (/* binding */ HARDCLIP_TYPE),\n/* harmony export */ INSERTION_TYPE: () => (/* binding */ INSERTION_TYPE),\n/* harmony export */ MISMATCH_TYPE: () => (/* binding */ MISMATCH_TYPE),\n/* harmony export */ SKIP_TYPE: () => (/* binding */ SKIP_TYPE),\n/* harmony export */ SOFTCLIP_TYPE: () => (/* binding */ SOFTCLIP_TYPE)\n/* harmony export */ });\n// Shared types for callback-based mismatch iteration\n// Each adapter implements forEachMismatch using its optimal internal structure\n//\n// The values are the ASCII codes of the CIGAR/CRAM letters they name, which is\n// what lets `@gmod/cram`'s own forEachMismatch emit straight into one of these\n// callbacks: it reports a difference by its CRAM feature code, so a CRAM\n// adapter that agrees on the numbering needs no translating callback in\n// between, and that indirect call was 17% of the walk. See @gmod/cram ADR 0008\n// and CramSlightlyLazyFeature.forEachMismatch. `cramCodes.test.ts` pins the\n// agreement.\n//\n// Nothing depends on them being 0..5 — every consumer compares symbolically\n// and none of them is serialized — but do not renumber them without checking\n// that again.\nconst MISMATCH_TYPE = 0x58; // 'X'\nconst INSERTION_TYPE = 0x49; // 'I'\nconst DELETION_TYPE = 0x44; // 'D'\nconst SKIP_TYPE = 0x4e; // 'N'\nconst SOFTCLIP_TYPE = 0x53; // 'S'\nconst HARDCLIP_TYPE = 0x48; // 'H'\n\n/**\n * Identical to `@gmod/bam`'s and `@gmod/cram`'s `MismatchCallback`, so a\n * consumer's callback goes straight to either walk with nothing in between.\n *\n * The last three are numbers rather than `number | undefined`: an absent\n * quality is -1, and an absent reference base or clip length is 0. That is\n * what both libraries emit, and it saves every consumer a non-null assertion.\n */\n\n/**\n * The genomic viewport a `forEachMismatch` walk reports within: 0-based\n * half-open, and absolute even where the walk reports read-relative positions,\n * since it describes a region of the reference rather than a position in the\n * output.\n *\n * The narrow half of `@gmod/bam`'s and `@gmod/cram`'s `MismatchOptions` — the\n * part every alignment feature can honour, without this package having to know\n * about a packed reference or an origin.\n */\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/cigar-utils/src/mismatchCallback.ts?\n}");
|
|
87
|
-
|
|
88
|
-
/***/ },
|
|
89
|
-
|
|
90
|
-
/***/ "../../packages/cigar-utils/src/pafIdentity.ts"
|
|
91
|
-
/*!*****************************************************!*\
|
|
92
|
-
!*** ../../packages/cigar-utils/src/pafIdentity.ts ***!
|
|
93
|
-
\*****************************************************/
|
|
94
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
95
|
-
|
|
96
|
-
"use strict";
|
|
97
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ pafIdentity: () => (/* binding */ pafIdentity)\n/* harmony export */ });\n/**\n * Identity in [0,1] for one PAF row, from whichever of its tags/columns carries\n * it. Prefers the `de:f:` tag (minimap2 gap-compressed divergence) since it is\n * computed from the actual CIGAR — the same quantity rustybam's `rb stats --paf`\n * writes and SVbyEye computes per-bin. Falls back to odgi untangle's `id:f:` tag\n * (a percentage or a fraction), then to residue matches over block length.\n *\n * Lives here, in a package with no framework deps, because two independent\n * pieces of code must agree on it to the digit: the synteny adapters read it at\n * render time, and `jbrowse make-pif` writes the coarse LOD tier's `de:f:` as\n * `1 - pafIdentity(row)`. If the two chains diverge on any rung, identity\n * coloring jumps at the zoom where the view switches tiers — which is exactly\n * what happened when make-pif's copy skipped the `id:f:` rung.\n */\nfunction pafIdentity(row) {\n if (row.de !== undefined) {\n const d = +row.de;\n if (Number.isFinite(d) && d >= 0 && d <= 1) {\n return 1 - d;\n }\n }\n if (row.id !== undefined) {\n const v = +row.id;\n if (Number.isFinite(v)) {\n return v > 1 ? v / 100 : v;\n }\n }\n const matches = +(row.numMatches ?? 0);\n const blockLen = +(row.blockLen ?? 0);\n return blockLen > 0 ? matches / blockLen : 0;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/cigar-utils/src/pafIdentity.ts?\n}");
|
|
98
|
-
|
|
99
|
-
/***/ },
|
|
100
|
-
|
|
101
|
-
/***/ "../../packages/text-indexing-core/src/indexFiles.ts"
|
|
102
|
-
/*!***********************************************************!*\
|
|
103
|
-
!*** ../../packages/text-indexing-core/src/indexFiles.ts ***!
|
|
104
|
-
\***********************************************************/
|
|
105
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
106
|
-
|
|
107
|
-
"use strict";
|
|
108
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexFiles: () => (/* binding */ indexFiles)\n/* harmony export */ });\n/* harmony import */ var _types_gff3Adapter_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types/gff3Adapter.ts */ \"../../packages/text-indexing-core/src/types/gff3Adapter.ts\");\n/* harmony import */ var _types_gtfAdapter_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types/gtfAdapter.ts */ \"../../packages/text-indexing-core/src/types/gtfAdapter.ts\");\n/* harmony import */ var _types_vcfAdapter_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types/vcfAdapter.ts */ \"../../packages/text-indexing-core/src/types/vcfAdapter.ts\");\n/* harmony import */ var _util_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util.ts */ \"../../packages/text-indexing-core/src/util.ts\");\n\n\n\n\n\n// per-track progress sink. Consumers render this however they like: the CLI\n// draws a cli-progress bar, the desktop forwards it over RPC as a determinate\n// status.\n\nfunction getIndexingLocation(track, locationKey) {\n const {\n adapter\n } = track;\n // adapter[locationKey] is the canonical location object, e.g. gffGzLocation;\n // fall back to the adapter itself to support the shorthand where a bare `uri`\n // sits directly on the adapter\n const loc = adapter?.[locationKey] ?? adapter;\n return loc?.locationType === 'LocalPathLocation' ? loc.localPath : loc?.uri;\n}\nconst noop = () => {};\n\n// shared generator that streams index records for a set of tracks. Dispatches\n// to the gff3/vcf indexers based on adapter type; per-track attribute and\n// exclude/include overrides from textSearching take precedence over the\n// defaults.\nasync function* indexFiles({\n tracks,\n attributesToIndex,\n outDir,\n featureTypesToExclude,\n featureTypesToInclude,\n makeProgress,\n checkAbort\n}) {\n for (const track of tracks) {\n checkAbort?.();\n const {\n adapter,\n textSearching,\n trackId\n } = track;\n const indexable = _util_ts__WEBPACK_IMPORTED_MODULE_3__.indexableAdapters[adapter?.type ?? ''];\n const inLocation = indexable ? getIndexingLocation(track, indexable.locationKey) : undefined;\n if (indexable && inLocation) {\n const progress = makeProgress?.(trackId);\n const common = {\n config: track,\n attributesToIndex: textSearching?.indexingAttributes ?? attributesToIndex,\n inLocation,\n outDir,\n onStart: progress?.onStart ?? noop,\n onUpdate: progress?.onUpdate ?? noop,\n checkAbort\n };\n if (indexable.format === 'gff3') {\n yield* (0,_types_gff3Adapter_ts__WEBPACK_IMPORTED_MODULE_0__.indexGff3)({\n ...common,\n featureTypesToExclude: textSearching?.indexingFeatureTypesToExclude ?? featureTypesToExclude,\n featureTypesToInclude: textSearching?.indexingFeatureTypesToInclude ?? featureTypesToInclude\n });\n } else if (indexable.format === 'gtf') {\n yield* (0,_types_gtfAdapter_ts__WEBPACK_IMPORTED_MODULE_1__.indexGtf)(common);\n } else {\n yield* (0,_types_vcfAdapter_ts__WEBPACK_IMPORTED_MODULE_2__.indexVcf)(common);\n }\n progress?.onDone?.();\n }\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/indexFiles.ts?\n}");
|
|
109
|
-
|
|
110
|
-
/***/ },
|
|
111
|
-
|
|
112
|
-
/***/ "../../packages/text-indexing-core/src/trixPaths.ts"
|
|
113
|
-
/*!**********************************************************!*\
|
|
114
|
-
!*** ../../packages/text-indexing-core/src/trixPaths.ts ***!
|
|
115
|
-
\**********************************************************/
|
|
116
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
117
|
-
|
|
118
|
-
"use strict";
|
|
119
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TRIX_DIR: () => (/* binding */ TRIX_DIR),\n/* harmony export */ sanitizeForFilename: () => (/* binding */ sanitizeForFilename),\n/* harmony export */ trixFileNames: () => (/* binding */ trixFileNames),\n/* harmony export */ trixFilePaths: () => (/* binding */ trixFilePaths),\n/* harmony export */ trixFileUris: () => (/* binding */ trixFileUris)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n\n\n/** Every trix artifact lands in this directory under the output directory. */\nconst TRIX_DIR = 'trix';\n\n// Windows reserves these device names even with an extension, so a track or\n// assembly literally named e.g. NUL would otherwise yield an unusable NUL.ix\nconst windowsReservedName = /^(con|prn|aux|nul|com[1-9]|lpt[1-9])$/i;\n\n// makes `name` safe as a filename on Windows: replaces the invalid characters\n// \\ / : * ? \" < > |, drops trailing dots/spaces (Windows silently strips them),\n// and escapes reserved device names\nfunction sanitizeForFilename(name) {\n const cleaned = name.replaceAll(/[\\\\/:*?\"<>|]/g, '_').replace(/(?<![. ])[. ]+$/, '');\n return windowsReservedName.test(cleaned) ? `_${cleaned}` : cleaned;\n}\n\n/**\n * The three files an index called `name` writes, sanitized once.\n *\n * Everything that writes a trix artifact or points a config at one derives its\n * paths from here. They used to sanitize independently and one of them didn't:\n * the CLI wrote `.ix`/`.ixx` under the raw name while `generateMeta` and\n * `createTrixAdapter` sanitized, so a trackId holding a `/` aimed the write at\n * a `trix/` subdirectory that does not exist, and the rest of the\n * Windows-invalid set wrote a file no search would look for.\n */\nfunction trixFileNames(name) {\n const safeName = sanitizeForFilename(name);\n return {\n ix: `${safeName}.ix`,\n ixx: `${safeName}.ixx`,\n meta: `${safeName}_meta.json`\n };\n}\n\n/** {@link trixFileNames} as filesystem paths under `outDir`, for a writer. */\nfunction trixFilePaths(outDir, name) {\n const names = trixFileNames(name);\n return {\n ix: node_path__WEBPACK_IMPORTED_MODULE_0___default().join(outDir, TRIX_DIR, names.ix),\n ixx: node_path__WEBPACK_IMPORTED_MODULE_0___default().join(outDir, TRIX_DIR, names.ixx),\n meta: node_path__WEBPACK_IMPORTED_MODULE_0___default().join(outDir, TRIX_DIR, names.meta)\n };\n}\n\n/**\n * {@link trixFileNames} as URIs relative to the config, for an adapter conf.\n * Always `/`-joined — a URI is not a filesystem path, so this one does not go\n * through `path.join`, which would emit `\\` on Windows.\n */\nfunction trixFileUris(name) {\n const names = trixFileNames(name);\n return {\n ix: `${TRIX_DIR}/${names.ix}`,\n ixx: `${TRIX_DIR}/${names.ixx}`,\n meta: `${TRIX_DIR}/${names.meta}`\n };\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/trixPaths.ts?\n}");
|
|
120
|
-
|
|
121
|
-
/***/ },
|
|
122
|
-
|
|
123
|
-
/***/ "../../packages/text-indexing-core/src/types/common.ts"
|
|
124
|
-
/*!*************************************************************!*\
|
|
125
|
-
!*** ../../packages/text-indexing-core/src/types/common.ts ***!
|
|
126
|
-
\*************************************************************/
|
|
127
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
128
|
-
|
|
129
|
-
"use strict";
|
|
130
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createReadlineInterface: () => (/* binding */ createReadlineInterface),\n/* harmony export */ generateMeta: () => (/* binding */ generateMeta),\n/* harmony export */ getLocalOrRemoteStream: () => (/* binding */ getLocalOrRemoteStream),\n/* harmony export */ guessAdapterFromFileName: () => (/* binding */ guessAdapterFromFileName),\n/* harmony export */ isURL: () => (/* binding */ isURL),\n/* harmony export */ makeLocation: () => (/* binding */ makeLocation),\n/* harmony export */ parseAttributes: () => (/* binding */ parseAttributes)\n/* harmony export */ });\n/* harmony import */ var node_buffer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:buffer */ \"node:buffer\");\n/* harmony import */ var node_buffer__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_buffer__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var node_readline__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! node:readline */ \"node:readline\");\n/* harmony import */ var node_readline__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(node_readline__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(node_stream__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! node:url */ \"node:url\");\n/* harmony import */ var node_url__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(node_url__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! node:zlib */ \"node:zlib\");\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(node_zlib__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _trixPaths_ts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../trixPaths.ts */ \"../../packages/text-indexing-core/src/trixPaths.ts\");\n/* harmony import */ var _util_ts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../util.ts */ \"../../packages/text-indexing-core/src/util.ts\");\n\n\n\n\n\n\n\n\n\nfunction isURL(fileName) {\n try {\n const url = new URL(fileName);\n return url.protocol === 'http:' || url.protocol === 'https:';\n } catch {\n return false;\n }\n}\nfunction convertFileUrlToPath(fileUrl) {\n try {\n const url = new URL(fileUrl);\n if (url.protocol === 'file:') {\n return (0,node_url__WEBPACK_IMPORTED_MODULE_5__.fileURLToPath)(url);\n }\n } catch {\n // not a valid URL\n }\n return undefined;\n}\n\n// Turn a WHATWG ReadableStream into a node Readable by driving its reader.\n//\n// DO NOT replace this with `Readable.fromWeb(body)`. It looks equivalent and\n// passes tests (undici's fetch body IS a node:stream/web stream), but the\n// desktop indexing worker runs on Chromium's global fetch, whose body is a DOM\n// ReadableStream from a different realm. `Readable.fromWeb`'s internal\n// `instanceof` check rejects it with the baffling \"must be an instance of\n// ReadableStream. Received an instance of ReadableStream\", and remote (URL)\n// track indexing breaks. `getReader()` is standard on every WHATWG stream\n// regardless of realm, so this works everywhere. See common.test.ts\n// \"foreign realm\" regression test.\nfunction webStreamToNodeReadable(reader) {\n return new node_stream__WEBPACK_IMPORTED_MODULE_4__.Readable({\n read() {\n reader.read().then(({\n done,\n value\n }) => {\n this.push(done ? null : node_buffer__WEBPACK_IMPORTED_MODULE_0__.Buffer.from(value));\n }).catch(e => {\n this.destroy(e);\n });\n },\n // Cancel the source when the Readable is destroyed early (e.g. an aborted\n // index) so the underlying fetch connection is released rather than left\n // hanging — the cleanup Readable.fromWeb would do for us if it accepted\n // this stream.\n destroy(error, callback) {\n reader.cancel(error ?? undefined).then(() => {\n callback(error);\n }).catch(() => {\n callback(error);\n });\n }\n });\n}\nasync function getLocalOrRemoteStream({\n file,\n out,\n onStart,\n onUpdate\n}) {\n let receivedBytes = 0;\n if (isURL(file)) {\n const res = await fetch(file);\n if (!res.ok) {\n throw new Error(`Failed to fetch ${file} status ${res.status} ${await res.text()}`);\n }\n const totalBytes = +(res.headers.get('Content-Length') || 0);\n onStart(totalBytes);\n const body = res.body;\n if (!body) {\n throw new Error(`Failed to fetch ${file}: no response body`);\n }\n\n // node-fetch gives a node Readable directly; global fetch gives a web\n // ReadableStream we adapt (see webStreamToNodeReadable — do not swap in\n // Readable.fromWeb here).\n const nodeStream = body instanceof node_stream__WEBPACK_IMPORTED_MODULE_4__.Readable ? body : webStreamToNodeReadable(body.getReader());\n nodeStream.on('data', chunk => {\n receivedBytes += chunk.length;\n onUpdate(receivedBytes);\n });\n return nodeStream;\n } else {\n // Handle file:// URLs by converting to local path\n const localPath = convertFileUrlToPath(file) ?? file;\n const filename = node_path__WEBPACK_IMPORTED_MODULE_2___default().isAbsolute(localPath) ? localPath : node_path__WEBPACK_IMPORTED_MODULE_2___default().join(out, localPath);\n const totalBytes = node_fs__WEBPACK_IMPORTED_MODULE_1___default().statSync(filename).size;\n onStart(totalBytes);\n const stream = node_fs__WEBPACK_IMPORTED_MODULE_1___default().createReadStream(filename);\n stream.on('data', chunk => {\n receivedBytes += chunk.length;\n onUpdate(receivedBytes);\n });\n return stream;\n }\n}\nfunction createReadlineInterface(stream, inLocation) {\n const inputStream = /\\.b?gz$/i.test(inLocation) ? stream.pipe((0,node_zlib__WEBPACK_IMPORTED_MODULE_6__.createGunzip)()) : stream;\n return node_readline__WEBPACK_IMPORTED_MODULE_3___default().createInterface({\n input: inputStream\n });\n}\nfunction parseAttributes(infoString, decodeFunc) {\n const result = {};\n for (const field of infoString.split(';')) {\n const trimmed = field.trim();\n if (trimmed) {\n const eqIdx = trimmed.indexOf('=');\n if (eqIdx !== -1) {\n const key = trimmed.slice(0, eqIdx).trim();\n const val = trimmed.slice(eqIdx + 1);\n result[key] = decodeFunc(val).trim().replaceAll(',', ' ');\n }\n }\n }\n return result;\n}\nfunction makeLocation(location, protocol) {\n if (protocol === 'uri') {\n return {\n uri: location,\n locationType: 'UriLocation'\n };\n }\n if (protocol === 'localPath') {\n return {\n localPath: node_path__WEBPACK_IMPORTED_MODULE_2___default().resolve(location),\n locationType: 'LocalPathLocation'\n };\n }\n throw new Error(`invalid protocol ${protocol}`);\n}\n\n// ordered most-specific-first so e.g. `.vcf.gz` matches before `.vcf`.\n//\n// `.gtf.gz` maps to GtfAdapter rather than GtfTabixAdapter on purpose: this\n// guesser only invents a throwaway track for `text-index --file`, which streams\n// the file start to finish and never opens the .tbi, and GtfAdapter's\n// gtfLocation takes a gzipped path (the reader gunzips on the suffix). A track\n// in a config.json is the other case — `jbrowse add-track` gives a bgzipped GTF\n// a GtfTabixAdapter, which is indexable too, from its own gtfGzLocation.\nconst adapterGuesses = [{\n regex: /\\.vcf\\.b?gz$/i,\n type: 'VcfTabixAdapter'\n}, {\n regex: /\\.gff3?\\.b?gz$/i,\n type: 'Gff3TabixAdapter'\n}, {\n regex: /\\.gtf(\\.b?gz)?$/i,\n type: 'GtfAdapter'\n}, {\n regex: /\\.vcf$/i,\n type: 'VcfAdapter'\n}, {\n regex: /\\.gff3?$/i,\n type: 'Gff3Adapter'\n}];\nfunction guessAdapterFromFileName(filePath) {\n const guess = adapterGuesses.find(g => g.regex.test(filePath));\n if (guess) {\n const name = node_path__WEBPACK_IMPORTED_MODULE_2___default().basename(filePath);\n const protocol = isURL(filePath) ? 'uri' : 'localPath';\n return {\n trackId: name,\n name,\n assemblyNames: [],\n adapter: {\n type: guess.type,\n [_util_ts__WEBPACK_IMPORTED_MODULE_8__.indexableAdapters[guess.type].locationKey]: makeLocation(filePath, protocol)\n }\n };\n } else {\n throw new Error(`Unsupported file type ${filePath}`);\n }\n}\nfunction generateMeta({\n configs,\n attributesToIndex,\n outDir,\n name,\n featureTypesToExclude,\n featureTypesToInclude,\n assemblyNames\n}) {\n node_fs__WEBPACK_IMPORTED_MODULE_1___default().writeFileSync((0,_trixPaths_ts__WEBPACK_IMPORTED_MODULE_7__.trixFilePaths)(outDir, name).meta, JSON.stringify({\n dateCreated: new Date().toISOString(),\n tracks: configs.map(config => {\n const {\n trackId,\n textSearching,\n adapter\n } = config;\n return {\n trackId,\n attributesIndexed: textSearching?.indexingAttributes ?? attributesToIndex,\n excludedTypes: textSearching?.indexingFeatureTypesToExclude ?? featureTypesToExclude,\n includedTypes: textSearching?.indexingFeatureTypesToInclude ?? featureTypesToInclude,\n adapterConf: adapter\n };\n }),\n assemblyNames\n }, null, 2));\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/types/common.ts?\n}");
|
|
131
|
-
|
|
132
|
-
/***/ },
|
|
133
|
-
|
|
134
|
-
/***/ "../../packages/text-indexing-core/src/types/gff3Adapter.ts"
|
|
135
|
-
/*!******************************************************************!*\
|
|
136
|
-
!*** ../../packages/text-indexing-core/src/types/gff3Adapter.ts ***!
|
|
137
|
-
\******************************************************************/
|
|
138
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
139
|
-
|
|
140
|
-
"use strict";
|
|
141
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexGff3: () => (/* binding */ indexGff3)\n/* harmony export */ });\n/* harmony import */ var _util_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.ts */ \"../../packages/text-indexing-core/src/util.ts\");\n/* harmony import */ var _common_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common.ts */ \"../../packages/text-indexing-core/src/types/common.ts\");\n\n\n/**\n * Stream one GFF3 into trix records, one line per indexed feature.\n *\n * Two type gates, and they answer different questions. `featureTypesToExclude`\n * names types this file is known to carry and nobody would search for — it is\n * the right shape when you own the vocabulary, which is why the default is\n * `exon,CDS`. `featureTypesToInclude` names the types worth indexing and drops\n * everything else, which is the only shape that stays correct against a\n * vocabulary someone else controls: an NCBI RefSeq GFF3 draws from 115 feature\n * types, 80 of which are leaf regulatory/repeat/alignment records carrying no\n * name (a `match` labels itself with a bare UUID, a `cDNA_match` with an MD5,\n * every `biological_region` with the literal string \"biological region\"), and a\n * deny list written against the types seen so far leaks the next one NCBI adds.\n * The allow list for that file is ~33 names — gene, pseudogene, and the\n * transcript-level types — and does not grow.\n *\n * Both apply when both are given: include admits, exclude then narrows.\n */\nasync function* indexGff3({\n config,\n attributesToIndex,\n inLocation,\n outDir,\n featureTypesToExclude,\n featureTypesToInclude,\n onStart,\n onUpdate,\n checkAbort\n}) {\n const {\n trackId\n } = config;\n const stream = await (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.getLocalOrRemoteStream)({\n file: inLocation,\n out: outDir,\n onStart,\n onUpdate\n });\n const rl = (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.createReadlineInterface)(stream, inLocation);\n const excludeSet = new Set(featureTypesToExclude);\n // Absent rather than empty, so an empty list means \"no allow list\" and not\n // \"index nothing\" — a caller that reads the list out of a config gets the\n // former when the slot is unset, and silently indexing zero features would\n // look exactly like a successful run.\n const includeSet = featureTypesToInclude?.length ? new Set(featureTypesToInclude) : undefined;\n const encodedTrackId = encodeURIComponent(trackId);\n for await (const line of rl) {\n checkAbort?.();\n if (!line.trim() || line.startsWith('#')) {\n continue;\n } else if (line.startsWith('>')) {\n break;\n }\n const [seq_id,, type, start, end,,,, col9] = line.split('\\t');\n\n // a valid GFF3 feature row has 9 tab-delimited columns; skip malformed or\n // truncated lines that would otherwise make parseAttributes throw on an\n // undefined column 9 (mirrors the guard in the vcf indexer)\n if (seq_id === undefined || type === undefined || start === undefined || end === undefined || col9 === undefined) {\n continue;\n }\n if (!excludeSet.has(type) && (includeSet === undefined || includeSet.has(type))) {\n const col9attrs = (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.parseAttributes)(col9, _util_ts__WEBPACK_IMPORTED_MODULE_0__.decodeURIComponentNoThrow);\n const attrs = attributesToIndex.map(attr => col9attrs[attr]).filter(f => !!f);\n if (attrs.length > 0) {\n const locStr = `${seq_id}:${start}..${end}`;\n const encodedAttrs = attrs.map(a => `\"${encodeURIComponent(a)}\"`);\n const record = `[\"${encodeURIComponent(locStr)}\"|\"${encodedTrackId}\"|${encodedAttrs.join('|')}]`;\n const uniqueAttrs = [...new Set(attrs)];\n yield `${record} ${uniqueAttrs.join(' ')}\\n`;\n }\n }\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/types/gff3Adapter.ts?\n}");
|
|
142
|
-
|
|
143
|
-
/***/ },
|
|
144
|
-
|
|
145
|
-
/***/ "../../packages/text-indexing-core/src/types/gtfAdapter.ts"
|
|
146
|
-
/*!*****************************************************************!*\
|
|
147
|
-
!*** ../../packages/text-indexing-core/src/types/gtfAdapter.ts ***!
|
|
148
|
-
\*****************************************************************/
|
|
149
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
150
|
-
|
|
151
|
-
"use strict";
|
|
152
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexGtf: () => (/* binding */ indexGtf),\n/* harmony export */ parseGtfAttributes: () => (/* binding */ parseGtfAttributes)\n/* harmony export */ });\n/* harmony import */ var _common_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./common.ts */ \"../../packages/text-indexing-core/src/types/common.ts\");\n\n// GFF3-style attribute names have no GTF equivalent, so the shared defaults\n// (`Name`, `ID`, `symbol`) would index nothing. Each requested name also pulls\n// in its GTF spellings, so `jbrowse text-index` works on a GTF out of the box\n// while an explicit `--attributes gene_biotype` still works verbatim.\nconst gtfAttributeAliases = {\n Name: ['gene_name', 'transcript_name'],\n ID: ['gene_id', 'transcript_id'],\n symbol: ['gene_name']\n};\nfunction expandAttributeNames(attributesToIndex) {\n return [...new Set(attributesToIndex.flatMap(a => [a, ...(gtfAttributeAliases[a] ?? [])]))];\n}\n\n/**\n * True when an entry opens a double quote it never closes, meaning the ';' it\n * was split on fell inside the value instead of ending the entry.\n */\nfunction hasUnclosedQuote(entry) {\n const first = entry.indexOf('\"');\n return first !== -1 && !entry.includes('\"', first + 1);\n}\n\n/**\n * Parse the GTF 9th column (`gene_id \"X\"; transcript_id \"Y\";`), mirroring\n * plugins/gtf so the indexed text matches what the track displays: entries are\n * `key value` separated by a space (not `key=value`), values may be quoted, a\n * repeated key expresses multiple values, and a quoted value may contain the\n * ';' the entries are split on (`note \"a; b\"`), so its pieces are rejoined\n * before the value is read.\n */\nfunction parseGtfAttributes(attrString) {\n const attrs = {};\n const entries = attrString.split(';');\n for (let i = 0; i < entries.length; i++) {\n let entry = entries[i];\n while (hasUnclosedQuote(entry) && i + 1 < entries.length) {\n entry += `;${entries[++i]}`;\n }\n const trimmed = entry.trim();\n const sp = trimmed.indexOf(' ');\n if (sp !== -1) {\n const key = trimmed.slice(0, sp);\n const value = trimmed.slice(sp + 1).trim().replaceAll(/^\"|\"$/g, '')\n // a comma separates record ids in the trix .ix format, so it can never\n // survive into an indexed word\n .replaceAll(',', ' ');\n if (value) {\n ;\n (attrs[key] ??= []).push(value);\n }\n }\n }\n return attrs;\n}\n\n// composite map keys join refName + id; a separator that cannot occur in\n// either keeps two loci from colliding\nconst SEP = '\\u0000';\n/**\n * GTF, unlike GFF3, has no gene or transcript rows: a gene exists only as the\n * exon/CDS/UTR rows repeating its `gene_id`. Indexing per row would point every\n * hit at a single exon, so rows are grouped by `gene_id` and `transcript_id`\n * and each group is emitted once spanning all of its rows.\n *\n * Grouping is what keeps one entry per gene rather than one per exon, so\n * `featureTypesToExclude` does not apply here — dropping rows would only\n * truncate the spans.\n *\n * The group map is held until EOF because GTF rows for one locus are not\n * guaranteed contiguous. It is keyed by gene/transcript id, so it stays far\n * smaller than the whole-file parse plugins/gtf already does to display a GTF.\n */\nasync function* indexGtf({\n config,\n attributesToIndex,\n inLocation,\n outDir,\n onStart,\n onUpdate,\n checkAbort\n}) {\n const {\n trackId\n } = config;\n const stream = await (0,_common_ts__WEBPACK_IMPORTED_MODULE_0__.getLocalOrRemoteStream)({\n file: inLocation,\n out: outDir,\n onStart,\n onUpdate\n });\n const rl = (0,_common_ts__WEBPACK_IMPORTED_MODULE_0__.createReadlineInterface)(stream, inLocation);\n const encodedTrackId = encodeURIComponent(trackId);\n const attributeNames = expandAttributeNames(attributesToIndex);\n const groups = new Map();\n function accumulate(key, refName, start, end, values) {\n if (values.length > 0) {\n const group = groups.get(key);\n if (group) {\n group.start = Math.min(group.start, start);\n group.end = Math.max(group.end, end);\n for (const value of values) {\n group.attrs.add(value);\n }\n } else {\n groups.set(key, {\n refName,\n start,\n end,\n attrs: new Set(values)\n });\n }\n }\n }\n for await (const line of rl) {\n checkAbort?.();\n if (line.trim() && !line.startsWith('#')) {\n const [seq_id,,, start, end,,,, col9] = line.split('\\t');\n if (seq_id !== undefined && start !== undefined && end !== undefined && col9 !== undefined) {\n const parsed = parseGtfAttributes(col9);\n const geneId = parsed.gene_id?.[0];\n const transcriptId = parsed.transcript_id?.[0];\n const s = Number(start);\n const e = Number(end);\n\n // `gene_*` names describe the gene, everything else the transcript, so\n // a gene entry is labeled by its gene_name rather than by whichever\n // transcript happened to come first\n const geneValues = [];\n const otherValues = [];\n for (const name of attributeNames) {\n for (const value of parsed[name] ?? []) {\n ;\n (name.startsWith('gene') ? geneValues : otherValues).push(value);\n }\n }\n if (transcriptId === undefined) {\n const values = [...geneValues, ...otherValues];\n // no id to group on: merge rows that carry identical values, which\n // still collapses the repeated rows of one feature into one entry\n const key = geneId ?? values.join(SEP);\n accumulate(`gene${SEP}${seq_id}${SEP}${key}`, seq_id, s, e, values);\n } else {\n accumulate(`tx${SEP}${seq_id}${SEP}${transcriptId}`, seq_id, s, e, otherValues);\n if (geneId !== undefined) {\n accumulate(`gene${SEP}${seq_id}${SEP}${geneId}`, seq_id, s, e, geneValues);\n }\n }\n }\n }\n }\n for (const {\n refName,\n start,\n end,\n attrs\n } of groups.values()) {\n const locStr = `${refName}:${start}..${end}`;\n const encodedAttrs = [...attrs].map(a => `\"${encodeURIComponent(a)}\"`);\n const record = `[\"${encodeURIComponent(locStr)}\"|\"${encodedTrackId}\"|${encodedAttrs.join('|')}]`;\n yield `${record} ${[...attrs].join(' ')}\\n`;\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/types/gtfAdapter.ts?\n}");
|
|
153
|
-
|
|
154
|
-
/***/ },
|
|
155
|
-
|
|
156
|
-
/***/ "../../packages/text-indexing-core/src/types/vcfAdapter.ts"
|
|
157
|
-
/*!*****************************************************************!*\
|
|
158
|
-
!*** ../../packages/text-indexing-core/src/types/vcfAdapter.ts ***!
|
|
159
|
-
\*****************************************************************/
|
|
160
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
161
|
-
|
|
162
|
-
"use strict";
|
|
163
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexVcf: () => (/* binding */ indexVcf)\n/* harmony export */ });\n/* harmony import */ var _util_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util.ts */ \"../../packages/text-indexing-core/src/util.ts\");\n/* harmony import */ var _common_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./common.ts */ \"../../packages/text-indexing-core/src/types/common.ts\");\n\n\nasync function* indexVcf({\n config,\n attributesToIndex,\n inLocation,\n outDir,\n onStart,\n onUpdate,\n checkAbort\n}) {\n const {\n trackId\n } = config;\n const stream = await (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.getLocalOrRemoteStream)({\n file: inLocation,\n out: outDir,\n onStart,\n onUpdate\n });\n const rl = (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.createReadlineInterface)(stream, inLocation);\n const encodedTrackId = encodeURIComponent(trackId);\n for await (const line of rl) {\n checkAbort?.();\n if (!line.trim() || line.startsWith('#')) {\n continue;\n }\n const [ref, pos, id,,,,, info] = line.split('\\t');\n\n // a valid VCF data row has at least 8 tab-delimited columns; skip blank or\n // malformed/short lines that would otherwise emit garbage records or throw\n if (ref === undefined || pos === undefined || id === undefined || info === undefined) {\n continue;\n }\n const fields = (0,_common_ts__WEBPACK_IMPORTED_MODULE_1__.parseAttributes)(info, _util_ts__WEBPACK_IMPORTED_MODULE_0__.decodeURIComponentNoThrow);\n // an empty `END=` parses to 0 via Number(''), which is finite; require a\n // non-empty value before trusting it, else fall back to pos+1\n const endNum = Number(fields.END);\n const end = fields.END && Number.isFinite(endNum) ? endNum : Number(pos) + 1;\n const locStr = `${ref}:${pos}..${end}`;\n const encodedLocStr = encodeURIComponent(locStr);\n const infoAttrs = attributesToIndex.map(attr => fields[attr]).filter(f => !!f);\n\n // VCF separates multiple IDs with ';' (matching @gmod/vcf), not ','. '.' is\n // the no-id sentinel; such a row is still worth indexing by its INFO\n // attributes, it just has no id to search by\n const variantIds = id === '.' ? [] : id.split(';').filter(Boolean);\n // one record per id so each is separately searchable, plus an id-less\n // record when the row carries only attributes\n const attrGroups = variantIds.length ? variantIds.map(variantId => [variantId, ...infoAttrs]) : [infoAttrs];\n for (const attrs of attrGroups) {\n if (attrs.length > 0) {\n // attributes go in the record so the adapter can display them, and in\n // the trailing word list so trix indexes them as searchable terms\n const encodedAttrs = attrs.map(a => `\"${encodeURIComponent(a)}\"`);\n const record = `[\"${encodedLocStr}\"|\"${encodedTrackId}\"|${encodedAttrs.join('|')}]`;\n yield `${record} ${[...new Set(attrs)].join(' ')}\\n`;\n }\n }\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/types/vcfAdapter.ts?\n}");
|
|
164
|
-
|
|
165
|
-
/***/ },
|
|
166
|
-
|
|
167
|
-
/***/ "../../packages/text-indexing-core/src/util.ts"
|
|
168
|
-
/*!*****************************************************!*\
|
|
169
|
-
!*** ../../packages/text-indexing-core/src/util.ts ***!
|
|
170
|
-
\*****************************************************/
|
|
171
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
172
|
-
|
|
173
|
-
"use strict";
|
|
174
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ decodeURIComponentNoThrow: () => (/* binding */ decodeURIComponentNoThrow),\n/* harmony export */ defaultAttributesToIndex: () => (/* binding */ defaultAttributesToIndex),\n/* harmony export */ defaultFeatureTypesToExclude: () => (/* binding */ defaultFeatureTypesToExclude),\n/* harmony export */ indexableAdapters: () => (/* binding */ indexableAdapters),\n/* harmony export */ isSupportedIndexingAdapter: () => (/* binding */ isSupportedIndexingAdapter)\n/* harmony export */ });\nconst defaultAttributesToIndex = ['Name', 'ID', 'symbol'];\nconst defaultFeatureTypesToExclude = ['exon', 'CDS'];\n// single source of truth for what `jbrowse text-index` can index: which adapter\n// types, where each keeps its file location, and which line parser to use.\n// Everything else (the adapter dispatch, the CLI's supported() gate, the\n// filename guesser) derives from this table.\nconst indexableAdapters = {\n Gff3Adapter: {\n locationKey: 'gffLocation',\n format: 'gff3'\n },\n Gff3TabixAdapter: {\n locationKey: 'gffGzLocation',\n format: 'gff3'\n },\n GtfAdapter: {\n locationKey: 'gtfLocation',\n format: 'gtf'\n },\n GtfTabixAdapter: {\n locationKey: 'gtfGzLocation',\n format: 'gtf'\n },\n VcfAdapter: {\n locationKey: 'vcfLocation',\n format: 'vcf'\n },\n VcfTabixAdapter: {\n locationKey: 'vcfGzLocation',\n format: 'vcf'\n }\n};\nfunction isSupportedIndexingAdapter(type = '') {\n return type in indexableAdapters;\n}\nfunction decodeURIComponentNoThrow(uri) {\n try {\n return decodeURIComponent(uri);\n } catch {\n return uri;\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../packages/text-indexing-core/src/util.ts?\n}");
|
|
175
|
-
|
|
176
|
-
/***/ },
|
|
177
|
-
|
|
178
|
-
/***/ "./src/bin.ts"
|
|
179
|
-
/*!********************!*\
|
|
180
|
-
!*** ./src/bin.ts ***!
|
|
181
|
-
\********************/
|
|
182
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
183
|
-
|
|
184
|
-
"use strict";
|
|
185
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _index_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index.ts */ \"./src/index.ts\");\n//#!/usr/bin/env node\n\n(0,_index_ts__WEBPACK_IMPORTED_MODULE_0__.main)(process.argv.slice(2)).catch(e => {\n console.error(e);\n process.exitCode = 1;\n});\n\n//# sourceURL=webpack://@jbrowse/cli/./src/bin.ts?\n}");
|
|
186
|
-
|
|
187
|
-
/***/ },
|
|
188
|
-
|
|
189
|
-
/***/ "./src/cliFetch.ts"
|
|
190
|
-
/*!*************************!*\
|
|
191
|
-
!*** ./src/cliFetch.ts ***!
|
|
192
|
-
\*************************/
|
|
193
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
194
|
-
|
|
195
|
-
"use strict";
|
|
196
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ cliFetch)\n/* harmony export */ });\n// Wrapper around fetch that allows tests to mock API calls. All modules in\n// jbrowse-cli must use this instead of the global fetch function. See\n// CLAUDE.md for details.\nfunction cliFetch(url, options = {}) {\n return fetch(url, options);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/cliFetch.ts?\n}");
|
|
197
|
-
|
|
198
|
-
/***/ },
|
|
199
|
-
|
|
200
|
-
/***/ "./src/commands/add-assembly/index.ts"
|
|
201
|
-
/*!********************************************!*\
|
|
202
|
-
!*** ./src/commands/add-assembly/index.ts ***!
|
|
203
|
-
\********************************************/
|
|
204
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
205
|
-
|
|
206
|
-
"use strict";
|
|
207
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _add_track_utils_file_operations_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../add-track-utils/file-operations.ts */ \"./src/commands/add-track-utils/file-operations.ts\");\n/* harmony import */ var _add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../add-track-utils/validators.ts */ \"./src/commands/add-track-utils/validators.ts\");\n/* harmony import */ var _shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../shared/config-operations.ts */ \"./src/commands/shared/config-operations.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils.ts */ \"./src/commands/add-assembly/utils.ts\");\n\n\n\n\n\n\n\nasync function run(args) {\n const options = {\n type: {\n type: 'string',\n short: 't',\n description: `type of sequence, by default inferred from sequence file\\n\\nindexedFasta - An index FASTA (e.g. .fa or .fasta) file; can optionally specify --faiLocation\\n\\nbgzipFasta - A block-gzipped and indexed FASTA (e.g. .fa.gz or .fasta.gz) file; can optionally specify --faiLocation and/or --gziLocation\\n\\ntwoBit - A twoBit (e.g. .2bit) file\\n\\nchromSizes - A chromosome sizes (e.g. .chrom.sizes) file\\n\\ncustom - Either a JSON file location or inline JSON that defines a custom sequence adapter; must provide --name if using inline JSON`,\n choices: ['indexedFasta', 'bgzipFasta', 'twoBit', 'chromSizes', 'custom']\n },\n name: {\n type: 'string',\n short: 'n',\n description: 'Name of the assembly; if not specified, will be guessed using the sequence file name'\n },\n alias: {\n type: 'string',\n short: 'a',\n description: 'An alias for the assembly name (e.g. \"hg38\" if the name of the assembly is \"GRCh38\"); can be specified multiple times',\n multiple: true\n },\n displayName: {\n type: 'string',\n description: 'The display name to specify for the assembly, e.g. \"Homo sapiens (hg38)\" while the name can be a shorter identifier like \"hg38\"'\n },\n faiLocation: {\n type: 'string',\n description: '[default: <fastaLocation>.fai] FASTA index file or URL'\n },\n gziLocation: {\n type: 'string',\n description: '[default: <fastaLocation>.gzi] FASTA gzip index file or URL'\n },\n refNameAliases: {\n type: 'string',\n description: 'Reference sequence name aliases file or URL; assumed to be a tab-separated aliases file unless --refNameAliasesType is specified'\n },\n refNameAliasesType: {\n type: 'string',\n description: 'Type of aliases defined by --refNameAliases; if \"custom\", --refNameAliases is either a JSON file location or inline JSON that defines a custom sequence adapter',\n choices: ['aliases', 'custom']\n },\n refNameColors: {\n type: 'string',\n description: 'A comma-separated list of color strings for the reference sequence names; will cycle through colors if there are fewer colors than sequences'\n },\n target: {\n type: 'string',\n description: 'path to config file in JB2 installation directory to write out to. Creates ./config.json if nonexistent'\n },\n out: {\n type: 'string',\n description: 'synonym for target'\n },\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Display help for command'\n },\n load: {\n type: 'string',\n short: 'l',\n description: 'Required flag when using a local file. Choose how to manage the data directory. Copy, symlink, or move the data directory to the JBrowse directory. Or use inPlace to modify the config without doing any file operations',\n choices: ['copy', 'symlink', 'move', 'inPlace']\n },\n force: {\n type: 'boolean',\n short: 'f',\n description: 'Overwrite existing assembly and skip file existence checks'\n },\n config: {\n type: 'string',\n description: 'Any extra config settings to add to the assembly'\n }\n };\n const {\n positionals,\n values: runFlags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_1__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Add an assembly to a JBrowse 2 configuration';\n const usage = 'jbrowse add-assembly <sequence> [options]';\n const notes = '--config takes inline JSON (not a file path) that is merged into the ' + 'generated assembly config, so you can set fields the dedicated flags do ' + 'not cover. A \"sequence\" object in it is merged into the generated ' + 'ReferenceSequenceTrack rather than replacing it, e.g. --config ' + '\\'{\"sequence\":{\"formatAbout\":{\"hideUris\":true}}}\\' hides file URIs in the ' + \"assembly's About dialog.\";\n const examples = ['# add assembly to installation in current directory. assumes .fai file also exists, and copies GRCh38.fa and GRCh38.fa.fai to current directory', '$ jbrowse add-assembly GRCh38.fa --load copy', '', '# add assembly to a specific jb2 installation path using --out, and copies the .fa and .fa.fai file to /path/to/jb2', '$ jbrowse add-assembly GRCh38.fa --out /path/to/jb2/ --load copy', '', '# force indexedFasta for add-assembly without relying on file extension', '$ jbrowse add-assembly GRCh38.xyz --type indexedFasta --load copy', '', '# add displayName for an assembly', '$ jbrowse add-assembly myFile.fa.gz --name hg38 --displayName \"Homo sapiens (hg38)\"', '', '# use chrom.sizes file for assembly instead of a fasta file', '$ jbrowse add-assembly GRCh38.chrom.sizes --load inPlace', '', '# add assembly from preconfigured json file, expert option', '$ jbrowse add-assembly GRCh38.config.json --load copy', '', '# add assembly from a 2bit file, also note pointing direct to a URL so no --load flag needed', '$ jbrowse add-assembly https://example.com/data/sample.2bit', '', '# add a bgzip indexed fasta inferred by fa.gz extension. assumes .fa.gz.gzi and .fa.gz.fai files also exists', '$ jbrowse add-assembly myfile.fa.gz --load copy', '', '# hide file URIs in the assembly About dialog', '$ jbrowse add-assembly GRCh38.fa --load copy --config \\'{\"sequence\":{\"formatAbout\":{\"hideUris\":true}}}\\''];\n if (runFlags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printHelp)({\n description,\n examples,\n notes,\n usage,\n options\n });\n return;\n }\n ;(0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_4__.validateLoadOption)(runFlags.load);\n const type = (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.parseSequenceType)(runFlags.type);\n const argsSequence = positionals[0];\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.requirePositional)(argsSequence, 'sequence', usage);\n const output = runFlags.target || runFlags.out || '.';\n const flags = {\n ...runFlags,\n type\n };\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.debug)(`Sequence location is: ${argsSequence}`);\n const target = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.resolveTargetPath)(output);\n const {\n assembly: baseAssembly,\n filesToLoad: sequenceFiles\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.getAssembly)({\n runFlags: flags,\n argsSequence\n });\n const {\n assembly,\n filesToLoad: aliasFiles\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.enhanceAssembly)(baseAssembly, flags);\n const configContents = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.loadOrCreateConfig)(target);\n const {\n config: updatedConfig,\n wasOverwritten\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_6__.addAssemblyToConfig)({\n config: configContents,\n assembly,\n runFlags: flags\n });\n await (0,_add_track_utils_file_operations_ts__WEBPACK_IMPORTED_MODULE_3__.loadFiles)({\n files: [...sequenceFiles, ...aliasFiles],\n destDir: node_path__WEBPACK_IMPORTED_MODULE_0___default().dirname(target),\n mode: flags.load,\n force: flags.force\n });\n await (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_5__.saveConfigAndReport)({\n config: updatedConfig,\n target,\n itemType: 'assembly',\n itemName: assembly.name,\n itemId: assembly.name,\n wasOverwritten\n });\n console.log(`\\nNext, add tracks to this assembly (replace with your data file):\\n` + ` jbrowse add-track myfile.bam -a ${assembly.name} --load copy`);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-assembly/index.ts?\n}");
|
|
208
|
-
|
|
209
|
-
/***/ },
|
|
210
|
-
|
|
211
|
-
/***/ "./src/commands/add-assembly/utils.ts"
|
|
212
|
-
/*!********************************************!*\
|
|
213
|
-
!*** ./src/commands/add-assembly/utils.ts ***!
|
|
214
|
-
\********************************************/
|
|
215
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
216
|
-
|
|
217
|
-
"use strict";
|
|
218
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addAssemblyToConfig: () => (/* binding */ addAssemblyToConfig),\n/* harmony export */ createDefaultConfig: () => (/* binding */ createDefaultConfig),\n/* harmony export */ enhanceAssembly: () => (/* binding */ enhanceAssembly),\n/* harmony export */ getAssembly: () => (/* binding */ getAssembly),\n/* harmony export */ loadOrCreateConfig: () => (/* binding */ loadOrCreateConfig),\n/* harmony export */ parseSequenceType: () => (/* binding */ parseSequenceType),\n/* harmony export */ resolveTargetPath: () => (/* binding */ resolveTargetPath)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../add-track-utils/track-config.ts */ \"./src/commands/add-track-utils/track-config.ts\");\n/* harmony import */ var _add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../add-track-utils/validators.ts */ \"./src/commands/add-track-utils/validators.ts\");\n/* harmony import */ var _shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../shared/config-operations.ts */ \"./src/commands/shared/config-operations.ts\");\n\n\n\n\n\n\n\nconst sequenceTypes = new Set(['indexedFasta', 'bgzipFasta', 'twoBit', 'chromSizes', 'custom']);\nfunction isSequenceType(t) {\n return sequenceTypes.has(t);\n}\n\n// parseArgs does not enforce the `choices` declared on --type, so an\n// unrecognized value would otherwise be silently dropped and the type guessed\n// from the file extension, masking a user typo. Returning the narrowed value\n// (rather than validating and leaving the caller to re-test the same string)\n// keeps the check and the narrowing in one place.\nfunction parseSequenceType(type) {\n if (type === undefined) {\n return undefined;\n }\n if (!isSequenceType(type)) {\n throw new Error(`--type must be one of: ${[...sequenceTypes].join(', ')}`);\n }\n return type;\n}\nfunction isValidJSON(string) {\n try {\n JSON.parse(string);\n return true;\n } catch (error) {\n return false;\n }\n}\n\n// recognized FASTA extensions, shared by sequence-type guessing and basename\n// stripping so the list lives in one place\nconst fastaExts = 'fa|fna|fasta|mfa';\nconst fastaRegex = new RegExp(`\\\\.(${fastaExts})$`, 'i');\nconst bgzipFastaRegex = new RegExp(`\\\\.(${fastaExts})\\\\.gz$`, 'i');\nconst fastaExtRegex = new RegExp(`\\\\.(${fastaExts})(\\\\.gz)?$`, 'i');\nfunction basenameWithoutFastaExt(p) {\n return node_path__WEBPACK_IMPORTED_MODULE_1___default().basename(p).replace(fastaExtRegex, '');\n}\n\n// extension → sequence type, tried in order. The plain-fasta pattern is anchored\n// at the end so it cannot claim a .fa.gz out from under the bgzip one.\nconst seqTypeByExtension = [[fastaRegex, 'indexedFasta'], [bgzipFastaRegex, 'bgzipFasta'], [/\\.2bit$/i, 'twoBit'], [/\\.chrom\\.sizes$/i, 'chromSizes'], [/\\.json$/i, 'custom']];\nfunction guessSequenceType(sequence) {\n const byExtension = seqTypeByExtension.find(([regex]) => regex.test(sequence))?.[1];\n if (byExtension) {\n return byExtension;\n }\n // a custom adapter can also be given as inline JSON, which has no extension\n if (isValidJSON(sequence)) {\n return 'custom';\n }\n throw new Error('Could not determine sequence type automatically, add --type to specify it');\n}\n\n// a sidecar file sits next to the sequence at `${sequence}${suffix}`, unless\n// the matching --faiLocation/--gziLocation flag overrides its path\n\n// declarative layout for each non-custom sequence type: the adapter type + its\n// primary location field, any sidecar index files, and how the default assembly\n// name is derived from the sequence filename. Keeping the adapter and its files\n// in one spec means they cannot drift.\n\nconst seqSpecs = {\n indexedFasta: {\n adapterType: 'IndexedFastaAdapter',\n locField: 'fastaLocation',\n sidecars: [{\n field: 'faiLocation',\n suffix: '.fai'\n }],\n defaultName: basenameWithoutFastaExt\n },\n bgzipFasta: {\n adapterType: 'BgzipFastaAdapter',\n locField: 'fastaLocation',\n sidecars: [{\n field: 'faiLocation',\n suffix: '.fai'\n }, {\n field: 'gziLocation',\n suffix: '.gzi'\n }],\n defaultName: basenameWithoutFastaExt\n },\n twoBit: {\n adapterType: 'TwoBitAdapter',\n locField: 'twoBitLocation',\n sidecars: [],\n defaultName: p => node_path__WEBPACK_IMPORTED_MODULE_1___default().basename(p, '.2bit')\n },\n chromSizes: {\n adapterType: 'ChromSizesAdapter',\n locField: 'chromSizesLocation',\n sidecars: [],\n defaultName: p => node_path__WEBPACK_IMPORTED_MODULE_1___default().basename(p, '.chrom.sizes')\n }\n};\nasync function customSequenceAdapter(argsSequence, name) {\n const adapter = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.readInlineOrFileJson)(argsSequence);\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(`Custom adapter: ${JSON.stringify(adapter)}`);\n if (!name) {\n // neither inline JSON nor stdin carries a filename to name the assembly\n // after, and \"-\" is not a name\n if (isValidJSON(argsSequence) || argsSequence === _utils_ts__WEBPACK_IMPORTED_MODULE_3__.STDIN_ARG) {\n throw new Error('Must provide --name when using custom inline JSON sequence');\n }\n name = node_path__WEBPACK_IMPORTED_MODULE_1___default().basename(argsSequence, '.json');\n }\n if (!adapter.type) {\n throw new Error(`No \"type\" specified in sequence adapter \"${JSON.stringify(adapter)}\"`);\n }\n return {\n adapter,\n name\n };\n}\nasync function getAssembly({\n runFlags,\n argsSequence\n}) {\n ;(0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_5__.validateLoadAndLocation)(argsSequence, runFlags.load);\n const type = runFlags.type ?? guessSequenceType(argsSequence);\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(runFlags.type ? `Type is: ${type}` : `No type specified, guessed: ${type}`);\n const uri = p => ({\n uri: (0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_4__.mapLocationForFiles)(p, runFlags.load),\n locationType: 'UriLocation'\n });\n if (type === 'custom') {\n const {\n adapter,\n name\n } = await customSequenceAdapter(argsSequence, runFlags.name);\n return {\n assembly: {\n name,\n sequence: makeSequence(name, adapter)\n },\n filesToLoad: []\n };\n }\n const spec = seqSpecs[type];\n const sidecars = spec.sidecars.map(s => ({\n field: s.field,\n path: runFlags[s.field] ?? `${argsSequence}${s.suffix}`\n }));\n const name = runFlags.name || spec.defaultName(argsSequence);\n const adapter = {\n type: spec.adapterType,\n [spec.locField]: uri(argsSequence),\n ...Object.fromEntries(sidecars.map(s => [s.field, uri(s.path)]))\n };\n return {\n assembly: {\n name,\n sequence: makeSequence(name, adapter)\n },\n filesToLoad: [argsSequence, ...sidecars.map(s => s.path)]\n };\n}\nfunction makeSequence(name, adapter) {\n return {\n type: 'ReferenceSequenceTrack',\n trackId: `${name}-ReferenceSequenceTrack`,\n adapter\n };\n}\nasync function resolveTargetPath(output) {\n const stat = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.ignoreNotFound)(node_fs__WEBPACK_IMPORTED_MODULE_0___default().promises.stat(output));\n if (!stat) {\n const dir = output.endsWith('.json') ? node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname(output) : output;\n await node_fs__WEBPACK_IMPORTED_MODULE_0___default().promises.mkdir(dir, {\n recursive: true\n });\n }\n const finalStat = stat ?? (await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.ignoreNotFound)(node_fs__WEBPACK_IMPORTED_MODULE_0___default().promises.stat(output)));\n return finalStat?.isDirectory() ? node_path__WEBPACK_IMPORTED_MODULE_1___default().join(output, 'config.json') : output;\n}\nasync function resolveRefNameAliasAdapter(refNameAliases, runFlags) {\n if (runFlags.refNameAliasesType === 'custom') {\n const config = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.readInlineOrFileJson)(refNameAliases);\n if (!config.type) {\n throw new Error(`No \"type\" specified in refNameAliases adapter \"${JSON.stringify(config)}\"`);\n }\n ;(0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(`Adding custom refNameAliases config: ${JSON.stringify(config)}`);\n return config;\n }\n // rewriting the path to a bare basename is only right when a load mode is\n // going to copy the file next to config.json. With no --load — which a URL\n // sequence forces, since --load with a URL is an error — the file stays where\n // the user pointed at it, rather than the config naming a basename that\n // nothing ever put there\n const location = (0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_4__.mapLocationForFiles)(refNameAliases, runFlags.load ?? 'inPlace');\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(`refName aliases file location: ${location}`);\n return {\n type: 'RefNameAliasAdapter',\n location: {\n uri: location,\n locationType: 'UriLocation'\n }\n };\n}\n\n// --config is merged shallowly, except for `sequence`: the generated\n// ReferenceSequenceTrack already holds the adapter built from the sequence\n// file, so a `sequence` hunk layers onto it (e.g. formatAbout) rather than\n// replacing it and dropping the adapter\nfunction applyExtraConfig(assembly, config) {\n if (config === undefined) {\n return assembly;\n }\n const {\n sequence,\n name,\n ...rest\n } = (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_5__.parseConfigFlag)(config);\n if (sequence !== undefined && !(0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.isRecord)(sequence)) {\n throw new Error('--config \"sequence\" must be an object');\n }\n if (name !== undefined) {\n throw new Error('use --name rather than \"name\" in --config');\n }\n return {\n ...assembly,\n ...rest,\n name: assembly.name,\n sequence: {\n ...assembly.sequence,\n ...sequence\n }\n };\n}\nasync function enhanceAssembly(assembly, runFlags) {\n const {\n refNameAliases,\n refNameAliasesType\n } = runFlags;\n\n // a non-custom refNameAliases points at a local aliases file; under a --load\n // mode its location is rewritten to a bare basename, so the file itself must\n // be loaded into the config dir alongside the sequence. Custom aliases are\n // embedded inline (no file), and URLs are referenced in place.\n const filesToLoad = refNameAliases && refNameAliasesType !== 'custom' && !(0,_types_common_ts__WEBPACK_IMPORTED_MODULE_2__.isURL)(refNameAliases) ? [refNameAliases] : [];\n\n // typed flags layer over --config, so the most specific flag a user reaches\n // for wins\n return {\n assembly: {\n ...applyExtraConfig(assembly, runFlags.config),\n ...(runFlags.alias?.length && {\n aliases: runFlags.alias\n }),\n ...(runFlags.refNameColors && {\n refNameColors: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.parseCommaSeparatedString)(runFlags.refNameColors)\n }),\n ...(runFlags.displayName && {\n displayName: runFlags.displayName\n }),\n ...(refNameAliases && {\n refNameAliases: {\n adapter: await resolveRefNameAliasAdapter(refNameAliases, runFlags)\n }\n })\n },\n filesToLoad\n };\n}\nfunction createDefaultConfig() {\n return {\n assemblies: [],\n configuration: {},\n connections: [],\n defaultSession: {\n name: 'New Session'\n },\n tracks: []\n };\n}\nasync function loadOrCreateConfig(target) {\n const defaultConfig = createDefaultConfig();\n if (node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(target)) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(`Found existing config file ${target}`);\n return {\n ...defaultConfig,\n ...(await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.readJsonFile)(target))\n };\n } else {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.debug)(`Creating config file ${target}`);\n return {\n ...defaultConfig\n };\n }\n}\nasync function addAssemblyToConfig({\n config,\n assembly,\n runFlags\n}) {\n const {\n updatedItems,\n wasOverwritten\n } = (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_6__.findAndUpdateOrAdd)({\n items: config.assemblies ?? [],\n newItem: assembly,\n idField: 'name',\n getId: item => item.name,\n force: runFlags.force ?? false,\n itemType: 'assembly'\n });\n return {\n config: {\n ...config,\n assemblies: updatedItems\n },\n wasOverwritten\n };\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-assembly/utils.ts?\n}");
|
|
219
|
-
|
|
220
|
-
/***/ },
|
|
221
|
-
|
|
222
|
-
/***/ "./src/commands/add-connection.ts"
|
|
223
|
-
/*!****************************************!*\
|
|
224
|
-
!*** ./src/commands/add-connection.ts ***!
|
|
225
|
-
\****************************************/
|
|
226
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
227
|
-
|
|
228
|
-
"use strict";
|
|
229
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./add-track-utils/validators.ts */ \"./src/commands/add-track-utils/validators.ts\");\n/* harmony import */ var _shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shared/config-operations.ts */ \"./src/commands/shared/config-operations.ts\");\n\n\n\n\nfunction resolveURL(location) {\n try {\n return new URL(location);\n } catch (error) {\n throw new Error(`The location ${location} provided is not a valid URL`, {\n cause: error\n });\n }\n}\n\n// a hub.txt filename and a jbrowse/data path are the two conventions we can\n// recognize. Both are read off the URL's path rather than the whole href, so a\n// query string can't fake one and a host that happens to be named hub.txt can't\n// be mistaken for a hub file.\nfunction determineConnectionType(url) {\n if (url.pathname.endsWith('/hub.txt')) {\n return 'UCSCTrackHubConnection';\n }\n if (url.pathname.includes('jbrowse/data')) {\n return 'JBrowse1Connection';\n }\n return 'custom';\n}\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n type: {\n type: 'string',\n short: 't',\n description: 'Type of connection (e.g. JBrowse1Connection, UCSCTrackHubConnection, custom)'\n },\n assemblyNames: {\n type: 'string',\n short: 'a',\n description: 'For UCSC: optional comma separated list of assembly names to filter. For JBrowse1: a single assembly name'\n },\n config: {\n type: 'string',\n short: 'c',\n description: 'Extra config settings to add to connection in JSON object format'\n },\n connectionId: {\n type: 'string',\n description: 'Id for the connection that must be unique to JBrowse'\n },\n name: {\n type: 'string',\n short: 'n',\n description: 'Name of the connection. Defaults to connectionId if not provided'\n },\n target: {\n type: 'string',\n description: 'Path to config file in JB2 installation directory to write out to'\n },\n out: {\n type: 'string',\n description: 'Synonym for target'\n },\n force: {\n type: 'boolean',\n short: 'f',\n description: 'Overwrite existing connection if one with the same id exists'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Add a connection to a JBrowse 2 configuration';\n const usage = 'jbrowse add-connection <connectionUrlOrPath> [options]';\n const examples = ['# add a JBrowse 1 data directory connection (type inferred from the jbrowse/data path)', '$ jbrowse add-connection https://mysite.com/jbrowse/data/ -a hg19', '', '# force the JBrowse1Connection type for a non-standard data folder path', '$ jbrowse add-connection https://mysite.com/jbrowse/custom_data_folder/ --type JBrowse1Connection -a hg38', '', '# add a UCSC track hub (type inferred from the hub.txt filename)', '$ jbrowse add-connection https://mysite.com/path/to/hub.txt', '', '# force the UCSCTrackHubConnection type for a hub file not named hub.txt', '$ jbrowse add-connection https://mysite.com/path/to/custom_hub_name.txt --type UCSCTrackHubConnection', '', '# add a custom connection type with extra config', `$ jbrowse add-connection https://mysite.com/path/to/custom --type custom --config '{\"uri\":{\"url\":\"https://mysite.com/path/to/custom\"}, \"locationType\": \"UriLocation\"}' -a hg19`, '', '# set an explicit id/name and write to a specific config file', '$ jbrowse add-connection https://mysite.com/path/to/hub.txt --connectionId newId --name newName --target /path/to/jb2/installation/config.json'];\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n usage,\n options\n });\n return;\n }\n const connectionUrlOrPath = positionals[0];\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.requirePositional)(connectionUrlOrPath, 'connectionUrlOrPath', usage);\n const {\n assemblyNames,\n type,\n name,\n config,\n connectionId,\n force\n } = flags;\n const configObj = config ? (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_2__.parseConfigFlag)(config) : undefined;\n const target = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.resolveConfigPath)(flags.target, flags.out);\n const url = resolveURL(connectionUrlOrPath);\n const configContents = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readConfigFile)(target);\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.debug)(`Using config file ${target}`);\n if (!configContents.assemblies?.length) {\n throw new Error('No assemblies found. Please add one before adding connections');\n }\n const configType = type || determineConnectionType(url);\n const id = connectionId || [configType, assemblyNames, Date.now()].filter(Boolean).join('-');\n\n // each known connection type stores the URL under its own location slot; a\n // custom type carries no location, so its --config must supply one\n const locationField = {\n UCSCTrackHubConnection: 'hubTxtLocation',\n JBrowse1Connection: 'dataDirLocation'\n }[configType];\n\n // a JBrowse 1 connection serves exactly one assembly, so it falls back to the\n // config's first (the assemblies list is known non-empty by here)\n const defaultAssemblyNames = configType === 'JBrowse1Connection' ? [configContents.assemblies[0].name] : undefined;\n const connectionConfig = {\n type: configType,\n name: name || id,\n ...(locationField && {\n [locationField]: {\n uri: url.href,\n locationType: 'UriLocation'\n }\n }),\n connectionId: id,\n assemblyNames: assemblyNames ? (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.parseCommaSeparatedString)(assemblyNames) : defaultAssemblyNames,\n ...configObj\n };\n const {\n updatedItems: connections,\n wasOverwritten\n } = (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_3__.findAndUpdateOrAdd)({\n items: configContents.connections ?? [],\n newItem: connectionConfig,\n idField: 'connectionId',\n getId: item => item.connectionId,\n force: force ?? false,\n itemType: 'connection'\n });\n await (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_3__.saveConfigAndReport)({\n config: {\n ...configContents,\n connections\n },\n target,\n itemType: 'connection',\n itemName: name || id,\n itemId: id,\n wasOverwritten\n });\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-connection.ts?\n}");
|
|
230
|
-
|
|
231
|
-
/***/ },
|
|
232
|
-
|
|
233
|
-
/***/ "./src/commands/add-track-json.ts"
|
|
234
|
-
/*!****************************************!*\
|
|
235
|
-
!*** ./src/commands/add-track-json.ts ***!
|
|
236
|
-
\****************************************/
|
|
237
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
238
|
-
|
|
239
|
-
"use strict";
|
|
240
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/config-operations.ts */ \"./src/commands/shared/config-operations.ts\");\n\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n update: {\n type: 'boolean',\n short: 'u',\n description: 'Update the contents of an existing track, matched based on trackId'\n },\n target: {\n type: 'string',\n description: 'Path to config file in JB2 installation directory to write out to'\n },\n out: {\n type: 'string',\n description: 'Synonym for target'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Add a track configuration directly from a JSON hunk to the JBrowse 2 configuration';\n const usage = 'jbrowse add-track-json <track> [options]';\n const notes = 'The track argument is a JSON file, inline JSON, or \"-\" to read the JSON ' + 'from stdin, so a track config can be generated and piped straight in.';\n const examples = ['# add a track from a JSON file', '$ jbrowse add-track-json track.json', '', '# update an existing track (matched by trackId) with new JSON contents', '$ jbrowse add-track-json track.json --update', '', '# pass the track config inline instead of via a file', `$ jbrowse add-track-json '{\"type\":\"FeatureTrack\",\"trackId\":\"genes\",\"assemblyNames\":[\"hg38\"],\"adapter\":{\"type\":\"Gff3TabixAdapter\",\"gffGzLocation\":{\"uri\":\"genes.gff.gz\"}}}'`, '', '# pipe the track config in from another program', `$ jq '.tracks[0]' other/config.json | jbrowse add-track-json -`, '', '# write to a config.json in a specific installation directory', '$ jbrowse add-track-json track.json --out /path/to/jb2/'];\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n notes,\n usage,\n options\n });\n return;\n }\n const track = positionals[0];\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.requirePositional)(track, 'track', usage);\n const target = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.resolveConfigPath)(flags.target, flags.out);\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.debug)(`Sequence location is: ${track}`);\n const {\n update\n } = flags;\n const config = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readConfigFile)(target);\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.debug)(`Found existing config file ${target}`);\n const trackConfig = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readInlineOrFileJson)(track);\n config.tracks ??= [];\n const {\n updatedItems,\n wasOverwritten\n } = (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_2__.findAndUpdateOrAdd)({\n items: config.tracks,\n newItem: trackConfig,\n idField: 'trackId',\n getId: item => item.trackId,\n force: update ?? false,\n itemType: 'track'\n });\n config.tracks = updatedItems;\n await (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_2__.saveConfigAndReport)({\n config,\n target,\n itemType: 'track',\n itemName: trackConfig.name,\n itemId: trackConfig.trackId,\n wasOverwritten\n });\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-json.ts?\n}");
|
|
241
|
-
|
|
242
|
-
/***/ },
|
|
243
|
-
|
|
244
|
-
/***/ "./src/commands/add-track-utils/adapter-utils.ts"
|
|
245
|
-
/*!*******************************************************!*\
|
|
246
|
-
!*** ./src/commands/add-track-utils/adapter-utils.ts ***!
|
|
247
|
-
\*******************************************************/
|
|
248
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
249
|
-
|
|
250
|
-
"use strict";
|
|
251
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ fileNameOf: () => (/* binding */ fileNameOf),\n/* harmony export */ guessTrack: () => (/* binding */ guessTrack),\n/* harmony export */ guessTrackType: () => (/* binding */ guessTrackType),\n/* harmony export */ makeLocationProtocol: () => (/* binding */ makeLocationProtocol),\n/* harmony export */ siblingSidecar: () => (/* binding */ siblingSidecar),\n/* harmony export */ syntenyAdapterTypes: () => (/* binding */ syntenyAdapterTypes)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jbrowse/add-track-core */ \"../../packages/add-track-core/src/formats.ts\");\n/* harmony import */ var _jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @jbrowse/add-track-core */ \"../../packages/add-track-core/src/trackTypes.generated.ts\");\n\n\n\n// the specs that carry a location field, keyed by adapter type, so an explicit\n// --adapterType can be resolved back to its file-layout spec\n\nfunction hasLocField(spec) {\n return 'locField' in spec;\n}\nconst adapterTypeToSpec = {};\nfor (const {\n spec\n} of _jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_1__.formats) {\n if (hasLocField(spec) && !adapterTypeToSpec[spec.adapterType]) {\n adapterTypeToSpec[spec.adapterType] = spec;\n }\n}\n\n// What else the sidecar with this suffix can be named. `.csi` is htslib's\n// alternative for a BAI or a TBI — required for a reference over 512 Mb, and\n// written on request at any size. `stripped` is the form Picard and GATK write:\n// `reads.bai` beside `reads.bam`, where samtools writes `reads.bam.bai`.\n//\n// Per-suffix because the alternatives are: a `.crai` has no CSI form, and\n// stripping the extension off `calls.vcf.gz` would name `calls.vcf.tbi`, which\n// nothing writes. A `.fai`/`.gzi` has neither and so is absent here.\n//\n// This is `indexCandidateNames` in `@jbrowse/core/util/indexCandidates`, which\n// the add-track widget and jbrowse-img share and this CLI cannot import — it\n// carries no `@jbrowse/core` dependency, so `npm i -g @jbrowse/cli` stays a CLI\n// rather than a copy of the app. Change one, change the other.\nconst ALTERNATE_SPELLINGS = {\n '.bai': {\n csi: true,\n stripped: true\n },\n '.crai': {\n stripped: true\n },\n '.tbi': {\n csi: true\n }\n};\n\n/**\n * The sidecar actually sitting beside `location`, or the conventional name when\n * none of the spellings is there — so a missing index still reports the file\n * that was expected, and `--load` still names it.\n *\n * Probed with `existsSync`, which is false for every candidate of a URL and so\n * leaves a remote track with exactly the conventional guess it had before this\n * existed. A remote `.csi` still wants `--indexFile`.\n *\n * The guard on the stripped spelling is load-bearing: `replace` hands back the\n * subject unchanged when the pattern does not match, so `--adapterType\n * BamAdapter` on a file named with no extension at all would offer the data\n * file as its own index — and that file certainly exists.\n */\nfunction siblingSidecar(location, suffix) {\n const {\n csi,\n stripped\n } = ALTERNATE_SPELLINGS[suffix] ?? {};\n const strippedName = location.replace(/\\.[^./\\\\]+$/, suffix);\n const candidates = [`${location}${suffix}`, ...(csi ? [`${location}.csi`] : []), ...(stripped && strippedName !== location ? [strippedName] : [])];\n return candidates.find(c => node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(c)) ?? candidates[0];\n}\n// builds the adapter object and the list of source files for a spec in one\n// place, so the config it writes and the files add-track copies can never drift\nfunction buildFromSpec(spec, {\n location,\n index,\n bed1,\n bed2,\n makeLocation\n}) {\n switch (spec.kind) {\n case 'single':\n return {\n adapter: {\n type: spec.adapterType,\n [spec.locField]: makeLocation(location)\n },\n files: [location]\n };\n case 'indexed':\n {\n const idx = index || siblingSidecar(location, spec.suffix);\n return {\n adapter: {\n type: spec.adapterType,\n [spec.locField]: makeLocation(location),\n index: {\n location: makeLocation(idx),\n // the type follows the file that was CHOSEN, not the one the user\n // typed, so a detected `.csi` is opened as one\n indexType: (0,_jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_1__.resolveIndexType)(idx, spec.indexType)\n }\n },\n files: [location, idx]\n };\n }\n case 'sidecar':\n {\n const sidecars = spec.sidecars.map(s => ({\n field: s.field,\n path: s.fromIndex && index ? index : siblingSidecar(location, s.suffix)\n }));\n return {\n adapter: {\n type: spec.adapterType,\n [spec.locField]: makeLocation(location),\n ...Object.fromEntries(sidecars.map(s => [s.field, makeLocation(s.path)]))\n },\n files: [location, ...sidecars.map(s => s.path)]\n };\n }\n case 'anchors':\n return {\n adapter: {\n type: spec.adapterType,\n [spec.locField]: makeLocation(location),\n bed1Location: bed1 ? makeLocation(bed1) : undefined,\n bed2Location: bed2 ? makeLocation(bed2) : undefined\n },\n files: [location, bed1, bed2]\n };\n case 'unsupported':\n return {\n adapter: {\n type: 'UNSUPPORTED'\n },\n files: []\n };\n }\n}\nfunction makeLocationProtocol(protocol) {\n return location => {\n if (protocol === 'uri') {\n return {\n uri: location,\n locationType: 'UriLocation'\n };\n }\n if (protocol === 'localPath') {\n return {\n localPath: location,\n locationType: 'LocalPathLocation'\n };\n }\n throw new Error(`invalid protocol ${protocol}`);\n };\n}\n\n/**\n * The bare filename the format table matches against — the same thing\n * `@jbrowse/core`'s `getFileName` hands the guesser chain, so a path and a URL\n * with a presigned query string both reduce to what the regexes expect.\n */\nfunction fileNameOf(location) {\n return location.replaceAll('\\\\', '/').split('/').at(-1)?.split(/[?#]/)[0] ?? '';\n}\n\n// resolves the file-layout spec that both the adapter config and the copied\n// file set derive from, honoring an explicit --adapterType. `typeOverride` is\n// the label to stamp on the adapter when the extension's layout is reused under\n// a different adapter type.\nfunction resolveSpec(location, adapterType) {\n const spec = (0,_jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_1__.matchFormat)(fileNameOf(location))?.spec;\n if (adapterType) {\n const known = adapterTypeToSpec[adapterType];\n if (known) {\n // explicit --adapterType resolves back to its known file layout\n return {\n spec: known\n };\n } else if (spec) {\n // unknown adapter type on a recognized extension: reuse that extension's\n // file layout (location field + any sidecar/index files) under the new\n // type name, so e.g. --adapterType MyPAFAdapter on a .paf keeps its\n // pafLocation instead of dropping the file. Override with --config if the\n // custom adapter uses a different field.\n return {\n spec,\n typeOverride: adapterType\n };\n } else {\n // custom adapter type on an unrecognized extension: no layout to reuse\n return {\n typeOverride: adapterType\n };\n }\n } else {\n return {\n spec\n };\n }\n}\n\n// derives the track adapter and the raw source files together from one spec, so\n// the config written and the files add-track copies can never drift. mapLocation\n// turns a raw source path into the location the adapter stores (relative path +\n// protocol wrapper); the returned files stay raw for the copy step.\nfunction guessTrack({\n location,\n index,\n bed1,\n bed2,\n adapterType,\n mapLocation\n}) {\n const {\n spec,\n typeOverride\n } = resolveSpec(location, adapterType);\n if (spec) {\n const {\n adapter,\n files\n } = buildFromSpec(spec, {\n location,\n index,\n bed1,\n bed2,\n makeLocation: mapLocation\n });\n return {\n adapter: typeOverride ? {\n ...adapter,\n type: typeOverride\n } : adapter,\n files\n };\n }\n return {\n adapter: {\n type: typeOverride ?? 'UNKNOWN'\n },\n files: []\n };\n}\nfunction guessTrackType(adapterType, location) {\n return (0,_jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_1__.trackTypeForAdapter)(adapterType, location && fileNameOf(location)) || 'FeatureTrack';\n}\n\n// the synteny adapters are exactly those mapping to a SyntenyTrack, so derive\n// the set instead of maintaining a second hand-written list that can drift\nconst syntenyAdapterTypes = new Set(Object.entries(_jbrowse_add_track_core__WEBPACK_IMPORTED_MODULE_2__.adapterTypesToTrackTypeMap).filter(([, trackType]) => trackType === 'SyntenyTrack').map(([adapterType]) => adapterType));\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-utils/adapter-utils.ts?\n}");
|
|
252
|
-
|
|
253
|
-
/***/ },
|
|
254
|
-
|
|
255
|
-
/***/ "./src/commands/add-track-utils/file-operations.ts"
|
|
256
|
-
/*!*********************************************************!*\
|
|
257
|
-
!*** ./src/commands/add-track-utils/file-operations.ts ***!
|
|
258
|
-
\*********************************************************/
|
|
259
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
260
|
-
|
|
261
|
-
"use strict";
|
|
262
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ loadFiles: () => (/* binding */ loadFiles)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n\n\n\nconst {\n copyFile,\n rename,\n symlink,\n unlink\n} = (node_fs__WEBPACK_IMPORTED_MODULE_0___default().promises);\nconst {\n COPYFILE_EXCL\n} = (node_fs__WEBPACK_IMPORTED_MODULE_0___default().constants);\nasync function loadFile({\n src,\n destDir,\n mode,\n subDir = '',\n force = false\n}) {\n if (mode === 'inPlace') {\n return;\n }\n const dest = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(destDir, subDir, node_path__WEBPACK_IMPORTED_MODULE_1___default().basename(src));\n // the file already sits where the config wants it (add-track run from inside\n // the install dir), so there is nothing to copy/move/link. Bailing before the\n // force-unlink matters: dest and src are the same file, so unlinking it\n // deleted the user's data and left the copy with nothing to read. A source\n // that isn't there still has to fail, so fall through to get its ENOENT.\n if (node_path__WEBPACK_IMPORTED_MODULE_1___default().resolve(src) === node_path__WEBPACK_IMPORTED_MODULE_1___default().resolve(dest) && node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(src)) {\n return;\n }\n if (force) {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.ignoreNotFound)(unlink(dest));\n }\n if (mode === 'copy') {\n return copyFile(src, dest, force ? 0 : COPYFILE_EXCL);\n }\n if (mode === 'move') {\n return rename(src, dest);\n }\n if (mode === 'symlink') {\n return symlink(node_path__WEBPACK_IMPORTED_MODULE_1___default().resolve(src), dest);\n }\n return undefined;\n}\n\n// load a set of source files into the config directory, skipping the operation\n// entirely when no load mode is given (e.g. a URL track). undefined entries\n// (optional index/bed files) are ignored\nasync function loadFiles({\n files,\n destDir,\n mode,\n subDir,\n force\n}) {\n // inPlace references files where they sit, so it needs no destination dir\n if (mode && mode !== 'inPlace') {\n if (subDir) {\n node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_1___default().join(destDir, subDir), {\n recursive: true\n });\n }\n await Promise.all(files.filter(f => !!f).map(src => loadFile({\n src,\n destDir,\n mode,\n subDir,\n force\n })));\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-utils/file-operations.ts?\n}");
|
|
263
|
-
|
|
264
|
-
/***/ },
|
|
265
|
-
|
|
266
|
-
/***/ "./src/commands/add-track-utils/multiwig.ts"
|
|
267
|
-
/*!**************************************************!*\
|
|
268
|
-
!*** ./src/commands/add-track-utils/multiwig.ts ***!
|
|
269
|
-
\**************************************************/
|
|
270
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
271
|
-
|
|
272
|
-
"use strict";
|
|
273
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ buildMultiWiggle: () => (/* binding */ buildMultiWiggle)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n\n\n// Parse the --multiwig argument into a subadapter list, mirroring @jbrowse/img's\n// --multiwig: either a comma-separated list of BigWig files/URLs, or a `.json`\n// file holding an array of BigWig locations or full subadapter objects (each a\n// BigWigAdapter config carrying its own name/color/group).\n//\n// A string entry becomes an explicit `{ type: 'BigWigAdapter', bigWigLocation }`\n// subadapter — NOT an entry in the adapter's `bigWigs` string-array shorthand.\n// The shorthand can only carry bare URIs and does not resolve a relative path\n// against the config's baseUri, so a relative local file 404s there. Building the\n// location object ourselves runs it through the same mapLocation as every other\n// track file, so `--load copy --subDir bw` yields `{ uri: 'bw/a.bw' }` that\n// resolves relative to config.json exactly like a single-file track.\n//\n// Object entries are full subadapter configs, so they pass through unchanged\n// (keeping their per-row metadata) and own their own locations — use URLs or\n// config-relative uris there, since --load only copies the string entries.\nfunction buildMultiWiggle({\n sources,\n mapLocation\n}) {\n const files = [];\n const subadapters = parseSources(sources).map(entry => {\n if (typeof entry === 'string') {\n if (!(0,_types_common_ts__WEBPACK_IMPORTED_MODULE_1__.isURL)(entry)) {\n files.push(entry);\n }\n return {\n type: 'BigWigAdapter',\n bigWigLocation: mapLocation(entry)\n };\n }\n return entry;\n });\n return {\n adapter: {\n type: 'MultiWiggleAdapter',\n subadapters\n },\n files\n };\n}\nfunction parseSources(sources) {\n if (sources.toLowerCase().endsWith('.json')) {\n const data = JSON.parse(node_fs__WEBPACK_IMPORTED_MODULE_0___default().readFileSync(sources, 'utf8'));\n if (!Array.isArray(data)) {\n throw new Error(`${sources}: expected a JSON array of BigWig URLs or subadapter objects`);\n }\n return data;\n }\n return sources.split(',').map(s => s.trim()).filter(Boolean);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-utils/multiwig.ts?\n}");
|
|
274
|
-
|
|
275
|
-
/***/ },
|
|
276
|
-
|
|
277
|
-
/***/ "./src/commands/add-track-utils/track-config.ts"
|
|
278
|
-
/*!******************************************************!*\
|
|
279
|
-
!*** ./src/commands/add-track-utils/track-config.ts ***!
|
|
280
|
-
\******************************************************/
|
|
281
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
282
|
-
|
|
283
|
-
"use strict";
|
|
284
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ addSyntenyAssemblyNames: () => (/* binding */ addSyntenyAssemblyNames),\n/* harmony export */ buildTrackConfig: () => (/* binding */ buildTrackConfig),\n/* harmony export */ mapLocationForFiles: () => (/* binding */ mapLocationForFiles),\n/* harmony export */ mergeDisplayDefaults: () => (/* binding */ mergeDisplayDefaults)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _validate_displayDefaultKeys_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../validate/displayDefaultKeys.ts */ \"./src/commands/validate/displayDefaultKeys.ts\");\n/* harmony import */ var _validate_suggest_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../validate/suggest.ts */ \"./src/commands/validate/suggest.ts\");\n/* harmony import */ var _adapter_utils_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./adapter-utils.ts */ \"./src/commands/add-track-utils/adapter-utils.ts\");\n/* harmony import */ var _validators_ts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./validators.ts */ \"./src/commands/add-track-utils/validators.ts\");\n\n\n\n\n\n\n\nfunction mapLocationForFiles(p, load, subDir) {\n return !p || (0,_types_common_ts__WEBPACK_IMPORTED_MODULE_1__.isURL)(p) || load === 'inPlace' ? p : node_path__WEBPACK_IMPORTED_MODULE_0___default().join(subDir || '', node_path__WEBPACK_IMPORTED_MODULE_0___default().basename(p));\n}\nfunction buildTrackConfig({\n trackType,\n trackId,\n name,\n assemblyNames,\n category,\n description,\n configObj = {},\n adapter\n}) {\n return {\n type: trackType,\n trackId,\n name,\n adapter,\n category: category ? (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(category) : undefined,\n assemblyNames: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(assemblyNames),\n description,\n ...configObj\n };\n}\n\n// Fold the --color / --height convenience flags and any --displayDefaults JSON\n// into one displayDefaults object, layered over a displayDefaults already\n// present in --config. Precedence: --config < --displayDefaults < typed flags,\n// so the most specific flag a user reaches for wins. Returns undefined when\n// nothing was supplied, so the track omits displayDefaults entirely.\n//\n// Takes `trackType` so it can refuse a key none of that track's displays\n// declares. `--color` on an alignments track is the reachable case — that\n// display declares `colorBy`, expandTrackConfigShorthand drops the unmatched\n// key with a console warning, and the command otherwise wrote the dead setting\n// and exited 0.\nfunction mergeDisplayDefaults({\n configObj,\n color,\n height,\n displayDefaults,\n trackType\n}) {\n const fromJson = displayDefaults ? (0,_validators_ts__WEBPACK_IMPORTED_MODULE_6__.parseJsonFlag)(displayDefaults, '--displayDefaults') : {};\n const typed = {};\n if (color !== undefined) {\n typed.color = color;\n }\n if (height !== undefined) {\n const asNumber = Number(height);\n typed.height = Number.isNaN(asNumber) ? height : asNumber;\n }\n const existing = configObj?.displayDefaults ?? {};\n const merged = {\n ...existing,\n ...fromJson,\n ...typed\n };\n if (Object.keys(merged).length === 0) {\n return undefined;\n }\n checkDisplayDefaultKeys(merged, trackType);\n return merged;\n}\n\n// An unknown track type accepts everything: it is a plugin's, and this manifest\n// is only the core plugins'.\n//\n// The message names the display when the track offers one — which most do, and\n// AlignmentsTrack is the case that matters here, since `--color` is the\n// reachable mistake and LinearAlignmentsDisplay is the only place to go look.\nfunction checkDisplayDefaultKeys(merged, trackType) {\n const {\n displayTypes,\n keys\n } = (0,_validate_displayDefaultKeys_ts__WEBPACK_IMPORTED_MODULE_3__.displayDefaultsForTrackType)(trackType);\n if (keys.length === 0) {\n return;\n }\n const unknown = Object.keys(merged).filter(key => !keys.includes(key));\n if (unknown.length > 0) {\n const declarer = displayTypes.length === 1 ? displayTypes[0] : `any ${trackType} display`;\n throw new Error(unknown.map(key => {\n const hit = (0,_validate_suggest_ts__WEBPACK_IMPORTED_MODULE_4__.suggest)(key, keys);\n return `\"${key}\" is not a setting ${declarer} declares${hit ? `, did you mean \"${hit}\"?` : ''}`;\n }).join('\\n'));\n }\n}\nfunction addSyntenyAssemblyNames(adapter, assemblyNames) {\n if (_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_5__.syntenyAdapterTypes.has(adapter.type)) {\n return {\n ...adapter,\n assemblyNames: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(assemblyNames)\n };\n }\n return adapter;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-utils/track-config.ts?\n}");
|
|
285
|
-
|
|
286
|
-
/***/ },
|
|
287
|
-
|
|
288
|
-
/***/ "./src/commands/add-track-utils/validators.ts"
|
|
289
|
-
/*!****************************************************!*\
|
|
290
|
-
!*** ./src/commands/add-track-utils/validators.ts ***!
|
|
291
|
-
\****************************************************/
|
|
292
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
293
|
-
|
|
294
|
-
"use strict";
|
|
295
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ parseConfigFlag: () => (/* binding */ parseConfigFlag),\n/* harmony export */ parseJsonFlag: () => (/* binding */ parseJsonFlag),\n/* harmony export */ validateAdapterType: () => (/* binding */ validateAdapterType),\n/* harmony export */ validateAssemblies: () => (/* binding */ validateAssemblies),\n/* harmony export */ validateLoadAndLocation: () => (/* binding */ validateLoadAndLocation),\n/* harmony export */ validateLoadOption: () => (/* binding */ validateLoadOption),\n/* harmony export */ validateMultiWiggleLoad: () => (/* binding */ validateMultiWiggleLoad),\n/* harmony export */ validateTrackArg: () => (/* binding */ validateTrackArg),\n/* harmony export */ warnUnknownAssemblyNames: () => (/* binding */ warnUnknownAssemblyNames)\n/* harmony export */ });\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n\n\nfunction parseJsonFlag(value, flagName) {\n try {\n return JSON.parse(value);\n } catch {\n throw new Error(`${flagName} is not valid JSON: ${value}`);\n }\n}\nfunction parseConfigFlag(config) {\n return parseJsonFlag(config, '--config');\n}\nfunction validateLoadOption(load) {\n if (load && !['copy', 'symlink', 'move', 'inPlace'].includes(load)) {\n throw new Error('--load must be one of: copy, symlink, move, inPlace');\n }\n}\nfunction validateTrackArg(track) {\n if (!track) {\n throw new Error('Missing 1 required arg:\\ntrack Track file or URL\\nSee more help with --help');\n }\n}\nfunction validateLoadAndLocation(location, load) {\n if ((0,_types_common_ts__WEBPACK_IMPORTED_MODULE_0__.isURL)(location) && load) {\n throw new Error('The --load flag is used for local files only, but a URL was provided');\n } else if (!(0,_types_common_ts__WEBPACK_IMPORTED_MODULE_0__.isURL)(location) && !load) {\n throw new Error(`The --load flag should be used if a local file is used, example --load\n copy to copy the file into the config directory. Options for load are\n copy/move/symlink/inPlace (inPlace for no file operations)`);\n }\n}\n\n// --multiwig follows the same local-file rule as a single track: local sources\n// need a --load mode, a pure-URL set must omit it. hasLocalSource is true when\n// any comma/JSON string source is a local path.\nfunction validateMultiWiggleLoad(hasLocalSource, load) {\n if (hasLocalSource && !load) {\n throw new Error('--load is required when --multiwig includes local files (copy/move/symlink/inPlace)');\n }\n if (!hasLocalSource && load) {\n throw new Error('The --load flag is used for local files only, but every --multiwig source is a URL');\n }\n}\nfunction validateAdapterType(adapterType) {\n if (adapterType === 'UNKNOWN') {\n throw new Error('Track type is not recognized');\n }\n if (adapterType === 'UNSUPPORTED') {\n throw new Error('Track type is not supported');\n }\n}\nfunction validateAssemblies(configContents, assemblyNames) {\n if (!configContents.assemblies?.length) {\n throw new Error('No assemblies found. Please add one before adding tracks');\n }\n if (configContents.assemblies.length > 1 && !assemblyNames) {\n throw new Error('Too many assemblies, cannot default to one. Please specify the assembly with the --assemblyNames flag');\n }\n}\n\n// warn (don't throw) when a --assemblyNames entry matches no assembly in the\n// config: a typo or reversed query,target usually means this, but referencing an\n// assembly to be added later is legitimate, so it stays a soft warning\nfunction warnUnknownAssemblyNames(configContents, assemblyNames) {\n const known = new Set(configContents.assemblies?.flatMap(a => [a.name, ...(a.aliases ?? [])]) ?? []);\n const missing = (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.parseCommaSeparatedString)(assemblyNames).filter(name => !known.has(name));\n if (missing.length) {\n console.warn(`Warning: assembly name(s) not found in config: ${missing.join(', ')}. ` + `Available: ${[...known].join(', ')}. ` + 'Check for a typo or reversed query,target order; the track will not display until a matching assembly exists.');\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track-utils/validators.ts?\n}");
|
|
296
|
-
|
|
297
|
-
/***/ },
|
|
298
|
-
|
|
299
|
-
/***/ "./src/commands/add-track.ts"
|
|
300
|
-
/*!***********************************!*\
|
|
301
|
-
!*** ./src/commands/add-track.ts ***!
|
|
302
|
-
\***********************************/
|
|
303
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
304
|
-
|
|
305
|
-
"use strict";
|
|
306
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _add_track_utils_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./add-track-utils/adapter-utils.ts */ \"./src/commands/add-track-utils/adapter-utils.ts\");\n/* harmony import */ var _add_track_utils_file_operations_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./add-track-utils/file-operations.ts */ \"./src/commands/add-track-utils/file-operations.ts\");\n/* harmony import */ var _add_track_utils_multiwig_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./add-track-utils/multiwig.ts */ \"./src/commands/add-track-utils/multiwig.ts\");\n/* harmony import */ var _add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./add-track-utils/track-config.ts */ \"./src/commands/add-track-utils/track-config.ts\");\n/* harmony import */ var _add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./add-track-utils/validators.ts */ \"./src/commands/add-track-utils/validators.ts\");\n/* harmony import */ var _shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./shared/config-operations.ts */ \"./src/commands/shared/config-operations.ts\");\n\n\n\n\n\n\n\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n trackType: {\n type: 'string',\n short: 't',\n description: 'Type of track, by default inferred from track file'\n },\n adapterType: {\n type: 'string',\n description: 'Adapter type, by default inferred from track file'\n },\n name: {\n type: 'string',\n short: 'n',\n description: 'Name of the track. Will be defaulted to the trackId if none specified'\n },\n indexFile: {\n type: 'string',\n description: 'Optional index file for the track'\n },\n description: {\n type: 'string',\n short: 'd',\n description: 'Optional description of the track'\n },\n assemblyNames: {\n type: 'string',\n short: 'a',\n description: 'Assembly name or names for track as comma separated string. For pairwise synteny tracks the order is query,target (reverse of minimap2/nucmer argument order); for all-vs-all adapters (AllVsAllPAFAdapter/AllVsAllIndexedPAFAdapter) list every assembly the file covers, in any order'\n },\n category: {\n type: 'string',\n description: 'Optional comma separated string of categories to group tracks'\n },\n config: {\n type: 'string',\n description: 'Any extra config settings to add to a track'\n },\n color: {\n type: 'string',\n description: 'Track color: a plain CSS color or a jexl callback. Merged into displayDefaults'\n },\n height: {\n type: 'string',\n description: 'Track display height in pixels. Merged into displayDefaults'\n },\n displayDefaults: {\n type: 'string',\n description: 'Inline JSON merged into the track displayDefaults (labels, mouseover, jexlFilters, etc.)'\n },\n multiwig: {\n type: 'string',\n description: 'Build a MultiQuantitativeTrack from several BigWigs (in place of the positional track arg): a comma-separated list of BigWig files/URLs, or a .json file holding an array of BigWig locations or subadapter objects, each with its own name/color'\n },\n target: {\n type: 'string',\n description: 'Path to config file in JB2 installation to write out to'\n },\n out: {\n type: 'string',\n description: 'Synonym for target'\n },\n subDir: {\n type: 'string',\n description: 'When using --load a file, output to a subdirectory of the target dir'\n },\n trackId: {\n type: 'string',\n description: 'trackId for the track, by default inferred from filename'\n },\n load: {\n type: 'string',\n short: 'l',\n description: 'How to manage the track file relative to config.json. Required for local files, omit for URLs',\n choices: ['copy', 'symlink', 'move', 'inPlace']\n },\n force: {\n type: 'boolean',\n short: 'f',\n description: 'Overwrite existing track and any existing files'\n },\n protocol: {\n type: 'string',\n description: 'Force protocol to a specific value'\n },\n bed1: {\n type: 'string',\n description: 'Used only for mcscan anchors/simpleAnchors types'\n },\n bed2: {\n type: 'string',\n description: 'Used only for mcscan anchors/simpleAnchors types'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_1__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Add a track to a JBrowse 2 configuration';\n const notes = '--load controls how the data file is placed relative to config.json: ' + 'copy, move, or symlink it into the install directory, or inPlace to ' + 'reference a pre-staged local file where it already sits. Omit --load ' + 'entirely for URLs. For a local file the matching index is whichever ' + 'conventional spelling is actually beside it — <file>.bai/.crai/.tbi, a ' + '<file>.csi, or the reads.bai form Picard writes beside reads.bam. A URL ' + 'cannot be checked, so it gets <file>.bai/.tbi; pass --indexFile for ' + 'anything else.\\n\\n' + '--config takes inline JSON (not a file path) that is merged into the ' + 'generated track config, so you can set fields the dedicated flags do not ' + 'cover, e.g. --config \\'{\"metadata\":{\"skipTextIndex\":true}}\\' to exclude ' + 'the track from jbrowse text-index.\\n\\n' + '--color and --height set the two most common appearance settings without ' + 'writing JSON. Wrap the value in single quotes and use double quotes inside ' + 'a jexl callback so nothing needs escaping, e.g. ' + '--color \\'jexl:feature.strand==1?\"blue\":\"red\"\\'. --displayDefaults takes ' + 'inline JSON for any other appearance setting (labels, mouseover, ' + 'jexlFilters).\\n\\n' + '--multiwig bundles several BigWigs into one MultiQuantitativeTrack, in ' + 'place of the positional track argument: pass a comma-separated list of ' + 'BigWig files/URLs, or a .json file with an array of BigWig locations or ' + 'subadapter objects (each carrying its own name/color/group). With --load, ' + 'local list entries are copied like any other track file.\\n\\n' + 'For pairwise synteny adapters (PAF/Delta/Chain) --assemblyNames is ' + 'query,target — the reverse of the minimap2/nucmer input order. For the ' + 'all-vs-all adapters (AllVsAllPAFAdapter, AllVsAllIndexedPAFAdapter) it is ' + 'instead the full list of assemblies the file covers, in any order, since ' + 'one all-vs-all file backs every pair.';\n const examples = ['# copy /path/to/my.bam and /path/to/my.bam.bai to current directory and adds track to config.json', '$ jbrowse add-track /path/to/my.bam --load copy', '', '# copy my.bam and my.bam.bai to /path/to/jb2/bam and adds track entry to /path/to/jb2/bam/config.json', '$ jbrowse add-track my.bam --load copy --out /path/to/jb2 --subDir bam', '', '# same as above, but specify path to bai file. needed for if the bai file does not have the extension .bam.bai', '$ jbrowse add-track my.bam --indexFile my.bai --load copy', '', '# creates symlink for /path/to/my.bam and adds track to config.json', '$ jbrowse add-track /path/to/my.bam --load symlink', '', '# add track from URL to config.json, no --load flag needed', '$ jbrowse add-track https://mywebsite.com/my.bam', '', '# --load inPlace adds a track without doing file operations', '$ jbrowse add-track /url/relative/path.bam --load inPlace', '', '# color a track by strand and set its height (no escaping: single-quote the value, double-quote inside the jexl)', `$ jbrowse add-track genes.gff3.gz --load copy --color 'jexl:feature.strand==1?\"blue\":\"red\"' --height 200`, '', '# bundle several BigWigs into one MultiQuantitativeTrack (no positional track arg)', '$ jbrowse add-track --multiwig a.bw,b.bw,c.bw --load copy --name \"Coverage\"', '', '# ...or from a sources.json carrying per-row name/color for each BigWig', '$ jbrowse add-track --multiwig sources.json --name \"CATlas ATAC\"'];\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printHelp)({\n description,\n examples,\n notes,\n usage: 'jbrowse add-track <track> [options]',\n options\n });\n return;\n }\n ;(0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateLoadOption)(flags.load);\n const {\n config,\n force,\n category,\n description: trackDescription,\n load,\n subDir = '',\n target,\n protocol = 'uri',\n out,\n indexFile: index,\n bed1,\n bed2,\n adapterType,\n multiwig\n } = flags;\n const location = positionals[0];\n if (multiwig && location) {\n throw new Error('Pass either a positional track file or --multiwig, not both');\n }\n const wrap = (0,_add_track_utils_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_3__.makeLocationProtocol)(protocol);\n const mapLocation = p => wrap((0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_6__.mapLocationForFiles)(p, load, subDir));\n\n // build the adapter (and the set of files to load) up front, so the track-arg\n // and load validation runs before we touch the config on disk\n const {\n adapter,\n files,\n trackType,\n trackId\n } = multiwig ? buildMultiWiggleTrack({\n sources: multiwig,\n mapLocation,\n load,\n trackType: flags.trackType,\n trackId: flags.trackId\n }) : buildFileTrack({\n location,\n index,\n bed1,\n bed2,\n adapterType,\n assemblyNames: flags.assemblyNames,\n mapLocation,\n load,\n trackType: flags.trackType,\n trackId: flags.trackId\n });\n const baseConfigObj = config ? (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.parseConfigFlag)(config) : undefined;\n const displayDefaults = (0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_6__.mergeDisplayDefaults)({\n configObj: baseConfigObj,\n color: flags.color,\n height: flags.height,\n displayDefaults: flags.displayDefaults,\n trackType\n });\n const configObj = displayDefaults ? {\n ...baseConfigObj,\n displayDefaults\n } : baseConfigObj;\n const targetConfigPath = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.resolveConfigPath)(target, out);\n const configDir = node_path__WEBPACK_IMPORTED_MODULE_0___default().dirname(targetConfigPath);\n const configContents = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.readConfigFile)(targetConfigPath);\n (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateAssemblies)(configContents, flags.assemblyNames);\n const name = flags.name || trackId;\n const assemblyNames = flags.assemblyNames || configContents.assemblies?.[0]?.name || '';\n (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.warnUnknownAssemblyNames)(configContents, assemblyNames);\n const trackConfig = (0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_6__.buildTrackConfig)({\n trackType,\n trackId,\n name,\n assemblyNames,\n category,\n description: trackDescription,\n configObj,\n adapter\n });\n const {\n updatedItems: tracks,\n wasOverwritten\n } = (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_8__.findAndUpdateOrAdd)({\n items: configContents.tracks ?? [],\n newItem: trackConfig,\n idField: 'trackId',\n getId: item => item.trackId,\n force: force ?? false,\n itemType: 'track'\n });\n const updatedConfig = {\n ...configContents,\n tracks\n };\n await (0,_add_track_utils_file_operations_ts__WEBPACK_IMPORTED_MODULE_4__.loadFiles)({\n files,\n destDir: configDir,\n mode: load,\n subDir,\n force\n });\n await (0,_shared_config_operations_ts__WEBPACK_IMPORTED_MODULE_8__.saveConfigAndReport)({\n config: updatedConfig,\n target: targetConfigPath,\n itemType: 'track',\n itemName: name,\n itemId: trackId,\n wasOverwritten\n });\n}\n\n// what both track-building paths resolve to: the adapter, the local files to\n// load beside the config, and the track's type/id (either derived or overridden)\n\n// --multiwig: bundle several BigWigs into one MultiQuantitativeTrack\nfunction buildMultiWiggleTrack({\n sources,\n mapLocation,\n load,\n trackType,\n trackId\n}) {\n const {\n adapter,\n files\n } = (0,_add_track_utils_multiwig_ts__WEBPACK_IMPORTED_MODULE_5__.buildMultiWiggle)({\n sources,\n mapLocation\n });\n (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateMultiWiggleLoad)(files.length > 0, load);\n return {\n adapter,\n files,\n trackType: trackType || 'MultiQuantitativeTrack',\n trackId: trackId || multiWiggleTrackId(sources)\n };\n}\n\n// the usual path: one positional data file, adapter guessed from its extension\nfunction buildFileTrack({\n location,\n index,\n bed1,\n bed2,\n adapterType,\n assemblyNames,\n mapLocation,\n load,\n trackType,\n trackId\n}) {\n ;(0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateTrackArg)(location);\n (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateLoadAndLocation)(location, load);\n const {\n adapter: guessedAdapter,\n files\n } = (0,_add_track_utils_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_3__.guessTrack)({\n location,\n index,\n bed1,\n bed2,\n adapterType,\n mapLocation\n });\n const adapter = (0,_add_track_utils_track_config_ts__WEBPACK_IMPORTED_MODULE_6__.addSyntenyAssemblyNames)(guessedAdapter, assemblyNames);\n (0,_add_track_utils_validators_ts__WEBPACK_IMPORTED_MODULE_7__.validateAdapterType)(adapter.type);\n return {\n adapter,\n files,\n trackType: trackType || (0,_add_track_utils_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_3__.guessTrackType)(adapter.type, location),\n trackId: trackId || node_path__WEBPACK_IMPORTED_MODULE_0___default().basename(location, node_path__WEBPACK_IMPORTED_MODULE_0___default().extname(location))\n };\n}\n\n// a .json sources file names the track after itself (sources.json -> sources); a\n// bare comma list has no filename to borrow, so it falls back to 'multiwiggle'\nfunction multiWiggleTrackId(sources) {\n return sources.toLowerCase().endsWith('.json') ? node_path__WEBPACK_IMPORTED_MODULE_0___default().basename(sources, node_path__WEBPACK_IMPORTED_MODULE_0___default().extname(sources)) : 'multiwiggle';\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/add-track.ts?\n}");
|
|
307
|
-
|
|
308
|
-
/***/ },
|
|
309
|
-
|
|
310
|
-
/***/ "./src/commands/admin-server/index.ts"
|
|
311
|
-
/*!********************************************!*\
|
|
312
|
-
!*** ./src/commands/admin-server/index.ts ***!
|
|
313
|
-
\********************************************/
|
|
314
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
315
|
-
|
|
316
|
-
"use strict";
|
|
317
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_http__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:http */ \"node:http\");\n/* harmony import */ var node_http__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_http__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils.ts */ \"./src/commands/admin-server/utils.ts\");\n\n\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n port: {\n type: 'string',\n short: 'p',\n description: 'Specified port to start the server on (default: 9090)'\n },\n root: {\n type: 'string',\n description: 'Path to the root of the JB2 installation'\n },\n bodySizeLimit: {\n type: 'string',\n description: 'Size limit of the update message (default: 25mb)'\n }\n };\n const {\n values: flags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_1__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Start up a small admin server for JBrowse configuration';\n const examples = ['# start the admin server for the JBrowse install in the current directory', '$ jbrowse admin-server', '', '# start on a specific port', '$ jbrowse admin-server -p 8888', '', '# point at a specific JBrowse installation directory', '$ jbrowse admin-server --root /path/to/jb2/', '', '# raise the body size limit for very large config updates', '$ jbrowse admin-server --bodySizeLimit 100mb'];\n const notes = 'The admin-server lets a browser session write changes back to ' + 'config.json on disk, authorized by a one-time key printed in the ' + 'startup URL. It is meant for local configuration only: run it on a ' + 'trusted machine and do not expose the port to untrusted networks or the ' + 'public internet.';\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printHelp)({\n description,\n examples,\n notes,\n usage: 'jbrowse admin-server [options]',\n options\n });\n return;\n }\n const {\n root,\n bodySizeLimit = '25mb'\n } = flags;\n const {\n outFile,\n baseDir\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.setupConfigFile)({\n root\n });\n const port = (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.parsePort)({\n portStr: flags.port\n });\n\n // the key lives only in this process and in the startup URL printed below. It\n // used to also be written to os.tmpdir()/jbrowse-admin-<key>, which nothing\n // ever read and which published the key in a filename any local user can list\n const key = (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.generateKey)();\n const serverRef = {\n current: null\n };\n const server = node_http__WEBPACK_IMPORTED_MODULE_0___default().createServer((0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.createRequestHandler)({\n baseDir,\n outFile,\n key,\n serverRef,\n bodySizeLimit: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.parseByteLimit)(bodySizeLimit)\n }));\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.startServer)({\n server,\n port,\n key,\n outFile,\n serverRef\n });\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/admin-server/index.ts?\n}");
|
|
318
|
-
|
|
319
|
-
/***/ },
|
|
320
|
-
|
|
321
|
-
/***/ "./src/commands/admin-server/utils.ts"
|
|
322
|
-
/*!********************************************!*\
|
|
323
|
-
!*** ./src/commands/admin-server/utils.ts ***!
|
|
324
|
-
\********************************************/
|
|
325
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
326
|
-
|
|
327
|
-
"use strict";
|
|
328
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createRequestHandler: () => (/* binding */ createRequestHandler),\n/* harmony export */ generateKey: () => (/* binding */ generateKey),\n/* harmony export */ parseByteLimit: () => (/* binding */ parseByteLimit),\n/* harmony export */ parsePort: () => (/* binding */ parsePort),\n/* harmony export */ setupConfigFile: () => (/* binding */ setupConfigFile),\n/* harmony export */ startServer: () => (/* binding */ startServer)\n/* harmony export */ });\n/* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:crypto */ \"node:crypto\");\n/* harmony import */ var node_crypto__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_crypto__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var serve_handler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! serve-handler */ \"../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/index.js\");\n/* harmony import */ var serve_handler__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(serve_handler__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _add_assembly_utils_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../add-assembly/utils.ts */ \"./src/commands/add-assembly/utils.ts\");\n\n\n\n\n\n\nfunction parsePort({\n portStr,\n defaultPort = 9090\n}) {\n if (!portStr) {\n return defaultPort;\n }\n const parsedPort = Number.parseInt(portStr, 10);\n if (!(parsedPort > 0 && parsedPort <= 65535)) {\n throw new Error(`${portStr} is not a valid port`);\n }\n return parsedPort;\n}\nfunction generateKey() {\n return node_crypto__WEBPACK_IMPORTED_MODULE_0___default().randomBytes(16).toString('hex');\n}\nasync function setupConfigFile({\n root = '.'\n} = {}) {\n const outFile = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_4__.resolveConfigPath)(root);\n const baseDir = node_path__WEBPACK_IMPORTED_MODULE_2___default().dirname(outFile);\n if (node_fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(outFile)) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_4__.debug)(`Found existing config file ${outFile}`);\n } else {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_4__.debug)(`Creating config file ${outFile}`);\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_4__.writeJsonFile)(outFile, (0,_add_assembly_utils_ts__WEBPACK_IMPORTED_MODULE_5__.createDefaultConfig)());\n }\n return {\n outFile,\n baseDir\n };\n}\nconst BYTE_UNITS = {\n b: 1,\n kb: 1024,\n mb: 1024 ** 2,\n gb: 1024 ** 3\n};\n\n/**\n * `--bodySizeLimit` as a byte count. Replaces the `bytes` package that\n * `express.json` used, and covers the suffixes a config update could plausibly\n * be given; anything else is a mistake at the command line and says so, rather\n * than silently becoming a default the user did not ask for.\n */\nfunction parseByteLimit(limit) {\n const match = /^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.exec(limit.trim());\n const amount = match?.[1];\n const scale = BYTE_UNITS[(match?.[2] ?? 'b').toLowerCase()];\n if (amount === undefined || scale === undefined) {\n throw new Error(`${limit} is not a valid body size limit; use a number optionally followed by b, kb, mb or gb`);\n }\n return Math.floor(Number(amount) * scale);\n}\n\n/** A request body that was over the limit, so the handler can answer 413. */\nclass PayloadTooLargeError extends Error {}\n\n/**\n * The JSON body, or `undefined` when the request carried none. The size is\n * counted as it streams rather than after, so an oversized upload is refused\n * without being buffered first — which is the only reason the limit exists.\n */\nasync function readJsonBody(req, limitBytes) {\n const chunks = [];\n let size = 0;\n for await (const chunk of req) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n size += buffer.length;\n if (size > limitBytes) {\n throw new PayloadTooLargeError(`request body exceeds ${limitBytes} bytes`);\n }\n chunks.push(buffer);\n }\n const raw = Buffer.concat(chunks).toString('utf8').trim();\n const parsed = raw === '' ? undefined : JSON.parse(raw);\n return parsed;\n}\n\n// A missing or non-object body yields no properties instead of throwing, so a\n// route reading it before checking the key cannot turn an unauthorized request\n// into a 500.\nfunction requestBody(body) {\n return (0,_utils_ts__WEBPACK_IMPORTED_MODULE_4__.isRecord)(body) ? body : {};\n}\n\n// body and query values are untrusted input: a repeated query param arrives as\n// an array, a nested one as an object, and neither is a key or a path\nfunction asString(value) {\n return typeof value === 'string' ? value : undefined;\n}\n\n// The shape `express` gave `req.query`, which the checks below are written\n// against: absent, one value, or an array when the param was repeated. An array\n// is not a string, so `asString` rejects it and a repeated `adminKey` or\n// `config` fails rather than quietly using whichever copy came first.\nfunction queryValue(params, name) {\n const values = params.getAll(name);\n return values.length === 0 ? undefined : values.length === 1 ? values[0] : values;\n}\n\n// a discriminated union rather than { isValid, configPath? }, so a caller that\n// checked the flag has configPath without asserting it is there\n\nfunction validateAndExtractParams({\n body,\n query,\n key,\n baseDir,\n outFile\n}) {\n const adminKey = asString(body.adminKey) || asString(queryValue(query, 'adminKey'));\n if (adminKey !== key) {\n return {\n ok: false,\n error: 'Invalid admin key'\n };\n }\n\n // a configPath that is there but is not a string (a JSON number, an object, a\n // repeated query param) is a malformed request, not an absent one — it must not\n // silently fall through to writing the default config\n const rawConfigPath = body.configPath || queryValue(query, 'config');\n const configPathParam = asString(rawConfigPath);\n if (rawConfigPath !== undefined && configPathParam === undefined) {\n return {\n ok: false,\n error: 'Failed to validate config path'\n };\n }\n const configPath = configPathParam ? node_path__WEBPACK_IMPORTED_MODULE_2___default().normalize(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(baseDir, configPathParam)) : outFile;\n const relPath = node_path__WEBPACK_IMPORTED_MODULE_2___default().relative(node_path__WEBPACK_IMPORTED_MODULE_2___default().normalize(baseDir), configPath);\n if (relPath.startsWith('..') || node_path__WEBPACK_IMPORTED_MODULE_2___default().isAbsolute(relPath)) {\n return {\n ok: false,\n error: 'Cannot perform directory traversal'\n };\n }\n return {\n ok: true,\n configPath\n };\n}\nfunction sendText(res, status, body) {\n res.writeHead(status, {\n 'Content-Type': 'text/plain; charset=utf-8'\n });\n res.end(body);\n}\n\n// What `cors()` sent. The server binds to localhost for a browser tab on the\n// same machine to talk to, and the admin key is what authorizes a write — the\n// origin never was.\nfunction applyCorsHeaders(res) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader('Access-Control-Allow-Methods', 'GET, HEAD, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n}\nfunction updateConfig({\n res,\n body,\n query,\n key,\n baseDir,\n outFile\n}) {\n // the key is checked before the payload is touched, so a request with no JSON\n // body gets the 401 it earned rather than a 500 from reading it\n const validation = validateAndExtractParams({\n body,\n query,\n key,\n baseDir,\n outFile\n });\n if (validation.ok) {\n const config = body.config;\n if (config === undefined) {\n sendText(res, 400, 'Error: Missing config in request body');\n } else {\n try {\n node_fs__WEBPACK_IMPORTED_MODULE_1___default().writeFileSync(validation.configPath, JSON.stringify(config, null, 2));\n sendText(res, 200, 'Config updated successfully');\n } catch {\n sendText(res, 500, 'Error: Failed to update config');\n }\n }\n } else {\n sendText(res, 401, `Error: ${validation.error}`);\n }\n}\nfunction readConfig({\n res,\n body,\n query,\n key,\n baseDir,\n outFile\n}) {\n const validation = validateAndExtractParams({\n body,\n query,\n key,\n baseDir,\n outFile\n });\n if (validation.ok) {\n try {\n if (node_fs__WEBPACK_IMPORTED_MODULE_1___default().existsSync(validation.configPath)) {\n sendText(res, 200, node_fs__WEBPACK_IMPORTED_MODULE_1___default().readFileSync(validation.configPath, 'utf8'));\n } else {\n sendText(res, 404, 'Error: Config file not found');\n }\n } catch (error) {\n console.error('Error reading config:', error);\n sendText(res, 500, 'Error: Failed to read config');\n }\n } else {\n sendText(res, 401, `Error: ${validation.error}`);\n }\n}\n\n/**\n * The static half, and why it runs for `/` before the greeting below does: an\n * admin server is pointed at a JBrowse install, so `/` has to load the app the\n * user came for. `serve-handler` owns the parts worth not writing — content\n * types, byte ranges (the same directory holds the BAM and CRAM files the app\n * fetches by range), directory handling and the traversal guard.\n */\nasync function serveStatic({\n req,\n res,\n baseDir\n}) {\n await serve_handler__WEBPACK_IMPORTED_MODULE_3___default()(req, res, {\n public: baseDir\n });\n}\nasync function hasIndexHtml(baseDir) {\n return node_fs__WEBPACK_IMPORTED_MODULE_1___default().promises.stat(node_path__WEBPACK_IMPORTED_MODULE_2___default().join(baseDir, 'index.html')).then(stats => stats.isFile()).catch(() => false);\n}\n\n/**\n * The whole server, as one request handler.\n *\n * Replaces express + cors + express.json. The four routes are exact paths with\n * no parameters, so the dispatch is a switch; the rest of what express supplied\n * is the body reader, the CORS headers and the static handler above.\n *\n * One deliberate difference: `GET /config` is always the admin route. Under\n * `express.static` a file literally named `config` sitting in the JBrowse\n * directory would have shadowed it, which is not a thing anyone wants and was\n * never intended.\n */\nfunction createRequestHandler({\n baseDir,\n outFile,\n key,\n serverRef,\n bodySizeLimit\n}) {\n return async (req, res) => {\n try {\n applyCorsHeaders(res);\n const url = new URL(req.url ?? '/', 'http://localhost');\n const route = `${req.method} ${url.pathname}`;\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n } else if (route === 'POST /updateConfig' || route === 'GET /config') {\n const body = requestBody(await readJsonBody(req, bodySizeLimit));\n const args = {\n res,\n body,\n query: url.searchParams,\n key,\n baseDir,\n outFile\n };\n if (route === 'GET /config') {\n readConfig(args);\n } else {\n updateConfig(args);\n }\n } else if (route === 'POST /shutdown') {\n const body = requestBody(await readJsonBody(req, bodySizeLimit));\n if (asString(body.adminKey) === key) {\n sendText(res, 200, 'Server shutting down');\n setImmediate(() => {\n serverRef.current?.close();\n });\n } else {\n sendText(res, 401, 'Error: Invalid admin key');\n }\n } else if (url.pathname === '/' && !(await hasIndexHtml(baseDir))) {\n sendText(res, 200, 'JBrowse Admin Server');\n } else {\n await serveStatic({\n req,\n res,\n baseDir\n });\n }\n } catch (error) {\n // the express error middleware this replaces, and registered after the\n // routes for the same reason: it has to catch what they and the body\n // reader throw\n if (!res.headersSent) {\n if (error instanceof PayloadTooLargeError) {\n sendText(res, 413, 'Error: Request body too large');\n } else if (error instanceof SyntaxError) {\n sendText(res, 400, 'Error: Malformed JSON in request body');\n } else {\n console.error('Server error:', error);\n sendText(res, 500, 'Internal Server Error');\n }\n }\n }\n };\n}\nfunction startServer({\n server,\n port,\n key,\n outFile,\n serverRef\n}) {\n server.listen(port, () => {\n console.log(`Admin server started on port ${port}\\n\\n` + `To access the admin interface, open your browser to:\\n` + `http://localhost:${port}?adminKey=${key}\\n\\n` + `Admin key: ${key}\\n` + `Config file: ${outFile}\\n\\n` + `To stop the server, press Ctrl+C`);\n });\n serverRef.current = server;\n server.on('error', error => {\n if (error.code === 'EADDRINUSE') {\n console.error(`Error: Port ${port} is already in use`);\n } else {\n console.error('Server error:', error.message);\n }\n process.exit(1);\n });\n const shutdownHandler = () => {\n console.log('\\nShutting down admin server...');\n server.close(() => {\n process.exit(0);\n });\n };\n process.on('SIGINT', shutdownHandler);\n process.on('SIGTERM', shutdownHandler);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/admin-server/utils.ts?\n}");
|
|
329
|
-
|
|
330
|
-
/***/ },
|
|
331
|
-
|
|
332
|
-
/***/ "./src/commands/create.ts"
|
|
333
|
-
/*!********************************!*\
|
|
334
|
-
!*** ./src/commands/create.ts ***!
|
|
335
|
-
\********************************/
|
|
336
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
337
|
-
|
|
338
|
-
"use strict";
|
|
339
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs/promises */ \"node:fs/promises\");\n/* harmony import */ var node_fs_promises__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs_promises__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n\n\n\nconst description = 'Downloads and installs the latest JBrowse 2 release';\nconst examples = ['# Download latest release from github, and put in specific path', '$ jbrowse create /path/to/new/installation', '', '# Download latest release from github and force overwrite existing contents at path', '$ jbrowse create /path/to/new/installation --force', '', '# Download latest release from a specific URL', '$ jbrowse create /path/to/new/installation --url url.com/directjbrowselink.zip', '', '# Download a specific tag from github', '$ jbrowse create /path/to/new/installation --tag v1.0.0', '', '# List available versions', '$ jbrowse create --listVersions'];\nconst options = {\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Show help'\n },\n force: {\n type: 'boolean',\n short: 'f',\n description: 'Overwrites existing JBrowse 2 installation if present in path'\n },\n listVersions: {\n type: 'boolean',\n short: 'l',\n description: 'Lists out all versions of JBrowse 2'\n },\n branch: {\n type: 'string',\n description: 'Download a development build from a named git branch'\n },\n nightly: {\n type: 'boolean',\n description: 'Download the latest development build from the main branch'\n },\n url: {\n type: 'string',\n short: 'u',\n description: 'A direct URL to a JBrowse 2 release'\n },\n tag: {\n type: 'string',\n short: 't',\n description: 'Version of JBrowse 2 to install. Format is v1.0.0. Defaults to latest'\n }\n};\nasync function run(args) {\n const {\n positionals,\n values: runFlags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_1__.parseArgs)({\n options,\n allowPositionals: true,\n args\n });\n if (runFlags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printHelp)({\n description,\n examples,\n usage: 'jbrowse create [localPath] [options]',\n options\n });\n return;\n }\n const {\n force,\n url,\n listVersions,\n tag,\n branch,\n nightly\n } = runFlags;\n if (listVersions) {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printVersions)();\n return;\n }\n const argsPath = positionals[0];\n if (!argsPath) {\n throw new Error('Missing 1 required arg:\\nlocalPath Location where JBrowse 2 will be installed\\nSee more help with --help');\n }\n\n // mkdir will do nothing if dir exists\n await (0,node_fs_promises__WEBPACK_IMPORTED_MODULE_0__.mkdir)(argsPath, {\n recursive: true\n });\n if (!force) {\n await checkPath(argsPath);\n }\n const {\n locationUrl,\n archive\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.downloadRelease)({\n url,\n nightly,\n branch,\n tag\n });\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.extractZip)(archive, argsPath);\n console.log(`Unpacked ${locationUrl} at ${argsPath}`);\n}\nasync function checkPath(userPath) {\n const allFiles = await (0,node_fs_promises__WEBPACK_IMPORTED_MODULE_0__.readdir)(userPath);\n if (allFiles.length > 0) {\n throw new Error(`This directory (${userPath}) has existing files and could cause conflicts with create. Please choose another directory or use the force flag to overwrite existing files`);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/create.ts?\n}");
|
|
340
|
-
|
|
341
|
-
/***/ },
|
|
342
|
-
|
|
343
|
-
/***/ "./src/commands/make-pif/cigar-utils.ts"
|
|
344
|
-
/*!**********************************************!*\
|
|
345
|
-
!*** ./src/commands/make-pif/cigar-utils.ts ***!
|
|
346
|
-
\**********************************************/
|
|
347
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
348
|
-
|
|
349
|
-
"use strict";
|
|
350
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ splitCigarOnLargeGaps: () => (/* binding */ splitCigarOnLargeGaps)\n/* harmony export */ });\n/** One split of a row, plus whether the walk that produced it can be trusted. */\n\n// Walk a CIGAR and split the alignment wherever an insertion or deletion is at\n// least `splitGap` bp, so each coarse-tier row's bounding box stays tight.\n// Returns one segment per contiguous run; `splitGap` must be positive (the\n// caller keeps the whole row when there is nothing to split on).\n// PAF semantics: qstart < qend always; '-' strand CIGAR walks query backward.\nfunction splitCigarOnLargeGaps({\n cigar,\n strand,\n tstart,\n tend,\n qstart,\n qend,\n splitGap\n}) {\n const qStep = strand === '-' ? -1 : 1;\n let tCursor = tstart;\n let qCursor = strand === '-' ? qend : qstart;\n let segTStart = tCursor;\n let segQAnchor = qCursor;\n let segBlockLen = 0;\n const out = [];\n const emit = () => {\n if (tCursor > segTStart || qCursor !== segQAnchor) {\n out.push({\n tstart: segTStart,\n tend: tCursor,\n qstart: Math.min(segQAnchor, qCursor),\n qend: Math.max(segQAnchor, qCursor),\n blockLen: segBlockLen\n });\n }\n };\n\n // Parse CIGAR directly to avoid intermediate array + string-to-number conversions\n let i = 0;\n while (i < cigar.length) {\n let len = 0;\n while (i < cigar.length && cigar.charCodeAt(i) >= 48 && cigar.charCodeAt(i) <= 57) {\n len = len * 10 + cigar.charCodeAt(i++) - 48;\n }\n const op = cigar[i++];\n if ('M=X'.includes(op)) {\n tCursor += len;\n qCursor += len * qStep;\n segBlockLen += len;\n } else if ('DIN'.includes(op)) {\n const isLarge = len >= splitGap;\n if (isLarge) {\n emit();\n }\n if (op === 'I') {\n qCursor += len * qStep;\n } else {\n tCursor += len;\n }\n if (isLarge) {\n segTStart = tCursor;\n segQAnchor = qCursor;\n segBlockLen = 0;\n } else {\n segBlockLen += len;\n }\n }\n // S/H/P (clipping/padding) don't consume target or forward-strand query in PAF\n }\n emit();\n return {\n segments: out,\n closed: tCursor === tend && qCursor === (strand === '-' ? qstart : qend)\n };\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/make-pif/cigar-utils.ts?\n}");
|
|
351
|
-
|
|
352
|
-
/***/ },
|
|
353
|
-
|
|
354
|
-
/***/ "./src/commands/make-pif/index.ts"
|
|
355
|
-
/*!****************************************!*\
|
|
356
|
-
!*** ./src/commands/make-pif/index.ts ***!
|
|
357
|
-
\****************************************/
|
|
358
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
359
|
-
|
|
360
|
-
"use strict";
|
|
361
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _process_utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../process-utils.ts */ \"./src/commands/process-utils.ts\");\n/* harmony import */ var _shared_validators_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/validators.ts */ \"./src/commands/shared/validators.ts\");\n/* harmony import */ var _pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pif-generator.ts */ \"./src/commands/make-pif/pif-generator.ts\");\n\n\n\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n out: {\n type: 'string',\n description: 'Where to write the output file. will write ${file}.pif.gz and ${file}.pif.gz.tbi'\n },\n csi: {\n type: 'boolean',\n description: 'Create a CSI index for the PIF file instead of TBI'\n },\n coarse: {\n type: 'string',\n description: 'Minimum insertion/deletion length (bp) at which a coarse-tier row is split into multiple pieces so each row stays tight — 0 emits an unsplit coarse tier. Defaults to 10000. The no-CIGAR coarse tier (prefix T/Q) is emitted alongside the per-row CIGAR fine tier by default so whole-genome synteny views can auto-switch to it; pass --no-coarse to omit it.'\n },\n 'no-coarse': {\n type: 'boolean',\n description: 'Do not emit the coarse no-CIGAR tier; write only the per-row CIGAR fine tier.'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'creates pairwise indexed PAF (PIF), with bgzip and tabix';\n const examples = ['# creates input.pif.gz and input.pif.gz.tbi in the same directory', '$ jbrowse make-pif input.paf', '', '# specify the output file, also creates output.pif.gz.tbi', '$ jbrowse make-pif input.paf --out output.pif.gz', '', '# use a CSI index for assemblies with chromosomes longer than ~512 Mb', '$ jbrowse make-pif input.paf --csi', '', '# emit an unsplit coarse tier (alongside the fine tier)', '$ jbrowse make-pif input.paf --coarse 0', '', '# emit only the per-row CIGAR fine tier, skipping the coarse tier', '$ jbrowse make-pif input.paf --no-coarse'];\n const notes = 'Use --csi for assemblies containing sequences longer than ~512 Mb. The ' + 'default TBI index cannot address coordinates beyond 2^29 (~536 Mb), so a ' + 'CSI index is required for large chromosomes (e.g. some plant and ' + 'amphibian genomes). Requires sh, sort, bgzip, and tabix on the PATH.';\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n notes,\n usage: 'jbrowse make-pif <file> [options]',\n options\n });\n return;\n }\n const file = positionals[0];\n (0,_shared_validators_ts__WEBPACK_IMPORTED_MODULE_3__.validateFileArgument)(file, 'make-pif', 'paf');\n (0,_shared_validators_ts__WEBPACK_IMPORTED_MODULE_3__.validateRequiredCommands)(['sh', 'sort', 'tabix', 'bgzip']);\n const {\n out,\n csi = false,\n coarse,\n 'no-coarse': noCoarse = false\n } = flags;\n const outputFile = (0,_pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__.getOutputFilename)(file, out);\n // --no-coarse used to silently win over an explicit --coarse, so a run asking\n // for both wrote a file with no coarse tier and said nothing about it\n if (noCoarse && coarse !== undefined) {\n throw new Error('--coarse and --no-coarse are mutually exclusive');\n }\n const coarseSplitGap = noCoarse ? undefined : coarse === undefined ? _pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__.DEFAULT_COARSE_SPLIT_GAP : +coarse;\n if (coarseSplitGap !== undefined && (!Number.isFinite(coarseSplitGap) || coarseSplitGap < 0)) {\n throw new Error(`Invalid --coarse value: ${coarse}`);\n }\n const child = (0,_pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__.spawnSortProcess)(outputFile, csi);\n const stdin = child.stdin;\n // end stdin even if createPIF throws, otherwise the spawned sort/index child\n // is left running with an open stdin\n const stats = await (0,_pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__.createPIF)(file, stdin, coarseSplitGap).finally(() => {\n stdin.end();\n });\n const {\n samples,\n rows,\n skipped\n } = stats;\n // no SIGPIPE exemption here (unlike sort-gff/sort-bed): this pipeline's output\n // is the .pif.gz file, so anything that killed it early left that file broken\n const exit = await (0,_process_utils_ts__WEBPACK_IMPORTED_MODULE_2__.waitForProcessClose)(child);\n if (exit.code !== 0) {\n throw new Error(`PIF sort/index pipeline exited with ${(0,_process_utils_ts__WEBPACK_IMPORTED_MODULE_2__.describeExit)(exit)}`);\n }\n\n // A file that yielded nothing is almost always the wrong file, not an empty\n // alignment: without this the command wrote a valid, indexed, empty PIF and\n // printed the add-track suggestion for it\n if (rows === 0) {\n throw new Error(`No valid PAF rows found in ${file ?? 'stdin'} (${skipped} line(s) had fewer than the 12 mandatory PAF columns). Is this a PAF file?`);\n }\n if (skipped > 0) {\n console.warn(`Warning: skipped ${skipped} of ${rows + skipped} line(s) with fewer than the 12 mandatory PAF columns`);\n }\n\n // An all-vs-all PAF that does not state every pair indexes perfectly well and\n // then draws an empty synteny band for each pair the aligner never emitted,\n // which reads as \"no homology here\" rather than as \"never computed\". This is\n // the moment someone is looking at the file, and the census it needs was\n // already taken on the pass above.\n const missing = (0,_pif_generator_ts__WEBPACK_IMPORTED_MODULE_4__.missingPairs)(stats);\n if (missing.length > 0) {\n const shown = missing.slice(0, 5).map(([a, b]) => `${a}<->${b}`).join(', ');\n const rest = missing.length - Math.min(missing.length, 5);\n console.warn(`Warning: this file has ${samples.size} samples but states only ` + `${samples.size * (samples.size - 1) / 2 - missing.length} of their ` + `${samples.size * (samples.size - 1) / 2} pairs. Synteny bands for the ` + `missing pairs (${shown}${rest > 0 ? `, and ${rest} more` : ''}) will draw ` + `empty. That is what a reference-anchored alignment looks like — only ` + `pairs involving the reference are stated. Order the synteny rows so the ` + `reference sits between the others, use a complete all-vs-all if the ` + `project publishes one, or view a larger cohort as a multiple alignment ` + `(MAF) rather than a stack of pairwise bands.`);\n }\n const indexFile = `${outputFile}.${csi ? 'csi' : 'tbi'}`;\n const nextCommand = samples.size > 0 ? 'Next, add it as an all-vs-all synteny track (PanSN names detected):\\n' + ` jbrowse add-track ${outputFile} --adapterType AllVsAllIndexedPAFAdapter -a ${[...samples].sort().join(',')} --load copy` : 'Next, add it as a synteny track (set -a to your query,target assembly names):\\n' + ` jbrowse add-track ${outputFile} -a query,target --load copy`;\n console.log(`Created ${outputFile} and ${indexFile}\\n\\n${nextCommand}`);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/make-pif/index.ts?\n}");
|
|
362
|
-
|
|
363
|
-
/***/ },
|
|
364
|
-
|
|
365
|
-
/***/ "./src/commands/make-pif/pif-generator.ts"
|
|
366
|
-
/*!************************************************!*\
|
|
367
|
-
!*** ./src/commands/make-pif/pif-generator.ts ***!
|
|
368
|
-
\************************************************/
|
|
369
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
370
|
-
|
|
371
|
-
"use strict";
|
|
372
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DEFAULT_COARSE_SPLIT_GAP: () => (/* binding */ DEFAULT_COARSE_SPLIT_GAP),\n/* harmony export */ createPIF: () => (/* binding */ createPIF),\n/* harmony export */ getOutputFilename: () => (/* binding */ getOutputFilename),\n/* harmony export */ missingPairs: () => (/* binding */ missingPairs),\n/* harmony export */ spawnSortProcess: () => (/* binding */ spawnSortProcess)\n/* harmony export */ });\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:child_process */ \"node:child_process\");\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(node_stream__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var node_stream_promises__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! node:stream/promises */ \"node:stream/promises\");\n/* harmony import */ var node_stream_promises__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(node_stream_promises__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! node:zlib */ \"node:zlib\");\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(node_zlib__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @jbrowse/cigar-utils */ \"../../packages/cigar-utils/src/cigarReorient.ts\");\n/* harmony import */ var _jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @jbrowse/cigar-utils */ \"../../packages/cigar-utils/src/csToCigar.ts\");\n/* harmony import */ var _jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @jbrowse/cigar-utils */ \"../../packages/cigar-utils/src/pafIdentity.ts\");\n/* harmony import */ var _cigar_utils_ts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./cigar-utils.ts */ \"./src/commands/make-pif/cigar-utils.ts\");\n\n\n\n\n\n\n\n\n// Default split gap (bp) for the coarse tier. A row is broken into multiple\n// coarse pieces wherever a CIGAR insertion/deletion is at least this long, so\n// each coarse row's bounding box stays tight. 10kb matches the adapter's\n// default coarseBpPerPxThreshold (~1px at the zoom where the coarse tier is\n// served), so smaller gaps that would be sub-pixel there don't fragment rows.\nconst DEFAULT_COARSE_SPLIT_GAP = 10_000;\n\n// What one pass over the PAF observed, for the caller's summary and warnings.\n// `samples` collects the PanSN sample prefixes (`sample#…` → `sample`) seen: a\n// non-empty set means the input is all-vs-all rather than pairwise, and the\n// samples are the assembly names to suggest in the add-track command. `skipped`\n// counts rows that were not valid PAF, which would otherwise leave an empty file\n// and a success message.\n\nfunction panSNSample(refName) {\n const i = refName.indexOf('#');\n return i === -1 ? undefined : refName.slice(0, i);\n}\nfunction addPanSNPair(stats, c1, c2) {\n const a = panSNSample(c1);\n const b = panSNSample(c2);\n if (a !== undefined) {\n stats.samples.add(a);\n }\n if (b !== undefined) {\n stats.samples.add(b);\n }\n if (a !== undefined && b !== undefined && a !== b) {\n stats.pairs.add(a < b ? `${a}\\u0000${b}` : `${b}\\u0000${a}`);\n }\n}\n\n/**\n * The sample pairs a complete all-vs-all would state but this file does not.\n * Empty for a pairwise PAF (no PanSN names) and for a genuinely complete file.\n */\nfunction missingPairs({\n samples,\n pairs\n}) {\n const sorted = [...samples].sort();\n const out = [];\n for (let i = 0; i < sorted.length; i++) {\n for (let j = i + 1; j < sorted.length; j++) {\n const a = sorted[i];\n const b = sorted[j];\n if (!pairs.has(`${a}\\u0000${b}`)) {\n out.push([a, b]);\n }\n }\n }\n return out;\n}\n\n// One piece of a row's coarse tier: its bounds plus the num_matches/block_len it\n// reports. Multi-piece rows get the row's PAF totals apportioned by aligned\n// length, so every piece implies the same identity as the row (and as the `de:f:`\n// written beside it) and the pieces sum back to the row.\n\nfunction coarsePieces({\n cigar,\n strand,\n tstart,\n tend,\n qstart,\n qend,\n numMatches,\n blockLen,\n splitGap\n}) {\n const whole = {\n tstart,\n tend,\n qstart,\n qend,\n numMatches,\n blockLen\n };\n const split = cigar && splitGap > 0 ? (0,_cigar_utils_ts__WEBPACK_IMPORTED_MODULE_9__.splitCigarOnLargeGaps)({\n cigar,\n strand,\n tstart,\n tend,\n qstart,\n qend,\n splitGap\n }) : undefined;\n // The walk's reconstruction is taken only when it CLOSED on the row's own far\n // corner (see `CigarSplit.closed`) — otherwise the columns are what the fine\n // tier draws and the coarse row must not drift off them.\n //\n // Closure rather than a piece count: `segments.length < 2` read as \"nothing to\n // split on\", but a large gap at either END also yields a single piece, a\n // genuine tightening that was being thrown away for the loose box. It is the\n // ordinary case below the default `--coarse`. The count also never noticed a\n // MULTI-piece walk that failed to close, which is the case it was written for.\n return split?.closed && split.segments.length > 0 ? split.segments.map(seg => ({\n ...seg,\n numMatches: blockLen > 0 ? Math.round(numMatches * seg.blockLen / blockLen) : 0\n })) : [whole];\n}\n\n// A PIF row carries exactly ONE alignment string — `cg:Z:`, in the orientation\n// of the perspective it is indexed under. A minimap2 `cs:Z:` is folded into that\n// CIGAR and never emitted, for two reasons:\n//\n// - `cs` has its own orientation, and reorienting it means reversing op order\n// AND reverse-complementing the spelled-out bases. Keeping an unflipped `cs`\n// beside a flipped `cg` is silently wrong rather than merely lossy:\n// `SyntenyFeature.forEachMismatch` prefers `cs`, so a row from\n// `minimap2 -c --cs` (which emits both tags) drew every indel with reversed\n// sense from the query perspective.\n// - `csToCigar` yields `=`/`X`, so folding a `cs` in is strictly MORE\n// informative than minimap2's own M-style `cg` — which is why `cs` wins when\n// a row carries both. The substituted base letters are the only thing lost;\n// mismatch positions survive as `X`.\n//\n// Returns the rewritten optional-tag list and where the surviving alignment\n// string sits in it (-1 when the row carries none).\nfunction foldCsIntoCg(tags) {\n const csIdx = tags.findIndex(f => f.startsWith('cs:Z'));\n if (csIdx === -1) {\n return {\n tags,\n cigarIdx: tags.findIndex(f => f.startsWith('cg:Z'))\n };\n }\n const folded = `cg:Z:${(0,_jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_7__.csToCigar)(tags[csIdx].slice(5))}`;\n const rewritten = tags.flatMap((f, i) => i === csIdx ? [folded] : f.startsWith('cg:Z') ? [] : [f]);\n return {\n tags: rewritten,\n cigarIdx: rewritten.indexOf(folded)\n };\n}\n\n// Coarse identity must match the fine tier exactly, or coloring jumps at the\n// zoom where the view switches tiers. So it is written off the SAME function the\n// adapters read the fine tier with (de:f: tag, then odgi's id:f:, then\n// num_matches/block_len) rather than a private copy of that chain — a copy is\n// what previously skipped the id:f: rung. A CIGAR recompute is deliberately not\n// in the chain at all: a cg (M-style) CIGAR folds mismatches into M, so it would\n// report ~0 divergence (spurious 100% identity) for a divergent alignment.\n//\n// When the row's own de:f: is what the reader lands on, that string is passed\n// through byte-for-byte rather than recomputed: a round trip through toFixed(6)\n// would silently truncate a 7-decimal tag and drift the two tiers apart by the\n// exact mechanism this is guarding against.\nfunction coarseDivergence(tags, numMatches, blockLen) {\n const rawDe = tags.find(f => f.startsWith('de:f:'))?.slice(5);\n const identity = (0,_jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_8__.pafIdentity)({\n de: rawDe,\n id: tags.find(f => f.startsWith('id:f:'))?.slice(5),\n numMatches,\n blockLen\n });\n return rawDe !== undefined && 1 - +rawDe === identity ? rawDe : (1 - identity).toFixed(6);\n}\nfunction pifRow(fields) {\n return `${fields.join('\\t')}\\n`;\n}\nfunction processLine(line, coarseSplitGap, stats) {\n if (line.startsWith('#')) {\n return '';\n }\n const parts = line.split('\\t');\n // A valid PAF row has 12 mandatory columns; anything shorter (blank, or\n // truncated) would produce NaN coords, so skip it rather than emit garbage.\n if (parts.length < 12) {\n stats.skipped++;\n return '';\n }\n stats.rows++;\n // rest[0]=num_matches, rest[1]=block_len, rest[2]=mapq, rest[3+]=optional tags\n const [c1, l1, s1, e1, strand, c2, l2, s2, e2, ...rest] = parts;\n addPanSNPair(stats, c1, c2);\n const {\n tags,\n cigarIdx\n } = foldCsIntoCg(rest);\n const cigar = cigarIdx === -1 ? undefined : tags[cigarIdx].slice(5);\n\n // the t-row keeps the CIGAR as PAF spelled it (target perspective); the q-row\n // re-orients it for the query perspective it is indexed under\n const queryTags = cigar === undefined ? tags : tags.map((f, i) => i === cigarIdx ? `cg:Z:${strand === '-' ? (0,_jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_6__.flipCigar)(cigar) : (0,_jbrowse_cigar_utils__WEBPACK_IMPORTED_MODULE_6__.swapIndelCigar)(cigar)}` : f);\n const fineRows = pifRow([`t${c2}`, l2, s2, e2, strand, c1, l1, s1, e1, ...tags]) + pifRow([`q${c1}`, l1, s1, e1, strand, c2, l2, s2, e2, ...queryTags]);\n if (coarseSplitGap === undefined) {\n return fineRows;\n }\n const numMatches = +tags[0];\n const blockLen = +tags[1];\n const mapq = tags[2];\n // Every optional tag except the alignment string itself rides along, so a\n // click on a coarse ribbon shows the same attributes as the same alignment\n // does zoomed in (rustybam's tags, minimap2's tp/cm/s1, odgi's id). Only the\n // CIGAR is dropped — dropping it is the entire point of the tier — and de:f:,\n // which is rewritten below. No `cs:Z:` can reach here: it was folded into the\n // cg above, since a PIF row carries one alignment string.\n const passthrough = tags.slice(3).filter(f => !f.startsWith('cg:Z:') && !f.startsWith('de:f:'));\n const de = coarseDivergence(tags, numMatches, blockLen);\n return fineRows + coarsePieces({\n cigar,\n strand: strand,\n tstart: +s2,\n tend: +e2,\n qstart: +s1,\n qend: +e1,\n numMatches,\n blockLen,\n splitGap: coarseSplitGap\n }).flatMap(piece => {\n const tail = [piece.numMatches, piece.blockLen, mapq, ...passthrough, `de:f:${de}`];\n const {\n tstart,\n tend,\n qstart,\n qend\n } = piece;\n return [pifRow([`T${c2}`, l2, tstart, tend, strand, c1, l1, qstart, qend, ...tail]), pifRow([`Q${c1}`, l1, qstart, qend, strand, c2, l2, tstart, tend, ...tail])];\n }).join('');\n}\nfunction makePifTransform(coarseSplitGap, stats) {\n let tail = '';\n return new node_stream__WEBPACK_IMPORTED_MODULE_3__.Transform({\n transform(chunk, _enc, callback) {\n const data = tail + chunk.toString('utf8');\n const lastNl = data.lastIndexOf('\\n');\n if (lastNl === -1) {\n tail = data;\n callback();\n return;\n }\n tail = data.slice(lastNl + 1);\n callback(null, data.slice(0, lastNl).split('\\n').filter(Boolean).map(l => processLine(l, coarseSplitGap, stats)).join(''));\n },\n flush(callback) {\n callback(null, tail ? processLine(tail, coarseSplitGap, stats) : '');\n }\n });\n}\n\n// resolves to what the pass observed: the PanSN samples (empty for a pairwise\n// PAF), so the caller can suggest the right adapter and assembly names, and the\n// row/skip counts so it can warn on a file that was not PAF at all\nasync function createPIF(filename, stream, coarseSplitGap) {\n const stats = {\n samples: new Set(),\n pairs: new Set(),\n rows: 0,\n skipped: 0\n };\n const transform = makePifTransform(coarseSplitGap, stats);\n if (filename) {\n const source = (0,node_fs__WEBPACK_IMPORTED_MODULE_1__.createReadStream)(filename);\n await (/\\.b?gz$/i.test(filename) ? (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_4__.pipeline)(source, (0,node_zlib__WEBPACK_IMPORTED_MODULE_5__.createGunzip)(), transform, stream) : (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_4__.pipeline)(source, transform, stream));\n } else {\n await (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_4__.pipeline)(process.stdin, transform, stream);\n }\n return stats;\n}\nfunction spawnSortProcess(outputFile, useCsi) {\n const sortCmd = `sort -t\"\\`printf '\\\\t'\\`\" -k1,1 -k3,3n`;\n const bgzipCommand = `bgzip > \"$1\"`;\n const tabixCommand = `tabix ${useCsi ? '-C ' : ''}-s1 -b3 -e4 -0 \"$1\"`;\n // `&&` (not `;`) so a bgzip failure aborts before tabix runs and propagates\n // as the pipeline's exit code. The output path is passed as the shell's \"$1\"\n // positional rather than interpolated into the command string, so a path\n // with shell metacharacters (`\"`, `$(...)`, backticks) can't break out and\n // execute — same technique as sort-utils.ts. useCsi is a fixed literal.\n const fullCommand = `${sortCmd} | ${bgzipCommand} && ${tabixCommand}`;\n return (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawn)('sh', ['-c', fullCommand, 'sh', outputFile], {\n env: {\n ...process.env,\n LC_ALL: 'C'\n },\n stdio: ['pipe', process.stdout, process.stderr]\n });\n}\nfunction getOutputFilename(file, out) {\n // strip .paf or .paf.gz so a gzipped input doesn't yield input.paf.gz.pif.gz\n const base = node_path__WEBPACK_IMPORTED_MODULE_2___default().basename(file || 'output').replace(/\\.paf(\\.gz)?$/i, '');\n return out || `${base}.pif.gz`;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/make-pif/pif-generator.ts?\n}");
|
|
373
|
-
|
|
374
|
-
/***/ },
|
|
375
|
-
|
|
376
|
-
/***/ "./src/commands/process-utils.ts"
|
|
377
|
-
/*!***************************************!*\
|
|
378
|
-
!*** ./src/commands/process-utils.ts ***!
|
|
379
|
-
\***************************************/
|
|
380
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
381
|
-
|
|
382
|
-
"use strict";
|
|
383
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ describeExit: () => (/* binding */ describeExit),\n/* harmony export */ diedOfSigpipe: () => (/* binding */ diedOfSigpipe),\n/* harmony export */ waitForProcessClose: () => (/* binding */ waitForProcessClose)\n/* harmony export */ });\n// how a spawned child ended. `code` is null when the child was killed by a\n// signal rather than exiting, in which case `signal` names it.\n\nasync function waitForProcessClose(child) {\n return new Promise((resolve, reject) => {\n child.on('close', (code, signal) => {\n resolve({\n code,\n signal\n });\n });\n child.on('error', err => {\n reject(err);\n });\n });\n}\n\n// A downstream consumer closing the pipe early — `jbrowse sort-bed big.bed |\n// head` — is that consumer's choice, not a failure of ours. `sh` reports a\n// pipeline member's death by SIGPIPE as 128+13 rather than propagating the\n// signal, so both spellings have to be recognized.\nfunction diedOfSigpipe({\n code,\n signal\n}) {\n return signal === 'SIGPIPE' || code === 128 + 13;\n}\n\n// for an error message: the exit code, or the signal when the child was killed\nfunction describeExit({\n code,\n signal\n}) {\n return code === null ? `signal ${signal}` : `code ${code}`;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/process-utils.ts?\n}");
|
|
384
|
-
|
|
385
|
-
/***/ },
|
|
386
|
-
|
|
387
|
-
/***/ "./src/commands/remove-track.ts"
|
|
388
|
-
/*!**************************************!*\
|
|
389
|
-
!*** ./src/commands/remove-track.ts ***!
|
|
390
|
-
\**************************************/
|
|
391
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
392
|
-
|
|
393
|
-
"use strict";
|
|
394
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n },\n target: {\n type: 'string',\n description: 'Path to config file in JB2 installation directory to write out to'\n },\n out: {\n type: 'string',\n description: 'Synonym for target'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n const description = 'Remove a track configuration from a JBrowse 2 configuration. Be aware that this can cause crashes in saved sessions that refer to this track!';\n const usage = 'jbrowse remove-track <trackId> [options]';\n const examples = ['# remove a track from the config.json in the current directory', '$ jbrowse remove-track my_track_id', '', '# remove a track from a config.json in a specific installation directory', '$ jbrowse remove-track my_track_id --out /path/to/jb2/', '', '# remove a track from a specific config file', '$ jbrowse remove-track my_track_id --target /path/to/jb2/config.json'];\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n usage,\n options\n });\n return;\n }\n const trackId = positionals[0];\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.requirePositional)(trackId, 'trackId', usage);\n const target = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.resolveConfigPath)(flags.target, flags.out);\n const config = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readConfigFile)(target);\n const tracks = config.tracks ?? [];\n const remaining = tracks.filter(track => track.trackId !== trackId);\n if (remaining.length === tracks.length) {\n console.log(`No track found with trackId: ${trackId}`);\n } else {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.writeJsonFile)(target, {\n ...config,\n tracks: remaining\n });\n console.log(`Removed track with trackId: ${trackId} from ${target}`);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/remove-track.ts?\n}");
|
|
395
|
-
|
|
396
|
-
/***/ },
|
|
397
|
-
|
|
398
|
-
/***/ "./src/commands/set-default-session.ts"
|
|
399
|
-
/*!*********************************************!*\
|
|
400
|
-
!*** ./src/commands/set-default-session.ts ***!
|
|
401
|
-
\*********************************************/
|
|
402
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
403
|
-
|
|
404
|
-
"use strict";
|
|
405
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n\n\nconst description = 'Set a default session with views and tracks';\nconst examples = ['# set default session for the config.json in your current directory', '$ jbrowse set-default-session --session /path/to/default/session.json', '', '# make session.json the defaultSession on the specified target config.json file', '$ jbrowse set-default-session --target /path/to/jb2/installation/config.json --session session.json', '', '# override the name stored in the session file', '$ jbrowse set-default-session --session session.json --name \"My default view\"', '', '# pipe a session in from another program', `$ jq '.defaultSession' other/config.json | jbrowse set-default-session --session -`, '', '# print the current default session', '$ jbrowse set-default-session --currentSession', '', '# remove the existing default session', '$ jbrowse set-default-session --delete'];\nconst options = {\n session: {\n type: 'string',\n short: 's',\n description: 'set path to a file containing session in json format, or \"-\" to read it from stdin (required, unless using delete/currentSession flags)'\n },\n name: {\n type: 'string',\n short: 'n',\n description: 'Give a name for the default session (overrides any name in the session file; defaults to \"New Default Session\")'\n },\n currentSession: {\n type: 'boolean',\n short: 'c',\n description: 'List out the current default session'\n },\n target: {\n type: 'string',\n description: 'path to config file in JB2 installation directory to write out to'\n },\n out: {\n type: 'string',\n description: 'synonym for target'\n },\n delete: {\n type: 'boolean',\n description: 'Delete any existing default session.'\n },\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Show help'\n }\n};\nasync function run(args) {\n const {\n values: runFlags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n options,\n args\n });\n if (runFlags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n usage: 'jbrowse set-default-session [options]',\n options\n });\n return;\n }\n const {\n session,\n name,\n currentSession,\n delete: deleteDefaultSession\n } = runFlags;\n const target = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.resolveConfigPath)(runFlags.target, runFlags.out);\n const configContents = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readConfigFile)(target);\n if (deleteDefaultSession) {\n configContents.defaultSession = undefined;\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.writeJsonFile)(target, configContents);\n } else if (currentSession) {\n console.log(`The current default session is ${JSON.stringify(configContents.defaultSession)}`);\n } else if (!session) {\n throw new Error('Please provide a --session file');\n } else {\n const fileSession = await readDefaultSessionFile(session);\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.writeJsonFile)(target, {\n ...configContents,\n // precedence: explicit --name > the session file's own name > fallback\n defaultSession: {\n name: 'New Default Session',\n ...fileSession,\n ...(name !== undefined ? {\n name\n } : {})\n }\n });\n }\n}\nasync function readDefaultSessionFile(defaultSessionFile) {\n const contents = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readJsonFile)(defaultSessionFile);\n // unwrap the top-level \"session\" if it exists, such as in files created by\n // \"File -> Export session\"\n const session = contents.session ?? contents;\n // spreading a string or an array here silently wrote a defaultSession of\n // numeric keys, so say what is wrong with the file instead\n if (!(0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.isRecord)(session)) {\n throw new Error(`${defaultSessionFile} does not contain a session object${contents.session === undefined ? '' : ' under its \"session\" key'}`);\n }\n return session;\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/set-default-session.ts?\n}");
|
|
406
|
-
|
|
407
|
-
/***/ },
|
|
408
|
-
|
|
409
|
-
/***/ "./src/commands/shared/config-operations.ts"
|
|
410
|
-
/*!**************************************************!*\
|
|
411
|
-
!*** ./src/commands/shared/config-operations.ts ***!
|
|
412
|
-
\**************************************************/
|
|
413
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
414
|
-
|
|
415
|
-
"use strict";
|
|
416
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ findAndUpdateOrAdd: () => (/* binding */ findAndUpdateOrAdd),\n/* harmony export */ saveConfigAndReport: () => (/* binding */ saveConfigAndReport)\n/* harmony export */ });\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n\nfunction findAndUpdateOrAdd({\n items,\n newItem,\n idField,\n getId,\n force,\n itemType\n}) {\n const newId = getId(newItem);\n const idx = items.findIndex(item => getId(item) === newId);\n if (idx !== -1) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.debug)(`Found existing ${itemType} ${newId} in configuration`);\n if (force) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.debug)(`Overwriting ${itemType} ${newId} in configuration`);\n const updatedItems = [...items];\n updatedItems[idx] = newItem;\n return {\n updatedItems,\n wasOverwritten: true\n };\n } else {\n throw new Error(`Cannot add ${itemType} with ${idField} ${newId}, a ${itemType} with that ${idField} already exists`);\n }\n } else {\n return {\n updatedItems: [...items, newItem],\n wasOverwritten: false\n };\n }\n}\nasync function saveConfigAndReport({\n config,\n target,\n itemType,\n itemName,\n itemId,\n wasOverwritten\n}) {\n ;(0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.debug)(`Writing configuration to file ${target}`);\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.writeJsonFile)(target, config);\n const idPart = itemId ? ` and ${itemType}Id \"${itemId}\"` : '';\n console.log(`${wasOverwritten ? 'Overwrote' : 'Added'} ${itemType} with name \"${itemName}\"${idPart} ${wasOverwritten ? 'in' : 'to'} ${target}`);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/shared/config-operations.ts?\n}");
|
|
417
|
-
|
|
418
|
-
/***/ },
|
|
419
|
-
|
|
420
|
-
/***/ "./src/commands/shared/sort-utils.ts"
|
|
421
|
-
/*!*******************************************!*\
|
|
422
|
-
!*** ./src/commands/shared/sort-utils.ts ***!
|
|
423
|
-
\*******************************************/
|
|
424
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
425
|
-
|
|
426
|
-
"use strict";
|
|
427
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BED_CONFIG: () => (/* binding */ BED_CONFIG),\n/* harmony export */ GFF_CONFIG: () => (/* binding */ GFF_CONFIG),\n/* harmony export */ runSort: () => (/* binding */ runSort),\n/* harmony export */ spawnSortProcess: () => (/* binding */ spawnSortProcess)\n/* harmony export */ });\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:child_process */ \"node:child_process\");\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var tmp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tmp */ \"../../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp/lib/tmp.js\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _process_utils_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../process-utils.ts */ \"./src/commands/process-utils.ts\");\n/* harmony import */ var _validators_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./validators.ts */ \"./src/commands/shared/validators.ts\");\n\n\n\n\n\n\nconst BED_CONFIG = {\n description: 'Sort a BED file for tabix. It is `sort -k1,1 -k2,2n` with LC_ALL=C and a tab separator, plus every line starting with # kept at the top rather than sorted into the data. Takes a file, or the same data on stdin',\n examples: ['# sort bed and pipe to bgzip', '$ jbrowse sort-bed input.bed | bgzip > sorted.bed.gz', '$ tabix sorted.bed.gz', '', '# OR pipe data via stdin: cat file.bed | jbrowse sort-bed | bgzip > sorted.bed.gz'],\n sortColumn: 2,\n fileType: 'bed'\n};\nconst GFF_CONFIG = {\n description: 'Sort a GFF or GTF for tabix — the two share a refname/start column layout. It is `sort -k1,1 -k4,4n` with LC_ALL=C and a tab separator, plus every line starting with # kept at the top rather than sorted into the data. Takes a file, or the same data on stdin',\n examples: ['# sort gff and pipe to bgzip', '$ jbrowse sort-gff input.gff | bgzip > sorted.gff.gz', '$ tabix sorted.gff.gz', '', '# sort gff from stdin', '$ cat input.gff | jbrowse sort-gff | bgzip > sorted.gff.gz', '', '# also works on GTF', '$ jbrowse sort-gff input.gtf | bgzip > sorted.gtf.gz', '$ tabix -p gff sorted.gtf.gz'],\n sortColumn: 4,\n fileType: 'gff'\n};\nfunction getMinimalEnvironment() {\n return {\n ...process.env,\n LC_ALL: 'C'\n };\n}\n\n// The file path is passed to the shell as the positional argument \"$1\" rather\n// than interpolated into the command string, so a path containing shell\n// metacharacters (`\"`, `$(...)`, backticks) cannot break out and execute. Only\n// sortColumn, an integer from the BED/GFF configs, is interpolated.\nfunction sortPipeline(sortColumn) {\n return `grep \"^#\" \"$1\"; grep -v \"^#\" \"$1\" | sort -t\"\\`printf '\\\\t'\\`\" -k1,1 -k${sortColumn},${sortColumn}n`;\n}\nfunction createSortCommandForStdin(sortColumn) {\n // discardDescriptor: we only want the path — the shell below opens the file\n // itself, so tmp's own handle would just be a descriptor left open for the\n // life of the process\n const tmpFile = (0,tmp__WEBPACK_IMPORTED_MODULE_2__.fileSync)({\n prefix: 'jbrowse-sort',\n discardDescriptor: true\n }).name;\n // trap on EXIT removes the temp file whether or not the sort pipeline\n // succeeds (a bare `&& rm` leaks the file when the pipeline fails)\n return {\n command: `trap 'rm -f \"$1\"' EXIT; cat > \"$1\" && (${sortPipeline(sortColumn)})`,\n pathArg: tmpFile\n };\n}\nfunction createSortCommandForFile(file, sortColumn) {\n return {\n command: `(${sortPipeline(sortColumn)})`,\n pathArg: file\n };\n}\nfunction spawnSortProcess(file, sortColumn) {\n const {\n command,\n pathArg\n } = file ? createSortCommandForFile(file, sortColumn) : createSortCommandForStdin(sortColumn);\n\n // 'sh' becomes $0, pathArg becomes $1 inside the command\n return (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawn)('sh', ['-c', command, 'sh', pathArg], {\n env: getMinimalEnvironment(),\n stdio: 'inherit'\n });\n}\nasync function runSort(config, commandName, args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h'\n }\n };\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_1__.parseArgs)({\n args,\n options,\n allowPositionals: true\n });\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.printHelp)({\n description: config.description,\n examples: config.examples,\n usage: `jbrowse ${commandName} [file] [options]`,\n options\n });\n return;\n }\n const file = positionals[0];\n (0,_validators_ts__WEBPACK_IMPORTED_MODULE_5__.validateFileArgument)(file, commandName, config.fileType);\n (0,_validators_ts__WEBPACK_IMPORTED_MODULE_5__.validateRequiredCommands)(['sh', 'sort', 'grep']);\n const child = spawnSortProcess(file, config.sortColumn);\n const exit = await (0,_process_utils_ts__WEBPACK_IMPORTED_MODULE_4__.waitForProcessClose)(child);\n\n // These commands exist to be piped (`jbrowse sort-bed in.bed | bgzip > …`), so\n // a consumer that stops reading early — `| head`, `| grep -q` — must not be\n // reported as a sort failure. It used to exit 1 with \"exited with code 141\".\n if ((0,_process_utils_ts__WEBPACK_IMPORTED_MODULE_4__.diedOfSigpipe)(exit)) {\n return;\n }\n if (exit.code !== 0) {\n throw new Error(`Sort process exited with ${(0,_process_utils_ts__WEBPACK_IMPORTED_MODULE_4__.describeExit)(exit)}`);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/shared/sort-utils.ts?\n}");
|
|
428
|
-
|
|
429
|
-
/***/ },
|
|
430
|
-
|
|
431
|
-
/***/ "./src/commands/shared/validators.ts"
|
|
432
|
-
/*!*******************************************!*\
|
|
433
|
-
!*** ./src/commands/shared/validators.ts ***!
|
|
434
|
-
\*******************************************/
|
|
435
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
436
|
-
|
|
437
|
-
"use strict";
|
|
438
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validateFileArgument: () => (/* binding */ validateFileArgument),\n/* harmony export */ validateRequiredCommands: () => (/* binding */ validateRequiredCommands)\n/* harmony export */ });\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:child_process */ \"node:child_process\");\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_child_process__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_1__);\n\n\nfunction validateFileArgument(file, commandName, fileType) {\n if (file) {\n // The sort pipeline's exit status is `sort`'s, which succeeds on empty\n // input, so a missing/unreadable file would otherwise \"succeed\" with empty\n // output. Fail loudly here instead.\n if (!(0,node_fs__WEBPACK_IMPORTED_MODULE_1__.statSync)(file, {\n throwIfNoEntry: false\n })?.isFile()) {\n throw new Error(`Input file does not exist or is not a regular file: ${file}`);\n }\n try {\n ;(0,node_fs__WEBPACK_IMPORTED_MODULE_1__.accessSync)(file, node_fs__WEBPACK_IMPORTED_MODULE_1__.constants.R_OK);\n } catch {\n throw new Error(`Input file is not readable: ${file}`);\n }\n } else if (process.stdin.isTTY) {\n throw new Error(`Missing required argument: file\\n` + `Usage: jbrowse ${commandName} <file>\\n` + ` OR pipe data via stdin: cat file.${fileType} | jbrowse ${commandName}`);\n }\n}\n\n// Replaces command-exists: is `command` runnable? On POSIX, `command -v` (a\n// shell builtin, so invoked via `sh`) resolves builtins, PATH entries, and\n// absolute paths; on Windows, `where` does the same. The name is passed as an\n// argv item, never interpolated into the shell, so it can't be injected.\nfunction commandExistsSync(command) {\n try {\n if (process.platform === 'win32') {\n (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.execFileSync)('where', [command], {\n stdio: 'ignore'\n });\n } else {\n (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.execFileSync)('sh', ['-c', 'command -v \"$1\"', 'sh', command], {\n stdio: 'ignore'\n });\n }\n return true;\n } catch {\n return false;\n }\n}\nfunction validateRequiredCommands(requiredCommands) {\n const missingCommands = requiredCommands.filter(cmd => !commandExistsSync(cmd));\n if (missingCommands.length > 0) {\n throw new Error(`Unable to run command, requires a unix type environment with the following available: ${requiredCommands.join(', ')}. Missing: ${missingCommands.join(', ')}`);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/shared/validators.ts?\n}");
|
|
439
|
-
|
|
440
|
-
/***/ },
|
|
441
|
-
|
|
442
|
-
/***/ "./src/commands/sort-bed.ts"
|
|
443
|
-
/*!**********************************!*\
|
|
444
|
-
!*** ./src/commands/sort-bed.ts ***!
|
|
445
|
-
\**********************************/
|
|
446
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
447
|
-
|
|
448
|
-
"use strict";
|
|
449
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var _shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared/sort-utils.ts */ \"./src/commands/shared/sort-utils.ts\");\n\nasync function run(args) {\n return (0,_shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__.runSort)(_shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__.BED_CONFIG, 'sort-bed', args);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/sort-bed.ts?\n}");
|
|
450
|
-
|
|
451
|
-
/***/ },
|
|
452
|
-
|
|
453
|
-
/***/ "./src/commands/sort-gff.ts"
|
|
454
|
-
/*!**********************************!*\
|
|
455
|
-
!*** ./src/commands/sort-gff.ts ***!
|
|
456
|
-
\**********************************/
|
|
457
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
458
|
-
|
|
459
|
-
"use strict";
|
|
460
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var _shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shared/sort-utils.ts */ \"./src/commands/shared/sort-utils.ts\");\n\nasync function run(args) {\n return (0,_shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__.runSort)(_shared_sort_utils_ts__WEBPACK_IMPORTED_MODULE_0__.GFF_CONFIG, 'sort-gff', args);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/sort-gff.ts?\n}");
|
|
461
|
-
|
|
462
|
-
/***/ },
|
|
463
|
-
|
|
464
|
-
/***/ "./src/commands/text-index/adapter-utils.ts"
|
|
465
|
-
/*!**************************************************!*\
|
|
466
|
-
!*** ./src/commands/text-index/adapter-utils.ts ***!
|
|
467
|
-
\**************************************************/
|
|
468
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
469
|
-
|
|
470
|
-
"use strict";
|
|
471
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createTrixAdapter: () => (/* binding */ createTrixAdapter)\n/* harmony export */ });\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/trixPaths.ts\");\n\nfunction createTrixAdapter(name, assemblyNames, idSuffix = 'index') {\n const uris = (0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_0__.trixFileUris)(name);\n return {\n type: 'TrixTextSearchAdapter',\n textSearchAdapterId: `${(0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_0__.sanitizeForFilename)(name)}-${idSuffix}`,\n ixFilePath: {\n uri: uris.ix,\n locationType: 'UriLocation'\n },\n ixxFilePath: {\n uri: uris.ixx,\n locationType: 'UriLocation'\n },\n metaFilePath: {\n uri: uris.meta,\n locationType: 'UriLocation'\n },\n assemblyNames\n };\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/adapter-utils.ts?\n}");
|
|
472
|
-
|
|
473
|
-
/***/ },
|
|
474
|
-
|
|
475
|
-
/***/ "./src/commands/text-index/aggregate.ts"
|
|
476
|
-
/*!**********************************************!*\
|
|
477
|
-
!*** ./src/commands/text-index/aggregate.ts ***!
|
|
478
|
-
\**********************************************/
|
|
479
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
480
|
-
|
|
481
|
-
"use strict";
|
|
482
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ aggregateIndex: () => (/* binding */ aggregateIndex)\n/* harmony export */ });\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _adapter_utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adapter-utils.ts */ \"./src/commands/text-index/adapter-utils.ts\");\n/* harmony import */ var _config_utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-utils.ts */ \"./src/commands/text-index/config-utils.ts\");\n/* harmony import */ var _indexing_utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./indexing-utils.ts */ \"./src/commands/text-index/indexing-utils.ts\");\n\n\n\n\nasync function aggregateIndex(flags) {\n const {\n out,\n target,\n tracks,\n excludeTracks,\n assemblies,\n attributes,\n quiet,\n force,\n exclude,\n include,\n dryrun,\n prefixSize\n } = flags;\n const {\n config,\n configPath,\n outLocation\n } = await (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.loadConfigForIndexing)(target, out);\n const existing = config.aggregateTextSearchAdapters ?? [];\n\n // sequential, not Promise.all: each assembly's indexer owns the progress bar\n // and streams whole files through ixIxx\n const written = [];\n for (const asm of (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.getAssemblyNames)(config, assemblies)) {\n const trackConfigs = (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.getTrackConfigs)(config, (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.parseCommaSeparatedString)(tracks), asm, (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.parseCommaSeparatedString)(excludeTracks));\n if (!trackConfigs.length) {\n console.log(`Indexing assembly ${asm}...(no tracks found)...`);\n continue;\n }\n console.log(`Indexing assembly ${asm}...`);\n if (dryrun) {\n console.log((0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.formatDryRun)(trackConfigs));\n continue;\n }\n const trixConf = (0,_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_1__.createTrixAdapter)(asm, [asm]);\n if (!force && existing.some(x => x.textSearchAdapterId === trixConf.textSearchAdapterId)) {\n console.log(`Note: ${asm} has already been indexed with this configuration, use --force to overwrite this assembly. Skipping for now`);\n continue;\n }\n await (0,_indexing_utils_ts__WEBPACK_IMPORTED_MODULE_3__.indexDriver)({\n trackConfigs,\n outLocation,\n name: asm,\n assemblyNames: [asm],\n ...(0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.prepareIndexDriverFlags)({\n attributes,\n exclude,\n include,\n quiet,\n prefixSize\n })\n });\n written.push(trixConf);\n }\n if (!dryrun) {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.writeJsonFile)(configPath, {\n ...config,\n // upsert by adapter id: a Map keyed on it keeps the first occurrence's\n // position while the last value wins, so re-indexing an assembly replaces\n // its adapter in place and a new one lands at the end\n aggregateTextSearchAdapters: [...new Map([...existing, ...written].map(a => [a.textSearchAdapterId, a])).values()]\n });\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/aggregate.ts?\n}");
|
|
483
|
-
|
|
484
|
-
/***/ },
|
|
485
|
-
|
|
486
|
-
/***/ "./src/commands/text-index/command.ts"
|
|
487
|
-
/*!********************************************!*\
|
|
488
|
-
!*** ./src/commands/text-index/command.ts ***!
|
|
489
|
-
\********************************************/
|
|
490
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
491
|
-
|
|
492
|
-
"use strict";
|
|
493
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/util.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _index_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./index.ts */ \"./src/commands/text-index/index.ts\");\n\n\n\n\nasync function run(args) {\n const options = {\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Show CLI help'\n },\n tracks: {\n type: 'string',\n description: 'Specific tracks to index, formatted as comma separated trackIds. If unspecified, indexes all available tracks'\n },\n excludeTracks: {\n type: 'string',\n description: 'Specific tracks to exclude from indexing, formatted as comma separated trackIds. To exclude a track permanently, set metadata.skipTextIndex on it in config.json instead (see Notes)'\n },\n target: {\n type: 'string',\n description: 'Path to config file in JB2 installation directory to read from.'\n },\n out: {\n type: 'string',\n description: 'Synonym for target'\n },\n attributes: {\n type: 'string',\n description: 'Comma separated list of attributes to index',\n default: _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_1__.defaultAttributesToIndex.join(',')\n },\n assemblies: {\n type: 'string',\n short: 'a',\n description: 'Specify the assembl(ies) to create an index for. If unspecified, creates an index for each assembly in the config'\n },\n force: {\n type: 'boolean',\n default: false,\n description: 'Overwrite previously existing indexes'\n },\n quiet: {\n type: 'boolean',\n short: 'q',\n default: false,\n description: 'Hide the progress bars'\n },\n perTrack: {\n type: 'boolean',\n default: false,\n description: 'If set, creates an index per track'\n },\n exclude: {\n type: 'string',\n description: 'Comma separated list of feature types to exclude from indexing',\n default: 'CDS,exon'\n },\n include: {\n type: 'string',\n description: 'Comma separated list of feature types to index, dropping every other type. Unset by default, which indexes every type --exclude does not name. GFF3 only'\n },\n prefixSize: {\n type: 'string',\n description: 'Specify the prefix size for the ixx index. We attempt to automatically calculate this, but you can manually specify this too. If many genes have similar gene IDs e.g. Z000000001, Z000000002 the prefix size should be larger so that they get split into different bins'\n },\n file: {\n type: 'string',\n multiple: true,\n description: 'File or files to index (can be used to create trix indexes for embedded component use cases not using a config.json for example)'\n },\n fileId: {\n type: 'string',\n multiple: true,\n description: 'Set the trackId used for the indexes generated with the --file argument'\n },\n dryrun: {\n type: 'boolean',\n description: 'Just print out tracks that will be indexed by the process, without doing any indexing'\n }\n };\n const {\n values: flags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options\n });\n const description = 'Make a text-indexing file for any given track(s).';\n const notes = 'Individual tracks in config.json can be permanently excluded from ' + 'indexing by setting \"metadata\": { \"skipTextIndex\": true } on the track. ' + 'Such tracks are skipped even when indexing all tracks or a whole ' + 'assembly, so you do not have to pass --excludeTracks on every run.\\n\\n' +\n // read off the table rather than restated, because the hand-written version\n // of this sentence outlived GtfTabixAdapter's absence from it\n `Only tracks with an indexable adapter type (${Object.keys(_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_1__.indexableAdapters).sort().join(', ')}) are indexed; ` + 'tracks with other adapter types are skipped automatically.\\n\\n' + 'GTF has no Name/ID attributes, so the default --attributes also match ' + 'their GTF spellings (gene_name, transcript_name, gene_id, transcript_id).' + '\\n\\n' + '--exclude names types not to index; --include names the only types to ' + 'index. Reach for --include when the file draws from a vocabulary you do ' + 'not control: an NCBI RefSeq GFF3 uses 115 feature types, 80 of them leaf ' + 'records with no name to search (a match is labelled with a bare UUID, a ' + 'cDNA_match with an MD5, every biological_region with the string ' + '\"biological region\"), so a deny list leaks whichever type is added next ' + 'while the allow list — gene, pseudogene and the transcript types — does ' + 'not grow. Both may be given: --include admits, --exclude then narrows. ' + 'Either can also be set per track in config.json as ' + 'textSearching.indexingFeatureTypesToInclude / ' + 'indexingFeatureTypesToExclude, which takes precedence over the flag.';\n const examples = [\"# indexes all tracks that it can find in the current directory's config.json\", '$ jbrowse text-index', '', \"# indexes specific trackIds that it can find in the current directory's config.json\", '$ jbrowse text-index --tracks=track1,track2,track3', '', '# indexes all tracks except specific trackIds', '$ jbrowse text-index --excludeTracks=track1,track2,track3', '', \"# indexes all tracks in a directory's config.json or in a specific config file\", '$ jbrowse text-index --out /path/to/jb2/', '', '# indexes only a specific assembly, and overwrite what was previously there using force (which is needed if a previous index already existed)', '$ jbrowse text-index -a hg19 --force', '', '# create index for some files for use in @jbrowse/react-linear-genome-view2 or similar', '$ jbrowse text-index --file myfile.gff3.gz --file myfile.vcfgz --out indexes'];\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.printHelp)({\n description,\n examples,\n notes,\n usage: 'jbrowse text-index [options]',\n options\n });\n return;\n }\n const {\n perTrack,\n file\n } = flags;\n if (file) {\n await (0,_index_ts__WEBPACK_IMPORTED_MODULE_3__.indexFileList)(flags);\n } else if (perTrack) {\n await (0,_index_ts__WEBPACK_IMPORTED_MODULE_3__.perTrackIndex)(flags);\n } else {\n await (0,_index_ts__WEBPACK_IMPORTED_MODULE_3__.aggregateIndex)(flags);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/command.ts?\n}");
|
|
494
|
-
|
|
495
|
-
/***/ },
|
|
496
|
-
|
|
497
|
-
/***/ "./src/commands/text-index/config-utils.ts"
|
|
498
|
-
/*!*************************************************!*\
|
|
499
|
-
!*** ./src/commands/text-index/config-utils.ts ***!
|
|
500
|
-
\*************************************************/
|
|
501
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
502
|
-
|
|
503
|
-
"use strict";
|
|
504
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ formatDryRun: () => (/* binding */ formatDryRun),\n/* harmony export */ getAssemblyNames: () => (/* binding */ getAssemblyNames),\n/* harmony export */ getTrackConfigs: () => (/* binding */ getTrackConfigs),\n/* harmony export */ loadConfigForIndexing: () => (/* binding */ loadConfigForIndexing),\n/* harmony export */ prepareIndexDriverFlags: () => (/* binding */ prepareIndexDriverFlags),\n/* harmony export */ sanitizeNameForPath: () => (/* reexport safe */ _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_3__.sanitizeForFilename)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/trixPaths.ts\");\n\n\n\nfunction validatePrefixSize(value) {\n if (!value) {\n return undefined;\n }\n const parsed = typeof value === 'number' ? value : parseInt(value, 10);\n if (Number.isNaN(parsed) || parsed <= 0) {\n throw new Error(`Invalid prefixSize: \"${value}\". Must be a positive number.`);\n }\n return parsed;\n}\nfunction prepareIndexDriverFlags(flags) {\n return {\n attributes: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(flags.attributes),\n typesToExclude: (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(flags.exclude),\n // undefined rather than [] when the flag is absent, because an empty allow\n // list has to mean \"no allow list\" and not \"index nothing\"\n typesToInclude: flags.include ? (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(flags.include) : undefined,\n quiet: flags.quiet ?? false,\n prefixSize: validatePrefixSize(flags.prefixSize)\n };\n}\nasync function loadConfigForIndexing(target, out) {\n const configPath = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.resolveConfigPath)(target, out);\n // readConfigFile, not a bare readFileSync: run from the wrong directory, this\n // is the error the user sees, and it should name the config.json it looked for\n const config = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.readConfigFile)(configPath);\n return {\n config,\n configPath,\n outLocation: node_path__WEBPACK_IMPORTED_MODULE_0___default().dirname(configPath)\n };\n}\nfunction getAssemblyNames(config, assemblies) {\n const asms = assemblies ? (0,_utils_ts__WEBPACK_IMPORTED_MODULE_2__.parseCommaSeparatedString)(assemblies) : config.assemblies?.map(a => a.name) ?? (config.assembly ? [config.assembly.name] : []);\n if (!asms.length) {\n throw new Error('No assemblies found');\n }\n return asms;\n}\nfunction formatDryRun(trackConfigs) {\n return trackConfigs.map(t => `${t.trackId}\\t${t.adapter?.type}`).join('\\n');\n}\n\n// why a track was left out, or undefined if it is indexable\nfunction skipReason(track, assemblyName, excludeSet) {\n if (assemblyName && !track.assemblyNames.includes(assemblyName)) {\n return `not in assembly '${assemblyName}'`;\n } else if (excludeSet.has(track.trackId)) {\n return 'excluded with --excludeTracks';\n } else if (track.metadata?.skipTextIndex) {\n return 'metadata.skipTextIndex is set';\n } else if (!(0,_types_common_ts__WEBPACK_IMPORTED_MODULE_1__.supported)(track.adapter?.type)) {\n return `adapter type ${track.adapter?.type} is not indexable`;\n } else {\n return undefined;\n }\n}\nfunction getTrackConfigs(config, trackIds, assemblyName, excludeTrackIds) {\n const tracks = config.tracks ?? [];\n\n // when specific trackIds are requested every one must exist; otherwise\n // consider all tracks in the config\n const requested = trackIds?.length ? trackIds.map(trackId => {\n const track = tracks.find(t => t.trackId === trackId);\n if (track) {\n return track;\n } else {\n throw new Error(`Track not found in config.json for trackId ${trackId}, please add track configuration before indexing.`);\n }\n }) : tracks;\n const excludeSet = new Set(excludeTrackIds);\n return requested.filter(track => {\n const reason = skipReason(track, assemblyName, excludeSet);\n // only narrate skips for tracks the user named: sweeping a multi-assembly\n // config otherwise prints a line per track per assembly\n if (reason && trackIds?.length) {\n console.log(`Skipping ${track.trackId}: ${reason}`);\n }\n return !reason;\n });\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/config-utils.ts?\n}");
|
|
505
|
-
|
|
506
|
-
/***/ },
|
|
507
|
-
|
|
508
|
-
/***/ "./src/commands/text-index/file-list.ts"
|
|
509
|
-
/*!**********************************************!*\
|
|
510
|
-
!*** ./src/commands/text-index/file-list.ts ***!
|
|
511
|
-
\**********************************************/
|
|
512
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
513
|
-
|
|
514
|
-
"use strict";
|
|
515
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexFileList: () => (/* binding */ indexFileList)\n/* harmony export */ });\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _config_utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config-utils.ts */ \"./src/commands/text-index/config-utils.ts\");\n/* harmony import */ var _indexing_utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./indexing-utils.ts */ \"./src/commands/text-index/indexing-utils.ts\");\n/* harmony import */ var _validators_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./validators.ts */ \"./src/commands/text-index/validators.ts\");\n\n\n\n\nasync function indexFileList(flags) {\n const {\n out,\n target,\n fileId,\n file,\n attributes,\n quiet,\n exclude,\n include,\n prefixSize,\n dryrun\n } = flags;\n (0,_validators_ts__WEBPACK_IMPORTED_MODULE_3__.validateFileInput)(file);\n // --out/--target names either the install directory or its config.json, as\n // every other command accepts; the trix output goes beside the config, and\n // pointing at the config.json used to mkdir config.json/trix and fail ENOTDIR\n const outArg = target || out || '.';\n const outLocation = outArg.endsWith('.json') ? node_path__WEBPACK_IMPORTED_MODULE_0___default().dirname(outArg) : outArg;\n const trackConfigs = (0,_indexing_utils_ts__WEBPACK_IMPORTED_MODULE_2__.prepareFileTrackConfigs)(file, fileId);\n if (dryrun) {\n console.log((0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_1__.formatDryRun)(trackConfigs));\n } else {\n const name = trackConfigs.length > 1 ? 'aggregate' : (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_1__.sanitizeNameForPath)(node_path__WEBPACK_IMPORTED_MODULE_0___default().basename(file[0]));\n await (0,_indexing_utils_ts__WEBPACK_IMPORTED_MODULE_2__.indexDriver)({\n trackConfigs,\n outLocation,\n name,\n assemblyNames: [],\n ...(0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_1__.prepareIndexDriverFlags)({\n attributes,\n exclude,\n include,\n quiet,\n prefixSize\n })\n });\n console.log('Successfully created index for these files. See https://jbrowse.org/storybook/lgv/with-aggregate-text-searching/ for info about usage');\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/file-list.ts?\n}");
|
|
516
|
-
|
|
517
|
-
/***/ },
|
|
518
|
-
|
|
519
|
-
/***/ "./src/commands/text-index/index.ts"
|
|
520
|
-
/*!******************************************!*\
|
|
521
|
-
!*** ./src/commands/text-index/index.ts ***!
|
|
522
|
-
\******************************************/
|
|
523
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
524
|
-
|
|
525
|
-
"use strict";
|
|
526
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ aggregateIndex: () => (/* reexport safe */ _aggregate_ts__WEBPACK_IMPORTED_MODULE_0__.aggregateIndex),\n/* harmony export */ indexFileList: () => (/* reexport safe */ _file_list_ts__WEBPACK_IMPORTED_MODULE_2__.indexFileList),\n/* harmony export */ perTrackIndex: () => (/* reexport safe */ _per_track_ts__WEBPACK_IMPORTED_MODULE_1__.perTrackIndex),\n/* harmony export */ run: () => (/* reexport safe */ _command_ts__WEBPACK_IMPORTED_MODULE_3__.run)\n/* harmony export */ });\n/* harmony import */ var _aggregate_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./aggregate.ts */ \"./src/commands/text-index/aggregate.ts\");\n/* harmony import */ var _per_track_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./per-track.ts */ \"./src/commands/text-index/per-track.ts\");\n/* harmony import */ var _file_list_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file-list.ts */ \"./src/commands/text-index/file-list.ts\");\n/* harmony import */ var _command_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./command.ts */ \"./src/commands/text-index/command.ts\");\n\n\n\n\n\n/**\n * Type-safe flags interface for text-index command\n */\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/index.ts?\n}");
|
|
527
|
-
|
|
528
|
-
/***/ },
|
|
529
|
-
|
|
530
|
-
/***/ "./src/commands/text-index/indexing-utils.ts"
|
|
531
|
-
/*!***************************************************!*\
|
|
532
|
-
!*** ./src/commands/text-index/indexing-utils.ts ***!
|
|
533
|
-
\***************************************************/
|
|
534
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
535
|
-
|
|
536
|
-
"use strict";
|
|
537
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ indexDriver: () => (/* binding */ indexDriver),\n/* harmony export */ prepareFileTrackConfigs: () => (/* binding */ prepareFileTrackConfigs)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_stream__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/types/common.ts\");\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/trixPaths.ts\");\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/indexFiles.ts\");\n/* harmony import */ var cli_progress__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! cli-progress */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/cli-progress.js\");\n/* harmony import */ var cli_progress__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(cli_progress__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var ixixx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ixixx */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/index.js\");\n/* harmony import */ var _types_common_ts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../types/common.ts */ \"./src/types/common.ts\");\n\n\n\n\n\n\n\n// every index artifact lands in <outLocation>/trix, so the directory is created\n// here rather than by each caller: --dryrun goes nowhere near indexDriver and so\n// no longer leaves an empty trix/ behind\nfunction ensureTrixDir(outLocation) {\n node_fs__WEBPACK_IMPORTED_MODULE_0___default().mkdirSync(node_path__WEBPACK_IMPORTED_MODULE_1___default().join(outLocation, _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_4__.TRIX_DIR), {\n recursive: true\n });\n}\nasync function runIxIxx({\n readStream,\n outLocation,\n name,\n prefixSize,\n quiet\n}) {\n const progressBar = new cli_progress__WEBPACK_IMPORTED_MODULE_6__.SingleBar({\n format: '{bar} Sorting and writing index...',\n etaBuffer: 2000\n }, cli_progress__WEBPACK_IMPORTED_MODULE_6__.Presets.shades_classic);\n if (!quiet) {\n progressBar.start(1, 0);\n }\n const {\n ix,\n ixx\n } = (0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_4__.trixFilePaths)(outLocation, name);\n await (0,ixixx__WEBPACK_IMPORTED_MODULE_7__.ixIxxStream)(readStream, ix, ixx, prefixSize);\n if (!quiet) {\n progressBar.update(1);\n progressBar.stop();\n }\n}\nasync function indexDriver({\n trackConfigs,\n attributes,\n outLocation,\n name,\n quiet,\n typesToExclude,\n typesToInclude,\n assemblyNames,\n prefixSize\n}) {\n ensureTrixDir(outLocation);\n const readStream = node_stream__WEBPACK_IMPORTED_MODULE_2__.Readable.from((0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_5__.indexFiles)({\n tracks: trackConfigs,\n attributesToIndex: attributes,\n outDir: outLocation,\n featureTypesToExclude: typesToExclude,\n featureTypesToInclude: typesToInclude,\n makeProgress: quiet ? undefined : trackId => {\n const progressBar = new cli_progress__WEBPACK_IMPORTED_MODULE_6__.SingleBar({\n // eslint-disable-next-line unicorn/no-incorrect-template-string-interpolation -- {bar}/{percentage}/{eta} are cli-progress format tokens, not JS interpolation\n format: `{bar} ${trackId} {percentage}% | ETA: {eta}s`,\n etaBuffer: 2000\n }, cli_progress__WEBPACK_IMPORTED_MODULE_6__.Presets.shades_classic);\n return {\n onStart: totalBytes => {\n progressBar.start(totalBytes, 0);\n },\n onUpdate: receivedBytes => {\n progressBar.update(receivedBytes);\n },\n onDone: () => {\n progressBar.stop();\n }\n };\n }\n }));\n await runIxIxx({\n readStream,\n outLocation,\n name,\n prefixSize,\n quiet\n });\n (0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_3__.generateMeta)({\n configs: trackConfigs,\n attributesToIndex: attributes,\n outDir: outLocation,\n name,\n featureTypesToExclude: typesToExclude,\n featureTypesToInclude: typesToInclude,\n assemblyNames\n });\n}\nfunction prepareFileTrackConfigs(files, fileIds) {\n return files.map((file, i) => {\n const config = (0,_jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_3__.guessAdapterFromFileName)(file);\n if (fileIds?.[i]) {\n config.trackId = fileIds[i];\n }\n // throw rather than silently filtering: a user who named the file with\n // --file should be told it can't be indexed instead of getting a misleading\n // \"successfully created index\" with no output\n if (!(0,_types_common_ts__WEBPACK_IMPORTED_MODULE_8__.supported)(config.adapter?.type)) {\n throw new Error(`Cannot text-index ${file}: adapter type ${config.adapter?.type} is not indexable (only GFF3, GTF and VCF are supported)`);\n }\n return config;\n });\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/indexing-utils.ts?\n}");
|
|
538
|
-
|
|
539
|
-
/***/ },
|
|
540
|
-
|
|
541
|
-
/***/ "./src/commands/text-index/per-track.ts"
|
|
542
|
-
/*!**********************************************!*\
|
|
543
|
-
!*** ./src/commands/text-index/per-track.ts ***!
|
|
544
|
-
\**********************************************/
|
|
545
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
546
|
-
|
|
547
|
-
"use strict";
|
|
548
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ perTrackIndex: () => (/* binding */ perTrackIndex)\n/* harmony export */ });\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _adapter_utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./adapter-utils.ts */ \"./src/commands/text-index/adapter-utils.ts\");\n/* harmony import */ var _config_utils_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./config-utils.ts */ \"./src/commands/text-index/config-utils.ts\");\n/* harmony import */ var _indexing_utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./indexing-utils.ts */ \"./src/commands/text-index/indexing-utils.ts\");\n/* harmony import */ var _validators_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./validators.ts */ \"./src/commands/text-index/validators.ts\");\n\n\n\n\n\nasync function perTrackIndex(flags) {\n const {\n out,\n target,\n tracks,\n excludeTracks,\n assemblies,\n attributes,\n quiet,\n force,\n exclude,\n include,\n prefixSize,\n dryrun\n } = flags;\n (0,_validators_ts__WEBPACK_IMPORTED_MODULE_4__.validateAssembliesForPerTrack)(assemblies);\n const {\n config,\n configPath,\n outLocation\n } = await (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.loadConfigForIndexing)(target, out);\n const configTracks = config.tracks ?? [];\n const confs = (0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.getTrackConfigs)(config, (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.parseCommaSeparatedString)(tracks), undefined, (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.parseCommaSeparatedString)(excludeTracks));\n (0,_validators_ts__WEBPACK_IMPORTED_MODULE_4__.validateTrackConfigs)(confs);\n if (dryrun) {\n console.log((0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.formatDryRun)(confs));\n return;\n }\n\n // sequential, not Promise.all: each track's indexer owns the progress bar and\n // streams a whole file through ixIxx\n const indexed = [];\n for (const trackConfig of confs) {\n const {\n textSearching,\n trackId,\n assemblyNames\n } = trackConfig;\n if (textSearching?.textSearchAdapter && !force) {\n console.log(`Note: ${trackId} has already been indexed with this configuration, use --force to overwrite this track. Skipping for now`);\n continue;\n }\n console.log(`Indexing track ${trackId}...`);\n await (0,_indexing_utils_ts__WEBPACK_IMPORTED_MODULE_3__.indexDriver)({\n trackConfigs: [trackConfig],\n outLocation,\n name: trackId,\n assemblyNames,\n ...(0,_config_utils_ts__WEBPACK_IMPORTED_MODULE_2__.prepareIndexDriverFlags)({\n attributes,\n exclude,\n include,\n quiet,\n prefixSize\n })\n });\n indexed.push(trackConfig);\n }\n\n // a track that already carried an adapter keeps it — re-indexing under --force\n // refreshes the trix files the existing adapter already points at. The rest\n // gain one naming the files just written. getTrackConfigs returns elements of\n // config.tracks, so every indexed track is somewhere in configTracks.\n const newAdapters = new Map(indexed.filter(track => !track.textSearching?.textSearchAdapter).map(track => [track.trackId, (0,_adapter_utils_ts__WEBPACK_IMPORTED_MODULE_1__.createTrixAdapter)(track.trackId, track.assemblyNames)]));\n const updatedTracks = configTracks.map(track => {\n const textSearchAdapter = newAdapters.get(track.trackId);\n return textSearchAdapter ? {\n ...track,\n textSearching: {\n ...track.textSearching,\n textSearchAdapter\n }\n } : track;\n });\n if (updatedTracks.some((track, i) => track !== configTracks[i])) {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_0__.writeJsonFile)(configPath, {\n ...config,\n tracks: updatedTracks\n });\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/per-track.ts?\n}");
|
|
549
|
-
|
|
550
|
-
/***/ },
|
|
551
|
-
|
|
552
|
-
/***/ "./src/commands/text-index/validators.ts"
|
|
553
|
-
/*!***********************************************!*\
|
|
554
|
-
!*** ./src/commands/text-index/validators.ts ***!
|
|
555
|
-
\***********************************************/
|
|
556
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
557
|
-
|
|
558
|
-
"use strict";
|
|
559
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validateAssembliesForPerTrack: () => (/* binding */ validateAssembliesForPerTrack),\n/* harmony export */ validateFileInput: () => (/* binding */ validateFileInput),\n/* harmony export */ validateTrackConfigs: () => (/* binding */ validateTrackConfigs)\n/* harmony export */ });\nfunction validateTrackConfigs(tracks) {\n if (!tracks.length) {\n throw new Error('Tracks not found in config.json, please add track configurations before indexing.');\n }\n}\nfunction validateFileInput(file) {\n if (!file?.length) {\n throw new Error('Cannot index file list without files');\n }\n}\nfunction validateAssembliesForPerTrack(assemblies) {\n if (assemblies) {\n throw new Error(`Can't specify assemblies when indexing per track, remove assemblies flag to continue.`);\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/text-index/validators.ts?\n}");
|
|
560
|
-
|
|
561
|
-
/***/ },
|
|
562
|
-
|
|
563
|
-
/***/ "./src/commands/upgrade.ts"
|
|
564
|
-
/*!*********************************!*\
|
|
565
|
-
!*** ./src/commands/upgrade.ts ***!
|
|
566
|
-
\*********************************/
|
|
567
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
568
|
-
|
|
569
|
-
"use strict";
|
|
570
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.ts */ \"./src/utils.ts\");\n\n\n\n\nconst description = 'Upgrades JBrowse 2 to latest version';\nconst examples = ['# Upgrades current directory to latest jbrowse release', '$ jbrowse upgrade', '', '# Upgrade jbrowse instance at a specific filesystem path', '$ jbrowse upgrade /path/to/jbrowse2/installation', '', '# Upgrade to a specific tag', '$ jbrowse upgrade /path/to/jbrowse2/installation --tag v1.0.0', '', '# List versions available on github', '$ jbrowse upgrade --listVersions', '', '# Upgrade from a specific URL', '$ jbrowse upgrade --url https://sample.com/jbrowse2.zip', '', '# Get nightly release from main branch', '$ jbrowse upgrade --nightly'];\nconst options = {\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Display help for command'\n },\n // will need to account for pagination once there is a lot of releases\n listVersions: {\n type: 'boolean',\n short: 'l',\n description: 'Lists out all versions of JBrowse 2'\n },\n tag: {\n type: 'string',\n short: 't',\n description: 'Version of JBrowse 2 to install. Format is v1.0.0. Defaults to latest'\n },\n branch: {\n type: 'string',\n description: 'Download a development build from a named git branch'\n },\n nightly: {\n type: 'boolean',\n description: 'Download the latest development build from the main branch'\n },\n clean: {\n type: 'boolean',\n description: 'Removes old js,map,and LICENSE files in the installation'\n },\n url: {\n type: 'string',\n short: 'u',\n description: 'A direct URL to a JBrowse 2 release'\n }\n};\nasync function run(args) {\n const {\n positionals,\n values: runFlags\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_2__.parseArgs)({\n options,\n args,\n allowPositionals: true\n });\n if (runFlags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.printHelp)({\n options,\n examples,\n usage: 'jbrowse upgrade [localPath] [options]',\n description\n });\n return;\n }\n const {\n clean,\n listVersions,\n tag,\n url,\n branch,\n nightly\n } = runFlags;\n if (listVersions) {\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.printVersions)();\n return;\n }\n\n // localPath is optional: `jbrowse upgrade` upgrades the install in the\n // current directory, as the examples and docs advertise\n const argsPath = positionals[0] ?? '.';\n if (!node_fs__WEBPACK_IMPORTED_MODULE_0___default().existsSync(node_path__WEBPACK_IMPORTED_MODULE_1___default().join(argsPath, 'manifest.json'))) {\n throw new Error(`No manifest.json found in this directory, are you sure it is an\n existing jbrowse 2 installation?`);\n }\n const {\n locationUrl,\n archive\n } = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.downloadRelease)({\n url,\n nightly,\n branch,\n tag\n });\n if (clean) {\n node_fs__WEBPACK_IMPORTED_MODULE_0___default().rmSync(node_path__WEBPACK_IMPORTED_MODULE_1___default().join(argsPath, 'static'), {\n recursive: true,\n force: true\n });\n const workerFiles = node_fs__WEBPACK_IMPORTED_MODULE_0___default().readdirSync(argsPath).filter(f => f.includes('worker.js'));\n for (const f of workerFiles) {\n node_fs__WEBPACK_IMPORTED_MODULE_0___default().unlinkSync(node_path__WEBPACK_IMPORTED_MODULE_1___default().join(argsPath, f));\n }\n }\n await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_3__.extractZip)(archive, argsPath);\n console.log(`Unpacked ${locationUrl} at ${argsPath}`);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/upgrade.ts?\n}");
|
|
571
|
-
|
|
572
|
-
/***/ },
|
|
573
|
-
|
|
574
|
-
/***/ "./src/commands/validate/configManifest.generated.ts"
|
|
575
|
-
/*!***********************************************************!*\
|
|
576
|
-
!*** ./src/commands/validate/configManifest.generated.ts ***!
|
|
577
|
-
\***********************************************************/
|
|
578
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
579
|
-
|
|
580
|
-
"use strict";
|
|
581
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ configManifest: () => (/* binding */ configManifest)\n/* harmony export */ });\n// Generated by scripts/generateConfigManifest.ts — do not edit by hand.\n// Regenerate with `pnpm autogen` after changing any configSchema.ts.\n\nconst configManifest = {\n \"adapters\": {\n \"CytobandAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"CytobandAdapter\\\"\"\n }, {\n \"name\": \"cytobandLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"CramAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"CramAdapter\\\"\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useSliceWorkerPool\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"cramLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"craiLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BamAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BamAdapter\\\"\"\n }, {\n \"name\": \"bamLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"BamIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"SamAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"SamAdapter\\\"\"\n }, {\n \"name\": \"samLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"samText\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"HtsgetBamAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"HtsgetBamAdapter\\\"\"\n }, {\n \"name\": \"htsgetBase\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"htsgetTrackId\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": []\n },\n \"BigBedAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BigBedAdapter\\\"\"\n }, {\n \"name\": \"bigBedLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"scoreColumn\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"aggregateField\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"disableGeneHeuristic\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BedAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BedAdapter\\\"\"\n }, {\n \"name\": \"bedLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"scoreColumn\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"autoSql\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"colRef\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"colStart\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"colEnd\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"disableGeneHeuristic\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BedpeAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BedpeAdapter\\\"\"\n }, {\n \"name\": \"bedpeLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"StarFusionAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"StarFusionAdapter\\\"\"\n }, {\n \"name\": \"starFusionLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BedTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BedTabixAdapter\\\"\"\n }, {\n \"name\": \"bedGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"scoreColumn\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"autoSql\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"disableGeneHeuristic\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"BedGraphAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BedGraphAdapter\\\"\"\n }, {\n \"name\": \"bedGraphLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BedGraphTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BedGraphTabixAdapter\\\"\"\n }, {\n \"name\": \"bedGraphGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"FromConfigAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"FromConfigAdapter\\\"\"\n }, {\n \"name\": \"adapterId\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"features\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": []\n },\n \"FromConfigRegionsAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"FromConfigRegionsAdapter\\\"\"\n }, {\n \"name\": \"adapterId\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"features\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": []\n },\n \"FromConfigSequenceAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"FromConfigSequenceAdapter\\\"\"\n }, {\n \"name\": \"adapterId\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"features\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": []\n },\n \"RefNameAliasAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"RefNameAliasAdapter\\\"\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"refNameColumn\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"refNameColumnHeaderName\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"NcbiSequenceReportAliasAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"NcbiSequenceReportAliasAdapter\\\"\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"useNameOverride\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"GtfAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GtfAdapter\\\"\"\n }, {\n \"name\": \"gtfLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"aggregateField\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"GtfTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GtfTabixAdapter\\\"\"\n }, {\n \"name\": \"gtfGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"dontRedispatch\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"aggregateField\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"Gff3TabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"Gff3TabixAdapter\\\"\"\n }, {\n \"name\": \"gffGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"dontRedispatch\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"Gff3Adapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"Gff3Adapter\\\"\"\n }, {\n \"name\": \"gffLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"NCListAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"NCListAdapter\\\"\"\n }, {\n \"name\": \"rootUrlTemplate\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"refNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": []\n },\n \"SPARQLAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"SPARQLAdapter\\\"\"\n }, {\n \"name\": \"endpoint\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"queryTemplate\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"refNamesQueryTemplate\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"refNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"additionalQueryParams\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": []\n },\n \"TwoBitAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"TwoBitAdapter\\\"\"\n }, {\n \"name\": \"twoBitLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"chromSizesLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"chromSizes\"]\n },\n \"BgzipFastaAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BgzipFastaAdapter\\\"\"\n }, {\n \"name\": \"fastaLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"faiLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"metadataLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"gziLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"ChromSizesAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"ChromSizesAdapter\\\"\"\n }, {\n \"name\": \"chromSizesLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"IndexedFastaAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"IndexedFastaAdapter\\\"\"\n }, {\n \"name\": \"fastaLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"faiLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"metadataLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"UnindexedFastaAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"UnindexedFastaAdapter\\\"\"\n }, {\n \"name\": \"rewriteRefNames\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"fastaLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"metadataLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"SequenceSearchAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"SequenceSearchAdapter\\\"\"\n }, {\n \"name\": \"search\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"sequenceAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"searchForward\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"searchReverse\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"caseInsensitive\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": []\n },\n \"CrisprGuideAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"CrisprGuideAdapter\\\"\"\n }, {\n \"name\": \"sequenceAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"pam\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"guideLength\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"pamLocation\",\n \"type\": \"(JexlString | PamLocation)\"\n }, {\n \"name\": \"cutOffset\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"cutOffsetBottom\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"minGcPercent\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxGcPercent\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"excludePolyT\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"searchForward\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"searchReverse\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": []\n },\n \"MotifListAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MotifListAdapter\\\"\"\n }, {\n \"name\": \"motifs\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"sequenceAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"searchForward\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"searchReverse\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"shorthandKeys\": []\n },\n \"VcfAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"VcfAdapter\\\"\"\n }, {\n \"name\": \"vcfLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"samplesTsvLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"VcfTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"VcfTabixAdapter\\\"\"\n }, {\n \"name\": \"vcfGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"samplesTsvLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"SplitVcfTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"SplitVcfTabixAdapter\\\"\"\n }, {\n \"name\": \"vcfGzLocationMap\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"indexLocationMap\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"samplesTsvLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }],\n \"shorthandKeys\": []\n },\n \"PlinkLDAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"PlinkLDAdapter\\\"\"\n }, {\n \"name\": \"ldLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"PlinkLDTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"PlinkLDTabixAdapter\\\"\"\n }, {\n \"name\": \"ldLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"MultiWiggleAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MultiWiggleAdapter\\\"\"\n }, {\n \"name\": \"subadapters\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"bigWigs\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": []\n },\n \"BigWigAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BigWigAdapter\\\"\"\n }, {\n \"name\": \"bigWigLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"source\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"resolutionMultiplier\",\n \"type\": \"(JexlString | number)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"GCContentAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GCContentAdapter\\\"\"\n }, {\n \"name\": \"sequenceAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"windowSize\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"windowDelta\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"gcMode\",\n \"type\": \"(JexlString | gcMode)\"\n }],\n \"shorthandKeys\": []\n },\n \"BgzipMafAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BgzipMafAdapter\\\"\"\n }, {\n \"name\": \"samples\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"mafGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"taiLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"nhLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"summaryAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"annotationAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BgzipTaffyAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BgzipTaffyAdapter\\\"\"\n }, {\n \"name\": \"samples\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"tafGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"taiLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"nhLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"summaryAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"annotationAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BigMafAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BigMafAdapter\\\"\"\n }, {\n \"name\": \"samples\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"bigBedLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"nhLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"summaryAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"annotationAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": []\n },\n \"MafTabixAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MafTabixAdapter\\\"\"\n }, {\n \"name\": \"samples\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"bedGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"refAssemblyName\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"nhLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"summaryAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"annotationAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\", \"nhUri\"]\n },\n \"HicAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"HicAdapter\\\"\"\n }, {\n \"name\": \"hicLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"AllVsAllPAFAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"AllVsAllPAFAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"pafLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"assemblyNameToPanSN\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"AllVsAllIndexedPAFAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"AllVsAllIndexedPAFAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"pifGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"assemblyNameToPanSN\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"coarseBpPerPxThreshold\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"PAFAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"PAFAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"pafLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"PairwiseIndexedPAFAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"PairwiseIndexedPAFAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"pifGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"coarseBpPerPxThreshold\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n },\n \"DeltaAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"DeltaAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"deltaLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"ChainAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"ChainAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"chainLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"MCScanAnchorsAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MCScanAnchorsAdapter\\\"\"\n }, {\n \"name\": \"mcscanAnchorsLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"bed1Location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"bed2Location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"bed1\", \"bed2\", \"chromSizes\", \"csi\", \"htsgetBase\", \"nhUri\"]\n },\n \"MCScanBlocksAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MCScanBlocksAdapter\\\"\"\n }, {\n \"name\": \"mcscanBlocksLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"blockAssemblies\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"bedLocations\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"attributeColumns\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"MCScanSimpleAnchorsAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MCScanSimpleAnchorsAdapter\\\"\"\n }, {\n \"name\": \"mcscanSimpleAnchorsLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"bed1Location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"bed2Location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"bed1\", \"bed2\", \"chromSizes\", \"csi\", \"htsgetBase\", \"nhUri\"]\n },\n \"MashMapAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MashMapAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"outLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n },\n \"BlastTabularAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"BlastTabularAdapter\\\"\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"targetAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"queryAssembly\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"blastTableLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"columns\",\n \"type\": \"(JexlString | string)\"\n }],\n \"shorthandKeys\": []\n },\n \"GWASAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GWASAdapter\\\"\"\n }, {\n \"name\": \"bedGzLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"index\",\n \"type\": \"TabixIndexConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexType\",\n \"type\": \"(JexlString | IndexType)\"\n }, {\n \"name\": \"location\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }, {\n \"name\": \"columnNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"scoreColumn\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"autoSql\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"disableGeneHeuristic\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"scoreTransform\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"ldAdapter\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\", \"csi\"]\n }\n },\n \"tracks\": {\n \"FeatureTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"FeatureTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearBasicDisplay\", \"LinearMultiRowFeatureDisplay\", \"LinearArcDisplay\"]\n },\n \"AlignmentsTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"AlignmentsTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearAlignmentsDisplay\"]\n },\n \"SyntenyTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"SyntenyTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"DotplotDisplay\", \"LinearSyntenyDisplay\", \"LGVSyntenyDisplay\", \"MultiWaySyntenyDisplay\"]\n },\n \"ReferenceSequenceTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"ReferenceSequenceTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"sequenceType\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearReferenceSequenceDisplay\", \"LinearGCContentDisplay\"]\n },\n \"VariantTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"VariantTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"ChordVariantDisplay\", \"LinearVariantDisplay\", \"LinearMultiSampleVariantDisplay\", \"LinearMultiSampleVariantMatrixDisplay\", \"LDDisplay\", \"LinearPairedArcDisplay\"]\n },\n \"LDTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LDTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LDTrackDisplay\"]\n },\n \"QuantitativeTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"QuantitativeTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearWiggleDisplay\"]\n },\n \"MultiQuantitativeTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MultiQuantitativeTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"MultiLinearWiggleDisplay\"]\n },\n \"GCContentTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GCContentTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearGCContentTrackDisplay\"]\n },\n \"MafTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MafTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearMafDisplay\"]\n },\n \"HicTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"HicTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearHicDisplay\"]\n },\n \"GWASTrack\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"GWASTrack\\\"\"\n }, {\n \"name\": \"trackId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"category\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"metadata\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"adapter\",\n \"type\": \"(CytobandAdapterConfigurationSchema | CramAdapterConfigurationSchema | BamAdapterConfigurationSchema | SamAdapterConfigurationSchema | HtsgetBamAdapterConfigurationSchema | BigBedAdapterConfigurationSchema | BedAdapterConfigurationSchema | BedpeAdapterConfigurationSchema | StarFusionAdapterConfigurationSchema | BedTabixAdapterConfigurationSchema | BedGraphAdapterConfigurationSchema | BedGraphTabixAdapterConfigurationSchema | FromConfigAdapterConfigurationSchema | FromConfigRegionsAdapterConfigurationSchema | FromConfigSequenceAdapterConfigurationSchema | RefNameAliasAdapterConfigurationSchema | NcbiSequenceReportAliasAdapterConfigurationSchema | GtfAdapterConfigurationSchema | GtfTabixAdapterConfigurationSchema | Gff3TabixAdapterConfigurationSchema | Gff3AdapterConfigurationSchema | NCListAdapterConfigurationSchema | SPARQLAdapterConfigurationSchema | TwoBitAdapterConfigurationSchema | BgzipFastaAdapterConfigurationSchema | ChromSizesAdapterConfigurationSchema | IndexedFastaAdapterConfigurationSchema | UnindexedFastaAdapterConfigurationSchema | SequenceSearchAdapterConfigurationSchema | CrisprGuideAdapterConfigurationSchema | MotifListAdapterConfigurationSchema | VcfAdapterConfigurationSchema | VcfTabixAdapterConfigurationSchema | SplitVcfTabixAdapterConfigurationSchema | PlinkLDAdapterConfigurationSchema | PlinkLDTabixAdapterConfigurationSchema | MultiWiggleAdapterConfigurationSchema | BigWigAdapterConfigurationSchema | GCContentAdapterConfigurationSchema | BgzipMafAdapterConfigurationSchema | BgzipTaffyAdapterConfigurationSchema | BigMafAdapterConfigurationSchema | MafTabixAdapterConfigurationSchema | HicAdapterConfigurationSchema | AllVsAllPAFAdapterConfigurationSchema | AllVsAllIndexedPAFAdapterConfigurationSchema | PAFAdapterConfigurationSchema | PairwiseIndexedPAFAdapterConfigurationSchema | DeltaAdapterConfigurationSchema | ChainAdapterConfigurationSchema | MCScanAnchorsAdapterConfigurationSchema | MCScanBlocksAdapterConfigurationSchema | MCScanSimpleAnchorsAdapterConfigurationSchema | MashMapAdapterConfigurationSchema | BlastTabularAdapterConfigurationSchema | GWASAdapterConfigurationSchema)\"\n }, {\n \"name\": \"textSearching\",\n \"type\": \"textSearchingConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"indexingAttributes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToExclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"indexingFeatureTypesToInclude\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"textSearchAdapter\",\n \"type\": \"(JBrowse1TextSearchAdapterConfigurationSchema | TrixTextSearchAdapterConfigurationSchema)\"\n }]\n }, {\n \"name\": \"displays\",\n \"type\": \"(LinearBasicDisplayConfigurationSchema | LinearMultiRowFeatureDisplayConfigurationSchema | LinearAlignmentsDisplayConfigurationSchema | ChordVariantDisplayConfigurationSchema | DotplotDisplayConfigurationSchema | LinearSyntenyDisplayConfigurationSchema | LGVSyntenyDisplayConfigurationSchema | MultiWaySyntenyDisplayConfigurationSchema | LinearReferenceSequenceDisplayConfigurationSchema | LinearVariantDisplayConfigurationSchema | LinearMultiSampleVariantDisplayConfigurationSchema | LinearMultiSampleVariantMatrixDisplayConfigurationSchema | LDDisplayConfigurationSchema | LDTrackDisplayConfigurationSchema | LinearWiggleDisplayConfigurationSchema | MultiLinearWiggleDisplayConfigurationSchema | LinearGCContentDisplayConfigurationSchema | LinearGCContentTrackDisplayConfigurationSchema | LinearMafDisplayConfigurationSchema | LinearHicDisplayConfigurationSchema | LinearArcDisplayConfigurationSchema | LinearPairedArcDisplayConfigurationSchema | LinearManhattanDisplayConfigurationSchema)[]\"\n }, {\n \"name\": \"formatDetails\",\n \"type\": \"FormatDetailsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"feature\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"subfeatures\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"depth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxDepth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }]\n }, {\n \"name\": \"formatAbout\",\n \"type\": \"FormatAboutConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"config\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"hideUris\",\n \"type\": \"(JexlString | boolean)\"\n }]\n }],\n \"displayTypes\": [\"LinearManhattanDisplay\"]\n }\n },\n \"displays\": {\n \"LinearBasicDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearBasicDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"maxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"heightMode\",\n \"type\": \"(JexlString | (heightMode | undefined))\"\n }, {\n \"name\": \"growMaxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLabels\",\n \"type\": \"(JexlString | (showLabels | undefined))\"\n }, {\n \"name\": \"maxLabelFeatureDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxDescriptionFeatureDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"connectorColor\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"utrColor\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"outlineColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"featureHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayMode\",\n \"type\": \"(JexlString | (displayMode | undefined))\"\n }, {\n \"name\": \"geneGlyphMode\",\n \"type\": \"(JexlString | geneGlyphMode)\"\n }, {\n \"name\": \"subfeatureLabels\",\n \"type\": \"(JexlString | (subfeatureLabels | undefined))\"\n }, {\n \"name\": \"displayDirectionalChevrons\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"transcriptTypes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"canonicalTranscriptField\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"canonicalTranscriptTags\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"containerTypes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"subParts\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"impliedUTRs\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"hideSourceFeatures\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"labels\",\n \"type\": \"CanvasFeatureLabelsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }]\n }, {\n \"name\": \"showOnlyGenes\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"legend\",\n \"type\": \"(JexlString | frozen)\"\n }],\n \"legacyKeys\": [\"renderer\", \"autoHeight\", \"showDescriptions\", \"color1\", \"color2\", \"color3\", \"outline\"],\n \"aliases\": [\"LinearFeatureDisplay\"],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"jexlFiltersSetting\", \"pinnedFeatureIds\", \"soloFeatureIds\", \"soloApplied\", \"hiddenFeatureIds\", \"expandedGeneIds\", \"featureHighlights\"]\n },\n \"LinearMultiRowFeatureDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearMultiRowFeatureDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"partitionField\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"lengthField\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"sampleColorMap\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"rowOrder\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"rowHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"rowProportion\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showRowSeparators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"colorRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"legend\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"rowGroups\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"showTree\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showBranchLength\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"layout\", \"clusterTree\", \"clusterProvenance\", \"treeAreaWidth\", \"subtreeFilter\", \"runClustering\", \"clusterRegion\", \"sortRowsBy\", \"configuration\", \"hiddenCategories\"]\n },\n \"LinearAlignmentsDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearAlignmentsDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"featureHeight\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"heightMode\",\n \"type\": \"(JexlString | (heightMode | undefined))\"\n }, {\n \"name\": \"growMaxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"readConnectionsLineWidth\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showSashimiLabels\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"hideNonCanonicalJunctions\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"maxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"colorBy\",\n \"type\": \"(JexlString | (frozen | undefined))\"\n }, {\n \"name\": \"filterBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"groupBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"collapseGroupRows\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Coverage autoscale type)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Coverage scale type)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mismatchAlpha\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLowFreqMismatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"sortedBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"largeFeaturesFirst\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"splicedReadsFirst\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showOutline\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"linkedReads\",\n \"type\": \"(JexlString | (LinkedReadsMode | undefined))\"\n }, {\n \"name\": \"showBezierConnections\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showCoverage\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showPileup\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"coverageHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"coverageSnpMinFrequency\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showMismatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showInterbaseIndicators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"flipStrandLongReadChains\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"colorSupplementaryChains\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"drawInter\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"drawProperPairArcs\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"minInterchromSupport\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"drawLongRange\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"arcColorByType\",\n \"type\": \"(JexlString | ArcColorByType)\"\n }, {\n \"name\": \"readConnections\",\n \"type\": \"(JexlString | (ReadConnectionsMode | undefined))\"\n }, {\n \"name\": \"readConnectionsDown\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showSashimiArcs\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"sashimiArcsMode\",\n \"type\": \"(JexlString | (SashimiArcsMode | undefined))\"\n }, {\n \"name\": \"minSashimiScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"sashimiArcsHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"readConnectionsHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showSoftClipping\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }],\n \"aliases\": [\"LinearPileupDisplay\", \"LinearSNPCoverageDisplay\", \"LinearReadArcsDisplay\", \"LinearReadCloudDisplay\"],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"ChordVariantDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"ChordVariantDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"onChordClick\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"strokeColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"strokeColorSelected\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"strokeColorHover\",\n \"type\": \"(JexlString | string)\"\n }],\n \"legacyKeys\": [\"renderer\"],\n \"stateModelProps\": [\"id\", \"type\", \"bezierRadiusRatio\", \"configuration\"]\n },\n \"DotplotDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"DotplotDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LinearSyntenyDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearSyntenyDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LGVSyntenyDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LGVSyntenyDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"featureHeight\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"heightMode\",\n \"type\": \"(JexlString | (heightMode | undefined))\"\n }, {\n \"name\": \"growMaxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"readConnectionsLineWidth\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showSashimiLabels\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"hideNonCanonicalJunctions\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"maxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"colorBy\",\n \"type\": \"(JexlString | (frozen | undefined))\"\n }, {\n \"name\": \"filterBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"groupBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"collapseGroupRows\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Coverage autoscale type)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Coverage scale type)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mismatchAlpha\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLowFreqMismatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"sortedBy\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"largeFeaturesFirst\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"splicedReadsFirst\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showOutline\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"linkedReads\",\n \"type\": \"(JexlString | (LinkedReadsMode | undefined))\"\n }, {\n \"name\": \"showBezierConnections\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showCoverage\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showPileup\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"coverageHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"coverageSnpMinFrequency\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showMismatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showInterbaseIndicators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"flipStrandLongReadChains\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"colorSupplementaryChains\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"drawInter\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"drawProperPairArcs\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"minInterchromSupport\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"drawLongRange\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"arcColorByType\",\n \"type\": \"(JexlString | ArcColorByType)\"\n }, {\n \"name\": \"readConnections\",\n \"type\": \"(JexlString | (ReadConnectionsMode | undefined))\"\n }, {\n \"name\": \"readConnectionsDown\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showSashimiArcs\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"sashimiArcsMode\",\n \"type\": \"(JexlString | (SashimiArcsMode | undefined))\"\n }, {\n \"name\": \"minSashimiScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"sashimiArcsHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"readConnectionsHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showSoftClipping\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"hideSelfAlignments\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"lodMode\"]\n },\n \"MultiWaySyntenyDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MultiWaySyntenyDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"utrColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"ribbonColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"ribbonColorBy\",\n \"type\": \"(JexlString | ribbonColorBy)\"\n }, {\n \"name\": \"drawCurves\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"bridgeSkippedLanes\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLaneTicks\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"rowOrder\", \"hiddenLanes\"]\n },\n \"LinearReferenceSequenceDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearReferenceSequenceDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"showForward\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showReverse\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTranslation\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LinearVariantDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearVariantDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"maxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"heightMode\",\n \"type\": \"(JexlString | (heightMode | undefined))\"\n }, {\n \"name\": \"growMaxHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLabels\",\n \"type\": \"(JexlString | (showLabels | undefined))\"\n }, {\n \"name\": \"maxLabelFeatureDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxDescriptionFeatureDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"connectorColor\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"utrColor\",\n \"type\": \"(JexlString | (string | undefined))\"\n }, {\n \"name\": \"outlineColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"featureHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayMode\",\n \"type\": \"(JexlString | (displayMode | undefined))\"\n }, {\n \"name\": \"geneGlyphMode\",\n \"type\": \"(JexlString | geneGlyphMode)\"\n }, {\n \"name\": \"subfeatureLabels\",\n \"type\": \"(JexlString | (subfeatureLabels | undefined))\"\n }, {\n \"name\": \"displayDirectionalChevrons\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"transcriptTypes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"canonicalTranscriptField\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"canonicalTranscriptTags\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"containerTypes\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"subParts\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"impliedUTRs\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"hideSourceFeatures\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"labels\",\n \"type\": \"CanvasFeatureLabelsConfigurationSchema\",\n \"subSlots\": [{\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"description\",\n \"type\": \"(JexlString | string)\"\n }]\n }],\n \"legacyKeys\": [\"renderer\", \"autoHeight\", \"showDescriptions\", \"color1\", \"color2\", \"color3\", \"outline\"],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"jexlFiltersSetting\", \"pinnedFeatureIds\", \"soloFeatureIds\", \"soloApplied\", \"hiddenFeatureIds\", \"expandedGeneIds\", \"featureHighlights\"]\n },\n \"LinearMultiSampleVariantDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearMultiSampleVariantDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"showReferenceAlleles\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"lineZoneHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"rowHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showTree\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showBranchLength\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowSeparators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTooltips\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"renderingMode\",\n \"type\": \"(JexlString | RenderingMode)\"\n }, {\n \"name\": \"featureColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"minorAlleleFrequencyFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxMissingnessFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"colorBy\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"groupBy\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"referenceDrawingMode\",\n \"type\": \"(JexlString | ReferenceDrawingMode)\"\n }, {\n \"name\": \"showInsertionGlyphs\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showVariantLane\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"variantLaneHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"variantLaneLabels\",\n \"type\": \"(JexlString | variantLaneLabels)\"\n }],\n \"aliases\": [\"MultiLinearVariantDisplay\"],\n \"stateModelProps\": [\"id\", \"type\", \"layout\", \"clusterTree\", \"clusterProvenance\", \"treeAreaWidth\", \"subtreeFilter\", \"runClustering\", \"clusterRegion\", \"sortRowsBy\", \"configuration\", \"jexlFiltersSetting\"]\n },\n \"LinearMultiSampleVariantMatrixDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearMultiSampleVariantMatrixDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"showReferenceAlleles\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"lineZoneHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"rowHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showTree\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showBranchLength\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowSeparators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTooltips\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"renderingMode\",\n \"type\": \"(JexlString | RenderingMode)\"\n }, {\n \"name\": \"featureColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"minorAlleleFrequencyFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxMissingnessFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"colorBy\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"groupBy\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"referenceDrawingMode\",\n \"type\": \"(JexlString | ReferenceDrawingMode)\"\n }],\n \"aliases\": [\"LinearVariantMatrixDisplay\"],\n \"stateModelProps\": [\"id\", \"type\", \"layout\", \"clusterTree\", \"clusterProvenance\", \"treeAreaWidth\", \"subtreeFilter\", \"runClustering\", \"clusterRegion\", \"sortRowsBy\", \"configuration\", \"jexlFiltersSetting\"]\n },\n \"LDDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LDDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"minorAlleleFrequencyFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"lengthCutoffFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"lineZoneHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"ldMetric\",\n \"type\": \"(JexlString | LDMetric)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLDTriangle\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"squashToHeight\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"hweFilterThreshold\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"callRateFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxVariantSeparation\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showVerticalGuides\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"tickHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useGenomicPositions\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"signedLD\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"ldMethod\",\n \"type\": \"(JexlString | LDMethod)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"jexlFiltersSetting\"]\n },\n \"LDTrackDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LDTrackDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"minorAlleleFrequencyFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"lengthCutoffFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"lineZoneHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"ldMetric\",\n \"type\": \"(JexlString | LDMetric)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"showLDTriangle\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"squashToHeight\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"hweFilterThreshold\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"callRateFilter\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxVariantSeparation\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showVerticalGuides\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"tickHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useGenomicPositions\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"signedLD\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"ldMethod\",\n \"type\": \"(JexlString | LDMethod)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"jexlFiltersSetting\"]\n },\n \"LinearWiggleDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearWiggleDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"defaultRendering\",\n \"type\": \"(JexlString | Rendering type)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useBicolor\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Scale type)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Autoscale type)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayCrossHatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"posColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"negColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"bicolorPivot\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"densityColorRamp\",\n \"type\": \"(JexlString | Density color ramp)\"\n }, {\n \"name\": \"numQuantile\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scatterPointSize\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"lineWidth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxGapMultiple\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scoreRules\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"minimalTicks\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"summaryScoreMode\",\n \"type\": \"(JexlString | Score type)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"resolution\", \"configuration\"]\n },\n \"MultiLinearWiggleDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"MultiLinearWiggleDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Scale type)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Autoscale type)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayCrossHatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"posColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"negColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"bicolorPivot\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"densityColorRamp\",\n \"type\": \"(JexlString | Density color ramp)\"\n }, {\n \"name\": \"numQuantile\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scatterPointSize\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"lineWidth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxGapMultiple\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"summaryScoreMode\",\n \"type\": \"(JexlString | Score type)\"\n }, {\n \"name\": \"defaultRendering\",\n \"type\": \"(JexlString | Rendering)\"\n }, {\n \"name\": \"minimalTicks\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTree\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showBranchLength\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowSeparators\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"resolution\", \"layout\", \"clusterTree\", \"clusterProvenance\", \"treeAreaWidth\", \"subtreeFilter\", \"runClustering\", \"clusterRegion\", \"sortRowsBy\", \"configuration\"]\n },\n \"LinearGCContentDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearGCContentDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"defaultRendering\",\n \"type\": \"(JexlString | Rendering type)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useBicolor\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Scale type)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Autoscale type)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayCrossHatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"posColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"negColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"bicolorPivot\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"densityColorRamp\",\n \"type\": \"(JexlString | Density color ramp)\"\n }, {\n \"name\": \"numQuantile\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scatterPointSize\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"lineWidth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxGapMultiple\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scoreRules\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"minimalTicks\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"summaryScoreMode\",\n \"type\": \"(JexlString | Score type)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"windowSize\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"windowDelta\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"gcMode\",\n \"type\": \"(JexlString | gcMode)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"resolution\", \"configuration\"]\n },\n \"LinearGCContentTrackDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearGCContentTrackDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"defaultRendering\",\n \"type\": \"(JexlString | Rendering type)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useBicolor\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Scale type)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Autoscale type)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayCrossHatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"symlogConstant\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"posColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"negColor\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"bicolorPivot\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"densityColorRamp\",\n \"type\": \"(JexlString | Density color ramp)\"\n }, {\n \"name\": \"numQuantile\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scatterPointSize\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"lineWidth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"maxGapMultiple\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scoreRules\",\n \"type\": \"(JexlString | frozen)\"\n }, {\n \"name\": \"minimalTicks\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"summaryScoreMode\",\n \"type\": \"(JexlString | Score type)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"windowSize\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"windowDelta\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"gcMode\",\n \"type\": \"(JexlString | gcMode)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"resolution\", \"configuration\"]\n },\n \"LinearMafDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearMafDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"rowHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"rowProportion\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showAllLetters\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"mismatchRendering\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showAsUpperCase\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTree\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showBranchLength\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showRowLabels\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showCoverage\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showAlignments\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"coverageHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"showConservation\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"conservationHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"conservationMode\",\n \"type\": \"(JexlString | MafConservationMode)\"\n }, {\n \"name\": \"rowIdentityMode\",\n \"type\": \"(JexlString | RowIdentityMode)\"\n }, {\n \"name\": \"rowIdentityAutoZoom\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showAnnotations\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showTranslation\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"colorByChromosome\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showInversions\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"layout\", \"clusterTree\", \"clusterProvenance\", \"treeAreaWidth\", \"subtreeFilter\", \"runClustering\", \"clusterRegion\", \"sortRowsBy\", \"configuration\"]\n },\n \"LinearHicDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearHicDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"colorScheme\",\n \"type\": \"(JexlString | HicColorScheme)\"\n }, {\n \"name\": \"showLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }, {\n \"name\": \"resolutionBias\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"useLogScale\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"useColorPercentile\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"showResolutionControls\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"selectedNormalization\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"squashToHeight\",\n \"type\": \"(JexlString | boolean)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LinearArcDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearArcDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"thickness\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"label\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"arcHeight\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"caption\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"displayMode\",\n \"type\": \"(JexlString | DisplayMode)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }],\n \"legacyKeys\": [\"renderer\"],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LinearPairedArcDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearPairedArcDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"lineWidth\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\"]\n },\n \"LinearManhattanDisplay\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"LinearManhattanDisplay\\\"\"\n }, {\n \"name\": \"displayId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"maxFeatureScreenDensity\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"fetchSizeLimit\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"forceLoad\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"height\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"mouseover\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"jexlFilters\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"color\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"colorBy\",\n \"type\": \"(JexlString | GwasColorBy)\"\n }, {\n \"name\": \"minScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"maxScore\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"scaleType\",\n \"type\": \"(JexlString | Scale type)\"\n }, {\n \"name\": \"autoscale\",\n \"type\": \"(JexlString | Autoscale type)\"\n }, {\n \"name\": \"numStdDev\",\n \"type\": \"(JexlString | number)\"\n }, {\n \"name\": \"displayCrossHatches\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"significanceLine\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"minimalTicks\",\n \"type\": \"(JexlString | boolean)\"\n }, {\n \"name\": \"scatterPointSize\",\n \"type\": \"(JexlString | (number | undefined))\"\n }, {\n \"name\": \"showLdLegend\",\n \"type\": \"(JexlString | (boolean | undefined))\"\n }],\n \"stateModelProps\": [\"id\", \"type\", \"configuration\", \"indexSnp\", \"indexSnpPinned\"]\n }\n },\n \"textSearchAdapters\": {\n \"JBrowse1TextSearchAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"JBrowse1TextSearchAdapter\\\"\"\n }, {\n \"name\": \"textSearchAdapterId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"namesIndexLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"tracks\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": []\n },\n \"TrixTextSearchAdapter\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"TrixTextSearchAdapter\\\"\"\n }, {\n \"name\": \"textSearchAdapterId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"ixFilePath\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"ixxFilePath\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"metaFilePath\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }, {\n \"name\": \"tracks\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }],\n \"shorthandKeys\": [\"uri\", \"baseUri\"]\n }\n },\n \"connections\": {\n \"UCSCTrackHubConnection\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"UCSCTrackHubConnection\\\"\"\n }, {\n \"name\": \"connectionId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"hubTxtLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n },\n \"JB2TrackHubConnection\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"JB2TrackHubConnection\\\"\"\n }, {\n \"name\": \"connectionId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"configJsonLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n },\n \"JBrowse1Connection\": {\n \"slots\": [{\n \"name\": \"type\",\n \"type\": \"\\\"JBrowse1Connection\\\"\"\n }, {\n \"name\": \"connectionId\",\n \"type\": \"identifier\"\n }, {\n \"name\": \"name\",\n \"type\": \"(JexlString | string)\"\n }, {\n \"name\": \"assemblyNames\",\n \"type\": \"(JexlString | string[])\"\n }, {\n \"name\": \"dataDirLocation\",\n \"type\": \"(JexlString | (LocalPathLocation | UriLocation | BlobLocation | FileHandleLocation))\"\n }]\n }\n },\n \"migratedDisplayKeys\": {\n \"*\": [\"heightPreConfig\"],\n \"LinearAlignmentsDisplay\": [\"PileupDisplay\", \"SNPCoverageDisplay\", \"colorBy\", \"colorBySetting\", \"filterBy\", \"filterBySetting\", \"hideMismatchesSetting\", \"jexlFilters\", \"trackMaxHeight\"],\n \"LinearMultiSampleVariantDisplay\": [\"jexlFilters\"],\n \"LinearMultiSampleVariantMatrixDisplay\": [\"jexlFilters\"]\n }\n};\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/validate/configManifest.generated.ts?\n}");
|
|
582
|
-
|
|
583
|
-
/***/ },
|
|
584
|
-
|
|
585
|
-
/***/ "./src/commands/validate/displayDefaultKeys.ts"
|
|
586
|
-
/*!*****************************************************!*\
|
|
587
|
-
!*** ./src/commands/validate/displayDefaultKeys.ts ***!
|
|
588
|
-
\*****************************************************/
|
|
589
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
590
|
-
|
|
591
|
-
"use strict";
|
|
592
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ displayDefaultKeys: () => (/* binding */ displayDefaultKeys),\n/* harmony export */ displayDefaultsForTrackType: () => (/* binding */ displayDefaultsForTrackType)\n/* harmony export */ });\n/* harmony import */ var _configManifest_generated_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./configManifest.generated.ts */ \"./src/commands/validate/configManifest.generated.ts\");\n\n// `displayDefaults: {color: 'green'}` is a track-level shorthand\n// (expandTrackConfigShorthand.ts) routing each key to whichever of the track's\n// display types declares it, so the keys a track accepts are the union of those\n// displays' slots rather than the track's own.\nfunction displayDefaultKeys(trackEntry, manifest) {\n return (trackEntry.displayTypes ?? []).flatMap(name => manifest.displays[name]?.slots.map(slot => slot.name) ?? []);\n}\n\n// The same set for a track type named rather than resolved — add-track knows\n// the type it is writing, not a manifest entry. The display types come back\n// alongside, because most tracks offer exactly one and naming it is the whole\n// difference between a message someone can act on and one they cannot: an\n// AlignmentsTrack has only LinearAlignmentsDisplay, so \"no AlignmentsTrack\n// display declares color\" sends the reader looking for the other displays.\n//\n// Both empty for a type the manifest does not carry (a plugin's), which no\n// check here can speak to.\nfunction displayDefaultsForTrackType(trackType, manifest = _configManifest_generated_ts__WEBPACK_IMPORTED_MODULE_0__.configManifest) {\n const entry = lookup(manifest.tracks, trackType);\n return {\n displayTypes: entry?.displayTypes ?? [],\n keys: entry ? displayDefaultKeys(entry, manifest) : []\n };\n}\nfunction lookup(group, typeName) {\n return group[typeName] ?? Object.values(group).find(entry => entry.aliases?.includes(typeName));\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/validate/displayDefaultKeys.ts?\n}");
|
|
593
|
-
|
|
594
|
-
/***/ },
|
|
595
|
-
|
|
596
|
-
/***/ "./src/commands/validate/index.ts"
|
|
597
|
-
/*!****************************************!*\
|
|
598
|
-
!*** ./src/commands/validate/index.ts ***!
|
|
599
|
-
\****************************************/
|
|
600
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
601
|
-
|
|
602
|
-
"use strict";
|
|
603
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ run: () => (/* binding */ run)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils.ts */ \"./src/utils.ts\");\n/* harmony import */ var _validateConfig_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./validateConfig.ts */ \"./src/commands/validate/validateConfig.ts\");\n\n\n\nconst description = 'Check a JBrowse configuration for errors, including the ones JBrowse itself accepts silently';\nconst notes = `A config key JBrowse does not recognize is ignored rather than reported, so a\nmisspelled slot leaves the track loading normally with the setting doing\nnothing. That is what this command is mainly for.\n\nTwo levels are reported:\n\n error JBrowse accepts it and silently does the wrong thing — an unknown\n slot, a track naming an assembly the config never defines, a\n defaultSession naming a trackId that does not exist, a duplicate\n trackId. Exits 1.\n\n warning JBrowse will complain by itself on load, or handles it — a type name\n the core plugins do not register (expected if one of your plugins\n registers it), or a legacy key a migration rewrites. Never fails\n the run.\n\nTypes registered by plugins are not known to this command, so they come through\nas warnings rather than errors.`;\nconst examples = ['# check the config.json in the current directory', '$ jbrowse validate', '', '# check a specific config or saved session', '$ jbrowse validate /path/to/config.json', '$ jbrowse validate mysession.jbrowse', '', '# machine-readable output', '$ jbrowse validate config.json --json'];\nconst options = {\n json: {\n type: 'boolean',\n description: 'Output the findings as JSON instead of text'\n },\n quiet: {\n type: 'boolean',\n short: 'q',\n description: 'Only print errors, suppressing warnings and notes'\n },\n help: {\n type: 'boolean',\n short: 'h',\n description: 'Show help'\n }\n};\nfunction format({\n level,\n where,\n message\n}) {\n return where ? `${level}: ${where}: ${message}` : `${level}: ${message}`;\n}\nasync function run(args) {\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n options,\n args,\n allowPositionals: true\n });\n if (flags.help) {\n (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.printHelp)({\n description,\n examples,\n notes,\n usage: 'jbrowse validate [config.json] [options]',\n options\n });\n return;\n }\n const file = positionals[0] ?? 'config.json';\n // readConfigFile, not readJsonFile: running from the wrong directory is the\n // most common way this fails, and it says which path it looked at.\n const config = await (0,_utils_ts__WEBPACK_IMPORTED_MODULE_1__.readConfigFile)(file);\n const result = (0,_validateConfig_ts__WEBPACK_IMPORTED_MODULE_2__.validateConfig)(config);\n if (flags.json) {\n console.log(JSON.stringify({\n file,\n ok: result.errorCount === 0,\n ...result\n }, null, 2));\n } else {\n const shown = flags.quiet ? result.problems.filter(p => p.level === 'error') : result.problems;\n if (!flags.quiet) {\n for (const note of result.notes) {\n console.log(`note: ${note}`);\n }\n }\n for (const problem of shown) {\n console.log(format(problem));\n }\n if (result.problems.length === 0) {\n console.log(`${file} looks good`);\n } else {\n console.log(`\\n${result.errorCount} error(s), ${result.warningCount} warning(s) in ${file}`);\n }\n }\n if (result.errorCount > 0) {\n // Non-zero so this can gate a deploy. Thrown rather than process.exit so it\n // goes through the same error path as every other command.\n throw new Error(`${result.errorCount} error(s) found in ${file}`\n // no cause: the findings are already printed above\n );\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/validate/index.ts?\n}");
|
|
604
|
-
|
|
605
|
-
/***/ },
|
|
606
|
-
|
|
607
|
-
/***/ "./src/commands/validate/suggest.ts"
|
|
608
|
-
/*!******************************************!*\
|
|
609
|
-
!*** ./src/commands/validate/suggest.ts ***!
|
|
610
|
-
\******************************************/
|
|
611
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
612
|
-
|
|
613
|
-
"use strict";
|
|
614
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ didYouMean: () => (/* binding */ didYouMean),\n/* harmony export */ suggest: () => (/* binding */ suggest)\n/* harmony export */ });\n// \"did you mean\" for a mistyped identifier, shared by the validator and by\n// add-track's up-front check on the settings it is about to write.\n\nfunction editDistance(a, b) {\n // Two rolling rows rather than the full matrix; these are short identifiers\n // and this runs once per unknown key.\n let prev = Array.from({\n length: b.length + 1\n }, (_, i) => i);\n for (let i = 1; i <= a.length; i++) {\n const row = [i];\n for (let j = 1; j <= b.length; j++) {\n row[j] = Math.min(prev[j] + 1, row[j - 1] + 1, prev[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));\n }\n prev = row;\n }\n return prev[b.length];\n}\n\n// The nearest candidate, if it is near enough to be worth naming. The threshold\n// scales with length so `uri` doesn't match every other three-letter slot while\n// a longer typo still resolves.\nfunction suggest(word, candidates) {\n const limit = Math.max(2, Math.floor(word.length / 3));\n let best;\n let bestScore = Infinity;\n for (const candidate of candidates) {\n const score = editDistance(word.toLowerCase(), candidate.toLowerCase());\n if (score < bestScore) {\n bestScore = score;\n best = candidate;\n }\n }\n return bestScore <= limit ? best : undefined;\n}\nfunction didYouMean(word, candidates) {\n const hit = suggest(word, candidates);\n return hit ? ` — did you mean \"${hit}\"?` : '';\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/validate/suggest.ts?\n}");
|
|
615
|
-
|
|
616
|
-
/***/ },
|
|
617
|
-
|
|
618
|
-
/***/ "./src/commands/validate/validateConfig.ts"
|
|
619
|
-
/*!*************************************************!*\
|
|
620
|
-
!*** ./src/commands/validate/validateConfig.ts ***!
|
|
621
|
-
\*************************************************/
|
|
622
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
623
|
-
|
|
624
|
-
"use strict";
|
|
625
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ validateConfig: () => (/* binding */ validateConfig)\n/* harmony export */ });\n/* harmony import */ var _configManifest_generated_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./configManifest.generated.ts */ \"./src/commands/validate/configManifest.generated.ts\");\n/* harmony import */ var _displayDefaultKeys_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./displayDefaultKeys.ts */ \"./src/commands/validate/displayDefaultKeys.ts\");\n/* harmony import */ var _suggest_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./suggest.ts */ \"./src/commands/validate/suggest.ts\");\n// Checks a JBrowse config (or a saved session file) against the generated\n// config-slot manifest.\n//\n// Why this exists at all, given MST type-checks a config on load: **MST models\n// ignore snapshot keys they do not declare**. Write `bamLocatoin`, or a\n// `renderers: {...}` block from an older config, and nothing anywhere reports\n// it — the track loads, appears, and the setting silently does nothing. That is\n// the check no other layer performs, and it is the mistake config authors\n// (human or agent) make most.\n//\n// Pure: no filesystem, no process exit. The command wrapper owns both.\n\n\n\n\n// ------------------------------------------------------------------ reporting\n\nclass Report {\n problems = [];\n notes = [];\n error(where, message) {\n this.problems.push({\n level: 'error',\n where,\n message\n });\n }\n warn(where, message) {\n this.problems.push({\n level: 'warning',\n where,\n message\n });\n }\n note(message) {\n this.notes.push(message);\n }\n result() {\n return {\n problems: this.problems,\n notes: this.notes,\n errorCount: this.problems.filter(p => p.level === 'error').length,\n warningCount: this.problems.filter(p => p.level === 'warning').length\n };\n }\n}\n\n// ------------------------------------------------------------------- checking\n\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n// Keys a schema entry accepts as input: what it declares, plus the shorthands\n// normalizeSnapshot expands — an adapter written with `uri` never mentions\n// `bamLocation`, and both forms are correct.\nfunction acceptedKeys(entry) {\n return [...entry.slots.map(s => s.name), ...(entry.shorthandKeys ?? [])];\n}\n\n// A key JBrowse fills in for itself, so writing one by hand is an anti-pattern\n// whether or not the schema happens to declare a slot for it. Both halves get a\n// message that says so, because the generic ones send the author looking for a\n// typo in a key that is spelled correctly.\n//\n// `sequenceAdapter` is the standing case, and it is now uniform:\n// `getFeatureAdapter` and `CoreGetRefNames` prime every feature adapter's\n// `sequenceAdapterConfig` from the assembly the track is displayed against, and\n// `getSequenceSubAdapter` is what every adapter that reads a sequence resolves\n// through. So no track has to carry one — three grape/peach/volvox configs were\n// copying their own assembly's FASTA urls into a GC track, and two hg002 tracks\n// carried one on a `CramAdapter`, which declares no such slot at all.\n//\n// Two levels, and the split is this validator's own rule: an undeclared key does\n// nothing where it is written (error), a declared one works and is simply the\n// wrong way round (warning).\nconst SELF_SUPPLIED = {\n sequenceAdapter: {\n undeclared: 'JBrowse takes the sequence from the assembly the track is displayed against, and this adapter declares no `sequenceAdapter` slot, so the one written here is never read — delete it',\n declared: '`sequenceAdapter` is set by hand. JBrowse takes the sequence from the assembly the track is displayed against, so this is only needed to read some OTHER sequence — and it pins the track to that source even when the assembly changes. Delete it unless that is what you meant'\n }\n};\nfunction checkSlots(obj, entry, where, report) {\n const accepted = acceptedKeys(entry);\n const legacyKeys = entry.legacyKeys ?? [];\n for (const key of Object.keys(obj)) {\n if (accepted.includes(key)) {\n const selfSupplied = SELF_SUPPLIED[key];\n if (selfSupplied) {\n report.warn(`${where}.${key}`, selfSupplied.declared);\n }\n continue;\n }\n // JSON has no comments, so people reach for a `_comment` key. MST drops it\n // like any other undeclared key, which is what the author wanted — calling\n // that \"silently does nothing\" is true and useless, and a validator that\n // cries wolf on a deliberate annotation is one an author learns to ignore.\n if (/^_+comment/i.test(key)) {\n continue;\n }\n // A legacy key is consumed by the schema's own preProcessSnapshot and\n // lifted into current slots, so the config does load — but it is stale, and\n // whether every setting inside it survived the lift is worth a look.\n if (legacyKeys.includes(key)) {\n report.warn(`${where}.${key}`, `\"${key}\" is a legacy key that a migration rewrites into current slots — the config loads, but check the settings inside it landed`);\n continue;\n }\n report.error(`${where}.${key}`, SELF_SUPPLIED[key]?.undeclared ?? `unknown slot \"${key}\"${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(key, accepted)} — JBrowse ignores keys it does not declare, so this setting silently does nothing`);\n }\n // Recurse into sub-schemas the config actually filled in. One it omits is\n // fine: the sub-schema supplies its own defaults.\n for (const slot of entry.slots) {\n const value = obj[slot.name];\n if (slot.subSlots && isRecord(value)) {\n checkSlots(value, {\n slots: slot.subSlots\n }, `${where}.${slot.name}`, report);\n }\n }\n}\n\n// Resolves a `type` against one of the manifest's groups.\n//\n// An unrecognized type is a WARNING, never an error, and the line is drawn\n// there deliberately:\n//\n// error = JBrowse accepts the config and silently does the wrong thing\n// warning = JBrowse will complain by itself when the config loads\n//\n// An unknown type is loud — MST throws \"Unknown track type\" on load, so the\n// author finds out either way. It is also frequently not wrong: a plugin\n// registers types this manifest never saw. An unknown *slot* has neither\n// property, which is why that one is the error.\nfunction resolveType(obj, group, groupLabel, where, report) {\n const typeName = obj.type;\n if (typeof typeName !== 'string') {\n report.error(where, `missing \"type\" — expected one of the ${groupLabel} types`);\n return undefined;\n }\n const canonical = typeName in group ? typeName :\n // An old type name a current type still answers to. baseTrackConfig\n // canonicalizes it before validation and sessionMigrations restores the\n // settings that made the old type distinct, so this is supported config\n // — check it against the type that absorbed it.\n Object.keys(group).find(name => group[name].aliases?.includes(typeName));\n const entry = canonical === undefined ? undefined : group[canonical];\n if (entry && canonical !== undefined) {\n return {\n ...entry,\n canonicalName: canonical\n };\n }\n report.warn(where, `${groupLabel} type \"${typeName}\" is not registered by the core plugins${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(typeName, Object.keys(group))} — it may come from a plugin`);\n return undefined;\n}\nfunction checkAdapter(adapter, manifest, where, report) {\n if (!isRecord(adapter)) {\n report.error(where, 'missing \"adapter\"');\n return;\n }\n const entry = resolveType(adapter, manifest.adapters, 'adapter', `${where}.type`, report);\n if (entry) {\n checkSlots(adapter, entry, where, report);\n }\n}\n\n// A pluggable sub-object written inline: resolve its type against `group`, then\n// check its own slots. `connections`, `aggregateTextSearchAdapters` and a\n// track's `textSearching.textSearchAdapter` are all this shape, and none of\n// them was opened at all — a Trix path typo is a search that returns nothing,\n// which is the class of mistake this command exists to catch.\nfunction checkPluggable(obj, group, groupLabel, where, report) {\n if (!isRecord(obj)) {\n report.error(where, `${groupLabel} must be an object`);\n return;\n }\n const entry = resolveType(obj, group, groupLabel, `${where}.type`, report);\n if (entry) {\n checkSlots(obj, entry, where, report);\n }\n}\nfunction checkDisplayDefaults(defaults, trackEntry, manifest, where, report) {\n if (!isRecord(defaults)) {\n report.error(where, 'displayDefaults must be an object of display settings');\n return;\n }\n const accepted = (0,_displayDefaultKeys_ts__WEBPACK_IMPORTED_MODULE_1__.displayDefaultKeys)(trackEntry, manifest);\n if (accepted.length === 0) {\n return;\n }\n for (const key of Object.keys(defaults)) {\n if (!accepted.includes(key)) {\n report.error(`${where}.${key}`, `no display of this track declares \"${key}\"${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(key, accepted)}`);\n }\n }\n}\nfunction checkTrack(track, index, manifest, report, ctx) {\n const where = `tracks[${index}]`;\n // The loose form: a data file and no adapter. JBrowse infers the track type\n // and adapter from the file's extension at load, so neither is required\n // here, and neither can be checked against the manifest without the format\n // plugins' guessers — the keys written beside `uri` still are.\n const loose = typeof track.uri === 'string' && !('adapter' in track);\n const entry = loose && track.type === undefined ? undefined : resolveType(track, manifest.tracks, 'track', `${where}.type`, report);\n const trackId = track.trackId;\n if (typeof trackId !== 'string' || !trackId) {\n report.error(`${where}.trackId`, 'missing \"trackId\"');\n } else if (ctx.seenTrackIds.has(trackId)) {\n report.error(`${where}.trackId`, `duplicate trackId \"${trackId}\" — a later track with the same id shadows the earlier one`);\n } else {\n ctx.seenTrackIds.add(trackId);\n }\n const names = track.assemblyNames;\n if (!Array.isArray(names) || names.length === 0) {\n if (!loose || ctx.assemblyCount !== 1) {\n report.error(`${where}.assemblyNames`, 'missing \"assemblyNames\"');\n }\n } else {\n for (const name of names) {\n if (typeof name === 'string' && !ctx.assemblyNames.has(name)) {\n // The connection caveat leads and the spelling guess trails, because a\n // connection needn't be in this file to supply the assembly — the one\n // that supplies test_data/volvox's `volvox_del2` is added at runtime,\n // and `did you mean \"volvox_del\"?` called a working config a typo.\n report.error(`${where}.assemblyNames`, `assembly \"${name}\" is not defined in this config, and no connection here supplies one — though a connection added at runtime can${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(name, [...ctx.assemblyNames])}`);\n }\n }\n }\n if (entry) {\n // displayDefaults is a shorthand no track schema declares, so it is\n // exempted from the track's own slot check and validated on its own terms.\n checkSlots(track, {\n ...entry,\n shorthandKeys: [...(entry.shorthandKeys ?? []), 'displayDefaults', ...(loose ? ['uri', 'index'] : [])]\n }, where, report);\n if (track.displayDefaults !== undefined) {\n checkDisplayDefaults(track.displayDefaults, entry, manifest, `${where}.displayDefaults`, report);\n }\n }\n if (!loose) {\n checkAdapter(track.adapter, manifest, `${where}.adapter`, report);\n }\n const textSearching = track.textSearching;\n if (isRecord(textSearching) && textSearching.textSearchAdapter !== undefined) {\n checkPluggable(textSearching.textSearchAdapter, manifest.textSearchAdapters, 'text search adapter', `${where}.textSearching.textSearchAdapter`, report);\n }\n if (Array.isArray(track.displays)) {\n for (const [i, display] of track.displays.entries()) {\n if (!isRecord(display)) {\n continue;\n }\n const displayWhere = `${where}.displays[${i}]`;\n const displayEntry = resolveType(display, manifest.displays, 'display', `${displayWhere}.type`, report);\n if (displayEntry) {\n checkSlots(display, displayEntry, displayWhere, report);\n }\n }\n }\n}\nfunction checkAssembly(assembly, index, manifest, report) {\n const where = `assemblies[${index}]`;\n if (typeof assembly.name !== 'string' || !assembly.name) {\n report.error(`${where}.name`, 'missing assembly \"name\"');\n }\n // An assembly has three levels of shorthand, all filled in by\n // assemblyConfigSchema's preProcessSnapshot, and this used to reject every one\n // of them — including `{ name, uri }`, which the cookbook calls the smallest\n // possible config:\n //\n // 1. `{ name, uri }` -> sequence: { adapter: { uri } }\n // 2. `sequence: { adapter: { uri } }` -> adapter type from the extension\n // 3. sequence with no type/trackId -> ReferenceSequenceTrack, derived id\n //\n // Only (2) can't be checked here, and deliberately: the type is guessed\n // through the `Core-guessAdapterForLocation` extension point, and this command\n // loads no plugins on purpose. A `uri` is therefore taken as enough — saying\n // nothing about an adapter we can't name beats calling a working config broken.\n const sequence = assembly.sequence ?? (typeof assembly.uri === 'string' ? {\n adapter: {\n uri: assembly.uri\n }\n } : undefined);\n if (!isRecord(sequence)) {\n report.error(`${where}.sequence`, 'missing \"sequence\" track (or a `uri` naming the sequence file)');\n return;\n }\n if (isRecord(sequence.adapter) && !('type' in sequence.adapter)) {\n if (typeof sequence.adapter.uri !== 'string') {\n report.error(`${where}.sequence.adapter`, 'adapter has neither a \"type\" nor a \"uri\" to infer one from');\n }\n return;\n }\n checkAdapter(sequence.adapter, manifest, `${where}.sequence.adapter`, report);\n}\n\n// A display node written inside a session — `views[].tracks[].displays[]` — is\n// instantiated by the display's STATE MODEL, not by its config schema. Almost\n// every track-menu setting is a config slot now, and a slot name here is dropped\n// exactly like a misspelling: the session loads, the track appears, the setting\n// does nothing. That is the same silent failure the slot checks above exist for,\n// on the surface people hand-write most, and it is why a whole class of these\n// sat unnoticed in this repo's own fixtures.\n//\n// The advice differs from the unknown-slot case, so the messages do too — a slot\n// is real, it is just in the wrong place, and there are two right places for it.\nfunction checkSessionDisplay(display, manifest, where, report) {\n const entry = resolveType(display, manifest.displays, 'display', `${where}.type`, report);\n // A display type the manifest doesn't know (a plugin's) has already been\n // reported as a warning by resolveType; its props are unknowable here.\n if (!entry?.stateModelProps) {\n return;\n }\n const props = entry.stateModelProps;\n const slots = entry.slots.map(slot => slot.name);\n const migrated = new Set([...(manifest.migratedDisplayKeys['*'] ?? []), ...(manifest.migratedDisplayKeys[entry.canonicalName] ?? [])]);\n for (const key of Object.keys(display)) {\n if (props.includes(key)) {\n continue;\n }\n if (migrated.has(key)) {\n report.warn(`${where}.${key}`, `\"${key}\" is a legacy display-instance key that a session migration lifts onto the config slot replacing it — it still works, but writing the current slot is clearer`);\n } else if (slots.includes(key)) {\n report.error(`${where}.${key}`, `\"${key}\" is a config slot, not a display property, so a session snapshot drops it and the setting silently does nothing — put it on the track's \"displays\" entry under \"tracks\", or in a \"trackConfigDeltas\" entry, instead`);\n } else {\n report.error(`${where}.${key}`, `unknown display property \"${key}\"${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(key, [...props, ...slots])} — a session snapshot drops keys the display does not declare, so this setting silently does nothing`);\n }\n }\n}\n\n// Walks the tracks of a view and its sub-views (a synteny view holds a row of\n// LGVs, each with tracks of its own).\nfunction checkSessionViewTracks(view, manifest, where, report) {\n if (!isRecord(view)) {\n return;\n }\n if (Array.isArray(view.tracks)) {\n for (const [i, track] of view.tracks.entries()) {\n if (!isRecord(track) || !Array.isArray(track.displays)) {\n continue;\n }\n for (const [j, display] of track.displays.entries()) {\n if (isRecord(display)) {\n checkSessionDisplay(display, manifest, `${where}.tracks[${i}].displays[${j}]`, report);\n }\n }\n }\n }\n if (Array.isArray(view.views)) {\n for (const [i, sub] of view.views.entries()) {\n checkSessionViewTracks(sub, manifest, `${where}.views[${i}]`, report);\n }\n }\n}\n\n// A view's `init` names tracks and an assembly by id. Nothing validates those at\n// load: a trackId that does not exist simply fails to open, which reads as a\n// rendering bug rather than a typo.\nfunction checkSession(session, manifest, report, ctx) {\n if (!isRecord(session) || !Array.isArray(session.views)) {\n return;\n }\n for (const [i, view] of session.views.entries()) {\n checkSessionViewTracks(view, manifest, `defaultSession.views[${i}]`, report);\n }\n for (const [i, view] of session.views.entries()) {\n if (!isRecord(view) || !isRecord(view.init)) {\n continue;\n }\n const init = view.init;\n const where = `defaultSession.views[${i}].init`;\n if (typeof init.assembly === 'string' && !ctx.assemblyNames.has(init.assembly)) {\n report.error(`${where}.assembly`, `assembly \"${init.assembly}\" is not defined in this config${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(init.assembly, [...ctx.assemblyNames])}`);\n }\n if (Array.isArray(init.tracks)) {\n // A LinearSyntenyView's `tracks` is one array PER LEVEL (`[[a], [b]]`) —\n // the multi-way form — so flatten one level before reading entries.\n // Treating those inner arrays as track entries reported every genome row\n // of every synteny demo as a track with no trackId.\n const entries = init.tracks.flatMap(t => Array.isArray(t) ? t : [t]);\n for (const [j, entry] of entries.entries()) {\n const trackId = typeof entry === 'string' ? entry : isRecord(entry) ? entry.trackId : undefined;\n if (typeof trackId !== 'string') {\n report.error(`${where}.tracks[${j}]`, 'track entry has no trackId');\n } else if (!ctx.seenTrackIds.has(trackId) && !ctx.sequenceTrackIds.has(trackId)) {\n report.error(`${where}.tracks[${j}]`, `trackId \"${trackId}\" is not defined in this config${(0,_suggest_ts__WEBPACK_IMPORTED_MODULE_2__.didYouMean)(trackId, [...ctx.seenTrackIds, ...ctx.sequenceTrackIds])}`);\n }\n }\n }\n }\n}\nfunction validateConfig(config, manifest = _configManifest_generated_ts__WEBPACK_IMPORTED_MODULE_0__.configManifest) {\n const report = new Report();\n if (!isRecord(config)) {\n report.error('', 'config is not a JSON object');\n return report.result();\n }\n if (Array.isArray(config.plugins) && config.plugins.length > 0) {\n report.note(`config declares ${config.plugins.length} plugin(s); the types and slots they register are not in the manifest and cannot be checked`);\n }\n const assemblies = (Array.isArray(config.assemblies) ? config.assemblies : isRecord(config.assembly) ? [config.assembly] : []).filter(isRecord);\n if (assemblies.length === 0) {\n report.error('assemblies', 'no assemblies — a config needs at least one');\n }\n const connections = Array.isArray(config.connections) ? config.connections : [];\n const ctx = {\n // An assembly's `aliases` are usable wherever its name is — a track can say\n // `assemblyNames: ['vvx']` against an assembly named volvox that lists vvx\n // as an alias. Leaving them out reports working configs as broken.\n assemblyNames: new Set(assemblies.flatMap(a => [a.name, ...(Array.isArray(a.aliases) ? a.aliases : [])]).filter(n => typeof n === 'string')),\n assemblyCount: assemblies.length,\n seenTrackIds: new Set(),\n // Each assembly's ReferenceSequenceTrack is a real track a session may show\n // by id (`init.tracks: ['hg38-ReferenceSequenceTrack']`); it just lives on\n // the assembly rather than in `tracks`, and collecting only `tracks`\n // reported every such reference as undefined. Both the written trackId and\n // the one the `{name, uri}` shorthand derives, since a config using the\n // shorthand still gets the derived id at runtime.\n sequenceTrackIds: new Set(assemblies.flatMap(a => {\n const declared = isRecord(a.sequence) ? a.sequence.trackId : undefined;\n return [...(typeof declared === 'string' ? [declared] : []), ...(typeof a.name === 'string' ? [`${a.name}-ReferenceSequenceTrack`] : [])];\n }))\n };\n for (const [i, assembly] of assemblies.entries()) {\n checkAssembly(assembly, i, manifest, report);\n }\n const tracks = Array.isArray(config.tracks) ? config.tracks.filter(isRecord) : [];\n for (const [i, track] of tracks.entries()) {\n checkTrack(track, i, manifest, report, ctx);\n }\n for (const [i, connection] of connections.entries()) {\n checkPluggable(connection, manifest.connections, 'connection', `connections[${i}]`, report);\n }\n const aggregate = Array.isArray(config.aggregateTextSearchAdapters) ? config.aggregateTextSearchAdapters : [];\n for (const [i, adapter] of aggregate.entries()) {\n checkPluggable(adapter, manifest.textSearchAdapters, 'text search adapter', `aggregateTextSearchAdapters[${i}]`, report);\n }\n\n // Tracks are registered before the session is checked, so a session may\n // reference any track in the file regardless of declaration order.\n checkSession(config.defaultSession, manifest, report, ctx);\n return report.result();\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/commands/validate/validateConfig.ts?\n}");
|
|
626
|
-
|
|
627
|
-
/***/ },
|
|
628
|
-
|
|
629
|
-
/***/ "./src/index.ts"
|
|
630
|
-
/*!**********************!*\
|
|
631
|
-
!*** ./src/index.ts ***!
|
|
632
|
-
\**********************/
|
|
633
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
634
|
-
|
|
635
|
-
"use strict";
|
|
636
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ main: () => (/* binding */ main)\n/* harmony export */ });\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:util */ \"node:util\");\n/* harmony import */ var node_util__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_util__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _version_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./version.ts */ \"./src/version.ts\");\n//#!/usr/bin/env node\n\n\n\n// single source of truth for both dispatch and the global help listing, so a\n// new command can never be wired into one but forgotten in the other.\n//\n// Each command is LOADED WHEN IT IS DISPATCHED, not imported here: a static\n// import list makes every invocation pay for every command's module graph, and\n// text-index's parsers alone are most of it. `jbrowse add-track` went from\n// 0.35s to 0.21s of startup, which is the whole of what that command does.\nconst registry = [{\n name: 'create',\n summary: 'Downloads and installs the latest JBrowse 2 release',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/create.ts */ \"./src/commands/create.ts\")).then(m => m.run)\n}, {\n name: 'add-assembly',\n summary: 'Add an assembly to a JBrowse 2 configuration',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/add-assembly/index.ts */ \"./src/commands/add-assembly/index.ts\")).then(m => m.run)\n}, {\n name: 'add-track',\n summary: 'Add a track to a JBrowse 2 configuration',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/add-track.ts */ \"./src/commands/add-track.ts\")).then(m => m.run)\n}, {\n name: 'validate',\n summary: 'Check a configuration for errors, including ones JBrowse accepts silently',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/validate/index.ts */ \"./src/commands/validate/index.ts\")).then(m => m.run)\n}, {\n name: 'text-index',\n summary: 'Make a text-indexing file for any given track(s)',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/text-index/index.ts */ \"./src/commands/text-index/index.ts\")).then(m => m.run)\n}, {\n name: 'admin-server',\n summary: 'Start up a small admin server for JBrowse configuration',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/admin-server/index.ts */ \"./src/commands/admin-server/index.ts\")).then(m => m.run)\n}, {\n name: 'upgrade',\n summary: 'Upgrades JBrowse 2 to latest version',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/upgrade.ts */ \"./src/commands/upgrade.ts\")).then(m => m.run)\n}, {\n name: 'make-pif',\n summary: 'Creates pairwise indexed PAF (PIF), with bgzip and tabix',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/make-pif/index.ts */ \"./src/commands/make-pif/index.ts\")).then(m => m.run)\n}, {\n name: 'sort-gff',\n summary: 'Sort a GFF/GTF for tabix: sort -k1,1 -k4,4n, header kept on top',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/sort-gff.ts */ \"./src/commands/sort-gff.ts\")).then(m => m.run)\n}, {\n name: 'sort-bed',\n summary: 'Sort a BED for tabix: sort -k1,1 -k2,2n, header kept on top',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/sort-bed.ts */ \"./src/commands/sort-bed.ts\")).then(m => m.run)\n}, {\n name: 'add-connection',\n summary: 'Add a connection to a JBrowse 2 configuration',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/add-connection.ts */ \"./src/commands/add-connection.ts\")).then(m => m.run)\n}, {\n name: 'add-track-json',\n summary: 'Add a track configuration directly from a JSON hunk',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/add-track-json.ts */ \"./src/commands/add-track-json.ts\")).then(m => m.run)\n}, {\n name: 'remove-track',\n summary: 'Remove a track configuration from a JBrowse 2 configuration',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/remove-track.ts */ \"./src/commands/remove-track.ts\")).then(m => m.run)\n}, {\n name: 'set-default-session',\n summary: 'Set a default session with views and tracks',\n load: () => Promise.resolve(/*! import() */).then(__webpack_require__.bind(__webpack_require__, /*! ./commands/set-default-session.ts */ \"./src/commands/set-default-session.ts\")).then(m => m.run)\n}];\nasync function main(args) {\n try {\n const {\n values: flags,\n positionals\n } = (0,node_util__WEBPACK_IMPORTED_MODULE_0__.parseArgs)({\n args,\n options: {\n help: {\n type: 'boolean',\n short: 'h',\n default: false\n },\n version: {\n type: 'boolean',\n short: 'v',\n default: false\n }\n },\n allowPositionals: true,\n strict: false // Allow unknown flags to be passed to subcommands\n });\n\n // Check if help or version is requested at the global level\n if (flags.help && positionals.length === 0) {\n showGlobalHelp();\n return;\n }\n if (flags.version && positionals.length === 0) {\n console.log(`@jbrowse/cli version ${_version_ts__WEBPACK_IMPORTED_MODULE_1__.version}`);\n return;\n }\n const commandName = positionals[0];\n if (!commandName) {\n console.error('Error: Missing command');\n showGlobalHelp();\n process.exit(1);\n }\n const command = registry.find(c => c.name === commandName);\n if (!command) {\n console.error(`Error: Unknown command \"${commandName}\"`);\n console.error(`Available commands: ${registry.map(c => c.name).join(', ')}`);\n process.exit(1);\n }\n\n // Pass everything after the command token to the command. Slicing from the\n // command's actual position (rather than a hardcoded index 0) keeps this\n // correct when a global flag precedes the command, e.g. `jbrowse -v create`\n const commandArgs = args.slice(args.indexOf(commandName) + 1);\n // ...but that slice drops a help flag written before the command, so\n // `jbrowse --help create` used to run create with no args and fail on the\n // missing positional instead of printing its help\n if (flags.help && !commandArgs.some(a => a === '--help' || a === '-h')) {\n commandArgs.push('--help');\n }\n await (await command.load())(commandArgs);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const code = error instanceof Error ? error.code : undefined;\n console.error('Error:', message);\n if (code === 'EPIPE' || code === 'ENOSPC' || message.includes('EPIPE')) {\n console.error(`\nThis error may be caused by running out of space in the temporary directory.\nTry setting a custom TMPDIR with more available space:\n\n mkdir mytmpdir\n TMPDIR=mytmpdir jbrowse text-index ...\n\n`);\n }\n process.exit(1);\n }\n}\nfunction showGlobalHelp() {\n const width = Math.max(...registry.map(c => c.name.length)) + 2;\n const commandLines = registry.map(c => ` ${c.name.padEnd(width)}${c.summary}`).join('\\n');\n console.log(`\nJBrowse CLI\n\nUSAGE\n $ jbrowse <command> [options]\n\nCOMMANDS\n${commandLines}\n\nOPTIONS\n -h, --help Show help\n -v, --version Show version\n\nUse \"jbrowse <command> --help\" for more information about a command.\n`);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/index.ts?\n}");
|
|
637
|
-
|
|
638
|
-
/***/ },
|
|
639
|
-
|
|
640
|
-
/***/ "./src/types/common.ts"
|
|
641
|
-
/*!*****************************!*\
|
|
642
|
-
!*** ./src/types/common.ts ***!
|
|
643
|
-
\*****************************/
|
|
644
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
645
|
-
|
|
646
|
-
"use strict";
|
|
647
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ isURL: () => (/* reexport safe */ _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_1__.isURL),\n/* harmony export */ supported: () => (/* reexport safe */ _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_0__.isSupportedIndexingAdapter)\n/* harmony export */ });\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/util.ts\");\n/* harmony import */ var _jbrowse_text_indexing_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @jbrowse/text-indexing-core */ \"../../packages/text-indexing-core/src/types/common.ts\");\n// the indexer package owns both of these: which adapter types text-index can\n// handle, and the URL test its stream opener uses to pick fetch vs fs\n\n\n//# sourceURL=webpack://@jbrowse/cli/./src/types/common.ts?\n}");
|
|
648
|
-
|
|
649
|
-
/***/ },
|
|
650
|
-
|
|
651
|
-
/***/ "./src/utils.ts"
|
|
652
|
-
/*!**********************!*\
|
|
653
|
-
!*** ./src/utils.ts ***!
|
|
654
|
-
\**********************/
|
|
655
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
656
|
-
|
|
657
|
-
"use strict";
|
|
658
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STDIN_ARG: () => (/* binding */ STDIN_ARG),\n/* harmony export */ debug: () => (/* binding */ debug),\n/* harmony export */ downloadRelease: () => (/* binding */ downloadRelease),\n/* harmony export */ extractZip: () => (/* binding */ extractZip),\n/* harmony export */ ignoreNotFound: () => (/* binding */ ignoreNotFound),\n/* harmony export */ isRecord: () => (/* binding */ isRecord),\n/* harmony export */ parseCommaSeparatedString: () => (/* binding */ parseCommaSeparatedString),\n/* harmony export */ printHelp: () => (/* binding */ printHelp),\n/* harmony export */ printVersions: () => (/* binding */ printVersions),\n/* harmony export */ readConfigFile: () => (/* binding */ readConfigFile),\n/* harmony export */ readInlineOrFileJson: () => (/* binding */ readInlineOrFileJson),\n/* harmony export */ readJsonFile: () => (/* binding */ readJsonFile),\n/* harmony export */ requirePositional: () => (/* binding */ requirePositional),\n/* harmony export */ resolveConfigPath: () => (/* binding */ resolveConfigPath),\n/* harmony export */ writeJsonFile: () => (/* binding */ writeJsonFile)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(node_fs__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(node_path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:zlib */ \"node:zlib\");\n/* harmony import */ var node_zlib__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(node_zlib__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _cliFetch_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./cliFetch.ts */ \"./src/cliFetch.ts\");\n\n\n\n\nfunction parseCommaSeparatedString(value) {\n return value?.split(',').map(s => s.trim()).filter(Boolean) ?? [];\n}\n\n// throws a uniform \"missing argument\" error (with the same usage string passed\n// to printHelp) when a required positional is absent, and narrows the value to\n// string for the caller\nfunction requirePositional(value, name, usage) {\n if (!value) {\n throw new Error(`Missing required argument: ${name}\\nUsage: ${usage}`);\n }\n}\n\n// a JSON object, as opposed to a string/number/array/null. Parsed JSON reaches\n// several commands as `unknown`, and the failure mode of not checking is that\n// spreading a string yields an object of numeric keys.\nfunction isRecord(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\nfunction ignoreNotFound(promise) {\n return promise.catch(err => {\n if (err.code !== 'ENOENT') {\n throw err;\n }\n return null;\n });\n}\nfunction debug(message) {\n if (process.env.DEBUG) {\n console.log(`DEBUG: ${message}`);\n }\n}\nasync function resolveConfigPath(target, out) {\n const output = target || out || '.';\n // stat (not lstat) so a symlinked install directory resolves to its\n // config.json rather than being treated as the config file itself. A path\n // that isn't there at all is resolved from its name instead of rejected here,\n // so the caller's readConfigFile reports which config was missing and how to\n // make one rather than this leaking a bare stat ENOENT\n const stat = await ignoreNotFound(node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.stat(output));\n const isDir = stat ? stat.isDirectory() : !output.endsWith('.json');\n return isDir ? node_path__WEBPACK_IMPORTED_MODULE_1___default().join(output, 'config.json') : output;\n}\n\n// `-` as a file argument means stdin, so a JSON hunk can be piped in rather than\n// staged as a file: `jq … | jbrowse add-track-json -`\nconst STDIN_ARG = '-';\nlet stdinConsumed = false;\nfunction readStdin() {\n // reading fd 0 twice yields nothing the second time, which would surface as a\n // baffling JSON parse error rather than the mistake it is\n if (stdinConsumed) {\n throw new Error('stdin (\"-\") can only be read once per command');\n }\n stdinConsumed = true;\n return (0,node_fs__WEBPACK_IMPORTED_MODULE_0__.readFileSync)(0, 'utf8');\n}\nasync function readJsonFile(location) {\n const contents = location === STDIN_ARG ? readStdin() : await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.readFile(location, {\n encoding: 'utf8'\n });\n return JSON.parse(contents);\n}\n\n// reads the config of an existing install. Running a command from the wrong\n// directory is the most common mistake, and a bare ENOENT does not say which\n// directory was searched or what to do about it\nasync function readConfigFile(location) {\n // catching the code rather than testing the parsed value keeps a config that\n // legitimately parses to something falsy from reporting itself as missing\n return readJsonFile(location).catch(error => {\n if (error.code === 'ENOENT') {\n throw new Error(`No JBrowse config found at ${node_path__WEBPACK_IMPORTED_MODULE_1___default().resolve(location)}\\n` + 'Run \"jbrowse create <dir>\" to make a new installation, or point at an existing one with --out <dir>');\n }\n throw error;\n });\n}\nasync function writeJsonFile(location, contents) {\n debug(`Writing JSON file to ${process.cwd()} ${location}`);\n return node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.writeFile(location, JSON.stringify(contents, null, 2));\n}\nasync function readInlineOrFileJson(inlineOrFileName) {\n // checked before the inline attempt rather than falling through it, so the\n // intent is explicit (JSON.parse('-') happens to throw, but not by design)\n if (inlineOrFileName === STDIN_ARG) {\n return readJsonFile(STDIN_ARG);\n }\n let result;\n // see if it's inline JSON\n try {\n result = JSON.parse(inlineOrFileName);\n } catch (error) {\n debug(`Not valid inline JSON, attempting to parse as filename: '${inlineOrFileName}'`);\n // not inline JSON, must be location of a JSON file\n result = await readJsonFile(inlineOrFileName);\n }\n return result;\n}\nasync function fetchGithubVersions() {\n const versions = [];\n for await (const iter of fetchVersions()) {\n versions.push(...iter);\n }\n return versions;\n}\n\n// Authenticated when the environment offers a token, because GitHub's anonymous\n// API allows 60 requests an hour PER IP and CI runners share addresses: a\n// `jbrowse create --tag v4.3.0` step fails partway through an otherwise green\n// run, on nobody's diff, at whatever hour someone else's job exhausted the\n// budget. jbrowse-plugin-protein3d and -msaview both lost a pinned-host e2e leg\n// to it within a minute of each other on 2026-08-17. GITHUB_TOKEN is already in\n// the environment of every Actions job, and raises the ceiling to 5000.\nfunction githubToken() {\n return process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;\n}\n\n// fetch + parse JSON from the GitHub API, throwing on a non-ok response. The\n// lone cast localizes the unavoidable response.json(): Promise<unknown>\nasync function fetchJson(url) {\n const token = githubToken();\n const response = await (0,_cliFetch_ts__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(url, token ? {\n headers: {\n authorization: `Bearer ${token}`\n }\n } : {});\n if (!response.ok) {\n // 403 unauthenticated is nearly always the rate limit rather than anything\n // about this url, and the caller above turns a throw into \"could not find\n // version\", which sends the reader looking for a version that is right\n // there. Say which it is.\n throw new Error(response.status === 403 && !token ? `HTTP 403 fetching ${url} -- probably GitHub's 60/hour anonymous rate limit. Set GITHUB_TOKEN to raise it.` : `HTTP ${response.status} fetching ${url}`);\n }\n return response.json();\n}\n\n// the jbrowse-web build is the asset we unpack; a release can have no matching\n// asset if it was just uploaded or its build failed\nfunction findWebAssetUrl(release) {\n return release.assets?.find(f => f.name.includes('jbrowse-web'))?.browser_download_url;\n}\nasync function getLatest() {\n for await (const versions of fetchVersions()) {\n const release = versions.find(r => !r.prerelease && r.assets?.length);\n if (release) {\n const file = findWebAssetUrl(release);\n if (file) {\n return file;\n } else {\n throw new Error('no jbrowse-web download found');\n }\n }\n }\n throw new Error('no version tags found');\n}\nasync function* fetchVersions() {\n let page = 1;\n let done = false;\n while (!done) {\n const result = await fetchJson(`https://api.github.com/repos/GMOD/jbrowse-components/releases?page=${page}`);\n if (result.length === 0) {\n done = true;\n } else {\n yield result.filter(release => release.tag_name.startsWith('v'));\n page++;\n }\n }\n}\nasync function getTag(tag) {\n const release = await fetchJson(`https://api.github.com/repos/GMOD/jbrowse-components/releases/tags/${tag}`);\n const file = findWebAssetUrl(release);\n if (file) {\n return file;\n } else {\n throw new Error('Could not find version specified. Use --listVersions to see all available versions');\n }\n}\n\n// The prefix a branch build is deployed under is slash-free. push.yml collapses\n// `/` to `-` before it syncs (`SAFE_REF=\"${REF_NAME//\\//-}\"`) and then asserts\n// the result is [A-Za-z0-9_.-], because the prefix is an S3 path and a nested\n// branch name would otherwise open a directory in it. The zip inside is named\n// from the same collapsed ref.\n//\n// So the collapse has to happen on this side too, or `--branch port/foo` asks\n// for code/jb2/port/foo/jbrowse-web-port/foo.zip and 404s — for a build that\n// was deployed, and is sitting at code/jb2/port-foo/. Slashes are the normal\n// case for a branch name here (port/*, dependabot/*, anyone's feature/*).\nfunction getBranch(branch) {\n const safeBranch = branch.replaceAll('/', '-');\n return `https://s3.amazonaws.com/jbrowse.org/code/jb2/${safeBranch}/jbrowse-web-${safeBranch}.zip`;\n}\n// resolves the JBrowse release download URL from the create/upgrade flags,\n// preferring an explicit --url, then --nightly, --branch, and finally --tag\n// (or the latest release)\nasync function resolveReleaseUrl({\n url,\n nightly,\n branch,\n tag\n}) {\n return url ? url : nightly ? getBranch('main') : branch ? getBranch(branch) : tag ? getTag(tag) : getLatest();\n}\n\n// shared by create/upgrade: resolve the release URL then download it. Returns\n// both so the caller can log which URL was unpacked.\nasync function downloadRelease(flags) {\n const locationUrl = await resolveReleaseUrl(flags);\n const archive = await fetchReleaseArchive(locationUrl, !!flags.url);\n return {\n locationUrl,\n archive\n };\n}\nasync function printVersions() {\n const versions = (await fetchGithubVersions()).map(v => v.tag_name);\n console.log(`All JBrowse versions:\\n${versions.join('\\n')}`);\n}\nasync function fetchReleaseArchive(locationUrl, validateZipContentType) {\n console.log(`Fetching ${locationUrl}...`);\n const response = await (0,_cliFetch_ts__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(locationUrl);\n if (!response.ok) {\n throw new Error(`HTTP ${response.status} fetching ${locationUrl}: ${response.statusText}`);\n }\n const type = response.headers.get('content-type');\n if (validateZipContentType && type !== 'application/zip' && type !== 'application/octet-stream') {\n throw new Error('The URL provided does not seem to be a JBrowse installation URL');\n }\n return Buffer.from(await response.arrayBuffer());\n}\n\n// ZIP record signatures (little-endian)\nconst EOCD_SIG = 0x06054b50; // end of central directory\nconst CDH_SIG = 0x02014b50; // central directory header\n\n// Walks the central directory rather than the local headers, because its\n// offsets/sizes stay accurate even when a local header defers them to a data\n// descriptor. Yielding entries keeps the pointer arithmetic in one place, so\n// everything downstream works in terms of entries.\nfunction* centralDirectoryEntries(archive) {\n const eocd = findEndOfCentralDirectory(archive);\n const entryCount = archive.readUInt16LE(eocd + 10);\n let ptr = archive.readUInt32LE(eocd + 16);\n for (let i = 0; i < entryCount; i++) {\n if (archive.readUInt32LE(ptr) !== CDH_SIG) {\n throw new Error('Corrupt ZIP: bad central directory header');\n }\n const nameLen = archive.readUInt16LE(ptr + 28);\n const extraLen = archive.readUInt16LE(ptr + 30);\n const commentLen = archive.readUInt16LE(ptr + 32);\n yield {\n name: archive.toString('utf8', ptr + 46, ptr + 46 + nameLen),\n method: archive.readUInt16LE(ptr + 10),\n compressedSize: archive.readUInt32LE(ptr + 20),\n localOffset: archive.readUInt32LE(ptr + 42)\n };\n ptr += 46 + nameLen + extraLen + commentLen;\n }\n}\nfunction inflateEntry(archive, {\n localOffset,\n compressedSize,\n method\n}) {\n // the local header's name/extra lengths can differ from the central one, so\n // the data offset has to be computed from the local header\n const nameLen = archive.readUInt16LE(localOffset + 26);\n const extraLen = archive.readUInt16LE(localOffset + 28);\n const dataStart = localOffset + 30 + nameLen + extraLen;\n const raw = archive.subarray(dataStart, dataStart + compressedSize);\n return method === 0 ? raw : node_zlib__WEBPACK_IMPORTED_MODULE_2___default().inflateRawSync(raw);\n}\n\n// Extracts a ZIP archive (a JBrowse web build) into destPath with the built-in\n// node:zlib. Replaces the `decompress` dependency and its large, unmaintained\n// transitive tree without pulling in a new one.\nasync function extractZip(archive, destPath) {\n await Promise.all([...centralDirectoryEntries(archive)]\n // directory entries (trailing slash) carry no file data; the files below\n // create their own parent dirs\n .filter(entry => !entry.name.endsWith('/')).map(entry => writeZipEntry(destPath, entry.name, inflateEntry(archive, entry))));\n}\nasync function writeZipEntry(destPath, name, data) {\n const outPath = node_path__WEBPACK_IMPORTED_MODULE_1___default().join(destPath, name);\n // guard against zip-slip: a crafted entry name (e.g. ../../etc/foo) must not\n // let path.join escape destPath, since --url accepts arbitrary archives\n const rel = node_path__WEBPACK_IMPORTED_MODULE_1___default().relative(destPath, outPath);\n if (rel.startsWith('..') || node_path__WEBPACK_IMPORTED_MODULE_1___default().isAbsolute(rel)) {\n throw new Error(`Corrupt ZIP: entry escapes destination directory: ${name}`);\n }\n await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.mkdir(node_path__WEBPACK_IMPORTED_MODULE_1___default().dirname(outPath), {\n recursive: true\n });\n await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.writeFile(outPath, data);\n}\nfunction findEndOfCentralDirectory(archive) {\n // the EOCD sits at the end, after an optional comment of up to 64KB, so scan\n // backwards for its signature\n for (let i = archive.length - 22; i >= 0; i--) {\n if (archive.readUInt32LE(i) === EOCD_SIG) {\n return i;\n }\n }\n throw new Error('Corrupt ZIP: no end-of-central-directory record');\n}\n\n// help text is authored as one long string where \\n\\n is a paragraph break and a\n// bare \\n is insignificant whitespace, so unfold it back into paragraphs\nfunction paragraphs(text) {\n return text.split('\\n\\n').map(p => p.replaceAll('\\n', ' '));\n}\n\n// greedily pack words into lines no wider than `width`. A word longer than the\n// width gets a line to itself rather than being broken.\nfunction wrapParagraph(paragraph, width) {\n if (paragraph.length <= width) {\n return [paragraph];\n }\n const lines = [];\n for (const word of paragraph.split(' ')) {\n const last = lines.at(-1);\n if (last !== undefined && last.length + 1 + word.length <= width) {\n lines[lines.length - 1] = `${last} ${word}`;\n } else {\n lines.push(word);\n }\n }\n return lines;\n}\nfunction wrapText(text, width, indent) {\n return paragraphs(text)\n // a blank line separates paragraphs\n .flatMap((p, i) => (i === 0 ? [] : ['']).concat(wrapParagraph(p, width)))\n // indent continuation lines, but leave the blank separators empty rather\n // than filling them with trailing indent whitespace\n .map((line, i) => i === 0 || !line ? line : indent + line).join('\\n');\n}\n\n// the subset of a parseArgs option definition that printHelp renders (the\n// definitions also carry `type`/`multiple`, which are ignored here)\n\n// one rendered `-x, --name description [choices: ...] [default: ...]` line, with\n// the description wrapped under the name column\nfunction formatOption(name, opt, termWidth) {\n const prefix = opt.short ? ` -${opt.short}, ` : ' '.repeat(6);\n const namePadded = `--${name}`.padEnd(22, ' ');\n const indent = ' '.repeat(prefix.length + namePadded.length + 1);\n const desc = [\n // every command declares a bare help flag; give it uniform wording so the\n // rendered `-h, --help` line is never blank\n opt.description ?? (name === 'help' ? 'Show help' : ''), opt.choices && ` [choices: ${opt.choices.join(', ')}]`, opt.default !== undefined && ` [default: ${opt.default}]`].filter(Boolean).join('');\n const wrapped = desc ? wrapText(desc, termWidth - indent.length, indent) : '';\n return `${prefix}${namePadded} ${wrapped}`.trimEnd();\n}\nfunction printHelp({\n description,\n options,\n examples,\n notes,\n usage\n}) {\n const termWidth = process.stdout.columns || 80;\n console.log([wrapText(description, termWidth, ''), `\\nUsage: ${usage || 'jbrowse <command> [options]'}`, '\\nOptions:',\n // a blank line after each option, so long wrapped descriptions stay\n // visually separated\n ...Object.entries(options).map(([name, opt]) => `${formatOption(name, opt, termWidth)}\\n`), ...(notes ? [`Notes:\\n\\n${wrapText(notes, termWidth, '')}\\n`] : []), ...(examples.length ? ['Examples:\\n', examples.join('\\n')] : [])].join('\\n'));\n}\n\n//# sourceURL=webpack://@jbrowse/cli/./src/utils.ts?\n}");
|
|
659
|
-
|
|
660
|
-
/***/ },
|
|
661
|
-
|
|
662
|
-
/***/ "./src/version.ts"
|
|
663
|
-
/*!************************!*\
|
|
664
|
-
!*** ./src/version.ts ***!
|
|
665
|
-
\************************/
|
|
666
|
-
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
667
|
-
|
|
668
|
-
"use strict";
|
|
669
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ version: () => (/* binding */ version)\n/* harmony export */ });\nconst version = '5.0.0-beta.1';\n\n//# sourceURL=webpack://@jbrowse/cli/./src/version.ts?\n}");
|
|
670
|
-
|
|
671
|
-
/***/ },
|
|
672
|
-
|
|
673
|
-
/***/ "../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js"
|
|
674
|
-
/*!******************************************************************************************!*\
|
|
675
|
-
!*** ../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js ***!
|
|
676
|
-
\******************************************************************************************/
|
|
677
|
-
(module) {
|
|
678
|
-
|
|
679
|
-
"use strict";
|
|
680
|
-
eval("{\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js?\n}");
|
|
681
|
-
|
|
682
|
-
/***/ },
|
|
683
|
-
|
|
684
|
-
/***/ "../../node_modules/.pnpm/brace-expansion@1.1.18/node_modules/brace-expansion/index.js"
|
|
685
|
-
/*!*********************************************************************************************!*\
|
|
686
|
-
!*** ../../node_modules/.pnpm/brace-expansion@1.1.18/node_modules/brace-expansion/index.js ***!
|
|
687
|
-
\*********************************************************************************************/
|
|
688
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
689
|
-
|
|
690
|
-
eval("{var concatMap = __webpack_require__(/*! concat-map */ \"../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js\");\nvar balanced = __webpack_require__(/*! balanced-match */ \"../../node_modules/.pnpm/balanced-match@1.0.2/node_modules/balanced-match/index.js\");\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nvar EXPANSION_MAX = 100000\n\n// `EXPANSION_MAX` caps the *number* of expansions, but not their length. An\n// input like `'{a,b}'.repeat(1500)` stays under that count - its output is\n// truncated to 100k results - while making every result ~1500 characters\n// long. The result set, and the intermediate arrays built while combining\n// brace sets, then grow large enough to exhaust memory and crash the process\n// (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of\n// characters the accumulator may hold at any point, so memory stays flat no\n// matter how many brace groups are chained. The limit sits well above any\n// realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M\n// characters) so legitimate input is unaffected.\nvar EXPANSION_MAX_LENGTH = 4000000\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str, options) {\n if (!str)\n return [];\n\n options = options || {};\n var max = options.max == null ? EXPANSION_MAX : options.max;\n var maxLength = options.maxLength == null ? EXPANSION_MAX_LENGTH : options.maxLength;\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), max, maxLength, true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\n// Build `{ acc[a] + pre + values[v] }` for every combination, capping the\n// number of results at `max` and the total number of characters at `maxLength`.\n// This is the one place output grows, so bounding it here keeps the single\n// accumulator - and therefore memory - flat regardless of how many brace groups\n// are combined (CVE-2026-14257).\n//\n// `base[a]` is the length of the part of `acc[a]` that predates the current\n// empty-drop baseline (see `expand`). The matching baselines for the results\n// are appended to `outBase`, which the caller carries forward alongside them.\nfunction combine(\n acc,\n base,\n pre,\n values,\n max,\n maxLength,\n dropEmpties,\n outBase\n) {\n var out = []\n var length = 0\n for (var a = 0; a < acc.length; a++) {\n for (var v = 0; v < values.length; v++) {\n if (out.length >= max) return out\n var expansion = acc[a] + pre + values[v]\n // Bash drops empty results at the top level. Skip them before they count\n // against `max`, so `max` bounds the number of *kept* results. \"Empty\"\n // means \"adds nothing past the baseline\", not \"empty overall\".\n if (dropEmpties && expansion.length === base[a]) continue\n if (length + expansion.length > maxLength) return out\n out.push(expansion)\n outBase.push(base[a])\n length += expansion.length\n }\n }\n return out\n}\n\n// The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)\n// sequence body.\nfunction expandSequence(\n body,\n isAlphaSequence,\n max,\n maxLength\n) {\n var n = body.split(/\\.\\./)\n var N = []\n // A sequence body always splits into two or three parts, but the compiler\n // can't know that.\n /* c8 ignore start */\n if (n[0] === undefined || n[1] === undefined) {\n return N\n }\n /* c8 ignore stop */\n var x = numeric(n[0])\n var y = numeric(n[1])\n var width = Math.max(n[0].length, n[1].length)\n var incr =\n n.length === 3 && n[2] !== undefined ?\n Math.max(Math.abs(numeric(n[2])), 1)\n : 1\n var test = lte\n var reverse = y < x\n if (reverse) {\n incr *= -1\n test = gte\n }\n var pad = n.some(isPadded)\n\n var length = 0\n for (var i = x; test(i, y) && N.length < max; i += incr) {\n var c\n if (isAlphaSequence) {\n c = String.fromCharCode(i)\n if (c === '\\\\') {\n c = ''\n }\n } else {\n c = String(i)\n if (pad) {\n var need = width - c.length\n if (need > 0) {\n var z = new Array(need + 1).join('0')\n if (i < 0) {\n c = '-' + z + c.slice(1)\n } else {\n c = z + c\n }\n }\n }\n }\n if (length + c.length > maxLength) break\n N.push(c)\n length += c.length\n }\n return N\n}\n\nfunction expand(\n str,\n max,\n maxLength,\n isTop\n) {\n // Consume the string's top-level brace groups left to right, threading a\n // running set of combined prefixes (`acc`). Expanding the tail iteratively -\n // rather than recursing on `m.post` once per group - keeps the native stack\n // depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no\n // longer overflow the stack, and leaves a single accumulator whose size\n // `maxLength` bounds directly (CVE-2026-14257).\n var acc = ['']\n\n // Bash drops empty results, but only when the *first* group of the run is a\n // comma set - a sequence like `{a..\\}` may legitimately yield ''. The drop\n // is on the final strings, so it is applied to whichever `combine` produces\n // them (the one with no brace set left in the tail).\n //\n // The old implementation recursed on `m.post`, so the drop tested only the\n // expansion of the current call's substring. The `{a},b}` rewrite below turns\n // `isTop` back on part-way through a string, starting a fresh such run, so\n // the drop must ignore whatever `acc` already holds from earlier groups.\n // `accBase[a]` records how much of `acc[a]` predates the current run;\n // `combine` treats an expansion as empty when it adds nothing past that.\n var accBase = [0]\n var dropEmpties = false\n var firstGroup = true\n var nextBase\n\n for (;;) {\n var m = balanced('{', '}', str);\n\n // No brace set left: the rest of the string is literal.\n if (!m) {\n return combine(acc, accBase, str, [''], max, maxLength, dropEmpties, [])\n }\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n\n // For compatibility reasons, `${` is not eligible for brace expansion, and\n // on the 1.x line it suppresses expansion of the rest of the string too:\n // the whole remainder is literal. The 2.x and 5.x lines instead keep\n // expanding the tail, which is what bash does, but changing that here would\n // be a breaking change for 1.x consumers. Routed through `combine` so the\n // result is still bounded by `max` and `maxLength`.\n if (/\\$$/.test(pre)) {\n return combine(acc, accBase, str, [''], max, maxLength, dropEmpties, [])\n }\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n // The rewritten string is expanded as if it were a fresh top-level one,\n // so start a new empty-drop run: anchor the baseline at what `acc`\n // holds now, and let the next expanding group decide whether to drop.\n isTop = true\n firstGroup = true\n dropEmpties = false\n accBase = []\n for (var b = 0; b < acc.length; b++) {\n accBase.push(acc[b].length)\n }\n continue\n }\n // Nothing here expands, so the whole remaining string is literal.\n return combine(\n acc,\n accBase,\n pre + '{' + m.body + '}' + m.post,\n [''],\n max,\n maxLength,\n dropEmpties,\n []\n )\n }\n\n if (firstGroup) {\n dropEmpties = isTop && !isSequence\n firstGroup = false\n }\n\n var values;\n if (isSequence) {\n values = expandSequence(m.body, isAlphaSequence, max, maxLength);\n } else {\n var n = parseCommaParts(m.body);\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], max, maxLength, false).map(embrace);\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n nextBase = []\n acc = combine(\n acc,\n accBase,\n pre + n[0],\n [''],\n max,\n maxLength,\n dropEmpties && !m.post.length,\n nextBase\n )\n accBase = nextBase\n if (!m.post.length) break\n str = m.post\n continue\n }\n /* c8 ignore stop */\n }\n\n // Values that `combine` is going to drop as empty produce no result, so\n // they must not count against `max` - otherwise `{a,,b}` with `max: 2`\n // would stop at `['a', '']` and yield one result instead of two. Skipping\n // them outright keeps `values` bounded while leaving `max` a bound on\n // *kept* results. A value is dropped when it adds nothing past the\n // baseline, which is what `combine` tests.\n var dropsEmpties = dropEmpties && !m.post.length && !pre\n for (var d = 0; dropsEmpties && d < acc.length; d++) {\n if (acc[d].length !== accBase[d]) {\n dropsEmpties = false\n }\n }\n\n values = []\n var valuesLength = 0\n outer: for (var j = 0; j < n.length; j++) {\n var expanded = expand(n[j], max, maxLength, false)\n for (var k = 0; k < expanded.length; k++) {\n var v = expanded[k]\n if (dropsEmpties && !v) continue\n if (values.length >= max || valuesLength + v.length > maxLength) {\n break outer\n }\n values.push(v)\n valuesLength += v.length\n }\n }\n }\n\n nextBase = []\n acc = combine(\n acc,\n accBase,\n pre,\n values,\n max,\n maxLength,\n dropEmpties && !m.post.length,\n nextBase\n )\n accBase = nextBase\n if (!m.post.length) break\n str = m.post\n }\n\n return acc\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/brace-expansion@1.1.18/node_modules/brace-expansion/index.js?\n}");
|
|
691
|
-
|
|
692
|
-
/***/ },
|
|
693
|
-
|
|
694
|
-
/***/ "../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js"
|
|
695
|
-
/*!************************************************************************!*\
|
|
696
|
-
!*** ../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js ***!
|
|
697
|
-
\************************************************************************/
|
|
698
|
-
(module) {
|
|
699
|
-
|
|
700
|
-
"use strict";
|
|
701
|
-
eval("{/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js?\n}");
|
|
702
|
-
|
|
703
|
-
/***/ },
|
|
704
|
-
|
|
705
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/cli-progress.js"
|
|
706
|
-
/*!**********************************************************************************************!*\
|
|
707
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/cli-progress.js ***!
|
|
708
|
-
\**********************************************************************************************/
|
|
709
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
710
|
-
|
|
711
|
-
eval("{const _SingleBar = __webpack_require__(/*! ./lib/single-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/single-bar.js\");\nconst _MultiBar = __webpack_require__(/*! ./lib/multi-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/multi-bar.js\");\nconst _Presets = __webpack_require__(/*! ./presets/index */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/index.js\");\nconst _Formatter = __webpack_require__(/*! ./lib/formatter */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/formatter.js\");\nconst _defaultFormatValue = __webpack_require__(/*! ./lib/format-value */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-value.js\");\nconst _defaultFormatBar = __webpack_require__(/*! ./lib/format-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-bar.js\");\nconst _defaultFormatTime = __webpack_require__(/*! ./lib/format-time */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-time.js\");\n\n// sub-module access\nmodule.exports = {\n Bar: _SingleBar,\n SingleBar: _SingleBar,\n MultiBar: _MultiBar,\n Presets: _Presets,\n Format: {\n Formatter: _Formatter,\n BarFormat: _defaultFormatBar,\n ValueFormat: _defaultFormatValue,\n TimeFormat: _defaultFormatTime\n }\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/cli-progress.js?\n}");
|
|
712
|
-
|
|
713
|
-
/***/ },
|
|
714
|
-
|
|
715
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/eta.js"
|
|
716
|
-
/*!*****************************************************************************************!*\
|
|
717
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/eta.js ***!
|
|
718
|
-
\*****************************************************************************************/
|
|
719
|
-
(module) {
|
|
720
|
-
|
|
721
|
-
eval("{\n// ETA calculation\nclass ETA{\n\n constructor(length, initTime, initValue){\n // size of eta buffer\n this.etaBufferLength = length || 100;\n\n // eta buffer with initial values\n this.valueBuffer = [initValue];\n this.timeBuffer = [initTime];\n\n // eta time value\n this.eta = '0';\n }\n\n // add new values to calculation buffer\n update(time, value, total){\n this.valueBuffer.push(value);\n this.timeBuffer.push(time);\n\n // trigger recalculation\n this.calculate(total-value);\n }\n\n // fetch estimated time\n getTime(){\n return this.eta;\n }\n\n // eta calculation - request number of remaining events\n calculate(remaining){\n // get number of samples in eta buffer\n const currentBufferSize = this.valueBuffer.length;\n const buffer = Math.min(this.etaBufferLength, currentBufferSize);\n\n const v_diff = this.valueBuffer[currentBufferSize - 1] - this.valueBuffer[currentBufferSize - buffer];\n const t_diff = this.timeBuffer[currentBufferSize - 1] - this.timeBuffer[currentBufferSize - buffer];\n\n // get progress per ms\n const vt_rate = v_diff/t_diff;\n\n // strip past elements\n this.valueBuffer = this.valueBuffer.slice(-this.etaBufferLength);\n this.timeBuffer = this.timeBuffer.slice(-this.etaBufferLength);\n\n // eq: vt_rate *x = total\n const eta = Math.ceil(remaining/vt_rate/1000);\n\n // check values\n if (isNaN(eta)){\n this.eta = 'NULL';\n\n // +/- Infinity --- NaN already handled\n }else if (!isFinite(eta)){\n this.eta = 'INF';\n\n // > 10M s ? - set upper display limit ~115days (1e7/60/60/24)\n }else if (eta > 1e7){\n this.eta = 'INF';\n\n // negative ?\n }else if (eta < 0){\n this.eta = 0;\n\n }else{\n // assign\n this.eta = eta;\n }\n }\n}\n\nmodule.exports = ETA;\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/eta.js?\n}");
|
|
722
|
-
|
|
723
|
-
/***/ },
|
|
724
|
-
|
|
725
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-bar.js"
|
|
726
|
-
/*!************************************************************************************************!*\
|
|
727
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-bar.js ***!
|
|
728
|
-
\************************************************************************************************/
|
|
729
|
-
(module) {
|
|
730
|
-
|
|
731
|
-
eval("{// format bar\nmodule.exports = function formatBar(progress, options){\n // calculate barsize\n const completeSize = Math.round(progress*options.barsize);\n const incompleteSize = options.barsize-completeSize;\n\n // generate bar string by stripping the pre-rendered strings\n return options.barCompleteString.substr(0, completeSize) +\n options.barGlue +\n options.barIncompleteString.substr(0, incompleteSize);\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-bar.js?\n}");
|
|
732
|
-
|
|
733
|
-
/***/ },
|
|
734
|
-
|
|
735
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-time.js"
|
|
736
|
-
/*!*************************************************************************************************!*\
|
|
737
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-time.js ***!
|
|
738
|
-
\*************************************************************************************************/
|
|
739
|
-
(module) {
|
|
740
|
-
|
|
741
|
-
eval("{// default time format\n\n// format a number of seconds into hours and minutes as appropriate\nmodule.exports = function formatTime(t, options, roundToMultipleOf){\n function round(input) {\n if (roundToMultipleOf) {\n return roundToMultipleOf * Math.round(input / roundToMultipleOf);\n } else {\n return input\n }\n }\n\n // leading zero padding\n function autopadding(v){\n return (options.autopaddingChar + v).slice(-2);\n }\n\n // > 1h ?\n if (t > 3600) {\n return autopadding(Math.floor(t / 3600)) + 'h' + autopadding(round((t % 3600) / 60)) + 'm';\n\n // > 60s ?\n } else if (t > 60) {\n return autopadding(Math.floor(t / 60)) + 'm' + autopadding(round((t % 60))) + 's';\n\n // > 10s ?\n } else if (t > 10) {\n return autopadding(round(t)) + 's';\n\n // default: don't apply round to multiple\n }else{\n return autopadding(t) + 's';\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-time.js?\n}");
|
|
742
|
-
|
|
743
|
-
/***/ },
|
|
744
|
-
|
|
745
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-value.js"
|
|
746
|
-
/*!**************************************************************************************************!*\
|
|
747
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-value.js ***!
|
|
748
|
-
\**************************************************************************************************/
|
|
749
|
-
(module) {
|
|
750
|
-
|
|
751
|
-
eval("{// default value format (apply autopadding)\n\n// format valueset\nmodule.exports = function formatValue(v, options, type){\n // no autopadding ? passthrough\n if (options.autopadding !== true){\n return v;\n }\n\n // padding\n function autopadding(value, length){\n return (options.autopaddingChar + value).slice(-length);\n }\n\n switch (type){\n case 'percentage':\n return autopadding(v, 3);\n\n default:\n return v;\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-value.js?\n}");
|
|
752
|
-
|
|
753
|
-
/***/ },
|
|
754
|
-
|
|
755
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/formatter.js"
|
|
756
|
-
/*!***********************************************************************************************!*\
|
|
757
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/formatter.js ***!
|
|
758
|
-
\***********************************************************************************************/
|
|
759
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
760
|
-
|
|
761
|
-
eval("{const _stringWidth = __webpack_require__(/*! string-width */ \"../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js\");\nconst _defaultFormatValue = __webpack_require__(/*! ./format-value */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-value.js\");\nconst _defaultFormatBar = __webpack_require__(/*! ./format-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-bar.js\");\nconst _defaultFormatTime = __webpack_require__(/*! ./format-time */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/format-time.js\");\n\n// generic formatter\nmodule.exports = function defaultFormatter(options, params, payload){\n\n // copy format string\n let s = options.format;\n\n // custom time format set ?\n const formatTime = options.formatTime || _defaultFormatTime;\n \n // custom value format set ?\n const formatValue = options.formatValue || _defaultFormatValue;\n\n // custom bar format set ?\n const formatBar = options.formatBar || _defaultFormatBar;\n\n // calculate progress in percent\n const percentage = Math.floor(params.progress*100) + '';\n\n // bar stopped and stopTime set ?\n const stopTime = params.stopTime || Date.now();\n\n // calculate elapsed time\n const elapsedTime = Math.round((stopTime - params.startTime)/1000);\n\n // merges data from payload and calculated\n const context = Object.assign({}, payload, {\n bar: formatBar(params.progress, options),\n\n percentage: formatValue(percentage, options, 'percentage'),\n total: formatValue(params.total, options, 'total'),\n value: formatValue(params.value, options, 'value'),\n\n eta: formatValue(params.eta, options, 'eta'),\n eta_formatted: formatTime(params.eta, options, 5),\n \n duration: formatValue(elapsedTime, options, 'duration'),\n duration_formatted: formatTime(elapsedTime, options, 1)\n });\n\n // assign placeholder tokens\n s = s.replace(/\\{(\\w+)\\}/g, function(match, key){\n // key exists within payload/context\n if (typeof context[key] !== 'undefined') {\n return context[key];\n }\n\n // no changes to unknown values\n return match;\n });\n\n // calculate available whitespace (2 characters margin of error)\n const fullMargin = Math.max(0, params.maxWidth - _stringWidth(s) -2);\n const halfMargin = Math.floor(fullMargin / 2);\n\n // distribute available whitespace according to position\n switch (options.align) {\n\n // fill start-of-line with whitespaces\n case 'right':\n s = (fullMargin > 0) ? ' '.repeat(fullMargin) + s : s;\n break;\n\n // distribute whitespaces to left+right\n case 'center':\n s = (halfMargin > 0) ? ' '.repeat(halfMargin) + s : s;\n break;\n\n // default: left align, no additional whitespaces\n case 'left':\n default:\n break;\n }\n\n return s;\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/formatter.js?\n}");
|
|
762
|
-
|
|
763
|
-
/***/ },
|
|
764
|
-
|
|
765
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/generic-bar.js"
|
|
766
|
-
/*!*************************************************************************************************!*\
|
|
767
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/generic-bar.js ***!
|
|
768
|
-
\*************************************************************************************************/
|
|
769
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
770
|
-
|
|
771
|
-
eval("{const _ETA = __webpack_require__(/*! ./eta */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/eta.js\");\nconst _Terminal = __webpack_require__(/*! ./terminal */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/terminal.js\");\nconst _formatter = __webpack_require__(/*! ./formatter */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/formatter.js\");\nconst _options = __webpack_require__(/*! ./options */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js\");\nconst _EventEmitter = __webpack_require__(/*! events */ \"events\");\n\n// Progress-Bar constructor\nmodule.exports = class GenericBar extends _EventEmitter{\n\n constructor(options){\n super();\n\n // store options and assign derived ones (instance specific)\n this.options = _options.assignDerivedOptions(options);\n\n // store terminal instance\n this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n // the current bar value\n this.value = 0;\n\n // bar start value (used for progress calculation)\n this.startValue = 0;\n\n // the end value of the bar\n this.total = 100;\n\n // last drawn string - only render on change!\n this.lastDrawnString = null;\n\n // start time (used for eta calculation)\n this.startTime = null;\n\n // stop time (used for duration calculation)\n this.stopTime = null;\n\n // last update time\n this.lastRedraw = Date.now();\n\n // default eta calculator (will be re-create on start)\n this.eta = new _ETA(this.options.etaBufferLength, 0, 0);\n\n // payload data\n this.payload = {};\n\n // progress bar active ?\n this.isActive = false;\n\n // use default formatter or custom one ?\n this.formatter = (typeof this.options.format === 'function') ? this.options.format : _formatter;\n }\n\n // internal render function\n render(forceRendering=false){\n\n // formatter params\n const params = {\n progress: this.getProgress(),\n eta: this.eta.getTime(),\n startTime: this.startTime,\n stopTime: this.stopTime,\n total: this.total,\n value: this.value,\n maxWidth: this.terminal.getWidth()\n };\n\n // automatic eta update ? (long running processes)\n if (this.options.etaAsynchronousUpdate){\n this.updateETA();\n }\n\n // format string\n const s = this.formatter(this.options, params, this.payload);\n\n const forceRedraw = forceRendering || this.options.forceRedraw\n // force redraw in notty-mode!\n || (this.options.noTTYOutput && !this.terminal.isTTY());\n\n // string changed ? only trigger redraw on change!\n if (forceRedraw || this.lastDrawnString != s){\n // trigger event\n this.emit('redraw-pre');\n\n // set cursor to start of line\n this.terminal.cursorTo(0, null);\n\n // write output\n this.terminal.write(s);\n\n // clear to the right from cursor\n this.terminal.clearRight();\n\n // store string\n this.lastDrawnString = s;\n\n // set last redraw time\n this.lastRedraw = Date.now();\n\n // trigger event\n this.emit('redraw-post');\n }\n }\n\n // start the progress bar\n start(total, startValue, payload){\n // set initial values\n this.value = startValue || 0;\n this.total = (typeof total !== 'undefined' && total >= 0) ? total : 100;\n\n // set start value for progress calculation\n this.startValue = (startValue || 0);\n\n // store payload (optional)\n this.payload = payload || {};\n\n // store start time for duration+eta calculation\n this.startTime = Date.now();\n\n // reset stop time for 're-start' scenario (used for duration calculation)\n this.stopTime = null;\n\n // reset string line buffer (redraw detection)\n this.lastDrawnString = '';\n\n // initialize eta buffer\n this.eta = new _ETA(this.options.etaBufferLength, this.startTime, this.value);\n\n // set flag\n this.isActive = true;\n\n // start event\n this.emit('start', total, startValue);\n }\n\n // stop the bar\n stop(){\n // set flag\n this.isActive = false;\n \n // store stop timestamp to get total duration\n this.stopTime = Date.now();\n\n // stop event\n this.emit('stop', this.total, this.value);\n }\n\n // update the bar value\n // update(value, payload)\n // update(payload)\n update(arg0, arg1 = {}){\n // value set ?\n // update(value, [payload]);\n if (typeof arg0 === 'number') {\n // update value\n this.value = arg0;\n\n // add new value; recalculate eta\n this.eta.update(Date.now(), arg0, this.total);\n }\n\n // extract payload\n // update(value, payload)\n // update(payload)\n const payloadData = ((typeof arg0 === 'object') ? arg0 : arg1) || {};\n\n // update event (before stop() is called)\n this.emit('update', this.total, this.value);\n\n // merge payload\n for (const key in payloadData){\n this.payload[key] = payloadData[key];\n }\n\n // limit reached ? autostop set ?\n if (this.value >= this.getTotal() && this.options.stopOnComplete) {\n this.stop();\n }\n }\n\n // calculate the actual progress value\n getProgress(){\n // calculate the normalized current progress\n let progress = (this.value/this.total);\n\n // use relative progress calculation ? range between startValue and total is then used as 100%\n // startValue (offset) is ignored for calculations\n if (this.options.progressCalculationRelative){\n progress = (this.value-this.startValue)/(this.total-this.startValue);\n }\n\n // handle NaN Errors caused by total=0. Set to complete in this case\n if (isNaN(progress)){\n progress = (this.options && this.options.emptyOnZero) ? 0.0 : 1.0;\n }\n\n // limiter\n progress = Math.min(Math.max(progress, 0.0), 1.0);\n\n return progress;\n }\n\n // update the bar value\n // increment(delta, payload)\n // increment(payload)\n increment(arg0 = 1, arg1 = {}){\n // increment([payload]) => step=1\n // handle the use case when `step` is omitted but payload is passed\n if (typeof arg0 === 'object') {\n this.update(this.value + 1, arg0);\n \n // increment([step=1], [payload={}])\n }else{\n this.update(this.value + arg0, arg1);\n }\n }\n\n // get the total (limit) value\n getTotal(){\n return this.total;\n }\n\n // set the total (limit) value\n setTotal(total){\n if (typeof total !== 'undefined' && total >= 0){\n this.total = total;\n }\n }\n\n // force eta calculation update (long running processes)\n updateETA(){\n // add new value; recalculate eta\n this.eta.update(Date.now(), this.value, this.total);\n }\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/generic-bar.js?\n}");
|
|
772
|
-
|
|
773
|
-
/***/ },
|
|
774
|
-
|
|
775
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/multi-bar.js"
|
|
776
|
-
/*!***********************************************************************************************!*\
|
|
777
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/multi-bar.js ***!
|
|
778
|
-
\***********************************************************************************************/
|
|
779
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
780
|
-
|
|
781
|
-
eval("{const _Terminal = __webpack_require__(/*! ./terminal */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/terminal.js\");\nconst _BarElement = __webpack_require__(/*! ./generic-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/generic-bar.js\");\nconst _options = __webpack_require__(/*! ./options */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js\");\nconst _EventEmitter = __webpack_require__(/*! events */ \"events\");\n\n// Progress-Bar constructor\nmodule.exports = class MultiBar extends _EventEmitter{\n\n constructor(options, preset){\n super();\n\n // list of bars\n this.bars = [];\n\n // parse+store options\n this.options = _options.parse(options, preset);\n\n // disable synchronous updates\n this.options.synchronousUpdate = false;\n\n // store terminal instance\n this.terminal = (this.options.terminal) ? this.options.terminal : new _Terminal(this.options.stream);\n\n // the update timer\n this.timer = null;\n\n // progress bar active ?\n this.isActive = false;\n\n // update interval\n this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n // logging output buffer\n this.loggingBuffer = [];\n\n // callback used for gracefulExit\n this.sigintCallback = null;\n }\n\n // add a new bar to the stack\n create(total, startValue, payload, barOptions={}){\n // create new bar element and merge global options + overrides\n // use the same global terminal instance for all instances\n const bar = new _BarElement(Object.assign(\n {}, \n\n // global options\n this.options, \n\n // terminal instance\n {\n terminal: this.terminal\n },\n\n // overrides\n barOptions,\n ));\n\n // store bar\n this.bars.push(bar);\n\n // progress updates are only visible in TTY mode!\n if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n return bar;\n }\n\n // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n if (this.sigintCallback === null && this.options.gracefulExit){\n this.sigintCallback = this.stop.bind(this);\n process.once('SIGINT', this.sigintCallback);\n process.once('SIGTERM', this.sigintCallback);\n }\n \n // multiprogress already active ?\n if (!this.isActive){\n // hide the cursor ?\n if (this.options.hideCursor === true){\n this.terminal.cursor(false);\n }\n\n // disable line wrapping ?\n if (this.options.linewrap === false){\n this.terminal.lineWrapping(false);\n }\n \n // initialize update timer\n this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n }\n\n // set flag\n this.isActive = true;\n\n // start progress bar\n bar.start(total, startValue, payload);\n\n // trigger event\n this.emit('start');\n\n // return new instance\n return bar;\n }\n\n // remove a bar from the stack\n remove(bar){\n // find element\n const index = this.bars.indexOf(bar);\n\n // element found ?\n if (index < 0){\n return false;\n }\n\n // remove element\n this.bars.splice(index, 1);\n\n // force update\n this.update();\n\n // clear bottom\n this.terminal.newline();\n this.terminal.clearBottom();\n\n return true;\n }\n\n // internal update routine\n update(){\n // stop timer\n if (this.timer){\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n // trigger event\n this.emit('update-pre');\n \n // reset cursor\n this.terminal.cursorRelativeReset();\n\n // trigger event\n this.emit('redraw-pre');\n\n // content within logging buffer ?\n if (this.loggingBuffer.length > 0){\n this.terminal.clearLine();\n\n // flush logging buffer and write content to terminal\n while (this.loggingBuffer.length > 0){\n this.terminal.write(this.loggingBuffer.shift(), true);\n }\n }\n\n // update each bar\n for (let i=0; i< this.bars.length; i++){\n // add new line ?\n if (i > 0){\n this.terminal.newline();\n }\n\n // render\n this.bars[i].render();\n }\n\n // trigger event\n this.emit('redraw-post');\n\n // add new line in notty mode!\n if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n this.terminal.newline();\n this.terminal.newline();\n }\n\n // next update\n this.timer = setTimeout(this.update.bind(this), this.schedulingRate);\n\n // trigger event\n this.emit('update-post');\n\n // stop if stopOnComplete and all bars stopped\n if (this.options.stopOnComplete && !this.bars.find(bar => bar.isActive)) {\n this.stop();\n }\n }\n\n stop(){\n\n // stop timer\n clearTimeout(this.timer);\n this.timer = null;\n\n // remove sigint listener\n if (this.sigintCallback){\n process.removeListener('SIGINT', this.sigintCallback);\n process.removeListener('SIGTERM', this.sigintCallback);\n this.sigintCallback = null;\n }\n\n // set flag\n this.isActive = false;\n\n // cursor hidden ?\n if (this.options.hideCursor === true){\n this.terminal.cursor(true);\n }\n\n // re-enable line wrpaping ?\n if (this.options.linewrap === false){\n this.terminal.lineWrapping(true);\n }\n\n // reset cursor\n this.terminal.cursorRelativeReset();\n\n // trigger event\n this.emit('stop-pre-clear');\n\n // clear line on complete ?\n if (this.options.clearOnComplete){\n // clear all bars\n this.terminal.clearBottom();\n \n // or show final progress ?\n }else{\n // update each bar\n for (let i=0; i< this.bars.length; i++){\n // add new line ?\n if (i > 0){\n this.terminal.newline();\n }\n\n // trigger final rendering\n this.bars[i].render();\n\n // stop\n this.bars[i].stop();\n }\n\n // new line on complete\n this.terminal.newline();\n }\n\n // trigger event\n this.emit('stop');\n }\n\n log(s){\n // push content into logging buffer\n this.loggingBuffer.push(s);\n }\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/multi-bar.js?\n}");
|
|
782
|
-
|
|
783
|
-
/***/ },
|
|
784
|
-
|
|
785
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js"
|
|
786
|
-
/*!*********************************************************************************************!*\
|
|
787
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js ***!
|
|
788
|
-
\*********************************************************************************************/
|
|
789
|
-
(module) {
|
|
790
|
-
|
|
791
|
-
eval("{// utility to merge defaults\nfunction mergeOption(v, defaultValue){\n if (typeof v === 'undefined' || v === null){\n return defaultValue;\n }else{\n return v;\n }\n}\n\nmodule.exports = {\n // set global options\n parse: function parse(rawOptions, preset){\n\n // options storage\n const options = {};\n\n // merge preset\n const opt = Object.assign({}, preset, rawOptions);\n\n // the max update rate in fps (redraw will only triggered on value change)\n options.throttleTime = 1000 / (mergeOption(opt.fps, 10));\n\n // the output stream to write on\n options.stream = mergeOption(opt.stream, process.stderr);\n\n // external terminal provided ?\n options.terminal = mergeOption(opt.terminal, null);\n\n // clear on finish ?\n options.clearOnComplete = mergeOption(opt.clearOnComplete, false);\n\n // stop on finish ?\n options.stopOnComplete = mergeOption(opt.stopOnComplete, false);\n\n // size of the progressbar in chars\n options.barsize = mergeOption(opt.barsize, 40);\n\n // position of the progress bar - 'left' (default), 'right' or 'center'\n options.align = mergeOption(opt.align, 'left');\n\n // hide the cursor ?\n options.hideCursor = mergeOption(opt.hideCursor, false);\n\n // disable linewrapping ?\n options.linewrap = mergeOption(opt.linewrap, false);\n\n // glue sequence (control chars) between bar elements ?\n options.barGlue = mergeOption(opt.barGlue, '');\n\n // bar chars\n options.barCompleteChar = mergeOption(opt.barCompleteChar, '=');\n options.barIncompleteChar = mergeOption(opt.barIncompleteChar, '-');\n\n // the bar format\n options.format = mergeOption(opt.format, 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}');\n\n // external time-format provided ?\n options.formatTime = mergeOption(opt.formatTime, null);\n\n // external value-format provided ?\n options.formatValue = mergeOption(opt.formatValue, null);\n\n // external bar-format provided ?\n options.formatBar = mergeOption(opt.formatBar, null);\n\n // the number of results to average ETA over\n options.etaBufferLength = mergeOption(opt.etaBuffer, 10);\n\n // automatic eta updates based on fps\n options.etaAsynchronousUpdate = mergeOption(opt.etaAsynchronousUpdate, false);\n\n // progress calculation relative to start value ? default start at 0\n options.progressCalculationRelative = mergeOption(opt.progressCalculationRelative, false);\n\n // allow synchronous updates ?\n options.synchronousUpdate = mergeOption(opt.synchronousUpdate, true);\n\n // notty mode\n options.noTTYOutput = mergeOption(opt.noTTYOutput, false);\n\n // schedule - 2s\n options.notTTYSchedule = mergeOption(opt.notTTYSchedule, 2000);\n \n // emptyOnZero - false\n options.emptyOnZero = mergeOption(opt.emptyOnZero, false);\n\n // force bar redraw even if progress did not change\n options.forceRedraw = mergeOption(opt.forceRedraw, false);\n\n // automated padding to fixed width ?\n options.autopadding = mergeOption(opt.autopadding, false);\n\n // stop bar on SIGINT/SIGTERM to restore cursor settings ?\n options.gracefulExit = mergeOption(opt.gracefulExit, false);\n\n return options;\n },\n\n // derived options: instance specific, has to be created for every bar element\n assignDerivedOptions: function assignDerivedOptions(options){\n // pre-render bar strings (performance)\n options.barCompleteString = options.barCompleteChar.repeat(options.barsize + 1);\n options.barIncompleteString = options.barIncompleteChar.repeat(options.barsize + 1);\n\n // autopadding character - empty in case autopadding is disabled\n options.autopaddingChar = options.autopadding ? mergeOption(options.autopaddingChar, ' ') : '';\n\n return options;\n }\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js?\n}");
|
|
792
|
-
|
|
793
|
-
/***/ },
|
|
794
|
-
|
|
795
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/single-bar.js"
|
|
796
|
-
/*!************************************************************************************************!*\
|
|
797
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/single-bar.js ***!
|
|
798
|
-
\************************************************************************************************/
|
|
799
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
800
|
-
|
|
801
|
-
eval("{const _GenericBar = __webpack_require__(/*! ./generic-bar */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/generic-bar.js\");\nconst _options = __webpack_require__(/*! ./options */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/options.js\");\n\n// Progress-Bar constructor\nmodule.exports = class SingleBar extends _GenericBar{\n\n constructor(options, preset){\n super(_options.parse(options, preset));\n\n // the update timer\n this.timer = null;\n\n // disable synchronous updates in notty mode\n if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n this.options.synchronousUpdate = false;\n }\n\n // update interval\n this.schedulingRate = (this.terminal.isTTY() ? this.options.throttleTime : this.options.notTTYSchedule);\n\n // callback used for gracefulExit\n this.sigintCallback = null;\n }\n\n // internal render function\n render(){\n // stop timer\n if (this.timer){\n clearTimeout(this.timer);\n this.timer = null;\n }\n\n // run internal rendering\n super.render();\n\n // add new line in notty mode!\n if (this.options.noTTYOutput && this.terminal.isTTY() === false){\n this.terminal.newline();\n }\n\n // next update\n this.timer = setTimeout(this.render.bind(this), this.schedulingRate);\n }\n\n update(current, payload){\n // timer inactive ?\n if (!this.timer) {\n return;\n }\n\n super.update(current, payload);\n\n // trigger synchronous update ?\n // check for throttle time \n if (this.options.synchronousUpdate && (this.lastRedraw + this.options.throttleTime*2) < Date.now()){\n // force update\n this.render();\n }\n }\n\n // start the progress bar\n start(total, startValue, payload){\n // progress updates are only visible in TTY mode!\n if (this.options.noTTYOutput === false && this.terminal.isTTY() === false){\n return;\n }\n\n // add handler to restore cursor settings (stop the bar) on SIGINT/SIGTERM ?\n if (this.sigintCallback === null && this.options.gracefulExit){\n this.sigintCallback = this.stop.bind(this);\n process.once('SIGINT', this.sigintCallback);\n process.once('SIGTERM', this.sigintCallback);\n }\n\n // save current cursor settings\n this.terminal.cursorSave();\n\n // hide the cursor ?\n if (this.options.hideCursor === true){\n this.terminal.cursor(false);\n }\n\n // disable line wrapping ?\n if (this.options.linewrap === false){\n this.terminal.lineWrapping(false);\n }\n\n // initialize bar\n super.start(total, startValue, payload);\n\n // redraw on start!\n this.render();\n }\n\n // stop the bar\n stop(){\n // timer inactive ?\n if (!this.timer) {\n return;\n }\n \n // remove sigint listener\n if (this.sigintCallback){\n process.removeListener('SIGINT', this.sigintCallback);\n process.removeListener('SIGTERM', this.sigintCallback);\n this.sigintCallback = null;\n }\n\n // trigger final rendering\n this.render();\n\n // restore state\n super.stop();\n\n // stop timer\n clearTimeout(this.timer);\n this.timer = null;\n\n // cursor hidden ?\n if (this.options.hideCursor === true){\n this.terminal.cursor(true);\n }\n\n // re-enable line wrapping ?\n if (this.options.linewrap === false){\n this.terminal.lineWrapping(true);\n }\n\n // restore cursor on complete (position + settings)\n this.terminal.cursorRestore();\n\n // clear line on complete ?\n if (this.options.clearOnComplete){\n this.terminal.cursorTo(0, null);\n this.terminal.clearLine();\n }else{\n // new line on complete\n this.terminal.newline();\n }\n }\n}\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/single-bar.js?\n}");
|
|
802
|
-
|
|
803
|
-
/***/ },
|
|
804
|
-
|
|
805
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/terminal.js"
|
|
806
|
-
/*!**********************************************************************************************!*\
|
|
807
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/terminal.js ***!
|
|
808
|
-
\**********************************************************************************************/
|
|
809
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
810
|
-
|
|
811
|
-
eval("{const _readline = __webpack_require__(/*! readline */ \"readline\");\n\n// low-level terminal interactions\nclass Terminal{\n\n constructor(outputStream){\n this.stream = outputStream;\n\n // default: line wrapping enabled\n this.linewrap = true;\n\n // current, relative y position\n this.dy = 0;\n }\n\n // save cursor position + settings\n cursorSave(){\n if (!this.stream.isTTY){\n return;\n }\n\n // save position\n this.stream.write('\\x1B7');\n }\n\n // restore last cursor position + settings\n cursorRestore(){\n if (!this.stream.isTTY){\n return;\n }\n\n // restore cursor\n this.stream.write('\\x1B8');\n }\n\n // show/hide cursor\n cursor(enabled){\n if (!this.stream.isTTY){\n return;\n }\n\n if (enabled){\n this.stream.write('\\x1B[?25h');\n }else{\n this.stream.write('\\x1B[?25l');\n }\n }\n\n // change cursor positionn\n cursorTo(x=null, y=null){\n if (!this.stream.isTTY){\n return;\n }\n\n // move cursor absolute\n _readline.cursorTo(this.stream, x, y);\n }\n\n // change relative cursor position\n cursorRelative(dx=null, dy=null){\n if (!this.stream.isTTY){\n return;\n }\n\n // store current position\n this.dy = this.dy + dy;\n \n // move cursor relative\n _readline.moveCursor(this.stream, dx, dy);\n }\n\n // relative reset\n cursorRelativeReset(){\n if (!this.stream.isTTY){\n return;\n }\n\n // move cursor to initial line\n _readline.moveCursor(this.stream, 0, -this.dy);\n\n // first char\n _readline.cursorTo(this.stream, 0, null);\n\n // reset counter\n this.dy = 0;\n }\n\n // clear to the right from cursor\n clearRight(){\n if (!this.stream.isTTY){\n return;\n }\n\n _readline.clearLine(this.stream, 1);\n }\n\n // clear the full line\n clearLine(){\n if (!this.stream.isTTY){\n return;\n }\n\n _readline.clearLine(this.stream, 0);\n }\n\n // clear everyting beyond the current line\n clearBottom(){\n if (!this.stream.isTTY){\n return;\n }\n\n _readline.clearScreenDown(this.stream);\n }\n\n // add new line; increment counter\n newline(){\n this.stream.write('\\n');\n this.dy++;\n }\n\n // write content to output stream\n // @TODO use string-width to strip length\n write(s, rawWrite=false){\n // line wrapping enabled ? trim output\n // this is just a fallback mechanism in case user enabled line-wrapping via options or set it to auto\n if (this.linewrap === true && rawWrite === false){\n this.stream.write(s.substr(0, this.getWidth()));\n\n // standard behaviour with disabled linewrapping\n }else{\n this.stream.write(s);\n }\n }\n\n // control line wrapping\n lineWrapping(enabled){\n if (!this.stream.isTTY){\n return;\n }\n\n // store state\n this.linewrap = enabled;\n if (enabled){\n this.stream.write('\\x1B[?7h');\n }else{\n this.stream.write('\\x1B[?7l');\n }\n }\n\n // tty environment ?\n isTTY(){\n return (this.stream.isTTY === true);\n }\n\n // get terminal width\n getWidth(){\n // set max width to 80 in tty-mode and 200 in notty-mode\n return this.stream.columns || (this.stream.isTTY ? 80 : 200);\n }\n}\n\nmodule.exports = Terminal;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/lib/terminal.js?\n}");
|
|
812
|
-
|
|
813
|
-
/***/ },
|
|
814
|
-
|
|
815
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/index.js"
|
|
816
|
-
/*!***********************************************************************************************!*\
|
|
817
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/index.js ***!
|
|
818
|
-
\***********************************************************************************************/
|
|
819
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
820
|
-
|
|
821
|
-
eval("{const _legacy = __webpack_require__(/*! ./legacy */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/legacy.js\");\nconst _shades_classic = __webpack_require__(/*! ./shades-classic */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-classic.js\");\nconst _shades_grey = __webpack_require__(/*! ./shades-grey */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-grey.js\");\nconst _rect = __webpack_require__(/*! ./rect */ \"../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/rect.js\");\n\nmodule.exports = {\n legacy: _legacy,\n shades_classic: _shades_classic,\n shades_grey: _shades_grey,\n rect: _rect\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/index.js?\n}");
|
|
822
|
-
|
|
823
|
-
/***/ },
|
|
824
|
-
|
|
825
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/legacy.js"
|
|
826
|
-
/*!************************************************************************************************!*\
|
|
827
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/legacy.js ***!
|
|
828
|
-
\************************************************************************************************/
|
|
829
|
-
(module) {
|
|
830
|
-
|
|
831
|
-
eval("{// cli-progress legacy style as of 1.x\nmodule.exports = {\n format: 'progress [{bar}] {percentage}% | ETA: {eta}s | {value}/{total}',\n barCompleteChar: '=',\n barIncompleteChar: '-'\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/legacy.js?\n}");
|
|
832
|
-
|
|
833
|
-
/***/ },
|
|
834
|
-
|
|
835
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/rect.js"
|
|
836
|
-
/*!**********************************************************************************************!*\
|
|
837
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/rect.js ***!
|
|
838
|
-
\**********************************************************************************************/
|
|
839
|
-
(module) {
|
|
840
|
-
|
|
841
|
-
eval("{module.exports = {\n format: ' {bar}\\u25A0 {percentage}% | ETA: {eta}s | {value}/{total}',\n barCompleteChar: '\\u25A0',\n barIncompleteChar: ' '\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/rect.js?\n}");
|
|
842
|
-
|
|
843
|
-
/***/ },
|
|
844
|
-
|
|
845
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-classic.js"
|
|
846
|
-
/*!********************************************************************************************************!*\
|
|
847
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-classic.js ***!
|
|
848
|
-
\********************************************************************************************************/
|
|
849
|
-
(module) {
|
|
850
|
-
|
|
851
|
-
eval("{// cli-progress legacy style as of 1.x\nmodule.exports = {\n format: ' {bar} {percentage}% | ETA: {eta}s | {value}/{total}',\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591'\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-classic.js?\n}");
|
|
852
|
-
|
|
853
|
-
/***/ },
|
|
854
|
-
|
|
855
|
-
/***/ "../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-grey.js"
|
|
856
|
-
/*!*****************************************************************************************************!*\
|
|
857
|
-
!*** ../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-grey.js ***!
|
|
858
|
-
\*****************************************************************************************************/
|
|
859
|
-
(module) {
|
|
860
|
-
|
|
861
|
-
eval("{\n// cli-progress legacy style as of 1.x\nmodule.exports = {\n format: ' \\u001b[90m{bar}\\u001b[0m {percentage}% | ETA: {eta}s | {value}/{total}',\n barCompleteChar: '\\u2588',\n barIncompleteChar: '\\u2591'\n};\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress/presets/shades-grey.js?\n}");
|
|
862
|
-
|
|
863
|
-
/***/ },
|
|
864
|
-
|
|
865
|
-
/***/ "../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js"
|
|
866
|
-
/*!**********************************************************************************!*\
|
|
867
|
-
!*** ../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js ***!
|
|
868
|
-
\**********************************************************************************/
|
|
869
|
-
(module) {
|
|
870
|
-
|
|
871
|
-
eval("{module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/concat-map@0.0.1/node_modules/concat-map/index.js?\n}");
|
|
872
|
-
|
|
873
|
-
/***/ },
|
|
874
|
-
|
|
875
|
-
/***/ "../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js"
|
|
876
|
-
/*!****************************************************************************************************!*\
|
|
877
|
-
!*** ../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js ***!
|
|
878
|
-
\****************************************************************************************************/
|
|
879
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
880
|
-
|
|
881
|
-
"use strict";
|
|
882
|
-
eval("{/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = (__webpack_require__(/*! path */ \"path\").basename)\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*<any CHAR except CTLs or separators>\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = <any TEXT except <\">>\n * quoted-pair = \"\\\" CHAR\n * CHAR = <any US-ASCII character (octets 0 - 127)>\n * TEXT = <any OCTET except CTLs, but including LWS>\n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = <US-ASCII CR, carriage return (13)>\n * LF = <US-ASCII LF, linefeed (10)>\n * SP = <US-ASCII SP, space (32)>\n * HT = <US-ASCII HT, horizontal-tab (9)>\n * CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET = <any 8-bit sequence of data>\n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = <the characters in token, followed by \"*\">\n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = new Buffer(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n var hex = String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n return hex.length === 1\n ? '%0' + hex\n : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js?\n}");
|
|
883
|
-
|
|
884
|
-
/***/ },
|
|
885
|
-
|
|
886
|
-
/***/ "../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js"
|
|
887
|
-
/*!************************************************************************************!*\
|
|
888
|
-
!*** ../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js ***!
|
|
889
|
-
\************************************************************************************/
|
|
890
|
-
(module) {
|
|
891
|
-
|
|
892
|
-
"use strict";
|
|
893
|
-
eval("{\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFE])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D)?\\uD83D\\uDC68|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFD-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFD\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB\\uDFFC\\uDFFE\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u231A\\u231B\\u23E9-\\u23EC\\u23F0\\u23F3\\u25FD\\u25FE\\u2614\\u2615\\u2648-\\u2653\\u267F\\u2693\\u26A1\\u26AA\\u26AB\\u26BD\\u26BE\\u26C4\\u26C5\\u26CE\\u26D4\\u26EA\\u26F2\\u26F3\\u26F5\\u26FA\\u26FD\\u2705\\u270A\\u270B\\u2728\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2795-\\u2797\\u27B0\\u27BF\\u2B1B\\u2B1C\\u2B50\\u2B55]|\\uD83C[\\uDC04\\uDCCF\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE1A\\uDE2F\\uDE32-\\uDE36\\uDE38-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF20\\uDF2D-\\uDF35\\uDF37-\\uDF7C\\uDF7E-\\uDF93\\uDFA0-\\uDFCA\\uDFCF-\\uDFD3\\uDFE0-\\uDFF0\\uDFF4\\uDFF8-\\uDFFF]|\\uD83D[\\uDC00-\\uDC3E\\uDC40\\uDC42-\\uDCFC\\uDCFF-\\uDD3D\\uDD4B-\\uDD4E\\uDD50-\\uDD67\\uDD7A\\uDD95\\uDD96\\uDDA4\\uDDFB-\\uDE4F\\uDE80-\\uDEC5\\uDECC\\uDED0-\\uDED2\\uDED5\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*0-9\\xA9\\xAE\\u203C\\u2049\\u2122\\u2139\\u2194-\\u2199\\u21A9\\u21AA\\u231A\\u231B\\u2328\\u23CF\\u23E9-\\u23F3\\u23F8-\\u23FA\\u24C2\\u25AA\\u25AB\\u25B6\\u25C0\\u25FB-\\u25FE\\u2600-\\u2604\\u260E\\u2611\\u2614\\u2615\\u2618\\u261D\\u2620\\u2622\\u2623\\u2626\\u262A\\u262E\\u262F\\u2638-\\u263A\\u2640\\u2642\\u2648-\\u2653\\u265F\\u2660\\u2663\\u2665\\u2666\\u2668\\u267B\\u267E\\u267F\\u2692-\\u2697\\u2699\\u269B\\u269C\\u26A0\\u26A1\\u26AA\\u26AB\\u26B0\\u26B1\\u26BD\\u26BE\\u26C4\\u26C5\\u26C8\\u26CE\\u26CF\\u26D1\\u26D3\\u26D4\\u26E9\\u26EA\\u26F0-\\u26F5\\u26F7-\\u26FA\\u26FD\\u2702\\u2705\\u2708-\\u270D\\u270F\\u2712\\u2714\\u2716\\u271D\\u2721\\u2728\\u2733\\u2734\\u2744\\u2747\\u274C\\u274E\\u2753-\\u2755\\u2757\\u2763\\u2764\\u2795-\\u2797\\u27A1\\u27B0\\u27BF\\u2934\\u2935\\u2B05-\\u2B07\\u2B1B\\u2B1C\\u2B50\\u2B55\\u3030\\u303D\\u3297\\u3299]|\\uD83C[\\uDC04\\uDCCF\\uDD70\\uDD71\\uDD7E\\uDD7F\\uDD8E\\uDD91-\\uDD9A\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE1A\\uDE2F\\uDE32-\\uDE3A\\uDE50\\uDE51\\uDF00-\\uDF21\\uDF24-\\uDF93\\uDF96\\uDF97\\uDF99-\\uDF9B\\uDF9E-\\uDFF0\\uDFF3-\\uDFF5\\uDFF7-\\uDFFF]|\\uD83D[\\uDC00-\\uDCFD\\uDCFF-\\uDD3D\\uDD49-\\uDD4E\\uDD50-\\uDD67\\uDD6F\\uDD70\\uDD73-\\uDD7A\\uDD87\\uDD8A-\\uDD8D\\uDD90\\uDD95\\uDD96\\uDDA4\\uDDA5\\uDDA8\\uDDB1\\uDDB2\\uDDBC\\uDDC2-\\uDDC4\\uDDD1-\\uDDD3\\uDDDC-\\uDDDE\\uDDE1\\uDDE3\\uDDE8\\uDDEF\\uDDF3\\uDDFA-\\uDE4F\\uDE80-\\uDEC5\\uDECB-\\uDED2\\uDED5\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\uFE0F|(?:[\\u261D\\u26F9\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2-\\uDFC4\\uDFC7\\uDFCA-\\uDFCC]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66-\\uDC78\\uDC7C\\uDC81-\\uDC83\\uDC85-\\uDC87\\uDC8F\\uDC91\\uDCAA\\uDD74\\uDD75\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE45-\\uDE47\\uDE4B-\\uDE4F\\uDEA3\\uDEB4-\\uDEB6\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js?\n}");
|
|
894
|
-
|
|
895
|
-
/***/ },
|
|
896
|
-
|
|
897
|
-
/***/ "../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js"
|
|
898
|
-
/*!************************************************************************************************************!*\
|
|
899
|
-
!*** ../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js ***!
|
|
900
|
-
\************************************************************************************************************/
|
|
901
|
-
(module) {
|
|
902
|
-
|
|
903
|
-
"use strict";
|
|
904
|
-
eval("{/* eslint-disable yoda */\n\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports[\"default\"] = isFullwidthCodePoint;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js?\n}");
|
|
905
|
-
|
|
906
|
-
/***/ },
|
|
907
|
-
|
|
908
|
-
/***/ "../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js"
|
|
909
|
-
/*!*****************************************************************************!*\
|
|
910
|
-
!*** ../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js ***!
|
|
911
|
-
\*****************************************************************************/
|
|
912
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
913
|
-
|
|
914
|
-
eval("{/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = __webpack_require__(/*! ./db.json */ \"../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json\")\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js?\n}");
|
|
915
|
-
|
|
916
|
-
/***/ },
|
|
917
|
-
|
|
918
|
-
/***/ "../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js"
|
|
919
|
-
/*!***********************************************************************************!*\
|
|
920
|
-
!*** ../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js ***!
|
|
921
|
-
\***********************************************************************************/
|
|
922
|
-
(__unused_webpack_module, exports, __webpack_require__) {
|
|
923
|
-
|
|
924
|
-
"use strict";
|
|
925
|
-
eval("{/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = __webpack_require__(/*! mime-db */ \"../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/index.js\")\nvar extname = (__webpack_require__(/*! path */ \"path\").extname)\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js?\n}");
|
|
926
|
-
|
|
927
|
-
/***/ },
|
|
928
|
-
|
|
929
|
-
/***/ "../../node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js"
|
|
930
|
-
/*!************************************************************************************!*\
|
|
931
|
-
!*** ../../node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js ***!
|
|
932
|
-
\************************************************************************************/
|
|
933
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
934
|
-
|
|
935
|
-
eval("{module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return __webpack_require__(/*! path */ \"path\") } catch (e) {}}()) || {\n sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = __webpack_require__(/*! brace-expansion */ \"../../node_modules/.pnpm/brace-expansion@1.1.18/node_modules/brace-expansion/index.js\")\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n b = b || {}\n var t = {}\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n m.Minimatch.defaults = function defaults (options) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n\n m.filter = function filter (pattern, options) {\n return orig.filter(pattern, ext(def, options))\n }\n\n m.defaults = function defaults (options) {\n return orig.defaults(ext(def, options))\n }\n\n m.makeRe = function makeRe (pattern, options) {\n return orig.makeRe(pattern, ext(def, options))\n }\n\n m.braceExpand = function braceExpand (pattern, options) {\n return orig.braceExpand(pattern, ext(def, options))\n }\n\n m.match = function (list, pattern, options) {\n return orig.match(list, pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (!options.allowWindowsEscape && path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.maxGlobstarRecursion = options.maxGlobstarRecursion !== undefined\n ? options.maxGlobstarRecursion : 200\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n var options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // coalesce consecutive non-globstar * characters\n if (c === '*' && stateChar === '*') continue\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:<pattern>)<type>\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '[': case '.': case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n if (typeof partial === 'undefined') partial = this.partial\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n if (pattern.indexOf(GLOBSTAR) !== -1) {\n return this._matchGlobstar(file, pattern, partial, 0, 0)\n }\n return this._matchOne(file, pattern, partial, 0, 0)\n}\n\nMinimatch.prototype._matchGlobstar = function (file, pattern, partial, fileIndex, patternIndex) {\n var i\n\n // find first globstar from patternIndex\n var firstgs = -1\n for (i = patternIndex; i < pattern.length; i++) {\n if (pattern[i] === GLOBSTAR) { firstgs = i; break }\n }\n\n // find last globstar\n var lastgs = -1\n for (i = pattern.length - 1; i >= 0; i--) {\n if (pattern[i] === GLOBSTAR) { lastgs = i; break }\n }\n\n var head = pattern.slice(patternIndex, firstgs)\n var body = partial ? pattern.slice(firstgs + 1) : pattern.slice(firstgs + 1, lastgs)\n var tail = partial ? [] : pattern.slice(lastgs + 1)\n\n // check the head\n if (head.length) {\n var fileHead = file.slice(fileIndex, fileIndex + head.length)\n if (!this._matchOne(fileHead, head, partial, 0, 0)) {\n return false\n }\n fileIndex += head.length\n }\n\n // check the tail\n var fileTailMatch = 0\n if (tail.length) {\n if (tail.length + fileIndex > file.length) return false\n\n var tailStart = file.length - tail.length\n if (this._matchOne(file, tail, partial, tailStart, 0)) {\n fileTailMatch = tail.length\n } else {\n // affordance for stuff like a/**/* matching a/b/\n if (file[file.length - 1] !== '' ||\n fileIndex + tail.length === file.length) {\n return false\n }\n tailStart--\n if (!this._matchOne(file, tail, partial, tailStart, 0)) {\n return false\n }\n fileTailMatch = tail.length + 1\n }\n }\n\n // if body is empty (single ** between head and tail)\n if (!body.length) {\n var sawSome = !!fileTailMatch\n for (i = fileIndex; i < file.length - fileTailMatch; i++) {\n var f = String(file[i])\n sawSome = true\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n }\n return partial || sawSome\n }\n\n // split body into segments at each GLOBSTAR\n var bodySegments = [[[], 0]]\n var currentBody = bodySegments[0]\n var nonGsParts = 0\n var nonGsPartsSums = [0]\n for (var bi = 0; bi < body.length; bi++) {\n var b = body[bi]\n if (b === GLOBSTAR) {\n nonGsPartsSums.push(nonGsParts)\n currentBody = [[], 0]\n bodySegments.push(currentBody)\n } else {\n currentBody[0].push(b)\n nonGsParts++\n }\n }\n\n var idx = bodySegments.length - 1\n var fileLength = file.length - fileTailMatch\n for (var si = 0; si < bodySegments.length; si++) {\n bodySegments[si][1] = fileLength -\n (nonGsPartsSums[idx--] + bodySegments[si][0].length)\n }\n\n return !!this._matchGlobStarBodySections(\n file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch\n )\n}\n\n// return false for \"nope, not matching\"\n// return null for \"not matching, cannot keep trying\"\nMinimatch.prototype._matchGlobStarBodySections = function (\n file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail\n) {\n var bs = bodySegments[bodyIndex]\n if (!bs) {\n // just make sure there are no bad dots\n for (var i = fileIndex; i < file.length; i++) {\n sawTail = true\n var f = file[i]\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n }\n return sawTail\n }\n\n var body = bs[0]\n var after = bs[1]\n while (fileIndex <= after) {\n var m = this._matchOne(\n file.slice(0, fileIndex + body.length),\n body,\n partial,\n fileIndex,\n 0\n )\n // if limit exceeded, no match. intentional false negative,\n // acceptable break in correctness for security.\n if (m && globStarDepth < this.maxGlobstarRecursion) {\n var sub = this._matchGlobStarBodySections(\n file, bodySegments,\n fileIndex + body.length, bodyIndex + 1,\n partial, globStarDepth + 1, sawTail\n )\n if (sub !== false) {\n return sub\n }\n }\n var f = file[fileIndex]\n if (f === '.' || f === '..' ||\n (!this.options.dot && f.charAt(0) === '.')) {\n return false\n }\n fileIndex++\n }\n return partial || null\n}\n\nMinimatch.prototype._matchOne = function (file, pattern, partial, fileIndex, patternIndex) {\n var fi, pi, fl, pl\n for (\n fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++\n ) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false || p === GLOBSTAR) return false\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js?\n}");
|
|
936
|
-
|
|
937
|
-
/***/ },
|
|
938
|
-
|
|
939
|
-
/***/ "../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js"
|
|
940
|
-
/*!*******************************************************************************************************!*\
|
|
941
|
-
!*** ../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js ***!
|
|
942
|
-
\*******************************************************************************************************/
|
|
943
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
944
|
-
|
|
945
|
-
"use strict";
|
|
946
|
-
eval("{\n\nvar path = __webpack_require__(/*! path */ \"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n // For inside-directory checking, we want to allow trailing slashes, so normalize.\n thePath = stripTrailingSep(thePath);\n potentialParent = stripTrailingSep(potentialParent);\n\n // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n if (process.platform === \"win32\") {\n thePath = thePath.toLowerCase();\n potentialParent = potentialParent.toLowerCase();\n }\n\n return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n if (thePath[thePath.length - 1] === path.sep) {\n return thePath.slice(0, -1);\n }\n return thePath;\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js?\n}");
|
|
947
|
-
|
|
948
|
-
/***/ },
|
|
949
|
-
|
|
950
|
-
/***/ "../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js"
|
|
951
|
-
/*!******************************************************************************************!*\
|
|
952
|
-
!*** ../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js ***!
|
|
953
|
-
\******************************************************************************************/
|
|
954
|
-
(module) {
|
|
955
|
-
|
|
956
|
-
eval("{/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.match = match\nmodule.exports.regexpToFunction = regexpToFunction\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n // \"(\\\\d+)\" => [undefined, undefined, \"\\d+\", undefined]\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n var whitelist = (options && options.whitelist) || undefined\n var pathEscaped = false\n var res\n\n while ((res = PATH_REGEXP.exec(str)) !== null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n pathEscaped = true\n continue\n }\n\n var prev = ''\n var name = res[2]\n var capture = res[3]\n var group = res[4]\n var modifier = res[5]\n\n if (!pathEscaped && path.length) {\n var k = path.length - 1\n var c = path[k]\n var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n if (matches) {\n prev = c\n path = path.slice(0, k)\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n pathEscaped = false\n }\n\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var pattern = capture || group\n var delimiter = prev || defaultDelimiter\n var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: pattern\n ? escapeGroup(pattern)\n : restrictBacktrack(delimiter, defaultDelimiter, prevText)\n })\n }\n\n // Push any remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index))\n }\n\n return tokens\n}\n\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n return charGroup + '+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n var keys = []\n var re = pathToRegexp(str, keys, options)\n return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n return function (pathname, options) {\n var m = re.exec(pathname)\n if (!m) return false\n\n var path = m[0]\n var index = m.index\n var params = {}\n var decode = (options && options.decode) || decodeURIComponent\n\n for (var i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue\n\n var key = keys[i - 1]\n\n if (key.repeat) {\n params[key.name] = m[i].split(key.delimiter).map(function (value) {\n return decode(value, key)\n })\n } else {\n params[key.name] = decode(m[i], key)\n }\n }\n\n return { path: path, index: index, params: params }\n }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (data, options) {\n var path = ''\n var encode = (options && options.encode) || encodeURIComponent\n var validate = options ? options.validate !== false : true\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n continue\n }\n\n var value = data ? data[token.name] : undefined\n var segment\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n }\n\n if (value.length === 0) {\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j], token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n continue\n }\n\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {Array=} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n if (!keys) return path\n\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n })\n }\n }\n\n return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n options = options || {}\n\n var strict = options.strict\n var start = options.start !== false\n var end = options.end !== false\n var delimiter = options.delimiter || DEFAULT_DELIMITER\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n var route = start ? '^' : ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var capture = token.repeat\n ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n : token.pattern\n\n if (keys) keys.push(token)\n\n if (token.optional) {\n if (!token.prefix) {\n route += '(' + capture + ')?'\n } else {\n route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n }\n } else {\n route += escapeString(token.prefix) + '(' + capture + ')'\n }\n }\n }\n\n if (end) {\n if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n } else {\n var endToken = tokens[tokens.length - 1]\n var isEndDelimited = typeof endToken === 'string'\n ? endToken[endToken.length - 1] === delimiter\n : endToken === undefined\n\n if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n }\n\n return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (path instanceof RegExp) {\n return regexpToRegexp(path, keys)\n }\n\n if (Array.isArray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js?\n}");
|
|
957
|
-
|
|
958
|
-
/***/ },
|
|
959
|
-
|
|
960
|
-
/***/ "../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js"
|
|
961
|
-
/*!**************************************************************************************!*\
|
|
962
|
-
!*** ../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js ***!
|
|
963
|
-
\**************************************************************************************/
|
|
964
|
-
(module) {
|
|
965
|
-
|
|
966
|
-
"use strict";
|
|
967
|
-
eval("{/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js?\n}");
|
|
968
|
-
|
|
969
|
-
/***/ },
|
|
970
|
-
|
|
971
|
-
/***/ "../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/directory.js"
|
|
972
|
-
/*!************************************************************************************************!*\
|
|
973
|
-
!*** ../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/directory.js ***!
|
|
974
|
-
\************************************************************************************************/
|
|
975
|
-
(module, exports, __webpack_require__) {
|
|
976
|
-
|
|
977
|
-
eval("{var __WEBPACK_AMD_DEFINE_RESULT__;(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out='<!DOCTYPE html><html lang=\"en\"> <head> <meta charset=\"utf-8\"> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <title>Files within '+encodeHTML(it.directory)+'</title> <style>body { margin: 0; padding: 30px; background: #fff; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; -webkit-font-smoothing: antialiased;}main { max-width: 920px;}header { display: flex; justify-content: space-between; flex-wrap: wrap;}h1 { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}header h1 a { font-size: 18px; font-weight: 500; margin-top: 0; color: #000;}h1 i { font-style: normal;}ul { margin: 0 0 0 -2px; padding: 20px 0 0 0;}ul li { list-style: none; font-size: 14px; display: flex; justify-content: space-between;}a { text-decoration: none;}ul a { color: #000; padding: 10px 5px; margin: 0 -5px; white-space: nowrap; overflow: hidden; display: block; width: 100%; text-overflow: ellipsis;}header a { color: #0076FF; font-size: 11px; font-weight: 400; display: inline-block; line-height: 20px;}svg { height: 13px; vertical-align: text-bottom;}ul a::before { display: inline-block; vertical-align: middle; margin-right: 10px; width: 24px; text-align: center; line-height: 12px;}ul a.file::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M10 8C8.34 8 7 6.66 7 5V1H3c-1.1 0-2 .9-2 2v13c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2V8h-4zM8 5c0 1.1.9 2 2 2h3.59L8 1.41V5zM3 0h5l7 7v9c0 1.66-1.34 3-3 3H3c-1.66 0-3-1.34-3-3V3c0-1.66 1.34-3 3-3z\\' fill=\\'black\\'/></svg>\");}ul a:hover { text-decoration: underline;}ul a.folder::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'20\\' height=\\'16\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M18.784 3.87a1.565 1.565 0 0 0-.565-.356V2.426c0-.648-.523-1.171-1.15-1.171H8.996L7.908.25A.89.89 0 0 0 7.302 0H2.094C1.445 0 .944.523.944 1.171v2.3c-.21.085-.398.21-.565.356a1.348 1.348 0 0 0-.377 1.004l.398 9.83C.42 15.393 1.048 16 1.8 16h15.583c.753 0 1.36-.586 1.4-1.339l.398-9.83c.021-.313-.125-.69-.397-.962zM1.843 3.41V1.191c0-.146.104-.272.25-.272H7.26l1.234 1.088c.083.042.167.104.293.104h8.282c.125 0 .25.126.25.272V3.41H1.844zm15.54 11.712H1.78a.47.47 0 0 1-.481-.46l-.397-9.83c0-.147.041-.252.125-.356a.504.504 0 0 1 .377-.147H17.78c.125 0 .272.063.377.147.083.083.125.209.125.334l-.418 9.83c-.021.272-.23.482-.481.482z\\' fill=\\'black\\'/></svg>\");}ul a.lambda::before { content: url(\"data:image/svg+xml; utf8,<svg width=\\'15\\' height=\\'19\\' fill=\\'none\\' xmlns=\\'http://www.w3.org/2000/svg\\'><path d=\\'M3.5 14.4354H5.31622L7.30541 9.81311H7.43514L8.65315 13.0797C9.05676 14.1643 9.55405 14.5 10.7 14.5C11.0171 14.5 11.291 14.4677 11.5 14.4032V13.1572C11.3847 13.1766 11.2622 13.2024 11.1541 13.2024C10.6351 13.2024 10.3829 13.0281 10.1595 12.4664L8.02613 7.07586C7.21171 5.01646 6.54865 4.5 5.11441 4.5C4.83333 4.5 4.62432 4.53228 4.37207 4.59038V5.83635C4.56667 5.81052 4.66036 5.79761 4.77568 5.79761C5.64775 5.79761 5.9 6.0042 6.4045 7.19852L6.64234 7.77954L3.5 14.4354Z\\' fill=\\'black\\'/><rect x=\\'0.5\\' y=\\'0.5\\' width=\\'14\\' height=\\'18\\' rx=\\'2.5\\' stroke=\\'black\\'/></svg>\");}ul a.file.gif::before,ul a.file.jpg::before,ul a.file.png::before,ul a.file.svg::before { content: url(\"data:image/svg+xml;utf8,<svg width=\\'16\\' height=\\'16\\' viewBox=\\'0 0 80 80\\' xmlns=\\'http://www.w3.org/2000/svg\\' fill=\\'none\\' stroke=\\'black\\' stroke-width=\\'5\\' stroke-linecap=\\'round\\' stroke-linejoin=\\'round\\'><rect x=\\'6\\' y=\\'6\\' width=\\'68\\' height=\\'68\\' rx=\\'5\\' ry=\\'5\\'/><circle cx=\\'24\\' cy=\\'24\\' r=\\'8\\'/><path d=\\'M73 49L59 34 37 52m16 20L27 42 7 58\\'/></svg>\");}::selection { background-color: #79FFE1; color: #000;}::-moz-selection { background-color: #79FFE1; color: #000;}@media (min-width: 768px) { ul {display: flex;flex-wrap: wrap; } ul li {width: 230px;padding-right: 20px; }}@media (min-width: 992px) { body {padding: 45px; } h1, header h1 a {font-size: 15px; } ul li {font-size: 13px;box-sizing: border-box;justify-content: flex-start; }}</style> </head> <body> <main> <header> <h1> <i>Index of </i> ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index<l1){value=arr1[index+=1];out+=' <a href=\"/'+encodeHTML(value.url)+'\">'+encodeHTML(value.name)+'</a> ';} } out+=' </h1> </header> <ul id=\"files\"> ';var arr2=it.files;if(arr2){var value,index=-1,l2=arr2.length-1;while(index<l2){value=arr2[index+=1];out+=' <li> <a href=\"'+encodeHTML(value.relative)+'\" title=\"'+encodeHTML(value.title)+'\" class=\"'+encodeHTML(value.type)+' '+encodeHTML(value.ext)+'\">'+encodeHTML(value.base)+'</a> </li> ';} } out+=' </ul></main> </body></html>';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if( true && module.exports) module.exports=itself;else if(true)!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return itself;}).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // removed by dead control flow\n{}}());\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/directory.js?\n}");
|
|
978
|
-
|
|
979
|
-
/***/ },
|
|
980
|
-
|
|
981
|
-
/***/ "../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/error.js"
|
|
982
|
-
/*!********************************************************************************************!*\
|
|
983
|
-
!*** ../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/error.js ***!
|
|
984
|
-
\********************************************************************************************/
|
|
985
|
-
(module, exports, __webpack_require__) {
|
|
986
|
-
|
|
987
|
-
eval("{var __WEBPACK_AMD_DEFINE_RESULT__;(function(){function error(it\n) {\nvar out='<!DOCTYPE html><head> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\"/> <style> body { margin: 0; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\", \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", sans-serif; cursor: default; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; } main, aside, section { display: flex; justify-content: center; align-items: center; flex-direction: column; } main { height: 100%; } aside { background: #000; flex-shrink: 1; padding: 30px 20px; } aside p { margin: 0; color: #999999; font-size: 14px; line-height: 24px; } aside a { color: #fff; text-decoration: none; } section span { font-size: 24px; font-weight: 500; display: block; border-bottom: 1px solid #EAEAEA; text-align: center; padding-bottom: 20px; width: 100px; } section p { font-size: 14px; font-weight: 400; } section span + p { margin: 20px 0 0 0; } @media (min-width: 768px) { section { height: 40px; flex-direction: row; } section span, section p { height: 100%; line-height: 40px; } section span { border-bottom: 0; border-right: 1px solid #EAEAEA; padding: 0 20px 0 0; width: auto; } section span + p { margin: 0; padding-left: 20px; } aside { padding: 50px 0; } aside p { max-width: 520px; text-align: center; } } </style></head><body> <main> <section> <span>'+(it.statusCode)+'</span> <p>'+(it.message)+'</p> </section> </main></body>';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if( true && module.exports) module.exports=itself;else if(true)!(__WEBPACK_AMD_DEFINE_RESULT__ = (function(){return itself;}).call(exports, __webpack_require__, exports, module),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));else // removed by dead control flow\n{}}());\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/error.js?\n}");
|
|
988
|
-
|
|
989
|
-
/***/ },
|
|
990
|
-
|
|
991
|
-
/***/ "../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/glob-slash.js"
|
|
992
|
-
/*!*************************************************************************************************!*\
|
|
993
|
-
!*** ../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/glob-slash.js ***!
|
|
994
|
-
\*************************************************************************************************/
|
|
995
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
996
|
-
|
|
997
|
-
eval("{/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = __webpack_require__(/*! path */ \"path\");\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/glob-slash.js?\n}");
|
|
998
|
-
|
|
999
|
-
/***/ },
|
|
1000
|
-
|
|
1001
|
-
/***/ "../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/index.js"
|
|
1002
|
-
/*!********************************************************************************************!*\
|
|
1003
|
-
!*** ../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/index.js ***!
|
|
1004
|
-
\********************************************************************************************/
|
|
1005
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
1006
|
-
|
|
1007
|
-
eval("{// Native\nconst {promisify} = __webpack_require__(/*! util */ \"util\");\nconst path = __webpack_require__(/*! path */ \"path\");\nconst {createHash} = __webpack_require__(/*! crypto */ \"crypto\");\nconst {realpath, lstat, createReadStream, readdir} = __webpack_require__(/*! fs */ \"fs\");\n\n// Packages\nconst url = __webpack_require__(/*! url */ \"url\");\nconst slasher = __webpack_require__(/*! ./glob-slash */ \"../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/glob-slash.js\");\nconst minimatch = __webpack_require__(/*! minimatch */ \"../../node_modules/.pnpm/minimatch@3.1.5/node_modules/minimatch/minimatch.js\");\nconst pathToRegExp = __webpack_require__(/*! path-to-regexp */ \"../../node_modules/.pnpm/path-to-regexp@3.3.0/node_modules/path-to-regexp/index.js\");\nconst mime = __webpack_require__(/*! mime-types */ \"../../node_modules/.pnpm/mime-types@2.1.18/node_modules/mime-types/index.js\");\nconst bytes = __webpack_require__(/*! bytes */ \"../../node_modules/.pnpm/bytes@3.0.0/node_modules/bytes/index.js\");\nconst contentDisposition = __webpack_require__(/*! content-disposition */ \"../../node_modules/.pnpm/content-disposition@0.5.2/node_modules/content-disposition/index.js\");\nconst isPathInside = __webpack_require__(/*! path-is-inside */ \"../../node_modules/.pnpm/path-is-inside@1.0.2/node_modules/path-is-inside/lib/path-is-inside.js\");\nconst parseRange = __webpack_require__(/*! range-parser */ \"../../node_modules/.pnpm/range-parser@1.2.0/node_modules/range-parser/index.js\");\n\n// Other\nconst directoryTemplate = __webpack_require__(/*! ./directory */ \"../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/directory.js\");\nconst errorTemplate = __webpack_require__(/*! ./error */ \"../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/error.js\");\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && \"development\" !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/serve-handler@6.1.7/node_modules/serve-handler/src/index.js?\n}");
|
|
1008
|
-
|
|
1009
|
-
/***/ },
|
|
1010
|
-
|
|
1011
|
-
/***/ "../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js"
|
|
1012
|
-
/*!**************************************************************************!*\
|
|
1013
|
-
!*** ../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js ***!
|
|
1014
|
-
\**************************************************************************/
|
|
1015
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
1016
|
-
|
|
1017
|
-
"use strict";
|
|
1018
|
-
eval("{/*\nCopyright (c) 2014-2021, Matteo Collina <hello@matteocollina.com>\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted, provided that the above\ncopyright notice and this permission notice appear in all copies.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\nWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\nMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\nANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\nWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\nACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR\nIN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n*/\n\n\n\nconst { Transform } = __webpack_require__(/*! stream */ \"stream\")\nconst { StringDecoder } = __webpack_require__(/*! string_decoder */ \"string_decoder\")\nconst kLast = Symbol('last')\nconst kDecoder = Symbol('decoder')\n\nfunction transform (chunk, enc, cb) {\n let list\n if (this.overflow) { // Line buffer is full. Skip to start of next line.\n const buf = this[kDecoder].write(chunk)\n list = buf.split(this.matcher)\n\n if (list.length === 1) return cb() // Line ending not found. Discard entire chunk.\n\n // Line ending found. Discard trailing fragment of previous line and reset overflow state.\n list.shift()\n this.overflow = false\n } else {\n this[kLast] += this[kDecoder].write(chunk)\n list = this[kLast].split(this.matcher)\n }\n\n this[kLast] = list.pop()\n\n for (let i = 0; i < list.length; i++) {\n try {\n push(this, this.mapper(list[i]))\n } catch (error) {\n return cb(error)\n }\n }\n\n this.overflow = this[kLast].length > this.maxLength\n if (this.overflow && !this.skipOverflow) {\n cb(new Error('maximum buffer reached'))\n return\n }\n\n cb()\n}\n\nfunction flush (cb) {\n // forward any gibberish left in there\n this[kLast] += this[kDecoder].end()\n\n if (this[kLast]) {\n try {\n push(this, this.mapper(this[kLast]))\n } catch (error) {\n return cb(error)\n }\n }\n\n cb()\n}\n\nfunction push (self, val) {\n if (val !== undefined) {\n self.push(val)\n }\n}\n\nfunction noop (incoming) {\n return incoming\n}\n\nfunction split (matcher, mapper, options) {\n // Set defaults for any arguments not supplied.\n matcher = matcher || /\\r?\\n/\n mapper = mapper || noop\n options = options || {}\n\n // Test arguments explicitly.\n switch (arguments.length) {\n case 1:\n // If mapper is only argument.\n if (typeof matcher === 'function') {\n mapper = matcher\n matcher = /\\r?\\n/\n // If options is only argument.\n } else if (typeof matcher === 'object' && !(matcher instanceof RegExp) && !matcher[Symbol.split]) {\n options = matcher\n matcher = /\\r?\\n/\n }\n break\n\n case 2:\n // If mapper and options are arguments.\n if (typeof matcher === 'function') {\n options = mapper\n mapper = matcher\n matcher = /\\r?\\n/\n // If matcher and options are arguments.\n } else if (typeof mapper === 'object') {\n options = mapper\n mapper = noop\n }\n }\n\n options = Object.assign({}, options)\n options.autoDestroy = true\n options.transform = transform\n options.flush = flush\n options.readableObjectMode = true\n\n const stream = new Transform(options)\n\n stream[kLast] = ''\n stream[kDecoder] = new StringDecoder('utf8')\n stream.matcher = matcher\n stream.mapper = mapper\n stream.maxLength = options.maxLength\n stream.skipOverflow = options.skipOverflow || false\n stream.overflow = false\n stream._destroy = function (err, cb) {\n // Weird Node v12 bug that we need to work around\n this._writableState.errorEmitted = false\n cb(err)\n }\n\n return stream\n}\n\nmodule.exports = split\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js?\n}");
|
|
1019
|
-
|
|
1020
|
-
/***/ },
|
|
1021
|
-
|
|
1022
|
-
/***/ "../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js"
|
|
1023
|
-
/*!**************************************************************************************!*\
|
|
1024
|
-
!*** ../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js ***!
|
|
1025
|
-
\**************************************************************************************/
|
|
1026
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
1027
|
-
|
|
1028
|
-
"use strict";
|
|
1029
|
-
eval("{\nconst stripAnsi = __webpack_require__(/*! strip-ansi */ \"../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js\");\nconst isFullwidthCodePoint = __webpack_require__(/*! is-fullwidth-code-point */ \"../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js\");\nconst emojiRegex = __webpack_require__(/*! emoji-regex */ \"../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js\");\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = stripAnsi(string);\n\n\tif (string.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstring = string.replace(emojiRegex(), ' ');\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports[\"default\"] = stringWidth;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js?\n}");
|
|
1030
|
-
|
|
1031
|
-
/***/ },
|
|
1032
|
-
|
|
1033
|
-
/***/ "../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js"
|
|
1034
|
-
/*!**********************************************************************************!*\
|
|
1035
|
-
!*** ../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js ***!
|
|
1036
|
-
\**********************************************************************************/
|
|
1037
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
1038
|
-
|
|
1039
|
-
"use strict";
|
|
1040
|
-
eval("{\nconst ansiRegex = __webpack_require__(/*! ansi-regex */ \"../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js\");\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js?\n}");
|
|
1041
|
-
|
|
1042
|
-
/***/ },
|
|
1043
|
-
|
|
1044
|
-
/***/ "../../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp/lib/tmp.js"
|
|
1045
|
-
/*!**********************************************************************!*\
|
|
1046
|
-
!*** ../../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp/lib/tmp.js ***!
|
|
1047
|
-
\**********************************************************************/
|
|
1048
|
-
(module, __unused_webpack_exports, __webpack_require__) {
|
|
1049
|
-
|
|
1050
|
-
eval("{/*!\n * Tmp\n *\n * Copyright (c) 2011-2017 KARASZI Istvan <github@spam.raszi.hu>\n *\n * MIT Licensed\n */\n\n/*\n * Module dependencies.\n */\nconst fs = __webpack_require__(/*! fs */ \"fs\");\nconst os = __webpack_require__(/*! os */ \"os\");\nconst path = __webpack_require__(/*! path */ \"path\");\nconst crypto = __webpack_require__(/*! crypto */ \"crypto\");\nconst _c = { fs: fs.constants, os: os.constants };\n\n/*\n * The working inner variables.\n */\nconst // the random characters to choose from\n RANDOM_CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n TEMPLATE_PATTERN = /XXXXXX/,\n DEFAULT_TRIES = 3,\n CREATE_FLAGS = (_c.O_CREAT || _c.fs.O_CREAT) | (_c.O_EXCL || _c.fs.O_EXCL) | (_c.O_RDWR || _c.fs.O_RDWR),\n // constants are off on the windows platform and will not match the actual errno codes\n IS_WIN32 = os.platform() === 'win32',\n EBADF = _c.EBADF || _c.os.errno.EBADF,\n ENOENT = _c.ENOENT || _c.os.errno.ENOENT,\n DIR_MODE = 0o700 /* 448 */,\n FILE_MODE = 0o600 /* 384 */,\n EXIT = 'exit',\n // this will hold the objects need to be removed on exit\n _removeObjects = [],\n // API change in fs.rmdirSync leads to error when passing in a second parameter, e.g. the callback\n FN_RMDIR_SYNC = fs.rmdirSync.bind(fs);\n\nlet _gracefulCleanup = false;\n\n/**\n * Recursively remove a directory and its contents.\n *\n * @param {string} dirPath path of directory to remove\n * @param {Function} callback\n * @private\n */\nfunction rimraf(dirPath, callback) {\n return fs.rm(dirPath, { recursive: true }, callback);\n}\n\n/**\n * Recursively remove a directory and its contents, synchronously.\n *\n * @param {string} dirPath path of directory to remove\n * @private\n */\nfunction FN_RIMRAF_SYNC(dirPath) {\n return fs.rmSync(dirPath, { recursive: true });\n}\n\n/**\n * Gets a temporary file name.\n *\n * @param {(Options|tmpNameCallback)} options options or callback\n * @param {?tmpNameCallback} callback the callback function\n */\nfunction tmpName(options, callback) {\n const args = _parseArguments(options, callback),\n opts = args[0],\n cb = args[1];\n\n _assertAndSanitizeOptions(opts, function (err, sanitizedOptions) {\n if (err) return cb(err);\n\n let tries = sanitizedOptions.tries;\n (function _getUniqueName() {\n try {\n const name = _generateTmpName(sanitizedOptions);\n\n // check whether the path exists then retry if needed\n fs.stat(name, function (err) {\n /* istanbul ignore else */\n if (!err) {\n /* istanbul ignore else */\n if (tries-- > 0) return _getUniqueName();\n\n return cb(new Error('Could not get a unique tmp filename, max tries reached ' + name));\n }\n\n cb(null, name);\n });\n } catch (err) {\n cb(err);\n }\n })();\n });\n}\n\n/**\n * Synchronous version of tmpName.\n *\n * @param {Object} options\n * @returns {string} the generated random name\n * @throws {Error} if the options are invalid or could not generate a filename\n */\nfunction tmpNameSync(options) {\n const args = _parseArguments(options),\n opts = args[0];\n\n const sanitizedOptions = _assertAndSanitizeOptionsSync(opts);\n\n let tries = sanitizedOptions.tries;\n do {\n const name = _generateTmpName(sanitizedOptions);\n try {\n fs.statSync(name);\n } catch (e) {\n return name;\n }\n } while (tries-- > 0);\n\n throw new Error('Could not get a unique tmp filename, max tries reached');\n}\n\n/**\n * Creates and opens a temporary file.\n *\n * @param {(Options|null|undefined|fileCallback)} options the config options or the callback function or null or undefined\n * @param {?fileCallback} callback\n */\nfunction file(options, callback) {\n const args = _parseArguments(options, callback),\n opts = args[0],\n cb = args[1];\n\n // gets a temporary filename\n tmpName(opts, function _tmpNameCreated(err, name) {\n /* istanbul ignore else */\n if (err) return cb(err);\n\n // create and open the file\n fs.open(name, CREATE_FLAGS, opts.mode || FILE_MODE, function _fileCreated(err, fd) {\n /* istanbu ignore else */\n if (err) return cb(err);\n\n if (opts.discardDescriptor) {\n return fs.close(fd, function _discardCallback(possibleErr) {\n // the chance of getting an error on close here is rather low and might occur in the most edgiest cases only\n return cb(possibleErr, name, undefined, _prepareTmpFileRemoveCallback(name, -1, opts, false));\n });\n } else {\n // detachDescriptor passes the descriptor whereas discardDescriptor closes it, either way, we no longer care\n // about the descriptor\n const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;\n cb(null, name, fd, _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts, false));\n }\n });\n });\n}\n\n/**\n * Synchronous version of file.\n *\n * @param {Options} options\n * @returns {FileSyncObject} object consists of name, fd and removeCallback\n * @throws {Error} if cannot create a file\n */\nfunction fileSync(options) {\n const args = _parseArguments(options),\n opts = args[0];\n\n const discardOrDetachDescriptor = opts.discardDescriptor || opts.detachDescriptor;\n const name = tmpNameSync(opts);\n let fd = fs.openSync(name, CREATE_FLAGS, opts.mode || FILE_MODE);\n /* istanbul ignore else */\n if (opts.discardDescriptor) {\n fs.closeSync(fd);\n fd = undefined;\n }\n\n return {\n name: name,\n fd: fd,\n removeCallback: _prepareTmpFileRemoveCallback(name, discardOrDetachDescriptor ? -1 : fd, opts, true)\n };\n}\n\n/**\n * Creates a temporary directory.\n *\n * @param {(Options|dirCallback)} options the options or the callback function\n * @param {?dirCallback} callback\n */\nfunction dir(options, callback) {\n const args = _parseArguments(options, callback),\n opts = args[0],\n cb = args[1];\n\n // gets a temporary filename\n tmpName(opts, function _tmpNameCreated(err, name) {\n /* istanbul ignore else */\n if (err) return cb(err);\n\n // create the directory\n fs.mkdir(name, opts.mode || DIR_MODE, function _dirCreated(err) {\n /* istanbul ignore else */\n if (err) return cb(err);\n\n cb(null, name, _prepareTmpDirRemoveCallback(name, opts, false));\n });\n });\n}\n\n/**\n * Synchronous version of dir.\n *\n * @param {Options} options\n * @returns {DirSyncObject} object consists of name and removeCallback\n * @throws {Error} if it cannot create a directory\n */\nfunction dirSync(options) {\n const args = _parseArguments(options),\n opts = args[0];\n\n const name = tmpNameSync(opts);\n fs.mkdirSync(name, opts.mode || DIR_MODE);\n\n return {\n name: name,\n removeCallback: _prepareTmpDirRemoveCallback(name, opts, true)\n };\n}\n\n/**\n * Removes files asynchronously.\n *\n * @param {Object} fdPath\n * @param {Function} next\n * @private\n */\nfunction _removeFileAsync(fdPath, next) {\n const _handler = function (err) {\n if (err && !_isENOENT(err)) {\n // reraise any unanticipated error\n return next(err);\n }\n next();\n };\n\n if (0 <= fdPath[0])\n fs.close(fdPath[0], function () {\n fs.unlink(fdPath[1], _handler);\n });\n else fs.unlink(fdPath[1], _handler);\n}\n\n/**\n * Removes files synchronously.\n *\n * @param {Object} fdPath\n * @private\n */\nfunction _removeFileSync(fdPath) {\n let rethrownException = null;\n try {\n if (0 <= fdPath[0]) fs.closeSync(fdPath[0]);\n } catch (e) {\n // reraise any unanticipated error\n if (!_isEBADF(e) && !_isENOENT(e)) throw e;\n } finally {\n try {\n fs.unlinkSync(fdPath[1]);\n } catch (e) {\n // reraise any unanticipated error\n if (!_isENOENT(e)) rethrownException = e;\n }\n }\n if (rethrownException !== null) {\n throw rethrownException;\n }\n}\n\n/**\n * Prepares the callback for removal of the temporary file.\n *\n * Returns either a sync callback or a async callback depending on whether\n * fileSync or file was called, which is expressed by the sync parameter.\n *\n * @param {string} name the path of the file\n * @param {number} fd file descriptor\n * @param {Object} opts\n * @param {boolean} sync\n * @returns {fileCallback | fileCallbackSync}\n * @private\n */\nfunction _prepareTmpFileRemoveCallback(name, fd, opts, sync) {\n const removeCallbackSync = _prepareRemoveCallback(_removeFileSync, [fd, name], sync);\n const removeCallback = _prepareRemoveCallback(_removeFileAsync, [fd, name], sync, removeCallbackSync);\n\n if (!opts.keep) _removeObjects.unshift(removeCallbackSync);\n\n return sync ? removeCallbackSync : removeCallback;\n}\n\n/**\n * Prepares the callback for removal of the temporary directory.\n *\n * Returns either a sync callback or a async callback depending on whether\n * tmpFileSync or tmpFile was called, which is expressed by the sync parameter.\n *\n * @param {string} name\n * @param {Object} opts\n * @param {boolean} sync\n * @returns {Function} the callback\n * @private\n */\nfunction _prepareTmpDirRemoveCallback(name, opts, sync) {\n const removeFunction = opts.unsafeCleanup ? rimraf : fs.rmdir.bind(fs);\n const removeFunctionSync = opts.unsafeCleanup ? FN_RIMRAF_SYNC : FN_RMDIR_SYNC;\n const removeCallbackSync = _prepareRemoveCallback(removeFunctionSync, name, sync);\n const removeCallback = _prepareRemoveCallback(removeFunction, name, sync, removeCallbackSync);\n if (!opts.keep) _removeObjects.unshift(removeCallbackSync);\n\n return sync ? removeCallbackSync : removeCallback;\n}\n\n/**\n * Creates a guarded function wrapping the removeFunction call.\n *\n * The cleanup callback is save to be called multiple times.\n * Subsequent invocations will be ignored.\n *\n * @param {Function} removeFunction\n * @param {string} fileOrDirName\n * @param {boolean} sync\n * @param {cleanupCallbackSync?} cleanupCallbackSync\n * @returns {cleanupCallback | cleanupCallbackSync}\n * @private\n */\nfunction _prepareRemoveCallback(removeFunction, fileOrDirName, sync, cleanupCallbackSync) {\n let called = false;\n\n // if sync is true, the next parameter will be ignored\n return function _cleanupCallback(next) {\n /* istanbul ignore else */\n if (!called) {\n // remove cleanupCallback from cache\n const toRemove = cleanupCallbackSync || _cleanupCallback;\n const index = _removeObjects.indexOf(toRemove);\n /* istanbul ignore else */\n if (index >= 0) _removeObjects.splice(index, 1);\n\n called = true;\n if (sync || removeFunction === FN_RMDIR_SYNC || removeFunction === FN_RIMRAF_SYNC) {\n return removeFunction(fileOrDirName);\n } else {\n return removeFunction(fileOrDirName, next || function () {});\n }\n }\n };\n}\n\n/**\n * The garbage collector.\n *\n * @private\n */\nfunction _garbageCollector() {\n /* istanbul ignore else */\n if (!_gracefulCleanup) return;\n\n // the function being called removes itself from _removeObjects,\n // loop until _removeObjects is empty\n while (_removeObjects.length) {\n try {\n _removeObjects[0]();\n } catch (e) {\n // already removed?\n }\n }\n}\n\n/**\n * Random name generator based on crypto.\n * Adapted from http://blog.tompawlak.org/how-to-generate-random-values-nodejs-javascript\n *\n * @param {number} howMany\n * @returns {string} the generated random name\n * @private\n */\nfunction _randomChars(howMany) {\n let value = [],\n rnd = null;\n\n // make sure that we do not fail because we ran out of entropy\n try {\n rnd = crypto.randomBytes(howMany);\n } catch (e) {\n rnd = crypto.pseudoRandomBytes(howMany);\n }\n\n for (let i = 0; i < howMany; i++) {\n value.push(RANDOM_CHARS[rnd[i] % RANDOM_CHARS.length]);\n }\n\n return value.join('');\n}\n\n/**\n * Checks whether the `obj` parameter is defined or not.\n *\n * @param {Object} obj\n * @returns {boolean} true if the object is undefined\n * @private\n */\nfunction _isUndefined(obj) {\n return typeof obj === 'undefined';\n}\n\n/**\n * Parses the function arguments.\n *\n * This function helps to have optional arguments.\n *\n * @param {(Options|null|undefined|Function)} options\n * @param {?Function} callback\n * @returns {Array} parsed arguments\n * @private\n */\nfunction _parseArguments(options, callback) {\n /* istanbul ignore else */\n if (typeof options === 'function') {\n return [{}, options];\n }\n\n /* istanbul ignore else */\n if (_isUndefined(options)) {\n return [{}, callback];\n }\n\n // copy options so we do not leak the changes we make internally\n const actualOptions = {};\n for (const key of Object.getOwnPropertyNames(options)) {\n actualOptions[key] = options[key];\n }\n\n return [actualOptions, callback];\n}\n\n/**\n * Resolve the specified path name in respect to tmpDir.\n *\n * The specified name might include relative path components, e.g. ../\n * so we need to resolve in order to be sure that is is located inside tmpDir\n *\n * @private\n */\nfunction _resolvePath(name, tmpDir, cb) {\n const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);\n\n fs.stat(pathToResolve, function (err) {\n if (err) {\n fs.realpath(path.dirname(pathToResolve), function (err, parentDir) {\n if (err) return cb(err);\n\n cb(null, path.join(parentDir, path.basename(pathToResolve)));\n });\n } else {\n fs.realpath(pathToResolve, cb);\n }\n });\n}\n\n/**\n * Resolve the specified path name in respect to tmpDir.\n *\n * The specified name might include relative path components, e.g. ../\n * so we need to resolve in order to be sure that is is located inside tmpDir\n *\n * @private\n */\nfunction _resolvePathSync(name, tmpDir) {\n const pathToResolve = path.isAbsolute(name) ? name : path.join(tmpDir, name);\n\n try {\n fs.statSync(pathToResolve);\n return fs.realpathSync(pathToResolve);\n } catch (_err) {\n const parentDir = fs.realpathSync(path.dirname(pathToResolve));\n\n return path.join(parentDir, path.basename(pathToResolve));\n }\n}\n\n/**\n * Generates a new temporary name.\n *\n * @param {Object} opts\n * @returns {string} the new random name according to opts\n * @private\n */\nfunction _generateTmpName(opts) {\n const tmpDir = opts.tmpdir;\n\n /* istanbul ignore else */\n if (!_isUndefined(opts.name)) {\n return path.join(tmpDir, opts.dir, opts.name);\n }\n\n /* istanbul ignore else */\n if (!_isUndefined(opts.template)) {\n return path.join(tmpDir, opts.dir, opts.template).replace(TEMPLATE_PATTERN, _randomChars(6));\n }\n\n // prefix and postfix\n const name = [\n opts.prefix ? opts.prefix : 'tmp',\n '-',\n process.pid,\n '-',\n _randomChars(12),\n opts.postfix ? '-' + opts.postfix : ''\n ].join('');\n\n return path.join(tmpDir, opts.dir, name);\n}\n\n/**\n * Check the prefix, postfix, and template options.\n *\n * Rejects non-string inputs so that a non-string `.includes('..')` cannot evade\n * the substring check (e.g. an Array whose `.includes('..')` is element-wise,\n * or a duck-typed object with a custom `.includes`), and so that the value is\n * not later coerced to a string with traversal sequences via `Array.prototype.join`\n * or `path.join`.\n *\n * @private\n */\nfunction _assertPath(option, value) {\n if (typeof value !== 'string') {\n throw new Error(`${option} option must be a string, got \"${typeof value}\".`);\n }\n\n if (value.includes(\"..\")) {\n throw new Error(\"Relative value not allowed\");\n }\n\n return value;\n}\n\n/**\n * Asserts and sanitizes the basic options.\n *\n * @private\n */\nfunction _assertOptionsBase(options) {\n if (!_isUndefined(options.name)) {\n const name = options.name;\n\n // assert that name is not absolute and does not contain a path\n if (path.isAbsolute(name)) throw new Error(`name option must not contain an absolute path, found \"${name}\".`);\n\n // must not fail on valid .<name> or ..<name> or similar such constructs\n const basename = path.basename(name);\n if (basename === '..' || basename === '.' || basename !== name) {\n throw new Error(`name option must not contain a path, found \"${name}\".`);\n }\n }\n\n /* istanbul ignore else */\n if (!_isUndefined(options.template)) {\n if (typeof options.template !== 'string') {\n throw new Error(`template option must be a string, got \"${typeof options.template}\".`);\n }\n if (!options.template.match(TEMPLATE_PATTERN)) {\n throw new Error(`Invalid template, found \"${options.template}\".`);\n }\n }\n\n /* istanbul ignore else */\n if ((!_isUndefined(options.tries) && isNaN(options.tries)) || options.tries < 0) {\n throw new Error(`Invalid tries, found \"${options.tries}\".`);\n }\n\n // if a name was specified we will try once\n options.tries = _isUndefined(options.name) ? options.tries || DEFAULT_TRIES : 1;\n options.keep = !!options.keep;\n options.detachDescriptor = !!options.detachDescriptor;\n options.discardDescriptor = !!options.discardDescriptor;\n options.unsafeCleanup = !!options.unsafeCleanup;\n\n // for completeness' sake only, also keep (multiple) blanks if the user, purportedly sane, requests us to\n options.prefix = _isUndefined(options.prefix) ? '' : _assertPath('prefix', options.prefix);\n options.postfix = _isUndefined(options.postfix) ? '' : _assertPath('postfix', options.postfix);\n options.template = _isUndefined(options.template) ? undefined : _assertPath('template', options.template);\n}\n\n/**\n * Gets the relative directory to tmpDir.\n *\n * @private\n */\nfunction _getRelativePath(option, name, tmpDir, cb) {\n if (_isUndefined(name)) return cb(null);\n\n _resolvePath(name, tmpDir, function (err, resolvedPath) {\n if (err) return cb(err);\n\n const relativePath = path.relative(tmpDir, resolvedPath);\n\n if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {\n return cb(new Error(`${option} option must be relative to \"${tmpDir}\", found \"${relativePath}\".`));\n }\n\n cb(null, relativePath);\n });\n}\n\n/**\n * Gets the relative path to tmpDir.\n *\n * @private\n */\nfunction _getRelativePathSync(option, name, tmpDir) {\n if (_isUndefined(name)) return;\n\n const resolvedPath = _resolvePathSync(name, tmpDir);\n const relativePath = path.relative(tmpDir, resolvedPath);\n\n if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {\n throw new Error(`${option} option must be relative to \"${tmpDir}\", found \"${relativePath}\".`);\n }\n\n return relativePath;\n}\n\n/**\n * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing\n * options.\n *\n * @private\n */\nfunction _assertAndSanitizeOptions(options, cb) {\n _getTmpDir(options, function (err, tmpDir) {\n if (err) return cb(err);\n\n options.tmpdir = tmpDir;\n\n try {\n _assertOptionsBase(options, tmpDir);\n } catch (err) {\n return cb(err);\n }\n\n // sanitize dir, also keep (multiple) blanks if the user, purportedly sane, requests us to\n _getRelativePath('dir', options.dir, tmpDir, function (err, dir) {\n if (err) return cb(err);\n\n options.dir = _isUndefined(dir) ? '' : dir;\n\n // sanitize further if template is relative to options.dir\n _getRelativePath('template', options.template, tmpDir, function (err, template) {\n if (err) return cb(err);\n\n options.template = template;\n\n cb(null, options);\n });\n });\n });\n}\n\n/**\n * Asserts whether the specified options are valid, also sanitizes options and provides sane defaults for missing\n * options.\n *\n * @private\n */\nfunction _assertAndSanitizeOptionsSync(options) {\n const tmpDir = (options.tmpdir = _getTmpDirSync(options));\n\n _assertOptionsBase(options, tmpDir);\n\n const dir = _getRelativePathSync('dir', options.dir, tmpDir);\n options.dir = _isUndefined(dir) ? '' : dir;\n\n options.template = _getRelativePathSync('template', options.template, tmpDir);\n\n return options;\n}\n\n/**\n * Helper for testing against EBADF to compensate changes made to Node 7.x under Windows.\n *\n * @private\n */\nfunction _isEBADF(error) {\n return _isExpectedError(error, -EBADF, 'EBADF');\n}\n\n/**\n * Helper for testing against ENOENT to compensate changes made to Node 7.x under Windows.\n *\n * @private\n */\nfunction _isENOENT(error) {\n return _isExpectedError(error, -ENOENT, 'ENOENT');\n}\n\n/**\n * Helper to determine whether the expected error code matches the actual code and errno,\n * which will differ between the supported node versions.\n *\n * - Node >= 7.0:\n * error.code {string}\n * error.errno {number} any numerical value will be negated\n *\n * CAVEAT\n *\n * On windows, the errno for EBADF is -4083 but os.constants.errno.EBADF is different and we must assume that ENOENT\n * is no different here.\n *\n * @param {SystemError} error\n * @param {number} errno\n * @param {string} code\n * @private\n */\nfunction _isExpectedError(error, errno, code) {\n return IS_WIN32 ? error.code === code : error.code === code && error.errno === errno;\n}\n\n/**\n * Sets the graceful cleanup.\n *\n * If graceful cleanup is set, tmp will remove all controlled temporary objects on process exit, otherwise the\n * temporary objects will remain in place, waiting to be cleaned up on system restart or otherwise scheduled temporary\n * object removals.\n */\nfunction setGracefulCleanup() {\n _gracefulCleanup = true;\n}\n\n/**\n * Returns the currently configured tmp dir from os.tmpdir().\n *\n * @private\n */\nfunction _getTmpDir(options, cb) {\n return fs.realpath((options && options.tmpdir) || os.tmpdir(), cb);\n}\n\n/**\n * Returns the currently configured tmp dir from os.tmpdir().\n *\n * @private\n */\nfunction _getTmpDirSync(options) {\n return fs.realpathSync((options && options.tmpdir) || os.tmpdir());\n}\n\n// Install process exit listener\nprocess.addListener(EXIT, _garbageCollector);\n\n/**\n * Configuration options.\n *\n * @typedef {Object} Options\n * @property {?boolean} keep the temporary object (file or dir) will not be garbage collected\n * @property {?number} tries the number of tries before give up the name generation\n * @property (?int) mode the access mode, defaults are 0o700 for directories and 0o600 for files\n * @property {?string} template the \"mkstemp\" like filename template\n * @property {?string} name fixed name relative to tmpdir or the specified dir option\n * @property {?string} dir tmp directory relative to the root tmp directory in use\n * @property {?string} prefix prefix for the generated name\n * @property {?string} postfix postfix for the generated name\n * @property {?string} tmpdir the root tmp directory which overrides the os tmpdir\n * @property {?boolean} unsafeCleanup recursively removes the created temporary directory, even when it's not empty\n * @property {?boolean} detachDescriptor detaches the file descriptor, caller is responsible for closing the file, tmp will no longer try closing the file during garbage collection\n * @property {?boolean} discardDescriptor discards the file descriptor (closes file, fd is -1), tmp will no longer try closing the file during garbage collection\n */\n\n/**\n * @typedef {Object} FileSyncObject\n * @property {string} name the name of the file\n * @property {string} fd the file descriptor or -1 if the fd has been discarded\n * @property {fileCallback} removeCallback the callback function to remove the file\n */\n\n/**\n * @typedef {Object} DirSyncObject\n * @property {string} name the name of the directory\n * @property {fileCallback} removeCallback the callback function to remove the directory\n */\n\n/**\n * @callback tmpNameCallback\n * @param {?Error} err the error object if anything goes wrong\n * @param {string} name the temporary file name\n */\n\n/**\n * @callback fileCallback\n * @param {?Error} err the error object if anything goes wrong\n * @param {string} name the temporary file name\n * @param {number} fd the file descriptor or -1 if the fd had been discarded\n * @param {cleanupCallback} fn the cleanup callback function\n */\n\n/**\n * @callback fileCallbackSync\n * @param {?Error} err the error object if anything goes wrong\n * @param {string} name the temporary file name\n * @param {number} fd the file descriptor or -1 if the fd had been discarded\n * @param {cleanupCallbackSync} fn the cleanup callback function\n */\n\n/**\n * @callback dirCallback\n * @param {?Error} err the error object if anything goes wrong\n * @param {string} name the temporary file name\n * @param {cleanupCallback} fn the cleanup callback function\n */\n\n/**\n * @callback dirCallbackSync\n * @param {?Error} err the error object if anything goes wrong\n * @param {string} name the temporary file name\n * @param {cleanupCallbackSync} fn the cleanup callback function\n */\n\n/**\n * Removes the temporary created file or directory.\n *\n * @callback cleanupCallback\n * @param {simpleCallback} [next] function to call whenever the tmp object needs to be removed\n */\n\n/**\n * Removes the temporary created file or directory.\n *\n * @callback cleanupCallbackSync\n */\n\n/**\n * Callback function for function composition.\n * @see {@link https://github.com/raszi/node-tmp/issues/57|raszi/node-tmp#57}\n *\n * @callback simpleCallback\n */\n\n// exporting all the needed methods\n\n// evaluate _getTmpDir() lazily, mainly for simplifying testing but it also will\n// allow users to reconfigure the temporary directory\nObject.defineProperty(module.exports, \"tmpdir\", ({\n enumerable: true,\n configurable: false,\n get: function () {\n return _getTmpDirSync();\n }\n}));\n\nmodule.exports.dir = dir;\nmodule.exports.dirSync = dirSync;\n\nmodule.exports.file = file;\nmodule.exports.fileSync = fileSync;\n\nmodule.exports.tmpName = tmpName;\nmodule.exports.tmpNameSync = tmpNameSync;\n\nmodule.exports.setGracefulCleanup = setGracefulCleanup;\n\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp/lib/tmp.js?\n}");
|
|
1051
|
-
|
|
1052
|
-
/***/ },
|
|
1053
|
-
|
|
1054
|
-
/***/ "crypto"
|
|
1055
|
-
/*!*************************!*\
|
|
1056
|
-
!*** external "crypto" ***!
|
|
1057
|
-
\*************************/
|
|
1058
|
-
(module) {
|
|
1059
|
-
|
|
1060
|
-
"use strict";
|
|
1061
|
-
module.exports = require("crypto");
|
|
1062
|
-
|
|
1063
|
-
/***/ },
|
|
1064
|
-
|
|
1065
|
-
/***/ "events"
|
|
1066
|
-
/*!*************************!*\
|
|
1067
|
-
!*** external "events" ***!
|
|
1068
|
-
\*************************/
|
|
1069
|
-
(module) {
|
|
1070
|
-
|
|
1071
|
-
"use strict";
|
|
1072
|
-
module.exports = require("events");
|
|
1073
|
-
|
|
1074
|
-
/***/ },
|
|
1075
|
-
|
|
1076
|
-
/***/ "fs"
|
|
1077
|
-
/*!*********************!*\
|
|
1078
|
-
!*** external "fs" ***!
|
|
1079
|
-
\*********************/
|
|
1080
|
-
(module) {
|
|
1081
|
-
|
|
1082
|
-
"use strict";
|
|
1083
|
-
module.exports = require("fs");
|
|
1084
|
-
|
|
1085
|
-
/***/ },
|
|
1086
|
-
|
|
1087
|
-
/***/ "node:buffer"
|
|
1088
|
-
/*!******************************!*\
|
|
1089
|
-
!*** external "node:buffer" ***!
|
|
1090
|
-
\******************************/
|
|
1091
|
-
(module) {
|
|
1092
|
-
|
|
1093
|
-
"use strict";
|
|
1094
|
-
module.exports = require("node:buffer");
|
|
1095
|
-
|
|
1096
|
-
/***/ },
|
|
1097
|
-
|
|
1098
|
-
/***/ "node:child_process"
|
|
1099
|
-
/*!*************************************!*\
|
|
1100
|
-
!*** external "node:child_process" ***!
|
|
1101
|
-
\*************************************/
|
|
1102
|
-
(module) {
|
|
1103
|
-
|
|
1104
|
-
"use strict";
|
|
1105
|
-
module.exports = require("node:child_process");
|
|
1106
|
-
|
|
1107
|
-
/***/ },
|
|
1108
|
-
|
|
1109
|
-
/***/ "node:crypto"
|
|
1110
|
-
/*!******************************!*\
|
|
1111
|
-
!*** external "node:crypto" ***!
|
|
1112
|
-
\******************************/
|
|
1113
|
-
(module) {
|
|
1114
|
-
|
|
1115
|
-
"use strict";
|
|
1116
|
-
module.exports = require("node:crypto");
|
|
1117
|
-
|
|
1118
|
-
/***/ },
|
|
1119
|
-
|
|
1120
|
-
/***/ "node:events"
|
|
1121
|
-
/*!******************************!*\
|
|
1122
|
-
!*** external "node:events" ***!
|
|
1123
|
-
\******************************/
|
|
1124
|
-
(module) {
|
|
1125
|
-
|
|
1126
|
-
"use strict";
|
|
1127
|
-
module.exports = require("node:events");
|
|
1128
|
-
|
|
1129
|
-
/***/ },
|
|
1130
|
-
|
|
1131
|
-
/***/ "node:fs"
|
|
1132
|
-
/*!**************************!*\
|
|
1133
|
-
!*** external "node:fs" ***!
|
|
1134
|
-
\**************************/
|
|
1135
|
-
(module) {
|
|
1136
|
-
|
|
1137
|
-
"use strict";
|
|
1138
|
-
module.exports = require("node:fs");
|
|
1139
|
-
|
|
1140
|
-
/***/ },
|
|
1141
|
-
|
|
1142
|
-
/***/ "node:fs/promises"
|
|
1143
|
-
/*!***********************************!*\
|
|
1144
|
-
!*** external "node:fs/promises" ***!
|
|
1145
|
-
\***********************************/
|
|
1146
|
-
(module) {
|
|
1147
|
-
|
|
1148
|
-
"use strict";
|
|
1149
|
-
module.exports = require("node:fs/promises");
|
|
1150
|
-
|
|
1151
|
-
/***/ },
|
|
1152
|
-
|
|
1153
|
-
/***/ "node:http"
|
|
1154
|
-
/*!****************************!*\
|
|
1155
|
-
!*** external "node:http" ***!
|
|
1156
|
-
\****************************/
|
|
1157
|
-
(module) {
|
|
1158
|
-
|
|
1159
|
-
"use strict";
|
|
1160
|
-
module.exports = require("node:http");
|
|
1161
|
-
|
|
1162
|
-
/***/ },
|
|
1163
|
-
|
|
1164
|
-
/***/ "node:os"
|
|
1165
|
-
/*!**************************!*\
|
|
1166
|
-
!*** external "node:os" ***!
|
|
1167
|
-
\**************************/
|
|
1168
|
-
(module) {
|
|
1169
|
-
|
|
1170
|
-
"use strict";
|
|
1171
|
-
module.exports = require("node:os");
|
|
1172
|
-
|
|
1173
|
-
/***/ },
|
|
1174
|
-
|
|
1175
|
-
/***/ "node:path"
|
|
1176
|
-
/*!****************************!*\
|
|
1177
|
-
!*** external "node:path" ***!
|
|
1178
|
-
\****************************/
|
|
1179
|
-
(module) {
|
|
1180
|
-
|
|
1181
|
-
"use strict";
|
|
1182
|
-
module.exports = require("node:path");
|
|
1183
|
-
|
|
1184
|
-
/***/ },
|
|
1185
|
-
|
|
1186
|
-
/***/ "node:readline"
|
|
1187
|
-
/*!********************************!*\
|
|
1188
|
-
!*** external "node:readline" ***!
|
|
1189
|
-
\********************************/
|
|
1190
|
-
(module) {
|
|
1191
|
-
|
|
1192
|
-
"use strict";
|
|
1193
|
-
module.exports = require("node:readline");
|
|
1194
|
-
|
|
1195
|
-
/***/ },
|
|
1196
|
-
|
|
1197
|
-
/***/ "node:stream"
|
|
1198
|
-
/*!******************************!*\
|
|
1199
|
-
!*** external "node:stream" ***!
|
|
1200
|
-
\******************************/
|
|
1201
|
-
(module) {
|
|
1202
|
-
|
|
1203
|
-
"use strict";
|
|
1204
|
-
module.exports = require("node:stream");
|
|
1205
|
-
|
|
1206
|
-
/***/ },
|
|
1207
|
-
|
|
1208
|
-
/***/ "node:stream/promises"
|
|
1209
|
-
/*!***************************************!*\
|
|
1210
|
-
!*** external "node:stream/promises" ***!
|
|
1211
|
-
\***************************************/
|
|
1212
|
-
(module) {
|
|
1213
|
-
|
|
1214
|
-
"use strict";
|
|
1215
|
-
module.exports = require("node:stream/promises");
|
|
1216
|
-
|
|
1217
|
-
/***/ },
|
|
1218
|
-
|
|
1219
|
-
/***/ "node:url"
|
|
1220
|
-
/*!***************************!*\
|
|
1221
|
-
!*** external "node:url" ***!
|
|
1222
|
-
\***************************/
|
|
1223
|
-
(module) {
|
|
1224
|
-
|
|
1225
|
-
"use strict";
|
|
1226
|
-
module.exports = require("node:url");
|
|
1227
|
-
|
|
1228
|
-
/***/ },
|
|
1229
|
-
|
|
1230
|
-
/***/ "node:util"
|
|
1231
|
-
/*!****************************!*\
|
|
1232
|
-
!*** external "node:util" ***!
|
|
1233
|
-
\****************************/
|
|
1234
|
-
(module) {
|
|
1235
|
-
|
|
1236
|
-
"use strict";
|
|
1237
|
-
module.exports = require("node:util");
|
|
1238
|
-
|
|
1239
|
-
/***/ },
|
|
1240
|
-
|
|
1241
|
-
/***/ "node:zlib"
|
|
1242
|
-
/*!****************************!*\
|
|
1243
|
-
!*** external "node:zlib" ***!
|
|
1244
|
-
\****************************/
|
|
1245
|
-
(module) {
|
|
1246
|
-
|
|
1247
|
-
"use strict";
|
|
1248
|
-
module.exports = require("node:zlib");
|
|
1249
|
-
|
|
1250
|
-
/***/ },
|
|
1251
|
-
|
|
1252
|
-
/***/ "os"
|
|
1253
|
-
/*!*********************!*\
|
|
1254
|
-
!*** external "os" ***!
|
|
1255
|
-
\*********************/
|
|
1256
|
-
(module) {
|
|
1257
|
-
|
|
1258
|
-
"use strict";
|
|
1259
|
-
module.exports = require("os");
|
|
1260
|
-
|
|
1261
|
-
/***/ },
|
|
1262
|
-
|
|
1263
|
-
/***/ "path"
|
|
1264
|
-
/*!***********************!*\
|
|
1265
|
-
!*** external "path" ***!
|
|
1266
|
-
\***********************/
|
|
1267
|
-
(module) {
|
|
1268
|
-
|
|
1269
|
-
"use strict";
|
|
1270
|
-
module.exports = require("path");
|
|
1271
|
-
|
|
1272
|
-
/***/ },
|
|
1273
|
-
|
|
1274
|
-
/***/ "readline"
|
|
1275
|
-
/*!***************************!*\
|
|
1276
|
-
!*** external "readline" ***!
|
|
1277
|
-
\***************************/
|
|
1278
|
-
(module) {
|
|
1279
|
-
|
|
1280
|
-
"use strict";
|
|
1281
|
-
module.exports = require("readline");
|
|
1282
|
-
|
|
1283
|
-
/***/ },
|
|
1284
|
-
|
|
1285
|
-
/***/ "stream"
|
|
1286
|
-
/*!*************************!*\
|
|
1287
|
-
!*** external "stream" ***!
|
|
1288
|
-
\*************************/
|
|
1289
|
-
(module) {
|
|
1290
|
-
|
|
1291
|
-
"use strict";
|
|
1292
|
-
module.exports = require("stream");
|
|
1293
|
-
|
|
1294
|
-
/***/ },
|
|
1295
|
-
|
|
1296
|
-
/***/ "string_decoder"
|
|
1297
|
-
/*!*********************************!*\
|
|
1298
|
-
!*** external "string_decoder" ***!
|
|
1299
|
-
\*********************************/
|
|
1300
|
-
(module) {
|
|
1301
|
-
|
|
1302
|
-
"use strict";
|
|
1303
|
-
module.exports = require("string_decoder");
|
|
1304
|
-
|
|
1305
|
-
/***/ },
|
|
1306
|
-
|
|
1307
|
-
/***/ "url"
|
|
1308
|
-
/*!**********************!*\
|
|
1309
|
-
!*** external "url" ***!
|
|
1310
|
-
\**********************/
|
|
1311
|
-
(module) {
|
|
1312
|
-
|
|
1313
|
-
"use strict";
|
|
1314
|
-
module.exports = require("url");
|
|
1315
|
-
|
|
1316
|
-
/***/ },
|
|
1317
|
-
|
|
1318
|
-
/***/ "util"
|
|
1319
|
-
/*!***********************!*\
|
|
1320
|
-
!*** external "util" ***!
|
|
1321
|
-
\***********************/
|
|
1322
|
-
(module) {
|
|
1323
|
-
|
|
1324
|
-
"use strict";
|
|
1325
|
-
module.exports = require("util");
|
|
1326
|
-
|
|
1327
|
-
/***/ },
|
|
1328
|
-
|
|
1329
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixInputTransform.js"
|
|
1330
|
-
/*!******************************************************************************************!*\
|
|
1331
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixInputTransform.js ***!
|
|
1332
|
-
\******************************************************************************************/
|
|
1333
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1334
|
-
|
|
1335
|
-
"use strict";
|
|
1336
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TrixInputTransform: () => (/* binding */ TrixInputTransform)\n/* harmony export */ });\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js\");\n\n\nclass TrixInputTransform extends node_stream__WEBPACK_IMPORTED_MODULE_0__.Transform {\n batch = '';\n _transform(chunk, _encoding, done) {\n // trim first: splitting untrimmed lines yields empty fields, which turn\n // into a bogus entry with an empty word or an empty id\n const [id, ...terms] = chunk.toString().trim().split(/\\s+/);\n for (const term of terms) {\n this.batch += `${term.toLowerCase()} ${id}\\n`;\n }\n if (this.batch.length >= _util_js__WEBPACK_IMPORTED_MODULE_1__.chunkSize) {\n this.push(this.batch);\n this.batch = '';\n }\n done();\n }\n _flush(done) {\n if (this.batch !== '') {\n this.push(this.batch);\n }\n done();\n }\n}\n//# sourceMappingURL=TrixInputTransform.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixInputTransform.js?\n}");
|
|
1337
|
-
|
|
1338
|
-
/***/ },
|
|
1339
|
-
|
|
1340
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixOutputTransform.js"
|
|
1341
|
-
/*!*******************************************************************************************!*\
|
|
1342
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixOutputTransform.js ***!
|
|
1343
|
-
\*******************************************************************************************/
|
|
1344
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1345
|
-
|
|
1346
|
-
"use strict";
|
|
1347
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ TrixOutputTransform: () => (/* binding */ TrixOutputTransform)\n/* harmony export */ });\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js\");\n\n\nfunction elt(buff, current) {\n return `${current}${buff.map((b, i) => ` ${b},${i + 1}`).join('')}\\n`;\n}\nclass TrixOutputTransform extends node_stream__WEBPACK_IMPORTED_MODULE_0__.Transform {\n buff = [];\n current = '';\n batch = '';\n _transform(chunk, _encoding, done) {\n // weird: need to strip nulls from string, xref\n // https://github.com/GMOD/jbrowse-components/pull/2451\n const line = chunk.toString().replaceAll('\\0', '');\n const spaceIdx = line.indexOf(' ');\n const id = spaceIdx === -1 ? line : line.slice(0, spaceIdx);\n const data = spaceIdx === -1 ? '' : line.slice(spaceIdx + 1);\n if (this.current !== id) {\n if (this.buff.length > 0) {\n this.batch += elt(this.buff, this.current);\n this.buff = [];\n }\n this.current = id;\n }\n // a term repeated within one input record produces identical lines, which\n // the sort puts next to each other. emitting both would hand the reader the\n // same record twice, and it counts each one against its result cap\n if (this.buff.at(-1) !== data) {\n this.buff.push(data);\n }\n if (this.batch.length >= _util_js__WEBPACK_IMPORTED_MODULE_1__.chunkSize) {\n this.push(this.batch);\n this.batch = '';\n }\n done();\n }\n _flush(done) {\n if (this.buff.length > 0) {\n this.batch += elt(this.buff, this.current);\n }\n if (this.batch !== '') {\n this.push(this.batch);\n }\n done();\n }\n}\n//# sourceMappingURL=TrixOutputTransform.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixOutputTransform.js?\n}");
|
|
1348
|
-
|
|
1349
|
-
/***/ },
|
|
1350
|
-
|
|
1351
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/commandExists.js"
|
|
1352
|
-
/*!*************************************************************************************!*\
|
|
1353
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/commandExists.js ***!
|
|
1354
|
-
\*************************************************************************************/
|
|
1355
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1356
|
-
|
|
1357
|
-
"use strict";
|
|
1358
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ commandExistsSync: () => (/* binding */ commandExistsSync)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n\n\nfunction commandExistsSync(cmd) {\n const PATH = process.env.PATH ?? '';\n for (const dir of PATH.split(node_path__WEBPACK_IMPORTED_MODULE_1__.delimiter)) {\n if (dir !== '') {\n const candidate = node_path__WEBPACK_IMPORTED_MODULE_1__.join(dir, cmd);\n try {\n // directories are executable too, so check for a plain file\n if (node_fs__WEBPACK_IMPORTED_MODULE_0__.statSync(candidate).isFile()) {\n node_fs__WEBPACK_IMPORTED_MODULE_0__.accessSync(candidate, node_fs__WEBPACK_IMPORTED_MODULE_0__.constants.X_OK);\n return true;\n }\n }\n catch {\n // not here, keep looking\n }\n }\n }\n return false;\n}\n//# sourceMappingURL=commandExists.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/commandExists.js?\n}");
|
|
1359
|
-
|
|
1360
|
-
/***/ },
|
|
1361
|
-
|
|
1362
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/compareIxLines.js"
|
|
1363
|
-
/*!**************************************************************************************!*\
|
|
1364
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/compareIxLines.js ***!
|
|
1365
|
-
\**************************************************************************************/
|
|
1366
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1367
|
-
|
|
1368
|
-
"use strict";
|
|
1369
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ compareIxLines: () => (/* binding */ compareIxLines)\n/* harmony export */ });\n// code points above the basic multilingual plane take two utf-16 code units\nconst MAX_BMP = 65_535;\nconst SPACE = 32;\n// orders ix lines the way the external backend does: `sort -k1,1` under\n// LC_ALL=C, as in the original C ixIxx. two things about that.\n//\n// utf-8 byte order equals code point order, which javascript's `<` on strings\n// does not follow: `<` compares utf-16 code units, so astral characters\n// (encoded as surrogates in 0xD800-0xDFFF) compare below 0xE000-0xFFFF instead\n// of above them.\n//\n// and `-k1,1` sorts on the first field before falling back to the whole line,\n// which is not the same relation as plain byte order over the whole line. Where\n// one term is a proper prefix of another, byte order weighs the space ending the\n// shorter term against the longer term's next character, and gets the pair\n// backwards whenever that character sorts below a space — `ab` after `ab\\x01x`,\n// where sort puts it first. A term holds no spaces, so ranking the separator\n// below every character reproduces the two-level comparison exactly: it can only\n// ever meet the continuation of a longer term, or the matching separator of an\n// equal one\nfunction compareIxLines(a, b) {\n // one cursor serves both strings: the loop only advances past code points that\n // were equal, and equal code points occupy the same number of utf-16 units\n let i = 0;\n while (i < a.length && i < b.length) {\n const ca = a.codePointAt(i);\n const cb = b.codePointAt(i);\n if (ca !== cb) {\n return (ca === SPACE ? -1 : ca) < (cb === SPACE ? -1 : cb) ? -1 : 1;\n }\n i += ca > MAX_BMP ? 2 : 1;\n }\n // the loop ends when at least one string runs out, so whichever still has\n // characters left is the larger one\n return i < a.length ? 1 : i < b.length ? -1 : 0;\n}\n//# sourceMappingURL=compareIxLines.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/compareIxLines.js?\n}");
|
|
1370
|
-
|
|
1371
|
-
/***/ },
|
|
1372
|
-
|
|
1373
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/externalSort.js"
|
|
1374
|
-
/*!************************************************************************************!*\
|
|
1375
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/externalSort.js ***!
|
|
1376
|
-
\************************************************************************************/
|
|
1377
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1378
|
-
|
|
1379
|
-
"use strict";
|
|
1380
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ externalSort: () => (/* binding */ externalSort),\n/* harmony export */ maxFanIn: () => (/* binding */ maxFanIn)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var node_stream_promises__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! node:stream/promises */ \"node:stream/promises\");\n/* harmony import */ var split2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! split2 */ \"../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js\");\n/* harmony import */ var _compareIxLines_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./compareIxLines.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/compareIxLines.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./util.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js\");\n\n\n\n\n\n\n\n// pipe() propagates neither errors nor teardown: a failing input would leave\n// the splitter open and the consumer waiting forever, and a consumer that stops\n// early would leave the input's file descriptor open. pipeline() destroys in\n// both directions, and the consumer sees any input error because pipeline\n// destroys the splitter with it\nfunction splitLines(input) {\n const splitter = split2__WEBPACK_IMPORTED_MODULE_4__();\n (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(input, splitter).catch(() => {\n // nothing to report here: pipeline destroys the splitter with the error, so\n // the consumer iterating it is the one that sees it\n });\n return splitter;\n}\nfunction heapify(harr, i, heapSize) {\n let cur = i;\n for (;;) {\n const l = (cur << 1) + 1;\n const r = l + 1;\n let first = cur;\n if (l < heapSize && (0,_compareIxLines_js__WEBPACK_IMPORTED_MODULE_5__.compareIxLines)(harr[l].item, harr[first].item) < 0) {\n first = l;\n }\n if (r < heapSize && (0,_compareIxLines_js__WEBPACK_IMPORTED_MODULE_5__.compareIxLines)(harr[r].item, harr[first].item) < 0) {\n first = r;\n }\n if (first === cur) {\n return;\n }\n const tmp = harr[cur];\n harr[cur] = harr[first];\n harr[first] = tmp;\n cur = first;\n }\n}\nasync function initialRun(input, tempDir, maxHeap, files) {\n const buf = [];\n const flush = async () => {\n if (buf.length > 0) {\n buf.sort(_compareIxLines_js__WEBPACK_IMPORTED_MODULE_5__.compareIxLines);\n const fpath = node_path__WEBPACK_IMPORTED_MODULE_1__.resolve(tempDir, `es_${files.length}.tmp`);\n await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.writeFile(fpath, buf.join('\\n') + '\\n');\n buf.length = 0;\n files.push(fpath);\n }\n };\n for await (const line of splitLines(input)) {\n buf.push(line);\n if (buf.length === maxHeap) {\n await flush();\n }\n }\n await flush();\n}\nasync function* mergeIterator(filesPath) {\n const iters = filesPath.map(file => splitLines(node_fs__WEBPACK_IMPORTED_MODULE_0__.createReadStream(file))[Symbol.asyncIterator]());\n try {\n const harr = [];\n for (const iter of iters) {\n const r = await iter.next();\n if (!r.done) {\n harr.push({ item: r.value, iter });\n }\n }\n let heapSize = harr.length;\n for (let i = (heapSize - 1) >> 1; i >= 0; i--) {\n heapify(harr, i, heapSize);\n }\n // yielding a chunk per line makes one write per line downstream\n let batch = '';\n while (heapSize > 0) {\n const top = harr[0];\n batch += `${top.item}\\n`;\n if (batch.length >= _util_js__WEBPACK_IMPORTED_MODULE_6__.chunkSize) {\n yield batch;\n batch = '';\n }\n const r = await top.iter.next();\n if (r.done) {\n heapSize--;\n harr[0] = harr[heapSize];\n }\n else {\n top.item = r.value;\n }\n heapify(harr, 0, heapSize);\n }\n if (batch !== '') {\n yield batch;\n }\n }\n finally {\n // closes the temp file handles even when the consumer stops early\n await Promise.all(iters.map(async (iter) => iter.return?.()));\n }\n}\nasync function unlinkTemp(file) {\n await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.unlink(file).catch((error) => {\n console.error(`failed to unlink temp file ${file}:`, error);\n });\n}\n// a merge holds one file handle open per run for its whole duration, so a sort\n// with thousands of runs would blow past the process fd limit (EMFILE). runs\n// above this many are folded down first, which costs an extra pass over the\n// data but only for sorts big enough to need it\nconst maxFanIn = 64;\n// replaces groups of runs with a single merged run until few enough are left to\n// merge in one pass. `files` is edited in place and always lists exactly the\n// runs that exist on disk, so the caller's cleanup stays correct if this throws\nasync function reduceRuns(files, tempDir) {\n let generation = 0;\n while (files.length > maxFanIn) {\n const group = files.slice(0, maxFanIn);\n const fpath = node_path__WEBPACK_IMPORTED_MODULE_1__.resolve(tempDir, `es_g${generation++}.tmp`);\n files.push(fpath);\n await (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(node_stream__WEBPACK_IMPORTED_MODULE_2__.Readable.from(mergeIterator(group)), node_fs__WEBPACK_IMPORTED_MODULE_0__.createWriteStream(fpath));\n files.splice(0, maxFanIn);\n await Promise.all(group.map(unlinkTemp));\n }\n}\nasync function mergeSortedFiles(files, tempDir, output) {\n await reduceRuns(files, tempDir);\n if (files.length === 0) {\n await new Promise(resolve => {\n output.end(resolve);\n });\n }\n else if (files.length === 1) {\n await (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(node_fs__WEBPACK_IMPORTED_MODULE_0__.createReadStream(files[0]), output);\n }\n else {\n await (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(node_stream__WEBPACK_IMPORTED_MODULE_2__.Readable.from(mergeIterator(files)), output);\n }\n}\nasync function externalSort(input, output, tempDir, maxHeap = 10_000) {\n const files = [];\n try {\n await initialRun(input, tempDir, maxHeap, files);\n await mergeSortedFiles(files, tempDir, output);\n }\n catch (error) {\n // mergeSortedFiles is what ends the output, so failing before it would\n // leave whatever reads the output waiting on a stream that never finishes\n output.destroy(error instanceof Error ? error : new Error(String(error)));\n throw error;\n }\n finally {\n await Promise.all(files.map(unlinkTemp));\n }\n}\n//# sourceMappingURL=externalSort.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/externalSort.js?\n}");
|
|
1381
|
-
|
|
1382
|
-
/***/ },
|
|
1383
|
-
|
|
1384
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/index.js"
|
|
1385
|
-
/*!*****************************************************************************!*\
|
|
1386
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/index.js ***!
|
|
1387
|
-
\*****************************************************************************/
|
|
1388
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1389
|
-
|
|
1390
|
-
"use strict";
|
|
1391
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ixIxx: () => (/* binding */ ixIxx),\n/* harmony export */ ixIxxStream: () => (/* binding */ ixIxxStream)\n/* harmony export */ });\n/* harmony import */ var _makeIx_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./makeIx.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIx.js\");\n/* harmony import */ var _makeIxx_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./makeIxx.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIxx.js\");\n\n\n// this file (index.ts) is a translation of ixIxx.c from ucscGenomeBrowser/kent\n// the license of that file is reproduced below\n/*\n * MIT License\n *\n * Copyright (C) 2001 UC Regents\n *\n * Permission is hereby granted, free of charge, to any person or non-commercial\n * entity obtaining a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including without\n * limitation the rights to use, copy, modify, merge, publish, distribute,\n * sublicense, and/or sell copies of the Software, and to permit persons to whom\n * the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\nasync function ixIxx(inText, outIx, outIxx, prefixSize) {\n await (0,_makeIx_js__WEBPACK_IMPORTED_MODULE_0__.makeIx)(inText, outIx);\n await (0,_makeIxx_js__WEBPACK_IMPORTED_MODULE_1__.makeIxx)(outIx, outIxx, prefixSize);\n}\nasync function ixIxxStream(stream, outIx, outIxx, prefixSize) {\n await (0,_makeIx_js__WEBPACK_IMPORTED_MODULE_0__.makeIxStream)(stream, outIx);\n await (0,_makeIxx_js__WEBPACK_IMPORTED_MODULE_1__.makeIxx)(outIx, outIxx, prefixSize);\n}\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/index.js?\n}");
|
|
1392
|
-
|
|
1393
|
-
/***/ },
|
|
1394
|
-
|
|
1395
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/ixWords.js"
|
|
1396
|
-
/*!*******************************************************************************!*\
|
|
1397
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/ixWords.js ***!
|
|
1398
|
-
\*******************************************************************************/
|
|
1399
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1400
|
-
|
|
1401
|
-
"use strict";
|
|
1402
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ixWords: () => (/* binding */ ixWords)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n\n// prettier lowercases hex literals while unicorn wants them uppercased, so\n// these are decimal to keep both happy\nconst NEWLINE = 10;\nconst CARRIAGE_RETURN = 13;\nconst SPACE = 32;\nconst EMPTY = Buffer.alloc(0);\nfunction decodeField(field) {\n const end = field.length > 0 && field[field.length - 1] === CARRIAGE_RETURN\n ? field.length - 1\n : field.length;\n return field.toString('utf8', 0, end);\n}\n// yields the first field of each line along with the line's byte offset. byte\n// offsets, not character counts, because the ixx addresses are used for\n// byte-range requests against the ix\nasync function* ixWords(filename) {\n const stream = node_fs__WEBPACK_IMPORTED_MODULE_0__.createReadStream(filename);\n // byte offset of the line being scanned, and of the current chunk\n let lineStart = 0;\n let base = 0;\n // that line's first field, as far as it has been seen. only the field is\n // carried across chunks, never the rest of the line: a term shared by many\n // records makes an ix line megabytes long, and holding those whole recopied\n // the line-so-far on every chunk, so a handful of them cost more than the\n // whole rest of the file\n let field = EMPTY;\n // false once the line's first space has gone by, after which its remaining\n // bytes are only counted\n let collecting = true;\n // whether the line being scanned has any bytes yet, so a file ending in a\n // newline does not yield a phantom empty line and one that doesn't still\n // yields its last\n let pending = false;\n for await (const chunk of stream) {\n let pos = 0;\n while (pos < chunk.length) {\n const nl = chunk.indexOf(NEWLINE, pos);\n const lineEnd = nl === -1 ? chunk.length : nl;\n if (collecting) {\n // a space past the line end means this line has none, checking after\n // the search beats bounding it with a subarray on lines that do have one\n const space = chunk.indexOf(SPACE, pos);\n const fieldEnd = space === -1 || space > lineEnd ? lineEnd : space;\n const part = chunk.subarray(pos, fieldEnd);\n field = field.length === 0 ? part : Buffer.concat([field, part]);\n collecting = fieldEnd === lineEnd;\n }\n if (nl === -1) {\n pending = true;\n break;\n }\n yield { word: decodeField(field), offset: lineStart };\n lineStart = base + nl + 1;\n field = EMPTY;\n collecting = true;\n pending = false;\n pos = nl + 1;\n }\n // `field` may be a view into a chunk the stream is free to reuse\n field = Buffer.from(field);\n base += chunk.length;\n }\n if (pending) {\n yield { word: decodeField(field), offset: lineStart };\n }\n}\n//# sourceMappingURL=ixWords.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/ixWords.js?\n}");
|
|
1403
|
-
|
|
1404
|
-
/***/ },
|
|
1405
|
-
|
|
1406
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIx.js"
|
|
1407
|
-
/*!******************************************************************************!*\
|
|
1408
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIx.js ***!
|
|
1409
|
-
\******************************************************************************/
|
|
1410
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1411
|
-
|
|
1412
|
-
"use strict";
|
|
1413
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ makeIx: () => (/* binding */ makeIx),\n/* harmony export */ makeIxStream: () => (/* binding */ makeIxStream)\n/* harmony export */ });\n/* harmony import */ var node_child_process__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:child_process */ \"node:child_process\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_stream__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:stream */ \"node:stream\");\n/* harmony import */ var node_stream_promises__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! node:stream/promises */ \"node:stream/promises\");\n/* harmony import */ var split2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! split2 */ \"../../node_modules/.pnpm/split2@4.2.0/node_modules/split2/index.js\");\n/* harmony import */ var _TrixInputTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./TrixInputTransform.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixInputTransform.js\");\n/* harmony import */ var _TrixOutputTransform_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./TrixOutputTransform.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/TrixOutputTransform.js\");\n/* harmony import */ var _commandExists_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./commandExists.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/commandExists.js\");\n/* harmony import */ var _sortLines_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./sortLines.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/sortLines.js\");\n\n\n\n\n\n\n\n\n\nconst useExternalSort = process.platform !== 'win32' && (0,_commandExists_js__WEBPACK_IMPORTED_MODULE_7__.commandExistsSync)('sort');\nconst MAX_STDERR = 4096;\nfunction isEpipe(error) {\n return error?.code === 'EPIPE';\n}\nasync function makeIxWithExternalSort(fileStream, outIxFilename) {\n const out = node_fs__WEBPACK_IMPORTED_MODULE_1__.createWriteStream(outIxFilename);\n const sort = (0,node_child_process__WEBPACK_IMPORTED_MODULE_0__.spawn)('sort', ['-k1,1'], {\n env: { ...process.env, LC_ALL: 'C' },\n });\n let stderr = '';\n sort.stderr.setEncoding('utf8');\n sort.stderr.on('data', (chunk) => {\n if (stderr.length < MAX_STDERR) {\n stderr += chunk;\n }\n });\n // a sort that dies after reading all input, e.g. out of space in TMPDIR,\n // otherwise looks like success and silently produces a truncated index\n const sortDone = new Promise((resolve, reject) => {\n sort.on('error', reject);\n sort.on('close', (code, signal) => {\n if (code === 0) {\n resolve();\n }\n else {\n const why = signal ?? `exit code ${code}`;\n reject(new Error(`sort failed (${why}): ${stderr.trim()}`));\n }\n });\n });\n const inputDone = (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(fileStream, split2__WEBPACK_IMPORTED_MODULE_4__(), new _TrixInputTransform_js__WEBPACK_IMPORTED_MODULE_5__.TrixInputTransform(), sort.stdin);\n const outputDone = (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(sort.stdout, split2__WEBPACK_IMPORTED_MODULE_4__(), new _TrixOutputTransform_js__WEBPACK_IMPORTED_MODULE_6__.TrixOutputTransform(), out);\n // all three are waited out rather than raced, because the first failure to\n // arrive is often the least informative one. a sort that dies before draining\n // its stdin — a bad TMPDIR, say — trips the input pipeline with EPIPE while\n // sortDone is the one holding its exit status and stderr. EPIPE on the input\n // side never means anything else, so it is the reason of last resort; the\n // rest are listed cause before symptom\n const failures = (await Promise.allSettled([inputDone, outputDone, sortDone]))\n .filter(outcome => outcome.status === 'rejected')\n .map(outcome => outcome.reason);\n if (failures.length > 0) {\n const cause = failures.find(error => !isEpipe(error)) ?? failures[0];\n throw cause instanceof Error ? cause : new Error(String(cause));\n }\n}\nasync function makeIxWithJsSort(fileStream, outIxFilename) {\n const out = node_fs__WEBPACK_IMPORTED_MODULE_1__.createWriteStream(outIxFilename);\n // Transform input using pipeline for proper error handling\n const transformedInput = new node_stream__WEBPACK_IMPORTED_MODULE_2__.PassThrough();\n const inputDone = (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(fileStream, split2__WEBPACK_IMPORTED_MODULE_4__(), new _TrixInputTransform_js__WEBPACK_IMPORTED_MODULE_5__.TrixInputTransform(), transformedInput);\n // Sort lines using external merge sort\n const sortedOutput = split2__WEBPACK_IMPORTED_MODULE_4__();\n const sortDone = (0,_sortLines_js__WEBPACK_IMPORTED_MODULE_8__.sortLinesExternal)(transformedInput, sortedOutput);\n // Transform sorted output and write to file\n const writeDone = (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_3__.pipeline)(sortedOutput, new _TrixOutputTransform_js__WEBPACK_IMPORTED_MODULE_6__.TrixOutputTransform(), out);\n await Promise.all([inputDone, sortDone, writeDone]);\n}\nasync function makeIxStream(fileStream, outIxFilename) {\n await (useExternalSort\n ? makeIxWithExternalSort(fileStream, outIxFilename)\n : makeIxWithJsSort(fileStream, outIxFilename));\n}\nasync function makeIx(inFile, outIndex) {\n return makeIxStream(node_fs__WEBPACK_IMPORTED_MODULE_1__.createReadStream(inFile), outIndex);\n}\n//# sourceMappingURL=makeIx.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIx.js?\n}");
|
|
1414
|
-
|
|
1415
|
-
/***/ },
|
|
1416
|
-
|
|
1417
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIxx.js"
|
|
1418
|
-
/*!*******************************************************************************!*\
|
|
1419
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIxx.js ***!
|
|
1420
|
-
\*******************************************************************************/
|
|
1421
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1422
|
-
|
|
1423
|
-
"use strict";
|
|
1424
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ makeIxx: () => (/* binding */ makeIxx)\n/* harmony export */ });\n/* harmony import */ var node_events__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:events */ \"node:events\");\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_stream_promises__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:stream/promises */ \"node:stream/promises\");\n/* harmony import */ var _ixWords_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ixWords.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/ixWords.js\");\n/* harmony import */ var _optimizePrefixSize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./optimizePrefixSize.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/optimizePrefixSize.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./util.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js\");\n\n\n\n\n\n\nconst ADDRESS_SIZE = 10;\nasync function makeIxx(inIx, outIxx, prefixSizeParam) {\n const prefixSize = prefixSizeParam ?? (await (0,_optimizePrefixSize_js__WEBPACK_IMPORTED_MODULE_4__.optimizePrefixSize)(inIx));\n const out = node_fs__WEBPACK_IMPORTED_MODULE_1__.createWriteStream(outIxx);\n try {\n // where a prefix change is decided by samePrefix rather than by comparing\n // two padded prefixes: it is the same rule optimizePrefixSize scored the\n // file with, so the bins it measured are the bins written here, and it does\n // not allocate a prefix for every line of the ix. getPrefix is left to\n // format the one prefix an entry actually writes. both are undefined until\n // the first word, which is the only way a genuinely empty first field is\n // told apart from \"nothing seen yet\"\n let lastWord;\n let writtenWord;\n let writtenPos = -_util_js__WEBPACK_IMPORTED_MODULE_5__.binSize;\n let startPrefixPos = 0;\n for await (const { word, offset } of (0,_ixWords_js__WEBPACK_IMPORTED_MODULE_3__.ixWords)(inIx)) {\n if (lastWord === undefined || !(0,_util_js__WEBPACK_IMPORTED_MODULE_5__.samePrefix)(word, lastWord, prefixSize)) {\n startPrefixPos = offset;\n }\n if (offset - writtenPos >= _util_js__WEBPACK_IMPORTED_MODULE_5__.binSize &&\n (writtenWord === undefined ||\n !(0,_util_js__WEBPACK_IMPORTED_MODULE_5__.samePrefix)(word, writtenWord, prefixSize))) {\n const address = startPrefixPos\n .toString(16)\n .toUpperCase()\n .padStart(ADDRESS_SIZE, '0');\n // handle backpressure\n // ref https://nodesource.com/blog/understanding-streams-in-nodejs/\n if (!out.write(`${(0,_util_js__WEBPACK_IMPORTED_MODULE_5__.getPrefix)(word, prefixSize)}${address}\\n`)) {\n await (0,node_events__WEBPACK_IMPORTED_MODULE_0__.once)(out, 'drain');\n }\n writtenPos = offset;\n writtenWord = word;\n }\n lastWord = word;\n }\n }\n finally {\n out.end();\n await (0,node_stream_promises__WEBPACK_IMPORTED_MODULE_2__.finished)(out);\n }\n}\n//# sourceMappingURL=makeIxx.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/makeIxx.js?\n}");
|
|
1425
|
-
|
|
1426
|
-
/***/ },
|
|
1427
|
-
|
|
1428
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/optimizePrefixSize.js"
|
|
1429
|
-
/*!******************************************************************************************!*\
|
|
1430
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/optimizePrefixSize.js ***!
|
|
1431
|
-
\******************************************************************************************/
|
|
1432
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1433
|
-
|
|
1434
|
-
"use strict";
|
|
1435
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ optimizePrefixSize: () => (/* binding */ optimizePrefixSize)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var _ixWords_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ixWords.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/ixWords.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js\");\n\n\n\nfunction createStats() {\n return {\n writtenWord: '',\n writtenPos: -_util_js__WEBPACK_IMPORTED_MODULE_2__.binSize,\n startPrefixPos: 0,\n lastBin: 0,\n binSizeTotal: 0,\n binCount: 0,\n maxBinSize: 0,\n };\n}\nfunction meetsHeuristics(s, totalBytes) {\n if (s.binCount === 0) {\n // an ix with no words in it, so nothing for a search to scan\n return true;\n }\n // a search lands in one of binCount bins: the stretch following each ixx\n // entry, the last of which runs to the end of the file rather than to a\n // further entry. leaving that tail out scores a prefix that writes one bin\n // and then never changes again as perfect, and every word sharing the first\n // five characters (ENSG00000139618 and friends) is exactly that case: it wins\n // with a single ixx entry at offset 0, so every search rescans the whole ix\n const tail = totalBytes - s.lastBin;\n // binSizeTotal covers every bin but the tail — the first entry is measured\n // against a zero-length predecessor and contributes nothing — so the two\n // together are the whole file, spread over binCount bins\n const avgBinSize = (s.binSizeTotal + tail) / s.binCount;\n return (avgBinSize <= 3 * _util_js__WEBPACK_IMPORTED_MODULE_2__.binSize && Math.max(s.maxBinSize, tail) <= 10 * _util_js__WEBPACK_IMPORTED_MODULE_2__.binSize);\n}\nconst MIN_PREFIX = 5;\nconst MAX_PREFIX = 40;\nasync function optimizePrefixSize(inIx) {\n // track stats for all prefix sizes in a single pass\n const stats = Array.from({ length: MAX_PREFIX - MIN_PREFIX + 1 }, createStats);\n let lastWord = '';\n for await (const { word, offset } of (0,_ixWords_js__WEBPACK_IMPORTED_MODULE_1__.ixWords)(inIx)) {\n // prefixes are compared via shared-prefix length rather than by building a\n // padded prefix per size, which would allocate 36 strings per line. words\n // never contain spaces, so getPrefix(a, n) === getPrefix(b, n) exactly when\n // a === b or the words agree on their first n characters\n const lastShared = (0,_util_js__WEBPACK_IMPORTED_MODULE_2__.commonPrefixLength)(word, lastWord);\n const sameAsLast = word === lastWord;\n for (const [i, s] of stats.entries()) {\n const prefixSize = MIN_PREFIX + i;\n if (!sameAsLast && prefixSize > lastShared) {\n s.startPrefixPos = offset;\n }\n // the shared-prefix check is behind the cheap byte-distance check because\n // it only becomes relevant once per bin\n if (offset - s.writtenPos >= _util_js__WEBPACK_IMPORTED_MODULE_2__.binSize &&\n (s.binCount === 0 || !(0,_util_js__WEBPACK_IMPORTED_MODULE_2__.samePrefix)(word, s.writtenWord, prefixSize))) {\n const currentBinSize = s.startPrefixPos - s.lastBin;\n s.binSizeTotal += currentBinSize;\n s.maxBinSize = Math.max(currentBinSize, s.maxBinSize);\n s.binCount++;\n s.lastBin = s.startPrefixPos;\n s.writtenPos = offset;\n s.writtenWord = word;\n }\n }\n lastWord = word;\n }\n const { size } = await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.stat(inIx);\n const found = stats.findIndex(s => meetsHeuristics(s, size));\n return found === -1 ? MAX_PREFIX : MIN_PREFIX + found;\n}\n//# sourceMappingURL=optimizePrefixSize.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/optimizePrefixSize.js?\n}");
|
|
1436
|
-
|
|
1437
|
-
/***/ },
|
|
1438
|
-
|
|
1439
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/sortLines.js"
|
|
1440
|
-
/*!*********************************************************************************!*\
|
|
1441
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/sortLines.js ***!
|
|
1442
|
-
\*********************************************************************************/
|
|
1443
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1444
|
-
|
|
1445
|
-
"use strict";
|
|
1446
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ sortLinesExternal: () => (/* binding */ sortLinesExternal)\n/* harmony export */ });\n/* harmony import */ var node_fs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! node:fs */ \"node:fs\");\n/* harmony import */ var node_os__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! node:os */ \"node:os\");\n/* harmony import */ var node_path__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! node:path */ \"node:path\");\n/* harmony import */ var _externalSort_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./externalSort.js */ \"../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/externalSort.js\");\n\n\n\n\nasync function sortLinesExternal(input, output) {\n const dir = await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.mkdtemp(node_path__WEBPACK_IMPORTED_MODULE_2__.join(node_os__WEBPACK_IMPORTED_MODULE_1__.tmpdir(), 'ixixx-sort-'));\n try {\n await (0,_externalSort_js__WEBPACK_IMPORTED_MODULE_3__.externalSort)(input, output, dir);\n }\n finally {\n await node_fs__WEBPACK_IMPORTED_MODULE_0__.promises.rm(dir, { recursive: true, force: true });\n }\n}\n//# sourceMappingURL=sortLines.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/sortLines.js?\n}");
|
|
1447
|
-
|
|
1448
|
-
/***/ },
|
|
1449
|
-
|
|
1450
|
-
/***/ "../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js"
|
|
1451
|
-
/*!****************************************************************************!*\
|
|
1452
|
-
!*** ../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js ***!
|
|
1453
|
-
\****************************************************************************/
|
|
1454
|
-
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1455
|
-
|
|
1456
|
-
"use strict";
|
|
1457
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ binSize: () => (/* binding */ binSize),\n/* harmony export */ chunkSize: () => (/* binding */ chunkSize),\n/* harmony export */ commonPrefixLength: () => (/* binding */ commonPrefixLength),\n/* harmony export */ getPrefix: () => (/* binding */ getPrefix),\n/* harmony export */ samePrefix: () => (/* binding */ samePrefix)\n/* harmony export */ });\nconst binSize = 64 * 1024; //64kb\n// lines are accumulated into chunks of about this size before being handed to\n// the next stream, one push per line is dominated by stream overhead\nconst chunkSize = 64 * 1024;\nfunction getPrefix(word, prefixSize) {\n return word.slice(0, prefixSize).padEnd(prefixSize, ' ');\n}\nfunction commonPrefixLength(a, b) {\n const len = Math.min(a.length, b.length);\n let i = 0;\n // utf-16 code units, since that is what slice() in getPrefix compares\n while (i < len && a.charCodeAt(i) === b.charCodeAt(i)) {\n i++;\n }\n return i;\n}\n// answers getPrefix(a, n) === getPrefix(b, n) without building either prefix.\n// equivalent because words never contain spaces, so getPrefix's padding can\n// only ever line up against more padding. optimizePrefixSize relies on this to\n// avoid allocating a prefix per size per line, which is also what keeps the\n// bins it counts identical to the ones makeIxx goes on to write\nfunction samePrefix(a, b, prefixSize) {\n return a === b || commonPrefixLength(a, b) >= prefixSize;\n}\n//# sourceMappingURL=util.js.map\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/ixixx@3.0.13/node_modules/ixixx/esm/util.js?\n}");
|
|
1458
|
-
|
|
1459
|
-
/***/ },
|
|
1460
|
-
|
|
1461
|
-
/***/ "../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json"
|
|
1462
|
-
/*!****************************************************************************!*\
|
|
1463
|
-
!*** ../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json ***!
|
|
1464
|
-
\****************************************************************************/
|
|
1465
|
-
(module) {
|
|
1466
|
-
|
|
1467
|
-
"use strict";
|
|
1468
|
-
eval("{module.exports = /*#__PURE__*/JSON.parse('{\"application/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"application/3gpdash-qoe-report+xml\":{\"source\":\"iana\"},\"application/3gpp-ims+xml\":{\"source\":\"iana\"},\"application/a2l\":{\"source\":\"iana\"},\"application/activemessage\":{\"source\":\"iana\"},\"application/alto-costmap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-costmapfilter+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-directory+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointcost+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointcostparams+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointprop+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-endpointpropparams+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-error+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-networkmap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/alto-networkmapfilter+json\":{\"source\":\"iana\",\"compressible\":true},\"application/aml\":{\"source\":\"iana\"},\"application/andrew-inset\":{\"source\":\"iana\",\"extensions\":[\"ez\"]},\"application/applefile\":{\"source\":\"iana\"},\"application/applixware\":{\"source\":\"apache\",\"extensions\":[\"aw\"]},\"application/atf\":{\"source\":\"iana\"},\"application/atfx\":{\"source\":\"iana\"},\"application/atom+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"atom\"]},\"application/atomcat+xml\":{\"source\":\"iana\",\"extensions\":[\"atomcat\"]},\"application/atomdeleted+xml\":{\"source\":\"iana\"},\"application/atomicmail\":{\"source\":\"iana\"},\"application/atomsvc+xml\":{\"source\":\"iana\",\"extensions\":[\"atomsvc\"]},\"application/atxml\":{\"source\":\"iana\"},\"application/auth-policy+xml\":{\"source\":\"iana\"},\"application/bacnet-xdd+zip\":{\"source\":\"iana\"},\"application/batch-smtp\":{\"source\":\"iana\"},\"application/bdoc\":{\"compressible\":false,\"extensions\":[\"bdoc\"]},\"application/beep+xml\":{\"source\":\"iana\"},\"application/calendar+json\":{\"source\":\"iana\",\"compressible\":true},\"application/calendar+xml\":{\"source\":\"iana\"},\"application/call-completion\":{\"source\":\"iana\"},\"application/cals-1840\":{\"source\":\"iana\"},\"application/cbor\":{\"source\":\"iana\"},\"application/cccex\":{\"source\":\"iana\"},\"application/ccmp+xml\":{\"source\":\"iana\"},\"application/ccxml+xml\":{\"source\":\"iana\",\"extensions\":[\"ccxml\"]},\"application/cdfx+xml\":{\"source\":\"iana\"},\"application/cdmi-capability\":{\"source\":\"iana\",\"extensions\":[\"cdmia\"]},\"application/cdmi-container\":{\"source\":\"iana\",\"extensions\":[\"cdmic\"]},\"application/cdmi-domain\":{\"source\":\"iana\",\"extensions\":[\"cdmid\"]},\"application/cdmi-object\":{\"source\":\"iana\",\"extensions\":[\"cdmio\"]},\"application/cdmi-queue\":{\"source\":\"iana\",\"extensions\":[\"cdmiq\"]},\"application/cdni\":{\"source\":\"iana\"},\"application/cea\":{\"source\":\"iana\"},\"application/cea-2018+xml\":{\"source\":\"iana\"},\"application/cellml+xml\":{\"source\":\"iana\"},\"application/cfw\":{\"source\":\"iana\"},\"application/clue_info+xml\":{\"source\":\"iana\"},\"application/cms\":{\"source\":\"iana\"},\"application/cnrp+xml\":{\"source\":\"iana\"},\"application/coap-group+json\":{\"source\":\"iana\",\"compressible\":true},\"application/coap-payload\":{\"source\":\"iana\"},\"application/commonground\":{\"source\":\"iana\"},\"application/conference-info+xml\":{\"source\":\"iana\"},\"application/cose\":{\"source\":\"iana\"},\"application/cose-key\":{\"source\":\"iana\"},\"application/cose-key-set\":{\"source\":\"iana\"},\"application/cpl+xml\":{\"source\":\"iana\"},\"application/csrattrs\":{\"source\":\"iana\"},\"application/csta+xml\":{\"source\":\"iana\"},\"application/cstadata+xml\":{\"source\":\"iana\"},\"application/csvm+json\":{\"source\":\"iana\",\"compressible\":true},\"application/cu-seeme\":{\"source\":\"apache\",\"extensions\":[\"cu\"]},\"application/cybercash\":{\"source\":\"iana\"},\"application/dart\":{\"compressible\":true},\"application/dash+xml\":{\"source\":\"iana\",\"extensions\":[\"mpd\"]},\"application/dashdelta\":{\"source\":\"iana\"},\"application/davmount+xml\":{\"source\":\"iana\",\"extensions\":[\"davmount\"]},\"application/dca-rft\":{\"source\":\"iana\"},\"application/dcd\":{\"source\":\"iana\"},\"application/dec-dx\":{\"source\":\"iana\"},\"application/dialog-info+xml\":{\"source\":\"iana\"},\"application/dicom\":{\"source\":\"iana\"},\"application/dicom+json\":{\"source\":\"iana\",\"compressible\":true},\"application/dicom+xml\":{\"source\":\"iana\"},\"application/dii\":{\"source\":\"iana\"},\"application/dit\":{\"source\":\"iana\"},\"application/dns\":{\"source\":\"iana\"},\"application/docbook+xml\":{\"source\":\"apache\",\"extensions\":[\"dbk\"]},\"application/dskpp+xml\":{\"source\":\"iana\"},\"application/dssc+der\":{\"source\":\"iana\",\"extensions\":[\"dssc\"]},\"application/dssc+xml\":{\"source\":\"iana\",\"extensions\":[\"xdssc\"]},\"application/dvcs\":{\"source\":\"iana\"},\"application/ecmascript\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"ecma\"]},\"application/edi-consent\":{\"source\":\"iana\"},\"application/edi-x12\":{\"source\":\"iana\",\"compressible\":false},\"application/edifact\":{\"source\":\"iana\",\"compressible\":false},\"application/efi\":{\"source\":\"iana\"},\"application/emergencycalldata.comment+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.control+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.deviceinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.ecall.msd\":{\"source\":\"iana\"},\"application/emergencycalldata.providerinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.serviceinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.subscriberinfo+xml\":{\"source\":\"iana\"},\"application/emergencycalldata.veds+xml\":{\"source\":\"iana\"},\"application/emma+xml\":{\"source\":\"iana\",\"extensions\":[\"emma\"]},\"application/emotionml+xml\":{\"source\":\"iana\"},\"application/encaprtp\":{\"source\":\"iana\"},\"application/epp+xml\":{\"source\":\"iana\"},\"application/epub+zip\":{\"source\":\"iana\",\"extensions\":[\"epub\"]},\"application/eshop\":{\"source\":\"iana\"},\"application/exi\":{\"source\":\"iana\",\"extensions\":[\"exi\"]},\"application/fastinfoset\":{\"source\":\"iana\"},\"application/fastsoap\":{\"source\":\"iana\"},\"application/fdt+xml\":{\"source\":\"iana\"},\"application/fhir+xml\":{\"source\":\"iana\"},\"application/fido.trusted-apps+json\":{\"compressible\":true},\"application/fits\":{\"source\":\"iana\"},\"application/font-sfnt\":{\"source\":\"iana\"},\"application/font-tdpfr\":{\"source\":\"iana\",\"extensions\":[\"pfr\"]},\"application/font-woff\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"woff\"]},\"application/framework-attributes+xml\":{\"source\":\"iana\"},\"application/geo+json\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"geojson\"]},\"application/geo+json-seq\":{\"source\":\"iana\"},\"application/geoxacml+xml\":{\"source\":\"iana\"},\"application/gml+xml\":{\"source\":\"iana\",\"extensions\":[\"gml\"]},\"application/gpx+xml\":{\"source\":\"apache\",\"extensions\":[\"gpx\"]},\"application/gxf\":{\"source\":\"apache\",\"extensions\":[\"gxf\"]},\"application/gzip\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"gz\"]},\"application/h224\":{\"source\":\"iana\"},\"application/held+xml\":{\"source\":\"iana\"},\"application/hjson\":{\"extensions\":[\"hjson\"]},\"application/http\":{\"source\":\"iana\"},\"application/hyperstudio\":{\"source\":\"iana\",\"extensions\":[\"stk\"]},\"application/ibe-key-request+xml\":{\"source\":\"iana\"},\"application/ibe-pkg-reply+xml\":{\"source\":\"iana\"},\"application/ibe-pp-data\":{\"source\":\"iana\"},\"application/iges\":{\"source\":\"iana\"},\"application/im-iscomposing+xml\":{\"source\":\"iana\"},\"application/index\":{\"source\":\"iana\"},\"application/index.cmd\":{\"source\":\"iana\"},\"application/index.obj\":{\"source\":\"iana\"},\"application/index.response\":{\"source\":\"iana\"},\"application/index.vnd\":{\"source\":\"iana\"},\"application/inkml+xml\":{\"source\":\"iana\",\"extensions\":[\"ink\",\"inkml\"]},\"application/iotp\":{\"source\":\"iana\"},\"application/ipfix\":{\"source\":\"iana\",\"extensions\":[\"ipfix\"]},\"application/ipp\":{\"source\":\"iana\"},\"application/isup\":{\"source\":\"iana\"},\"application/its+xml\":{\"source\":\"iana\"},\"application/java-archive\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"jar\",\"war\",\"ear\"]},\"application/java-serialized-object\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"ser\"]},\"application/java-vm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"class\"]},\"application/javascript\":{\"source\":\"iana\",\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"js\",\"mjs\"]},\"application/jf2feed+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jose\":{\"source\":\"iana\"},\"application/jose+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jrd+json\":{\"source\":\"iana\",\"compressible\":true},\"application/json\":{\"source\":\"iana\",\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"json\",\"map\"]},\"application/json-patch+json\":{\"source\":\"iana\",\"compressible\":true},\"application/json-seq\":{\"source\":\"iana\"},\"application/json5\":{\"extensions\":[\"json5\"]},\"application/jsonml+json\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"jsonml\"]},\"application/jwk+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jwk-set+json\":{\"source\":\"iana\",\"compressible\":true},\"application/jwt\":{\"source\":\"iana\"},\"application/kpml-request+xml\":{\"source\":\"iana\"},\"application/kpml-response+xml\":{\"source\":\"iana\"},\"application/ld+json\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"jsonld\"]},\"application/lgr+xml\":{\"source\":\"iana\"},\"application/link-format\":{\"source\":\"iana\"},\"application/load-control+xml\":{\"source\":\"iana\"},\"application/lost+xml\":{\"source\":\"iana\",\"extensions\":[\"lostxml\"]},\"application/lostsync+xml\":{\"source\":\"iana\"},\"application/lxf\":{\"source\":\"iana\"},\"application/mac-binhex40\":{\"source\":\"iana\",\"extensions\":[\"hqx\"]},\"application/mac-compactpro\":{\"source\":\"apache\",\"extensions\":[\"cpt\"]},\"application/macwriteii\":{\"source\":\"iana\"},\"application/mads+xml\":{\"source\":\"iana\",\"extensions\":[\"mads\"]},\"application/manifest+json\":{\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"webmanifest\"]},\"application/marc\":{\"source\":\"iana\",\"extensions\":[\"mrc\"]},\"application/marcxml+xml\":{\"source\":\"iana\",\"extensions\":[\"mrcx\"]},\"application/mathematica\":{\"source\":\"iana\",\"extensions\":[\"ma\",\"nb\",\"mb\"]},\"application/mathml+xml\":{\"source\":\"iana\",\"extensions\":[\"mathml\"]},\"application/mathml-content+xml\":{\"source\":\"iana\"},\"application/mathml-presentation+xml\":{\"source\":\"iana\"},\"application/mbms-associated-procedure-description+xml\":{\"source\":\"iana\"},\"application/mbms-deregister+xml\":{\"source\":\"iana\"},\"application/mbms-envelope+xml\":{\"source\":\"iana\"},\"application/mbms-msk+xml\":{\"source\":\"iana\"},\"application/mbms-msk-response+xml\":{\"source\":\"iana\"},\"application/mbms-protection-description+xml\":{\"source\":\"iana\"},\"application/mbms-reception-report+xml\":{\"source\":\"iana\"},\"application/mbms-register+xml\":{\"source\":\"iana\"},\"application/mbms-register-response+xml\":{\"source\":\"iana\"},\"application/mbms-schedule+xml\":{\"source\":\"iana\"},\"application/mbms-user-service-description+xml\":{\"source\":\"iana\"},\"application/mbox\":{\"source\":\"iana\",\"extensions\":[\"mbox\"]},\"application/media-policy-dataset+xml\":{\"source\":\"iana\"},\"application/media_control+xml\":{\"source\":\"iana\"},\"application/mediaservercontrol+xml\":{\"source\":\"iana\",\"extensions\":[\"mscml\"]},\"application/merge-patch+json\":{\"source\":\"iana\",\"compressible\":true},\"application/metalink+xml\":{\"source\":\"apache\",\"extensions\":[\"metalink\"]},\"application/metalink4+xml\":{\"source\":\"iana\",\"extensions\":[\"meta4\"]},\"application/mets+xml\":{\"source\":\"iana\",\"extensions\":[\"mets\"]},\"application/mf4\":{\"source\":\"iana\"},\"application/mikey\":{\"source\":\"iana\"},\"application/mmt-usd+xml\":{\"source\":\"iana\"},\"application/mods+xml\":{\"source\":\"iana\",\"extensions\":[\"mods\"]},\"application/moss-keys\":{\"source\":\"iana\"},\"application/moss-signature\":{\"source\":\"iana\"},\"application/mosskey-data\":{\"source\":\"iana\"},\"application/mosskey-request\":{\"source\":\"iana\"},\"application/mp21\":{\"source\":\"iana\",\"extensions\":[\"m21\",\"mp21\"]},\"application/mp4\":{\"source\":\"iana\",\"extensions\":[\"mp4s\",\"m4p\"]},\"application/mpeg4-generic\":{\"source\":\"iana\"},\"application/mpeg4-iod\":{\"source\":\"iana\"},\"application/mpeg4-iod-xmt\":{\"source\":\"iana\"},\"application/mrb-consumer+xml\":{\"source\":\"iana\"},\"application/mrb-publish+xml\":{\"source\":\"iana\"},\"application/msc-ivr+xml\":{\"source\":\"iana\"},\"application/msc-mixer+xml\":{\"source\":\"iana\"},\"application/msword\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"doc\",\"dot\"]},\"application/mud+json\":{\"source\":\"iana\",\"compressible\":true},\"application/mxf\":{\"source\":\"iana\",\"extensions\":[\"mxf\"]},\"application/n-quads\":{\"source\":\"iana\"},\"application/n-triples\":{\"source\":\"iana\"},\"application/nasdata\":{\"source\":\"iana\"},\"application/news-checkgroups\":{\"source\":\"iana\"},\"application/news-groupinfo\":{\"source\":\"iana\"},\"application/news-transmission\":{\"source\":\"iana\"},\"application/nlsml+xml\":{\"source\":\"iana\"},\"application/node\":{\"source\":\"iana\"},\"application/nss\":{\"source\":\"iana\"},\"application/ocsp-request\":{\"source\":\"iana\"},\"application/ocsp-response\":{\"source\":\"iana\"},\"application/octet-stream\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]},\"application/oda\":{\"source\":\"iana\",\"extensions\":[\"oda\"]},\"application/odx\":{\"source\":\"iana\"},\"application/oebps-package+xml\":{\"source\":\"iana\",\"extensions\":[\"opf\"]},\"application/ogg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ogx\"]},\"application/omdoc+xml\":{\"source\":\"apache\",\"extensions\":[\"omdoc\"]},\"application/onenote\":{\"source\":\"apache\",\"extensions\":[\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]},\"application/oxps\":{\"source\":\"iana\",\"extensions\":[\"oxps\"]},\"application/p2p-overlay+xml\":{\"source\":\"iana\"},\"application/parityfec\":{\"source\":\"iana\"},\"application/passport\":{\"source\":\"iana\"},\"application/patch-ops-error+xml\":{\"source\":\"iana\",\"extensions\":[\"xer\"]},\"application/pdf\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pdf\"]},\"application/pdx\":{\"source\":\"iana\"},\"application/pgp-encrypted\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pgp\"]},\"application/pgp-keys\":{\"source\":\"iana\"},\"application/pgp-signature\":{\"source\":\"iana\",\"extensions\":[\"asc\",\"sig\"]},\"application/pics-rules\":{\"source\":\"apache\",\"extensions\":[\"prf\"]},\"application/pidf+xml\":{\"source\":\"iana\"},\"application/pidf-diff+xml\":{\"source\":\"iana\"},\"application/pkcs10\":{\"source\":\"iana\",\"extensions\":[\"p10\"]},\"application/pkcs12\":{\"source\":\"iana\"},\"application/pkcs7-mime\":{\"source\":\"iana\",\"extensions\":[\"p7m\",\"p7c\"]},\"application/pkcs7-signature\":{\"source\":\"iana\",\"extensions\":[\"p7s\"]},\"application/pkcs8\":{\"source\":\"iana\",\"extensions\":[\"p8\"]},\"application/pkcs8-encrypted\":{\"source\":\"iana\"},\"application/pkix-attr-cert\":{\"source\":\"iana\",\"extensions\":[\"ac\"]},\"application/pkix-cert\":{\"source\":\"iana\",\"extensions\":[\"cer\"]},\"application/pkix-crl\":{\"source\":\"iana\",\"extensions\":[\"crl\"]},\"application/pkix-pkipath\":{\"source\":\"iana\",\"extensions\":[\"pkipath\"]},\"application/pkixcmp\":{\"source\":\"iana\",\"extensions\":[\"pki\"]},\"application/pls+xml\":{\"source\":\"iana\",\"extensions\":[\"pls\"]},\"application/poc-settings+xml\":{\"source\":\"iana\"},\"application/postscript\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"ai\",\"eps\",\"ps\"]},\"application/ppsp-tracker+json\":{\"source\":\"iana\",\"compressible\":true},\"application/problem+json\":{\"source\":\"iana\",\"compressible\":true},\"application/problem+xml\":{\"source\":\"iana\"},\"application/provenance+xml\":{\"source\":\"iana\"},\"application/prs.alvestrand.titrax-sheet\":{\"source\":\"iana\"},\"application/prs.cww\":{\"source\":\"iana\",\"extensions\":[\"cww\"]},\"application/prs.hpub+zip\":{\"source\":\"iana\"},\"application/prs.nprend\":{\"source\":\"iana\"},\"application/prs.plucker\":{\"source\":\"iana\"},\"application/prs.rdf-xml-crypt\":{\"source\":\"iana\"},\"application/prs.xsf+xml\":{\"source\":\"iana\"},\"application/pskc+xml\":{\"source\":\"iana\",\"extensions\":[\"pskcxml\"]},\"application/qsig\":{\"source\":\"iana\"},\"application/raml+yaml\":{\"compressible\":true,\"extensions\":[\"raml\"]},\"application/raptorfec\":{\"source\":\"iana\"},\"application/rdap+json\":{\"source\":\"iana\",\"compressible\":true},\"application/rdf+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rdf\"]},\"application/reginfo+xml\":{\"source\":\"iana\",\"extensions\":[\"rif\"]},\"application/relax-ng-compact-syntax\":{\"source\":\"iana\",\"extensions\":[\"rnc\"]},\"application/remote-printing\":{\"source\":\"iana\"},\"application/reputon+json\":{\"source\":\"iana\",\"compressible\":true},\"application/resource-lists+xml\":{\"source\":\"iana\",\"extensions\":[\"rl\"]},\"application/resource-lists-diff+xml\":{\"source\":\"iana\",\"extensions\":[\"rld\"]},\"application/rfc+xml\":{\"source\":\"iana\"},\"application/riscos\":{\"source\":\"iana\"},\"application/rlmi+xml\":{\"source\":\"iana\"},\"application/rls-services+xml\":{\"source\":\"iana\",\"extensions\":[\"rs\"]},\"application/route-apd+xml\":{\"source\":\"iana\"},\"application/route-s-tsid+xml\":{\"source\":\"iana\"},\"application/route-usd+xml\":{\"source\":\"iana\"},\"application/rpki-ghostbusters\":{\"source\":\"iana\",\"extensions\":[\"gbr\"]},\"application/rpki-manifest\":{\"source\":\"iana\",\"extensions\":[\"mft\"]},\"application/rpki-publication\":{\"source\":\"iana\"},\"application/rpki-roa\":{\"source\":\"iana\",\"extensions\":[\"roa\"]},\"application/rpki-updown\":{\"source\":\"iana\"},\"application/rsd+xml\":{\"source\":\"apache\",\"extensions\":[\"rsd\"]},\"application/rss+xml\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"rss\"]},\"application/rtf\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtf\"]},\"application/rtploopback\":{\"source\":\"iana\"},\"application/rtx\":{\"source\":\"iana\"},\"application/samlassertion+xml\":{\"source\":\"iana\"},\"application/samlmetadata+xml\":{\"source\":\"iana\"},\"application/sbml+xml\":{\"source\":\"iana\",\"extensions\":[\"sbml\"]},\"application/scaip+xml\":{\"source\":\"iana\"},\"application/scim+json\":{\"source\":\"iana\",\"compressible\":true},\"application/scvp-cv-request\":{\"source\":\"iana\",\"extensions\":[\"scq\"]},\"application/scvp-cv-response\":{\"source\":\"iana\",\"extensions\":[\"scs\"]},\"application/scvp-vp-request\":{\"source\":\"iana\",\"extensions\":[\"spq\"]},\"application/scvp-vp-response\":{\"source\":\"iana\",\"extensions\":[\"spp\"]},\"application/sdp\":{\"source\":\"iana\",\"extensions\":[\"sdp\"]},\"application/sep+xml\":{\"source\":\"iana\"},\"application/sep-exi\":{\"source\":\"iana\"},\"application/session-info\":{\"source\":\"iana\"},\"application/set-payment\":{\"source\":\"iana\"},\"application/set-payment-initiation\":{\"source\":\"iana\",\"extensions\":[\"setpay\"]},\"application/set-registration\":{\"source\":\"iana\"},\"application/set-registration-initiation\":{\"source\":\"iana\",\"extensions\":[\"setreg\"]},\"application/sgml\":{\"source\":\"iana\"},\"application/sgml-open-catalog\":{\"source\":\"iana\"},\"application/shf+xml\":{\"source\":\"iana\",\"extensions\":[\"shf\"]},\"application/sieve\":{\"source\":\"iana\"},\"application/simple-filter+xml\":{\"source\":\"iana\"},\"application/simple-message-summary\":{\"source\":\"iana\"},\"application/simplesymbolcontainer\":{\"source\":\"iana\"},\"application/slate\":{\"source\":\"iana\"},\"application/smil\":{\"source\":\"iana\"},\"application/smil+xml\":{\"source\":\"iana\",\"extensions\":[\"smi\",\"smil\"]},\"application/smpte336m\":{\"source\":\"iana\"},\"application/soap+fastinfoset\":{\"source\":\"iana\"},\"application/soap+xml\":{\"source\":\"iana\",\"compressible\":true},\"application/sparql-query\":{\"source\":\"iana\",\"extensions\":[\"rq\"]},\"application/sparql-results+xml\":{\"source\":\"iana\",\"extensions\":[\"srx\"]},\"application/spirits-event+xml\":{\"source\":\"iana\"},\"application/sql\":{\"source\":\"iana\"},\"application/srgs\":{\"source\":\"iana\",\"extensions\":[\"gram\"]},\"application/srgs+xml\":{\"source\":\"iana\",\"extensions\":[\"grxml\"]},\"application/sru+xml\":{\"source\":\"iana\",\"extensions\":[\"sru\"]},\"application/ssdl+xml\":{\"source\":\"apache\",\"extensions\":[\"ssdl\"]},\"application/ssml+xml\":{\"source\":\"iana\",\"extensions\":[\"ssml\"]},\"application/tamp-apex-update\":{\"source\":\"iana\"},\"application/tamp-apex-update-confirm\":{\"source\":\"iana\"},\"application/tamp-community-update\":{\"source\":\"iana\"},\"application/tamp-community-update-confirm\":{\"source\":\"iana\"},\"application/tamp-error\":{\"source\":\"iana\"},\"application/tamp-sequence-adjust\":{\"source\":\"iana\"},\"application/tamp-sequence-adjust-confirm\":{\"source\":\"iana\"},\"application/tamp-status-query\":{\"source\":\"iana\"},\"application/tamp-status-response\":{\"source\":\"iana\"},\"application/tamp-update\":{\"source\":\"iana\"},\"application/tamp-update-confirm\":{\"source\":\"iana\"},\"application/tar\":{\"compressible\":true},\"application/tei+xml\":{\"source\":\"iana\",\"extensions\":[\"tei\",\"teicorpus\"]},\"application/thraud+xml\":{\"source\":\"iana\",\"extensions\":[\"tfi\"]},\"application/timestamp-query\":{\"source\":\"iana\"},\"application/timestamp-reply\":{\"source\":\"iana\"},\"application/timestamped-data\":{\"source\":\"iana\",\"extensions\":[\"tsd\"]},\"application/tnauthlist\":{\"source\":\"iana\"},\"application/trig\":{\"source\":\"iana\"},\"application/ttml+xml\":{\"source\":\"iana\"},\"application/tve-trigger\":{\"source\":\"iana\"},\"application/ulpfec\":{\"source\":\"iana\"},\"application/urc-grpsheet+xml\":{\"source\":\"iana\"},\"application/urc-ressheet+xml\":{\"source\":\"iana\"},\"application/urc-targetdesc+xml\":{\"source\":\"iana\"},\"application/urc-uisocketdesc+xml\":{\"source\":\"iana\"},\"application/vcard+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vcard+xml\":{\"source\":\"iana\"},\"application/vemmi\":{\"source\":\"iana\"},\"application/vividence.scriptfile\":{\"source\":\"apache\"},\"application/vnd.1000minds.decision-model+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp-prose+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp-prose-pc3ch+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp-v2x-local-service-information\":{\"source\":\"iana\"},\"application/vnd.3gpp.access-transfer-events+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.bsf+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.gmop+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-affiliation-command+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-floor-request+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-location-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-mbms-usage-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mcptt-signed+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.mid-call+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.pic-bw-large\":{\"source\":\"iana\",\"extensions\":[\"plb\"]},\"application/vnd.3gpp.pic-bw-small\":{\"source\":\"iana\",\"extensions\":[\"psb\"]},\"application/vnd.3gpp.pic-bw-var\":{\"source\":\"iana\",\"extensions\":[\"pvb\"]},\"application/vnd.3gpp.sms\":{\"source\":\"iana\"},\"application/vnd.3gpp.sms+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.srvcc-ext+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.srvcc-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.state-and-event-info+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp.ussd+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp2.bcmcsinfo+xml\":{\"source\":\"iana\"},\"application/vnd.3gpp2.sms\":{\"source\":\"iana\"},\"application/vnd.3gpp2.tcap\":{\"source\":\"iana\",\"extensions\":[\"tcap\"]},\"application/vnd.3lightssoftware.imagescal\":{\"source\":\"iana\"},\"application/vnd.3m.post-it-notes\":{\"source\":\"iana\",\"extensions\":[\"pwn\"]},\"application/vnd.accpac.simply.aso\":{\"source\":\"iana\",\"extensions\":[\"aso\"]},\"application/vnd.accpac.simply.imp\":{\"source\":\"iana\",\"extensions\":[\"imp\"]},\"application/vnd.acucobol\":{\"source\":\"iana\",\"extensions\":[\"acu\"]},\"application/vnd.acucorp\":{\"source\":\"iana\",\"extensions\":[\"atc\",\"acutc\"]},\"application/vnd.adobe.air-application-installer-package+zip\":{\"source\":\"apache\",\"extensions\":[\"air\"]},\"application/vnd.adobe.flash.movie\":{\"source\":\"iana\"},\"application/vnd.adobe.formscentral.fcdt\":{\"source\":\"iana\",\"extensions\":[\"fcdt\"]},\"application/vnd.adobe.fxp\":{\"source\":\"iana\",\"extensions\":[\"fxp\",\"fxpl\"]},\"application/vnd.adobe.partial-upload\":{\"source\":\"iana\"},\"application/vnd.adobe.xdp+xml\":{\"source\":\"iana\",\"extensions\":[\"xdp\"]},\"application/vnd.adobe.xfdf\":{\"source\":\"iana\",\"extensions\":[\"xfdf\"]},\"application/vnd.aether.imp\":{\"source\":\"iana\"},\"application/vnd.ah-barcode\":{\"source\":\"iana\"},\"application/vnd.ahead.space\":{\"source\":\"iana\",\"extensions\":[\"ahead\"]},\"application/vnd.airzip.filesecure.azf\":{\"source\":\"iana\",\"extensions\":[\"azf\"]},\"application/vnd.airzip.filesecure.azs\":{\"source\":\"iana\",\"extensions\":[\"azs\"]},\"application/vnd.amadeus+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.amazon.ebook\":{\"source\":\"apache\",\"extensions\":[\"azw\"]},\"application/vnd.amazon.mobi8-ebook\":{\"source\":\"iana\"},\"application/vnd.americandynamics.acc\":{\"source\":\"iana\",\"extensions\":[\"acc\"]},\"application/vnd.amiga.ami\":{\"source\":\"iana\",\"extensions\":[\"ami\"]},\"application/vnd.amundsen.maze+xml\":{\"source\":\"iana\"},\"application/vnd.android.package-archive\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"apk\"]},\"application/vnd.anki\":{\"source\":\"iana\"},\"application/vnd.anser-web-certificate-issue-initiation\":{\"source\":\"iana\",\"extensions\":[\"cii\"]},\"application/vnd.anser-web-funds-transfer-initiation\":{\"source\":\"apache\",\"extensions\":[\"fti\"]},\"application/vnd.antix.game-component\":{\"source\":\"iana\",\"extensions\":[\"atx\"]},\"application/vnd.apache.thrift.binary\":{\"source\":\"iana\"},\"application/vnd.apache.thrift.compact\":{\"source\":\"iana\"},\"application/vnd.apache.thrift.json\":{\"source\":\"iana\"},\"application/vnd.api+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.apothekende.reservation+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.apple.installer+xml\":{\"source\":\"iana\",\"extensions\":[\"mpkg\"]},\"application/vnd.apple.mpegurl\":{\"source\":\"iana\",\"extensions\":[\"m3u8\"]},\"application/vnd.apple.pkpass\":{\"compressible\":false,\"extensions\":[\"pkpass\"]},\"application/vnd.arastra.swi\":{\"source\":\"iana\"},\"application/vnd.aristanetworks.swi\":{\"source\":\"iana\",\"extensions\":[\"swi\"]},\"application/vnd.artsquare\":{\"source\":\"iana\"},\"application/vnd.astraea-software.iota\":{\"source\":\"iana\",\"extensions\":[\"iota\"]},\"application/vnd.audiograph\":{\"source\":\"iana\",\"extensions\":[\"aep\"]},\"application/vnd.autopackage\":{\"source\":\"iana\"},\"application/vnd.avalon+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.avistar+xml\":{\"source\":\"iana\"},\"application/vnd.balsamiq.bmml+xml\":{\"source\":\"iana\"},\"application/vnd.balsamiq.bmpr\":{\"source\":\"iana\"},\"application/vnd.bbf.usp.msg\":{\"source\":\"iana\"},\"application/vnd.bbf.usp.msg+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.bekitzur-stech+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.bint.med-content\":{\"source\":\"iana\"},\"application/vnd.biopax.rdf+xml\":{\"source\":\"iana\"},\"application/vnd.blink-idb-value-wrapper\":{\"source\":\"iana\"},\"application/vnd.blueice.multipass\":{\"source\":\"iana\",\"extensions\":[\"mpm\"]},\"application/vnd.bluetooth.ep.oob\":{\"source\":\"iana\"},\"application/vnd.bluetooth.le.oob\":{\"source\":\"iana\"},\"application/vnd.bmi\":{\"source\":\"iana\",\"extensions\":[\"bmi\"]},\"application/vnd.businessobjects\":{\"source\":\"iana\",\"extensions\":[\"rep\"]},\"application/vnd.cab-jscript\":{\"source\":\"iana\"},\"application/vnd.canon-cpdl\":{\"source\":\"iana\"},\"application/vnd.canon-lips\":{\"source\":\"iana\"},\"application/vnd.capasystems-pg+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.cendio.thinlinc.clientconf\":{\"source\":\"iana\"},\"application/vnd.century-systems.tcp_stream\":{\"source\":\"iana\"},\"application/vnd.chemdraw+xml\":{\"source\":\"iana\",\"extensions\":[\"cdxml\"]},\"application/vnd.chess-pgn\":{\"source\":\"iana\"},\"application/vnd.chipnuts.karaoke-mmd\":{\"source\":\"iana\",\"extensions\":[\"mmd\"]},\"application/vnd.cinderella\":{\"source\":\"iana\",\"extensions\":[\"cdy\"]},\"application/vnd.cirpack.isdn-ext\":{\"source\":\"iana\"},\"application/vnd.citationstyles.style+xml\":{\"source\":\"iana\"},\"application/vnd.claymore\":{\"source\":\"iana\",\"extensions\":[\"cla\"]},\"application/vnd.cloanto.rp9\":{\"source\":\"iana\",\"extensions\":[\"rp9\"]},\"application/vnd.clonk.c4group\":{\"source\":\"iana\",\"extensions\":[\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]},\"application/vnd.cluetrust.cartomobile-config\":{\"source\":\"iana\",\"extensions\":[\"c11amc\"]},\"application/vnd.cluetrust.cartomobile-config-pkg\":{\"source\":\"iana\",\"extensions\":[\"c11amz\"]},\"application/vnd.coffeescript\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.document\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.document-template\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.presentation\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.presentation-template\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.spreadsheet\":{\"source\":\"iana\"},\"application/vnd.collabio.xodocuments.spreadsheet-template\":{\"source\":\"iana\"},\"application/vnd.collection+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.collection.doc+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.collection.next+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.comicbook+zip\":{\"source\":\"iana\"},\"application/vnd.comicbook-rar\":{\"source\":\"iana\"},\"application/vnd.commerce-battelle\":{\"source\":\"iana\"},\"application/vnd.commonspace\":{\"source\":\"iana\",\"extensions\":[\"csp\"]},\"application/vnd.contact.cmsg\":{\"source\":\"iana\",\"extensions\":[\"cdbcmsg\"]},\"application/vnd.coreos.ignition+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.cosmocaller\":{\"source\":\"iana\",\"extensions\":[\"cmc\"]},\"application/vnd.crick.clicker\":{\"source\":\"iana\",\"extensions\":[\"clkx\"]},\"application/vnd.crick.clicker.keyboard\":{\"source\":\"iana\",\"extensions\":[\"clkk\"]},\"application/vnd.crick.clicker.palette\":{\"source\":\"iana\",\"extensions\":[\"clkp\"]},\"application/vnd.crick.clicker.template\":{\"source\":\"iana\",\"extensions\":[\"clkt\"]},\"application/vnd.crick.clicker.wordbank\":{\"source\":\"iana\",\"extensions\":[\"clkw\"]},\"application/vnd.criticaltools.wbs+xml\":{\"source\":\"iana\",\"extensions\":[\"wbs\"]},\"application/vnd.ctc-posml\":{\"source\":\"iana\",\"extensions\":[\"pml\"]},\"application/vnd.ctct.ws+xml\":{\"source\":\"iana\"},\"application/vnd.cups-pdf\":{\"source\":\"iana\"},\"application/vnd.cups-postscript\":{\"source\":\"iana\"},\"application/vnd.cups-ppd\":{\"source\":\"iana\",\"extensions\":[\"ppd\"]},\"application/vnd.cups-raster\":{\"source\":\"iana\"},\"application/vnd.cups-raw\":{\"source\":\"iana\"},\"application/vnd.curl\":{\"source\":\"iana\"},\"application/vnd.curl.car\":{\"source\":\"apache\",\"extensions\":[\"car\"]},\"application/vnd.curl.pcurl\":{\"source\":\"apache\",\"extensions\":[\"pcurl\"]},\"application/vnd.cyan.dean.root+xml\":{\"source\":\"iana\"},\"application/vnd.cybank\":{\"source\":\"iana\"},\"application/vnd.d2l.coursepackage1p0+zip\":{\"source\":\"iana\"},\"application/vnd.dart\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"dart\"]},\"application/vnd.data-vision.rdz\":{\"source\":\"iana\",\"extensions\":[\"rdz\"]},\"application/vnd.datapackage+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.dataresource+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.debian.binary-package\":{\"source\":\"iana\"},\"application/vnd.dece.data\":{\"source\":\"iana\",\"extensions\":[\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]},\"application/vnd.dece.ttml+xml\":{\"source\":\"iana\",\"extensions\":[\"uvt\",\"uvvt\"]},\"application/vnd.dece.unspecified\":{\"source\":\"iana\",\"extensions\":[\"uvx\",\"uvvx\"]},\"application/vnd.dece.zip\":{\"source\":\"iana\",\"extensions\":[\"uvz\",\"uvvz\"]},\"application/vnd.denovo.fcselayout-link\":{\"source\":\"iana\",\"extensions\":[\"fe_launch\"]},\"application/vnd.desmume-movie\":{\"source\":\"iana\"},\"application/vnd.desmume.movie\":{\"source\":\"apache\"},\"application/vnd.dir-bi.plate-dl-nosuffix\":{\"source\":\"iana\"},\"application/vnd.dm.delegation+xml\":{\"source\":\"iana\"},\"application/vnd.dna\":{\"source\":\"iana\",\"extensions\":[\"dna\"]},\"application/vnd.document+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.dolby.mlp\":{\"source\":\"apache\",\"extensions\":[\"mlp\"]},\"application/vnd.dolby.mobile.1\":{\"source\":\"iana\"},\"application/vnd.dolby.mobile.2\":{\"source\":\"iana\"},\"application/vnd.doremir.scorecloud-binary-document\":{\"source\":\"iana\"},\"application/vnd.dpgraph\":{\"source\":\"iana\",\"extensions\":[\"dpg\"]},\"application/vnd.dreamfactory\":{\"source\":\"iana\",\"extensions\":[\"dfac\"]},\"application/vnd.drive+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ds-keypoint\":{\"source\":\"apache\",\"extensions\":[\"kpxx\"]},\"application/vnd.dtg.local\":{\"source\":\"iana\"},\"application/vnd.dtg.local.flash\":{\"source\":\"iana\"},\"application/vnd.dtg.local.html\":{\"source\":\"iana\"},\"application/vnd.dvb.ait\":{\"source\":\"iana\",\"extensions\":[\"ait\"]},\"application/vnd.dvb.dvbj\":{\"source\":\"iana\"},\"application/vnd.dvb.esgcontainer\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcdftnotifaccess\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgaccess\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgaccess2\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcesgpdd\":{\"source\":\"iana\"},\"application/vnd.dvb.ipdcroaming\":{\"source\":\"iana\"},\"application/vnd.dvb.iptv.alfec-base\":{\"source\":\"iana\"},\"application/vnd.dvb.iptv.alfec-enhancement\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-aggregate-root+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-container+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-generic+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-msglist+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-registration-request+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-ia-registration-response+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.notif-init+xml\":{\"source\":\"iana\"},\"application/vnd.dvb.pfr\":{\"source\":\"iana\"},\"application/vnd.dvb.service\":{\"source\":\"iana\",\"extensions\":[\"svc\"]},\"application/vnd.dxr\":{\"source\":\"iana\"},\"application/vnd.dynageo\":{\"source\":\"iana\",\"extensions\":[\"geo\"]},\"application/vnd.dzr\":{\"source\":\"iana\"},\"application/vnd.easykaraoke.cdgdownload\":{\"source\":\"iana\"},\"application/vnd.ecdis-update\":{\"source\":\"iana\"},\"application/vnd.ecip.rlp\":{\"source\":\"iana\"},\"application/vnd.ecowin.chart\":{\"source\":\"iana\",\"extensions\":[\"mag\"]},\"application/vnd.ecowin.filerequest\":{\"source\":\"iana\"},\"application/vnd.ecowin.fileupdate\":{\"source\":\"iana\"},\"application/vnd.ecowin.series\":{\"source\":\"iana\"},\"application/vnd.ecowin.seriesrequest\":{\"source\":\"iana\"},\"application/vnd.ecowin.seriesupdate\":{\"source\":\"iana\"},\"application/vnd.efi.img\":{\"source\":\"iana\"},\"application/vnd.efi.iso\":{\"source\":\"iana\"},\"application/vnd.emclient.accessrequest+xml\":{\"source\":\"iana\"},\"application/vnd.enliven\":{\"source\":\"iana\",\"extensions\":[\"nml\"]},\"application/vnd.enphase.envoy\":{\"source\":\"iana\"},\"application/vnd.eprints.data+xml\":{\"source\":\"iana\"},\"application/vnd.epson.esf\":{\"source\":\"iana\",\"extensions\":[\"esf\"]},\"application/vnd.epson.msf\":{\"source\":\"iana\",\"extensions\":[\"msf\"]},\"application/vnd.epson.quickanime\":{\"source\":\"iana\",\"extensions\":[\"qam\"]},\"application/vnd.epson.salt\":{\"source\":\"iana\",\"extensions\":[\"slt\"]},\"application/vnd.epson.ssf\":{\"source\":\"iana\",\"extensions\":[\"ssf\"]},\"application/vnd.ericsson.quickcall\":{\"source\":\"iana\"},\"application/vnd.espass-espass+zip\":{\"source\":\"iana\"},\"application/vnd.eszigno3+xml\":{\"source\":\"iana\",\"extensions\":[\"es3\",\"et3\"]},\"application/vnd.etsi.aoc+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.asic-e+zip\":{\"source\":\"iana\"},\"application/vnd.etsi.asic-s+zip\":{\"source\":\"iana\"},\"application/vnd.etsi.cug+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvcommand+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvdiscovery+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvprofile+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-bc+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-cod+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsad-npvr+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvservice+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvsync+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.iptvueprofile+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.mcid+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.mheg5\":{\"source\":\"iana\"},\"application/vnd.etsi.overload-control-policy-dataset+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.pstn+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.sci+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.simservs+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.timestamp-token\":{\"source\":\"iana\"},\"application/vnd.etsi.tsl+xml\":{\"source\":\"iana\"},\"application/vnd.etsi.tsl.der\":{\"source\":\"iana\"},\"application/vnd.eudora.data\":{\"source\":\"iana\"},\"application/vnd.evolv.ecig.profile\":{\"source\":\"iana\"},\"application/vnd.evolv.ecig.settings\":{\"source\":\"iana\"},\"application/vnd.evolv.ecig.theme\":{\"source\":\"iana\"},\"application/vnd.ezpix-album\":{\"source\":\"iana\",\"extensions\":[\"ez2\"]},\"application/vnd.ezpix-package\":{\"source\":\"iana\",\"extensions\":[\"ez3\"]},\"application/vnd.f-secure.mobile\":{\"source\":\"iana\"},\"application/vnd.fastcopy-disk-image\":{\"source\":\"iana\"},\"application/vnd.fdf\":{\"source\":\"iana\",\"extensions\":[\"fdf\"]},\"application/vnd.fdsn.mseed\":{\"source\":\"iana\",\"extensions\":[\"mseed\"]},\"application/vnd.fdsn.seed\":{\"source\":\"iana\",\"extensions\":[\"seed\",\"dataless\"]},\"application/vnd.ffsns\":{\"source\":\"iana\"},\"application/vnd.filmit.zfc\":{\"source\":\"iana\"},\"application/vnd.fints\":{\"source\":\"iana\"},\"application/vnd.firemonkeys.cloudcell\":{\"source\":\"iana\"},\"application/vnd.flographit\":{\"source\":\"iana\",\"extensions\":[\"gph\"]},\"application/vnd.fluxtime.clip\":{\"source\":\"iana\",\"extensions\":[\"ftc\"]},\"application/vnd.font-fontforge-sfd\":{\"source\":\"iana\"},\"application/vnd.framemaker\":{\"source\":\"iana\",\"extensions\":[\"fm\",\"frame\",\"maker\",\"book\"]},\"application/vnd.frogans.fnc\":{\"source\":\"iana\",\"extensions\":[\"fnc\"]},\"application/vnd.frogans.ltf\":{\"source\":\"iana\",\"extensions\":[\"ltf\"]},\"application/vnd.fsc.weblaunch\":{\"source\":\"iana\",\"extensions\":[\"fsc\"]},\"application/vnd.fujitsu.oasys\":{\"source\":\"iana\",\"extensions\":[\"oas\"]},\"application/vnd.fujitsu.oasys2\":{\"source\":\"iana\",\"extensions\":[\"oa2\"]},\"application/vnd.fujitsu.oasys3\":{\"source\":\"iana\",\"extensions\":[\"oa3\"]},\"application/vnd.fujitsu.oasysgp\":{\"source\":\"iana\",\"extensions\":[\"fg5\"]},\"application/vnd.fujitsu.oasysprs\":{\"source\":\"iana\",\"extensions\":[\"bh2\"]},\"application/vnd.fujixerox.art-ex\":{\"source\":\"iana\"},\"application/vnd.fujixerox.art4\":{\"source\":\"iana\"},\"application/vnd.fujixerox.ddd\":{\"source\":\"iana\",\"extensions\":[\"ddd\"]},\"application/vnd.fujixerox.docuworks\":{\"source\":\"iana\",\"extensions\":[\"xdw\"]},\"application/vnd.fujixerox.docuworks.binder\":{\"source\":\"iana\",\"extensions\":[\"xbd\"]},\"application/vnd.fujixerox.docuworks.container\":{\"source\":\"iana\"},\"application/vnd.fujixerox.hbpl\":{\"source\":\"iana\"},\"application/vnd.fut-misnet\":{\"source\":\"iana\"},\"application/vnd.fuzzysheet\":{\"source\":\"iana\",\"extensions\":[\"fzs\"]},\"application/vnd.genomatix.tuxedo\":{\"source\":\"iana\",\"extensions\":[\"txd\"]},\"application/vnd.geo+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.geocube+xml\":{\"source\":\"iana\"},\"application/vnd.geogebra.file\":{\"source\":\"iana\",\"extensions\":[\"ggb\"]},\"application/vnd.geogebra.tool\":{\"source\":\"iana\",\"extensions\":[\"ggt\"]},\"application/vnd.geometry-explorer\":{\"source\":\"iana\",\"extensions\":[\"gex\",\"gre\"]},\"application/vnd.geonext\":{\"source\":\"iana\",\"extensions\":[\"gxt\"]},\"application/vnd.geoplan\":{\"source\":\"iana\",\"extensions\":[\"g2w\"]},\"application/vnd.geospace\":{\"source\":\"iana\",\"extensions\":[\"g3w\"]},\"application/vnd.gerber\":{\"source\":\"iana\"},\"application/vnd.globalplatform.card-content-mgt\":{\"source\":\"iana\"},\"application/vnd.globalplatform.card-content-mgt-response\":{\"source\":\"iana\"},\"application/vnd.gmx\":{\"source\":\"iana\",\"extensions\":[\"gmx\"]},\"application/vnd.google-apps.document\":{\"compressible\":false,\"extensions\":[\"gdoc\"]},\"application/vnd.google-apps.presentation\":{\"compressible\":false,\"extensions\":[\"gslides\"]},\"application/vnd.google-apps.spreadsheet\":{\"compressible\":false,\"extensions\":[\"gsheet\"]},\"application/vnd.google-earth.kml+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"kml\"]},\"application/vnd.google-earth.kmz\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"kmz\"]},\"application/vnd.gov.sk.e-form+xml\":{\"source\":\"iana\"},\"application/vnd.gov.sk.e-form+zip\":{\"source\":\"iana\"},\"application/vnd.gov.sk.xmldatacontainer+xml\":{\"source\":\"iana\"},\"application/vnd.grafeq\":{\"source\":\"iana\",\"extensions\":[\"gqf\",\"gqs\"]},\"application/vnd.gridmp\":{\"source\":\"iana\"},\"application/vnd.groove-account\":{\"source\":\"iana\",\"extensions\":[\"gac\"]},\"application/vnd.groove-help\":{\"source\":\"iana\",\"extensions\":[\"ghf\"]},\"application/vnd.groove-identity-message\":{\"source\":\"iana\",\"extensions\":[\"gim\"]},\"application/vnd.groove-injector\":{\"source\":\"iana\",\"extensions\":[\"grv\"]},\"application/vnd.groove-tool-message\":{\"source\":\"iana\",\"extensions\":[\"gtm\"]},\"application/vnd.groove-tool-template\":{\"source\":\"iana\",\"extensions\":[\"tpl\"]},\"application/vnd.groove-vcard\":{\"source\":\"iana\",\"extensions\":[\"vcg\"]},\"application/vnd.hal+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hal+xml\":{\"source\":\"iana\",\"extensions\":[\"hal\"]},\"application/vnd.handheld-entertainment+xml\":{\"source\":\"iana\",\"extensions\":[\"zmm\"]},\"application/vnd.hbci\":{\"source\":\"iana\",\"extensions\":[\"hbci\"]},\"application/vnd.hc+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hcl-bireports\":{\"source\":\"iana\"},\"application/vnd.hdt\":{\"source\":\"iana\"},\"application/vnd.heroku+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hhe.lesson-player\":{\"source\":\"iana\",\"extensions\":[\"les\"]},\"application/vnd.hp-hpgl\":{\"source\":\"iana\",\"extensions\":[\"hpgl\"]},\"application/vnd.hp-hpid\":{\"source\":\"iana\",\"extensions\":[\"hpid\"]},\"application/vnd.hp-hps\":{\"source\":\"iana\",\"extensions\":[\"hps\"]},\"application/vnd.hp-jlyt\":{\"source\":\"iana\",\"extensions\":[\"jlt\"]},\"application/vnd.hp-pcl\":{\"source\":\"iana\",\"extensions\":[\"pcl\"]},\"application/vnd.hp-pclxl\":{\"source\":\"iana\",\"extensions\":[\"pclxl\"]},\"application/vnd.httphone\":{\"source\":\"iana\"},\"application/vnd.hydrostatix.sof-data\":{\"source\":\"iana\",\"extensions\":[\"sfd-hdstx\"]},\"application/vnd.hyper-item+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hyperdrive+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.hzn-3d-crossword\":{\"source\":\"iana\"},\"application/vnd.ibm.afplinedata\":{\"source\":\"iana\"},\"application/vnd.ibm.electronic-media\":{\"source\":\"iana\"},\"application/vnd.ibm.minipay\":{\"source\":\"iana\",\"extensions\":[\"mpy\"]},\"application/vnd.ibm.modcap\":{\"source\":\"iana\",\"extensions\":[\"afp\",\"listafp\",\"list3820\"]},\"application/vnd.ibm.rights-management\":{\"source\":\"iana\",\"extensions\":[\"irm\"]},\"application/vnd.ibm.secure-container\":{\"source\":\"iana\",\"extensions\":[\"sc\"]},\"application/vnd.iccprofile\":{\"source\":\"iana\",\"extensions\":[\"icc\",\"icm\"]},\"application/vnd.ieee.1905\":{\"source\":\"iana\"},\"application/vnd.igloader\":{\"source\":\"iana\",\"extensions\":[\"igl\"]},\"application/vnd.imagemeter.folder+zip\":{\"source\":\"iana\"},\"application/vnd.imagemeter.image+zip\":{\"source\":\"iana\"},\"application/vnd.immervision-ivp\":{\"source\":\"iana\",\"extensions\":[\"ivp\"]},\"application/vnd.immervision-ivu\":{\"source\":\"iana\",\"extensions\":[\"ivu\"]},\"application/vnd.ims.imsccv1p1\":{\"source\":\"iana\"},\"application/vnd.ims.imsccv1p2\":{\"source\":\"iana\"},\"application/vnd.ims.imsccv1p3\":{\"source\":\"iana\"},\"application/vnd.ims.lis.v2.result+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolconsumerprofile+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolproxy+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolproxy.id+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolsettings+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.ims.lti.v2.toolsettings.simple+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.informedcontrol.rms+xml\":{\"source\":\"iana\"},\"application/vnd.informix-visionary\":{\"source\":\"iana\"},\"application/vnd.infotech.project\":{\"source\":\"iana\"},\"application/vnd.infotech.project+xml\":{\"source\":\"iana\"},\"application/vnd.innopath.wamp.notification\":{\"source\":\"iana\"},\"application/vnd.insors.igm\":{\"source\":\"iana\",\"extensions\":[\"igm\"]},\"application/vnd.intercon.formnet\":{\"source\":\"iana\",\"extensions\":[\"xpw\",\"xpx\"]},\"application/vnd.intergeo\":{\"source\":\"iana\",\"extensions\":[\"i2g\"]},\"application/vnd.intertrust.digibox\":{\"source\":\"iana\"},\"application/vnd.intertrust.nncp\":{\"source\":\"iana\"},\"application/vnd.intu.qbo\":{\"source\":\"iana\",\"extensions\":[\"qbo\"]},\"application/vnd.intu.qfx\":{\"source\":\"iana\",\"extensions\":[\"qfx\"]},\"application/vnd.iptc.g2.catalogitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.conceptitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.knowledgeitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.newsitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.newsmessage+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.packageitem+xml\":{\"source\":\"iana\"},\"application/vnd.iptc.g2.planningitem+xml\":{\"source\":\"iana\"},\"application/vnd.ipunplugged.rcprofile\":{\"source\":\"iana\",\"extensions\":[\"rcprofile\"]},\"application/vnd.irepository.package+xml\":{\"source\":\"iana\",\"extensions\":[\"irp\"]},\"application/vnd.is-xpr\":{\"source\":\"iana\",\"extensions\":[\"xpr\"]},\"application/vnd.isac.fcs\":{\"source\":\"iana\",\"extensions\":[\"fcs\"]},\"application/vnd.jam\":{\"source\":\"iana\",\"extensions\":[\"jam\"]},\"application/vnd.japannet-directory-service\":{\"source\":\"iana\"},\"application/vnd.japannet-jpnstore-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-payment-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-registration\":{\"source\":\"iana\"},\"application/vnd.japannet-registration-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-setstore-wakeup\":{\"source\":\"iana\"},\"application/vnd.japannet-verification\":{\"source\":\"iana\"},\"application/vnd.japannet-verification-wakeup\":{\"source\":\"iana\"},\"application/vnd.jcp.javame.midlet-rms\":{\"source\":\"iana\",\"extensions\":[\"rms\"]},\"application/vnd.jisp\":{\"source\":\"iana\",\"extensions\":[\"jisp\"]},\"application/vnd.joost.joda-archive\":{\"source\":\"iana\",\"extensions\":[\"joda\"]},\"application/vnd.jsk.isdn-ngn\":{\"source\":\"iana\"},\"application/vnd.kahootz\":{\"source\":\"iana\",\"extensions\":[\"ktz\",\"ktr\"]},\"application/vnd.kde.karbon\":{\"source\":\"iana\",\"extensions\":[\"karbon\"]},\"application/vnd.kde.kchart\":{\"source\":\"iana\",\"extensions\":[\"chrt\"]},\"application/vnd.kde.kformula\":{\"source\":\"iana\",\"extensions\":[\"kfo\"]},\"application/vnd.kde.kivio\":{\"source\":\"iana\",\"extensions\":[\"flw\"]},\"application/vnd.kde.kontour\":{\"source\":\"iana\",\"extensions\":[\"kon\"]},\"application/vnd.kde.kpresenter\":{\"source\":\"iana\",\"extensions\":[\"kpr\",\"kpt\"]},\"application/vnd.kde.kspread\":{\"source\":\"iana\",\"extensions\":[\"ksp\"]},\"application/vnd.kde.kword\":{\"source\":\"iana\",\"extensions\":[\"kwd\",\"kwt\"]},\"application/vnd.kenameaapp\":{\"source\":\"iana\",\"extensions\":[\"htke\"]},\"application/vnd.kidspiration\":{\"source\":\"iana\",\"extensions\":[\"kia\"]},\"application/vnd.kinar\":{\"source\":\"iana\",\"extensions\":[\"kne\",\"knp\"]},\"application/vnd.koan\":{\"source\":\"iana\",\"extensions\":[\"skp\",\"skd\",\"skt\",\"skm\"]},\"application/vnd.kodak-descriptor\":{\"source\":\"iana\",\"extensions\":[\"sse\"]},\"application/vnd.las.las+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.las.las+xml\":{\"source\":\"iana\",\"extensions\":[\"lasxml\"]},\"application/vnd.liberty-request+xml\":{\"source\":\"iana\"},\"application/vnd.llamagraphics.life-balance.desktop\":{\"source\":\"iana\",\"extensions\":[\"lbd\"]},\"application/vnd.llamagraphics.life-balance.exchange+xml\":{\"source\":\"iana\",\"extensions\":[\"lbe\"]},\"application/vnd.lotus-1-2-3\":{\"source\":\"iana\",\"extensions\":[\"123\"]},\"application/vnd.lotus-approach\":{\"source\":\"iana\",\"extensions\":[\"apr\"]},\"application/vnd.lotus-freelance\":{\"source\":\"iana\",\"extensions\":[\"pre\"]},\"application/vnd.lotus-notes\":{\"source\":\"iana\",\"extensions\":[\"nsf\"]},\"application/vnd.lotus-organizer\":{\"source\":\"iana\",\"extensions\":[\"org\"]},\"application/vnd.lotus-screencam\":{\"source\":\"iana\",\"extensions\":[\"scm\"]},\"application/vnd.lotus-wordpro\":{\"source\":\"iana\",\"extensions\":[\"lwp\"]},\"application/vnd.macports.portpkg\":{\"source\":\"iana\",\"extensions\":[\"portpkg\"]},\"application/vnd.mapbox-vector-tile\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.actiontoken+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.conftoken+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.license+xml\":{\"source\":\"iana\"},\"application/vnd.marlin.drm.mdcf\":{\"source\":\"iana\"},\"application/vnd.mason+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.maxmind.maxmind-db\":{\"source\":\"iana\"},\"application/vnd.mcd\":{\"source\":\"iana\",\"extensions\":[\"mcd\"]},\"application/vnd.medcalcdata\":{\"source\":\"iana\",\"extensions\":[\"mc1\"]},\"application/vnd.mediastation.cdkey\":{\"source\":\"iana\",\"extensions\":[\"cdkey\"]},\"application/vnd.meridian-slingshot\":{\"source\":\"iana\"},\"application/vnd.mfer\":{\"source\":\"iana\",\"extensions\":[\"mwf\"]},\"application/vnd.mfmp\":{\"source\":\"iana\",\"extensions\":[\"mfm\"]},\"application/vnd.micro+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.micrografx.flo\":{\"source\":\"iana\",\"extensions\":[\"flo\"]},\"application/vnd.micrografx.igx\":{\"source\":\"iana\",\"extensions\":[\"igx\"]},\"application/vnd.microsoft.portable-executable\":{\"source\":\"iana\"},\"application/vnd.microsoft.windows.thumbnail-cache\":{\"source\":\"iana\"},\"application/vnd.miele+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.mif\":{\"source\":\"iana\",\"extensions\":[\"mif\"]},\"application/vnd.minisoft-hp3000-save\":{\"source\":\"iana\"},\"application/vnd.mitsubishi.misty-guard.trustweb\":{\"source\":\"iana\"},\"application/vnd.mobius.daf\":{\"source\":\"iana\",\"extensions\":[\"daf\"]},\"application/vnd.mobius.dis\":{\"source\":\"iana\",\"extensions\":[\"dis\"]},\"application/vnd.mobius.mbk\":{\"source\":\"iana\",\"extensions\":[\"mbk\"]},\"application/vnd.mobius.mqy\":{\"source\":\"iana\",\"extensions\":[\"mqy\"]},\"application/vnd.mobius.msl\":{\"source\":\"iana\",\"extensions\":[\"msl\"]},\"application/vnd.mobius.plc\":{\"source\":\"iana\",\"extensions\":[\"plc\"]},\"application/vnd.mobius.txf\":{\"source\":\"iana\",\"extensions\":[\"txf\"]},\"application/vnd.mophun.application\":{\"source\":\"iana\",\"extensions\":[\"mpn\"]},\"application/vnd.mophun.certificate\":{\"source\":\"iana\",\"extensions\":[\"mpc\"]},\"application/vnd.motorola.flexsuite\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.adsi\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.fis\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.gotap\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.kmr\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.ttc\":{\"source\":\"iana\"},\"application/vnd.motorola.flexsuite.wem\":{\"source\":\"iana\"},\"application/vnd.motorola.iprm\":{\"source\":\"iana\"},\"application/vnd.mozilla.xul+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xul\"]},\"application/vnd.ms-3mfdocument\":{\"source\":\"iana\"},\"application/vnd.ms-artgalry\":{\"source\":\"iana\",\"extensions\":[\"cil\"]},\"application/vnd.ms-asf\":{\"source\":\"iana\"},\"application/vnd.ms-cab-compressed\":{\"source\":\"iana\",\"extensions\":[\"cab\"]},\"application/vnd.ms-color.iccprofile\":{\"source\":\"apache\"},\"application/vnd.ms-excel\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]},\"application/vnd.ms-excel.addin.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlam\"]},\"application/vnd.ms-excel.sheet.binary.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlsb\"]},\"application/vnd.ms-excel.sheet.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xlsm\"]},\"application/vnd.ms-excel.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"xltm\"]},\"application/vnd.ms-fontobject\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"eot\"]},\"application/vnd.ms-htmlhelp\":{\"source\":\"iana\",\"extensions\":[\"chm\"]},\"application/vnd.ms-ims\":{\"source\":\"iana\",\"extensions\":[\"ims\"]},\"application/vnd.ms-lrm\":{\"source\":\"iana\",\"extensions\":[\"lrm\"]},\"application/vnd.ms-office.activex+xml\":{\"source\":\"iana\"},\"application/vnd.ms-officetheme\":{\"source\":\"iana\",\"extensions\":[\"thmx\"]},\"application/vnd.ms-opentype\":{\"source\":\"apache\",\"compressible\":true},\"application/vnd.ms-outlook\":{\"compressible\":false,\"extensions\":[\"msg\"]},\"application/vnd.ms-package.obfuscated-opentype\":{\"source\":\"apache\"},\"application/vnd.ms-pki.seccat\":{\"source\":\"apache\",\"extensions\":[\"cat\"]},\"application/vnd.ms-pki.stl\":{\"source\":\"apache\",\"extensions\":[\"stl\"]},\"application/vnd.ms-playready.initiator+xml\":{\"source\":\"iana\"},\"application/vnd.ms-powerpoint\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ppt\",\"pps\",\"pot\"]},\"application/vnd.ms-powerpoint.addin.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"ppam\"]},\"application/vnd.ms-powerpoint.presentation.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"pptm\"]},\"application/vnd.ms-powerpoint.slide.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"sldm\"]},\"application/vnd.ms-powerpoint.slideshow.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"ppsm\"]},\"application/vnd.ms-powerpoint.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"potm\"]},\"application/vnd.ms-printdevicecapabilities+xml\":{\"source\":\"iana\"},\"application/vnd.ms-printing.printticket+xml\":{\"source\":\"apache\"},\"application/vnd.ms-printschematicket+xml\":{\"source\":\"iana\"},\"application/vnd.ms-project\":{\"source\":\"iana\",\"extensions\":[\"mpp\",\"mpt\"]},\"application/vnd.ms-tnef\":{\"source\":\"iana\"},\"application/vnd.ms-windows.devicepairing\":{\"source\":\"iana\"},\"application/vnd.ms-windows.nwprinting.oob\":{\"source\":\"iana\"},\"application/vnd.ms-windows.printerpairing\":{\"source\":\"iana\"},\"application/vnd.ms-windows.wsd.oob\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.lic-chlg-req\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.lic-resp\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.meter-chlg-req\":{\"source\":\"iana\"},\"application/vnd.ms-wmdrm.meter-resp\":{\"source\":\"iana\"},\"application/vnd.ms-word.document.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"docm\"]},\"application/vnd.ms-word.template.macroenabled.12\":{\"source\":\"iana\",\"extensions\":[\"dotm\"]},\"application/vnd.ms-works\":{\"source\":\"iana\",\"extensions\":[\"wps\",\"wks\",\"wcm\",\"wdb\"]},\"application/vnd.ms-wpl\":{\"source\":\"iana\",\"extensions\":[\"wpl\"]},\"application/vnd.ms-xpsdocument\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xps\"]},\"application/vnd.msa-disk-image\":{\"source\":\"iana\"},\"application/vnd.mseq\":{\"source\":\"iana\",\"extensions\":[\"mseq\"]},\"application/vnd.msign\":{\"source\":\"iana\"},\"application/vnd.multiad.creator\":{\"source\":\"iana\"},\"application/vnd.multiad.creator.cif\":{\"source\":\"iana\"},\"application/vnd.music-niff\":{\"source\":\"iana\"},\"application/vnd.musician\":{\"source\":\"iana\",\"extensions\":[\"mus\"]},\"application/vnd.muvee.style\":{\"source\":\"iana\",\"extensions\":[\"msty\"]},\"application/vnd.mynfc\":{\"source\":\"iana\",\"extensions\":[\"taglet\"]},\"application/vnd.ncd.control\":{\"source\":\"iana\"},\"application/vnd.ncd.reference\":{\"source\":\"iana\"},\"application/vnd.nearst.inv+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.nervana\":{\"source\":\"iana\"},\"application/vnd.netfpx\":{\"source\":\"iana\"},\"application/vnd.neurolanguage.nlu\":{\"source\":\"iana\",\"extensions\":[\"nlu\"]},\"application/vnd.nintendo.nitro.rom\":{\"source\":\"iana\"},\"application/vnd.nintendo.snes.rom\":{\"source\":\"iana\"},\"application/vnd.nitf\":{\"source\":\"iana\",\"extensions\":[\"ntf\",\"nitf\"]},\"application/vnd.noblenet-directory\":{\"source\":\"iana\",\"extensions\":[\"nnd\"]},\"application/vnd.noblenet-sealer\":{\"source\":\"iana\",\"extensions\":[\"nns\"]},\"application/vnd.noblenet-web\":{\"source\":\"iana\",\"extensions\":[\"nnw\"]},\"application/vnd.nokia.catalogs\":{\"source\":\"iana\"},\"application/vnd.nokia.conml+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.conml+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.iptv.config+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.isds-radio-presets\":{\"source\":\"iana\"},\"application/vnd.nokia.landmark+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.landmark+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.landmarkcollection+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.n-gage.ac+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.n-gage.data\":{\"source\":\"iana\",\"extensions\":[\"ngdat\"]},\"application/vnd.nokia.n-gage.symbian.install\":{\"source\":\"iana\",\"extensions\":[\"n-gage\"]},\"application/vnd.nokia.ncd\":{\"source\":\"iana\"},\"application/vnd.nokia.pcd+wbxml\":{\"source\":\"iana\"},\"application/vnd.nokia.pcd+xml\":{\"source\":\"iana\"},\"application/vnd.nokia.radio-preset\":{\"source\":\"iana\",\"extensions\":[\"rpst\"]},\"application/vnd.nokia.radio-presets\":{\"source\":\"iana\",\"extensions\":[\"rpss\"]},\"application/vnd.novadigm.edm\":{\"source\":\"iana\",\"extensions\":[\"edm\"]},\"application/vnd.novadigm.edx\":{\"source\":\"iana\",\"extensions\":[\"edx\"]},\"application/vnd.novadigm.ext\":{\"source\":\"iana\",\"extensions\":[\"ext\"]},\"application/vnd.ntt-local.content-share\":{\"source\":\"iana\"},\"application/vnd.ntt-local.file-transfer\":{\"source\":\"iana\"},\"application/vnd.ntt-local.ogw_remote-access\":{\"source\":\"iana\"},\"application/vnd.ntt-local.sip-ta_remote\":{\"source\":\"iana\"},\"application/vnd.ntt-local.sip-ta_tcp_stream\":{\"source\":\"iana\"},\"application/vnd.oasis.opendocument.chart\":{\"source\":\"iana\",\"extensions\":[\"odc\"]},\"application/vnd.oasis.opendocument.chart-template\":{\"source\":\"iana\",\"extensions\":[\"otc\"]},\"application/vnd.oasis.opendocument.database\":{\"source\":\"iana\",\"extensions\":[\"odb\"]},\"application/vnd.oasis.opendocument.formula\":{\"source\":\"iana\",\"extensions\":[\"odf\"]},\"application/vnd.oasis.opendocument.formula-template\":{\"source\":\"iana\",\"extensions\":[\"odft\"]},\"application/vnd.oasis.opendocument.graphics\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odg\"]},\"application/vnd.oasis.opendocument.graphics-template\":{\"source\":\"iana\",\"extensions\":[\"otg\"]},\"application/vnd.oasis.opendocument.image\":{\"source\":\"iana\",\"extensions\":[\"odi\"]},\"application/vnd.oasis.opendocument.image-template\":{\"source\":\"iana\",\"extensions\":[\"oti\"]},\"application/vnd.oasis.opendocument.presentation\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odp\"]},\"application/vnd.oasis.opendocument.presentation-template\":{\"source\":\"iana\",\"extensions\":[\"otp\"]},\"application/vnd.oasis.opendocument.spreadsheet\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ods\"]},\"application/vnd.oasis.opendocument.spreadsheet-template\":{\"source\":\"iana\",\"extensions\":[\"ots\"]},\"application/vnd.oasis.opendocument.text\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"odt\"]},\"application/vnd.oasis.opendocument.text-master\":{\"source\":\"iana\",\"extensions\":[\"odm\"]},\"application/vnd.oasis.opendocument.text-template\":{\"source\":\"iana\",\"extensions\":[\"ott\"]},\"application/vnd.oasis.opendocument.text-web\":{\"source\":\"iana\",\"extensions\":[\"oth\"]},\"application/vnd.obn\":{\"source\":\"iana\"},\"application/vnd.ocf+cbor\":{\"source\":\"iana\"},\"application/vnd.oftn.l10n+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.oipf.contentaccessdownload+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.contentaccessstreaming+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.cspg-hexbinary\":{\"source\":\"iana\"},\"application/vnd.oipf.dae.svg+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.dae.xhtml+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.mippvcontrolmessage+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.pae.gem\":{\"source\":\"iana\"},\"application/vnd.oipf.spdiscovery+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.spdlist+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.ueprofile+xml\":{\"source\":\"iana\"},\"application/vnd.oipf.userprofile+xml\":{\"source\":\"iana\"},\"application/vnd.olpc-sugar\":{\"source\":\"iana\",\"extensions\":[\"xo\"]},\"application/vnd.oma-scws-config\":{\"source\":\"iana\"},\"application/vnd.oma-scws-http-request\":{\"source\":\"iana\"},\"application/vnd.oma-scws-http-response\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.associated-procedure-parameter+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.drm-trigger+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.imd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.ltkm\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.notification+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.provisioningtrigger\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgboot\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgdd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sgdu\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.simple-symbol-container\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.smartcard-trigger+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.sprov+xml\":{\"source\":\"iana\"},\"application/vnd.oma.bcast.stkm\":{\"source\":\"iana\"},\"application/vnd.oma.cab-address-book+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-feature-handler+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-pcc+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-subs-invite+xml\":{\"source\":\"iana\"},\"application/vnd.oma.cab-user-prefs+xml\":{\"source\":\"iana\"},\"application/vnd.oma.dcd\":{\"source\":\"iana\"},\"application/vnd.oma.dcdc\":{\"source\":\"iana\"},\"application/vnd.oma.dd2+xml\":{\"source\":\"iana\",\"extensions\":[\"dd2\"]},\"application/vnd.oma.drm.risd+xml\":{\"source\":\"iana\"},\"application/vnd.oma.group-usage-list+xml\":{\"source\":\"iana\"},\"application/vnd.oma.lwm2m+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.oma.lwm2m+tlv\":{\"source\":\"iana\"},\"application/vnd.oma.pal+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.detailed-progress-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.final-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.groups+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.invocation-descriptor+xml\":{\"source\":\"iana\"},\"application/vnd.oma.poc.optimized-progress-report+xml\":{\"source\":\"iana\"},\"application/vnd.oma.push\":{\"source\":\"iana\"},\"application/vnd.oma.scidm.messages+xml\":{\"source\":\"iana\"},\"application/vnd.oma.xcap-directory+xml\":{\"source\":\"iana\"},\"application/vnd.omads-email+xml\":{\"source\":\"iana\"},\"application/vnd.omads-file+xml\":{\"source\":\"iana\"},\"application/vnd.omads-folder+xml\":{\"source\":\"iana\"},\"application/vnd.omaloc-supl-init\":{\"source\":\"iana\"},\"application/vnd.onepager\":{\"source\":\"iana\"},\"application/vnd.onepagertamp\":{\"source\":\"iana\"},\"application/vnd.onepagertamx\":{\"source\":\"iana\"},\"application/vnd.onepagertat\":{\"source\":\"iana\"},\"application/vnd.onepagertatp\":{\"source\":\"iana\"},\"application/vnd.onepagertatx\":{\"source\":\"iana\"},\"application/vnd.openblox.game+xml\":{\"source\":\"iana\"},\"application/vnd.openblox.game-binary\":{\"source\":\"iana\"},\"application/vnd.openeye.oeb\":{\"source\":\"iana\"},\"application/vnd.openofficeorg.extension\":{\"source\":\"apache\",\"extensions\":[\"oxt\"]},\"application/vnd.openstreetmap.data+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.custom-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawing+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.extended-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.presentation\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"pptx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slide\":{\"source\":\"iana\",\"extensions\":[\"sldx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slideshow\":{\"source\":\"iana\",\"extensions\":[\"ppsx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.template\":{\"source\":\"iana\",\"extensions\":[\"potx\"]},\"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"xlsx\"]},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.template\":{\"source\":\"iana\",\"extensions\":[\"xltx\"]},\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.theme+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.themeoverride+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.vmldrawing\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"docx\"]},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.template\":{\"source\":\"iana\",\"extensions\":[\"dotx\"]},\"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.core-properties+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\":{\"source\":\"iana\"},\"application/vnd.openxmlformats-package.relationships+xml\":{\"source\":\"iana\"},\"application/vnd.oracle.resource+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.orange.indata\":{\"source\":\"iana\"},\"application/vnd.osa.netdeploy\":{\"source\":\"iana\"},\"application/vnd.osgeo.mapguide.package\":{\"source\":\"iana\",\"extensions\":[\"mgp\"]},\"application/vnd.osgi.bundle\":{\"source\":\"iana\"},\"application/vnd.osgi.dp\":{\"source\":\"iana\",\"extensions\":[\"dp\"]},\"application/vnd.osgi.subsystem\":{\"source\":\"iana\",\"extensions\":[\"esa\"]},\"application/vnd.otps.ct-kip+xml\":{\"source\":\"iana\"},\"application/vnd.oxli.countgraph\":{\"source\":\"iana\"},\"application/vnd.pagerduty+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.palm\":{\"source\":\"iana\",\"extensions\":[\"pdb\",\"pqa\",\"oprc\"]},\"application/vnd.panoply\":{\"source\":\"iana\"},\"application/vnd.paos+xml\":{\"source\":\"iana\"},\"application/vnd.paos.xml\":{\"source\":\"apache\"},\"application/vnd.patentdive\":{\"source\":\"iana\"},\"application/vnd.pawaafile\":{\"source\":\"iana\",\"extensions\":[\"paw\"]},\"application/vnd.pcos\":{\"source\":\"iana\"},\"application/vnd.pg.format\":{\"source\":\"iana\",\"extensions\":[\"str\"]},\"application/vnd.pg.osasli\":{\"source\":\"iana\",\"extensions\":[\"ei6\"]},\"application/vnd.piaccess.application-licence\":{\"source\":\"iana\"},\"application/vnd.picsel\":{\"source\":\"iana\",\"extensions\":[\"efif\"]},\"application/vnd.pmi.widget\":{\"source\":\"iana\",\"extensions\":[\"wg\"]},\"application/vnd.poc.group-advertisement+xml\":{\"source\":\"iana\"},\"application/vnd.pocketlearn\":{\"source\":\"iana\",\"extensions\":[\"plf\"]},\"application/vnd.powerbuilder6\":{\"source\":\"iana\",\"extensions\":[\"pbd\"]},\"application/vnd.powerbuilder6-s\":{\"source\":\"iana\"},\"application/vnd.powerbuilder7\":{\"source\":\"iana\"},\"application/vnd.powerbuilder7-s\":{\"source\":\"iana\"},\"application/vnd.powerbuilder75\":{\"source\":\"iana\"},\"application/vnd.powerbuilder75-s\":{\"source\":\"iana\"},\"application/vnd.preminet\":{\"source\":\"iana\"},\"application/vnd.previewsystems.box\":{\"source\":\"iana\",\"extensions\":[\"box\"]},\"application/vnd.proteus.magazine\":{\"source\":\"iana\",\"extensions\":[\"mgz\"]},\"application/vnd.publishare-delta-tree\":{\"source\":\"iana\",\"extensions\":[\"qps\"]},\"application/vnd.pvi.ptid1\":{\"source\":\"iana\",\"extensions\":[\"ptid\"]},\"application/vnd.pwg-multiplexed\":{\"source\":\"iana\"},\"application/vnd.pwg-xhtml-print+xml\":{\"source\":\"iana\"},\"application/vnd.qualcomm.brew-app-res\":{\"source\":\"iana\"},\"application/vnd.quarantainenet\":{\"source\":\"iana\"},\"application/vnd.quark.quarkxpress\":{\"source\":\"iana\",\"extensions\":[\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]},\"application/vnd.quobject-quoxdocument\":{\"source\":\"iana\"},\"application/vnd.radisys.moml+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-conf+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-conn+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-dialog+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-audit-stream+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-conf+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-base+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-fax-detect+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-group+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-speech+xml\":{\"source\":\"iana\"},\"application/vnd.radisys.msml-dialog-transform+xml\":{\"source\":\"iana\"},\"application/vnd.rainstor.data\":{\"source\":\"iana\"},\"application/vnd.rapid\":{\"source\":\"iana\"},\"application/vnd.rar\":{\"source\":\"iana\"},\"application/vnd.realvnc.bed\":{\"source\":\"iana\",\"extensions\":[\"bed\"]},\"application/vnd.recordare.musicxml\":{\"source\":\"iana\",\"extensions\":[\"mxl\"]},\"application/vnd.recordare.musicxml+xml\":{\"source\":\"iana\",\"extensions\":[\"musicxml\"]},\"application/vnd.renlearn.rlprint\":{\"source\":\"iana\"},\"application/vnd.restful+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.rig.cryptonote\":{\"source\":\"iana\",\"extensions\":[\"cryptonote\"]},\"application/vnd.rim.cod\":{\"source\":\"apache\",\"extensions\":[\"cod\"]},\"application/vnd.rn-realmedia\":{\"source\":\"apache\",\"extensions\":[\"rm\"]},\"application/vnd.rn-realmedia-vbr\":{\"source\":\"apache\",\"extensions\":[\"rmvb\"]},\"application/vnd.route66.link66+xml\":{\"source\":\"iana\",\"extensions\":[\"link66\"]},\"application/vnd.rs-274x\":{\"source\":\"iana\"},\"application/vnd.ruckus.download\":{\"source\":\"iana\"},\"application/vnd.s3sms\":{\"source\":\"iana\"},\"application/vnd.sailingtracker.track\":{\"source\":\"iana\",\"extensions\":[\"st\"]},\"application/vnd.sbm.cid\":{\"source\":\"iana\"},\"application/vnd.sbm.mid2\":{\"source\":\"iana\"},\"application/vnd.scribus\":{\"source\":\"iana\"},\"application/vnd.sealed.3df\":{\"source\":\"iana\"},\"application/vnd.sealed.csf\":{\"source\":\"iana\"},\"application/vnd.sealed.doc\":{\"source\":\"iana\"},\"application/vnd.sealed.eml\":{\"source\":\"iana\"},\"application/vnd.sealed.mht\":{\"source\":\"iana\"},\"application/vnd.sealed.net\":{\"source\":\"iana\"},\"application/vnd.sealed.ppt\":{\"source\":\"iana\"},\"application/vnd.sealed.tiff\":{\"source\":\"iana\"},\"application/vnd.sealed.xls\":{\"source\":\"iana\"},\"application/vnd.sealedmedia.softseal.html\":{\"source\":\"iana\"},\"application/vnd.sealedmedia.softseal.pdf\":{\"source\":\"iana\"},\"application/vnd.seemail\":{\"source\":\"iana\",\"extensions\":[\"see\"]},\"application/vnd.sema\":{\"source\":\"iana\",\"extensions\":[\"sema\"]},\"application/vnd.semd\":{\"source\":\"iana\",\"extensions\":[\"semd\"]},\"application/vnd.semf\":{\"source\":\"iana\",\"extensions\":[\"semf\"]},\"application/vnd.shana.informed.formdata\":{\"source\":\"iana\",\"extensions\":[\"ifm\"]},\"application/vnd.shana.informed.formtemplate\":{\"source\":\"iana\",\"extensions\":[\"itp\"]},\"application/vnd.shana.informed.interchange\":{\"source\":\"iana\",\"extensions\":[\"iif\"]},\"application/vnd.shana.informed.package\":{\"source\":\"iana\",\"extensions\":[\"ipk\"]},\"application/vnd.sigrok.session\":{\"source\":\"iana\"},\"application/vnd.simtech-mindmapper\":{\"source\":\"iana\",\"extensions\":[\"twd\",\"twds\"]},\"application/vnd.siren+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.smaf\":{\"source\":\"iana\",\"extensions\":[\"mmf\"]},\"application/vnd.smart.notebook\":{\"source\":\"iana\"},\"application/vnd.smart.teacher\":{\"source\":\"iana\",\"extensions\":[\"teacher\"]},\"application/vnd.software602.filler.form+xml\":{\"source\":\"iana\"},\"application/vnd.software602.filler.form-xml-zip\":{\"source\":\"iana\"},\"application/vnd.solent.sdkm+xml\":{\"source\":\"iana\",\"extensions\":[\"sdkm\",\"sdkd\"]},\"application/vnd.spotfire.dxp\":{\"source\":\"iana\",\"extensions\":[\"dxp\"]},\"application/vnd.spotfire.sfs\":{\"source\":\"iana\",\"extensions\":[\"sfs\"]},\"application/vnd.sqlite3\":{\"source\":\"iana\"},\"application/vnd.sss-cod\":{\"source\":\"iana\"},\"application/vnd.sss-dtf\":{\"source\":\"iana\"},\"application/vnd.sss-ntf\":{\"source\":\"iana\"},\"application/vnd.stardivision.calc\":{\"source\":\"apache\",\"extensions\":[\"sdc\"]},\"application/vnd.stardivision.draw\":{\"source\":\"apache\",\"extensions\":[\"sda\"]},\"application/vnd.stardivision.impress\":{\"source\":\"apache\",\"extensions\":[\"sdd\"]},\"application/vnd.stardivision.math\":{\"source\":\"apache\",\"extensions\":[\"smf\"]},\"application/vnd.stardivision.writer\":{\"source\":\"apache\",\"extensions\":[\"sdw\",\"vor\"]},\"application/vnd.stardivision.writer-global\":{\"source\":\"apache\",\"extensions\":[\"sgl\"]},\"application/vnd.stepmania.package\":{\"source\":\"iana\",\"extensions\":[\"smzip\"]},\"application/vnd.stepmania.stepchart\":{\"source\":\"iana\",\"extensions\":[\"sm\"]},\"application/vnd.street-stream\":{\"source\":\"iana\"},\"application/vnd.sun.wadl+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"wadl\"]},\"application/vnd.sun.xml.calc\":{\"source\":\"apache\",\"extensions\":[\"sxc\"]},\"application/vnd.sun.xml.calc.template\":{\"source\":\"apache\",\"extensions\":[\"stc\"]},\"application/vnd.sun.xml.draw\":{\"source\":\"apache\",\"extensions\":[\"sxd\"]},\"application/vnd.sun.xml.draw.template\":{\"source\":\"apache\",\"extensions\":[\"std\"]},\"application/vnd.sun.xml.impress\":{\"source\":\"apache\",\"extensions\":[\"sxi\"]},\"application/vnd.sun.xml.impress.template\":{\"source\":\"apache\",\"extensions\":[\"sti\"]},\"application/vnd.sun.xml.math\":{\"source\":\"apache\",\"extensions\":[\"sxm\"]},\"application/vnd.sun.xml.writer\":{\"source\":\"apache\",\"extensions\":[\"sxw\"]},\"application/vnd.sun.xml.writer.global\":{\"source\":\"apache\",\"extensions\":[\"sxg\"]},\"application/vnd.sun.xml.writer.template\":{\"source\":\"apache\",\"extensions\":[\"stw\"]},\"application/vnd.sus-calendar\":{\"source\":\"iana\",\"extensions\":[\"sus\",\"susp\"]},\"application/vnd.svd\":{\"source\":\"iana\",\"extensions\":[\"svd\"]},\"application/vnd.swiftview-ics\":{\"source\":\"iana\"},\"application/vnd.symbian.install\":{\"source\":\"apache\",\"extensions\":[\"sis\",\"sisx\"]},\"application/vnd.syncml+xml\":{\"source\":\"iana\",\"extensions\":[\"xsm\"]},\"application/vnd.syncml.dm+wbxml\":{\"source\":\"iana\",\"extensions\":[\"bdm\"]},\"application/vnd.syncml.dm+xml\":{\"source\":\"iana\",\"extensions\":[\"xdm\"]},\"application/vnd.syncml.dm.notification\":{\"source\":\"iana\"},\"application/vnd.syncml.dmddf+wbxml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmddf+xml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmtnds+wbxml\":{\"source\":\"iana\"},\"application/vnd.syncml.dmtnds+xml\":{\"source\":\"iana\"},\"application/vnd.syncml.ds.notification\":{\"source\":\"iana\"},\"application/vnd.tableschema+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.tao.intent-module-archive\":{\"source\":\"iana\",\"extensions\":[\"tao\"]},\"application/vnd.tcpdump.pcap\":{\"source\":\"iana\",\"extensions\":[\"pcap\",\"cap\",\"dmp\"]},\"application/vnd.tmd.mediaflex.api+xml\":{\"source\":\"iana\"},\"application/vnd.tml\":{\"source\":\"iana\"},\"application/vnd.tmobile-livetv\":{\"source\":\"iana\",\"extensions\":[\"tmo\"]},\"application/vnd.tri.onesource\":{\"source\":\"iana\"},\"application/vnd.trid.tpt\":{\"source\":\"iana\",\"extensions\":[\"tpt\"]},\"application/vnd.triscape.mxs\":{\"source\":\"iana\",\"extensions\":[\"mxs\"]},\"application/vnd.trueapp\":{\"source\":\"iana\",\"extensions\":[\"tra\"]},\"application/vnd.truedoc\":{\"source\":\"iana\"},\"application/vnd.ubisoft.webplayer\":{\"source\":\"iana\"},\"application/vnd.ufdl\":{\"source\":\"iana\",\"extensions\":[\"ufd\",\"ufdl\"]},\"application/vnd.uiq.theme\":{\"source\":\"iana\",\"extensions\":[\"utz\"]},\"application/vnd.umajin\":{\"source\":\"iana\",\"extensions\":[\"umj\"]},\"application/vnd.unity\":{\"source\":\"iana\",\"extensions\":[\"unityweb\"]},\"application/vnd.uoml+xml\":{\"source\":\"iana\",\"extensions\":[\"uoml\"]},\"application/vnd.uplanet.alert\":{\"source\":\"iana\"},\"application/vnd.uplanet.alert-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.bearer-choice\":{\"source\":\"iana\"},\"application/vnd.uplanet.bearer-choice-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.cacheop\":{\"source\":\"iana\"},\"application/vnd.uplanet.cacheop-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.channel\":{\"source\":\"iana\"},\"application/vnd.uplanet.channel-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.list\":{\"source\":\"iana\"},\"application/vnd.uplanet.list-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.listcmd\":{\"source\":\"iana\"},\"application/vnd.uplanet.listcmd-wbxml\":{\"source\":\"iana\"},\"application/vnd.uplanet.signal\":{\"source\":\"iana\"},\"application/vnd.uri-map\":{\"source\":\"iana\"},\"application/vnd.valve.source.material\":{\"source\":\"iana\"},\"application/vnd.vcx\":{\"source\":\"iana\",\"extensions\":[\"vcx\"]},\"application/vnd.vd-study\":{\"source\":\"iana\"},\"application/vnd.vectorworks\":{\"source\":\"iana\"},\"application/vnd.vel+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.verimatrix.vcas\":{\"source\":\"iana\"},\"application/vnd.vidsoft.vidconference\":{\"source\":\"iana\"},\"application/vnd.visio\":{\"source\":\"iana\",\"extensions\":[\"vsd\",\"vst\",\"vss\",\"vsw\"]},\"application/vnd.visionary\":{\"source\":\"iana\",\"extensions\":[\"vis\"]},\"application/vnd.vividence.scriptfile\":{\"source\":\"iana\"},\"application/vnd.vsf\":{\"source\":\"iana\",\"extensions\":[\"vsf\"]},\"application/vnd.wap.sic\":{\"source\":\"iana\"},\"application/vnd.wap.slc\":{\"source\":\"iana\"},\"application/vnd.wap.wbxml\":{\"source\":\"iana\",\"extensions\":[\"wbxml\"]},\"application/vnd.wap.wmlc\":{\"source\":\"iana\",\"extensions\":[\"wmlc\"]},\"application/vnd.wap.wmlscriptc\":{\"source\":\"iana\",\"extensions\":[\"wmlsc\"]},\"application/vnd.webturbo\":{\"source\":\"iana\",\"extensions\":[\"wtb\"]},\"application/vnd.wfa.p2p\":{\"source\":\"iana\"},\"application/vnd.wfa.wsc\":{\"source\":\"iana\"},\"application/vnd.windows.devicepairing\":{\"source\":\"iana\"},\"application/vnd.wmc\":{\"source\":\"iana\"},\"application/vnd.wmf.bootstrap\":{\"source\":\"iana\"},\"application/vnd.wolfram.mathematica\":{\"source\":\"iana\"},\"application/vnd.wolfram.mathematica.package\":{\"source\":\"iana\"},\"application/vnd.wolfram.player\":{\"source\":\"iana\",\"extensions\":[\"nbp\"]},\"application/vnd.wordperfect\":{\"source\":\"iana\",\"extensions\":[\"wpd\"]},\"application/vnd.wqd\":{\"source\":\"iana\",\"extensions\":[\"wqd\"]},\"application/vnd.wrq-hp3000-labelled\":{\"source\":\"iana\"},\"application/vnd.wt.stf\":{\"source\":\"iana\",\"extensions\":[\"stf\"]},\"application/vnd.wv.csp+wbxml\":{\"source\":\"iana\"},\"application/vnd.wv.csp+xml\":{\"source\":\"iana\"},\"application/vnd.wv.ssp+xml\":{\"source\":\"iana\"},\"application/vnd.xacml+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vnd.xara\":{\"source\":\"iana\",\"extensions\":[\"xar\"]},\"application/vnd.xfdl\":{\"source\":\"iana\",\"extensions\":[\"xfdl\"]},\"application/vnd.xfdl.webform\":{\"source\":\"iana\"},\"application/vnd.xmi+xml\":{\"source\":\"iana\"},\"application/vnd.xmpie.cpkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.dpkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.plan\":{\"source\":\"iana\"},\"application/vnd.xmpie.ppkg\":{\"source\":\"iana\"},\"application/vnd.xmpie.xlim\":{\"source\":\"iana\"},\"application/vnd.yamaha.hv-dic\":{\"source\":\"iana\",\"extensions\":[\"hvd\"]},\"application/vnd.yamaha.hv-script\":{\"source\":\"iana\",\"extensions\":[\"hvs\"]},\"application/vnd.yamaha.hv-voice\":{\"source\":\"iana\",\"extensions\":[\"hvp\"]},\"application/vnd.yamaha.openscoreformat\":{\"source\":\"iana\",\"extensions\":[\"osf\"]},\"application/vnd.yamaha.openscoreformat.osfpvg+xml\":{\"source\":\"iana\",\"extensions\":[\"osfpvg\"]},\"application/vnd.yamaha.remote-setup\":{\"source\":\"iana\"},\"application/vnd.yamaha.smaf-audio\":{\"source\":\"iana\",\"extensions\":[\"saf\"]},\"application/vnd.yamaha.smaf-phrase\":{\"source\":\"iana\",\"extensions\":[\"spf\"]},\"application/vnd.yamaha.through-ngn\":{\"source\":\"iana\"},\"application/vnd.yamaha.tunnel-udpencap\":{\"source\":\"iana\"},\"application/vnd.yaoweme\":{\"source\":\"iana\"},\"application/vnd.yellowriver-custom-menu\":{\"source\":\"iana\",\"extensions\":[\"cmp\"]},\"application/vnd.youtube.yt\":{\"source\":\"iana\"},\"application/vnd.zul\":{\"source\":\"iana\",\"extensions\":[\"zir\",\"zirz\"]},\"application/vnd.zzazz.deck+xml\":{\"source\":\"iana\",\"extensions\":[\"zaz\"]},\"application/voicexml+xml\":{\"source\":\"iana\",\"extensions\":[\"vxml\"]},\"application/voucher-cms+json\":{\"source\":\"iana\",\"compressible\":true},\"application/vq-rtcpxr\":{\"source\":\"iana\"},\"application/wasm\":{\"compressible\":true,\"extensions\":[\"wasm\"]},\"application/watcherinfo+xml\":{\"source\":\"iana\"},\"application/webpush-options+json\":{\"source\":\"iana\",\"compressible\":true},\"application/whoispp-query\":{\"source\":\"iana\"},\"application/whoispp-response\":{\"source\":\"iana\"},\"application/widget\":{\"source\":\"iana\",\"extensions\":[\"wgt\"]},\"application/winhlp\":{\"source\":\"apache\",\"extensions\":[\"hlp\"]},\"application/wita\":{\"source\":\"iana\"},\"application/wordperfect5.1\":{\"source\":\"iana\"},\"application/wsdl+xml\":{\"source\":\"iana\",\"extensions\":[\"wsdl\"]},\"application/wspolicy+xml\":{\"source\":\"iana\",\"extensions\":[\"wspolicy\"]},\"application/x-7z-compressed\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"7z\"]},\"application/x-abiword\":{\"source\":\"apache\",\"extensions\":[\"abw\"]},\"application/x-ace-compressed\":{\"source\":\"apache\",\"extensions\":[\"ace\"]},\"application/x-amf\":{\"source\":\"apache\"},\"application/x-apple-diskimage\":{\"source\":\"apache\",\"extensions\":[\"dmg\"]},\"application/x-arj\":{\"compressible\":false,\"extensions\":[\"arj\"]},\"application/x-authorware-bin\":{\"source\":\"apache\",\"extensions\":[\"aab\",\"x32\",\"u32\",\"vox\"]},\"application/x-authorware-map\":{\"source\":\"apache\",\"extensions\":[\"aam\"]},\"application/x-authorware-seg\":{\"source\":\"apache\",\"extensions\":[\"aas\"]},\"application/x-bcpio\":{\"source\":\"apache\",\"extensions\":[\"bcpio\"]},\"application/x-bdoc\":{\"compressible\":false,\"extensions\":[\"bdoc\"]},\"application/x-bittorrent\":{\"source\":\"apache\",\"extensions\":[\"torrent\"]},\"application/x-blorb\":{\"source\":\"apache\",\"extensions\":[\"blb\",\"blorb\"]},\"application/x-bzip\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"bz\"]},\"application/x-bzip2\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"bz2\",\"boz\"]},\"application/x-cbr\":{\"source\":\"apache\",\"extensions\":[\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]},\"application/x-cdlink\":{\"source\":\"apache\",\"extensions\":[\"vcd\"]},\"application/x-cfs-compressed\":{\"source\":\"apache\",\"extensions\":[\"cfs\"]},\"application/x-chat\":{\"source\":\"apache\",\"extensions\":[\"chat\"]},\"application/x-chess-pgn\":{\"source\":\"apache\",\"extensions\":[\"pgn\"]},\"application/x-chrome-extension\":{\"extensions\":[\"crx\"]},\"application/x-cocoa\":{\"source\":\"nginx\",\"extensions\":[\"cco\"]},\"application/x-compress\":{\"source\":\"apache\"},\"application/x-conference\":{\"source\":\"apache\",\"extensions\":[\"nsc\"]},\"application/x-cpio\":{\"source\":\"apache\",\"extensions\":[\"cpio\"]},\"application/x-csh\":{\"source\":\"apache\",\"extensions\":[\"csh\"]},\"application/x-deb\":{\"compressible\":false},\"application/x-debian-package\":{\"source\":\"apache\",\"extensions\":[\"deb\",\"udeb\"]},\"application/x-dgc-compressed\":{\"source\":\"apache\",\"extensions\":[\"dgc\"]},\"application/x-director\":{\"source\":\"apache\",\"extensions\":[\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]},\"application/x-doom\":{\"source\":\"apache\",\"extensions\":[\"wad\"]},\"application/x-dtbncx+xml\":{\"source\":\"apache\",\"extensions\":[\"ncx\"]},\"application/x-dtbook+xml\":{\"source\":\"apache\",\"extensions\":[\"dtb\"]},\"application/x-dtbresource+xml\":{\"source\":\"apache\",\"extensions\":[\"res\"]},\"application/x-dvi\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"dvi\"]},\"application/x-envoy\":{\"source\":\"apache\",\"extensions\":[\"evy\"]},\"application/x-eva\":{\"source\":\"apache\",\"extensions\":[\"eva\"]},\"application/x-font-bdf\":{\"source\":\"apache\",\"extensions\":[\"bdf\"]},\"application/x-font-dos\":{\"source\":\"apache\"},\"application/x-font-framemaker\":{\"source\":\"apache\"},\"application/x-font-ghostscript\":{\"source\":\"apache\",\"extensions\":[\"gsf\"]},\"application/x-font-libgrx\":{\"source\":\"apache\"},\"application/x-font-linux-psf\":{\"source\":\"apache\",\"extensions\":[\"psf\"]},\"application/x-font-pcf\":{\"source\":\"apache\",\"extensions\":[\"pcf\"]},\"application/x-font-snf\":{\"source\":\"apache\",\"extensions\":[\"snf\"]},\"application/x-font-speedo\":{\"source\":\"apache\"},\"application/x-font-sunos-news\":{\"source\":\"apache\"},\"application/x-font-type1\":{\"source\":\"apache\",\"extensions\":[\"pfa\",\"pfb\",\"pfm\",\"afm\"]},\"application/x-font-vfont\":{\"source\":\"apache\"},\"application/x-freearc\":{\"source\":\"apache\",\"extensions\":[\"arc\"]},\"application/x-futuresplash\":{\"source\":\"apache\",\"extensions\":[\"spl\"]},\"application/x-gca-compressed\":{\"source\":\"apache\",\"extensions\":[\"gca\"]},\"application/x-glulx\":{\"source\":\"apache\",\"extensions\":[\"ulx\"]},\"application/x-gnumeric\":{\"source\":\"apache\",\"extensions\":[\"gnumeric\"]},\"application/x-gramps-xml\":{\"source\":\"apache\",\"extensions\":[\"gramps\"]},\"application/x-gtar\":{\"source\":\"apache\",\"extensions\":[\"gtar\"]},\"application/x-gzip\":{\"source\":\"apache\"},\"application/x-hdf\":{\"source\":\"apache\",\"extensions\":[\"hdf\"]},\"application/x-httpd-php\":{\"compressible\":true,\"extensions\":[\"php\"]},\"application/x-install-instructions\":{\"source\":\"apache\",\"extensions\":[\"install\"]},\"application/x-iso9660-image\":{\"source\":\"apache\",\"extensions\":[\"iso\"]},\"application/x-java-archive-diff\":{\"source\":\"nginx\",\"extensions\":[\"jardiff\"]},\"application/x-java-jnlp-file\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"jnlp\"]},\"application/x-javascript\":{\"compressible\":true},\"application/x-latex\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"latex\"]},\"application/x-lua-bytecode\":{\"extensions\":[\"luac\"]},\"application/x-lzh-compressed\":{\"source\":\"apache\",\"extensions\":[\"lzh\",\"lha\"]},\"application/x-makeself\":{\"source\":\"nginx\",\"extensions\":[\"run\"]},\"application/x-mie\":{\"source\":\"apache\",\"extensions\":[\"mie\"]},\"application/x-mobipocket-ebook\":{\"source\":\"apache\",\"extensions\":[\"prc\",\"mobi\"]},\"application/x-mpegurl\":{\"compressible\":false},\"application/x-ms-application\":{\"source\":\"apache\",\"extensions\":[\"application\"]},\"application/x-ms-shortcut\":{\"source\":\"apache\",\"extensions\":[\"lnk\"]},\"application/x-ms-wmd\":{\"source\":\"apache\",\"extensions\":[\"wmd\"]},\"application/x-ms-wmz\":{\"source\":\"apache\",\"extensions\":[\"wmz\"]},\"application/x-ms-xbap\":{\"source\":\"apache\",\"extensions\":[\"xbap\"]},\"application/x-msaccess\":{\"source\":\"apache\",\"extensions\":[\"mdb\"]},\"application/x-msbinder\":{\"source\":\"apache\",\"extensions\":[\"obd\"]},\"application/x-mscardfile\":{\"source\":\"apache\",\"extensions\":[\"crd\"]},\"application/x-msclip\":{\"source\":\"apache\",\"extensions\":[\"clp\"]},\"application/x-msdos-program\":{\"extensions\":[\"exe\"]},\"application/x-msdownload\":{\"source\":\"apache\",\"extensions\":[\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]},\"application/x-msmediaview\":{\"source\":\"apache\",\"extensions\":[\"mvb\",\"m13\",\"m14\"]},\"application/x-msmetafile\":{\"source\":\"apache\",\"extensions\":[\"wmf\",\"wmz\",\"emf\",\"emz\"]},\"application/x-msmoney\":{\"source\":\"apache\",\"extensions\":[\"mny\"]},\"application/x-mspublisher\":{\"source\":\"apache\",\"extensions\":[\"pub\"]},\"application/x-msschedule\":{\"source\":\"apache\",\"extensions\":[\"scd\"]},\"application/x-msterminal\":{\"source\":\"apache\",\"extensions\":[\"trm\"]},\"application/x-mswrite\":{\"source\":\"apache\",\"extensions\":[\"wri\"]},\"application/x-netcdf\":{\"source\":\"apache\",\"extensions\":[\"nc\",\"cdf\"]},\"application/x-ns-proxy-autoconfig\":{\"compressible\":true,\"extensions\":[\"pac\"]},\"application/x-nzb\":{\"source\":\"apache\",\"extensions\":[\"nzb\"]},\"application/x-perl\":{\"source\":\"nginx\",\"extensions\":[\"pl\",\"pm\"]},\"application/x-pilot\":{\"source\":\"nginx\",\"extensions\":[\"prc\",\"pdb\"]},\"application/x-pkcs12\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"p12\",\"pfx\"]},\"application/x-pkcs7-certificates\":{\"source\":\"apache\",\"extensions\":[\"p7b\",\"spc\"]},\"application/x-pkcs7-certreqresp\":{\"source\":\"apache\",\"extensions\":[\"p7r\"]},\"application/x-rar-compressed\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"rar\"]},\"application/x-redhat-package-manager\":{\"source\":\"nginx\",\"extensions\":[\"rpm\"]},\"application/x-research-info-systems\":{\"source\":\"apache\",\"extensions\":[\"ris\"]},\"application/x-sea\":{\"source\":\"nginx\",\"extensions\":[\"sea\"]},\"application/x-sh\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"sh\"]},\"application/x-shar\":{\"source\":\"apache\",\"extensions\":[\"shar\"]},\"application/x-shockwave-flash\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"swf\"]},\"application/x-silverlight-app\":{\"source\":\"apache\",\"extensions\":[\"xap\"]},\"application/x-sql\":{\"source\":\"apache\",\"extensions\":[\"sql\"]},\"application/x-stuffit\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"sit\"]},\"application/x-stuffitx\":{\"source\":\"apache\",\"extensions\":[\"sitx\"]},\"application/x-subrip\":{\"source\":\"apache\",\"extensions\":[\"srt\"]},\"application/x-sv4cpio\":{\"source\":\"apache\",\"extensions\":[\"sv4cpio\"]},\"application/x-sv4crc\":{\"source\":\"apache\",\"extensions\":[\"sv4crc\"]},\"application/x-t3vm-image\":{\"source\":\"apache\",\"extensions\":[\"t3\"]},\"application/x-tads\":{\"source\":\"apache\",\"extensions\":[\"gam\"]},\"application/x-tar\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"tar\"]},\"application/x-tcl\":{\"source\":\"apache\",\"extensions\":[\"tcl\",\"tk\"]},\"application/x-tex\":{\"source\":\"apache\",\"extensions\":[\"tex\"]},\"application/x-tex-tfm\":{\"source\":\"apache\",\"extensions\":[\"tfm\"]},\"application/x-texinfo\":{\"source\":\"apache\",\"extensions\":[\"texinfo\",\"texi\"]},\"application/x-tgif\":{\"source\":\"apache\",\"extensions\":[\"obj\"]},\"application/x-ustar\":{\"source\":\"apache\",\"extensions\":[\"ustar\"]},\"application/x-virtualbox-hdd\":{\"compressible\":true,\"extensions\":[\"hdd\"]},\"application/x-virtualbox-ova\":{\"compressible\":true,\"extensions\":[\"ova\"]},\"application/x-virtualbox-ovf\":{\"compressible\":true,\"extensions\":[\"ovf\"]},\"application/x-virtualbox-vbox\":{\"compressible\":true,\"extensions\":[\"vbox\"]},\"application/x-virtualbox-vbox-extpack\":{\"compressible\":false,\"extensions\":[\"vbox-extpack\"]},\"application/x-virtualbox-vdi\":{\"compressible\":true,\"extensions\":[\"vdi\"]},\"application/x-virtualbox-vhd\":{\"compressible\":true,\"extensions\":[\"vhd\"]},\"application/x-virtualbox-vmdk\":{\"compressible\":true,\"extensions\":[\"vmdk\"]},\"application/x-wais-source\":{\"source\":\"apache\",\"extensions\":[\"src\"]},\"application/x-web-app-manifest+json\":{\"compressible\":true,\"extensions\":[\"webapp\"]},\"application/x-www-form-urlencoded\":{\"source\":\"iana\",\"compressible\":true},\"application/x-x509-ca-cert\":{\"source\":\"apache\",\"extensions\":[\"der\",\"crt\",\"pem\"]},\"application/x-xfig\":{\"source\":\"apache\",\"extensions\":[\"fig\"]},\"application/x-xliff+xml\":{\"source\":\"apache\",\"extensions\":[\"xlf\"]},\"application/x-xpinstall\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"xpi\"]},\"application/x-xz\":{\"source\":\"apache\",\"extensions\":[\"xz\"]},\"application/x-zmachine\":{\"source\":\"apache\",\"extensions\":[\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]},\"application/x400-bp\":{\"source\":\"iana\"},\"application/xacml+xml\":{\"source\":\"iana\"},\"application/xaml+xml\":{\"source\":\"apache\",\"extensions\":[\"xaml\"]},\"application/xcap-att+xml\":{\"source\":\"iana\"},\"application/xcap-caps+xml\":{\"source\":\"iana\"},\"application/xcap-diff+xml\":{\"source\":\"iana\",\"extensions\":[\"xdf\"]},\"application/xcap-el+xml\":{\"source\":\"iana\"},\"application/xcap-error+xml\":{\"source\":\"iana\"},\"application/xcap-ns+xml\":{\"source\":\"iana\"},\"application/xcon-conference-info+xml\":{\"source\":\"iana\"},\"application/xcon-conference-info-diff+xml\":{\"source\":\"iana\"},\"application/xenc+xml\":{\"source\":\"iana\",\"extensions\":[\"xenc\"]},\"application/xhtml+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xhtml\",\"xht\"]},\"application/xhtml-voice+xml\":{\"source\":\"apache\"},\"application/xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xml\",\"xsl\",\"xsd\",\"rng\"]},\"application/xml-dtd\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"dtd\"]},\"application/xml-external-parsed-entity\":{\"source\":\"iana\"},\"application/xml-patch+xml\":{\"source\":\"iana\"},\"application/xmpp+xml\":{\"source\":\"iana\"},\"application/xop+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xop\"]},\"application/xproc+xml\":{\"source\":\"apache\",\"extensions\":[\"xpl\"]},\"application/xslt+xml\":{\"source\":\"iana\",\"extensions\":[\"xslt\"]},\"application/xspf+xml\":{\"source\":\"apache\",\"extensions\":[\"xspf\"]},\"application/xv+xml\":{\"source\":\"iana\",\"extensions\":[\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]},\"application/yang\":{\"source\":\"iana\",\"extensions\":[\"yang\"]},\"application/yang-data+json\":{\"source\":\"iana\",\"compressible\":true},\"application/yang-data+xml\":{\"source\":\"iana\"},\"application/yang-patch+json\":{\"source\":\"iana\",\"compressible\":true},\"application/yang-patch+xml\":{\"source\":\"iana\"},\"application/yin+xml\":{\"source\":\"iana\",\"extensions\":[\"yin\"]},\"application/zip\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"zip\"]},\"application/zlib\":{\"source\":\"iana\"},\"audio/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"audio/32kadpcm\":{\"source\":\"iana\"},\"audio/3gpp\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"3gpp\"]},\"audio/3gpp2\":{\"source\":\"iana\"},\"audio/ac3\":{\"source\":\"iana\"},\"audio/adpcm\":{\"source\":\"apache\",\"extensions\":[\"adp\"]},\"audio/amr\":{\"source\":\"iana\"},\"audio/amr-wb\":{\"source\":\"iana\"},\"audio/amr-wb+\":{\"source\":\"iana\"},\"audio/aptx\":{\"source\":\"iana\"},\"audio/asc\":{\"source\":\"iana\"},\"audio/atrac-advanced-lossless\":{\"source\":\"iana\"},\"audio/atrac-x\":{\"source\":\"iana\"},\"audio/atrac3\":{\"source\":\"iana\"},\"audio/basic\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"au\",\"snd\"]},\"audio/bv16\":{\"source\":\"iana\"},\"audio/bv32\":{\"source\":\"iana\"},\"audio/clearmode\":{\"source\":\"iana\"},\"audio/cn\":{\"source\":\"iana\"},\"audio/dat12\":{\"source\":\"iana\"},\"audio/dls\":{\"source\":\"iana\"},\"audio/dsr-es201108\":{\"source\":\"iana\"},\"audio/dsr-es202050\":{\"source\":\"iana\"},\"audio/dsr-es202211\":{\"source\":\"iana\"},\"audio/dsr-es202212\":{\"source\":\"iana\"},\"audio/dv\":{\"source\":\"iana\"},\"audio/dvi4\":{\"source\":\"iana\"},\"audio/eac3\":{\"source\":\"iana\"},\"audio/encaprtp\":{\"source\":\"iana\"},\"audio/evrc\":{\"source\":\"iana\"},\"audio/evrc-qcp\":{\"source\":\"iana\"},\"audio/evrc0\":{\"source\":\"iana\"},\"audio/evrc1\":{\"source\":\"iana\"},\"audio/evrcb\":{\"source\":\"iana\"},\"audio/evrcb0\":{\"source\":\"iana\"},\"audio/evrcb1\":{\"source\":\"iana\"},\"audio/evrcnw\":{\"source\":\"iana\"},\"audio/evrcnw0\":{\"source\":\"iana\"},\"audio/evrcnw1\":{\"source\":\"iana\"},\"audio/evrcwb\":{\"source\":\"iana\"},\"audio/evrcwb0\":{\"source\":\"iana\"},\"audio/evrcwb1\":{\"source\":\"iana\"},\"audio/evs\":{\"source\":\"iana\"},\"audio/fwdred\":{\"source\":\"iana\"},\"audio/g711-0\":{\"source\":\"iana\"},\"audio/g719\":{\"source\":\"iana\"},\"audio/g722\":{\"source\":\"iana\"},\"audio/g7221\":{\"source\":\"iana\"},\"audio/g723\":{\"source\":\"iana\"},\"audio/g726-16\":{\"source\":\"iana\"},\"audio/g726-24\":{\"source\":\"iana\"},\"audio/g726-32\":{\"source\":\"iana\"},\"audio/g726-40\":{\"source\":\"iana\"},\"audio/g728\":{\"source\":\"iana\"},\"audio/g729\":{\"source\":\"iana\"},\"audio/g7291\":{\"source\":\"iana\"},\"audio/g729d\":{\"source\":\"iana\"},\"audio/g729e\":{\"source\":\"iana\"},\"audio/gsm\":{\"source\":\"iana\"},\"audio/gsm-efr\":{\"source\":\"iana\"},\"audio/gsm-hr-08\":{\"source\":\"iana\"},\"audio/ilbc\":{\"source\":\"iana\"},\"audio/ip-mr_v2.5\":{\"source\":\"iana\"},\"audio/isac\":{\"source\":\"apache\"},\"audio/l16\":{\"source\":\"iana\"},\"audio/l20\":{\"source\":\"iana\"},\"audio/l24\":{\"source\":\"iana\",\"compressible\":false},\"audio/l8\":{\"source\":\"iana\"},\"audio/lpc\":{\"source\":\"iana\"},\"audio/melp\":{\"source\":\"iana\"},\"audio/melp1200\":{\"source\":\"iana\"},\"audio/melp2400\":{\"source\":\"iana\"},\"audio/melp600\":{\"source\":\"iana\"},\"audio/midi\":{\"source\":\"apache\",\"extensions\":[\"mid\",\"midi\",\"kar\",\"rmi\"]},\"audio/mobile-xmf\":{\"source\":\"iana\"},\"audio/mp3\":{\"compressible\":false,\"extensions\":[\"mp3\"]},\"audio/mp4\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"m4a\",\"mp4a\"]},\"audio/mp4a-latm\":{\"source\":\"iana\"},\"audio/mpa\":{\"source\":\"iana\"},\"audio/mpa-robust\":{\"source\":\"iana\"},\"audio/mpeg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]},\"audio/mpeg4-generic\":{\"source\":\"iana\"},\"audio/musepack\":{\"source\":\"apache\"},\"audio/ogg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"oga\",\"ogg\",\"spx\"]},\"audio/opus\":{\"source\":\"iana\"},\"audio/parityfec\":{\"source\":\"iana\"},\"audio/pcma\":{\"source\":\"iana\"},\"audio/pcma-wb\":{\"source\":\"iana\"},\"audio/pcmu\":{\"source\":\"iana\"},\"audio/pcmu-wb\":{\"source\":\"iana\"},\"audio/prs.sid\":{\"source\":\"iana\"},\"audio/qcelp\":{\"source\":\"iana\"},\"audio/raptorfec\":{\"source\":\"iana\"},\"audio/red\":{\"source\":\"iana\"},\"audio/rtp-enc-aescm128\":{\"source\":\"iana\"},\"audio/rtp-midi\":{\"source\":\"iana\"},\"audio/rtploopback\":{\"source\":\"iana\"},\"audio/rtx\":{\"source\":\"iana\"},\"audio/s3m\":{\"source\":\"apache\",\"extensions\":[\"s3m\"]},\"audio/silk\":{\"source\":\"apache\",\"extensions\":[\"sil\"]},\"audio/smv\":{\"source\":\"iana\"},\"audio/smv-qcp\":{\"source\":\"iana\"},\"audio/smv0\":{\"source\":\"iana\"},\"audio/sp-midi\":{\"source\":\"iana\"},\"audio/speex\":{\"source\":\"iana\"},\"audio/t140c\":{\"source\":\"iana\"},\"audio/t38\":{\"source\":\"iana\"},\"audio/telephone-event\":{\"source\":\"iana\"},\"audio/tone\":{\"source\":\"iana\"},\"audio/uemclip\":{\"source\":\"iana\"},\"audio/ulpfec\":{\"source\":\"iana\"},\"audio/vdvi\":{\"source\":\"iana\"},\"audio/vmr-wb\":{\"source\":\"iana\"},\"audio/vnd.3gpp.iufp\":{\"source\":\"iana\"},\"audio/vnd.4sb\":{\"source\":\"iana\"},\"audio/vnd.audiokoz\":{\"source\":\"iana\"},\"audio/vnd.celp\":{\"source\":\"iana\"},\"audio/vnd.cisco.nse\":{\"source\":\"iana\"},\"audio/vnd.cmles.radio-events\":{\"source\":\"iana\"},\"audio/vnd.cns.anp1\":{\"source\":\"iana\"},\"audio/vnd.cns.inf1\":{\"source\":\"iana\"},\"audio/vnd.dece.audio\":{\"source\":\"iana\",\"extensions\":[\"uva\",\"uvva\"]},\"audio/vnd.digital-winds\":{\"source\":\"iana\",\"extensions\":[\"eol\"]},\"audio/vnd.dlna.adts\":{\"source\":\"iana\"},\"audio/vnd.dolby.heaac.1\":{\"source\":\"iana\"},\"audio/vnd.dolby.heaac.2\":{\"source\":\"iana\"},\"audio/vnd.dolby.mlp\":{\"source\":\"iana\"},\"audio/vnd.dolby.mps\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2x\":{\"source\":\"iana\"},\"audio/vnd.dolby.pl2z\":{\"source\":\"iana\"},\"audio/vnd.dolby.pulse.1\":{\"source\":\"iana\"},\"audio/vnd.dra\":{\"source\":\"iana\",\"extensions\":[\"dra\"]},\"audio/vnd.dts\":{\"source\":\"iana\",\"extensions\":[\"dts\"]},\"audio/vnd.dts.hd\":{\"source\":\"iana\",\"extensions\":[\"dtshd\"]},\"audio/vnd.dvb.file\":{\"source\":\"iana\"},\"audio/vnd.everad.plj\":{\"source\":\"iana\"},\"audio/vnd.hns.audio\":{\"source\":\"iana\"},\"audio/vnd.lucent.voice\":{\"source\":\"iana\",\"extensions\":[\"lvp\"]},\"audio/vnd.ms-playready.media.pya\":{\"source\":\"iana\",\"extensions\":[\"pya\"]},\"audio/vnd.nokia.mobile-xmf\":{\"source\":\"iana\"},\"audio/vnd.nortel.vbk\":{\"source\":\"iana\"},\"audio/vnd.nuera.ecelp4800\":{\"source\":\"iana\",\"extensions\":[\"ecelp4800\"]},\"audio/vnd.nuera.ecelp7470\":{\"source\":\"iana\",\"extensions\":[\"ecelp7470\"]},\"audio/vnd.nuera.ecelp9600\":{\"source\":\"iana\",\"extensions\":[\"ecelp9600\"]},\"audio/vnd.octel.sbc\":{\"source\":\"iana\"},\"audio/vnd.presonus.multitrack\":{\"source\":\"iana\"},\"audio/vnd.qcelp\":{\"source\":\"iana\"},\"audio/vnd.rhetorex.32kadpcm\":{\"source\":\"iana\"},\"audio/vnd.rip\":{\"source\":\"iana\",\"extensions\":[\"rip\"]},\"audio/vnd.rn-realaudio\":{\"compressible\":false},\"audio/vnd.sealedmedia.softseal.mpeg\":{\"source\":\"iana\"},\"audio/vnd.vmx.cvsd\":{\"source\":\"iana\"},\"audio/vnd.wave\":{\"compressible\":false},\"audio/vorbis\":{\"source\":\"iana\",\"compressible\":false},\"audio/vorbis-config\":{\"source\":\"iana\"},\"audio/wav\":{\"compressible\":false,\"extensions\":[\"wav\"]},\"audio/wave\":{\"compressible\":false,\"extensions\":[\"wav\"]},\"audio/webm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"weba\"]},\"audio/x-aac\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"aac\"]},\"audio/x-aiff\":{\"source\":\"apache\",\"extensions\":[\"aif\",\"aiff\",\"aifc\"]},\"audio/x-caf\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"caf\"]},\"audio/x-flac\":{\"source\":\"apache\",\"extensions\":[\"flac\"]},\"audio/x-m4a\":{\"source\":\"nginx\",\"extensions\":[\"m4a\"]},\"audio/x-matroska\":{\"source\":\"apache\",\"extensions\":[\"mka\"]},\"audio/x-mpegurl\":{\"source\":\"apache\",\"extensions\":[\"m3u\"]},\"audio/x-ms-wax\":{\"source\":\"apache\",\"extensions\":[\"wax\"]},\"audio/x-ms-wma\":{\"source\":\"apache\",\"extensions\":[\"wma\"]},\"audio/x-pn-realaudio\":{\"source\":\"apache\",\"extensions\":[\"ram\",\"ra\"]},\"audio/x-pn-realaudio-plugin\":{\"source\":\"apache\",\"extensions\":[\"rmp\"]},\"audio/x-realaudio\":{\"source\":\"nginx\",\"extensions\":[\"ra\"]},\"audio/x-tta\":{\"source\":\"apache\"},\"audio/x-wav\":{\"source\":\"apache\",\"extensions\":[\"wav\"]},\"audio/xm\":{\"source\":\"apache\",\"extensions\":[\"xm\"]},\"chemical/x-cdx\":{\"source\":\"apache\",\"extensions\":[\"cdx\"]},\"chemical/x-cif\":{\"source\":\"apache\",\"extensions\":[\"cif\"]},\"chemical/x-cmdf\":{\"source\":\"apache\",\"extensions\":[\"cmdf\"]},\"chemical/x-cml\":{\"source\":\"apache\",\"extensions\":[\"cml\"]},\"chemical/x-csml\":{\"source\":\"apache\",\"extensions\":[\"csml\"]},\"chemical/x-pdb\":{\"source\":\"apache\"},\"chemical/x-xyz\":{\"source\":\"apache\",\"extensions\":[\"xyz\"]},\"font/collection\":{\"source\":\"iana\",\"extensions\":[\"ttc\"]},\"font/otf\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"otf\"]},\"font/sfnt\":{\"source\":\"iana\"},\"font/ttf\":{\"source\":\"iana\",\"extensions\":[\"ttf\"]},\"font/woff\":{\"source\":\"iana\",\"extensions\":[\"woff\"]},\"font/woff2\":{\"source\":\"iana\",\"extensions\":[\"woff2\"]},\"image/aces\":{\"source\":\"iana\"},\"image/apng\":{\"compressible\":false,\"extensions\":[\"apng\"]},\"image/bmp\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"bmp\"]},\"image/cgm\":{\"source\":\"iana\",\"extensions\":[\"cgm\"]},\"image/dicom-rle\":{\"source\":\"iana\"},\"image/emf\":{\"source\":\"iana\"},\"image/fits\":{\"source\":\"iana\"},\"image/g3fax\":{\"source\":\"iana\",\"extensions\":[\"g3\"]},\"image/gif\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"gif\"]},\"image/ief\":{\"source\":\"iana\",\"extensions\":[\"ief\"]},\"image/jls\":{\"source\":\"iana\"},\"image/jp2\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"jp2\",\"jpg2\"]},\"image/jpeg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"jpeg\",\"jpg\",\"jpe\"]},\"image/jpm\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"jpm\"]},\"image/jpx\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"jpx\",\"jpf\"]},\"image/ktx\":{\"source\":\"iana\",\"extensions\":[\"ktx\"]},\"image/naplps\":{\"source\":\"iana\"},\"image/pjpeg\":{\"compressible\":false},\"image/png\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"png\"]},\"image/prs.btif\":{\"source\":\"iana\",\"extensions\":[\"btif\"]},\"image/prs.pti\":{\"source\":\"iana\"},\"image/pwg-raster\":{\"source\":\"iana\"},\"image/sgi\":{\"source\":\"apache\",\"extensions\":[\"sgi\"]},\"image/svg+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"svg\",\"svgz\"]},\"image/t38\":{\"source\":\"iana\"},\"image/tiff\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"tiff\",\"tif\"]},\"image/tiff-fx\":{\"source\":\"iana\"},\"image/vnd.adobe.photoshop\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"psd\"]},\"image/vnd.airzip.accelerator.azv\":{\"source\":\"iana\"},\"image/vnd.cns.inf2\":{\"source\":\"iana\"},\"image/vnd.dece.graphic\":{\"source\":\"iana\",\"extensions\":[\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]},\"image/vnd.djvu\":{\"source\":\"iana\",\"extensions\":[\"djvu\",\"djv\"]},\"image/vnd.dvb.subtitle\":{\"source\":\"iana\",\"extensions\":[\"sub\"]},\"image/vnd.dwg\":{\"source\":\"iana\",\"extensions\":[\"dwg\"]},\"image/vnd.dxf\":{\"source\":\"iana\",\"extensions\":[\"dxf\"]},\"image/vnd.fastbidsheet\":{\"source\":\"iana\",\"extensions\":[\"fbs\"]},\"image/vnd.fpx\":{\"source\":\"iana\",\"extensions\":[\"fpx\"]},\"image/vnd.fst\":{\"source\":\"iana\",\"extensions\":[\"fst\"]},\"image/vnd.fujixerox.edmics-mmr\":{\"source\":\"iana\",\"extensions\":[\"mmr\"]},\"image/vnd.fujixerox.edmics-rlc\":{\"source\":\"iana\",\"extensions\":[\"rlc\"]},\"image/vnd.globalgraphics.pgb\":{\"source\":\"iana\"},\"image/vnd.microsoft.icon\":{\"source\":\"iana\"},\"image/vnd.mix\":{\"source\":\"iana\"},\"image/vnd.mozilla.apng\":{\"source\":\"iana\"},\"image/vnd.ms-modi\":{\"source\":\"iana\",\"extensions\":[\"mdi\"]},\"image/vnd.ms-photo\":{\"source\":\"apache\",\"extensions\":[\"wdp\"]},\"image/vnd.net-fpx\":{\"source\":\"iana\",\"extensions\":[\"npx\"]},\"image/vnd.radiance\":{\"source\":\"iana\"},\"image/vnd.sealed.png\":{\"source\":\"iana\"},\"image/vnd.sealedmedia.softseal.gif\":{\"source\":\"iana\"},\"image/vnd.sealedmedia.softseal.jpg\":{\"source\":\"iana\"},\"image/vnd.svf\":{\"source\":\"iana\"},\"image/vnd.tencent.tap\":{\"source\":\"iana\"},\"image/vnd.valve.source.texture\":{\"source\":\"iana\"},\"image/vnd.wap.wbmp\":{\"source\":\"iana\",\"extensions\":[\"wbmp\"]},\"image/vnd.xiff\":{\"source\":\"iana\",\"extensions\":[\"xif\"]},\"image/vnd.zbrush.pcx\":{\"source\":\"iana\"},\"image/webp\":{\"source\":\"apache\",\"extensions\":[\"webp\"]},\"image/wmf\":{\"source\":\"iana\"},\"image/x-3ds\":{\"source\":\"apache\",\"extensions\":[\"3ds\"]},\"image/x-cmu-raster\":{\"source\":\"apache\",\"extensions\":[\"ras\"]},\"image/x-cmx\":{\"source\":\"apache\",\"extensions\":[\"cmx\"]},\"image/x-freehand\":{\"source\":\"apache\",\"extensions\":[\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]},\"image/x-icon\":{\"source\":\"apache\",\"compressible\":true,\"extensions\":[\"ico\"]},\"image/x-jng\":{\"source\":\"nginx\",\"extensions\":[\"jng\"]},\"image/x-mrsid-image\":{\"source\":\"apache\",\"extensions\":[\"sid\"]},\"image/x-ms-bmp\":{\"source\":\"nginx\",\"compressible\":true,\"extensions\":[\"bmp\"]},\"image/x-pcx\":{\"source\":\"apache\",\"extensions\":[\"pcx\"]},\"image/x-pict\":{\"source\":\"apache\",\"extensions\":[\"pic\",\"pct\"]},\"image/x-portable-anymap\":{\"source\":\"apache\",\"extensions\":[\"pnm\"]},\"image/x-portable-bitmap\":{\"source\":\"apache\",\"extensions\":[\"pbm\"]},\"image/x-portable-graymap\":{\"source\":\"apache\",\"extensions\":[\"pgm\"]},\"image/x-portable-pixmap\":{\"source\":\"apache\",\"extensions\":[\"ppm\"]},\"image/x-rgb\":{\"source\":\"apache\",\"extensions\":[\"rgb\"]},\"image/x-tga\":{\"source\":\"apache\",\"extensions\":[\"tga\"]},\"image/x-xbitmap\":{\"source\":\"apache\",\"extensions\":[\"xbm\"]},\"image/x-xcf\":{\"compressible\":false},\"image/x-xpixmap\":{\"source\":\"apache\",\"extensions\":[\"xpm\"]},\"image/x-xwindowdump\":{\"source\":\"apache\",\"extensions\":[\"xwd\"]},\"message/cpim\":{\"source\":\"iana\"},\"message/delivery-status\":{\"source\":\"iana\"},\"message/disposition-notification\":{\"source\":\"iana\",\"extensions\":[\"disposition-notification\"]},\"message/external-body\":{\"source\":\"iana\"},\"message/feedback-report\":{\"source\":\"iana\"},\"message/global\":{\"source\":\"iana\",\"extensions\":[\"u8msg\"]},\"message/global-delivery-status\":{\"source\":\"iana\",\"extensions\":[\"u8dsn\"]},\"message/global-disposition-notification\":{\"source\":\"iana\",\"extensions\":[\"u8mdn\"]},\"message/global-headers\":{\"source\":\"iana\",\"extensions\":[\"u8hdr\"]},\"message/http\":{\"source\":\"iana\",\"compressible\":false},\"message/imdn+xml\":{\"source\":\"iana\",\"compressible\":true},\"message/news\":{\"source\":\"iana\"},\"message/partial\":{\"source\":\"iana\",\"compressible\":false},\"message/rfc822\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"eml\",\"mime\"]},\"message/s-http\":{\"source\":\"iana\"},\"message/sip\":{\"source\":\"iana\"},\"message/sipfrag\":{\"source\":\"iana\"},\"message/tracking-status\":{\"source\":\"iana\"},\"message/vnd.si.simp\":{\"source\":\"iana\"},\"message/vnd.wfa.wsc\":{\"source\":\"iana\",\"extensions\":[\"wsc\"]},\"model/3mf\":{\"source\":\"iana\"},\"model/gltf+json\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"gltf\"]},\"model/gltf-binary\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"glb\"]},\"model/iges\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"igs\",\"iges\"]},\"model/mesh\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"msh\",\"mesh\",\"silo\"]},\"model/vnd.collada+xml\":{\"source\":\"iana\",\"extensions\":[\"dae\"]},\"model/vnd.dwf\":{\"source\":\"iana\",\"extensions\":[\"dwf\"]},\"model/vnd.flatland.3dml\":{\"source\":\"iana\"},\"model/vnd.gdl\":{\"source\":\"iana\",\"extensions\":[\"gdl\"]},\"model/vnd.gs-gdl\":{\"source\":\"apache\"},\"model/vnd.gs.gdl\":{\"source\":\"iana\"},\"model/vnd.gtw\":{\"source\":\"iana\",\"extensions\":[\"gtw\"]},\"model/vnd.moml+xml\":{\"source\":\"iana\"},\"model/vnd.mts\":{\"source\":\"iana\",\"extensions\":[\"mts\"]},\"model/vnd.opengex\":{\"source\":\"iana\"},\"model/vnd.parasolid.transmit.binary\":{\"source\":\"iana\"},\"model/vnd.parasolid.transmit.text\":{\"source\":\"iana\"},\"model/vnd.rosette.annotated-data-model\":{\"source\":\"iana\"},\"model/vnd.valve.source.compiled-map\":{\"source\":\"iana\"},\"model/vnd.vtu\":{\"source\":\"iana\",\"extensions\":[\"vtu\"]},\"model/vrml\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"wrl\",\"vrml\"]},\"model/x3d+binary\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"x3db\",\"x3dbz\"]},\"model/x3d+fastinfoset\":{\"source\":\"iana\"},\"model/x3d+vrml\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"x3dv\",\"x3dvz\"]},\"model/x3d+xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"x3d\",\"x3dz\"]},\"model/x3d-vrml\":{\"source\":\"iana\"},\"multipart/alternative\":{\"source\":\"iana\",\"compressible\":false},\"multipart/appledouble\":{\"source\":\"iana\"},\"multipart/byteranges\":{\"source\":\"iana\"},\"multipart/digest\":{\"source\":\"iana\"},\"multipart/encrypted\":{\"source\":\"iana\",\"compressible\":false},\"multipart/form-data\":{\"source\":\"iana\",\"compressible\":false},\"multipart/header-set\":{\"source\":\"iana\"},\"multipart/mixed\":{\"source\":\"iana\",\"compressible\":false},\"multipart/multilingual\":{\"source\":\"iana\"},\"multipart/parallel\":{\"source\":\"iana\"},\"multipart/related\":{\"source\":\"iana\",\"compressible\":false},\"multipart/report\":{\"source\":\"iana\"},\"multipart/signed\":{\"source\":\"iana\",\"compressible\":false},\"multipart/vnd.bint.med-plus\":{\"source\":\"iana\"},\"multipart/voice-message\":{\"source\":\"iana\"},\"multipart/x-mixed-replace\":{\"source\":\"iana\"},\"text/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"text/cache-manifest\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"appcache\",\"manifest\"]},\"text/calendar\":{\"source\":\"iana\",\"extensions\":[\"ics\",\"ifb\"]},\"text/calender\":{\"compressible\":true},\"text/cmd\":{\"compressible\":true},\"text/coffeescript\":{\"extensions\":[\"coffee\",\"litcoffee\"]},\"text/css\":{\"source\":\"iana\",\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"css\"]},\"text/csv\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"csv\"]},\"text/csv-schema\":{\"source\":\"iana\"},\"text/directory\":{\"source\":\"iana\"},\"text/dns\":{\"source\":\"iana\"},\"text/ecmascript\":{\"source\":\"iana\"},\"text/encaprtp\":{\"source\":\"iana\"},\"text/enriched\":{\"source\":\"iana\"},\"text/fwdred\":{\"source\":\"iana\"},\"text/grammar-ref-list\":{\"source\":\"iana\"},\"text/html\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"html\",\"htm\",\"shtml\"]},\"text/jade\":{\"extensions\":[\"jade\"]},\"text/javascript\":{\"source\":\"iana\",\"compressible\":true},\"text/jcr-cnd\":{\"source\":\"iana\"},\"text/jsx\":{\"compressible\":true,\"extensions\":[\"jsx\"]},\"text/less\":{\"extensions\":[\"less\"]},\"text/markdown\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"markdown\",\"md\"]},\"text/mathml\":{\"source\":\"nginx\",\"extensions\":[\"mml\"]},\"text/mizar\":{\"source\":\"iana\"},\"text/n3\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"n3\"]},\"text/parameters\":{\"source\":\"iana\"},\"text/parityfec\":{\"source\":\"iana\"},\"text/plain\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]},\"text/provenance-notation\":{\"source\":\"iana\"},\"text/prs.fallenstein.rst\":{\"source\":\"iana\"},\"text/prs.lines.tag\":{\"source\":\"iana\",\"extensions\":[\"dsc\"]},\"text/prs.prop.logic\":{\"source\":\"iana\"},\"text/raptorfec\":{\"source\":\"iana\"},\"text/red\":{\"source\":\"iana\"},\"text/rfc822-headers\":{\"source\":\"iana\"},\"text/richtext\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtx\"]},\"text/rtf\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"rtf\"]},\"text/rtp-enc-aescm128\":{\"source\":\"iana\"},\"text/rtploopback\":{\"source\":\"iana\"},\"text/rtx\":{\"source\":\"iana\"},\"text/sgml\":{\"source\":\"iana\",\"extensions\":[\"sgml\",\"sgm\"]},\"text/shex\":{\"extensions\":[\"shex\"]},\"text/slim\":{\"extensions\":[\"slim\",\"slm\"]},\"text/strings\":{\"source\":\"iana\"},\"text/stylus\":{\"extensions\":[\"stylus\",\"styl\"]},\"text/t140\":{\"source\":\"iana\"},\"text/tab-separated-values\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"tsv\"]},\"text/troff\":{\"source\":\"iana\",\"extensions\":[\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]},\"text/turtle\":{\"source\":\"iana\",\"extensions\":[\"ttl\"]},\"text/ulpfec\":{\"source\":\"iana\"},\"text/uri-list\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"uri\",\"uris\",\"urls\"]},\"text/vcard\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"vcard\"]},\"text/vnd.a\":{\"source\":\"iana\"},\"text/vnd.abc\":{\"source\":\"iana\"},\"text/vnd.ascii-art\":{\"source\":\"iana\"},\"text/vnd.curl\":{\"source\":\"iana\",\"extensions\":[\"curl\"]},\"text/vnd.curl.dcurl\":{\"source\":\"apache\",\"extensions\":[\"dcurl\"]},\"text/vnd.curl.mcurl\":{\"source\":\"apache\",\"extensions\":[\"mcurl\"]},\"text/vnd.curl.scurl\":{\"source\":\"apache\",\"extensions\":[\"scurl\"]},\"text/vnd.debian.copyright\":{\"source\":\"iana\"},\"text/vnd.dmclientscript\":{\"source\":\"iana\"},\"text/vnd.dvb.subtitle\":{\"source\":\"iana\",\"extensions\":[\"sub\"]},\"text/vnd.esmertec.theme-descriptor\":{\"source\":\"iana\"},\"text/vnd.fly\":{\"source\":\"iana\",\"extensions\":[\"fly\"]},\"text/vnd.fmi.flexstor\":{\"source\":\"iana\",\"extensions\":[\"flx\"]},\"text/vnd.graphviz\":{\"source\":\"iana\",\"extensions\":[\"gv\"]},\"text/vnd.in3d.3dml\":{\"source\":\"iana\",\"extensions\":[\"3dml\"]},\"text/vnd.in3d.spot\":{\"source\":\"iana\",\"extensions\":[\"spot\"]},\"text/vnd.iptc.newsml\":{\"source\":\"iana\"},\"text/vnd.iptc.nitf\":{\"source\":\"iana\"},\"text/vnd.latex-z\":{\"source\":\"iana\"},\"text/vnd.motorola.reflex\":{\"source\":\"iana\"},\"text/vnd.ms-mediapackage\":{\"source\":\"iana\"},\"text/vnd.net2phone.commcenter.command\":{\"source\":\"iana\"},\"text/vnd.radisys.msml-basic-layout\":{\"source\":\"iana\"},\"text/vnd.si.uricatalogue\":{\"source\":\"iana\"},\"text/vnd.sun.j2me.app-descriptor\":{\"source\":\"iana\",\"extensions\":[\"jad\"]},\"text/vnd.trolltech.linguist\":{\"source\":\"iana\"},\"text/vnd.wap.si\":{\"source\":\"iana\"},\"text/vnd.wap.sl\":{\"source\":\"iana\"},\"text/vnd.wap.wml\":{\"source\":\"iana\",\"extensions\":[\"wml\"]},\"text/vnd.wap.wmlscript\":{\"source\":\"iana\",\"extensions\":[\"wmls\"]},\"text/vtt\":{\"charset\":\"UTF-8\",\"compressible\":true,\"extensions\":[\"vtt\"]},\"text/x-asm\":{\"source\":\"apache\",\"extensions\":[\"s\",\"asm\"]},\"text/x-c\":{\"source\":\"apache\",\"extensions\":[\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]},\"text/x-component\":{\"source\":\"nginx\",\"extensions\":[\"htc\"]},\"text/x-fortran\":{\"source\":\"apache\",\"extensions\":[\"f\",\"for\",\"f77\",\"f90\"]},\"text/x-gwt-rpc\":{\"compressible\":true},\"text/x-handlebars-template\":{\"extensions\":[\"hbs\"]},\"text/x-java-source\":{\"source\":\"apache\",\"extensions\":[\"java\"]},\"text/x-jquery-tmpl\":{\"compressible\":true},\"text/x-lua\":{\"extensions\":[\"lua\"]},\"text/x-markdown\":{\"compressible\":true,\"extensions\":[\"mkd\"]},\"text/x-nfo\":{\"source\":\"apache\",\"extensions\":[\"nfo\"]},\"text/x-opml\":{\"source\":\"apache\",\"extensions\":[\"opml\"]},\"text/x-org\":{\"compressible\":true,\"extensions\":[\"org\"]},\"text/x-pascal\":{\"source\":\"apache\",\"extensions\":[\"p\",\"pas\"]},\"text/x-processing\":{\"compressible\":true,\"extensions\":[\"pde\"]},\"text/x-sass\":{\"extensions\":[\"sass\"]},\"text/x-scss\":{\"extensions\":[\"scss\"]},\"text/x-setext\":{\"source\":\"apache\",\"extensions\":[\"etx\"]},\"text/x-sfv\":{\"source\":\"apache\",\"extensions\":[\"sfv\"]},\"text/x-suse-ymp\":{\"compressible\":true,\"extensions\":[\"ymp\"]},\"text/x-uuencode\":{\"source\":\"apache\",\"extensions\":[\"uu\"]},\"text/x-vcalendar\":{\"source\":\"apache\",\"extensions\":[\"vcs\"]},\"text/x-vcard\":{\"source\":\"apache\",\"extensions\":[\"vcf\"]},\"text/xml\":{\"source\":\"iana\",\"compressible\":true,\"extensions\":[\"xml\"]},\"text/xml-external-parsed-entity\":{\"source\":\"iana\"},\"text/yaml\":{\"extensions\":[\"yaml\",\"yml\"]},\"video/1d-interleaved-parityfec\":{\"source\":\"iana\"},\"video/3gpp\":{\"source\":\"iana\",\"extensions\":[\"3gp\",\"3gpp\"]},\"video/3gpp-tt\":{\"source\":\"iana\"},\"video/3gpp2\":{\"source\":\"iana\",\"extensions\":[\"3g2\"]},\"video/bmpeg\":{\"source\":\"iana\"},\"video/bt656\":{\"source\":\"iana\"},\"video/celb\":{\"source\":\"iana\"},\"video/dv\":{\"source\":\"iana\"},\"video/encaprtp\":{\"source\":\"iana\"},\"video/h261\":{\"source\":\"iana\",\"extensions\":[\"h261\"]},\"video/h263\":{\"source\":\"iana\",\"extensions\":[\"h263\"]},\"video/h263-1998\":{\"source\":\"iana\"},\"video/h263-2000\":{\"source\":\"iana\"},\"video/h264\":{\"source\":\"iana\",\"extensions\":[\"h264\"]},\"video/h264-rcdo\":{\"source\":\"iana\"},\"video/h264-svc\":{\"source\":\"iana\"},\"video/h265\":{\"source\":\"iana\"},\"video/iso.segment\":{\"source\":\"iana\"},\"video/jpeg\":{\"source\":\"iana\",\"extensions\":[\"jpgv\"]},\"video/jpeg2000\":{\"source\":\"iana\"},\"video/jpm\":{\"source\":\"apache\",\"extensions\":[\"jpm\",\"jpgm\"]},\"video/mj2\":{\"source\":\"iana\",\"extensions\":[\"mj2\",\"mjp2\"]},\"video/mp1s\":{\"source\":\"iana\"},\"video/mp2p\":{\"source\":\"iana\"},\"video/mp2t\":{\"source\":\"iana\",\"extensions\":[\"ts\"]},\"video/mp4\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"mp4\",\"mp4v\",\"mpg4\"]},\"video/mp4v-es\":{\"source\":\"iana\"},\"video/mpeg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]},\"video/mpeg4-generic\":{\"source\":\"iana\"},\"video/mpv\":{\"source\":\"iana\"},\"video/nv\":{\"source\":\"iana\"},\"video/ogg\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"ogv\"]},\"video/parityfec\":{\"source\":\"iana\"},\"video/pointer\":{\"source\":\"iana\"},\"video/quicktime\":{\"source\":\"iana\",\"compressible\":false,\"extensions\":[\"qt\",\"mov\"]},\"video/raptorfec\":{\"source\":\"iana\"},\"video/raw\":{\"source\":\"iana\"},\"video/rtp-enc-aescm128\":{\"source\":\"iana\"},\"video/rtploopback\":{\"source\":\"iana\"},\"video/rtx\":{\"source\":\"iana\"},\"video/smpte291\":{\"source\":\"iana\"},\"video/smpte292m\":{\"source\":\"iana\"},\"video/ulpfec\":{\"source\":\"iana\"},\"video/vc1\":{\"source\":\"iana\"},\"video/vnd.cctv\":{\"source\":\"iana\"},\"video/vnd.dece.hd\":{\"source\":\"iana\",\"extensions\":[\"uvh\",\"uvvh\"]},\"video/vnd.dece.mobile\":{\"source\":\"iana\",\"extensions\":[\"uvm\",\"uvvm\"]},\"video/vnd.dece.mp4\":{\"source\":\"iana\"},\"video/vnd.dece.pd\":{\"source\":\"iana\",\"extensions\":[\"uvp\",\"uvvp\"]},\"video/vnd.dece.sd\":{\"source\":\"iana\",\"extensions\":[\"uvs\",\"uvvs\"]},\"video/vnd.dece.video\":{\"source\":\"iana\",\"extensions\":[\"uvv\",\"uvvv\"]},\"video/vnd.directv.mpeg\":{\"source\":\"iana\"},\"video/vnd.directv.mpeg-tts\":{\"source\":\"iana\"},\"video/vnd.dlna.mpeg-tts\":{\"source\":\"iana\"},\"video/vnd.dvb.file\":{\"source\":\"iana\",\"extensions\":[\"dvb\"]},\"video/vnd.fvt\":{\"source\":\"iana\",\"extensions\":[\"fvt\"]},\"video/vnd.hns.video\":{\"source\":\"iana\"},\"video/vnd.iptvforum.1dparityfec-1010\":{\"source\":\"iana\"},\"video/vnd.iptvforum.1dparityfec-2005\":{\"source\":\"iana\"},\"video/vnd.iptvforum.2dparityfec-1010\":{\"source\":\"iana\"},\"video/vnd.iptvforum.2dparityfec-2005\":{\"source\":\"iana\"},\"video/vnd.iptvforum.ttsavc\":{\"source\":\"iana\"},\"video/vnd.iptvforum.ttsmpeg2\":{\"source\":\"iana\"},\"video/vnd.motorola.video\":{\"source\":\"iana\"},\"video/vnd.motorola.videop\":{\"source\":\"iana\"},\"video/vnd.mpegurl\":{\"source\":\"iana\",\"extensions\":[\"mxu\",\"m4u\"]},\"video/vnd.ms-playready.media.pyv\":{\"source\":\"iana\",\"extensions\":[\"pyv\"]},\"video/vnd.nokia.interleaved-multimedia\":{\"source\":\"iana\"},\"video/vnd.nokia.mp4vr\":{\"source\":\"iana\"},\"video/vnd.nokia.videovoip\":{\"source\":\"iana\"},\"video/vnd.objectvideo\":{\"source\":\"iana\"},\"video/vnd.radgamettools.bink\":{\"source\":\"iana\"},\"video/vnd.radgamettools.smacker\":{\"source\":\"iana\"},\"video/vnd.sealed.mpeg1\":{\"source\":\"iana\"},\"video/vnd.sealed.mpeg4\":{\"source\":\"iana\"},\"video/vnd.sealed.swf\":{\"source\":\"iana\"},\"video/vnd.sealedmedia.softseal.mov\":{\"source\":\"iana\"},\"video/vnd.uvvu.mp4\":{\"source\":\"iana\",\"extensions\":[\"uvu\",\"uvvu\"]},\"video/vnd.vivo\":{\"source\":\"iana\",\"extensions\":[\"viv\"]},\"video/vp8\":{\"source\":\"iana\"},\"video/webm\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"webm\"]},\"video/x-f4v\":{\"source\":\"apache\",\"extensions\":[\"f4v\"]},\"video/x-fli\":{\"source\":\"apache\",\"extensions\":[\"fli\"]},\"video/x-flv\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"flv\"]},\"video/x-m4v\":{\"source\":\"apache\",\"extensions\":[\"m4v\"]},\"video/x-matroska\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"mkv\",\"mk3d\",\"mks\"]},\"video/x-mng\":{\"source\":\"apache\",\"extensions\":[\"mng\"]},\"video/x-ms-asf\":{\"source\":\"apache\",\"extensions\":[\"asf\",\"asx\"]},\"video/x-ms-vob\":{\"source\":\"apache\",\"extensions\":[\"vob\"]},\"video/x-ms-wm\":{\"source\":\"apache\",\"extensions\":[\"wm\"]},\"video/x-ms-wmv\":{\"source\":\"apache\",\"compressible\":false,\"extensions\":[\"wmv\"]},\"video/x-ms-wmx\":{\"source\":\"apache\",\"extensions\":[\"wmx\"]},\"video/x-ms-wvx\":{\"source\":\"apache\",\"extensions\":[\"wvx\"]},\"video/x-msvideo\":{\"source\":\"apache\",\"extensions\":[\"avi\"]},\"video/x-sgi-movie\":{\"source\":\"apache\",\"extensions\":[\"movie\"]},\"video/x-smv\":{\"source\":\"apache\",\"extensions\":[\"smv\"]},\"x-conference/x-cooltalk\":{\"source\":\"apache\",\"extensions\":[\"ice\"]},\"x-shader/x-fragment\":{\"compressible\":true},\"x-shader/x-vertex\":{\"compressible\":true}}');\n\n//# sourceURL=webpack://@jbrowse/cli/../../node_modules/.pnpm/mime-db@1.33.0/node_modules/mime-db/db.json?\n}");
|
|
1469
|
-
|
|
1470
|
-
/***/ }
|
|
1471
|
-
|
|
1472
|
-
/******/ });
|
|
1473
|
-
/************************************************************************/
|
|
1474
|
-
/******/ // The module cache
|
|
1475
|
-
/******/ const __webpack_module_cache__ = {};
|
|
1476
|
-
/******/
|
|
1477
|
-
/******/ // The require function
|
|
1478
|
-
/******/ function __webpack_require__(moduleId) {
|
|
1479
|
-
/******/ // Check if module is in cache
|
|
1480
|
-
/******/ const cachedModule = __webpack_module_cache__[moduleId];
|
|
1481
|
-
/******/ if (cachedModule !== undefined) {
|
|
1482
|
-
/******/ return cachedModule.exports;
|
|
1483
|
-
/******/ }
|
|
1484
|
-
/******/ // Create a new module (and put it into the cache)
|
|
1485
|
-
/******/ const module = __webpack_module_cache__[moduleId] = {
|
|
1486
|
-
/******/ // no module.id needed
|
|
1487
|
-
/******/ // no module.loaded needed
|
|
1488
|
-
/******/ exports: {}
|
|
1489
|
-
/******/ };
|
|
1490
|
-
/******/
|
|
1491
|
-
/******/ // Execute the module function
|
|
1492
|
-
/******/ if (!(moduleId in __webpack_modules__)) {
|
|
1493
|
-
/******/ delete __webpack_module_cache__[moduleId];
|
|
1494
|
-
/******/ const e = new Error("Cannot find module '" + moduleId + "'");
|
|
1495
|
-
/******/ e.code = 'MODULE_NOT_FOUND';
|
|
1496
|
-
/******/ throw e;
|
|
1497
|
-
/******/ }
|
|
1498
|
-
/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
|
1499
|
-
/******/
|
|
1500
|
-
/******/ // Return the exports of the module
|
|
1501
|
-
/******/ return module.exports;
|
|
1502
|
-
/******/ }
|
|
1503
|
-
/******/
|
|
1504
|
-
/************************************************************************/
|
|
1505
|
-
/******/ /* webpack/runtime/compat get default export */
|
|
1506
|
-
/******/ (() => {
|
|
1507
|
-
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
1508
|
-
/******/ __webpack_require__.n = (module) => {
|
|
1509
|
-
/******/ const getter = module && module.__esModule ?
|
|
1510
|
-
/******/ () => (module['default']) :
|
|
1511
|
-
/******/ () => (module);
|
|
1512
|
-
/******/ __webpack_require__.d(getter, { a: getter });
|
|
1513
|
-
/******/ return getter;
|
|
1514
|
-
/******/ };
|
|
1515
|
-
/******/ })();
|
|
1516
|
-
/******/
|
|
1517
|
-
/******/ /* webpack/runtime/define property getters */
|
|
1518
|
-
/******/ (() => {
|
|
1519
|
-
/******/ // define getter/value functions for harmony exports
|
|
1520
|
-
/******/ __webpack_require__.d = (exports, definition) => {
|
|
1521
|
-
/******/ if(Array.isArray(definition)) {
|
|
1522
|
-
/******/ var i = 0;
|
|
1523
|
-
/******/ while(i < definition.length) {
|
|
1524
|
-
/******/ var key = definition[i++];
|
|
1525
|
-
/******/ var binding = definition[i++];
|
|
1526
|
-
/******/ if(!__webpack_require__.o(exports, key)) {
|
|
1527
|
-
/******/ if(binding === 0) {
|
|
1528
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, value: definition[i++] });
|
|
1529
|
-
/******/ } else {
|
|
1530
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: binding });
|
|
1531
|
-
/******/ }
|
|
1532
|
-
/******/ } else if(binding === 0) { i++; }
|
|
1533
|
-
/******/ }
|
|
1534
|
-
/******/ } else {
|
|
1535
|
-
/******/ for(var key in definition) {
|
|
1536
|
-
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
|
1537
|
-
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
|
1538
|
-
/******/ }
|
|
1539
|
-
/******/ }
|
|
1540
|
-
/******/ }
|
|
1541
|
-
/******/ };
|
|
1542
|
-
/******/ })();
|
|
1543
|
-
/******/
|
|
1544
|
-
/******/ /* webpack/runtime/hasOwnProperty shorthand */
|
|
1545
|
-
/******/ (() => {
|
|
1546
|
-
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
|
1547
|
-
/******/ })();
|
|
1548
|
-
/******/
|
|
1549
|
-
/******/ /* webpack/runtime/make namespace object */
|
|
1550
|
-
/******/ (() => {
|
|
1551
|
-
/******/ // define __esModule on exports
|
|
1552
|
-
/******/ __webpack_require__.r = (exports) => {
|
|
1553
|
-
/******/ if(Symbol.toStringTag) {
|
|
1554
|
-
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
1555
|
-
/******/ }
|
|
1556
|
-
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
1557
|
-
/******/ };
|
|
1558
|
-
/******/ })();
|
|
1559
|
-
/******/
|
|
1560
|
-
/************************************************************************/
|
|
1561
|
-
/******/
|
|
1562
|
-
/******/ // startup
|
|
1563
|
-
/******/ // Load entry module and return exports
|
|
1564
|
-
/******/ // This entry module can't be inlined because the eval devtool is used.
|
|
1565
|
-
/******/ let __webpack_exports__ = __webpack_require__("./src/bin.ts");
|
|
1566
|
-
/******/ module.exports = __webpack_exports__;
|
|
1567
|
-
/******/
|
|
1568
|
-
/******/ })()
|
|
1569
|
-
;
|