@jbrowse/core 2.3.4 → 2.4.1
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/BaseFeatureWidget/BaseFeatureDetail.d.ts +18 -19
- package/BaseFeatureWidget/BaseFeatureDetail.js +76 -69
- package/BaseFeatureWidget/SequenceBox.js +9 -3
- package/BaseFeatureWidget/SequenceFeatureDetails.js +70 -52
- package/BaseFeatureWidget/SequencePanel.d.ts +3 -3
- package/BaseFeatureWidget/SequencePanel.js +8 -5
- package/BaseFeatureWidget/index.js +2 -2
- package/CorePlugin.js +2 -7
- package/PluginLoader.d.ts +1 -1
- package/PluginLoader.js +20 -24
- package/PluginManager.d.ts +1 -1
- package/PluginManager.js +2 -3
- package/ReExports/Attributes.d.ts +1 -2
- package/ReExports/Attributes.js +4 -3
- package/ReExports/BaseCard.d.ts +1 -2
- package/ReExports/BaseCard.js +4 -3
- package/ReExports/DataGrid.d.ts +1 -2
- package/ReExports/DataGrid.js +2 -2
- package/ReExports/FeatureDetails.d.ts +1 -2
- package/ReExports/FeatureDetails.js +4 -3
- package/ReExports/index.d.ts +1 -2
- package/ReExports/index.js +3 -2
- package/ReExports/modules.d.ts +1 -1
- package/ReExports/modules.js +2 -2
- package/assemblyManager/assembly.js +5 -5
- package/assemblyManager/assemblyConfigSchema.js +2 -2
- package/configuration/configurationSchema.js +1 -1
- package/configuration/util.js +1 -1
- package/data_adapters/BaseAdapter.js +1 -1
- package/data_adapters/CytobandAdapter/CytobandAdapter.d.ts +8 -0
- package/data_adapters/CytobandAdapter/CytobandAdapter.js +40 -0
- package/data_adapters/CytobandAdapter/configSchema.d.ts +2 -0
- package/data_adapters/CytobandAdapter/configSchema.js +17 -0
- package/data_adapters/CytobandAdapter/index.d.ts +3 -0
- package/data_adapters/CytobandAdapter/index.js +37 -0
- package/data_adapters/dataAdapterCache.d.ts +3 -2
- package/data_adapters/dataAdapterCache.js +2 -3
- package/package.json +5 -4
- package/pluggableElementTypes/PluggableElementBase.d.ts +1 -1
- package/pluggableElementTypes/PluggableElementBase.js +1 -2
- package/pluggableElementTypes/RpcMethodType.d.ts +5 -8
- package/pluggableElementTypes/RpcMethodType.js +23 -34
- package/pluggableElementTypes/index.d.ts +11 -1
- package/pluggableElementTypes/index.js +23 -23
- package/pluggableElementTypes/models/BaseConnectionModelFactory.js +2 -2
- package/pluggableElementTypes/models/BaseTrackModel.js +8 -13
- package/pluggableElementTypes/renderers/CircularChordRendererType.d.ts +13 -2
- package/pluggableElementTypes/renderers/CircularChordRendererType.js +10 -2
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.d.ts +8 -2
- package/pluggableElementTypes/renderers/ComparativeServerSideRendererType.js +10 -4
- package/pluggableElementTypes/renderers/ServerSideRendererType.d.ts +1 -1
- package/pluggableElementTypes/renderers/ServerSideRendererType.js +2 -34
- package/pluggableElementTypes/renderers/index.d.ts +7 -9
- package/pluggableElementTypes/renderers/index.js +15 -15
- package/pluggableElementTypes/renderers/util/serializableFilterChain.js +1 -1
- package/rpc/BaseRpcDriver.js +7 -8
- package/rpc/WebWorkerRpcDriver.js +18 -12
- package/rpc/coreRpcMethods.d.ts +9 -11
- package/rpc/coreRpcMethods.js +17 -17
- package/rpc/methods/CoreGetFeatureDetails.js +1 -1
- package/rpc/methods/util.d.ts +2 -2
- package/rpc/methods/util.js +2 -2
- package/rpc/remoteAbortSignals.js +0 -1
- package/tsconfig.build.tsbuildinfo +1 -1
- package/ui/App.js +3 -18
- package/ui/AppLogo.js +1 -6
- package/ui/ColorPicker.js +1 -1
- package/ui/Dialog.js +1 -1
- package/ui/DrawerWidget.js +4 -4
- package/ui/EditableTypography.js +1 -1
- package/ui/FileSelector/FileSelector.d.ts +2 -2
- package/ui/FileSelector/FileSelector.js +24 -35
- package/ui/FileSelector/index.d.ts +1 -2
- package/ui/FileSelector/index.js +3 -2
- package/ui/LoadingEllipses.js +2 -2
- package/ui/Menu.js +45 -32
- package/ui/ResizeBar.js +10 -6
- package/ui/ResizeHandle.js +3 -6
- package/ui/SanitizedHTML.js +2 -0
- package/ui/ViewContainer.js +7 -44
- package/ui/ViewMenu.d.ts +9 -0
- package/ui/ViewMenu.js +69 -0
- package/ui/ViewPanel.d.ts +19 -0
- package/ui/ViewPanel.js +49 -0
- package/ui/theme.d.ts +10 -166
- package/ui/theme.js +260 -48
- package/util/Base1DUtils.js +16 -14
- package/util/Base1DViewModel.d.ts +1 -1
- package/util/Base1DViewModel.js +9 -8
- package/util/aborting.js +1 -1
- package/util/analytics.js +1 -1
- package/util/blockTypes.js +10 -10
- package/util/color/index.d.ts +1 -2
- package/util/color/index.js +4 -3
- package/util/idMaker.js +5 -8
- package/util/index.d.ts +9 -9
- package/util/index.js +35 -52
- package/util/io/RemoteFileWithRangeCache.js +2 -2
- package/util/io/index.d.ts +1 -2
- package/util/io/index.js +6 -6
- package/util/jexl.js +3 -1
- package/util/layouts/GranularRectLayout.js +10 -4
- package/util/layouts/MultiLayout.js +1 -1
- package/util/layouts/SceneGraph.js +3 -7
- package/util/map-obj.d.ts +3 -0
- package/util/map-obj.js +33 -0
- package/util/offscreenCanvasPonyfill.js +4 -3
- package/util/offscreenCanvasUtils.d.ts +18 -4
- package/util/offscreenCanvasUtils.js +49 -7
- package/util/tracks.d.ts +1 -1
- package/util/tracks.js +0 -1
- package/util/types/index.d.ts +1 -1
- package/util/types/index.js +3 -3
- package/util/types/mst.js +3 -3
- package/data_adapters/CytobandAdapter.d.ts +0 -8
- package/data_adapters/CytobandAdapter.js +0 -49
package/util/map-obj.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
// adapted from map-obj (MIT), with modifications to pass the "whole object"
|
|
4
|
+
// from an array of objects into itself
|
|
5
|
+
const isObject = (value) => typeof value === 'object' && value !== null;
|
|
6
|
+
// Customized for this use-case
|
|
7
|
+
const isObjectCustom = (value) => isObject(value) &&
|
|
8
|
+
!(value instanceof RegExp) &&
|
|
9
|
+
!(value instanceof Error) &&
|
|
10
|
+
!(value instanceof Date) &&
|
|
11
|
+
!(globalThis.Blob && value instanceof globalThis.Blob);
|
|
12
|
+
function map(object, mapper, isSeen = new WeakSet()) {
|
|
13
|
+
if (isSeen.has(object)) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
isSeen.add(object);
|
|
17
|
+
const mapArray = (array) => array.forEach(element => {
|
|
18
|
+
mapper(element);
|
|
19
|
+
if (isObject(element)) {
|
|
20
|
+
map(element, mapper, isSeen);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
if (Array.isArray(object)) {
|
|
24
|
+
mapArray(object);
|
|
25
|
+
}
|
|
26
|
+
for (const value of Object.values(object)) {
|
|
27
|
+
mapper(value);
|
|
28
|
+
if (isObjectCustom(value)) {
|
|
29
|
+
Array.isArray(value) ? mapArray(value) : map(value, mapper, isSeen);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.default = map;
|
|
@@ -33,19 +33,20 @@ if (weHave.realOffscreenCanvas) {
|
|
|
33
33
|
else if (weHave.node) {
|
|
34
34
|
// use node-canvas if we are running in node (i.e. automated tests)
|
|
35
35
|
exports.createCanvas = (...args) => {
|
|
36
|
-
// @ts-
|
|
36
|
+
// @ts-expect-error
|
|
37
37
|
// eslint-disable-next-line no-undef
|
|
38
38
|
return nodeCreateCanvas(...args);
|
|
39
39
|
};
|
|
40
40
|
exports.createImageBitmap = async (canvas, ...otherargs) => {
|
|
41
|
-
if (otherargs.length) {
|
|
41
|
+
if (otherargs.length > 0) {
|
|
42
42
|
throw new Error('only one-argument uses of createImageBitmap are supported by the node offscreencanvas ponyfill');
|
|
43
43
|
}
|
|
44
44
|
const dataUri = canvas.toDataURL();
|
|
45
|
-
// @ts-
|
|
45
|
+
// @ts-expect-error
|
|
46
46
|
// eslint-disable-next-line no-undef
|
|
47
47
|
const img = new nodeImage();
|
|
48
48
|
return new Promise((resolve, reject) => {
|
|
49
|
+
// need onload for jest
|
|
49
50
|
img.onload = () => resolve(img);
|
|
50
51
|
img.onerror = reject;
|
|
51
52
|
img.src = dataUri;
|
|
@@ -1,14 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
export type RenderReturn = Record<string, unknown
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export type RenderReturn = Record<string, unknown> | void;
|
|
3
|
+
type RendererRet = Promise<RenderReturn> | RenderReturn;
|
|
3
4
|
export declare function renderToAbstractCanvas(width: number, height: number, opts: {
|
|
4
5
|
exportSVG?: {
|
|
5
6
|
rasterizeLayers?: boolean;
|
|
7
|
+
scale?: number;
|
|
6
8
|
};
|
|
7
|
-
highResolutionScaling
|
|
8
|
-
}, cb: (ctx: CanvasRenderingContext2D) =>
|
|
9
|
+
highResolutionScaling?: number;
|
|
10
|
+
}, cb: (ctx: CanvasRenderingContext2D) => RendererRet): Promise<{
|
|
9
11
|
canvasRecordedData: any;
|
|
10
12
|
} | {
|
|
11
13
|
reactElement: JSX.Element;
|
|
12
14
|
} | {
|
|
13
15
|
imageData: any;
|
|
14
16
|
}>;
|
|
17
|
+
export declare function getSerializedSvg(results: {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
canvasRecordedData: unknown;
|
|
21
|
+
}): Promise<string>;
|
|
22
|
+
export declare function ReactRendering({ rendering, }: {
|
|
23
|
+
rendering: {
|
|
24
|
+
reactElement?: React.ReactNode;
|
|
25
|
+
html?: string;
|
|
26
|
+
};
|
|
27
|
+
}): JSX.Element;
|
|
28
|
+
export {};
|
|
@@ -1,16 +1,39 @@
|
|
|
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
|
+
};
|
|
2
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
27
|
};
|
|
5
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.renderToAbstractCanvas = void 0;
|
|
29
|
+
exports.ReactRendering = exports.getSerializedSvg = exports.renderToAbstractCanvas = void 0;
|
|
7
30
|
const react_1 = __importDefault(require("react"));
|
|
8
31
|
const canvas_sequencer_1 = require("canvas-sequencer");
|
|
9
32
|
// locals
|
|
10
33
|
const offscreenCanvasPonyfill_1 = require("./offscreenCanvasPonyfill");
|
|
11
34
|
const index_1 = require("./index");
|
|
12
35
|
async function renderToAbstractCanvas(width, height, opts, cb) {
|
|
13
|
-
const { exportSVG, highResolutionScaling
|
|
36
|
+
const { exportSVG, highResolutionScaling = 1 } = opts;
|
|
14
37
|
if (exportSVG) {
|
|
15
38
|
if (!exportSVG.rasterizeLayers) {
|
|
16
39
|
const fakeCtx = new canvas_sequencer_1.CanvasSequence();
|
|
@@ -21,13 +44,13 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
|
|
|
21
44
|
};
|
|
22
45
|
}
|
|
23
46
|
else {
|
|
24
|
-
const
|
|
25
|
-
const canvas = (0, offscreenCanvasPonyfill_1.createCanvas)(Math.ceil(width *
|
|
47
|
+
const s = exportSVG.scale || highResolutionScaling;
|
|
48
|
+
const canvas = (0, offscreenCanvasPonyfill_1.createCanvas)(Math.ceil(width * s), height * s);
|
|
26
49
|
const ctx = canvas.getContext('2d');
|
|
27
50
|
if (!ctx) {
|
|
28
51
|
throw new Error('2d canvas rendering not supported on this platform');
|
|
29
52
|
}
|
|
30
|
-
ctx.scale(
|
|
53
|
+
ctx.scale(s, s);
|
|
31
54
|
const result = await cb(ctx);
|
|
32
55
|
// two methods needed for converting canvas to PNG, one for webworker
|
|
33
56
|
// offscreen canvas, one for main thread
|
|
@@ -42,14 +65,33 @@ async function renderToAbstractCanvas(width, height, opts, cb) {
|
|
|
42
65
|
}
|
|
43
66
|
}
|
|
44
67
|
else {
|
|
45
|
-
const
|
|
68
|
+
const s = highResolutionScaling;
|
|
69
|
+
const canvas = (0, offscreenCanvasPonyfill_1.createCanvas)(Math.ceil(width * s), height * s);
|
|
46
70
|
const ctx = canvas.getContext('2d');
|
|
47
71
|
if (!ctx) {
|
|
48
72
|
throw new Error('2d canvas rendering not supported on this platform');
|
|
49
73
|
}
|
|
50
|
-
ctx.scale(
|
|
74
|
+
ctx.scale(s, s);
|
|
51
75
|
const result = await cb(ctx);
|
|
52
76
|
return { ...result, imageData: await (0, offscreenCanvasPonyfill_1.createImageBitmap)(canvas) };
|
|
53
77
|
}
|
|
54
78
|
}
|
|
55
79
|
exports.renderToAbstractCanvas = renderToAbstractCanvas;
|
|
80
|
+
async function getSerializedSvg(results) {
|
|
81
|
+
const { width, height, canvasRecordedData } = results;
|
|
82
|
+
// @ts-ignore needs to be ignore not expect error, produces error in build step
|
|
83
|
+
const C2S = await Promise.resolve().then(() => __importStar(require('canvas2svg')));
|
|
84
|
+
const ctx = new C2S.default(width, height);
|
|
85
|
+
const seq = new canvas_sequencer_1.CanvasSequence(canvasRecordedData);
|
|
86
|
+
seq.execute(ctx);
|
|
87
|
+
// innerHTML strips the outer <svg> element from returned data, we add
|
|
88
|
+
// our own <svg> element in the view's SVG export
|
|
89
|
+
return ctx.getSvg().innerHTML;
|
|
90
|
+
}
|
|
91
|
+
exports.getSerializedSvg = getSerializedSvg;
|
|
92
|
+
function ReactRendering({ rendering, }) {
|
|
93
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, react_1.default.isValidElement(rendering.reactElement) ? (rendering.reactElement) : (react_1.default.createElement("g", {
|
|
94
|
+
/* eslint-disable-next-line react/no-danger */
|
|
95
|
+
dangerouslySetInnerHTML: { __html: rendering.html || '' } }))));
|
|
96
|
+
}
|
|
97
|
+
exports.ReactRendering = ReactRendering;
|
package/util/tracks.d.ts
CHANGED
package/util/tracks.js
CHANGED
|
@@ -141,7 +141,6 @@ function guessAdapter(file, index, adapterHint, model) {
|
|
|
141
141
|
exports.guessAdapter = guessAdapter;
|
|
142
142
|
function guessTrackType(adapterType, model) {
|
|
143
143
|
if (model) {
|
|
144
|
-
// @ts-ignore
|
|
145
144
|
const session = (0, index_1.getSession)(model);
|
|
146
145
|
const trackTypeGuesser = (0, index_1.getEnv)(session).pluginManager.evaluateExtensionPoint('Core-guessTrackTypeForLocation', (_adapterName) => {
|
|
147
146
|
return undefined;
|
package/util/types/index.d.ts
CHANGED
|
@@ -22,7 +22,6 @@ export interface SnackAction {
|
|
|
22
22
|
onClick: () => void;
|
|
23
23
|
}
|
|
24
24
|
export type AssemblyManager = Instance<ReturnType<typeof assemblyManager>>;
|
|
25
|
-
export type { TextSearchManager };
|
|
26
25
|
export interface BasePlugin {
|
|
27
26
|
version?: string;
|
|
28
27
|
name: string;
|
|
@@ -230,3 +229,4 @@ export type PreBlobLocation = {
|
|
|
230
229
|
blob: File;
|
|
231
230
|
};
|
|
232
231
|
export type PreFileLocation = PreUriLocation | PreLocalPathLocation | PreBlobLocation;
|
|
232
|
+
export { type default as TextSearchManager } from '../../TextSearch/TextSearchManager';
|
package/util/types/index.js
CHANGED
|
@@ -37,7 +37,7 @@ function isSessionModelWithConfigEditing(thing) {
|
|
|
37
37
|
exports.isSessionModelWithConfigEditing = isSessionModelWithConfigEditing;
|
|
38
38
|
function isSessionWithAddTracks(thing) {
|
|
39
39
|
return (
|
|
40
|
-
// @ts-
|
|
40
|
+
// @ts-expect-error
|
|
41
41
|
isSessionModel(thing) && 'addTrackConf' in thing && !thing.disableAddTracks);
|
|
42
42
|
}
|
|
43
43
|
exports.isSessionWithAddTracks = isSessionWithAddTracks;
|
|
@@ -71,7 +71,7 @@ function isTrackModel(thing) {
|
|
|
71
71
|
return (typeof thing === 'object' &&
|
|
72
72
|
thing !== null &&
|
|
73
73
|
'configuration' in thing &&
|
|
74
|
-
// @ts-
|
|
74
|
+
// @ts-expect-error
|
|
75
75
|
thing.configuration.trackId);
|
|
76
76
|
}
|
|
77
77
|
exports.isTrackModel = isTrackModel;
|
|
@@ -79,7 +79,7 @@ function isDisplayModel(thing) {
|
|
|
79
79
|
return (typeof thing === 'object' &&
|
|
80
80
|
thing !== null &&
|
|
81
81
|
'configuration' in thing &&
|
|
82
|
-
// @ts-
|
|
82
|
+
// @ts-expect-error
|
|
83
83
|
thing.configuration.displayId);
|
|
84
84
|
}
|
|
85
85
|
exports.isDisplayModel = isDisplayModel;
|
package/util/types/mst.js
CHANGED
|
@@ -70,16 +70,16 @@ exports.UriLocation = mobx_state_tree_1.types.snapshotProcessor(exports.UriLocat
|
|
|
70
70
|
},
|
|
71
71
|
});
|
|
72
72
|
exports.FileLocation = mobx_state_tree_1.types.snapshotProcessor(mobx_state_tree_1.types.union(exports.LocalPathLocation, exports.UriLocation, exports.BlobLocation), {
|
|
73
|
-
// @ts-
|
|
73
|
+
// @ts-expect-error
|
|
74
74
|
preProcessor(snap) {
|
|
75
75
|
if (!snap) {
|
|
76
76
|
return undefined;
|
|
77
77
|
}
|
|
78
|
-
// @ts-
|
|
78
|
+
// @ts-expect-error
|
|
79
79
|
// xref https://github.com/mobxjs/mobx-state-tree/issues/1524 for Omit
|
|
80
80
|
const { locationType, ...rest } = snap;
|
|
81
81
|
if (!locationType) {
|
|
82
|
-
// @ts-
|
|
82
|
+
// @ts-expect-error
|
|
83
83
|
const { uri, localPath, blob } = rest;
|
|
84
84
|
let locationType = '';
|
|
85
85
|
if (uri !== undefined) {
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import SimpleFeature from '../util/simpleFeature';
|
|
2
|
-
import { BaseAdapter } from './BaseAdapter';
|
|
3
|
-
declare const configSchema: import("../configuration").AnyConfigurationSchemaType;
|
|
4
|
-
declare class CytobandAdapter extends BaseAdapter {
|
|
5
|
-
getData(): Promise<SimpleFeature[]>;
|
|
6
|
-
freeResources(): void;
|
|
7
|
-
}
|
|
8
|
-
export { configSchema, CytobandAdapter as DataAdapter };
|
|
@@ -1,49 +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
|
-
exports.DataAdapter = exports.configSchema = void 0;
|
|
7
|
-
const simpleFeature_1 = __importDefault(require("../util/simpleFeature"));
|
|
8
|
-
const configuration_1 = require("../configuration");
|
|
9
|
-
const io_1 = require("../util/io");
|
|
10
|
-
const BaseAdapter_1 = require("./BaseAdapter");
|
|
11
|
-
/**
|
|
12
|
-
* #config CytobandAdapter
|
|
13
|
-
*/
|
|
14
|
-
function x() { } // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
15
|
-
const configSchema = (0, configuration_1.ConfigurationSchema)('CytobandAdapter', {
|
|
16
|
-
/**
|
|
17
|
-
* #slot
|
|
18
|
-
*/
|
|
19
|
-
cytobandLocation: {
|
|
20
|
-
type: 'fileLocation',
|
|
21
|
-
defaultValue: { uri: '/path/to/cytoband.txt.gz' },
|
|
22
|
-
},
|
|
23
|
-
}, { explicitlyTyped: true });
|
|
24
|
-
exports.configSchema = configSchema;
|
|
25
|
-
class CytobandAdapter extends BaseAdapter_1.BaseAdapter {
|
|
26
|
-
async getData() {
|
|
27
|
-
const loc = (0, configuration_1.readConfObject)(this.config, 'cytobandLocation');
|
|
28
|
-
if (loc.uri === '' || loc.uri === '/path/to/cytoband.txt.gz') {
|
|
29
|
-
return [];
|
|
30
|
-
}
|
|
31
|
-
const data = await (0, io_1.openLocation)(loc).readFile('utf8');
|
|
32
|
-
return data
|
|
33
|
-
.split(/\n|\r\n|\r/)
|
|
34
|
-
.filter(f => !!f.trim())
|
|
35
|
-
.map(line => {
|
|
36
|
-
const [refName, start, end, name, type] = line.split('\t');
|
|
37
|
-
return new simpleFeature_1.default({
|
|
38
|
-
uniqueId: line,
|
|
39
|
-
refName,
|
|
40
|
-
start: +start,
|
|
41
|
-
end: +end,
|
|
42
|
-
name,
|
|
43
|
-
type,
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
freeResources( /* { region } */) { }
|
|
48
|
-
}
|
|
49
|
-
exports.DataAdapter = CytobandAdapter;
|