@jbrowse/plugin-gff3 3.6.5 → 4.0.0

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.
@@ -1,14 +1,14 @@
1
- import IntervalTree from '@flatten-js/interval-tree';
1
+ import { IntervalTree } from '@flatten-js/interval-tree';
2
2
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
3
  import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
4
  import type { Feature } from '@jbrowse/core/util/simpleFeature';
5
5
  import type { NoAssemblyRegion } from '@jbrowse/core/util/types';
6
6
  type StatusCallback = (arg: string) => void;
7
7
  export default class Gff3Adapter extends BaseFeatureDataAdapter {
8
- calculatedIntervalTreeMap: Record<string, IntervalTree>;
8
+ calculatedIntervalTreeMap: Record<string, IntervalTree<Feature>>;
9
9
  gffFeatures?: Promise<{
10
10
  header: string;
11
- intervalTreeMap: Record<string, (sc?: StatusCallback) => IntervalTree>;
11
+ intervalTreeMap: Record<string, (sc?: StatusCallback) => IntervalTree<Feature>>;
12
12
  }>;
13
13
  private loadDataP;
14
14
  private loadData;
@@ -1,17 +1,14 @@
1
- import IntervalTree from '@flatten-js/interval-tree';
1
+ import { IntervalTree } from '@flatten-js/interval-tree';
2
2
  import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
3
  import { fetchAndMaybeUnzip } from '@jbrowse/core/util';
4
4
  import { openLocation } from '@jbrowse/core/util/io';
5
5
  import { ObservableCreate } from '@jbrowse/core/util/rxjs';
6
6
  import SimpleFeature from '@jbrowse/core/util/simpleFeature';
7
- import { parseStringSync } from 'gff-nostream';
8
- import { featureData } from '../featureData';
9
- import { parseGffBuffer } from './gffParser';
7
+ import { parseStringSyncJBrowse } from 'gff-nostream';
8
+ import { parseGffBuffer } from "./gffParser.js";
10
9
  export default class Gff3Adapter extends BaseFeatureDataAdapter {
11
- constructor() {
12
- super(...arguments);
13
- this.calculatedIntervalTreeMap = {};
14
- }
10
+ calculatedIntervalTreeMap = {};
11
+ gffFeatures;
15
12
  async loadDataP(opts) {
16
13
  const { statusCallback = () => { } } = opts || {};
17
14
  const buffer = await fetchAndMaybeUnzip(openLocation(this.getConf('gffLocation'), this.pluginManager), opts);
@@ -20,15 +17,16 @@ export default class Gff3Adapter extends BaseFeatureDataAdapter {
20
17
  refName,
21
18
  (sc) => {
22
19
  if (!this.calculatedIntervalTreeMap[refName]) {
23
- sc === null || sc === void 0 ? void 0 : sc('Parsing GFF data');
20
+ sc?.('Parsing GFF data');
24
21
  const intervalTree = new IntervalTree();
25
- for (const obj of parseStringSync(lines)
26
- .flat()
27
- .map((f, i) => new SimpleFeature({
28
- data: featureData(f),
29
- id: `${this.id}-${refName}-${i}`,
30
- }))) {
31
- intervalTree.insert([obj.get('start'), obj.get('end')], obj);
22
+ const features = parseStringSyncJBrowse(lines);
23
+ for (let i = 0, l = features.length; i < l; i++) {
24
+ const f = features[i];
25
+ const obj = new SimpleFeature({
26
+ data: f,
27
+ id: `${this.id}-${refName}-${i}`,
28
+ });
29
+ intervalTree.insert([f.start, f.end], obj);
32
30
  }
33
31
  this.calculatedIntervalTreeMap[refName] = intervalTree;
34
32
  }
@@ -59,14 +57,13 @@ export default class Gff3Adapter extends BaseFeatureDataAdapter {
59
57
  }
60
58
  getFeatures(query, opts = {}) {
61
59
  return ObservableCreate(async (observer) => {
62
- var _a;
63
60
  try {
64
61
  const { start, end, refName } = query;
65
62
  const { intervalTreeMap } = await this.loadData(opts);
66
- for (const f of ((_a = intervalTreeMap[refName]) === null || _a === void 0 ? void 0 : _a.call(intervalTreeMap, opts.statusCallback).search([
63
+ for (const f of intervalTreeMap[refName]?.(opts.statusCallback).search([
67
64
  start,
68
65
  end,
69
- ])) || []) {
66
+ ]) || []) {
70
67
  observer.next(f);
71
68
  }
72
69
  observer.complete();
@@ -1,4 +1,4 @@
1
- declare const Gff3Adapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
1
+ declare const Gff3Adapter: import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaType<{
2
2
  gffLocation: {
3
3
  type: string;
4
4
  defaultValue: {
@@ -6,5 +6,5 @@ declare const Gff3Adapter: import("@jbrowse/core/configuration/configurationSche
6
6
  locationType: string;
7
7
  };
8
8
  };
9
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
9
+ }, import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
10
10
  export default Gff3Adapter;
@@ -1,10 +1,10 @@
1
1
  import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
- import configSchema from './configSchema';
2
+ import configSchema from "./configSchema.js";
3
3
  export default function Gff3AdapterF(pluginManager) {
4
4
  pluginManager.addAdapterType(() => new AdapterType({
5
5
  name: 'Gff3Adapter',
6
6
  displayName: 'GFF3 adapter',
7
7
  configSchema,
8
- getAdapterClass: () => import('./Gff3Adapter').then(r => r.default),
8
+ getAdapterClass: () => import("./Gff3Adapter.js").then(r => r.default),
9
9
  }));
10
10
  }
@@ -8,15 +8,14 @@ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
8
8
  private configurePre;
9
9
  protected configurePre2(): Promise<{
10
10
  gff: TabixIndexedFile;
11
- dontRedispatch: string[];
11
+ dontRedispatchSet: Set<string>;
12
12
  }>;
13
13
  configure(opts?: BaseOptions): Promise<{
14
14
  gff: TabixIndexedFile;
15
- dontRedispatch: string[];
15
+ dontRedispatchSet: Set<string>;
16
16
  }>;
17
17
  getRefNames(opts?: BaseOptions): Promise<string[]>;
18
18
  getHeader(opts?: BaseOptions): Promise<string>;
19
19
  getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
20
20
  private getFeaturesHelper;
21
- private parseLine;
22
21
  }
@@ -5,9 +5,9 @@ import { openLocation } from '@jbrowse/core/util/io';
5
5
  import { doesIntersect2 } from '@jbrowse/core/util/range';
6
6
  import { ObservableCreate } from '@jbrowse/core/util/rxjs';
7
7
  import SimpleFeature from '@jbrowse/core/util/simpleFeature';
8
- import { parseStringSync } from 'gff-nostream';
9
- import { featureData } from '../featureData';
8
+ import { parseRecordsJBrowse } from 'gff-nostream';
10
9
  export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
10
+ configured;
11
11
  async configurePre(_opts) {
12
12
  const gffGzLocation = this.getConf('gffGzLocation');
13
13
  const indexType = this.getConf(['index', 'indexType']);
@@ -18,11 +18,10 @@ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
18
18
  csiFilehandle: indexType === 'CSI' ? openLocation(loc, this.pluginManager) : undefined,
19
19
  tbiFilehandle: indexType !== 'CSI' ? openLocation(loc, this.pluginManager) : undefined,
20
20
  chunkCacheSize: 50 * 2 ** 20,
21
- renameRefSeqs: (n) => n,
22
21
  });
23
22
  return {
24
23
  gff,
25
- dontRedispatch,
24
+ dontRedispatchSet: new Set(dontRedispatch),
26
25
  header: await gff.getHeader(),
27
26
  };
28
27
  }
@@ -55,26 +54,35 @@ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
55
54
  }, opts.stopToken);
56
55
  }
57
56
  async getFeaturesHelper(query, opts, metadata, observer, allowRedispatch, originalQuery = query) {
58
- var _a, _b;
59
57
  const { statusCallback = () => { } } = opts;
60
58
  try {
61
59
  const lines = [];
62
- const { dontRedispatch, gff } = await this.configure(opts);
63
- await updateStatus('Downloading features', statusCallback, () => gff.getLines(query.refName, query.start, query.end, (line, fileOffset) => {
64
- lines.push(this.parseLine(metadata.columnNumbers, line, fileOffset));
60
+ const { dontRedispatchSet, gff } = await this.configure(opts);
61
+ await updateStatus('Downloading features', statusCallback, () => gff.getLines(query.refName, query.start, query.end, (line, fileOffset, start, end) => {
62
+ const t1 = line.indexOf('\t');
63
+ const t2 = line.indexOf('\t', t1 + 1);
64
+ const t3 = line.indexOf('\t', t2 + 1);
65
+ const type = line.slice(t2 + 1, t3);
66
+ lines.push({
67
+ line,
68
+ lineHash: fileOffset,
69
+ start,
70
+ end,
71
+ hasEscapes: line.includes('%'),
72
+ type,
73
+ });
65
74
  }));
66
75
  if (allowRedispatch && lines.length) {
67
76
  let minStart = Number.POSITIVE_INFINITY;
68
77
  let maxEnd = Number.NEGATIVE_INFINITY;
69
- for (const line of lines) {
70
- const featureType = line.fields[2];
71
- if (!dontRedispatch.includes(featureType)) {
72
- const start = line.start - 1;
78
+ for (const rec of lines) {
79
+ if (!dontRedispatchSet.has(rec.type)) {
80
+ const start = rec.start - 1;
73
81
  if (start < minStart) {
74
82
  minStart = start;
75
83
  }
76
- if (line.end > maxEnd) {
77
- maxEnd = line.end;
84
+ if (rec.end > maxEnd) {
85
+ maxEnd = rec.end;
78
86
  }
79
87
  }
80
88
  }
@@ -83,28 +91,12 @@ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
83
91
  return;
84
92
  }
85
93
  }
86
- const gff3 = lines
87
- .map(lineRecord => {
88
- if (lineRecord.fields[8] && lineRecord.fields[8] !== '.') {
89
- if (!lineRecord.fields[8].includes('_lineHash')) {
90
- lineRecord.fields[8] += `;_lineHash=${lineRecord.lineHash}`;
91
- }
92
- }
93
- else {
94
- lineRecord.fields[8] = `_lineHash=${lineRecord.lineHash}`;
95
- }
96
- return lineRecord.fields.join('\t');
97
- })
98
- .join('\n');
99
- for (const featureLocs of parseStringSync(gff3)) {
100
- for (const featureLoc of featureLocs) {
101
- const f = new SimpleFeature({
102
- data: featureData(featureLoc),
103
- id: `${this.id}-offset-${(_b = (_a = featureLoc.attributes) === null || _a === void 0 ? void 0 : _a._lineHash) === null || _b === void 0 ? void 0 : _b[0]}`,
104
- });
105
- if (doesIntersect2(f.get('start'), f.get('end'), originalQuery.start, originalQuery.end)) {
106
- observer.next(f);
107
- }
94
+ for (const feature of parseRecordsJBrowse(lines)) {
95
+ if (doesIntersect2(feature.start, feature.end, originalQuery.start, originalQuery.end)) {
96
+ observer.next(new SimpleFeature({
97
+ data: feature,
98
+ id: `${this.id}-offset-${feature._lineHash}`,
99
+ }));
108
100
  }
109
101
  }
110
102
  observer.complete();
@@ -113,13 +105,4 @@ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
113
105
  observer.error(e);
114
106
  }
115
107
  }
116
- parseLine(columnNumbers, line, fileOffset) {
117
- const fields = line.split('\t');
118
- return {
119
- start: +fields[columnNumbers.start - 1],
120
- end: +fields[columnNumbers.end - 1],
121
- lineHash: fileOffset,
122
- fields,
123
- };
124
- }
125
108
  }
@@ -1,4 +1,4 @@
1
- declare const Gff3TabixAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
1
+ declare const Gff3TabixAdapter: import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaType<{
2
2
  gffGzLocation: {
3
3
  type: string;
4
4
  defaultValue: {
@@ -6,9 +6,9 @@ declare const Gff3TabixAdapter: import("@jbrowse/core/configuration/configuratio
6
6
  locationType: string;
7
7
  };
8
8
  };
9
- index: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
9
+ index: import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaType<{
10
10
  indexType: {
11
- model: import("mobx-state-tree").ISimpleType<string>;
11
+ model: import("@jbrowse/mobx-state-tree").ISimpleType<string>;
12
12
  type: string;
13
13
  defaultValue: string;
14
14
  };
@@ -19,10 +19,10 @@ declare const Gff3TabixAdapter: import("@jbrowse/core/configuration/configuratio
19
19
  locationType: string;
20
20
  };
21
21
  };
22
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
22
+ }, import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
23
23
  dontRedispatch: {
24
24
  type: string;
25
25
  defaultValue: string[];
26
26
  };
27
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
27
+ }, import("node_modules/@jbrowse/core/src/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
28
28
  export default Gff3TabixAdapter;
@@ -1,5 +1,5 @@
1
1
  import { ConfigurationSchema } from '@jbrowse/core/configuration';
2
- import { types } from 'mobx-state-tree';
2
+ import { types } from '@jbrowse/mobx-state-tree';
3
3
  function x() { }
4
4
  const Gff3TabixAdapter = ConfigurationSchema('Gff3TabixAdapter', {
5
5
  gffGzLocation: {
@@ -1,10 +1,10 @@
1
1
  import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
- import configSchema from './configSchema';
2
+ import configSchema from "./configSchema.js";
3
3
  export default function Gff3TabixAdapterF(pluginManager) {
4
4
  pluginManager.addAdapterType(() => new AdapterType({
5
5
  name: 'Gff3TabixAdapter',
6
6
  displayName: 'GFF3 tabix adapter',
7
7
  configSchema,
8
- getAdapterClass: () => import('./Gff3TabixAdapter').then(r => r.default),
8
+ getAdapterClass: () => import("./Gff3TabixAdapter.js").then(r => r.default),
9
9
  }));
10
10
  }
@@ -1,3 +1,13 @@
1
+ const DEFAULT_FIELDS = new Set([
2
+ 'start',
3
+ 'end',
4
+ 'seq_id',
5
+ 'score',
6
+ 'type',
7
+ 'source',
8
+ 'phase',
9
+ 'strand',
10
+ ]);
1
11
  export function featureData(data) {
2
12
  const { end, start, child_features, derived_features, attributes, type, source, phase, seq_id, score, strand, } = data;
3
13
  let strand2;
@@ -10,21 +20,11 @@ export function featureData(data) {
10
20
  else if (strand === '.') {
11
21
  strand2 = 0;
12
22
  }
13
- const defaultFields = new Set([
14
- 'start',
15
- 'end',
16
- 'seq_id',
17
- 'score',
18
- 'type',
19
- 'source',
20
- 'phase',
21
- 'strand',
22
- ]);
23
23
  const dataAttributes = attributes || {};
24
24
  const resultAttributes = {};
25
25
  for (const a of Object.keys(dataAttributes)) {
26
26
  let b = a.toLowerCase();
27
- if (defaultFields.has(b)) {
27
+ if (DEFAULT_FIELDS.has(b)) {
28
28
  b += '2';
29
29
  }
30
30
  if (dataAttributes[a] && a !== '_lineHash') {
package/esm/index.js CHANGED
@@ -1,12 +1,9 @@
1
1
  import Plugin from '@jbrowse/core/Plugin';
2
- import Gff3AdapterF from './Gff3Adapter';
3
- import Gff3TabixAdapterF from './Gff3TabixAdapter';
4
- import GuessGff3F from './GuessGff3';
2
+ import Gff3AdapterF from "./Gff3Adapter/index.js";
3
+ import Gff3TabixAdapterF from "./Gff3TabixAdapter/index.js";
4
+ import GuessGff3F from "./GuessGff3/index.js";
5
5
  export default class GFF3Plugin extends Plugin {
6
- constructor() {
7
- super(...arguments);
8
- this.name = 'GFF3Plugin';
9
- }
6
+ name = 'GFF3Plugin';
10
7
  install(pluginManager) {
11
8
  Gff3TabixAdapterF(pluginManager);
12
9
  Gff3AdapterF(pluginManager);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-gff3",
3
- "version": "3.6.5",
3
+ "version": "4.0.0",
4
4
  "description": "JBrowse 2 gff3.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -15,43 +15,35 @@
15
15
  "directory": "plugins/gff3"
16
16
  },
17
17
  "author": "JBrowse Team",
18
- "distMain": "dist/index.js",
19
- "srcMain": "src/index.ts",
20
- "main": "dist/index.js",
18
+ "main": "esm/index.js",
21
19
  "files": [
22
- "dist",
23
20
  "esm"
24
21
  ],
25
- "scripts": {
26
- "build": "npm-run-all build:*",
27
- "test": "cd ../..; jest --passWithNoTests plugins/gff3 --passWithNoTests",
28
- "prepublishOnly": "yarn test",
29
- "prepack": "yarn build && yarn useDist",
30
- "postpack": "yarn useSrc",
31
- "useDist": "node ../../scripts/useDist.js",
32
- "useSrc": "node ../../scripts/useSrc.js",
33
- "prebuild": "npm run clean",
34
- "build:esm": "tsc --build tsconfig.build.esm.json",
35
- "build:commonjs": "tsc --build tsconfig.build.commonjs.json",
36
- "clean": "rimraf dist esm *.tsbuildinfo"
37
- },
38
22
  "dependencies": {
39
- "@flatten-js/interval-tree": "^1.0.15",
40
- "@gmod/bgzf-filehandle": "^4.0.0",
41
- "@gmod/tabix": "^3.0.1",
42
- "@jbrowse/core": "^3.6.5",
43
- "@jbrowse/plugin-linear-genome-view": "^3.6.5",
44
- "@mui/material": "^7.0.0",
45
- "gff-nostream": "^1.3.3",
46
- "mobx": "^6.0.0",
47
- "mobx-state-tree": "^5.0.0",
48
- "rxjs": "^7.0.0"
23
+ "@flatten-js/interval-tree": "^2.0.3",
24
+ "@gmod/tabix": "^3.2.2",
25
+ "@jbrowse/mobx-state-tree": "^5.5.0",
26
+ "gff-nostream": "^3.0.2",
27
+ "mobx": "^6.15.0",
28
+ "rxjs": "^7.8.2",
29
+ "@jbrowse/core": "^4.0.0"
49
30
  },
50
31
  "publishConfig": {
51
32
  "access": "public"
52
33
  },
53
- "distModule": "esm/index.js",
54
- "srcModule": "src/index.ts",
55
- "module": "esm/index.js",
56
- "gitHead": "354d0a87b757b4d84f824b47507662f6f3a1693f"
57
- }
34
+ "sideEffects": false,
35
+ "scripts": {
36
+ "build": "pnpm run /^build:/",
37
+ "test": "cd ../..; jest --passWithNoTests plugins/gff3 --passWithNoTests",
38
+ "prebuild": "pnpm clean",
39
+ "build:esm": "tsc -p tsconfig.build.esm.json",
40
+ "clean": "rimraf esm *.tsbuildinfo"
41
+ },
42
+ "types": "esm/index.d.ts",
43
+ "exports": {
44
+ ".": {
45
+ "types": "./esm/index.d.ts",
46
+ "import": "./esm/index.js"
47
+ }
48
+ }
49
+ }
@@ -1,19 +0,0 @@
1
- import IntervalTree from '@flatten-js/interval-tree';
2
- import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
- import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
- import type { Feature } from '@jbrowse/core/util/simpleFeature';
5
- import type { NoAssemblyRegion } from '@jbrowse/core/util/types';
6
- type StatusCallback = (arg: string) => void;
7
- export default class Gff3Adapter extends BaseFeatureDataAdapter {
8
- calculatedIntervalTreeMap: Record<string, IntervalTree>;
9
- gffFeatures?: Promise<{
10
- header: string;
11
- intervalTreeMap: Record<string, (sc?: StatusCallback) => IntervalTree>;
12
- }>;
13
- private loadDataP;
14
- private loadData;
15
- getRefNames(opts?: BaseOptions): Promise<string[]>;
16
- getHeader(opts?: BaseOptions): Promise<string>;
17
- getFeatures(query: NoAssemblyRegion, opts?: BaseOptions): import("rxjs").Observable<Feature>;
18
- }
19
- export {};
@@ -1,85 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
7
- const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
8
- const util_1 = require("@jbrowse/core/util");
9
- const io_1 = require("@jbrowse/core/util/io");
10
- const rxjs_1 = require("@jbrowse/core/util/rxjs");
11
- const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
12
- const gff_nostream_1 = require("gff-nostream");
13
- const featureData_1 = require("../featureData");
14
- const gffParser_1 = require("./gffParser");
15
- class Gff3Adapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
- constructor() {
17
- super(...arguments);
18
- this.calculatedIntervalTreeMap = {};
19
- }
20
- async loadDataP(opts) {
21
- const { statusCallback = () => { } } = opts || {};
22
- const buffer = await (0, util_1.fetchAndMaybeUnzip)((0, io_1.openLocation)(this.getConf('gffLocation'), this.pluginManager), opts);
23
- const { header, featureMap } = (0, gffParser_1.parseGffBuffer)(buffer, statusCallback);
24
- const intervalTreeMap = Object.fromEntries(Object.entries(featureMap).map(([refName, lines]) => [
25
- refName,
26
- (sc) => {
27
- if (!this.calculatedIntervalTreeMap[refName]) {
28
- sc === null || sc === void 0 ? void 0 : sc('Parsing GFF data');
29
- const intervalTree = new interval_tree_1.default();
30
- for (const obj of (0, gff_nostream_1.parseStringSync)(lines)
31
- .flat()
32
- .map((f, i) => new simpleFeature_1.default({
33
- data: (0, featureData_1.featureData)(f),
34
- id: `${this.id}-${refName}-${i}`,
35
- }))) {
36
- intervalTree.insert([obj.get('start'), obj.get('end')], obj);
37
- }
38
- this.calculatedIntervalTreeMap[refName] = intervalTree;
39
- }
40
- return this.calculatedIntervalTreeMap[refName];
41
- },
42
- ]));
43
- return {
44
- header,
45
- intervalTreeMap,
46
- };
47
- }
48
- async loadData(opts) {
49
- if (!this.gffFeatures) {
50
- this.gffFeatures = this.loadDataP(opts).catch((e) => {
51
- this.gffFeatures = undefined;
52
- throw e;
53
- });
54
- }
55
- return this.gffFeatures;
56
- }
57
- async getRefNames(opts = {}) {
58
- const { intervalTreeMap } = await this.loadData(opts);
59
- return Object.keys(intervalTreeMap);
60
- }
61
- async getHeader(opts = {}) {
62
- const { header } = await this.loadData(opts);
63
- return header;
64
- }
65
- getFeatures(query, opts = {}) {
66
- return (0, rxjs_1.ObservableCreate)(async (observer) => {
67
- var _a;
68
- try {
69
- const { start, end, refName } = query;
70
- const { intervalTreeMap } = await this.loadData(opts);
71
- for (const f of ((_a = intervalTreeMap[refName]) === null || _a === void 0 ? void 0 : _a.call(intervalTreeMap, opts.statusCallback).search([
72
- start,
73
- end,
74
- ])) || []) {
75
- observer.next(f);
76
- }
77
- observer.complete();
78
- }
79
- catch (e) {
80
- observer.error(e);
81
- }
82
- }, opts.stopToken);
83
- }
84
- }
85
- exports.default = Gff3Adapter;
@@ -1,10 +0,0 @@
1
- declare const Gff3Adapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
- gffLocation: {
3
- type: string;
4
- defaultValue: {
5
- uri: string;
6
- locationType: string;
7
- };
8
- };
9
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
10
- export default Gff3Adapter;
@@ -1,27 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const configuration_1 = require("@jbrowse/core/configuration");
4
- function x() { }
5
- const Gff3Adapter = (0, configuration_1.ConfigurationSchema)('Gff3Adapter', {
6
- gffLocation: {
7
- type: 'fileLocation',
8
- defaultValue: {
9
- uri: '/path/to/my.gff',
10
- locationType: 'UriLocation',
11
- },
12
- },
13
- }, {
14
- explicitlyTyped: true,
15
- preProcessSnapshot: snap => {
16
- return snap.uri
17
- ? {
18
- ...snap,
19
- gffLocation: {
20
- uri: snap.uri,
21
- baseUri: snap.baseUri,
22
- },
23
- }
24
- : snap;
25
- },
26
- });
27
- exports.default = Gff3Adapter;
@@ -1,7 +0,0 @@
1
- import type { StatusCallback } from '@jbrowse/core/util/parseLineByLine';
2
- interface GffParseResult {
3
- header: string;
4
- featureMap: Record<string, string>;
5
- }
6
- export declare function parseGffBuffer(buffer: Uint8Array, statusCallback?: StatusCallback): GffParseResult;
7
- export {};
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseGffBuffer = parseGffBuffer;
4
- const parseLineByLine_1 = require("@jbrowse/core/util/parseLineByLine");
5
- function parseGffBuffer(buffer, statusCallback = () => { }) {
6
- const headerLines = [];
7
- const featureMap = {};
8
- (0, parseLineByLine_1.parseLineByLine)(buffer, line => {
9
- if (line.startsWith('#')) {
10
- headerLines.push(line);
11
- }
12
- else if (line.startsWith('>')) {
13
- return false;
14
- }
15
- else {
16
- const ret = line.indexOf('\t');
17
- const refName = line.slice(0, ret);
18
- if (!featureMap[refName]) {
19
- featureMap[refName] = '';
20
- }
21
- featureMap[refName] += `${line}\n`;
22
- }
23
- return true;
24
- }, statusCallback);
25
- return {
26
- header: headerLines.join('\n'),
27
- featureMap,
28
- };
29
- }
@@ -1,2 +0,0 @@
1
- import type PluginManager from '@jbrowse/core/PluginManager';
2
- export default function Gff3AdapterF(pluginManager: PluginManager): void;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.default = Gff3AdapterF;
40
- const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
41
- const configSchema_1 = __importDefault(require("./configSchema"));
42
- function Gff3AdapterF(pluginManager) {
43
- pluginManager.addAdapterType(() => new pluggableElementTypes_1.AdapterType({
44
- name: 'Gff3Adapter',
45
- displayName: 'GFF3 adapter',
46
- configSchema: configSchema_1.default,
47
- getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3Adapter'))).then(r => r.default),
48
- }));
49
- }
@@ -1,22 +0,0 @@
1
- import { TabixIndexedFile } from '@gmod/tabix';
2
- import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
3
- import type { BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
4
- import type { Feature } from '@jbrowse/core/util/simpleFeature';
5
- import type { Region } from '@jbrowse/core/util/types';
6
- export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
7
- private configured?;
8
- private configurePre;
9
- protected configurePre2(): Promise<{
10
- gff: TabixIndexedFile;
11
- dontRedispatch: string[];
12
- }>;
13
- configure(opts?: BaseOptions): Promise<{
14
- gff: TabixIndexedFile;
15
- dontRedispatch: string[];
16
- }>;
17
- getRefNames(opts?: BaseOptions): Promise<string[]>;
18
- getHeader(opts?: BaseOptions): Promise<string>;
19
- getFeatures(query: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
20
- private getFeaturesHelper;
21
- private parseLine;
22
- }
@@ -1,131 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const tabix_1 = require("@gmod/tabix");
7
- const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
8
- const util_1 = require("@jbrowse/core/util");
9
- const io_1 = require("@jbrowse/core/util/io");
10
- const range_1 = require("@jbrowse/core/util/range");
11
- const rxjs_1 = require("@jbrowse/core/util/rxjs");
12
- const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeature"));
13
- const gff_nostream_1 = require("gff-nostream");
14
- const featureData_1 = require("../featureData");
15
- class Gff3TabixAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
- async configurePre(_opts) {
17
- const gffGzLocation = this.getConf('gffGzLocation');
18
- const indexType = this.getConf(['index', 'indexType']);
19
- const loc = this.getConf(['index', 'location']);
20
- const dontRedispatch = this.getConf('dontRedispatch');
21
- const gff = new tabix_1.TabixIndexedFile({
22
- filehandle: (0, io_1.openLocation)(gffGzLocation, this.pluginManager),
23
- csiFilehandle: indexType === 'CSI' ? (0, io_1.openLocation)(loc, this.pluginManager) : undefined,
24
- tbiFilehandle: indexType !== 'CSI' ? (0, io_1.openLocation)(loc, this.pluginManager) : undefined,
25
- chunkCacheSize: 50 * 2 ** 20,
26
- renameRefSeqs: (n) => n,
27
- });
28
- return {
29
- gff,
30
- dontRedispatch,
31
- header: await gff.getHeader(),
32
- };
33
- }
34
- async configurePre2() {
35
- if (!this.configured) {
36
- this.configured = this.configurePre().catch((e) => {
37
- this.configured = undefined;
38
- throw e;
39
- });
40
- }
41
- return this.configured;
42
- }
43
- async configure(opts) {
44
- const { statusCallback = () => { } } = opts || {};
45
- return (0, util_1.updateStatus)('Downloading index', statusCallback, () => this.configurePre2());
46
- }
47
- async getRefNames(opts = {}) {
48
- const { gff } = await this.configure(opts);
49
- return gff.getReferenceSequenceNames(opts);
50
- }
51
- async getHeader(opts = {}) {
52
- const { gff } = await this.configure(opts);
53
- return gff.getHeader();
54
- }
55
- getFeatures(query, opts = {}) {
56
- return (0, rxjs_1.ObservableCreate)(async (observer) => {
57
- const { gff } = await this.configure(opts);
58
- const metadata = await gff.getMetadata();
59
- await this.getFeaturesHelper(query, opts, metadata, observer, true);
60
- }, opts.stopToken);
61
- }
62
- async getFeaturesHelper(query, opts, metadata, observer, allowRedispatch, originalQuery = query) {
63
- var _a, _b;
64
- const { statusCallback = () => { } } = opts;
65
- try {
66
- const lines = [];
67
- const { dontRedispatch, gff } = await this.configure(opts);
68
- await (0, util_1.updateStatus)('Downloading features', statusCallback, () => gff.getLines(query.refName, query.start, query.end, (line, fileOffset) => {
69
- lines.push(this.parseLine(metadata.columnNumbers, line, fileOffset));
70
- }));
71
- if (allowRedispatch && lines.length) {
72
- let minStart = Number.POSITIVE_INFINITY;
73
- let maxEnd = Number.NEGATIVE_INFINITY;
74
- for (const line of lines) {
75
- const featureType = line.fields[2];
76
- if (!dontRedispatch.includes(featureType)) {
77
- const start = line.start - 1;
78
- if (start < minStart) {
79
- minStart = start;
80
- }
81
- if (line.end > maxEnd) {
82
- maxEnd = line.end;
83
- }
84
- }
85
- }
86
- if (maxEnd > query.end || minStart < query.start) {
87
- await this.getFeaturesHelper({ ...query, start: minStart, end: maxEnd }, opts, metadata, observer, false, query);
88
- return;
89
- }
90
- }
91
- const gff3 = lines
92
- .map(lineRecord => {
93
- if (lineRecord.fields[8] && lineRecord.fields[8] !== '.') {
94
- if (!lineRecord.fields[8].includes('_lineHash')) {
95
- lineRecord.fields[8] += `;_lineHash=${lineRecord.lineHash}`;
96
- }
97
- }
98
- else {
99
- lineRecord.fields[8] = `_lineHash=${lineRecord.lineHash}`;
100
- }
101
- return lineRecord.fields.join('\t');
102
- })
103
- .join('\n');
104
- for (const featureLocs of (0, gff_nostream_1.parseStringSync)(gff3)) {
105
- for (const featureLoc of featureLocs) {
106
- const f = new simpleFeature_1.default({
107
- data: (0, featureData_1.featureData)(featureLoc),
108
- id: `${this.id}-offset-${(_b = (_a = featureLoc.attributes) === null || _a === void 0 ? void 0 : _a._lineHash) === null || _b === void 0 ? void 0 : _b[0]}`,
109
- });
110
- if ((0, range_1.doesIntersect2)(f.get('start'), f.get('end'), originalQuery.start, originalQuery.end)) {
111
- observer.next(f);
112
- }
113
- }
114
- }
115
- observer.complete();
116
- }
117
- catch (e) {
118
- observer.error(e);
119
- }
120
- }
121
- parseLine(columnNumbers, line, fileOffset) {
122
- const fields = line.split('\t');
123
- return {
124
- start: +fields[columnNumbers.start - 1],
125
- end: +fields[columnNumbers.end - 1],
126
- lineHash: fileOffset,
127
- fields,
128
- };
129
- }
130
- }
131
- exports.default = Gff3TabixAdapter;
@@ -1,28 +0,0 @@
1
- declare const Gff3TabixAdapter: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
2
- gffGzLocation: {
3
- type: string;
4
- defaultValue: {
5
- uri: string;
6
- locationType: string;
7
- };
8
- };
9
- index: import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaType<{
10
- indexType: {
11
- model: import("mobx-state-tree").ISimpleType<string>;
12
- type: string;
13
- defaultValue: string;
14
- };
15
- location: {
16
- type: string;
17
- defaultValue: {
18
- uri: string;
19
- locationType: string;
20
- };
21
- };
22
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
23
- dontRedispatch: {
24
- type: string;
25
- defaultValue: string[];
26
- };
27
- }, import("@jbrowse/core/configuration/configurationSchema").ConfigurationSchemaOptions<undefined, undefined>>;
28
- export default Gff3TabixAdapter;
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const configuration_1 = require("@jbrowse/core/configuration");
4
- const mobx_state_tree_1 = require("mobx-state-tree");
5
- function x() { }
6
- const Gff3TabixAdapter = (0, configuration_1.ConfigurationSchema)('Gff3TabixAdapter', {
7
- gffGzLocation: {
8
- type: 'fileLocation',
9
- defaultValue: {
10
- uri: '/path/to/my.gff.gz',
11
- locationType: 'UriLocation',
12
- },
13
- },
14
- index: (0, configuration_1.ConfigurationSchema)('Gff3TabixIndex', {
15
- indexType: {
16
- model: mobx_state_tree_1.types.enumeration('IndexType', ['TBI', 'CSI']),
17
- type: 'stringEnum',
18
- defaultValue: 'TBI',
19
- },
20
- location: {
21
- type: 'fileLocation',
22
- defaultValue: {
23
- uri: '/path/to/my.gff.gz.tbi',
24
- locationType: 'UriLocation',
25
- },
26
- },
27
- }),
28
- dontRedispatch: {
29
- type: 'stringArray',
30
- defaultValue: ['chromosome', 'region', 'contig'],
31
- },
32
- }, {
33
- explicitlyTyped: true,
34
- preProcessSnapshot: snap => {
35
- return snap.uri
36
- ? {
37
- ...snap,
38
- gffGzLocation: {
39
- uri: snap.uri,
40
- baseUri: snap.baseUri,
41
- },
42
- index: {
43
- location: {
44
- uri: `${snap.uri}.tbi`,
45
- baseUri: snap.baseUri,
46
- },
47
- },
48
- }
49
- : snap;
50
- },
51
- });
52
- exports.default = Gff3TabixAdapter;
@@ -1,2 +0,0 @@
1
- import type PluginManager from '@jbrowse/core/PluginManager';
2
- export default function Gff3TabixAdapterF(pluginManager: PluginManager): void;
@@ -1,49 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.default = Gff3TabixAdapterF;
40
- const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
41
- const configSchema_1 = __importDefault(require("./configSchema"));
42
- function Gff3TabixAdapterF(pluginManager) {
43
- pluginManager.addAdapterType(() => new pluggableElementTypes_1.AdapterType({
44
- name: 'Gff3TabixAdapter',
45
- displayName: 'GFF3 tabix adapter',
46
- configSchema: configSchema_1.default,
47
- getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3TabixAdapter'))).then(r => r.default),
48
- }));
49
- }
@@ -1,2 +0,0 @@
1
- import type PluginManager from '@jbrowse/core/PluginManager';
2
- export default function GuessGff3F(pluginManager: PluginManager): void;
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = GuessGff3F;
4
- const util_1 = require("@jbrowse/core/util");
5
- const tracks_1 = require("@jbrowse/core/util/tracks");
6
- function GuessGff3F(pluginManager) {
7
- pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
8
- return (file, index, adapterHint) => {
9
- const fileName = (0, tracks_1.getFileName)(file);
10
- const indexName = index && (0, tracks_1.getFileName)(index);
11
- if ((0, util_1.testAdapter)(fileName, /\.gff3?\.b?gz$/i, adapterHint, 'Gff3TabixAdapter')) {
12
- return {
13
- type: 'Gff3TabixAdapter',
14
- bamLocation: file,
15
- gffGzLocation: file,
16
- index: {
17
- location: index || (0, tracks_1.makeIndex)(file, '.tbi'),
18
- indexType: (0, tracks_1.makeIndexType)(indexName, 'CSI', 'TBI'),
19
- },
20
- };
21
- }
22
- else if ((0, util_1.testAdapter)(fileName, /\.gff3?$/i, adapterHint, 'Gff3Adapter')) {
23
- return {
24
- type: 'Gff3Adapter',
25
- gffLocation: file,
26
- };
27
- }
28
- else {
29
- return adapterGuesser(file, index, adapterHint);
30
- }
31
- };
32
- });
33
- }
@@ -1,16 +0,0 @@
1
- import type { GFF3FeatureLineWithRefs } from 'gff-nostream';
2
- interface GFF3Feature {
3
- start: number;
4
- end: number;
5
- strand?: number;
6
- type: string | null;
7
- source: string | null;
8
- refName: string;
9
- derived_features: unknown[] | null;
10
- phase?: number;
11
- score?: number;
12
- subfeatures: GFF3Feature[] | undefined;
13
- [key: string]: unknown;
14
- }
15
- export declare function featureData(data: GFF3FeatureLineWithRefs): GFF3Feature;
16
- export {};
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.featureData = featureData;
4
- function featureData(data) {
5
- const { end, start, child_features, derived_features, attributes, type, source, phase, seq_id, score, strand, } = data;
6
- let strand2;
7
- if (strand === '+') {
8
- strand2 = 1;
9
- }
10
- else if (strand === '-') {
11
- strand2 = -1;
12
- }
13
- else if (strand === '.') {
14
- strand2 = 0;
15
- }
16
- const defaultFields = new Set([
17
- 'start',
18
- 'end',
19
- 'seq_id',
20
- 'score',
21
- 'type',
22
- 'source',
23
- 'phase',
24
- 'strand',
25
- ]);
26
- const dataAttributes = attributes || {};
27
- const resultAttributes = {};
28
- for (const a of Object.keys(dataAttributes)) {
29
- let b = a.toLowerCase();
30
- if (defaultFields.has(b)) {
31
- b += '2';
32
- }
33
- if (dataAttributes[a] && a !== '_lineHash') {
34
- let attr = dataAttributes[a];
35
- if (Array.isArray(attr) && attr.length === 1) {
36
- ;
37
- [attr] = attr;
38
- }
39
- resultAttributes[b] = attr;
40
- }
41
- }
42
- return {
43
- ...resultAttributes,
44
- start: start - 1,
45
- end: end,
46
- strand: strand2,
47
- type,
48
- source,
49
- refName: seq_id,
50
- derived_features,
51
- phase: phase === null ? undefined : Number(phase),
52
- score: score === null ? undefined : score,
53
- subfeatures: child_features.flatMap(childLocs => childLocs.map(childLoc => featureData(childLoc))),
54
- };
55
- }
package/dist/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import Plugin from '@jbrowse/core/Plugin';
2
- import type PluginManager from '@jbrowse/core/PluginManager';
3
- export default class GFF3Plugin extends Plugin {
4
- name: string;
5
- install(pluginManager: PluginManager): void;
6
- }
package/dist/index.js DELETED
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
7
- const Gff3Adapter_1 = __importDefault(require("./Gff3Adapter"));
8
- const Gff3TabixAdapter_1 = __importDefault(require("./Gff3TabixAdapter"));
9
- const GuessGff3_1 = __importDefault(require("./GuessGff3"));
10
- class GFF3Plugin extends Plugin_1.default {
11
- constructor() {
12
- super(...arguments);
13
- this.name = 'GFF3Plugin';
14
- }
15
- install(pluginManager) {
16
- (0, Gff3TabixAdapter_1.default)(pluginManager);
17
- (0, Gff3Adapter_1.default)(pluginManager);
18
- (0, GuessGff3_1.default)(pluginManager);
19
- }
20
- }
21
- exports.default = GFF3Plugin;