@jbrowse/plugin-sequence 2.0.1 → 2.1.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.
@@ -1,13 +1,14 @@
1
1
  import { RegionsAdapter, BaseAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
- import { Instance } from 'mobx-state-tree';
3
- import MyConfigSchema from './configSchema';
4
- import PluginManager from '@jbrowse/core/PluginManager';
5
- import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
6
2
  export default class extends BaseAdapter implements RegionsAdapter {
7
- protected refSeqs: Promise<Record<string, number>>;
8
- protected source: string;
9
- constructor(config: Instance<typeof MyConfigSchema>, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
10
- private init;
3
+ protected setupP?: Promise<{
4
+ [key: string]: number;
5
+ }>;
6
+ setupPre(): Promise<{
7
+ [k: string]: number;
8
+ }>;
9
+ setup(): Promise<{
10
+ [key: string]: number;
11
+ }>;
11
12
  getRegions(): Promise<{
12
13
  refName: string;
13
14
  start: number;
@@ -69,40 +69,45 @@ var __read = (this && this.__read) || function (o, n) {
69
69
  Object.defineProperty(exports, "__esModule", { value: true });
70
70
  var BaseAdapter_1 = require("@jbrowse/core/data_adapters/BaseAdapter");
71
71
  var io_1 = require("@jbrowse/core/util/io");
72
- var configuration_1 = require("@jbrowse/core/configuration");
73
72
  var default_1 = /** @class */ (function (_super) {
74
73
  __extends(default_1, _super);
75
- function default_1(config, getSubAdapter, pluginManager) {
76
- var _this = _super.call(this, config, getSubAdapter, pluginManager) || this;
77
- var chromSizesLocation = (0, configuration_1.readConfObject)(config, 'chromSizesLocation');
78
- if (!chromSizesLocation) {
79
- throw new Error('must provide chromSizesLocation');
80
- }
81
- var file = (0, io_1.openLocation)(chromSizesLocation, _this.pluginManager);
82
- _this.source = file.toString();
83
- _this.refSeqs = _this.init(file);
84
- return _this;
74
+ function default_1() {
75
+ return _super !== null && _super.apply(this, arguments) || this;
85
76
  }
86
- default_1.prototype.init = function (file) {
77
+ default_1.prototype.setupPre = function () {
87
78
  return __awaiter(this, void 0, void 0, function () {
88
- var data, refSeqs;
79
+ var pm, file, data;
89
80
  return __generator(this, function (_a) {
90
81
  switch (_a.label) {
91
- case 0: return [4 /*yield*/, file.readFile('utf8')];
82
+ case 0:
83
+ pm = this.pluginManager;
84
+ file = (0, io_1.openLocation)(this.getConf('chromSizesLocation'), pm);
85
+ return [4 /*yield*/, file.readFile('utf8')];
92
86
  case 1:
93
87
  data = _a.sent();
94
- refSeqs = {};
95
- if (!data.length) {
96
- throw new Error("Could not read file ".concat(file.toString()));
97
- }
98
- data.split('\n').forEach(function (line) {
99
- if (line.length) {
100
- var _a = __read(line.split('\t'), 2), name_1 = _a[0], length_1 = _a[1];
101
- refSeqs[name_1] = +length_1;
102
- }
103
- });
104
- return [2 /*return*/, refSeqs];
88
+ return [2 /*return*/, Object.fromEntries(data
89
+ .split('\n')
90
+ .map(function (f) { return f.trim(); })
91
+ .filter(function (f) { return !!f; })
92
+ .map(function (line) {
93
+ var _a = __read(line.split('\t'), 2), name = _a[0], length = _a[1];
94
+ return [name, +length];
95
+ }))];
96
+ }
97
+ });
98
+ });
99
+ };
100
+ default_1.prototype.setup = function () {
101
+ return __awaiter(this, void 0, void 0, function () {
102
+ var _this = this;
103
+ return __generator(this, function (_a) {
104
+ if (!this.setupP) {
105
+ this.setupP = this.setupPre().catch(function (e) {
106
+ _this.setupP = undefined;
107
+ throw e;
108
+ });
105
109
  }
110
+ return [2 /*return*/, this.setupP];
106
111
  });
107
112
  });
108
113
  };
@@ -111,7 +116,7 @@ var default_1 = /** @class */ (function (_super) {
111
116
  var refSeqs;
112
117
  return __generator(this, function (_a) {
113
118
  switch (_a.label) {
114
- case 0: return [4 /*yield*/, this.refSeqs];
119
+ case 0: return [4 /*yield*/, this.setup()];
115
120
  case 1:
116
121
  refSeqs = _a.sent();
117
122
  return [2 /*return*/, Object.keys(refSeqs).map(function (refName) { return ({
@@ -1 +1 @@
1
- {"version":3,"file":"ChromSizesAdapter.js","sourceRoot":"","sources":["../../src/ChromSizesAdapter/ChromSizesAdapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAGgD;AAEhD,4CAAoD;AAEpD,6DAA4D;AAM5D;IAA6B,6BAAW;IAMtC,mBACE,MAAuC,EACvC,aAAiC,EACjC,aAA6B;QAH/B,YAKE,kBAAM,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,SAW5C;QAVC,IAAM,kBAAkB,GAAG,IAAA,8BAAc,EAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACvE,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;SACnD;QACD,IAAM,IAAI,GAAG,IAAA,iBAAY,EACvB,kBAAkC,EAClC,KAAI,CAAC,aAAa,CACnB,CAAA;QACD,KAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,KAAI,CAAC,OAAO,GAAG,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;;IAChC,CAAC;IAEa,wBAAI,GAAlB,UAAmB,IAAuB;;;;;4BAC3B,qBAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAA;;wBAAlC,IAAI,GAAG,SAA2B;wBAClC,OAAO,GAA8B,EAAE,CAAA;wBAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;4BAChB,MAAM,IAAI,KAAK,CAAC,8BAAuB,IAAI,CAAC,QAAQ,EAAE,CAAE,CAAC,CAAA;yBAC1D;wBACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAC,IAAY;4BACpC,IAAI,IAAI,CAAC,MAAM,EAAE;gCACT,IAAA,KAAA,OAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAA,EAAhC,MAAI,QAAA,EAAE,QAAM,QAAoB,CAAA;gCACvC,OAAO,CAAC,MAAI,CAAC,GAAG,CAAC,QAAM,CAAA;6BACxB;wBACH,CAAC,CAAC,CAAA;wBACF,sBAAO,OAAO,EAAA;;;;KACf;IAEY,8BAAU,GAAvB;;;;;4BACkB,qBAAM,IAAI,CAAC,OAAO,EAAA;;wBAA5B,OAAO,GAAG,SAAkB;wBAClC,sBAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,CAAC;gCAC1C,OAAO,SAAA;gCACP,KAAK,EAAE,CAAC;gCACR,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;6BACtB,CAAC,EAJyC,CAIzC,CAAC,EAAA;;;;KACJ;IAEM,6BAAS,GAAhB;QACE,OAAO,EAAE,CAAA;IACX,CAAC;IAEM,iCAAa,GAApB,WAAqB,gBAAgB,IAAS,CAAC;IACjD,gBAAC;AAAD,CAAC,AArDD,CAA6B,yBAAW,GAqDvC"}
1
+ {"version":3,"file":"ChromSizesAdapter.js","sourceRoot":"","sources":["../../src/ChromSizesAdapter/ChromSizesAdapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uEAGgD;AAChD,4CAAoD;AAEpD;IAA6B,6BAAW;IAAxC;;IA4CA,CAAC;IAxCO,4BAAQ,GAAd;;;;;;wBACQ,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;wBACvB,IAAI,GAAG,IAAA,iBAAY,EAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAA;wBACpD,qBAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAA;;wBAAlC,IAAI,GAAG,SAA2B;wBACxC,sBAAO,MAAM,CAAC,WAAW,CACvB,IAAI;iCACD,KAAK,CAAC,IAAI,CAAC;iCACX,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,EAAE,EAAR,CAAQ,CAAC;iCAClB,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,EAAH,CAAG,CAAC;iCAChB,GAAG,CAAC,UAAC,IAAY;gCACV,IAAA,KAAA,OAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAA,EAAhC,IAAI,QAAA,EAAE,MAAM,QAAoB,CAAA;gCACvC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAA;4BACxB,CAAC,CAAC,CACL,EAAA;;;;KACF;IAEK,yBAAK,GAAX;;;;gBACE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;oBAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,UAAA,CAAC;wBACnC,KAAI,CAAC,MAAM,GAAG,SAAS,CAAA;wBACvB,MAAM,CAAC,CAAA;oBACT,CAAC,CAAC,CAAA;iBACH;gBACD,sBAAO,IAAI,CAAC,MAAM,EAAA;;;KACnB;IAEY,8BAAU,GAAvB;;;;;4BACkB,qBAAM,IAAI,CAAC,KAAK,EAAE,EAAA;;wBAA5B,OAAO,GAAG,SAAkB;wBAClC,sBAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,UAAA,OAAO,IAAI,OAAA,CAAC;gCAC1C,OAAO,SAAA;gCACP,KAAK,EAAE,CAAC;gCACR,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;6BACtB,CAAC,EAJyC,CAIzC,CAAC,EAAA;;;;KACJ;IAEM,6BAAS,GAAhB;QACE,OAAO,EAAE,CAAA;IACX,CAAC;IAEM,iCAAa,GAApB,WAAqB,gBAAgB,IAAS,CAAC;IACjD,gBAAC;AAAD,CAAC,AA5CD,CAA6B,yBAAW,GA4CvC"}
@@ -1,13 +1,14 @@
1
1
  import { RegionsAdapter, BaseAdapter } from '@jbrowse/core/data_adapters/BaseAdapter';
2
- import { Instance } from 'mobx-state-tree';
3
- import MyConfigSchema from './configSchema';
4
- import PluginManager from '@jbrowse/core/PluginManager';
5
- import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache';
6
2
  export default class extends BaseAdapter implements RegionsAdapter {
7
- protected refSeqs: Promise<Record<string, number>>;
8
- protected source: string;
9
- constructor(config: Instance<typeof MyConfigSchema>, getSubAdapter?: getSubAdapterType, pluginManager?: PluginManager);
10
- private init;
3
+ protected setupP?: Promise<{
4
+ [key: string]: number;
5
+ }>;
6
+ setupPre(): Promise<{
7
+ [k: string]: number;
8
+ }>;
9
+ setup(): Promise<{
10
+ [key: string]: number;
11
+ }>;
11
12
  getRegions(): Promise<{
12
13
  refName: string;
13
14
  start: number;
@@ -1,33 +1,30 @@
1
1
  import { BaseAdapter, } from '@jbrowse/core/data_adapters/BaseAdapter';
2
2
  import { openLocation } from '@jbrowse/core/util/io';
3
- import { readConfObject } from '@jbrowse/core/configuration';
4
3
  export default class extends BaseAdapter {
5
- constructor(config, getSubAdapter, pluginManager) {
6
- super(config, getSubAdapter, pluginManager);
7
- const chromSizesLocation = readConfObject(config, 'chromSizesLocation');
8
- if (!chromSizesLocation) {
9
- throw new Error('must provide chromSizesLocation');
10
- }
11
- const file = openLocation(chromSizesLocation, this.pluginManager);
12
- this.source = file.toString();
13
- this.refSeqs = this.init(file);
14
- }
15
- async init(file) {
4
+ async setupPre() {
5
+ const pm = this.pluginManager;
6
+ const file = openLocation(this.getConf('chromSizesLocation'), pm);
16
7
  const data = await file.readFile('utf8');
17
- const refSeqs = {};
18
- if (!data.length) {
19
- throw new Error(`Could not read file ${file.toString()}`);
8
+ return Object.fromEntries(data
9
+ .split('\n')
10
+ .map(f => f.trim())
11
+ .filter(f => !!f)
12
+ .map((line) => {
13
+ const [name, length] = line.split('\t');
14
+ return [name, +length];
15
+ }));
16
+ }
17
+ async setup() {
18
+ if (!this.setupP) {
19
+ this.setupP = this.setupPre().catch(e => {
20
+ this.setupP = undefined;
21
+ throw e;
22
+ });
20
23
  }
21
- data.split('\n').forEach((line) => {
22
- if (line.length) {
23
- const [name, length] = line.split('\t');
24
- refSeqs[name] = +length;
25
- }
26
- });
27
- return refSeqs;
24
+ return this.setupP;
28
25
  }
29
26
  async getRegions() {
30
- const refSeqs = await this.refSeqs;
27
+ const refSeqs = await this.setup();
31
28
  return Object.keys(refSeqs).map(refName => ({
32
29
  refName,
33
30
  start: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ChromSizesAdapter.js","sourceRoot":"","sources":["../../src/ChromSizesAdapter/ChromSizesAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,GACZ,MAAM,yCAAyC,CAAA;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAM5D,MAAM,CAAC,OAAO,MAAO,SAAQ,WAAW;IAMtC,YACE,MAAuC,EACvC,aAAiC,EACjC,aAA6B;QAE7B,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;QAC3C,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;QACvE,IAAI,CAAC,kBAAkB,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;SACnD;QACD,MAAM,IAAI,GAAG,YAAY,CACvB,kBAAkC,EAClC,IAAI,CAAC,aAAa,CACnB,CAAA;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC;IAEO,KAAK,CAAC,IAAI,CAAC,IAAuB;QACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,OAAO,GAA8B,EAAE,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;SAC1D;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;YACxC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACvC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QACF,OAAO,OAAO,CAAA;IAChB,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAA;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO;YACP,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;SACtB,CAAC,CAAC,CAAA;IACL,CAAC;IAEM,SAAS;QACd,OAAO,EAAE,CAAA;IACX,CAAC;IAEM,aAAa,EAAC,gBAAgB,IAAS,CAAC;CAChD"}
1
+ {"version":3,"file":"ChromSizesAdapter.js","sourceRoot":"","sources":["../../src/ChromSizesAdapter/ChromSizesAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,WAAW,GACZ,MAAM,yCAAyC,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,MAAM,CAAC,OAAO,MAAO,SAAQ,WAAW;IAItC,KAAK,CAAC,QAAQ;QACZ,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,EAAE,CAAC,CAAA;QACjE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;QACxC,OAAO,MAAM,CAAC,WAAW,CACvB,IAAI;aACD,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;YACpB,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC,CAAC,CACL,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;gBACtC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;gBACvB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;SACH;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAEM,KAAK,CAAC,UAAU;QACrB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1C,OAAO;YACP,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC;SACtB,CAAC,CAAC,CAAA;IACL,CAAC;IAEM,SAAS;QACd,OAAO,EAAE,CAAA;IACX,CAAC;IAEM,aAAa,EAAC,gBAAgB,IAAS,CAAC;CAChD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbrowse/plugin-sequence",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "JBrowse 2 sequence adapters, tracks, etc.",
5
5
  "keywords": [
6
6
  "jbrowse",
@@ -40,8 +40,7 @@
40
40
  "@babel/runtime": "^7.17.9",
41
41
  "@gmod/indexedfasta": "^2.0.2",
42
42
  "@gmod/twobit": "^1.1.12",
43
- "abortable-promise-cache": "^1.5.0",
44
- "generic-filehandle": "^2.2.2"
43
+ "abortable-promise-cache": "^1.5.0"
45
44
  },
46
45
  "peerDependencies": {
47
46
  "@jbrowse/core": "^2.0.0",
@@ -61,5 +60,5 @@
61
60
  "distModule": "esm/index.js",
62
61
  "srcModule": "src/index.ts",
63
62
  "module": "esm/index.js",
64
- "gitHead": "ed935bf5612af3818abdc8ef52d100d5d81d33a2"
63
+ "gitHead": "0db0462fa1f9f15ab4869da085bcab032b9483c3"
65
64
  }
@@ -2,56 +2,40 @@ import {
2
2
  RegionsAdapter,
3
3
  BaseAdapter,
4
4
  } from '@jbrowse/core/data_adapters/BaseAdapter'
5
- import { FileLocation } from '@jbrowse/core/util/types'
6
5
  import { openLocation } from '@jbrowse/core/util/io'
7
- import { GenericFilehandle } from 'generic-filehandle'
8
- import { readConfObject } from '@jbrowse/core/configuration'
9
- import { Instance } from 'mobx-state-tree'
10
- import MyConfigSchema from './configSchema'
11
- import PluginManager from '@jbrowse/core/PluginManager'
12
- import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'
13
6
 
14
7
  export default class extends BaseAdapter implements RegionsAdapter {
15
8
  // the map of refSeq to length
16
- protected refSeqs: Promise<Record<string, number>>
9
+ protected setupP?: Promise<{ [key: string]: number }>
17
10
 
18
- protected source: string
19
-
20
- public constructor(
21
- config: Instance<typeof MyConfigSchema>,
22
- getSubAdapter?: getSubAdapterType,
23
- pluginManager?: PluginManager,
24
- ) {
25
- super(config, getSubAdapter, pluginManager)
26
- const chromSizesLocation = readConfObject(config, 'chromSizesLocation')
27
- if (!chromSizesLocation) {
28
- throw new Error('must provide chromSizesLocation')
29
- }
30
- const file = openLocation(
31
- chromSizesLocation as FileLocation,
32
- this.pluginManager,
11
+ async setupPre() {
12
+ const pm = this.pluginManager
13
+ const file = openLocation(this.getConf('chromSizesLocation'), pm)
14
+ const data = await file.readFile('utf8')
15
+ return Object.fromEntries(
16
+ data
17
+ .split('\n')
18
+ .map(f => f.trim())
19
+ .filter(f => !!f)
20
+ .map((line: string) => {
21
+ const [name, length] = line.split('\t')
22
+ return [name, +length]
23
+ }),
33
24
  )
34
- this.source = file.toString()
35
- this.refSeqs = this.init(file)
36
25
  }
37
26
 
38
- private async init(file: GenericFilehandle) {
39
- const data = await file.readFile('utf8')
40
- const refSeqs: { [key: string]: number } = {}
41
- if (!data.length) {
42
- throw new Error(`Could not read file ${file.toString()}`)
27
+ async setup() {
28
+ if (!this.setupP) {
29
+ this.setupP = this.setupPre().catch(e => {
30
+ this.setupP = undefined
31
+ throw e
32
+ })
43
33
  }
44
- data.split('\n').forEach((line: string) => {
45
- if (line.length) {
46
- const [name, length] = line.split('\t')
47
- refSeqs[name] = +length
48
- }
49
- })
50
- return refSeqs
34
+ return this.setupP
51
35
  }
52
36
 
53
37
  public async getRegions() {
54
- const refSeqs = await this.refSeqs
38
+ const refSeqs = await this.setup()
55
39
  return Object.keys(refSeqs).map(refName => ({
56
40
  refName,
57
41
  start: 0,