@genome-spy/core 0.42.1 → 0.43.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.es.js +2329 -2298
- package/dist/bundle/index.js +68 -65
- package/dist/schema.json +251 -1
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +28 -2
- package/dist/src/data/sources/dataSourceFactory.d.ts +7 -7
- package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -1
- package/dist/src/data/sources/dataSourceFactory.js +9 -9
- package/dist/src/data/sources/{dynamic → lazy}/README.md +2 -2
- package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -0
- package/dist/src/data/sources/{dynamic → lazy}/singleAxisLazySource.js +3 -3
- package/dist/src/data/sources/lazy/singleAxisWindowedSource.d.ts.map +1 -0
- package/dist/src/data/sources/lazy/tabixSource.d.ts.map +1 -0
- package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
- package/dist/src/data/transforms/regexFold.js +6 -8
- package/dist/src/encoder/encoder.d.ts +1 -1
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/gl/arrayBuilder.d.ts +0 -1
- package/dist/src/gl/arrayBuilder.d.ts.map +1 -1
- package/dist/src/gl/arrayBuilder.js +46 -32
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +7 -3
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +3 -1
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +9 -4
- package/dist/src/spec/channel.d.ts +14 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +11 -4
- package/dist/src/view/unitView.d.ts +1 -1
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/axisTickSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bamSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/singleAxisWindowedSource.d.ts.map +0 -1
- package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +0 -1
- /package/dist/src/data/sources/{dynamic → lazy}/axisGenomeSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisGenomeSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisTickSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/axisTickSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bamSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bamSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigBedSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigBedSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigWigSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/bigWigSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/gff3Source.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/gff3Source.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/indexedFastaSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/indexedFastaSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisLazySource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisWindowedSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/singleAxisWindowedSource.js +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/tabixSource.d.ts +0 -0
- /package/dist/src/data/sources/{dynamic → lazy}/tabixSource.js +0 -0
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { isNumber } from "vega-util";
|
|
2
2
|
import { ATTRIBUTE_PREFIX } from "./glslScaleGenerator.js";
|
|
3
3
|
|
|
4
|
+
/** Unrolling appears to give a 20% performance boost on Chrome but compiling the
|
|
5
|
+
* dynamically generated code takes time and is thus not great for small dynamic data.
|
|
6
|
+
* Unrolling probably allows the JS engine to inline pusher calls.
|
|
7
|
+
*/
|
|
8
|
+
const UNROLL_LIMIT = 10000;
|
|
9
|
+
|
|
4
10
|
/**
|
|
5
11
|
* @typedef {Object} ConverterMetadata
|
|
6
12
|
* A function that extracts a raw attribute from a datum (optionally) converts
|
|
@@ -135,37 +141,22 @@ export default class ArrayBuilder {
|
|
|
135
141
|
return updater;
|
|
136
142
|
}
|
|
137
143
|
|
|
138
|
-
_unrollPushAll() {
|
|
139
|
-
let preps = "";
|
|
140
|
-
let pushs = "";
|
|
141
|
-
|
|
142
|
-
for (let i = 0; i < this.pushers.length; i++) {
|
|
143
|
-
preps += `const p${i} = that.pushers[${i}];\n`;
|
|
144
|
-
pushs += `p${i}();\n`;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// eslint-disable-next-line no-new-func
|
|
148
|
-
const createUnrolled = new Function(
|
|
149
|
-
"that",
|
|
150
|
-
`${preps}
|
|
151
|
-
|
|
152
|
-
return function unrolledPushAll() {
|
|
153
|
-
${pushs}
|
|
154
|
-
that.vertexCount++;
|
|
155
|
-
};
|
|
156
|
-
`
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
this.pushAll = createUnrolled(this);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
144
|
pushAll() {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
145
|
+
if (this.size > UNROLL_LIMIT) {
|
|
146
|
+
const preps = this.pushers
|
|
147
|
+
.map((_v, i) => `const p${i} = that.pushers[${i}];`)
|
|
148
|
+
.join("\n");
|
|
149
|
+
const pushs = this.pushers.map((_v, i) => ` p${i}();`).join("\n");
|
|
150
|
+
|
|
151
|
+
// eslint-disable-next-line no-new-func
|
|
152
|
+
this.pushAll = new Function(
|
|
153
|
+
"that",
|
|
154
|
+
`${preps}
|
|
155
|
+
return function unrolledPushAll() {
|
|
156
|
+
${pushs}
|
|
157
|
+
that.vertexCount++;
|
|
158
|
+
};`
|
|
159
|
+
)(this);
|
|
169
160
|
} else {
|
|
170
161
|
this.pushAll = () => {
|
|
171
162
|
for (let i = 0; i < this.pushers.length; i++) {
|
|
@@ -183,9 +174,32 @@ export default class ArrayBuilder {
|
|
|
183
174
|
* @param {object} datum
|
|
184
175
|
*/
|
|
185
176
|
updateFromDatum(datum) {
|
|
186
|
-
|
|
187
|
-
this.dataUpdaters
|
|
177
|
+
if (this.size > UNROLL_LIMIT) {
|
|
178
|
+
const preps = this.dataUpdaters
|
|
179
|
+
.map((_v, i) => `const u${i} = that.dataUpdaters[${i}];`)
|
|
180
|
+
.join("\n");
|
|
181
|
+
const updates = this.dataUpdaters
|
|
182
|
+
.map((_v, i) => ` u${i}(datum);`)
|
|
183
|
+
.join("\n");
|
|
184
|
+
|
|
185
|
+
// eslint-disable-next-line no-new-func
|
|
186
|
+
this.updateFromDatum = new Function(
|
|
187
|
+
"that",
|
|
188
|
+
"datum",
|
|
189
|
+
`${preps}
|
|
190
|
+
return function unrolledUpdateFromDatum(datum) {
|
|
191
|
+
${updates}
|
|
192
|
+
};`
|
|
193
|
+
)(this);
|
|
194
|
+
} else {
|
|
195
|
+
this.updateFromDatum = (datum) => {
|
|
196
|
+
for (let i = 0; i < this.dataUpdaters.length; i++) {
|
|
197
|
+
this.dataUpdaters[i](datum);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
188
200
|
}
|
|
201
|
+
|
|
202
|
+
this.updateFromDatum(datum);
|
|
189
203
|
}
|
|
190
204
|
|
|
191
205
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;
|
|
1
|
+
{"version":3,"file":"dataToVertices.d.ts","sourceRoot":"","sources":["../../../src/gl/dataToVertices.js"],"names":[],"mappings":"AAeA;;;;;GAKG;AACH;IACI;;;OAGG;IAEH;;;;;;OAMG;IACH;;qBAJW,MAAM,EAAE;sBACR,MAAM;OAuEhB;IAnEG,gEAAwB;IAGxB;;MAKC;IAQD,0BAAoC;IAEpC,8BAAoD;IA6CpD,mBAAmB;IAEnB,yFAAyF;IACzF,UADW,IAAI,GAAG,EAAE,UAAU,CAAC,CACkB;IAGrD;;;;OAIG;IACH,mBAFW,GAAG,QAcb;IAED;;OAEG;IACH,oBAFW,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,QAM5B;IAED;;;OAGG;IACH,cAHW,GAAG,QACH,MAAM,EAAE,kCAYlB;IAED;;;;OAIG;IACH,sBAJW,OAAO,qBAAqB,EAAE,IAAI,OAClC,MAAM,OACN,MAAM,QA+DhB;IAED;;;;;OAKG;IACH,mBAFW,OAAO,qBAAqB,EAAE,KAAK,QAI7C;IA/DO;;;MAAyB;IAiEjC;QAEQ,uGAAuG;gBAA5F,OAAO,MAAM,EAAE;YAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAC,CAAC;QAEnG,8BAA8B;;QAE9B,8CAA8C;;;MAIrD;CACJ;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAQhB;CAkCJ;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;gCACR,MAAM;uBAEN,MAAM,EAAE;mBACR,MAAM;OAsBhB;IANG,uBAAgC;IAEhC,8BAA8D;IAE9D,6CAA+D;IAC/D,4CAA6D;CA2CpE;AAED;IACI;;;;;;OAMG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAQhB;CACJ;AAED;IACI;;;;;OAKG;IACH;;oBAHW,MAAM,EAAE;mBACR,MAAM;OAQhB;CAYJ;AAED;IACI;;;;;;;;;OASG;IACH;;oBANW,MAAM,EAAE;qBACR,OAAO,2BAA2B,EAAE,aAAa;oBACjD,OAAO,MAAM,EAAE,GAAG,CAAC;wBACnB,MAAM;sBACN,OAAO;OA4CjB;IA7BG,4DAA2B;IAC3B,2DAA0B;IAE1B,gCAA4B;IAQ5B,qCAAqC;IACrC,sBADmB,GAAG,KAAK,MAAM,CAMf;IAElB,oDAGC;IACD,qDAGC;IAED,8CAAiE;CA8IxE;;;;;;;;YAzkBS,MAAM;;;;WACN,MAAM;YACN,OAAO,yBAAyB,EAAE,MAAM;;yBAhBzB,mBAAmB"}
|
|
@@ -54,8 +54,6 @@ export class GeometryBuilder {
|
|
|
54
54
|
this.variableBuilder = new ArrayBuilder(numVertices);
|
|
55
55
|
|
|
56
56
|
// Create converters and updaters for all variable channels.
|
|
57
|
-
// TODO: If more than one channels use the same field with the same data type, convert the field only once.
|
|
58
|
-
|
|
59
57
|
for (const [channel, ce] of Object.entries(this.variableEncoders)) {
|
|
60
58
|
// Only add the first of the shared channels as all the rest are same
|
|
61
59
|
// For example, if both x and x2 are using the same field, only x is
|
|
@@ -164,7 +162,13 @@ export class GeometryBuilder {
|
|
|
164
162
|
this.xIndexer = undefined;
|
|
165
163
|
};
|
|
166
164
|
|
|
167
|
-
|
|
165
|
+
const channelDef = this.encoders.x?.channelDef;
|
|
166
|
+
if (
|
|
167
|
+
!("buildIndex" in channelDef) ||
|
|
168
|
+
!channelDef.buildIndex ||
|
|
169
|
+
!data.length ||
|
|
170
|
+
hi - lo < 0
|
|
171
|
+
) {
|
|
168
172
|
disable();
|
|
169
173
|
return;
|
|
170
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAmDA;;;;GAIG;AACH,2CAHW,OAAO,SACP,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,UAsC9C;AAED;;;;;;GAMG;AAEH,2CANW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU,+BACvC,OAAO,EAAE;;;;EAmRnB;AA+FD;;;GAGG;AACH,2CAFW,MAAM,WAIhB;AAOD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+
|
|
1
|
+
{"version":3,"file":"glslScaleGenerator.d.ts","sourceRoot":"","sources":["../../../src/gl/glslScaleGenerator.js"],"names":[],"mappings":";AAmDA;;;;GAIG;AACH,2CAHW,OAAO,SACP,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,UAsC9C;AAED;;;;;;GAMG;AAEH,2CANW,OAAO,SACP,GAAG,cACH,OAAO,oBAAoB,EAAE,UAAU,+BACvC,OAAO,EAAE;;;;EAmRnB;AA+FD;;;GAGG;AACH,2CAFW,MAAM,WAIhB;AAOD;;;GAGG;AACH,sCAHW,MAAM,QACN,MAAM,EAAE,YAYlB;AAYD;;GAEG;AACH,qDAFW,MAAM,EAAE,YAIlB;AAED;;GAEG;AAEH;;;;;GAKG;AACH,+CAFW,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,qBAAqB,EAAE,OAAO,CAAC,CAAC,+DA4BtG;AAED;;GAEG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,GAAG,OAAO,oBAAoB,EAAE,OAAO,EAAE,UAIvF;AAzhBD,uCAAwC;AACxC,uCAAwC;AACxC,oCAAqC;AACrC,6CAA8C;AAC9C,kDAAmD;AACnD,oDAAqD;sBAMxC,OAAO,oBAAoB,EAAE,OAAO;;;;8BAsXpC,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE;;;;uBA8GhD,CAAC,MAAM,EAAE,OAAO,CAAC;0BAjfJ,WAAW"}
|
|
@@ -539,7 +539,9 @@ export function dedupeEncodingFields(encoders) {
|
|
|
539
539
|
const key = [
|
|
540
540
|
field,
|
|
541
541
|
encoder.scale
|
|
542
|
-
? isContinuous(encoder.scale.type)
|
|
542
|
+
? (isContinuous(encoder.scale.type) ||
|
|
543
|
+
isDiscretizing(encoder.scale.type)) ??
|
|
544
|
+
false
|
|
543
545
|
: false,
|
|
544
546
|
];
|
|
545
547
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../src/marks/mark.js"],"names":[],"mappings":"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"}
|
package/dist/src/marks/mark.js
CHANGED
|
@@ -258,6 +258,12 @@ export default class Mark {
|
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
260
|
|
|
261
|
+
if (encoding.x) {
|
|
262
|
+
// Building the x index is rarely necessary, but it's safer to build
|
|
263
|
+
// it by default.
|
|
264
|
+
encoding.x.buildIndex ??= true;
|
|
265
|
+
}
|
|
266
|
+
|
|
261
267
|
return encoding;
|
|
262
268
|
});
|
|
263
269
|
}
|
|
@@ -379,10 +385,9 @@ export default class Mark {
|
|
|
379
385
|
// Channels that share the same quantitative field
|
|
380
386
|
// TODO: It should be ok to share a categorical field if the channels
|
|
381
387
|
// share the same scale, e.g., primary and secondary positional channels
|
|
382
|
-
const sharedChannels =
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
: [channel];
|
|
388
|
+
const sharedChannels = isFieldDef(channelDef)
|
|
389
|
+
? dedupedEncodingFields.get([channelDef.field, true])
|
|
390
|
+
: [channel];
|
|
386
391
|
|
|
387
392
|
const generated = generateScaleGlsl(
|
|
388
393
|
channel,
|
|
@@ -314,13 +314,26 @@ export type ChannelDef<F extends Field = string> =
|
|
|
314
314
|
// TODO: Does this make sense?
|
|
315
315
|
export type ChannelDefWithScale = ScaleMixins & TypeMixins<Type>;
|
|
316
316
|
|
|
317
|
+
export interface XIndexDef {
|
|
318
|
+
/**
|
|
319
|
+
* Builds and index for efficient rendering of subsets of the data. This
|
|
320
|
+
* setting is useful when rendering large amounts of data and often
|
|
321
|
+
* only a small subset of the data is visible. An example of such a
|
|
322
|
+
* situation is a scatter plot spanning the whole genome.
|
|
323
|
+
*
|
|
324
|
+
* This setting implicitly sorts the data by the field assigned
|
|
325
|
+
* on the `x` channel.
|
|
326
|
+
*/
|
|
327
|
+
buildIndex?: boolean;
|
|
328
|
+
}
|
|
329
|
+
|
|
317
330
|
export interface Encoding<F extends Field = string> {
|
|
318
331
|
/**
|
|
319
332
|
* X coordinates of the marks.
|
|
320
333
|
*
|
|
321
334
|
* The `value` of this channel can be a number between zero and one.
|
|
322
335
|
*/
|
|
323
|
-
x?: PositionDef<F
|
|
336
|
+
x?: PositionDef<F> & XIndexDef;
|
|
324
337
|
|
|
325
338
|
/**
|
|
326
339
|
* Y coordinates of the marks.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowBuilder.d.ts","sourceRoot":"","sources":["../../../src/view/flowBuilder.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowBuilder.d.ts","sourceRoot":"","sources":["../../../src/view/flowBuilder.js"],"names":[],"mappings":"AAwBA;;;;GAIG;AACH,8JAkKC;AAED;;;;;;GAMG;AACH;;;IAgGc;;;OAGG;;EAYhB;AAgCD;;;;;;GAMG;AACH;;;0BAqB0B,QAAQ,SAAS,OAAO,qBAAqB,EAAE,KAAK,CAAC,CAAC;EAkB/E;qBA/XoB,qBAAqB;sBANpB,sBAAsB"}
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
isFieldDef,
|
|
14
14
|
isPositionalChannel,
|
|
15
15
|
getPrimaryChannel,
|
|
16
|
+
isExprDef,
|
|
16
17
|
} from "../encoder/encoder.js";
|
|
17
18
|
import LinearizeGenomicCoordinate from "../data/transforms/linearizeGenomicCoordinate.js";
|
|
18
19
|
import { group } from "d3-array";
|
|
@@ -311,20 +312,26 @@ export function linearizeLocusAccess(view) {
|
|
|
311
312
|
}
|
|
312
313
|
|
|
313
314
|
/**
|
|
314
|
-
* @param {import("./
|
|
315
|
+
* @param {import("./unitView.js").default} view
|
|
315
316
|
* @param {import("../spec/channel.js").Encoding} [encoding]
|
|
316
317
|
* @returns {import("../spec/transform.js").CompareParams}
|
|
317
318
|
*/
|
|
318
319
|
function getCompareParamsForView(view, encoding) {
|
|
319
|
-
// TODO: Should sort by min(x, x2).
|
|
320
320
|
const e = { ...view.getEncoding(), ...encoding }.x;
|
|
321
321
|
if (isChannelDefWithScale(e)) {
|
|
322
322
|
if (view.getScaleResolution("x")?.isZoomable()) {
|
|
323
323
|
if (isFieldDef(e)) {
|
|
324
|
-
|
|
324
|
+
// TODO: Don't sort if the data is already sorted.
|
|
325
|
+
// The sort status should be tracked in the data flow.
|
|
326
|
+
// For instance, genomic data is typically already sorted
|
|
327
|
+
// by position within a chromosome (but not necessarily
|
|
328
|
+
// across chromosomes).
|
|
329
|
+
return "buildIndex" in e && e.buildIndex
|
|
330
|
+
? { field: e.field }
|
|
331
|
+
: null;
|
|
325
332
|
} else if (isDatumDef(e)) {
|
|
326
333
|
// Nop
|
|
327
|
-
} else {
|
|
334
|
+
} else if (isExprDef(e)) {
|
|
328
335
|
// TODO: Support expr by inserting a Formula transform
|
|
329
336
|
throw new Error(
|
|
330
337
|
"A zoomable x channel must be mapped to a field."
|
|
@@ -54,7 +54,7 @@ export default class UnitView extends ContainerView {
|
|
|
54
54
|
/**
|
|
55
55
|
* @param {Channel} channel A primary channel
|
|
56
56
|
*/
|
|
57
|
-
_validateDomainQuery(channel: import("../spec/channel.js").Channel): import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type> | import("../spec/channel.js").MarkPropDatumDef<import("../spec/channel.js").Type> | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").MarkPropDatumDef<import("../spec/channel.js").TypeForShape> | import("../spec/channel.js").MarkPropFieldDef<string, import("../spec/channel.js").Type> | import("../spec/channel.js").PositionFieldDef<string> | import("../spec/channel.js").MarkPropFieldDef<string, import("../spec/channel.js").TypeForShape>;
|
|
57
|
+
_validateDomainQuery(channel: import("../spec/channel.js").Channel): import("../spec/channel.js").MarkPropExprDef<import("../spec/channel.js").Type> | import("../spec/channel.js").MarkPropDatumDef<import("../spec/channel.js").Type> | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").PositionDatumDef | (import("../spec/channel.js").ChromPosDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").TypeMixins<"locus"> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").XIndexDef) | (import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").DatumDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | import("../spec/channel.js").MarkPropDatumDef<import("../spec/channel.js").TypeForShape> | import("../spec/channel.js").MarkPropFieldDef<string, import("../spec/channel.js").Type> | import("../spec/channel.js").PositionFieldDef<string> | (import("../spec/channel.js").FieldDefBase<string> & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | import("../spec/channel.js").MarkPropFieldDef<string, import("../spec/channel.js").TypeForShape>;
|
|
58
58
|
/**
|
|
59
59
|
* Returns the domain of the specified channel of this domain/mark.
|
|
60
60
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAkBzC;IAbG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAUlC;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAyEC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAED;;OAEG;IACH,
|
|
1
|
+
{"version":3,"file":"unitView.d.ts","sourceRoot":"","sources":["../../../src/view/unitView.js"],"names":[],"mappings":"AAqBA;;;;GAIG;AACH;QAHkB,MAAM,GAAE,cAAc,kBAAkB,EAAE,OAAO;EASjE;AAEF;IACI;;;;;;;OAOG;IACH;;;;;;;;OAQG;IACH,kBAPW,OAAO,iBAAiB,EAAE,QAAQ,WAClC,OAAO,yBAAyB,EAAE,OAAO,gBACzC,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,WAAW,EAAE,OAAO,QAC3B,MAAM,YACN,OAAO,WAAW,EAAE,WAAW,EAkBzC;IAbG,yCAAgB;IAIZ,iDAAiD;IACjD,MADW,OAAO,kBAAkB,EAAE,OAAO,CACnB;IAUlC;;;;OAIG;IACH,gBAJW,OAAO,4CAA4C,EAAE,OAAO,UAC5D,OAAO,uBAAuB,EAAE,OAAO,YACvC,OAAO,uBAAuB,EAAE,gBAAgB,QAY1D;IAED,kDAIC;IAED;;;;;OAKG;IACH,iEAyEC;IAED;;;OAGG;IACH,mGASC;IAkBD;;OAEG;IACH,uDAEC;IAED;;OAEG;IACH,6/CAcC;IAED;;;;;OAKG;IACH,6BAHW,OAAO,oBAAoB,EAAE,gBAAgB,iDAkBvD;IAED;;;;;;;;;;;;OAYG;IACH,gHA2CC;IAED,uBAQC;IAgBD;;;;OAIG;IACH,8BAJW,MAAM,+DAEJ,OAAO,iBAAiB,EAAE,kBAAkB,CAKxD;CACJ;0BAnVyB,oBAAoB"}
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.
|
|
10
|
+
"version": "0.43.0",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -65,5 +65,5 @@
|
|
|
65
65
|
"vega-scale": "^7.1.1",
|
|
66
66
|
"vega-util": "^1.16.0"
|
|
67
67
|
},
|
|
68
|
-
"gitHead": "
|
|
68
|
+
"gitHead": "5df2d5459b3ece0218135411e6e7d8d20639f587"
|
|
69
69
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axisGenomeSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/axisGenomeSource.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,cAAc,QAC9C,OAAO,uBAAuB,EAAE,OAAO,EAIjD;CAKJ;iCAlBgC,2BAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"axisTickSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/axisTickSource.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IAMI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,aAAa,QAC7C,OAAO,uBAAuB,EAAE,OAAO,EAYjD;IAnBD;;OAEG;IACH,OAFU,OAAO,0BAA0B,EAAE,MAAM,EAAE,CAE1C;IAeP,sDAAoB;IAGxB,iCAkCC;CACJ;iCA9DgC,2BAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bamSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bamSource.js"],"names":[],"mappings":"AAGA;IAeI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,OAAO,QACvC,OAAO,uBAAuB,EAAE,OAAO,EAmDjD;IAhED;;;;;;;;OAQG;IACH,sBAFgB,MAAM,KAAK,MAAM,CAEH;IAkB1B,gDAAgC;IAQhC,iCA4BE;;CAmCT;qCAxGoC,+BAA+B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bigBedSource.js"],"names":[],"mappings":"AAGA;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EA4CjD;IApDD,0CAA0C;IAC1C,QADW,OAAO,WAAW,EAAE,OAAO,CAC/B;IAEP,yCAAyC;IACzC,KADW,OAAO,WAAW,EAAE,MAAM,CACjC;IAkBA,mDAAgC;IAQhC,iCAqBE;CA4BT;qCAlFoC,+BAA+B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bigWigSource.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,UAAU,QAC1C,OAAO,uBAAuB,EAAE,OAAO,EAiDjD;IAnCG,mDAAgC;IAQhC,iCA0BE;IA+BN;;;OAGG;IAEH,uBAJW,MAAM,EAAE,kBACR,MAAM,iBA0BhB;;CACJ;qCA1HoC,+BAA+B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gff3Source.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/gff3Source.js"],"names":[],"mappings":"AAEA;;GAEG;AACH;IAII;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EASjD;IAED;;OAEG;IACH,sBAFW,MAAM,EAAE,OAUlB;;CACJ;wBAlCuB,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"indexedFastaSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/indexedFastaSource.js"],"names":[],"mappings":"AAGA;IACI;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,gBAAgB,QAChD,OAAO,uBAAuB,EAAE,OAAO,EA+CjD;IAjCG,yDAAgC;IAQhC,iCAwBE;IATM,iDAKE;CA6BjB;qCA5EoC,+BAA+B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"singleAxisLazySource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/singleAxisLazySource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAOI;;;OAGG;IACH,kBAHW,OAAO,uBAAuB,EAAE,OAAO,WACvC,OAAO,0BAA0B,EAAE,wBAAwB,EAiDrE;IAzDD;;;OAGG;IACH,4CAAuC;IASnC,8CAAgB;IAYhB,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,iBAK9D;IAED;;;;;OAKG;IACH,mCAHW,OAAO,QAKjB;IAED;;;;;OAKG;IACH,gCAGC;IAQD;;;;;OAKG;IACH,8BAHW,OAAO,mBAAmB,EAAE,KAAK,EAAE,EAAE,QAkB/C;CACJ;uBAxJsB,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"singleAxisWindowedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/singleAxisWindowedSource.js"],"names":[],"mappings":"AAIA;;GAEG;AACH;IAQI;;;OAGG;IACH,kBAHU;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAC,CAGxB;IAEP;;;OAGG;IACH,0CAHW,OAAO,uBAAuB,EAAE,aAAa,QAmBvD;IAED;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAiBlB;IAED;;;;;OAKG;IACH,iCAHW,MAAM,EAAE,iBAKlB;IAED;;;;;;;;;OASG;IACH,yCANW,MAAM,EAAE,4BACU,OAAO,mCAAmC,EAAE,0BAA0B,UAAU,WAAW,+BAqCvH;IAED;;;;;;;;OAQG;IACH,qCAJW,MAAM,EAAE,cACR,MAAM,YAWhB;IAED;;;;OAIG;IACH,+CAHW,MAAM,EAAE,WAUlB;;CACJ;iCAvJgC,2BAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tabixSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/tabixSource.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH;IAII;;;OAGG;IACH,oBAHW,OAAO,uBAAuB,EAAE,SAAS,QACzC,OAAO,uBAAuB,EAAE,OAAO,EA8CjD;IAhCG,kDAAgC;IAQhC,iCAuBE;IAoCN;;;;;OAKG;IACH,gCAHW,MAAM,EAAE,GACN,CAAC,EAAE,CAKf;;CACJ;qCAvGoC,+BAA+B"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|