@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.
Files changed (91) hide show
  1. package/dist/JBrowse1Connection/configSchema.js +18 -28
  2. package/dist/JBrowse1Connection/configSchema.js.map +1 -0
  3. package/dist/JBrowse1Connection/index.js +10 -22
  4. package/dist/JBrowse1Connection/index.js.map +1 -0
  5. package/dist/JBrowse1Connection/jb1ConfigLoad.js +387 -501
  6. package/dist/JBrowse1Connection/jb1ConfigLoad.js.map +1 -0
  7. package/dist/JBrowse1Connection/jb1ConfigParse.js +414 -435
  8. package/dist/JBrowse1Connection/jb1ConfigParse.js.map +1 -0
  9. package/dist/JBrowse1Connection/jb1ToJb2.js +405 -546
  10. package/dist/JBrowse1Connection/jb1ToJb2.js.map +1 -0
  11. package/dist/JBrowse1Connection/model.js +49 -57
  12. package/dist/JBrowse1Connection/model.js.map +1 -0
  13. package/dist/JBrowse1Connection/types.js +2 -4
  14. package/dist/JBrowse1Connection/types.js.map +1 -0
  15. package/dist/JBrowse1Connection/util.js +123 -130
  16. package/dist/JBrowse1Connection/util.js.map +1 -0
  17. package/dist/JBrowse1TextSeachAdapter/HttpMap.js +181 -326
  18. package/dist/JBrowse1TextSeachAdapter/HttpMap.js.map +1 -0
  19. package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js +164 -185
  20. package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js.map +1 -0
  21. package/dist/JBrowse1TextSeachAdapter/configSchema.js +20 -33
  22. package/dist/JBrowse1TextSeachAdapter/configSchema.js.map +1 -0
  23. package/dist/JBrowse1TextSeachAdapter/index.js +10 -22
  24. package/dist/JBrowse1TextSeachAdapter/index.js.map +1 -0
  25. package/dist/NCListAdapter/NCListAdapter.js +164 -224
  26. package/dist/NCListAdapter/NCListAdapter.js.map +1 -0
  27. package/dist/NCListAdapter/NCListFeature.js +68 -125
  28. package/dist/NCListAdapter/NCListFeature.js.map +1 -0
  29. package/dist/NCListAdapter/configSchema.js +17 -26
  30. package/dist/NCListAdapter/configSchema.js.map +1 -0
  31. package/dist/NCListAdapter/index.js +8 -14
  32. package/dist/NCListAdapter/index.js.map +1 -0
  33. package/dist/index.js +97 -116
  34. package/dist/index.js.map +1 -0
  35. package/esm/JBrowse1Connection/configSchema.d.ts +2 -0
  36. package/esm/JBrowse1Connection/configSchema.js +18 -0
  37. package/esm/JBrowse1Connection/configSchema.js.map +1 -0
  38. package/esm/JBrowse1Connection/index.d.ts +2 -0
  39. package/esm/JBrowse1Connection/index.js +3 -0
  40. package/esm/JBrowse1Connection/index.js.map +1 -0
  41. package/esm/JBrowse1Connection/jb1ConfigLoad.d.ts +36 -0
  42. package/esm/JBrowse1Connection/jb1ConfigLoad.js +281 -0
  43. package/esm/JBrowse1Connection/jb1ConfigLoad.js.map +1 -0
  44. package/esm/JBrowse1Connection/jb1ConfigParse.d.ts +11 -0
  45. package/esm/JBrowse1Connection/jb1ConfigParse.js +377 -0
  46. package/esm/JBrowse1Connection/jb1ConfigParse.js.map +1 -0
  47. package/esm/JBrowse1Connection/jb1ToJb2.d.ts +49 -0
  48. package/esm/JBrowse1Connection/jb1ToJb2.js +424 -0
  49. package/esm/JBrowse1Connection/jb1ToJb2.js.map +1 -0
  50. package/esm/JBrowse1Connection/model.d.ts +15 -0
  51. package/esm/JBrowse1Connection/model.js +44 -0
  52. package/esm/JBrowse1Connection/model.js.map +1 -0
  53. package/esm/JBrowse1Connection/types.d.ts +91 -0
  54. package/esm/JBrowse1Connection/types.js +2 -0
  55. package/esm/JBrowse1Connection/types.js.map +1 -0
  56. package/esm/JBrowse1Connection/util.d.ts +26 -0
  57. package/esm/JBrowse1Connection/util.js +136 -0
  58. package/esm/JBrowse1Connection/util.js.map +1 -0
  59. package/esm/JBrowse1TextSeachAdapter/HttpMap.d.ts +39 -0
  60. package/esm/JBrowse1TextSeachAdapter/HttpMap.js +89 -0
  61. package/esm/JBrowse1TextSeachAdapter/HttpMap.js.map +1 -0
  62. package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.d.ts +33 -0
  63. package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js +67 -0
  64. package/esm/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.js.map +1 -0
  65. package/esm/JBrowse1TextSeachAdapter/configSchema.d.ts +2 -0
  66. package/esm/JBrowse1TextSeachAdapter/configSchema.js +20 -0
  67. package/esm/JBrowse1TextSeachAdapter/configSchema.js.map +1 -0
  68. package/esm/JBrowse1TextSeachAdapter/index.d.ts +2 -0
  69. package/esm/JBrowse1TextSeachAdapter/index.js +3 -0
  70. package/esm/JBrowse1TextSeachAdapter/index.js.map +1 -0
  71. package/esm/NCListAdapter/NCListAdapter.d.ts +31 -0
  72. package/esm/NCListAdapter/NCListAdapter.js +62 -0
  73. package/esm/NCListAdapter/NCListAdapter.js.map +1 -0
  74. package/esm/NCListAdapter/NCListFeature.d.ts +31 -0
  75. package/esm/NCListAdapter/NCListFeature.js +78 -0
  76. package/esm/NCListAdapter/NCListFeature.js.map +1 -0
  77. package/esm/NCListAdapter/configSchema.d.ts +2 -0
  78. package/esm/NCListAdapter/configSchema.js +16 -0
  79. package/esm/NCListAdapter/configSchema.js.map +1 -0
  80. package/esm/NCListAdapter/index.d.ts +1 -0
  81. package/esm/NCListAdapter/index.js +2 -0
  82. package/esm/NCListAdapter/index.js.map +1 -0
  83. package/esm/index.d.ts +6 -0
  84. package/esm/index.js +50 -0
  85. package/esm/index.js.map +1 -0
  86. package/package.json +15 -6
  87. package/dist/JBrowse1TextSeachAdapter/HttpMap.test.js +0 -118
  88. package/dist/JBrowse1TextSeachAdapter/JBrowse1TextSearchAdapter.test.js +0 -98
  89. package/dist/NCListAdapter/NCListAdapter.test.js +0 -108
  90. package/dist/declare.d.js +0 -1
  91. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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":"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"}
@@ -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,2 @@
1
+ declare const _default: import("@jbrowse/core/configuration").AnyConfigurationSchemaType;
2
+ export default _default;
@@ -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,2 @@
1
+ export { default as AdapterClass } from './JBrowse1TextSearchAdapter';
2
+ export { default as configSchema } from './configSchema';
@@ -0,0 +1,3 @@
1
+ export { default as AdapterClass } from './JBrowse1TextSearchAdapter';
2
+ export { default as configSchema } from './configSchema';
3
+ //# sourceMappingURL=index.js.map
@@ -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"}