@genome-spy/core 0.44.0 → 0.46.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/bundle/{index-lmJu1tfP.js → index-BtRKzKhM.js} +6 -6
- package/dist/bundle/{index--cKb-dKG.js → index-BwFvhduA.js} +5 -5
- package/dist/bundle/{index-1QVesMzU.js → index-C8lYPtq_.js} +1 -1
- package/dist/bundle/{index-Pv3tKJ1W.js → index-CkI3Kd2P.js} +3 -3
- package/dist/bundle/{index-Y-LdHNIz.js → index-CmBp-spD.js} +1 -1
- package/dist/bundle/{index-z4Cs62EO.js → index-Dixm7K89.js} +4 -4
- package/dist/bundle/{index-noY1e-G6.js → index-Sk-Wtwdn.js} +5 -5
- package/dist/bundle/{index-UyrC0vvF.js → index-Z7JiNsFI.js} +4 -4
- package/dist/bundle/{index-LD6yPc3X.js → index-mihmTLo-.js} +1 -1
- package/dist/bundle/index.es.js +6339 -5615
- package/dist/bundle/index.js +222 -150
- package/dist/bundle/{long-Veu0zKh9.js → long-CYrAUkxh.js} +2 -2
- package/dist/bundle/{remoteFile-Ur-gRKsH.js → remoteFile-1_eCK3VV.js} +1 -1
- package/dist/schema.json +481 -90
- package/dist/src/data/collector.d.ts +1 -0
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +23 -5
- package/dist/src/data/flow.test.js +4 -0
- package/dist/src/data/flowNode.d.ts +10 -8
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +25 -15
- package/dist/src/data/flowOptimizer.test.js +12 -3
- package/dist/src/data/sources/dataSource.d.ts +17 -0
- package/dist/src/data/sources/dataSource.d.ts.map +1 -1
- package/dist/src/data/sources/dataSource.js +34 -0
- package/dist/src/data/sources/dataUtils.d.ts.map +1 -1
- package/dist/src/data/sources/dataUtils.js +3 -1
- package/dist/src/data/sources/inlineSource.js +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.d.ts +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +58 -20
- package/dist/src/data/sources/lazy/bigWigSource.d.ts +0 -1
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +58 -19
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +0 -8
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +1 -15
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts +6 -2
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.js +41 -23
- package/dist/src/data/sources/namedSource.js +1 -1
- package/dist/src/data/sources/sequenceSource.d.ts.map +1 -1
- package/dist/src/data/sources/sequenceSource.js +16 -6
- package/dist/src/data/sources/sequenceSource.test.js +23 -5
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +24 -7
- package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
- package/dist/src/data/transforms/aggregate.js +5 -2
- package/dist/src/data/transforms/filter.d.ts +2 -2
- package/dist/src/data/transforms/filter.d.ts.map +1 -1
- package/dist/src/data/transforms/filter.js +3 -6
- package/dist/src/data/transforms/filter.test.js +6 -0
- package/dist/src/data/transforms/formula.d.ts +2 -2
- package/dist/src/data/transforms/formula.d.ts.map +1 -1
- package/dist/src/data/transforms/formula.js +3 -3
- package/dist/src/data/transforms/formula.test.js +7 -1
- package/dist/src/encoder/encoder.d.ts +2 -4
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +8 -8
- package/dist/src/encoder/encoder.test.js +3 -0
- package/dist/src/genomeSpy.d.ts +12 -7
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +132 -139
- package/dist/src/gl/glslScaleGenerator.js +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/marks/mark.d.ts +8 -5
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +67 -12
- package/dist/src/marks/point.common.glsl.js +1 -1
- package/dist/src/marks/point.d.ts +1 -4
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +31 -23
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +15 -7
- package/dist/src/spec/data.d.ts +11 -10
- package/dist/src/spec/mark.d.ts +11 -21
- package/dist/src/spec/parameter.d.ts +11 -7
- package/dist/src/spec/root.d.ts +0 -8
- package/dist/src/spec/title.d.ts +5 -4
- package/dist/src/spec/view.d.ts +64 -6
- package/dist/src/styles/genome-spy.css.d.ts +1 -1
- package/dist/src/styles/genome-spy.css.d.ts.map +1 -1
- package/dist/src/styles/genome-spy.css.js +56 -5
- package/dist/src/styles/genome-spy.scss +68 -10
- package/dist/src/styles/update.sh +6 -0
- package/dist/src/tooltip/dataTooltipHandler.js +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.js +1 -1
- package/dist/src/tooltip/tooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/tooltipHandler.d.ts.map +1 -1
- package/dist/src/tooltip/tooltipHandler.ts +1 -1
- package/dist/src/types/embedApi.d.ts +6 -0
- package/dist/src/types/viewContext.d.ts +11 -5
- package/dist/src/utils/debounce.d.ts +2 -2
- package/dist/src/utils/debounce.d.ts.map +1 -1
- package/dist/src/utils/debounce.js +5 -2
- package/dist/src/utils/expression.d.ts +2 -2
- package/dist/src/utils/expression.d.ts.map +1 -1
- package/dist/src/utils/expression.js +2 -2
- package/dist/src/utils/formatObject.d.ts +2 -2
- package/dist/src/utils/formatObject.d.ts.map +1 -1
- package/dist/src/utils/formatObject.js +2 -2
- package/dist/src/utils/inputBinding.d.ts +5 -0
- package/dist/src/utils/inputBinding.d.ts.map +1 -0
- package/dist/src/utils/inputBinding.js +115 -0
- package/dist/src/utils/ui/tooltip.js +1 -1
- package/dist/src/view/paramMediator.d.ts +109 -0
- package/dist/src/view/paramMediator.d.ts.map +1 -0
- package/dist/src/view/paramMediator.js +338 -0
- package/dist/src/view/paramMediator.test.js +224 -0
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +11 -6
- package/dist/src/view/view.d.ts +4 -1
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.js +19 -5
- package/dist/src/view/viewFactory.d.ts +4 -1
- package/dist/src/view/viewFactory.d.ts.map +1 -1
- package/dist/src/view/viewFactory.js +86 -13
- package/dist/src/view/viewUtils.d.ts +7 -8
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- package/dist/src/view/viewUtils.js +30 -34
- package/package.json +16 -17
- package/dist/src/paramBroker.d.ts +0 -46
- package/dist/src/paramBroker.d.ts.map +0 -1
- package/dist/src/paramBroker.js +0 -118
- /package/dist/bundle/{__vite-browser-external-ENoMJThg.js → __vite-browser-external-C--ziKoh.js} +0 -0
- /package/dist/bundle/{_commonjsHelpers-QtkX90xp.js → _commonjsHelpers-BIiJCwQW.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/data/collector.js"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH;IAKI;;OAEG;IACH,qBAFW,OAAO,sBAAsB,EAAE,aAAa,EActD;IATG,qDAA2C;IAE3C,2CAA2C;IAC3C,WADW,QAAU,SAAS,KAAE,IAAI,CAAC,EAAE,CACpB;IAEnB,uFAAuF;IACvF,cADW,IAAI,GAAG,GAAG,GAAG,EAAE,EAAE,OAAO,eAAe,EAAE,IAAI,CAAC,CAC5B;IAKjC,cAOC;IANG,2CAA2C;IAC3C,OADW,OAAO,eAAe,EAAE,IAAI,CACxB;IA6GnB;;OAEG;IACH,WAFa,SAAS,OAAO,eAAe,EAAE,KAAK,CAAC,CAuBnD;IAED;;;OAGG;IACH,2BAFmB,OAAO,eAAe,EAAE,KAAK,KAAK,IAAI,QAUxD;IAED;;OAEG;IACH,uBAMC;IAED,qBAMC;;CACJ;qBAzMyD,eAAe"}
|
|
@@ -89,8 +89,10 @@ export default class Collector extends FlowNode {
|
|
|
89
89
|
);
|
|
90
90
|
const groups =
|
|
91
91
|
accessors.length > 1
|
|
92
|
-
? //
|
|
93
|
-
|
|
92
|
+
? // There's something strange in d3-array's typings
|
|
93
|
+
/** @type {Map<any, any>} */ /** @type {any} */ (
|
|
94
|
+
group(this._data, ...accessors)
|
|
95
|
+
)
|
|
94
96
|
: // D3's group is SLOW!
|
|
95
97
|
groupBy(this._data, accessors[0]);
|
|
96
98
|
|
|
@@ -105,6 +107,16 @@ export default class Collector extends FlowNode {
|
|
|
105
107
|
sortData(data);
|
|
106
108
|
}
|
|
107
109
|
|
|
110
|
+
this.#propagateToChildren();
|
|
111
|
+
|
|
112
|
+
super.complete();
|
|
113
|
+
|
|
114
|
+
for (const observer of this.observers) {
|
|
115
|
+
observer(this);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
#propagateToChildren() {
|
|
108
120
|
if (this.children.length) {
|
|
109
121
|
for (const [key, data] of this.facetBatches.entries()) {
|
|
110
122
|
if (key) {
|
|
@@ -119,11 +131,17 @@ export default class Collector extends FlowNode {
|
|
|
119
131
|
}
|
|
120
132
|
}
|
|
121
133
|
}
|
|
134
|
+
}
|
|
122
135
|
|
|
123
|
-
|
|
136
|
+
repropagate() {
|
|
137
|
+
for (const child of this.children) {
|
|
138
|
+
child.reset();
|
|
139
|
+
}
|
|
124
140
|
|
|
125
|
-
|
|
126
|
-
|
|
141
|
+
this.#propagateToChildren();
|
|
142
|
+
|
|
143
|
+
for (const child of this.children) {
|
|
144
|
+
child.complete();
|
|
127
145
|
}
|
|
128
146
|
}
|
|
129
147
|
|
|
@@ -43,6 +43,9 @@ describe("Test flow graphs", () => {
|
|
|
43
43
|
);
|
|
44
44
|
});
|
|
45
45
|
|
|
46
|
+
test.skip("Implement stub for ParamMediator");
|
|
47
|
+
|
|
48
|
+
/*
|
|
46
49
|
test("Longer chain of nodes", () => {
|
|
47
50
|
const source = new SynchronousSequenceSource(10);
|
|
48
51
|
const filter = new FilterTransform({
|
|
@@ -69,4 +72,5 @@ describe("Test flow graphs", () => {
|
|
|
69
72
|
}))
|
|
70
73
|
);
|
|
71
74
|
});
|
|
75
|
+
*/
|
|
72
76
|
});
|
|
@@ -104,14 +104,6 @@ export default class FlowNode {
|
|
|
104
104
|
* @returns {string}
|
|
105
105
|
*/
|
|
106
106
|
subtreeToString(depth?: number): string;
|
|
107
|
-
/**
|
|
108
|
-
* The global object for expressions (in formula and filter transforms).
|
|
109
|
-
* Nodes in the hierarchy may extend the object using Object.create to
|
|
110
|
-
* introduce variables that are visible downstream the flow.
|
|
111
|
-
*
|
|
112
|
-
* @returns {Record<string, any>}
|
|
113
|
-
*/
|
|
114
|
-
getGlobalObject(): Record<string, any>;
|
|
115
107
|
/**
|
|
116
108
|
*
|
|
117
109
|
* @param {Datum} datum
|
|
@@ -124,6 +116,16 @@ export default class FlowNode {
|
|
|
124
116
|
* @param {import("../types/flowBatch.js").FlowBatch} flowBatch
|
|
125
117
|
*/
|
|
126
118
|
beginBatch(flowBatch: import("../types/flowBatch.js").FlowBatch): void;
|
|
119
|
+
/**
|
|
120
|
+
* @returns {import("../view/paramMediator.js").default}
|
|
121
|
+
* @protected
|
|
122
|
+
*/
|
|
123
|
+
protected get paramMediator(): import("../view/paramMediator.js").default;
|
|
124
|
+
/**
|
|
125
|
+
* Repropagates the stored data. If this node has no stored data,
|
|
126
|
+
* find the nearest ancestor that has and repropagate from there.
|
|
127
|
+
*/
|
|
128
|
+
repropagate(): void;
|
|
127
129
|
}
|
|
128
130
|
/**
|
|
129
131
|
* This is heavily inspired by Vega's and Vega-Lite's data flow system.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"AAyRA;;;GAGG;AACH,uCAHW,OAAO,uBAAuB,EAAE,SAAS,0DAKnD;AAED;;;GAGG;AACH,wCAHW,OAAO,uBAAuB,EAAE,SAAS,2DAKnD;AArSD;;;GAGG;AACH,qCAAsC;AAEtC;;;GAGG;AACH,uCAAwC;AAExC;;;GAGG;AACH,uCAAwC;AAExC;;;;;GAKG;AACH;IACI,uBAEC;IAGG,yBAAyB;IACzB,UADW,QAAQ,EAAE,CACH;IAElB,uBAAuB;IACvB,QADW,QAAQ,CACI;IAEvB,2CAA2C;IAC3C,mBAAsB;IAG1B;;;OAGG;IACH,cAMC;IAED;;;OAGG;IACH,mBAEC;IAED;;;OAGG;IACH,0BAUC;IAoMD;;;OAGG;IACH,kBAFW,GAAG,QAIb;IAxMD;;;OAGG;IACH,kBAFW,QAAQ,QAIlB;IAED;;;OAGG;IACH,gBAFW,QAAQ,QAUlB;IAED;;OAEG;IACH,YAFW,QAAQ,QAQlB;IAED;;OAEG;IACH,6BAFW,QAAQ,QAMlB;IAED;;OAEG;IACH,0BAFW,QAAQ,QAalB;IAED;;;OAGG;IACH,mBAFW,QAAQ,QAWlB;IAED;;OAEG;IACH,eAiBC;IAED,kBAEC;IAED,uBAEC;IAED,sBAEC;IAED;;;;OAIG;IACH,eAFW,QAAU,QAAQ,KAAE,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,SAAW,QAAQ,KAAE,IAAI,CAAA;KAAC,QAchF;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;OAGG;IACH,cAFW,KAAK,QAKf;IAED,iBAMC;IAED;;;;OAIG;IACH,sBAFW,OAAO,uBAAuB,EAAE,SAAS,QAMnD;IAED;;;OAGG;IACH,0EAKC;IAED;;;OAGG;IACH,oBAQC;CASJ;;;;oBAhQY,OAAO,MAAM,EAAE,GAAG,CAAC;;;;mBACnB,KAAK,EAAE"}
|
|
@@ -18,8 +18,6 @@ export const BEHAVIOR_MODIFIES = 1 << 1;
|
|
|
18
18
|
*/
|
|
19
19
|
export const BEHAVIOR_COLLECTS = 1 << 2;
|
|
20
20
|
|
|
21
|
-
const ROOT_CONTEXT_OBJECT = {};
|
|
22
|
-
|
|
23
21
|
/**
|
|
24
22
|
* This is heavily inspired by Vega's and Vega-Lite's data flow system.
|
|
25
23
|
*
|
|
@@ -219,19 +217,6 @@ export default class FlowNode {
|
|
|
219
217
|
} \n${childTree}`;
|
|
220
218
|
}
|
|
221
219
|
|
|
222
|
-
/**
|
|
223
|
-
* The global object for expressions (in formula and filter transforms).
|
|
224
|
-
* Nodes in the hierarchy may extend the object using Object.create to
|
|
225
|
-
* introduce variables that are visible downstream the flow.
|
|
226
|
-
*
|
|
227
|
-
* @returns {Record<string, any>}
|
|
228
|
-
*/
|
|
229
|
-
getGlobalObject() {
|
|
230
|
-
return this.parent
|
|
231
|
-
? this.parent.getGlobalObject()
|
|
232
|
-
: ROOT_CONTEXT_OBJECT;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
220
|
/**
|
|
236
221
|
*
|
|
237
222
|
* @param {Datum} datum
|
|
@@ -260,6 +245,31 @@ export default class FlowNode {
|
|
|
260
245
|
}
|
|
261
246
|
}
|
|
262
247
|
|
|
248
|
+
/**
|
|
249
|
+
* @returns {import("../view/paramMediator.js").default}
|
|
250
|
+
* @protected
|
|
251
|
+
*/
|
|
252
|
+
get paramMediator() {
|
|
253
|
+
if (!this.parent) {
|
|
254
|
+
throw new Error("Cannot find paramMediator!");
|
|
255
|
+
}
|
|
256
|
+
return this.parent.paramMediator;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Repropagates the stored data. If this node has no stored data,
|
|
261
|
+
* find the nearest ancestor that has and repropagate from there.
|
|
262
|
+
*/
|
|
263
|
+
repropagate() {
|
|
264
|
+
if (this.parent) {
|
|
265
|
+
this.parent.repropagate();
|
|
266
|
+
} else {
|
|
267
|
+
throw new Error(
|
|
268
|
+
"Cannot repropagate data, no FlowNode with stored data found!"
|
|
269
|
+
);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
|
|
263
273
|
/**
|
|
264
274
|
*
|
|
265
275
|
* @param {any} datum
|
|
@@ -132,20 +132,29 @@ describe("removeRedundantCloneTransforms", () => {
|
|
|
132
132
|
});
|
|
133
133
|
});
|
|
134
134
|
|
|
135
|
+
const viewStub = {
|
|
136
|
+
paramMediator: {
|
|
137
|
+
registerParam: () => {},
|
|
138
|
+
allocateSetter: () => {},
|
|
139
|
+
createExpression: () => {},
|
|
140
|
+
},
|
|
141
|
+
getBaseUrl: () => "",
|
|
142
|
+
};
|
|
143
|
+
|
|
135
144
|
describe("Merge indentical data sources", () => {
|
|
136
145
|
test("Merges correctly", () => {
|
|
137
146
|
/** @type {DataFlow<string>} */
|
|
138
147
|
const dataFlow = new DataFlow();
|
|
139
148
|
|
|
140
|
-
const a = new UrlSource({ url: "http://genomespy.app/" });
|
|
149
|
+
const a = new UrlSource({ url: "http://genomespy.app/" }, viewStub);
|
|
141
150
|
const ac = new Collector();
|
|
142
151
|
a.addChild(ac);
|
|
143
152
|
|
|
144
|
-
const b = new UrlSource({ url: "http://genomespy.app/" });
|
|
153
|
+
const b = new UrlSource({ url: "http://genomespy.app/" }, viewStub);
|
|
145
154
|
const bc = new Collector();
|
|
146
155
|
b.addChild(bc);
|
|
147
156
|
|
|
148
|
-
const c = new UrlSource({ url: "http://helsinki.fi/" });
|
|
157
|
+
const c = new UrlSource({ url: "http://helsinki.fi/" }, viewStub);
|
|
149
158
|
const cc = new Collector();
|
|
150
159
|
c.addChild(cc);
|
|
151
160
|
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
export default class DataSource extends FlowNode {
|
|
2
|
+
/**
|
|
3
|
+
* @param {import("../../view/view.js").default} view
|
|
4
|
+
*/
|
|
5
|
+
constructor(view: import("../../view/view.js").default);
|
|
6
|
+
/**
|
|
7
|
+
* @type {import("../../view/view.js").default}
|
|
8
|
+
* @protected
|
|
9
|
+
*/
|
|
10
|
+
protected view: import("../../view/view.js").default;
|
|
2
11
|
/**
|
|
3
12
|
* Returns a string that identifies a data source. Data sources with the
|
|
4
13
|
* same identifier can be merged.
|
|
@@ -6,6 +15,14 @@ export default class DataSource extends FlowNode {
|
|
|
6
15
|
* @return {string}
|
|
7
16
|
*/
|
|
8
17
|
get identifier(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Sets the loading status of the data source. The status is shown in the UI.
|
|
20
|
+
*
|
|
21
|
+
* @param {import("../../types/viewContext.js").DataLoadingStatus} status
|
|
22
|
+
* @param {string} [detail] The error message
|
|
23
|
+
* @protected
|
|
24
|
+
*/
|
|
25
|
+
protected setLoadingStatus(status: import("../../types/viewContext.js").DataLoadingStatus, detail?: string): void;
|
|
9
26
|
load(): Promise<void>;
|
|
10
27
|
}
|
|
11
28
|
import FlowNode from "../flowNode.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSource.js"],"names":[],"mappings":"AAEA;
|
|
1
|
+
{"version":3,"file":"dataSource.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataSource.js"],"names":[],"mappings":"AAEA;IAOI;;OAEG;IACH,kBAFW,OAAO,oBAAoB,EAAE,OAAO,EAM9C;IAbD;;;OAGG;IACH,gBAHU,OAAO,oBAAoB,EAAE,OAAO,CAGzC;IAWL;;;;;OAKG;IACH,yBAEC;IAED;;;;;;OAMG;IACH,mCAJW,OAAO,4BAA4B,EAAE,iBAAiB,WACtD,MAAM,QAKhB;IAcD,sBAEC;CAKJ;qBA1DoB,gBAAgB"}
|
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
import FlowNode from "../flowNode.js";
|
|
2
2
|
|
|
3
3
|
export default class DataSource extends FlowNode {
|
|
4
|
+
/**
|
|
5
|
+
* @type {import("../../view/view.js").default}
|
|
6
|
+
* @protected
|
|
7
|
+
*/
|
|
8
|
+
view;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @param {import("../../view/view.js").default} view
|
|
12
|
+
*/
|
|
13
|
+
constructor(view) {
|
|
14
|
+
super();
|
|
15
|
+
|
|
16
|
+
this.view = view;
|
|
17
|
+
}
|
|
18
|
+
|
|
4
19
|
/**
|
|
5
20
|
* Returns a string that identifies a data source. Data sources with the
|
|
6
21
|
* same identifier can be merged.
|
|
@@ -11,6 +26,21 @@ export default class DataSource extends FlowNode {
|
|
|
11
26
|
return undefined;
|
|
12
27
|
}
|
|
13
28
|
|
|
29
|
+
/**
|
|
30
|
+
* Sets the loading status of the data source. The status is shown in the UI.
|
|
31
|
+
*
|
|
32
|
+
* @param {import("../../types/viewContext.js").DataLoadingStatus} status
|
|
33
|
+
* @param {string} [detail] The error message
|
|
34
|
+
* @protected
|
|
35
|
+
*/
|
|
36
|
+
setLoadingStatus(status, detail) {
|
|
37
|
+
this.view.context.setDataLoadingStatus(this.view, status, detail);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
get paramMediator() {
|
|
41
|
+
return this.view.paramMediator;
|
|
42
|
+
}
|
|
43
|
+
|
|
14
44
|
/**
|
|
15
45
|
*
|
|
16
46
|
* @param {import("../flowNode.js").Datum} datum
|
|
@@ -22,4 +52,8 @@ export default class DataSource extends FlowNode {
|
|
|
22
52
|
async load() {
|
|
23
53
|
// override
|
|
24
54
|
}
|
|
55
|
+
|
|
56
|
+
repropagate() {
|
|
57
|
+
this.load();
|
|
58
|
+
}
|
|
25
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataUtils.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataUtils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dataUtils.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/dataUtils.js"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,kCAHW,OAAO,oBAAoB,EAAE,UAAU;;;;;;;;;;;;;EAsBjD;AAED;;GAEG;AACH,wCAFW,MAAM,GAAG,MAAM,EAAE,UAU3B;AAWD;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,UAAU,4DAKjD;AAED;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,UAAU,4DAKjD;AAED;;;GAGG;AACH,6CAHW,OAAO,oBAAoB,EAAE,UAAU,6DAKjD;AAED;;;;GAIG;AACH,sCAHW,OAAO,oBAAoB,EAAE,UAAU,sDAKjD;AAxCM,+BAAgC,GAAG,QAI3B,OAAO,uBAAuB,EAAE,MAAM;;UAGtB,OAAO,gBAAgB,EAAE,KAAK,qCANR"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { withoutExprRef } from "../../view/paramMediator.js";
|
|
1
2
|
import { isInlineData } from "./inlineSource.js";
|
|
2
3
|
|
|
3
4
|
/**
|
|
@@ -13,7 +14,8 @@ export function getFormat(params) {
|
|
|
13
14
|
}
|
|
14
15
|
const format = { ...params.format };
|
|
15
16
|
|
|
16
|
-
format.type ??=
|
|
17
|
+
format.type ??=
|
|
18
|
+
isUrlData(params) && extractTypeFromUrl(withoutExprRef(params.url));
|
|
17
19
|
// @ts-ignore TODO: Fix typing
|
|
18
20
|
format.parse ??= "auto";
|
|
19
21
|
|
|
@@ -15,7 +15,7 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
15
15
|
rest?: string;
|
|
16
16
|
}) => Record<string, any>;
|
|
17
17
|
params: import("../../../spec/data.js").BigBedData;
|
|
18
|
-
|
|
18
|
+
#private;
|
|
19
19
|
}
|
|
20
20
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
21
21
|
//# sourceMappingURL=bigBedSource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigBedSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigBedSource.js"],"names":[],"mappings":"AAOA;IAUI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IA9CD,0CAA0C;IAC1C,QADW,OAAO,WAAW,EAAE,OAAO,CAC/B;IAEP,yCAAyC;IACzC,KADW,OAAO,WAAW,EAAE,MAAM,CACjC;IAEJ,4GAA4G;IAC5G,mBADmB,MAAM,UAAU;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,MAAM,EAAE,GAAG,CAAC,CAC9F;IA8BN,mDAA6B;;CAoFpC;qCA5HoC,+BAA+B"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
activateExprRefProps,
|
|
3
|
+
withoutExprRef,
|
|
4
|
+
} from "../../../view/paramMediator.js";
|
|
1
5
|
import addBaseUrl from "../../../utils/addBaseUrl.js";
|
|
2
6
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
3
7
|
|
|
@@ -25,9 +29,21 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
25
29
|
...params,
|
|
26
30
|
};
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
const activatedParams = activateExprRefProps(
|
|
33
|
+
view.paramMediator,
|
|
34
|
+
paramsWithDefaults,
|
|
35
|
+
(props) => {
|
|
36
|
+
if (props.includes("url")) {
|
|
37
|
+
this.#initialize().then(() => this.reloadLastDomain());
|
|
38
|
+
} else if (props.includes("windowSize")) {
|
|
39
|
+
this.reloadLastDomain();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
super(view, activatedParams.channel);
|
|
29
45
|
|
|
30
|
-
this.params =
|
|
46
|
+
this.params = activatedParams;
|
|
31
47
|
|
|
32
48
|
if (!this.params.url) {
|
|
33
49
|
throw new Error("No URL provided for BigBedSource");
|
|
@@ -35,7 +51,11 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
35
51
|
|
|
36
52
|
this.setupDebouncing(this.params);
|
|
37
53
|
|
|
38
|
-
this
|
|
54
|
+
this.#initialize();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#initialize() {
|
|
58
|
+
this.initializedPromise = new Promise((resolve, reject) => {
|
|
39
59
|
Promise.all([
|
|
40
60
|
import("@gmod/bed"),
|
|
41
61
|
import("@gmod/bbi"),
|
|
@@ -45,28 +65,46 @@ export default class BigBedSource extends SingleAxisWindowedSource {
|
|
|
45
65
|
|
|
46
66
|
this.bbi = new BigBed({
|
|
47
67
|
filehandle: new RemoteFile(
|
|
48
|
-
addBaseUrl(
|
|
68
|
+
addBaseUrl(
|
|
69
|
+
withoutExprRef(this.params.url),
|
|
70
|
+
this.view.getBaseUrl()
|
|
71
|
+
)
|
|
49
72
|
),
|
|
50
73
|
});
|
|
51
74
|
|
|
52
|
-
this.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
this.
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
this.setLoadingStatus("loading");
|
|
76
|
+
this.bbi
|
|
77
|
+
.getHeader()
|
|
78
|
+
.then(async (header) => {
|
|
79
|
+
// @ts-ignore TODO: Fix
|
|
80
|
+
this.parser = new BED({ autoSql: header.autoSql });
|
|
81
|
+
try {
|
|
82
|
+
const fastParser = makeFastParser(this.parser);
|
|
83
|
+
this.parseLine = (chrom, f) =>
|
|
84
|
+
fastParser(chrom, f.start, f.end, f.rest);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
this.parseLine = (chrom, f) =>
|
|
87
|
+
this.parser.parseLine(
|
|
88
|
+
`${chrom}\t${f.start}\t${f.end}\t${f.rest}`
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
this.setLoadingStatus("complete");
|
|
93
|
+
resolve();
|
|
94
|
+
})
|
|
95
|
+
.catch((e) => {
|
|
96
|
+
// Load empty data
|
|
97
|
+
this.load();
|
|
98
|
+
this.setLoadingStatus(
|
|
99
|
+
"error",
|
|
100
|
+
`${withoutExprRef(this.params.url)}: ${e.message}`
|
|
101
|
+
);
|
|
102
|
+
reject(e);
|
|
103
|
+
});
|
|
68
104
|
});
|
|
69
105
|
});
|
|
106
|
+
|
|
107
|
+
return this.initializedPromise;
|
|
70
108
|
}
|
|
71
109
|
|
|
72
110
|
/**
|
|
@@ -8,7 +8,6 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
8
8
|
*/
|
|
9
9
|
constructor(params: import("../../../spec/data.js").BigWigData, view: import("../../../view/view.js").default);
|
|
10
10
|
params: import("../../../spec/data.js").BigWigData;
|
|
11
|
-
initializedPromise: Promise<any>;
|
|
12
11
|
/**
|
|
13
12
|
* Listen to the domain change event and update data when the covered windows change.
|
|
14
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/bigWigSource.js"],"names":[],"mappings":"AAOA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAmCjD;IATG,mDAA6B;IA2DjC;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAqBlB;IAED;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBA2BhB;;CACJ;qCA3JoC,+BAA+B"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import {
|
|
2
|
+
activateExprRefProps,
|
|
3
|
+
withoutExprRef,
|
|
4
|
+
} from "../../../view/paramMediator.js";
|
|
1
5
|
import addBaseUrl from "../../../utils/addBaseUrl.js";
|
|
2
6
|
import SingleAxisWindowedSource from "./singleAxisWindowedSource.js";
|
|
3
7
|
|
|
@@ -25,9 +29,21 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
25
29
|
...params,
|
|
26
30
|
};
|
|
27
31
|
|
|
28
|
-
|
|
32
|
+
const activatedParams = activateExprRefProps(
|
|
33
|
+
view.paramMediator,
|
|
34
|
+
paramsWithDefaults,
|
|
35
|
+
(props) => {
|
|
36
|
+
if (props.includes("url")) {
|
|
37
|
+
this.#initialize().then(() => this.reloadLastDomain());
|
|
38
|
+
} else if (props.includes("pixelsPerBin")) {
|
|
39
|
+
this.reloadLastDomain();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
super(view, activatedParams.channel);
|
|
29
45
|
|
|
30
|
-
this.params =
|
|
46
|
+
this.params = activatedParams;
|
|
31
47
|
|
|
32
48
|
if (!this.params.url) {
|
|
33
49
|
throw new Error("No URL provided for BigWigSource");
|
|
@@ -35,33 +51,55 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
35
51
|
|
|
36
52
|
this.setupDebouncing(this.params);
|
|
37
53
|
|
|
38
|
-
this
|
|
54
|
+
this.#initialize();
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#initialize() {
|
|
58
|
+
this.initializedPromise = new Promise((resolve, reject) => {
|
|
39
59
|
Promise.all([
|
|
40
60
|
import("@gmod/bbi"),
|
|
41
61
|
import("generic-filehandle"),
|
|
42
62
|
]).then(([{ BigWig }, { RemoteFile }]) => {
|
|
43
63
|
this.#bbi = new BigWig({
|
|
44
64
|
filehandle: new RemoteFile(
|
|
45
|
-
addBaseUrl(
|
|
65
|
+
addBaseUrl(
|
|
66
|
+
withoutExprRef(this.params.url),
|
|
67
|
+
this.view.getBaseUrl()
|
|
68
|
+
)
|
|
46
69
|
),
|
|
47
70
|
});
|
|
48
71
|
|
|
49
|
-
this
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
72
|
+
this.setLoadingStatus("loading");
|
|
73
|
+
this.#bbi
|
|
74
|
+
.getHeader()
|
|
75
|
+
.then((header) => {
|
|
76
|
+
this.#reductionLevels =
|
|
77
|
+
/** @type {{reductionLevel: number}[]} */ (
|
|
78
|
+
header.zoomLevels
|
|
79
|
+
)
|
|
80
|
+
.map((z) => z.reductionLevel)
|
|
81
|
+
.reverse();
|
|
82
|
+
|
|
83
|
+
// Add the non-reduced level. Not sure if this is the best way to do it.
|
|
84
|
+
// Afaik, the non-reduced bin size is not available in the header.
|
|
85
|
+
this.#reductionLevels.push(1);
|
|
86
|
+
|
|
87
|
+
this.setLoadingStatus("complete");
|
|
88
|
+
resolve();
|
|
89
|
+
})
|
|
90
|
+
.catch((e) => {
|
|
91
|
+
// Load empty data
|
|
92
|
+
this.load();
|
|
93
|
+
this.setLoadingStatus(
|
|
94
|
+
"error",
|
|
95
|
+
`${withoutExprRef(this.params.url)}: ${e.message}`
|
|
96
|
+
);
|
|
97
|
+
reject(e);
|
|
98
|
+
});
|
|
63
99
|
});
|
|
64
100
|
});
|
|
101
|
+
|
|
102
|
+
return this.initializedPromise;
|
|
65
103
|
}
|
|
66
104
|
|
|
67
105
|
/**
|
|
@@ -96,7 +134,8 @@ export default class BigWigSource extends SingleAxisWindowedSource {
|
|
|
96
134
|
*/
|
|
97
135
|
// @ts-expect-error
|
|
98
136
|
async loadInterval(interval, reductionLevel) {
|
|
99
|
-
const scale =
|
|
137
|
+
const scale =
|
|
138
|
+
1 / 2 / reductionLevel / withoutExprRef(this.params.pixelsPerBin);
|
|
100
139
|
const featureChunks = await this.discretizeAndLoad(
|
|
101
140
|
interval,
|
|
102
141
|
(d, signal) =>
|
|
@@ -12,7 +12,6 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
12
12
|
* @protected
|
|
13
13
|
*/
|
|
14
14
|
protected initializedPromise: Promise<void>;
|
|
15
|
-
view: import("../../../view/view.js").default;
|
|
16
15
|
/** @type {import("../../../spec/channel.js").PrimaryPositionalChannel} */
|
|
17
16
|
channel: import("../../../spec/channel.js").PrimaryPositionalChannel;
|
|
18
17
|
scaleResolution: import("../../../view/scaleResolution.js").default;
|
|
@@ -35,13 +34,6 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
35
34
|
* @abstract
|
|
36
35
|
*/
|
|
37
36
|
onDomainChanged(domain: number[], complexDomain: import("../../../spec/genome.js").ChromosomalLocus[]): void;
|
|
38
|
-
/**
|
|
39
|
-
* Sets the loading status of the data source. The status is shown in the UI.
|
|
40
|
-
*
|
|
41
|
-
* @param {boolean} status true if loading, false otherwise
|
|
42
|
-
* @protected
|
|
43
|
-
*/
|
|
44
|
-
protected setLoadingStatus(status: boolean): void;
|
|
45
37
|
/**
|
|
46
38
|
* TODO: Get rid of this method.
|
|
47
39
|
* Rendering should be requested by the collector.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/lazy/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EA+CrE;IAvDD;;;OAGG;IACH,4CAAuC;IAmBnC,2EAA2E;IAC3E,SADW,OAAO,0BAA0B,EAAE,wBAAwB,CAChD;IAEtB,oEAA4D;IA+BhE;;;OAGG;IACH,wBAWC;IAED;;;;OAIG;IACH,oEAEC;IAED;;;;;;OAMG;IACH,wBAJW,MAAM,EAAE,iBACR,OAAO,yBAAyB,EAAE,gBAAgB,EAAE,QAK9D;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;OAKG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAgB/C;CACJ;uBA1IsB,kBAAkB"}
|
|
@@ -17,9 +17,7 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
17
17
|
* @param {import("../../../spec/channel.js").PrimaryPositionalChannel} channel
|
|
18
18
|
*/
|
|
19
19
|
constructor(view, channel) {
|
|
20
|
-
super();
|
|
21
|
-
|
|
22
|
-
this.view = view;
|
|
20
|
+
super(view);
|
|
23
21
|
|
|
24
22
|
if (!channel) {
|
|
25
23
|
throw new Error(
|
|
@@ -102,16 +100,6 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
102
100
|
// Override me
|
|
103
101
|
}
|
|
104
102
|
|
|
105
|
-
/**
|
|
106
|
-
* Sets the loading status of the data source. The status is shown in the UI.
|
|
107
|
-
*
|
|
108
|
-
* @param {boolean} status true if loading, false otherwise
|
|
109
|
-
* @protected
|
|
110
|
-
*/
|
|
111
|
-
setLoadingStatus(status) {
|
|
112
|
-
this.view.context.setDataLoadingStatus(this.view, status);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
103
|
/**
|
|
116
104
|
* TODO: Get rid of this method.
|
|
117
105
|
* Rendering should be requested by the collector.
|
|
@@ -148,7 +136,5 @@ export default class SingleAxisLazySource extends DataSource {
|
|
|
148
136
|
this.complete();
|
|
149
137
|
|
|
150
138
|
reconfigureScales(this.view);
|
|
151
|
-
|
|
152
|
-
this.requestRender();
|
|
153
139
|
}
|
|
154
140
|
}
|