@jbrowse/plugin-gff3 2.11.0 → 2.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,15 +2,16 @@ import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters
2
2
  import { NoAssemblyRegion } from '@jbrowse/core/util/types';
3
3
  import IntervalTree from '@flatten-js/interval-tree';
4
4
  import { Feature } from '@jbrowse/core/util/simpleFeature';
5
- export default class extends BaseFeatureDataAdapter {
5
+ export default class Gff3Adapter extends BaseFeatureDataAdapter {
6
+ calculatedIntervalTreeMap: Record<string, IntervalTree>;
6
7
  protected gffFeatures?: Promise<{
7
8
  header: string;
8
- intervalTree: Record<string, IntervalTree>;
9
+ intervalTreeMap: Record<string, (sc?: (arg: string) => void) => IntervalTree>;
9
10
  }>;
10
11
  private loadDataP;
11
12
  private loadData;
12
- getRefNames(_opts?: BaseOptions): Promise<string[]>;
13
- getHeader(): Promise<string>;
13
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
14
+ getHeader(opts?: BaseOptions): Promise<string>;
14
15
  getFeatures(query: NoAssemblyRegion, opts?: BaseOptions): import("rxjs").Observable<Feature>;
15
16
  private featureData;
16
17
  freeResources(): void;
@@ -13,57 +13,91 @@ const gff_1 = __importDefault(require("@gmod/gff"));
13
13
  function isGzip(buf) {
14
14
  return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
15
15
  }
16
- class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
17
- async loadDataP() {
16
+ const decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
17
+ class Gff3Adapter extends BaseAdapter_1.BaseFeatureDataAdapter {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.calculatedIntervalTreeMap = {};
21
+ }
22
+ async loadDataP(opts) {
23
+ const { statusCallback = () => { } } = opts || {};
18
24
  const pm = this.pluginManager;
19
25
  const buf = await (0, io_1.openLocation)(this.getConf('gffLocation'), pm).readFile();
20
26
  const buffer = isGzip(buf) ? await (0, bgzf_filehandle_1.unzip)(buf) : buf;
21
- // 512MB max chrome string length is 512MB
22
- if (buffer.length > 536870888) {
23
- throw new Error('Data exceeds maximum string length (512MB)');
24
- }
25
- const data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
26
- const lines = data.split(/\n|\r\n|\r/);
27
27
  const headerLines = [];
28
- for (let i = 0; i < lines.length && lines[i].startsWith('#'); i++) {
29
- headerLines.push(lines[i]);
30
- }
31
- const header = headerLines.join('\n');
32
- const feats = gff_1.default.parseStringSync(data, {
33
- parseFeatures: true,
34
- parseComments: false,
35
- parseDirectives: false,
36
- parseSequences: false,
37
- disableDerivesFromReferences: true,
38
- });
39
- const intervalTree = {};
40
- for (const obj of feats.flat().map((f, i) => new simpleFeature_1.default({
41
- data: this.featureData(f),
42
- id: `${this.id}-offset-${i}`,
43
- }))) {
44
- const key = obj.get('refName');
45
- if (!intervalTree[key]) {
46
- intervalTree[key] = new interval_tree_1.default();
28
+ const featureMap = {};
29
+ let blockStart = 0;
30
+ let i = 0;
31
+ while (blockStart < buffer.length) {
32
+ const n = buffer.indexOf('\n', blockStart);
33
+ // could be a non-newline ended file, so slice to end of file if n===-1
34
+ const b = n === -1 ? buffer.slice(blockStart) : buffer.slice(blockStart, n);
35
+ const line = ((decoder === null || decoder === void 0 ? void 0 : decoder.decode(b)) || b.toString()).trim();
36
+ if (line) {
37
+ if (line.startsWith('#')) {
38
+ headerLines.push(line);
39
+ }
40
+ else if (line.startsWith('>')) {
41
+ break;
42
+ }
43
+ else {
44
+ const ret = line.indexOf('\t');
45
+ const refName = line.slice(0, ret);
46
+ if (!featureMap[refName]) {
47
+ featureMap[refName] = '';
48
+ }
49
+ featureMap[refName] += line + '\n';
50
+ }
51
+ }
52
+ if (i++ % 10000 === 0) {
53
+ statusCallback(`Loading ${Math.floor(blockStart / 1000000).toLocaleString('en-US')}/${Math.floor(buffer.length / 1000000).toLocaleString('en-US')} MB`);
47
54
  }
48
- intervalTree[key].insert([obj.get('start'), obj.get('end')], obj);
55
+ blockStart = n + 1;
49
56
  }
50
- return { header, intervalTree };
57
+ const intervalTreeMap = Object.fromEntries(Object.entries(featureMap).map(([refName, lines]) => {
58
+ return [
59
+ refName,
60
+ (sc) => {
61
+ sc === null || sc === void 0 ? void 0 : sc(`Parsing GFF data`);
62
+ if (!this.calculatedIntervalTreeMap[refName]) {
63
+ const intervalTree = new interval_tree_1.default();
64
+ gff_1.default
65
+ .parseStringSync(lines, {
66
+ parseFeatures: true,
67
+ parseComments: false,
68
+ parseDirectives: false,
69
+ parseSequences: false,
70
+ disableDerivesFromReferences: true,
71
+ })
72
+ .flat()
73
+ .map((f, i) => new simpleFeature_1.default({
74
+ data: this.featureData(f),
75
+ id: `${this.id}-${refName}-${i}`,
76
+ }))
77
+ .forEach(obj => intervalTree.insert([obj.get('start'), obj.get('end')], obj));
78
+ this.calculatedIntervalTreeMap[refName] = intervalTree;
79
+ }
80
+ return this.calculatedIntervalTreeMap[refName];
81
+ },
82
+ ];
83
+ }));
84
+ return { header: headerLines.join('\n'), intervalTreeMap };
51
85
  }
52
- async loadData() {
86
+ async loadData(opts) {
53
87
  if (!this.gffFeatures) {
54
- this.gffFeatures = this.loadDataP().catch(e => {
88
+ this.gffFeatures = this.loadDataP(opts).catch(e => {
55
89
  this.gffFeatures = undefined;
56
90
  throw e;
57
91
  });
58
92
  }
59
93
  return this.gffFeatures;
60
94
  }
61
- async getRefNames(_opts = {}) {
62
- const { intervalTree } = await this.loadData();
63
- return Object.keys(intervalTree);
95
+ async getRefNames(opts = {}) {
96
+ const { intervalTreeMap } = await this.loadData(opts);
97
+ return Object.keys(intervalTreeMap);
64
98
  }
65
- async getHeader() {
66
- const { header } = await this.loadData();
99
+ async getHeader(opts = {}) {
100
+ const { header } = await this.loadData(opts);
67
101
  return header;
68
102
  }
69
103
  getFeatures(query, opts = {}) {
@@ -71,8 +105,8 @@ class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
71
105
  var _a;
72
106
  try {
73
107
  const { start, end, refName } = query;
74
- const { intervalTree } = await this.loadData();
75
- (_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(f));
108
+ const { intervalTreeMap } = await this.loadData(opts);
109
+ (_a = intervalTreeMap[refName](opts.statusCallback)) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(f));
76
110
  observer.complete();
77
111
  }
78
112
  catch (e) {
@@ -144,4 +178,4 @@ class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
144
178
  }
145
179
  freeResources( /* { region } */) { }
146
180
  }
147
- exports.default = default_1;
181
+ exports.default = Gff3Adapter;
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function Gff3AdapterF(pluginManager: PluginManager): void;
@@ -28,11 +28,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
30
30
  const configSchema_1 = __importDefault(require("./configSchema"));
31
- exports.default = (pluginManager) => {
31
+ function Gff3AdapterF(pluginManager) {
32
32
  pluginManager.addAdapterType(() => new pluggableElementTypes_1.AdapterType({
33
33
  name: 'Gff3Adapter',
34
34
  displayName: 'GFF3 adapter',
35
35
  configSchema: configSchema_1.default,
36
36
  getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3Adapter'))).then(r => r.default),
37
37
  }));
38
- };
38
+ }
39
+ exports.default = Gff3AdapterF;
@@ -5,7 +5,7 @@ import { TabixIndexedFile } from '@gmod/tabix';
5
5
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
6
6
  import PluginManager from '@jbrowse/core/PluginManager';
7
7
  import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
8
- export default class extends BaseFeatureDataAdapter {
8
+ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
9
9
  protected gff: TabixIndexedFile;
10
10
  protected dontRedispatch: string[];
11
11
  constructor(config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
@@ -12,7 +12,7 @@ const simpleFeature_1 = __importDefault(require("@jbrowse/core/util/simpleFeatur
12
12
  const tabix_1 = require("@gmod/tabix");
13
13
  const gff_1 = __importDefault(require("@gmod/gff"));
14
14
  const configuration_1 = require("@jbrowse/core/configuration");
15
- class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
15
+ class Gff3TabixAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
16
16
  constructor(config, getSubAdapter, pluginManager) {
17
17
  super(config, getSubAdapter, pluginManager);
18
18
  const gffGzLocation = (0, configuration_1.readConfObject)(config, 'gffGzLocation');
@@ -186,4 +186,4 @@ class default_1 extends BaseAdapter_1.BaseFeatureDataAdapter {
186
186
  }
187
187
  freeResources( /* { region } */) { }
188
188
  }
189
- exports.default = default_1;
189
+ exports.default = Gff3TabixAdapter;
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function Gff3TabixAdapterF(pluginManager: PluginManager): void;
@@ -28,11 +28,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
29
  const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
30
30
  const configSchema_1 = __importDefault(require("./configSchema"));
31
- exports.default = (pluginManager) => {
31
+ function Gff3TabixAdapterF(pluginManager) {
32
32
  pluginManager.addAdapterType(() => new pluggableElementTypes_1.AdapterType({
33
33
  name: 'Gff3TabixAdapter',
34
34
  displayName: 'GFF3 tabix adapter',
35
35
  configSchema: configSchema_1.default,
36
36
  getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./Gff3TabixAdapter'))).then(r => r.default),
37
37
  }));
38
- };
38
+ }
39
+ exports.default = Gff3TabixAdapterF;
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function GuessGff3F(pluginManager: PluginManager): void;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tracks_1 = require("@jbrowse/core/util/tracks");
4
- exports.default = (pluginManager) => {
4
+ function GuessGff3F(pluginManager) {
5
5
  pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
6
6
  return (file, index, adapterHint) => {
7
7
  const regexGuess = /\.gff3?\.b?gz$/i;
@@ -40,4 +40,5 @@ exports.default = (pluginManager) => {
40
40
  return adapterGuesser(file, index, adapterHint);
41
41
  };
42
42
  });
43
- };
43
+ }
44
+ exports.default = GuessGff3F;
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
2
  import Plugin from '@jbrowse/core/Plugin';
3
- export default class extends Plugin {
3
+ export default class GFF3Plugin extends Plugin {
4
4
  name: string;
5
5
  install(pluginManager: PluginManager): void;
6
6
  }
package/dist/index.js CHANGED
@@ -7,7 +7,7 @@ const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
7
7
  const Gff3TabixAdapter_1 = __importDefault(require("./Gff3TabixAdapter"));
8
8
  const Gff3Adapter_1 = __importDefault(require("./Gff3Adapter"));
9
9
  const GuessGff3_1 = __importDefault(require("./GuessGff3"));
10
- class default_1 extends Plugin_1.default {
10
+ class GFF3Plugin extends Plugin_1.default {
11
11
  constructor() {
12
12
  super(...arguments);
13
13
  this.name = 'GFF3Plugin';
@@ -18,4 +18,4 @@ class default_1 extends Plugin_1.default {
18
18
  (0, GuessGff3_1.default)(pluginManager);
19
19
  }
20
20
  }
21
- exports.default = default_1;
21
+ exports.default = GFF3Plugin;
@@ -2,15 +2,16 @@ import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters
2
2
  import { NoAssemblyRegion } from '@jbrowse/core/util/types';
3
3
  import IntervalTree from '@flatten-js/interval-tree';
4
4
  import { Feature } from '@jbrowse/core/util/simpleFeature';
5
- export default class extends BaseFeatureDataAdapter {
5
+ export default class Gff3Adapter extends BaseFeatureDataAdapter {
6
+ calculatedIntervalTreeMap: Record<string, IntervalTree>;
6
7
  protected gffFeatures?: Promise<{
7
8
  header: string;
8
- intervalTree: Record<string, IntervalTree>;
9
+ intervalTreeMap: Record<string, (sc?: (arg: string) => void) => IntervalTree>;
9
10
  }>;
10
11
  private loadDataP;
11
12
  private loadData;
12
- getRefNames(_opts?: BaseOptions): Promise<string[]>;
13
- getHeader(): Promise<string>;
13
+ getRefNames(opts?: BaseOptions): Promise<string[]>;
14
+ getHeader(opts?: BaseOptions): Promise<string>;
14
15
  getFeatures(query: NoAssemblyRegion, opts?: BaseOptions): import("rxjs").Observable<Feature>;
15
16
  private featureData;
16
17
  freeResources(): void;
@@ -8,57 +8,91 @@ import gff from '@gmod/gff';
8
8
  function isGzip(buf) {
9
9
  return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;
10
10
  }
11
- export default class extends BaseFeatureDataAdapter {
12
- async loadDataP() {
11
+ const decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined;
12
+ export default class Gff3Adapter extends BaseFeatureDataAdapter {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.calculatedIntervalTreeMap = {};
16
+ }
17
+ async loadDataP(opts) {
18
+ const { statusCallback = () => { } } = opts || {};
13
19
  const pm = this.pluginManager;
14
20
  const buf = await openLocation(this.getConf('gffLocation'), pm).readFile();
15
21
  const buffer = isGzip(buf) ? await unzip(buf) : buf;
16
- // 512MB max chrome string length is 512MB
17
- if (buffer.length > 536870888) {
18
- throw new Error('Data exceeds maximum string length (512MB)');
19
- }
20
- const data = new TextDecoder('utf8', { fatal: true }).decode(buffer);
21
- const lines = data.split(/\n|\r\n|\r/);
22
22
  const headerLines = [];
23
- for (let i = 0; i < lines.length && lines[i].startsWith('#'); i++) {
24
- headerLines.push(lines[i]);
25
- }
26
- const header = headerLines.join('\n');
27
- const feats = gff.parseStringSync(data, {
28
- parseFeatures: true,
29
- parseComments: false,
30
- parseDirectives: false,
31
- parseSequences: false,
32
- disableDerivesFromReferences: true,
33
- });
34
- const intervalTree = {};
35
- for (const obj of feats.flat().map((f, i) => new SimpleFeature({
36
- data: this.featureData(f),
37
- id: `${this.id}-offset-${i}`,
38
- }))) {
39
- const key = obj.get('refName');
40
- if (!intervalTree[key]) {
41
- intervalTree[key] = new IntervalTree();
23
+ const featureMap = {};
24
+ let blockStart = 0;
25
+ let i = 0;
26
+ while (blockStart < buffer.length) {
27
+ const n = buffer.indexOf('\n', blockStart);
28
+ // could be a non-newline ended file, so slice to end of file if n===-1
29
+ const b = n === -1 ? buffer.slice(blockStart) : buffer.slice(blockStart, n);
30
+ const line = ((decoder === null || decoder === void 0 ? void 0 : decoder.decode(b)) || b.toString()).trim();
31
+ if (line) {
32
+ if (line.startsWith('#')) {
33
+ headerLines.push(line);
34
+ }
35
+ else if (line.startsWith('>')) {
36
+ break;
37
+ }
38
+ else {
39
+ const ret = line.indexOf('\t');
40
+ const refName = line.slice(0, ret);
41
+ if (!featureMap[refName]) {
42
+ featureMap[refName] = '';
43
+ }
44
+ featureMap[refName] += line + '\n';
45
+ }
46
+ }
47
+ if (i++ % 10000 === 0) {
48
+ statusCallback(`Loading ${Math.floor(blockStart / 1000000).toLocaleString('en-US')}/${Math.floor(buffer.length / 1000000).toLocaleString('en-US')} MB`);
42
49
  }
43
- intervalTree[key].insert([obj.get('start'), obj.get('end')], obj);
50
+ blockStart = n + 1;
44
51
  }
45
- return { header, intervalTree };
52
+ const intervalTreeMap = Object.fromEntries(Object.entries(featureMap).map(([refName, lines]) => {
53
+ return [
54
+ refName,
55
+ (sc) => {
56
+ sc === null || sc === void 0 ? void 0 : sc(`Parsing GFF data`);
57
+ if (!this.calculatedIntervalTreeMap[refName]) {
58
+ const intervalTree = new IntervalTree();
59
+ gff
60
+ .parseStringSync(lines, {
61
+ parseFeatures: true,
62
+ parseComments: false,
63
+ parseDirectives: false,
64
+ parseSequences: false,
65
+ disableDerivesFromReferences: true,
66
+ })
67
+ .flat()
68
+ .map((f, i) => new SimpleFeature({
69
+ data: this.featureData(f),
70
+ id: `${this.id}-${refName}-${i}`,
71
+ }))
72
+ .forEach(obj => intervalTree.insert([obj.get('start'), obj.get('end')], obj));
73
+ this.calculatedIntervalTreeMap[refName] = intervalTree;
74
+ }
75
+ return this.calculatedIntervalTreeMap[refName];
76
+ },
77
+ ];
78
+ }));
79
+ return { header: headerLines.join('\n'), intervalTreeMap };
46
80
  }
47
- async loadData() {
81
+ async loadData(opts) {
48
82
  if (!this.gffFeatures) {
49
- this.gffFeatures = this.loadDataP().catch(e => {
83
+ this.gffFeatures = this.loadDataP(opts).catch(e => {
50
84
  this.gffFeatures = undefined;
51
85
  throw e;
52
86
  });
53
87
  }
54
88
  return this.gffFeatures;
55
89
  }
56
- async getRefNames(_opts = {}) {
57
- const { intervalTree } = await this.loadData();
58
- return Object.keys(intervalTree);
90
+ async getRefNames(opts = {}) {
91
+ const { intervalTreeMap } = await this.loadData(opts);
92
+ return Object.keys(intervalTreeMap);
59
93
  }
60
- async getHeader() {
61
- const { header } = await this.loadData();
94
+ async getHeader(opts = {}) {
95
+ const { header } = await this.loadData(opts);
62
96
  return header;
63
97
  }
64
98
  getFeatures(query, opts = {}) {
@@ -66,8 +100,8 @@ export default class extends BaseFeatureDataAdapter {
66
100
  var _a;
67
101
  try {
68
102
  const { start, end, refName } = query;
69
- const { intervalTree } = await this.loadData();
70
- (_a = intervalTree[refName]) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(f));
103
+ const { intervalTreeMap } = await this.loadData(opts);
104
+ (_a = intervalTreeMap[refName](opts.statusCallback)) === null || _a === void 0 ? void 0 : _a.search([start, end]).forEach(f => observer.next(f));
71
105
  observer.complete();
72
106
  }
73
107
  catch (e) {
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function Gff3AdapterF(pluginManager: PluginManager): void;
@@ -1,10 +1,10 @@
1
1
  import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
2
  import configSchema from './configSchema';
3
- export default (pluginManager) => {
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
8
  getAdapterClass: () => import('./Gff3Adapter').then(r => r.default),
9
9
  }));
10
- };
10
+ }
@@ -5,7 +5,7 @@ import { TabixIndexedFile } from '@gmod/tabix';
5
5
  import { AnyConfigurationModel } from '@jbrowse/core/configuration';
6
6
  import PluginManager from '@jbrowse/core/PluginManager';
7
7
  import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
8
- export default class extends BaseFeatureDataAdapter {
8
+ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
9
9
  protected gff: TabixIndexedFile;
10
10
  protected dontRedispatch: string[];
11
11
  constructor(config: AnyConfigurationModel, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
@@ -7,7 +7,7 @@ import SimpleFeature from '@jbrowse/core/util/simpleFeature';
7
7
  import { TabixIndexedFile } from '@gmod/tabix';
8
8
  import gff from '@gmod/gff';
9
9
  import { readConfObject, } from '@jbrowse/core/configuration';
10
- export default class extends BaseFeatureDataAdapter {
10
+ export default class Gff3TabixAdapter extends BaseFeatureDataAdapter {
11
11
  constructor(config, getSubAdapter, pluginManager) {
12
12
  super(config, getSubAdapter, pluginManager);
13
13
  const gffGzLocation = readConfObject(config, 'gffGzLocation');
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function Gff3TabixAdapterF(pluginManager: PluginManager): void;
@@ -1,10 +1,10 @@
1
1
  import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
2
2
  import configSchema from './configSchema';
3
- export default (pluginManager) => {
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
8
  getAdapterClass: () => import('./Gff3TabixAdapter').then(r => r.default),
9
9
  }));
10
- };
10
+ }
@@ -1,3 +1,2 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
- declare const _default: (pluginManager: PluginManager) => void;
3
- export default _default;
2
+ export default function GuessGff3F(pluginManager: PluginManager): void;
@@ -1,5 +1,5 @@
1
1
  import { makeIndex, makeIndexType, getFileName, } from '@jbrowse/core/util/tracks';
2
- export default (pluginManager) => {
2
+ export default function GuessGff3F(pluginManager) {
3
3
  pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
4
4
  return (file, index, adapterHint) => {
5
5
  const regexGuess = /\.gff3?\.b?gz$/i;
@@ -38,4 +38,4 @@ export default (pluginManager) => {
38
38
  return adapterGuesser(file, index, adapterHint);
39
39
  };
40
40
  });
41
- };
41
+ }
package/esm/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import PluginManager from '@jbrowse/core/PluginManager';
2
2
  import Plugin from '@jbrowse/core/Plugin';
3
- export default class extends Plugin {
3
+ export default class GFF3Plugin extends Plugin {
4
4
  name: string;
5
5
  install(pluginManager: PluginManager): void;
6
6
  }
package/esm/index.js CHANGED
@@ -2,7 +2,7 @@ import Plugin from '@jbrowse/core/Plugin';
2
2
  import Gff3TabixAdapterF from './Gff3TabixAdapter';
3
3
  import Gff3AdapterF from './Gff3Adapter';
4
4
  import GuessGff3F from './GuessGff3';
5
- export default class extends Plugin {
5
+ export default class GFF3Plugin extends Plugin {
6
6
  constructor() {
7
7
  super(...arguments);
8
8
  this.name = 'GFF3Plugin';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-gff3",
3
- "version": "2.11.0",
3
+ "version": "2.11.2",
4
4
  "description": "JBrowse 2 gff3.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -55,5 +55,5 @@
55
55
  "distModule": "esm/index.js",
56
56
  "srcModule": "src/index.ts",
57
57
  "module": "esm/index.js",
58
- "gitHead": "3d43a820b9274a6160aa4dc15616147f390d9094"
58
+ "gitHead": "511048cb6965f0bf624c96de244e7fd47fce17d6"
59
59
  }