@jbrowse/plugin-gtf 2.17.0 → 3.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.
- package/dist/GtfAdapter/GtfAdapter.d.ts +4 -3
- package/dist/GtfAdapter/GtfAdapter.js +5 -7
- package/dist/GtfAdapter/configSchema.d.ts +0 -3
- package/dist/GtfAdapter/configSchema.js +1 -8
- package/dist/GtfAdapter/index.d.ts +2 -1
- package/dist/GtfAdapter/index.js +44 -3
- package/dist/GuessAdapter/index.d.ts +2 -0
- package/dist/GuessAdapter/index.js +18 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +4 -50
- package/dist/util.js +2 -7
- package/esm/GtfAdapter/GtfAdapter.d.ts +4 -3
- package/esm/GtfAdapter/GtfAdapter.js +6 -8
- package/esm/GtfAdapter/configSchema.d.ts +0 -3
- package/esm/GtfAdapter/configSchema.js +1 -8
- package/esm/GtfAdapter/index.d.ts +2 -1
- package/esm/GtfAdapter/index.js +10 -1
- package/esm/GuessAdapter/index.d.ts +2 -0
- package/esm/GuessAdapter/index.js +15 -0
- package/esm/index.d.ts +1 -1
- package/esm/index.js +4 -27
- package/esm/util.js +2 -7
- package/package.json +3 -3
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { NoAssemblyRegion } from '@jbrowse/core/util/types';
|
|
3
1
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
4
|
-
import {
|
|
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';
|
|
5
|
+
import type { NoAssemblyRegion } from '@jbrowse/core/util/types';
|
|
5
6
|
type StatusCallback = (arg: string) => void;
|
|
6
7
|
export default class GtfAdapter extends BaseFeatureDataAdapter {
|
|
7
8
|
calculatedIntervalTreeMap: Record<string, IntervalTree>;
|
|
@@ -3,13 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
|
|
6
7
|
const BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
|
|
8
|
+
const util_1 = require("@jbrowse/core/util");
|
|
7
9
|
const io_1 = require("@jbrowse/core/util/io");
|
|
8
10
|
const rxjs_1 = require("@jbrowse/core/util/rxjs");
|
|
9
|
-
const interval_tree_1 = __importDefault(require("@flatten-js/interval-tree"));
|
|
10
|
-
const util_1 = require("@jbrowse/core/util");
|
|
11
11
|
const gtf_nostream_1 = require("gtf-nostream");
|
|
12
|
-
// locals
|
|
13
12
|
const util_2 = require("../util");
|
|
14
13
|
class GtfAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
15
14
|
constructor() {
|
|
@@ -26,8 +25,7 @@ class GtfAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
26
25
|
let i = 0;
|
|
27
26
|
const decoder = new TextDecoder('utf8');
|
|
28
27
|
while (blockStart < buffer.length) {
|
|
29
|
-
const n = buffer.indexOf(
|
|
30
|
-
// could be a non-newline ended file, so slice to end of file if n===-1
|
|
28
|
+
const n = buffer.indexOf(10, blockStart);
|
|
31
29
|
const b = n === -1 ? buffer.subarray(blockStart) : buffer.subarray(blockStart, n);
|
|
32
30
|
const line = decoder.decode(b).trim();
|
|
33
31
|
if (line) {
|
|
@@ -105,8 +103,8 @@ class GtfAdapter extends BaseAdapter_1.BaseFeatureDataAdapter {
|
|
|
105
103
|
catch (e) {
|
|
106
104
|
observer.error(e);
|
|
107
105
|
}
|
|
108
|
-
}, opts.
|
|
106
|
+
}, opts.stopToken);
|
|
109
107
|
}
|
|
110
|
-
freeResources(
|
|
108
|
+
freeResources() { }
|
|
111
109
|
}
|
|
112
110
|
exports.default = GtfAdapter;
|
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const configuration_1 = require("@jbrowse/core/configuration");
|
|
4
|
-
|
|
5
|
-
* #config GtfAdapter
|
|
6
|
-
* #category adapter
|
|
7
|
-
*/
|
|
8
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
4
|
+
function x() { }
|
|
9
5
|
const GtfAdapter = (0, configuration_1.ConfigurationSchema)('GtfAdapter', {
|
|
10
|
-
/**
|
|
11
|
-
* #slot
|
|
12
|
-
*/
|
|
13
6
|
gtfLocation: {
|
|
14
7
|
type: 'fileLocation',
|
|
15
8
|
defaultValue: { uri: '/path/to/my.gtf', locationType: 'UriLocation' },
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
|
+
export default function GtfAdapterF(pluginManager: PluginManager): void;
|
package/dist/GtfAdapter/index.js
CHANGED
|
@@ -1,8 +1,49 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
37
|
};
|
|
5
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
|
|
8
|
-
|
|
39
|
+
exports.default = GtfAdapterF;
|
|
40
|
+
const pluggableElementTypes_1 = require("@jbrowse/core/pluggableElementTypes");
|
|
41
|
+
const configSchema_1 = __importDefault(require("./configSchema"));
|
|
42
|
+
function GtfAdapterF(pluginManager) {
|
|
43
|
+
pluginManager.addAdapterType(() => new pluggableElementTypes_1.AdapterType({
|
|
44
|
+
name: 'GtfAdapter',
|
|
45
|
+
displayName: 'GTF adapter',
|
|
46
|
+
configSchema: configSchema_1.default,
|
|
47
|
+
getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./GtfAdapter'))).then(r => r.default),
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = GuessAdapterF;
|
|
4
|
+
const util_1 = require("@jbrowse/core/util");
|
|
5
|
+
const tracks_1 = require("@jbrowse/core/util/tracks");
|
|
6
|
+
function GuessAdapterF(pluginManager) {
|
|
7
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
8
|
+
return (file, index, adapterHint) => {
|
|
9
|
+
const fileName = (0, tracks_1.getFileName)(file);
|
|
10
|
+
return (0, util_1.testAdapter)(fileName, /\.gtf(\.gz)?$/i, adapterHint, 'GtfAdapter')
|
|
11
|
+
? {
|
|
12
|
+
type: 'GtfAdapter',
|
|
13
|
+
gtfLocation: file,
|
|
14
|
+
}
|
|
15
|
+
: adapterGuesser(file, index, adapterHint);
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
2
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
2
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
3
3
|
export default class GtfPlugin extends Plugin {
|
|
4
4
|
name: string;
|
|
5
5
|
install(pluginManager: PluginManager): void;
|
package/dist/index.js
CHANGED
|
@@ -1,65 +1,19 @@
|
|
|
1
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 (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
4
|
};
|
|
28
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
const AdapterType_1 = __importDefault(require("@jbrowse/core/pluggableElementTypes/AdapterType"));
|
|
30
6
|
const Plugin_1 = __importDefault(require("@jbrowse/core/Plugin"));
|
|
31
|
-
const GtfAdapter_1 = require("./GtfAdapter");
|
|
32
|
-
const
|
|
7
|
+
const GtfAdapter_1 = __importDefault(require("./GtfAdapter"));
|
|
8
|
+
const GuessAdapter_1 = __importDefault(require("./GuessAdapter"));
|
|
33
9
|
class GtfPlugin extends Plugin_1.default {
|
|
34
10
|
constructor() {
|
|
35
11
|
super(...arguments);
|
|
36
12
|
this.name = 'GTFPlugin';
|
|
37
13
|
}
|
|
38
14
|
install(pluginManager) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
displayName: 'GTF adapter',
|
|
42
|
-
configSchema: GtfAdapter_1.configSchema,
|
|
43
|
-
getAdapterClass: () => Promise.resolve().then(() => __importStar(require('./GtfAdapter/GtfAdapter'))).then(r => r.default),
|
|
44
|
-
}));
|
|
45
|
-
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
46
|
-
return (file, index, adapterHint) => {
|
|
47
|
-
const regexGuess = /\.gtf(\.gz)?$/i;
|
|
48
|
-
const adapterName = 'GtfAdapter';
|
|
49
|
-
const fileName = (0, tracks_1.getFileName)(file);
|
|
50
|
-
const obj = {
|
|
51
|
-
type: adapterName,
|
|
52
|
-
gtfLocation: file,
|
|
53
|
-
};
|
|
54
|
-
if (regexGuess.test(fileName) && !adapterHint) {
|
|
55
|
-
return obj;
|
|
56
|
-
}
|
|
57
|
-
else if (adapterHint === adapterName) {
|
|
58
|
-
return obj;
|
|
59
|
-
}
|
|
60
|
-
return adapterGuesser(file, index, adapterHint);
|
|
61
|
-
};
|
|
62
|
-
});
|
|
15
|
+
(0, GtfAdapter_1.default)(pluginManager);
|
|
16
|
+
(0, GuessAdapter_1.default)(pluginManager);
|
|
63
17
|
}
|
|
64
18
|
}
|
|
65
19
|
exports.default = GtfPlugin;
|
package/dist/util.js
CHANGED
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.featureData = featureData;
|
|
4
4
|
function featureData(data) {
|
|
5
5
|
const f = { ...data };
|
|
6
|
-
f.start -= 1;
|
|
7
|
-
f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand];
|
|
6
|
+
f.start -= 1;
|
|
7
|
+
f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand];
|
|
8
8
|
f.phase = Number(data.frame);
|
|
9
9
|
f.refName = data.seq_name;
|
|
10
10
|
if (data.score === null) {
|
|
@@ -26,15 +26,11 @@ function featureData(data) {
|
|
|
26
26
|
for (const a of Object.keys(data.attributes)) {
|
|
27
27
|
let b = a.toLowerCase();
|
|
28
28
|
if (defaultFields.has(b)) {
|
|
29
|
-
// add "suffix" to tag name if it already exists
|
|
30
|
-
// reproduces behavior of NCList
|
|
31
29
|
b += '2';
|
|
32
30
|
}
|
|
33
31
|
if (data.attributes[a]) {
|
|
34
32
|
let attr = data.attributes[a];
|
|
35
33
|
if (Array.isArray(attr) && attr.length === 1) {
|
|
36
|
-
// gtf uses double quotes for text values in the attributes column,
|
|
37
|
-
// remove them
|
|
38
34
|
attr = attr[0].replaceAll(/^"|"$/g, '');
|
|
39
35
|
}
|
|
40
36
|
f[b] = attr;
|
|
@@ -42,7 +38,6 @@ function featureData(data) {
|
|
|
42
38
|
}
|
|
43
39
|
f.refName = f.seq_name;
|
|
44
40
|
f.type = f.featureType;
|
|
45
|
-
// the SimpleFeature constructor takes care of recursively inflating subfeatures
|
|
46
41
|
if (data.child_features && data.child_features.length > 0) {
|
|
47
42
|
f.subfeatures = data.child_features.flatMap(childLocs => childLocs.map(childLoc => featureData(childLoc)));
|
|
48
43
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { NoAssemblyRegion } from '@jbrowse/core/util/types';
|
|
3
1
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
4
|
-
import {
|
|
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';
|
|
5
|
+
import type { NoAssemblyRegion } from '@jbrowse/core/util/types';
|
|
5
6
|
type StatusCallback = (arg: string) => void;
|
|
6
7
|
export default class GtfAdapter extends BaseFeatureDataAdapter {
|
|
7
8
|
calculatedIntervalTreeMap: Record<string, IntervalTree>;
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
-
import { openLocation } from '@jbrowse/core/util/io';
|
|
3
|
-
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
4
1
|
import IntervalTree from '@flatten-js/interval-tree';
|
|
2
|
+
import { BaseFeatureDataAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
5
3
|
import { SimpleFeature, fetchAndMaybeUnzip } from '@jbrowse/core/util';
|
|
4
|
+
import { openLocation } from '@jbrowse/core/util/io';
|
|
5
|
+
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
6
6
|
import { parseStringSync } from 'gtf-nostream';
|
|
7
|
-
// locals
|
|
8
7
|
import { featureData } from '../util';
|
|
9
8
|
export default class GtfAdapter extends BaseFeatureDataAdapter {
|
|
10
9
|
constructor() {
|
|
@@ -21,8 +20,7 @@ export default class GtfAdapter extends BaseFeatureDataAdapter {
|
|
|
21
20
|
let i = 0;
|
|
22
21
|
const decoder = new TextDecoder('utf8');
|
|
23
22
|
while (blockStart < buffer.length) {
|
|
24
|
-
const n = buffer.indexOf(
|
|
25
|
-
// could be a non-newline ended file, so slice to end of file if n===-1
|
|
23
|
+
const n = buffer.indexOf(10, blockStart);
|
|
26
24
|
const b = n === -1 ? buffer.subarray(blockStart) : buffer.subarray(blockStart, n);
|
|
27
25
|
const line = decoder.decode(b).trim();
|
|
28
26
|
if (line) {
|
|
@@ -100,7 +98,7 @@ export default class GtfAdapter extends BaseFeatureDataAdapter {
|
|
|
100
98
|
catch (e) {
|
|
101
99
|
observer.error(e);
|
|
102
100
|
}
|
|
103
|
-
}, opts.
|
|
101
|
+
}, opts.stopToken);
|
|
104
102
|
}
|
|
105
|
-
freeResources(
|
|
103
|
+
freeResources() { }
|
|
106
104
|
}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
1
|
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
-
|
|
3
|
-
* #config GtfAdapter
|
|
4
|
-
* #category adapter
|
|
5
|
-
*/
|
|
6
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
2
|
+
function x() { }
|
|
7
3
|
const GtfAdapter = ConfigurationSchema('GtfAdapter', {
|
|
8
|
-
/**
|
|
9
|
-
* #slot
|
|
10
|
-
*/
|
|
11
4
|
gtfLocation: {
|
|
12
5
|
type: 'fileLocation',
|
|
13
6
|
defaultValue: { uri: '/path/to/my.gtf', locationType: 'UriLocation' },
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
2
|
+
export default function GtfAdapterF(pluginManager: PluginManager): void;
|
package/esm/GtfAdapter/index.js
CHANGED
|
@@ -1 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import { AdapterType } from '@jbrowse/core/pluggableElementTypes';
|
|
2
|
+
import configSchema from './configSchema';
|
|
3
|
+
export default function GtfAdapterF(pluginManager) {
|
|
4
|
+
pluginManager.addAdapterType(() => new AdapterType({
|
|
5
|
+
name: 'GtfAdapter',
|
|
6
|
+
displayName: 'GTF adapter',
|
|
7
|
+
configSchema,
|
|
8
|
+
getAdapterClass: () => import('./GtfAdapter').then(r => r.default),
|
|
9
|
+
}));
|
|
10
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { testAdapter } from '@jbrowse/core/util';
|
|
2
|
+
import { getFileName } from '@jbrowse/core/util/tracks';
|
|
3
|
+
export default function GuessAdapterF(pluginManager) {
|
|
4
|
+
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
5
|
+
return (file, index, adapterHint) => {
|
|
6
|
+
const fileName = getFileName(file);
|
|
7
|
+
return testAdapter(fileName, /\.gtf(\.gz)?$/i, adapterHint, 'GtfAdapter')
|
|
8
|
+
? {
|
|
9
|
+
type: 'GtfAdapter',
|
|
10
|
+
gtfLocation: file,
|
|
11
|
+
}
|
|
12
|
+
: adapterGuesser(file, index, adapterHint);
|
|
13
|
+
};
|
|
14
|
+
});
|
|
15
|
+
}
|
package/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import PluginManager from '@jbrowse/core/PluginManager';
|
|
2
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
2
|
+
import type PluginManager from '@jbrowse/core/PluginManager';
|
|
3
3
|
export default class GtfPlugin extends Plugin {
|
|
4
4
|
name: string;
|
|
5
5
|
install(pluginManager: PluginManager): void;
|
package/esm/index.js
CHANGED
|
@@ -1,36 +1,13 @@
|
|
|
1
|
-
import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType';
|
|
2
1
|
import Plugin from '@jbrowse/core/Plugin';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import GtfAdapterF from './GtfAdapter';
|
|
3
|
+
import GuessAdapterF from './GuessAdapter';
|
|
5
4
|
export default class GtfPlugin extends Plugin {
|
|
6
5
|
constructor() {
|
|
7
6
|
super(...arguments);
|
|
8
7
|
this.name = 'GTFPlugin';
|
|
9
8
|
}
|
|
10
9
|
install(pluginManager) {
|
|
11
|
-
pluginManager
|
|
12
|
-
|
|
13
|
-
displayName: 'GTF adapter',
|
|
14
|
-
configSchema: gtfAdapterConfigSchema,
|
|
15
|
-
getAdapterClass: () => import('./GtfAdapter/GtfAdapter').then(r => r.default),
|
|
16
|
-
}));
|
|
17
|
-
pluginManager.addToExtensionPoint('Core-guessAdapterForLocation', (adapterGuesser) => {
|
|
18
|
-
return (file, index, adapterHint) => {
|
|
19
|
-
const regexGuess = /\.gtf(\.gz)?$/i;
|
|
20
|
-
const adapterName = 'GtfAdapter';
|
|
21
|
-
const fileName = getFileName(file);
|
|
22
|
-
const obj = {
|
|
23
|
-
type: adapterName,
|
|
24
|
-
gtfLocation: file,
|
|
25
|
-
};
|
|
26
|
-
if (regexGuess.test(fileName) && !adapterHint) {
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
29
|
-
else if (adapterHint === adapterName) {
|
|
30
|
-
return obj;
|
|
31
|
-
}
|
|
32
|
-
return adapterGuesser(file, index, adapterHint);
|
|
33
|
-
};
|
|
34
|
-
});
|
|
10
|
+
GtfAdapterF(pluginManager);
|
|
11
|
+
GuessAdapterF(pluginManager);
|
|
35
12
|
}
|
|
36
13
|
}
|
package/esm/util.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function featureData(data) {
|
|
2
2
|
const f = { ...data };
|
|
3
|
-
f.start -= 1;
|
|
4
|
-
f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand];
|
|
3
|
+
f.start -= 1;
|
|
4
|
+
f.strand = { '+': 1, '-': -1, '.': 0, '?': undefined }[data.strand];
|
|
5
5
|
f.phase = Number(data.frame);
|
|
6
6
|
f.refName = data.seq_name;
|
|
7
7
|
if (data.score === null) {
|
|
@@ -23,15 +23,11 @@ export function featureData(data) {
|
|
|
23
23
|
for (const a of Object.keys(data.attributes)) {
|
|
24
24
|
let b = a.toLowerCase();
|
|
25
25
|
if (defaultFields.has(b)) {
|
|
26
|
-
// add "suffix" to tag name if it already exists
|
|
27
|
-
// reproduces behavior of NCList
|
|
28
26
|
b += '2';
|
|
29
27
|
}
|
|
30
28
|
if (data.attributes[a]) {
|
|
31
29
|
let attr = data.attributes[a];
|
|
32
30
|
if (Array.isArray(attr) && attr.length === 1) {
|
|
33
|
-
// gtf uses double quotes for text values in the attributes column,
|
|
34
|
-
// remove them
|
|
35
31
|
attr = attr[0].replaceAll(/^"|"$/g, '');
|
|
36
32
|
}
|
|
37
33
|
f[b] = attr;
|
|
@@ -39,7 +35,6 @@ export function featureData(data) {
|
|
|
39
35
|
}
|
|
40
36
|
f.refName = f.seq_name;
|
|
41
37
|
f.type = f.featureType;
|
|
42
|
-
// the SimpleFeature constructor takes care of recursively inflating subfeatures
|
|
43
38
|
if (data.child_features && data.child_features.length > 0) {
|
|
44
39
|
f.subfeatures = data.child_features.flatMap(childLocs => childLocs.map(childLoc => featureData(childLoc)));
|
|
45
40
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jbrowse/plugin-gtf",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "JBrowse 2 gtf feature adapter",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jbrowse",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@flatten-js/interval-tree": "^1.0.15",
|
|
40
|
-
"@gmod/bgzf-filehandle": "^
|
|
40
|
+
"@gmod/bgzf-filehandle": "^2.0.1",
|
|
41
41
|
"gtf-nostream": "^1.0.0"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"distModule": "esm/index.js",
|
|
57
57
|
"srcModule": "src/index.ts",
|
|
58
58
|
"module": "esm/index.js",
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "2c6897f1fa732b1db5b094d1dca197e333e95319"
|
|
60
60
|
}
|