@jbrowse/plugin-legacy-jbrowse 1.7.11 → 2.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/JBrowse1Connection/configSchema.js +18 -28
- package/dist/JBrowse1Connection/configSchema.js.map +1 -0
- package/dist/JBrowse1Connection/index.js +10 -22
- package/dist/JBrowse1Connection/index.js.map +1 -0
- package/dist/JBrowse1Connection/jb1ConfigLoad.js +387 -501
- package/dist/JBrowse1Connection/jb1ConfigLoad.js.map +1 -0
- package/dist/JBrowse1Connection/jb1ConfigParse.js +414 -435
- package/dist/JBrowse1Connection/jb1ConfigParse.js.map +1 -0
- package/dist/JBrowse1Connection/jb1ToJb2.js +405 -546
- package/dist/JBrowse1Connection/jb1ToJb2.js.map +1 -0
- package/dist/JBrowse1Connection/model.js +49 -57
- package/dist/JBrowse1Connection/model.js.map +1 -0
- package/dist/JBrowse1Connection/types.js +2 -4
- package/dist/JBrowse1Connection/types.js.map +1 -0
- package/dist/JBrowse1Connection/util.js +123 -130
- package/dist/JBrowse1Connection/util.js.map +1 -0
- package/dist/JBrowse1TextSeachAdapter/HttpMap.js +181 -326
- package/dist/JBrowse1TextSeachAdapter/HttpMap.js.map +1 -0
- package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js +164 -185
- package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js.map +1 -0
- package/dist/JBrowse1TextSeachAdapter/configSchema.js +20 -33
- package/dist/JBrowse1TextSeachAdapter/configSchema.js.map +1 -0
- package/dist/JBrowse1TextSeachAdapter/index.js +10 -22
- package/dist/JBrowse1TextSeachAdapter/index.js.map +1 -0
- package/dist/NCListAdapter/NCListAdapter.js +164 -224
- package/dist/NCListAdapter/NCListAdapter.js.map +1 -0
- package/dist/NCListAdapter/NCListFeature.js +68 -125
- package/dist/NCListAdapter/NCListFeature.js.map +1 -0
- package/dist/NCListAdapter/configSchema.js +17 -26
- package/dist/NCListAdapter/configSchema.js.map +1 -0
- package/dist/NCListAdapter/index.js +8 -14
- package/dist/NCListAdapter/index.js.map +1 -0
- package/dist/index.js +97 -116
- package/dist/index.js.map +1 -0
- package/esm/JBrowse1Connection/configSchema.d.ts +2 -0
- package/esm/JBrowse1Connection/configSchema.js +18 -0
- package/esm/JBrowse1Connection/configSchema.js.map +1 -0
- package/esm/JBrowse1Connection/index.d.ts +2 -0
- package/esm/JBrowse1Connection/index.js +3 -0
- package/esm/JBrowse1Connection/index.js.map +1 -0
- package/esm/JBrowse1Connection/jb1ConfigLoad.d.ts +36 -0
- package/esm/JBrowse1Connection/jb1ConfigLoad.js +281 -0
- package/esm/JBrowse1Connection/jb1ConfigLoad.js.map +1 -0
- package/esm/JBrowse1Connection/jb1ConfigParse.d.ts +11 -0
- package/esm/JBrowse1Connection/jb1ConfigParse.js +377 -0
- package/esm/JBrowse1Connection/jb1ConfigParse.js.map +1 -0
- package/esm/JBrowse1Connection/jb1ToJb2.d.ts +49 -0
- package/esm/JBrowse1Connection/jb1ToJb2.js +424 -0
- package/esm/JBrowse1Connection/jb1ToJb2.js.map +1 -0
- package/esm/JBrowse1Connection/model.d.ts +15 -0
- package/esm/JBrowse1Connection/model.js +44 -0
- package/esm/JBrowse1Connection/model.js.map +1 -0
- package/esm/JBrowse1Connection/types.d.ts +91 -0
- package/esm/JBrowse1Connection/types.js +2 -0
- package/esm/JBrowse1Connection/types.js.map +1 -0
- package/esm/JBrowse1Connection/util.d.ts +26 -0
- package/esm/JBrowse1Connection/util.js +136 -0
- package/esm/JBrowse1Connection/util.js.map +1 -0
- package/esm/JBrowse1TextSeachAdapter/HttpMap.d.ts +39 -0
- package/esm/JBrowse1TextSeachAdapter/HttpMap.js +89 -0
- package/esm/JBrowse1TextSeachAdapter/HttpMap.js.map +1 -0
- package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.d.ts +33 -0
- package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js +67 -0
- package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js.map +1 -0
- package/esm/JBrowse1TextSeachAdapter/configSchema.d.ts +2 -0
- package/esm/JBrowse1TextSeachAdapter/configSchema.js +20 -0
- package/esm/JBrowse1TextSeachAdapter/configSchema.js.map +1 -0
- package/esm/JBrowse1TextSeachAdapter/index.d.ts +2 -0
- package/esm/JBrowse1TextSeachAdapter/index.js +3 -0
- package/esm/JBrowse1TextSeachAdapter/index.js.map +1 -0
- package/esm/NCListAdapter/NCListAdapter.d.ts +31 -0
- package/esm/NCListAdapter/NCListAdapter.js +62 -0
- package/esm/NCListAdapter/NCListAdapter.js.map +1 -0
- package/esm/NCListAdapter/NCListFeature.d.ts +31 -0
- package/esm/NCListAdapter/NCListFeature.js +78 -0
- package/esm/NCListAdapter/NCListFeature.js.map +1 -0
- package/esm/NCListAdapter/configSchema.d.ts +2 -0
- package/esm/NCListAdapter/configSchema.js +16 -0
- package/esm/NCListAdapter/configSchema.js.map +1 -0
- package/esm/NCListAdapter/index.d.ts +1 -0
- package/esm/NCListAdapter/index.js +2 -0
- package/esm/NCListAdapter/index.js.map +1 -0
- package/esm/index.d.ts +6 -0
- package/esm/index.js +50 -0
- package/esm/index.js.map +1 -0
- package/package.json +15 -6
- package/dist/JBrowse1TextSeachAdapter/HttpMap.test.js +0 -118
- package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.test.js +0 -98
- package/dist/NCListAdapter/NCListAdapter.test.js +0 -108
- package/dist/declare.d.js +0 -1
- package/dist/index.test.js +0 -44
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
export interface ProtoTrack {
|
|
2
|
+
backendVersion?: number;
|
|
3
|
+
baseUrl?: string;
|
|
4
|
+
category?: string;
|
|
5
|
+
config?: Track;
|
|
6
|
+
dataRoot?: string;
|
|
7
|
+
features?: Feature[];
|
|
8
|
+
histograms?: Track;
|
|
9
|
+
index?: number;
|
|
10
|
+
key?: string;
|
|
11
|
+
label?: string;
|
|
12
|
+
metadata?: Metadata;
|
|
13
|
+
store?: Store | string;
|
|
14
|
+
storeClass?: string;
|
|
15
|
+
type?: string;
|
|
16
|
+
urlTemplate?: string;
|
|
17
|
+
baiUrlTemplate?: string;
|
|
18
|
+
craiUrlTemplate?: string;
|
|
19
|
+
tbiUrlTemplate?: string;
|
|
20
|
+
csiUrlTemplate?: string;
|
|
21
|
+
faiUrlTemplate?: string;
|
|
22
|
+
gziUrlTemplate?: string;
|
|
23
|
+
useAsRefSeqStore?: boolean;
|
|
24
|
+
}
|
|
25
|
+
export interface Track extends ProtoTrack {
|
|
26
|
+
label: string;
|
|
27
|
+
}
|
|
28
|
+
export interface Metadata {
|
|
29
|
+
category?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
Description?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface Feature {
|
|
34
|
+
seq_id: string;
|
|
35
|
+
start: number;
|
|
36
|
+
end: number;
|
|
37
|
+
name?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface Source {
|
|
40
|
+
url: string;
|
|
41
|
+
name?: string;
|
|
42
|
+
type?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface TrackMetadata {
|
|
45
|
+
sources?: string | Source | (string | Source)[] | Record<string, Source>;
|
|
46
|
+
}
|
|
47
|
+
export interface Store extends ProtoTrack {
|
|
48
|
+
name?: string;
|
|
49
|
+
}
|
|
50
|
+
export interface Names {
|
|
51
|
+
baseUrl?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface RefSeq {
|
|
54
|
+
name: string;
|
|
55
|
+
length: number;
|
|
56
|
+
end: number;
|
|
57
|
+
start: number;
|
|
58
|
+
}
|
|
59
|
+
export interface RefSeqs {
|
|
60
|
+
url?: string;
|
|
61
|
+
data?: RefSeq[];
|
|
62
|
+
}
|
|
63
|
+
export interface Include {
|
|
64
|
+
url: string;
|
|
65
|
+
cacheBuster?: boolean;
|
|
66
|
+
format?: string;
|
|
67
|
+
version?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface Config {
|
|
70
|
+
baseUrl?: string;
|
|
71
|
+
cacheBuster?: boolean;
|
|
72
|
+
dataRoot?: string;
|
|
73
|
+
include?: string[];
|
|
74
|
+
names?: Record<string, string>;
|
|
75
|
+
nameUrl?: string;
|
|
76
|
+
refSeqs?: string | RefSeqs;
|
|
77
|
+
sourceUrl?: string;
|
|
78
|
+
stores?: Record<string, Store>;
|
|
79
|
+
trackMetadata?: TrackMetadata;
|
|
80
|
+
tracks?: Track | Track[] | Record<string, Track | ProtoTrack>;
|
|
81
|
+
}
|
|
82
|
+
export interface UriLocation {
|
|
83
|
+
uri: string;
|
|
84
|
+
baseUri?: string;
|
|
85
|
+
locationType: 'UriLocation';
|
|
86
|
+
}
|
|
87
|
+
export interface LocalPathLocation {
|
|
88
|
+
localPath: string;
|
|
89
|
+
locationType: 'LocalPathLocation';
|
|
90
|
+
}
|
|
91
|
+
export declare type JBLocation = UriLocation | LocalPathLocation;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/JBrowse1Connection/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Track, Source } from './types';
|
|
2
|
+
export declare function isTrack(arg: any): arg is Track;
|
|
3
|
+
export declare function isSource(arg: any): arg is Source;
|
|
4
|
+
/**
|
|
5
|
+
* updates a with values from b, recursively
|
|
6
|
+
*/
|
|
7
|
+
declare type Obj = Record<string, any>;
|
|
8
|
+
export declare function deepUpdate(a: Obj, b: Obj): Obj;
|
|
9
|
+
/**
|
|
10
|
+
* replace variables in a template string with values
|
|
11
|
+
* @param template - String with variable names in curly brackets
|
|
12
|
+
* e.g., `http://foo/{bar}?arg={baz.foo}`
|
|
13
|
+
* @param fillWith - object with attribute-value mappings
|
|
14
|
+
* e.g., `{ 'bar': 'someurl', 'baz': { 'foo': 42 } }`
|
|
15
|
+
* @returns the template string with variables in fillWith replaced
|
|
16
|
+
* e.g., 'htp://foo/someurl?arg=valueforbaz'
|
|
17
|
+
*/
|
|
18
|
+
export declare function fillTemplate(template: string, fillWith: Obj): string;
|
|
19
|
+
/**
|
|
20
|
+
* Clones objects (including DOM nodes) and all children.
|
|
21
|
+
* Warning: do not clone cyclic structures
|
|
22
|
+
* (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)
|
|
23
|
+
* @param src - The object to clone
|
|
24
|
+
*/
|
|
25
|
+
export declare function clone(src: any): any;
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import getValue from 'get-value';
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
3
|
+
export function isTrack(arg) {
|
|
4
|
+
return arg && arg.label && typeof arg.label === 'string';
|
|
5
|
+
}
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
export function isSource(arg) {
|
|
8
|
+
return arg && arg.url && typeof arg.url === 'string';
|
|
9
|
+
}
|
|
10
|
+
export function deepUpdate(a, b) {
|
|
11
|
+
for (const prop of Object.keys(b)) {
|
|
12
|
+
if (prop in a &&
|
|
13
|
+
typeof b[prop] === 'object' &&
|
|
14
|
+
typeof a[prop] === 'object') {
|
|
15
|
+
deepUpdate(a[prop], b[prop]);
|
|
16
|
+
}
|
|
17
|
+
else if (typeof a[prop] === 'undefined' ||
|
|
18
|
+
typeof b[prop] !== 'undefined') {
|
|
19
|
+
a[prop] = b[prop];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return a;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* replace variables in a template string with values
|
|
26
|
+
* @param template - String with variable names in curly brackets
|
|
27
|
+
* e.g., `http://foo/{bar}?arg={baz.foo}`
|
|
28
|
+
* @param fillWith - object with attribute-value mappings
|
|
29
|
+
* e.g., `{ 'bar': 'someurl', 'baz': { 'foo': 42 } }`
|
|
30
|
+
* @returns the template string with variables in fillWith replaced
|
|
31
|
+
* e.g., 'htp://foo/someurl?arg=valueforbaz'
|
|
32
|
+
*/
|
|
33
|
+
export function fillTemplate(template, fillWith) {
|
|
34
|
+
return template.replace(/\{([\w\s.]+)\}/g, (match, varName) => {
|
|
35
|
+
varName = varName.replace(/\s+/g, ''); // remove all whitespace
|
|
36
|
+
const fill = getValue(fillWith, varName);
|
|
37
|
+
if (fill !== undefined) {
|
|
38
|
+
if (typeof fill === 'function') {
|
|
39
|
+
return fill(varName);
|
|
40
|
+
}
|
|
41
|
+
return fill;
|
|
42
|
+
}
|
|
43
|
+
if (fillWith.callback) {
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
const v = fillWith.callback.call(this, varName);
|
|
46
|
+
if (v !== undefined) {
|
|
47
|
+
return v;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return match;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Clones objects (including DOM nodes) and all children.
|
|
55
|
+
* Warning: do not clone cyclic structures
|
|
56
|
+
* (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)
|
|
57
|
+
* @param src - The object to clone
|
|
58
|
+
*/
|
|
59
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
|
+
export function clone(src) {
|
|
61
|
+
if (!src ||
|
|
62
|
+
typeof src !== 'object' ||
|
|
63
|
+
Object.prototype.toString.call(src) === '[object Function]') {
|
|
64
|
+
// null, undefined, any non-object, or function
|
|
65
|
+
return src; // anything
|
|
66
|
+
}
|
|
67
|
+
if (src.nodeType && 'cloneNode' in src) {
|
|
68
|
+
// DOM Node
|
|
69
|
+
return src.cloneNode(true); // Node
|
|
70
|
+
}
|
|
71
|
+
if (src instanceof Date) {
|
|
72
|
+
// Date
|
|
73
|
+
return new Date(src.getTime()); // Date
|
|
74
|
+
}
|
|
75
|
+
if (src instanceof RegExp) {
|
|
76
|
+
// RegExp
|
|
77
|
+
return new RegExp(src); // RegExp
|
|
78
|
+
}
|
|
79
|
+
let r;
|
|
80
|
+
let i;
|
|
81
|
+
let l;
|
|
82
|
+
if (Array.isArray(src)) {
|
|
83
|
+
// array
|
|
84
|
+
r = [];
|
|
85
|
+
for (i = 0, l = src.length; i < l; ++i) {
|
|
86
|
+
if (i in src) {
|
|
87
|
+
r[i] = clone(src[i]);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// we don't clone functions for performance reasons
|
|
91
|
+
// }else if(d.isFunction(src)){
|
|
92
|
+
// // function
|
|
93
|
+
// r = function(){ return src.apply(this, arguments); };
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// generic objects
|
|
97
|
+
r = src.constructor ? new src.constructor() : {};
|
|
98
|
+
}
|
|
99
|
+
return mixin(r, src, clone);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Copies/adds all properties of source to dest; returns dest.
|
|
103
|
+
* (Lifted from dojo https://github.com/dojo/dojo/blob/master/_base/lang.js)
|
|
104
|
+
*
|
|
105
|
+
* All properties, including functions (sometimes termed "methods"), excluding
|
|
106
|
+
* any non-standard extensions found in Object.prototype, are copied/added to
|
|
107
|
+
* dest. Copying/adding each particular property is delegated to copyFunc
|
|
108
|
+
* (if any); copyFunc defaults to the Javascript assignment operator if not
|
|
109
|
+
* provided. Notice that by default, mixin executes a so-called "shallow copy"
|
|
110
|
+
* and aggregate types are copied/added by reference.
|
|
111
|
+
* @param dest - The object to which to copy/add all properties contained in
|
|
112
|
+
* source.
|
|
113
|
+
* @param source - The object from which to draw all properties to copy into dest.
|
|
114
|
+
* @param copyFunc - The process used to copy/add a property in source; defaults
|
|
115
|
+
* to the Javascript assignment operator.
|
|
116
|
+
* @returns dest, as modified
|
|
117
|
+
*/
|
|
118
|
+
function mixin(dest, source, copyFunc) {
|
|
119
|
+
let name;
|
|
120
|
+
let s;
|
|
121
|
+
const empty = {};
|
|
122
|
+
for (name in source) {
|
|
123
|
+
// the (!(name in empty) || empty[name] !== s) condition avoids copying
|
|
124
|
+
// properties in "source" inherited from Object.prototype. For example,
|
|
125
|
+
// if dest has a custom toString() method, don't overwrite it with the
|
|
126
|
+
// toString() method that source inherited from Object.prototype
|
|
127
|
+
s = source[name];
|
|
128
|
+
if (!(name in dest) ||
|
|
129
|
+
// @ts-ignore
|
|
130
|
+
(dest[name] !== s && (!(name in empty) || empty[name] !== s))) {
|
|
131
|
+
dest[name] = copyFunc ? copyFunc(s) : s;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return dest; // Object
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/JBrowse1Connection/util.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,WAAW,CAAA;AAGhC,8DAA8D;AAC9D,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC9B,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAA;AAC1D,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,GAAQ;IAC/B,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAA;AACtD,CAAC;AAOD,MAAM,UAAU,UAAU,CAAC,CAAM,EAAE,CAAM;IACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QACjC,IACE,IAAI,IAAI,CAAC;YACT,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ;YAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAC3B;YACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;SAC7B;aAAM,IACL,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW;YAC9B,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,WAAW,EAC9B;YACA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;SAClB;KACF;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAa;IAC1D,OAAO,QAAQ,CAAC,OAAO,CACrB,iBAAiB,EACjB,CAAC,KAAK,EAAE,OAAe,EAAU,EAAE;QACjC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,CAAC,wBAAwB;QAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QACxC,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,IAAI,OAAO,IAAI,KAAK,UAAU,EAAE;gBAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,CAAA;aACrB;YACD,OAAO,IAAI,CAAA;SACZ;QACD,IAAI,QAAQ,CAAC,QAAQ,EAAE;YACrB,aAAa;YACb,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC/C,IAAI,CAAC,KAAK,SAAS,EAAE;gBACnB,OAAO,CAAC,CAAA;aACT;SACF;QACD,OAAO,KAAK,CAAA;IACd,CAAC,CACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,MAAM,UAAU,KAAK,CAAC,GAAQ;IAC5B,IACE,CAAC,GAAG;QACJ,OAAO,GAAG,KAAK,QAAQ;QACvB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,mBAAmB,EAC3D;QACA,+CAA+C;QAC/C,OAAO,GAAG,CAAA,CAAC,WAAW;KACvB;IACD,IAAI,GAAG,CAAC,QAAQ,IAAI,WAAW,IAAI,GAAG,EAAE;QACtC,WAAW;QACX,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA,CAAC,OAAO;KACnC;IACD,IAAI,GAAG,YAAY,IAAI,EAAE;QACvB,OAAO;QACP,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA,CAAC,OAAO;KACvC;IACD,IAAI,GAAG,YAAY,MAAM,EAAE;QACzB,SAAS;QACT,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAA,CAAC,SAAS;KACjC;IACD,IAAI,CAAC,CAAA;IACL,IAAI,CAAC,CAAA;IACL,IAAI,CAAC,CAAA;IACL,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACtB,QAAQ;QACR,CAAC,GAAG,EAAE,CAAA;QACN,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YACtC,IAAI,CAAC,IAAI,GAAG,EAAE;gBACZ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;aACrB;SACF;QACD,mDAAmD;QACnD,kCAAkC;QAClC,mBAAmB;QACnB,6DAA6D;KAC9D;SAAM;QACL,kBAAkB;QAClB,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;KACjD;IACD,OAAO,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAS,KAAK,CAAC,IAAS,EAAE,MAAW,EAAE,QAAkB;IACvD,IAAI,IAAI,CAAA;IACR,IAAI,CAAC,CAAA;IACL,MAAM,KAAK,GAAG,EAAE,CAAA;IAChB,KAAK,IAAI,IAAI,MAAM,EAAE;QACnB,uEAAuE;QACvE,wEAAwE;QACxE,sEAAsE;QACtE,gEAAgE;QAChE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;QAChB,IACE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YACf,aAAa;YACb,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAC7D;YACA,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;SACxC;KACF;IAED,OAAO,IAAI,CAAA,CAAC,SAAS;AACvB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export default class HttpMap {
|
|
2
|
+
url: string;
|
|
3
|
+
constructor(args: {
|
|
4
|
+
url: string;
|
|
5
|
+
});
|
|
6
|
+
/**
|
|
7
|
+
* loads meta.json file from names directory and reads number of hash_bits used
|
|
8
|
+
*/
|
|
9
|
+
readMeta(): Promise<{
|
|
10
|
+
hashHexCharacters: number;
|
|
11
|
+
compress: any;
|
|
12
|
+
tracks: any;
|
|
13
|
+
}>;
|
|
14
|
+
getHashHexCharacters(): Promise<number>;
|
|
15
|
+
getCompress(): Promise<any>;
|
|
16
|
+
getTrackNames(): Promise<any>;
|
|
17
|
+
/**
|
|
18
|
+
* Returns contents of a bucket given a key
|
|
19
|
+
* @param key - string
|
|
20
|
+
*/
|
|
21
|
+
get(key: string): Promise<any>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns a bucket given a key
|
|
24
|
+
* @param key - string
|
|
25
|
+
*/
|
|
26
|
+
getBucket(key: string): Promise<any>;
|
|
27
|
+
/**
|
|
28
|
+
* Loads a file using the url and provided id.
|
|
29
|
+
* Returns response object with contents of the file
|
|
30
|
+
* @param id - string
|
|
31
|
+
*/
|
|
32
|
+
loadFile(id: string): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the corresponding path of the file given a hex string
|
|
35
|
+
* @param hex - hex string
|
|
36
|
+
*/
|
|
37
|
+
hexToDirPath(hex: string): Promise<string>;
|
|
38
|
+
hash(data: string): string;
|
|
39
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Helper class allows reading names index generated in JBrowse1
|
|
3
|
+
* Adapted from https://github.com/GMOD/jbrowse/blob/master/src/JBrowse/Store/Hash.js
|
|
4
|
+
*/
|
|
5
|
+
import crc32 from 'buffer-crc32';
|
|
6
|
+
export default class HttpMap {
|
|
7
|
+
constructor(args) {
|
|
8
|
+
// make sure url has a trailing slash
|
|
9
|
+
this.url = /\/$/.test(args.url) ? args.url : `${args.url}/`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* loads meta.json file from names directory and reads number of hash_bits used
|
|
13
|
+
*/
|
|
14
|
+
async readMeta() {
|
|
15
|
+
const meta = await this.loadFile('meta.json');
|
|
16
|
+
const { compress, track_names: tracks } = meta;
|
|
17
|
+
const hashHexCharacters = Math.ceil(meta.hash_bits / 4);
|
|
18
|
+
return { hashHexCharacters, compress, tracks };
|
|
19
|
+
}
|
|
20
|
+
async getHashHexCharacters() {
|
|
21
|
+
const meta = await this.readMeta();
|
|
22
|
+
return meta.hashHexCharacters;
|
|
23
|
+
}
|
|
24
|
+
async getCompress() {
|
|
25
|
+
const meta = await this.readMeta();
|
|
26
|
+
return meta.compress;
|
|
27
|
+
}
|
|
28
|
+
async getTrackNames() {
|
|
29
|
+
const meta = await this.readMeta();
|
|
30
|
+
return meta.tracks;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Returns contents of a bucket given a key
|
|
34
|
+
* @param key - string
|
|
35
|
+
*/
|
|
36
|
+
async get(key) {
|
|
37
|
+
const bucket = await this.getBucket(key);
|
|
38
|
+
return bucket[key];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns a bucket given a key
|
|
42
|
+
* @param key - string
|
|
43
|
+
*/
|
|
44
|
+
async getBucket(key) {
|
|
45
|
+
const bucketIdent = this.hash(key);
|
|
46
|
+
const hexToDirPath = await this.hexToDirPath(bucketIdent);
|
|
47
|
+
return this.loadFile(hexToDirPath);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Loads a file using the url and provided id.
|
|
51
|
+
* Returns response object with contents of the file
|
|
52
|
+
* @param id - string
|
|
53
|
+
*/
|
|
54
|
+
async loadFile(id) {
|
|
55
|
+
const response = await fetch(`${this.url}${id}`);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
throw new Error(`HTTP ${response.status} ${response.statusText}`);
|
|
58
|
+
}
|
|
59
|
+
return response.json();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Returns the corresponding path of the file given a hex string
|
|
63
|
+
* @param hex - hex string
|
|
64
|
+
*/
|
|
65
|
+
async hexToDirPath(hex) {
|
|
66
|
+
// zero-pad the hex string to be 8 chars if necessary
|
|
67
|
+
const hashHexCharacters = await this.getHashHexCharacters();
|
|
68
|
+
if (hashHexCharacters) {
|
|
69
|
+
const compress = await this.getCompress();
|
|
70
|
+
while (hex.length < 8) {
|
|
71
|
+
hex = `0${hex}`;
|
|
72
|
+
}
|
|
73
|
+
hex = hex.substr(8 - hashHexCharacters);
|
|
74
|
+
const dirpath = [];
|
|
75
|
+
for (let i = 0; i < hex.length; i += 3) {
|
|
76
|
+
dirpath.push(hex.substring(i, i + 3));
|
|
77
|
+
}
|
|
78
|
+
return `${dirpath.join('/')}.json${compress ? 'z' : ''}`;
|
|
79
|
+
}
|
|
80
|
+
return '';
|
|
81
|
+
}
|
|
82
|
+
hash(data) {
|
|
83
|
+
return crc32(Buffer.from(data))
|
|
84
|
+
.toString('hex')
|
|
85
|
+
.toLowerCase()
|
|
86
|
+
.replace('-', 'n');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=HttpMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpMap.js","sourceRoot":"","sources":["../../src/JBrowse1TextSeachAdapter/HttpMap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { BaseTextSearchAdapter, BaseArgs, BaseAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
+
import BaseResult from '@jbrowse/core/TextSearch/BaseResults';
|
|
3
|
+
import { Instance } from 'mobx-state-tree';
|
|
4
|
+
import MyConfigSchema from './configSchema';
|
|
5
|
+
import HttpMap from './HttpMap';
|
|
6
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
7
|
+
import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
|
|
8
|
+
export interface TooManyHits {
|
|
9
|
+
name: string;
|
|
10
|
+
hitLimit: number;
|
|
11
|
+
}
|
|
12
|
+
interface SearchResults {
|
|
13
|
+
prefix: ({
|
|
14
|
+
name: string;
|
|
15
|
+
} | string)[];
|
|
16
|
+
exact: [string, number, string, string, number, number][];
|
|
17
|
+
}
|
|
18
|
+
export declare type NamesIndexRecord = string | Array<string | number>;
|
|
19
|
+
export default class JBrowse1TextSearchAdapter extends BaseAdapter implements BaseTextSearchAdapter {
|
|
20
|
+
httpMap: HttpMap;
|
|
21
|
+
tracksNames?: string[];
|
|
22
|
+
constructor(config: Instance<typeof MyConfigSchema>, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
|
|
23
|
+
/**
|
|
24
|
+
* Returns the contents of the file containing the query if it exists
|
|
25
|
+
* else it returns empty
|
|
26
|
+
* @param query - string query
|
|
27
|
+
*/
|
|
28
|
+
loadIndexFile(query: string): Promise<Record<string, SearchResults>>;
|
|
29
|
+
searchIndex(args: BaseArgs): Promise<BaseResult[]>;
|
|
30
|
+
formatResults(results: SearchResults, tracks: string[], searchType?: string): BaseResult[];
|
|
31
|
+
freeResources(): void;
|
|
32
|
+
}
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { BaseAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
2
|
+
import BaseResult from '@jbrowse/core/TextSearch/BaseResults';
|
|
3
|
+
import { readConfObject } from '@jbrowse/core/configuration';
|
|
4
|
+
import HttpMap from './HttpMap';
|
|
5
|
+
// Jbrowse1 text search adapter
|
|
6
|
+
// Uses index built by generate-names.pl
|
|
7
|
+
export default class JBrowse1TextSearchAdapter extends BaseAdapter {
|
|
8
|
+
constructor(config, getSubAdapter, pluginManager) {
|
|
9
|
+
super(config, getSubAdapter, pluginManager);
|
|
10
|
+
const namesIndexLocation = readConfObject(config, 'namesIndexLocation');
|
|
11
|
+
if (!namesIndexLocation) {
|
|
12
|
+
throw new Error('must provide namesIndexLocation');
|
|
13
|
+
}
|
|
14
|
+
this.httpMap = new HttpMap({
|
|
15
|
+
url: namesIndexLocation.baseUri
|
|
16
|
+
? new URL(namesIndexLocation.uri, namesIndexLocation.baseUri).href
|
|
17
|
+
: namesIndexLocation.uri,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Returns the contents of the file containing the query if it exists
|
|
22
|
+
* else it returns empty
|
|
23
|
+
* @param query - string query
|
|
24
|
+
*/
|
|
25
|
+
async loadIndexFile(query) {
|
|
26
|
+
return this.httpMap.getBucket(query);
|
|
27
|
+
}
|
|
28
|
+
async searchIndex(args) {
|
|
29
|
+
const { searchType, queryString } = args;
|
|
30
|
+
const tracks = this.tracksNames || (await this.httpMap.getTrackNames());
|
|
31
|
+
const entries = await this.loadIndexFile(queryString.toLowerCase());
|
|
32
|
+
if (entries[queryString]) {
|
|
33
|
+
return this.formatResults(entries[queryString], tracks, searchType);
|
|
34
|
+
}
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
formatResults(results, tracks, searchType) {
|
|
38
|
+
return [
|
|
39
|
+
...(searchType === 'exact'
|
|
40
|
+
? []
|
|
41
|
+
: results.prefix.map(result => {
|
|
42
|
+
return new BaseResult({
|
|
43
|
+
label: typeof result === 'object' ? result.name : result,
|
|
44
|
+
matchedAttribute: 'name',
|
|
45
|
+
matchedObject: { result: result },
|
|
46
|
+
});
|
|
47
|
+
})),
|
|
48
|
+
...results.exact.map(result => {
|
|
49
|
+
const name = result[0];
|
|
50
|
+
const trackIndex = result[1];
|
|
51
|
+
const refName = result[3];
|
|
52
|
+
const start = result[4];
|
|
53
|
+
const end = result[5];
|
|
54
|
+
const locstring = `${refName || name}:${start}-${end}`;
|
|
55
|
+
return new BaseResult({
|
|
56
|
+
locString: locstring,
|
|
57
|
+
label: name,
|
|
58
|
+
matchedAttribute: 'name',
|
|
59
|
+
matchedObject: result,
|
|
60
|
+
trackId: tracks[trackIndex],
|
|
61
|
+
});
|
|
62
|
+
}),
|
|
63
|
+
].filter(result => result.getLabel() !== 'too many matches');
|
|
64
|
+
}
|
|
65
|
+
freeResources() { }
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=JBrowse1TextSearchAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JBrowse1TextSearchAdapter.js","sourceRoot":"","sources":["../../src/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ConfigurationSchema } from '@jbrowse/core/configuration';
|
|
2
|
+
export default ConfigurationSchema('JBrowse1TextSearchAdapter', {
|
|
3
|
+
// metadata about tracks and assemblies covered by text search adapter
|
|
4
|
+
namesIndexLocation: {
|
|
5
|
+
type: 'fileLocation',
|
|
6
|
+
defaultValue: { uri: '/volvox/names', locationType: 'UriLocation' },
|
|
7
|
+
description: 'the location of the JBrowse1 names index data directory',
|
|
8
|
+
},
|
|
9
|
+
tracks: {
|
|
10
|
+
type: 'stringArray',
|
|
11
|
+
defaultValue: [],
|
|
12
|
+
description: 'List of tracks covered by text search adapter',
|
|
13
|
+
},
|
|
14
|
+
assemblyNames: {
|
|
15
|
+
type: 'stringArray',
|
|
16
|
+
defaultValue: [],
|
|
17
|
+
description: 'List of assemblies covered by text search adapter',
|
|
18
|
+
},
|
|
19
|
+
}, { explicitlyTyped: true, explicitIdentifier: 'textSearchAdapterId' });
|
|
20
|
+
//# sourceMappingURL=configSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configSchema.js","sourceRoot":"","sources":["../../src/JBrowse1TextSeachAdapter/configSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAEjE,eAAe,mBAAmB,CAChC,2BAA2B,EAC3B;IACE,sEAAsE;IACtE,kBAAkB,EAAE;QAClB,IAAI,EAAE,cAAc;QACpB,YAAY,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE;QACnE,WAAW,EAAE,yDAAyD;KACvE;IACD,MAAM,EAAE;QACN,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,+CAA+C;KAC7D;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,mDAAmD;KACjE;CACF,EACD,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,CACrE,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/JBrowse1TextSeachAdapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Region } from '@jbrowse/core/util/types';
|
|
2
|
+
import { BaseFeatureDataAdapter, BaseOptions } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
3
|
+
import { Feature } from '@jbrowse/core/util/simpleFeature';
|
|
4
|
+
import { Instance } from 'mobx-state-tree';
|
|
5
|
+
import NCListFeature from './NCListFeature';
|
|
6
|
+
import MyConfigSchema from './configSchema';
|
|
7
|
+
import PluginManager from '@jbrowse/core/PluginManager';
|
|
8
|
+
import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
|
|
9
|
+
export default class NCListAdapter extends BaseFeatureDataAdapter {
|
|
10
|
+
private nclist;
|
|
11
|
+
private configRefNames?;
|
|
12
|
+
constructor(config: Instance<typeof MyConfigSchema>, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
|
|
13
|
+
/**
|
|
14
|
+
* Fetch features for a certain region. Use getFeaturesInRegion() if you also
|
|
15
|
+
* want to verify that the store has features for the given reference sequence
|
|
16
|
+
* before fetching.
|
|
17
|
+
* @param region -
|
|
18
|
+
* @param opts - [signal] optional signalling object for aborting the fetch
|
|
19
|
+
* @returns Observable of Feature objects in the region
|
|
20
|
+
*/
|
|
21
|
+
getFeatures(region: Region, opts?: BaseOptions): import("rxjs").Observable<Feature>;
|
|
22
|
+
wrapFeature(ncFeature: any): NCListFeature;
|
|
23
|
+
hasDataForRefName(refName: string): Promise<boolean>;
|
|
24
|
+
getRefNames(): Promise<string[]>;
|
|
25
|
+
/**
|
|
26
|
+
* called to provide a hint that data tied to a certain region
|
|
27
|
+
* will not be needed for the forseeable future and can be purged
|
|
28
|
+
* from caches, etc
|
|
29
|
+
*/
|
|
30
|
+
freeResources(): void;
|
|
31
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import NCListStore from '@gmod/nclist';
|
|
2
|
+
import { BaseFeatureDataAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
|
|
3
|
+
import { ObservableCreate } from '@jbrowse/core/util/rxjs';
|
|
4
|
+
import { checkAbortSignal } from '@jbrowse/core/util';
|
|
5
|
+
import { RemoteFile } from 'generic-filehandle';
|
|
6
|
+
import { readConfObject } from '@jbrowse/core/configuration';
|
|
7
|
+
import NCListFeature from './NCListFeature';
|
|
8
|
+
export default class NCListAdapter extends BaseFeatureDataAdapter {
|
|
9
|
+
constructor(config, getSubAdapter, pluginManager) {
|
|
10
|
+
super(config, getSubAdapter, pluginManager);
|
|
11
|
+
const refNames = readConfObject(config, 'refNames');
|
|
12
|
+
const rootUrlTemplate = readConfObject(config, 'rootUrlTemplate');
|
|
13
|
+
this.configRefNames = refNames;
|
|
14
|
+
this.nclist = new NCListStore({
|
|
15
|
+
baseUrl: '',
|
|
16
|
+
urlTemplate: rootUrlTemplate.uri,
|
|
17
|
+
readFile: (url) => new RemoteFile(String(rootUrlTemplate.baseUri
|
|
18
|
+
? new URL(url, rootUrlTemplate.baseUri).toString()
|
|
19
|
+
: url)).readFile(),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fetch features for a certain region. Use getFeaturesInRegion() if you also
|
|
24
|
+
* want to verify that the store has features for the given reference sequence
|
|
25
|
+
* before fetching.
|
|
26
|
+
* @param region -
|
|
27
|
+
* @param opts - [signal] optional signalling object for aborting the fetch
|
|
28
|
+
* @returns Observable of Feature objects in the region
|
|
29
|
+
*/
|
|
30
|
+
getFeatures(region, opts = {}) {
|
|
31
|
+
return ObservableCreate(async (observer) => {
|
|
32
|
+
const { signal } = opts;
|
|
33
|
+
for await (const feature of this.nclist.getFeatures(region, opts)) {
|
|
34
|
+
checkAbortSignal(signal);
|
|
35
|
+
observer.next(this.wrapFeature(feature));
|
|
36
|
+
}
|
|
37
|
+
observer.complete();
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
41
|
+
wrapFeature(ncFeature) {
|
|
42
|
+
return new NCListFeature(ncFeature, undefined, `${this.id}-${ncFeature.id()}`);
|
|
43
|
+
}
|
|
44
|
+
async hasDataForRefName(refName) {
|
|
45
|
+
const root = await this.nclist.getDataRoot(refName);
|
|
46
|
+
return !!(root && root.stats && root.stats.featureCount);
|
|
47
|
+
}
|
|
48
|
+
/*
|
|
49
|
+
* NCList is unable to get list of ref names so returns empty
|
|
50
|
+
* @return Promise<string[]> of empty list
|
|
51
|
+
*/
|
|
52
|
+
getRefNames() {
|
|
53
|
+
return Promise.resolve(this.configRefNames || []);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* called to provide a hint that data tied to a certain region
|
|
57
|
+
* will not be needed for the forseeable future and can be purged
|
|
58
|
+
* from caches, etc
|
|
59
|
+
*/
|
|
60
|
+
freeResources() { }
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=NCListAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NCListAdapter.js","sourceRoot":"","sources":["../../src/NCListAdapter/NCListAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,cAAc,CAAA;AAEtC,OAAO,EACL,sBAAsB,GAEvB,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAK3C,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,sBAAsB;IAM/D,YACE,MAAuC,EACvC,aAAiC,EACjC,aAA6B;QAE7B,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;QACnD,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;QACjE,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAA;QAE9B,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC;YAC5B,OAAO,EAAE,EAAE;YACX,WAAW,EAAE,eAAe,CAAC,GAAG;YAChC,QAAQ,EAAE,CAAC,GAAW,EAAE,EAAE,CACxB,IAAI,UAAU,CACZ,MAAM,CACJ,eAAe,CAAC,OAAO;gBACrB,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;gBAClD,CAAC,CAAC,GAAG,CACR,CACF,CAAC,QAAQ,EAAE;SACf,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,MAAc,EAAE,OAAoB,EAAE;QAChD,OAAO,gBAAgB,CAAU,KAAK,EAAC,QAAQ,EAAC,EAAE;YAChD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;YACvB,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;gBACjE,gBAAgB,CAAC,MAAM,CAAC,CAAA;gBACxB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAA;aACzC;YACD,QAAQ,CAAC,QAAQ,EAAE,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,8DAA8D;IAC9D,WAAW,CAAC,SAAc;QACxB,OAAO,IAAI,aAAa,CACtB,SAAS,EACT,SAAS,EACT,GAAG,IAAI,CAAC,EAAE,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,CAC/B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,OAAe;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;QACnD,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAC1D,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACH,aAAa,KAAI,CAAC;CACnB"}
|