@genome-spy/core 0.53.1 → 0.55.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/{_commonjsHelpers-BIiJCwQW.js → _commonjsHelpers-DSebQMb9.js} +2 -4
- package/dist/bundle/{index-B5cesONJ.js → index-B6haPltu.js} +33 -65
- package/dist/bundle/{index-uO0O4Uv-.js → index-BhtH2nrr.js} +3 -5
- package/dist/bundle/{index-_tI-fMQF.js → index-BpoXW6_f.js} +5 -6
- package/dist/bundle/{index-BywMLhhd.js → index-COovE1Oo.js} +75 -105
- package/dist/bundle/{index-BJLu48Hz.js → index-CjesiOz_.js} +2 -2
- package/dist/bundle/{index-oqw_s02W.js → index-HGQZ77IK.js} +2 -2
- package/dist/bundle/{index-DAJ8JQLE.js → index-WACuLhO6.js} +64 -119
- package/dist/bundle/{index-e0oKgZbZ.js → index-_ftu0t0z.js} +2 -3
- package/dist/bundle/{index-CSayoXbw.js → index-nCZhu2o-.js} +3 -3
- package/dist/bundle/index.es.js +4363 -4313
- package/dist/bundle/index.js +105 -99
- package/dist/bundle/{long-D4tVjLLz.js → long-BXK3UEks.js} +9 -16
- package/dist/bundle/{remoteFile-BkTxwFub.js → remoteFile-DuIsnepi.js} +1 -1
- package/dist/schema.json +36 -2
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +4 -0
- package/dist/src/data/flowNode.d.ts +14 -5
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +30 -7
- package/dist/src/data/sources/dataSource.d.ts +1 -2
- package/dist/src/data/sources/dataSource.d.ts.map +1 -1
- package/dist/src/data/sources/dataSource.js +0 -1
- package/dist/src/data/sources/inlineSource.d.ts +4 -0
- package/dist/src/data/sources/inlineSource.d.ts.map +1 -1
- package/dist/src/data/sources/inlineSource.js +18 -0
- package/dist/src/data/sources/lazy/axisGenomeSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/axisGenomeSource.js +4 -0
- package/dist/src/data/sources/lazy/axisTickSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/axisTickSource.js +4 -0
- package/dist/src/data/sources/lazy/bamSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bamSource.js +4 -0
- package/dist/src/data/sources/lazy/bigBedSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigBedSource.js +4 -0
- package/dist/src/data/sources/lazy/bigWigSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/bigWigSource.js +4 -0
- package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/gff3Source.js +4 -0
- package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/indexedFastaSource.js +4 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts +2 -0
- package/dist/src/data/sources/lazy/singleAxisLazySource.d.ts.map +1 -1
- package/dist/src/data/sources/lazy/singleAxisLazySource.js +2 -0
- package/dist/src/data/sources/namedSource.d.ts.map +1 -1
- package/dist/src/data/sources/namedSource.js +4 -0
- package/dist/src/data/sources/sequenceSource.d.ts.map +1 -1
- package/dist/src/data/sources/sequenceSource.js +4 -0
- package/dist/src/data/sources/urlSource.d.ts.map +1 -1
- package/dist/src/data/sources/urlSource.js +4 -0
- package/dist/src/data/transforms/aggregate.d.ts +12 -9
- package/dist/src/data/transforms/aggregate.d.ts.map +1 -1
- package/dist/src/data/transforms/aggregate.js +67 -24
- package/dist/src/data/transforms/aggregate.test.d.ts +2 -0
- package/dist/src/data/transforms/aggregate.test.d.ts.map +1 -0
- package/dist/src/data/transforms/aggregate.test.js +134 -0
- package/dist/src/data/transforms/aggregateOps.d.ts +6 -0
- package/dist/src/data/transforms/aggregateOps.d.ts.map +1 -0
- package/dist/src/data/transforms/aggregateOps.js +17 -0
- package/dist/src/data/transforms/clone.d.ts +2 -2
- package/dist/src/data/transforms/clone.d.ts.map +1 -1
- package/dist/src/data/transforms/clone.js +4 -3
- package/dist/src/data/transforms/coverage.d.ts +2 -2
- package/dist/src/data/transforms/coverage.d.ts.map +1 -1
- package/dist/src/data/transforms/coverage.js +4 -3
- 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 -3
- package/dist/src/data/transforms/filterScoredLabels.d.ts +2 -2
- package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -1
- package/dist/src/data/transforms/filterScoredLabels.js +4 -3
- package/dist/src/data/transforms/flatten.d.ts +3 -2
- package/dist/src/data/transforms/flatten.d.ts.map +1 -1
- package/dist/src/data/transforms/flatten.js +6 -3
- package/dist/src/data/transforms/flattenCompressedExons.d.ts +2 -2
- package/dist/src/data/transforms/flattenCompressedExons.d.ts.map +1 -1
- package/dist/src/data/transforms/flattenCompressedExons.js +4 -3
- package/dist/src/data/transforms/flattenDelimited.d.ts +2 -2
- package/dist/src/data/transforms/flattenDelimited.d.ts.map +1 -1
- package/dist/src/data/transforms/flattenDelimited.js +4 -3
- package/dist/src/data/transforms/flattenSequence.d.ts +3 -2
- package/dist/src/data/transforms/flattenSequence.d.ts.map +1 -1
- package/dist/src/data/transforms/flattenSequence.js +6 -3
- 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 +4 -3
- package/dist/src/data/transforms/identifier.d.ts +2 -2
- package/dist/src/data/transforms/identifier.d.ts.map +1 -1
- package/dist/src/data/transforms/identifier.js +4 -3
- package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts +3 -2
- package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -1
- package/dist/src/data/transforms/linearizeGenomicCoordinate.js +11 -4
- package/dist/src/data/transforms/measureText.d.ts +5 -4
- package/dist/src/data/transforms/measureText.d.ts.map +1 -1
- package/dist/src/data/transforms/measureText.js +11 -8
- package/dist/src/data/transforms/pileup.d.ts +2 -2
- package/dist/src/data/transforms/pileup.d.ts.map +1 -1
- package/dist/src/data/transforms/pileup.js +4 -3
- package/dist/src/data/transforms/project.d.ts +3 -2
- package/dist/src/data/transforms/project.d.ts.map +1 -1
- package/dist/src/data/transforms/project.js +6 -3
- package/dist/src/data/transforms/regexExtract.d.ts +3 -2
- package/dist/src/data/transforms/regexExtract.d.ts.map +1 -1
- package/dist/src/data/transforms/regexExtract.js +6 -3
- package/dist/src/data/transforms/regexFold.d.ts +3 -2
- package/dist/src/data/transforms/regexFold.d.ts.map +1 -1
- package/dist/src/data/transforms/regexFold.js +6 -3
- package/dist/src/data/transforms/sample.d.ts +3 -2
- package/dist/src/data/transforms/sample.d.ts.map +1 -1
- package/dist/src/data/transforms/sample.js +5 -3
- package/dist/src/data/transforms/stack.d.ts +2 -2
- package/dist/src/data/transforms/stack.d.ts.map +1 -1
- package/dist/src/data/transforms/stack.js +4 -3
- package/dist/src/data/transforms/transform.d.ts +10 -0
- package/dist/src/data/transforms/transform.d.ts.map +1 -0
- package/dist/src/data/transforms/transform.js +22 -0
- package/dist/src/spec/title.d.ts +1 -1
- package/dist/src/spec/transform.d.ts +32 -2
- package/dist/src/view/axisView.js +2 -2
- package/dist/src/view/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView.js +7 -3
- package/package.json +2 -2
|
@@ -1,32 +1,65 @@
|
|
|
1
1
|
import { group as d3group } from "d3-array";
|
|
2
|
-
import
|
|
2
|
+
import { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
3
3
|
import { field } from "../../utils/field.js";
|
|
4
4
|
import iterateNestedMaps from "../../utils/iterateNestedMaps.js";
|
|
5
|
+
import Transform from "./transform.js";
|
|
6
|
+
import AGGREGATE_OPS from "./aggregateOps.js";
|
|
5
7
|
|
|
6
|
-
|
|
7
|
-
* A minimal aggregate transform that just counts grouped (by a single field) data items.
|
|
8
|
-
* Work in progress.
|
|
9
|
-
*
|
|
10
|
-
* Eventually this will implement the most of Vega's aggregate transform:
|
|
11
|
-
* https://vega.github.io/vega/docs/transforms/aggregate/
|
|
12
|
-
*/
|
|
13
|
-
export default class AggregateTransform extends FlowNode {
|
|
8
|
+
export default class AggregateTransform extends Transform {
|
|
14
9
|
get behavior() {
|
|
15
10
|
return BEHAVIOR_CLONES;
|
|
16
11
|
}
|
|
17
12
|
|
|
18
13
|
/**
|
|
19
14
|
* @param {import("../../spec/transform.js").AggregateParams} params
|
|
15
|
+
*
|
|
16
|
+
* @typedef {import("../flowNode.js").Datum} Datum
|
|
20
17
|
*/
|
|
21
18
|
constructor(params) {
|
|
22
|
-
super();
|
|
19
|
+
super(params);
|
|
23
20
|
this.params = params;
|
|
24
21
|
|
|
25
22
|
/** @type {any[]} */
|
|
26
23
|
this.buffer = [];
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @type {((arr: Datum[]) => number)[]}
|
|
27
|
+
*/
|
|
28
|
+
this.ops = [];
|
|
29
|
+
/**
|
|
30
|
+
* @type {string[]}
|
|
31
|
+
*/
|
|
32
|
+
this.as = [];
|
|
33
|
+
|
|
34
|
+
if (params.fields) {
|
|
35
|
+
if (params.fields.length != params.ops.length) {
|
|
36
|
+
throw new Error("Fields and ops must have the same length!");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (params.as && params.as.length != params.ops.length) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
'If "as" is defined, "fields" and "as" must have the same length!'
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
params.fields.forEach((fieldName, i) => {
|
|
46
|
+
const accessor = field(fieldName);
|
|
47
|
+
const op = AGGREGATE_OPS[params.ops[i]];
|
|
48
|
+
this.ops.push((arr) => op(arr, accessor));
|
|
49
|
+
this.as.push(
|
|
50
|
+
params.as
|
|
51
|
+
? params.as[i]
|
|
52
|
+
: `${params.ops[i]}_${params.fields[i]}`
|
|
53
|
+
);
|
|
54
|
+
});
|
|
55
|
+
} else {
|
|
56
|
+
this.ops.push((arr) => AGGREGATE_OPS.count(arr));
|
|
57
|
+
this.as.push("count");
|
|
58
|
+
}
|
|
27
59
|
}
|
|
28
60
|
|
|
29
61
|
reset() {
|
|
62
|
+
super.reset();
|
|
30
63
|
this.buffer = [];
|
|
31
64
|
}
|
|
32
65
|
|
|
@@ -41,26 +74,36 @@ export default class AggregateTransform extends FlowNode {
|
|
|
41
74
|
complete() {
|
|
42
75
|
const params = this.params;
|
|
43
76
|
|
|
44
|
-
const groupby = params
|
|
77
|
+
const groupby = params?.groupby;
|
|
78
|
+
|
|
79
|
+
if (groupby?.length > 0) {
|
|
80
|
+
const groupFieldAccessors = groupby.map((f) => field(f));
|
|
45
81
|
|
|
46
|
-
|
|
82
|
+
// There's something strange in d3-array's typings
|
|
83
|
+
const groups = /** @type {Map<any, any>} */ /** @type {any} */ (
|
|
84
|
+
d3group(this.buffer, ...groupFieldAccessors)
|
|
85
|
+
);
|
|
47
86
|
|
|
48
|
-
|
|
87
|
+
for (const [group, data] of iterateNestedMaps(groups)) {
|
|
88
|
+
/** @type {any} */
|
|
89
|
+
const datum = {};
|
|
49
90
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
);
|
|
91
|
+
for (let i = 0; i < groupby.length; i++) {
|
|
92
|
+
datum[groupby[i]] = group[i];
|
|
93
|
+
}
|
|
54
94
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
count: data.length,
|
|
59
|
-
};
|
|
95
|
+
this.ops.forEach((op, i) => {
|
|
96
|
+
datum[this.as[i]] = op(data);
|
|
97
|
+
});
|
|
60
98
|
|
|
61
|
-
|
|
62
|
-
datum[groupby[i]] = group[i];
|
|
99
|
+
this._propagate(datum);
|
|
63
100
|
}
|
|
101
|
+
} else {
|
|
102
|
+
/** @type {Datum} */
|
|
103
|
+
const datum = {};
|
|
104
|
+
this.ops.forEach((op, i) => {
|
|
105
|
+
datum[this.as[i]] = op(this.buffer);
|
|
106
|
+
});
|
|
64
107
|
|
|
65
108
|
this._propagate(datum);
|
|
66
109
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregate.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/aggregate.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import { processData } from "../flowTestUtils.js";
|
|
3
|
+
import AggregateTransform from "./aggregate.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @param {import("../../spec/transform.js").AggregateParams} params
|
|
7
|
+
* @param {any[]} data
|
|
8
|
+
*/
|
|
9
|
+
function transform(params, data) {
|
|
10
|
+
return processData(new AggregateTransform(params), data);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
describe("Aggregate transform", () => {
|
|
14
|
+
test("Default to count when no data fields or group-by fields are specified", () => {
|
|
15
|
+
const input = [
|
|
16
|
+
{ name: "alpha", data: 123 },
|
|
17
|
+
{ name: "beta", data: 456 },
|
|
18
|
+
{ name: "beta", data: 789 },
|
|
19
|
+
];
|
|
20
|
+
|
|
21
|
+
expect(transform({ type: "aggregate" }, input)).toEqual([{ count: 3 }]);
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
test("Default to count when no data fields fields are specified", () => {
|
|
25
|
+
const input = [
|
|
26
|
+
{ name: "alpha", data: 123 },
|
|
27
|
+
{ name: "beta", data: 456 },
|
|
28
|
+
{ name: "beta", data: 789 },
|
|
29
|
+
];
|
|
30
|
+
|
|
31
|
+
expect(
|
|
32
|
+
transform({ type: "aggregate", groupby: ["name"] }, input)
|
|
33
|
+
).toEqual([
|
|
34
|
+
{ name: "alpha", count: 1 },
|
|
35
|
+
{ name: "beta", count: 2 },
|
|
36
|
+
]);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test("Compute count, sum, min, max, and mean for groups. Use default output field names.", () => {
|
|
40
|
+
const input = [
|
|
41
|
+
{ name: "alpha", data: 123 },
|
|
42
|
+
{ name: "beta", data: 456 },
|
|
43
|
+
{ name: "beta", data: 789 },
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
expect(
|
|
47
|
+
transform(
|
|
48
|
+
{
|
|
49
|
+
type: "aggregate",
|
|
50
|
+
groupby: ["name"],
|
|
51
|
+
fields: ["data", "data", "data", "data", "data"],
|
|
52
|
+
ops: ["count", "sum", "min", "max", "mean"],
|
|
53
|
+
},
|
|
54
|
+
input
|
|
55
|
+
)
|
|
56
|
+
).toEqual([
|
|
57
|
+
{
|
|
58
|
+
name: "alpha",
|
|
59
|
+
count_data: 1,
|
|
60
|
+
sum_data: 123,
|
|
61
|
+
min_data: 123,
|
|
62
|
+
max_data: 123,
|
|
63
|
+
mean_data: 123,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: "beta",
|
|
67
|
+
count_data: 2,
|
|
68
|
+
sum_data: 1245,
|
|
69
|
+
min_data: 456,
|
|
70
|
+
max_data: 789,
|
|
71
|
+
mean_data: 622.5,
|
|
72
|
+
},
|
|
73
|
+
]);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
test("Allow custom output field names", () => {
|
|
77
|
+
const input = [
|
|
78
|
+
{ name: "alpha", data: 123 },
|
|
79
|
+
{ name: "beta", data: 456 },
|
|
80
|
+
{ name: "beta", data: 789 },
|
|
81
|
+
];
|
|
82
|
+
|
|
83
|
+
expect(
|
|
84
|
+
transform(
|
|
85
|
+
{
|
|
86
|
+
type: "aggregate",
|
|
87
|
+
fields: ["data", "data", "data", "data", "data"],
|
|
88
|
+
ops: ["count", "sum", "min", "max", "mean"],
|
|
89
|
+
as: ["count", "total", "min", "max", "average"],
|
|
90
|
+
},
|
|
91
|
+
input
|
|
92
|
+
)
|
|
93
|
+
).toEqual([
|
|
94
|
+
{
|
|
95
|
+
count: 3,
|
|
96
|
+
total: 1368,
|
|
97
|
+
min: 123,
|
|
98
|
+
max: 789,
|
|
99
|
+
average: 456,
|
|
100
|
+
},
|
|
101
|
+
]);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
test("Throw if the length of fields and ops does not match", () => {
|
|
105
|
+
const input = [{ name: "beta", data: 789 }];
|
|
106
|
+
|
|
107
|
+
expect(() =>
|
|
108
|
+
transform(
|
|
109
|
+
{
|
|
110
|
+
type: "aggregate",
|
|
111
|
+
fields: ["data", "data", "data", "data"],
|
|
112
|
+
ops: ["count", "sum", "min", "max", "mean"],
|
|
113
|
+
},
|
|
114
|
+
input
|
|
115
|
+
)
|
|
116
|
+
).toThrow();
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
test("Throw if the length of fields and as does not match", () => {
|
|
120
|
+
const input = [{ name: "beta", data: 789 }];
|
|
121
|
+
|
|
122
|
+
expect(() =>
|
|
123
|
+
transform(
|
|
124
|
+
{
|
|
125
|
+
type: "aggregate",
|
|
126
|
+
fields: ["data"],
|
|
127
|
+
ops: ["count"],
|
|
128
|
+
as: ["count", "total"],
|
|
129
|
+
},
|
|
130
|
+
input
|
|
131
|
+
)
|
|
132
|
+
).toThrow();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export default AGGREGATE_OPS;
|
|
2
|
+
/**
|
|
3
|
+
* @type {Record<import("../../spec/transform.js").AggregateOp, (arr: any[], accessor?: (datum: any) => number) => number>}
|
|
4
|
+
*/
|
|
5
|
+
declare const AGGREGATE_OPS: Record<import("../../spec/transform.js").AggregateOp, (arr: any[], accessor?: (datum: any) => number) => number>;
|
|
6
|
+
//# sourceMappingURL=aggregateOps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aggregateOps.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/aggregateOps.js"],"names":[],"mappings":";AAEA;;GAEG;AACH,6BAFU,OAAO,OAAO,yBAAyB,EAAE,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,MAAM,KAAK,MAAM,CAAC,CAWxH"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { count, max, mean, median, min, sum, variance } from "d3-array";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @type {Record<import("../../spec/transform.js").AggregateOp, (arr: any[], accessor?: (datum: any) => number) => number>}
|
|
5
|
+
*/
|
|
6
|
+
const AGGREGATE_OPS = {
|
|
7
|
+
count: (arr) => arr.length,
|
|
8
|
+
valid: count,
|
|
9
|
+
sum,
|
|
10
|
+
min,
|
|
11
|
+
max,
|
|
12
|
+
mean,
|
|
13
|
+
median,
|
|
14
|
+
variance,
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default AGGREGATE_OPS;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Clones the data objects that pass through.
|
|
3
3
|
*/
|
|
4
|
-
export default class CloneTransform extends
|
|
4
|
+
export default class CloneTransform extends Transform {
|
|
5
5
|
constructor();
|
|
6
6
|
/**
|
|
7
7
|
* Signals that a new batch of data will be propagated.
|
|
@@ -11,5 +11,5 @@ export default class CloneTransform extends FlowNode {
|
|
|
11
11
|
beginBatch: (flowBatch?: import("../../types/flowBatch.js").FlowBatch) => void;
|
|
12
12
|
#private;
|
|
13
13
|
}
|
|
14
|
-
import
|
|
14
|
+
import Transform from "./transform.js";
|
|
15
15
|
//# sourceMappingURL=clone.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/clone.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/clone.js"],"names":[],"mappings":"AAKA;;GAEG;AACH;IAWI,cAmCC;IAXG;;;;OAIG;IACH,yBAFW,OAAO,0BAA0B,EAAE,SAAS,UAOtD;;CAER;sBApDqB,gBAAgB"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { shallowArrayEquals } from "../../utils/arrayUtils.js";
|
|
2
2
|
import createCloner, { getAllProperties } from "../../utils/cloner.js";
|
|
3
|
-
import
|
|
3
|
+
import { BEHAVIOR_CLONES, isFileBatch } from "../flowNode.js";
|
|
4
|
+
import Transform from "./transform.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Clones the data objects that pass through.
|
|
7
8
|
*/
|
|
8
|
-
export default class CloneTransform extends
|
|
9
|
+
export default class CloneTransform extends Transform {
|
|
9
10
|
get behavior() {
|
|
10
11
|
return BEHAVIOR_CLONES;
|
|
11
12
|
}
|
|
@@ -17,7 +18,7 @@ export default class CloneTransform extends FlowNode {
|
|
|
17
18
|
#clone = (datum) => datum;
|
|
18
19
|
|
|
19
20
|
constructor() {
|
|
20
|
-
super();
|
|
21
|
+
super({ type: "clone" });
|
|
21
22
|
|
|
22
23
|
/** @param {import("../flowNode.js").Datum} datum */
|
|
23
24
|
const setupCloner = (datum) => {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* way to implement it is a separate transform that bins the coverage
|
|
8
8
|
* segments and calculates weighted averages.
|
|
9
9
|
*/
|
|
10
|
-
export default class CoverageTransform extends
|
|
10
|
+
export default class CoverageTransform extends Transform {
|
|
11
11
|
/**
|
|
12
12
|
* @typedef {import("../flowNode.js").Datum} Datum
|
|
13
13
|
*/
|
|
@@ -36,6 +36,6 @@ export default class CoverageTransform extends FlowNode {
|
|
|
36
36
|
*/
|
|
37
37
|
ends: FlatQueue<number>;
|
|
38
38
|
}
|
|
39
|
-
import
|
|
39
|
+
import Transform from "./transform.js";
|
|
40
40
|
import FlatQueue from "flatqueue";
|
|
41
41
|
//# sourceMappingURL=coverage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/coverage.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/coverage.js"],"names":[],"mappings":";AAMA;;;;;;;GAOG;AACH;IAKI;;OAEG;IAEH;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,cAAc,EAgD1D;IA5CG,yDAAoB;IAEpB,mDAAwC;IACxC,iDAAoC;IAEpC,mCAAmC;IACnC,sBADoB,GAAG,KAAE,MAAM,CAGT;IACtB,mCAAmC;IACnC,uBADoB,GAAG,KAAE,MAAM,CACsC;IAErE;;;;;MAKC;IAED,sEACsE,MAAM,oCAgBvE;IAEL;;;;OAIG;IACH,MAFU,UAAU,MAAM,CAAC,CAEA;CA0IlC;sBA7MqB,gBAAgB;sBAJhB,WAAW"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import FlatQueue from "flatqueue";
|
|
2
2
|
|
|
3
3
|
import { field } from "../../utils/field.js";
|
|
4
|
-
import
|
|
4
|
+
import { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
5
|
+
import Transform from "./transform.js";
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Computes coverage for sorted segments
|
|
@@ -11,7 +12,7 @@ import FlowNode, { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
|
11
12
|
* way to implement it is a separate transform that bins the coverage
|
|
12
13
|
* segments and calculates weighted averages.
|
|
13
14
|
*/
|
|
14
|
-
export default class CoverageTransform extends
|
|
15
|
+
export default class CoverageTransform extends Transform {
|
|
15
16
|
get behavior() {
|
|
16
17
|
return BEHAVIOR_CLONES;
|
|
17
18
|
}
|
|
@@ -24,7 +25,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
24
25
|
* @param {import("../../spec/transform.js").CoverageParams} params
|
|
25
26
|
*/
|
|
26
27
|
constructor(params) {
|
|
27
|
-
super();
|
|
28
|
+
super(params);
|
|
28
29
|
this.params = params;
|
|
29
30
|
|
|
30
31
|
this.startAccessor = field(params.start);
|
|
@@ -8,7 +8,7 @@ export function isExprFilterParams(params: import("../../spec/transform.js").Fil
|
|
|
8
8
|
* @returns {params is import("../../spec/transform.js").SelectionFilterParams}
|
|
9
9
|
*/
|
|
10
10
|
export function isSelectionFilterParams(params: import("../../spec/transform.js").FilterParams): params is import("../../spec/transform.js").SelectionFilterParams;
|
|
11
|
-
export default class FilterTransform extends
|
|
11
|
+
export default class FilterTransform extends Transform {
|
|
12
12
|
/**
|
|
13
13
|
*
|
|
14
14
|
* @param {import("../../spec/transform.js").FilterParams} params
|
|
@@ -19,5 +19,5 @@ export default class FilterTransform extends FlowNode {
|
|
|
19
19
|
/** @type {import("../../view/paramMediator.js").ExprRefFunction} */
|
|
20
20
|
predicate: import("../../view/paramMediator.js").ExprRefFunction;
|
|
21
21
|
}
|
|
22
|
-
import
|
|
22
|
+
import Transform from "./transform.js";
|
|
23
23
|
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.js"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,2CAHW,OAAO,yBAAyB,EAAE,YAAY,gEAKxD;AAED;;;GAGG;AACH,gDAHW,OAAO,yBAAyB,EAAE,YAAY,qEAKxD;AAzDD;IACI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,YAAY,yBAC9C,OAAO,gBAAgB,EAAE,qBAAqB,EASxD;IAJG,uDAAoB;IAEpB,oEAAoE;IACpE,WADW,OAAO,6BAA6B,EAAE,eAAe,CACtC;CA6BjC;
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.js"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,2CAHW,OAAO,yBAAyB,EAAE,YAAY,gEAKxD;AAED;;;GAGG;AACH,gDAHW,OAAO,yBAAyB,EAAE,YAAY,qEAKxD;AAzDD;IACI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,YAAY,yBAC9C,OAAO,gBAAgB,EAAE,qBAAqB,EASxD;IAJG,uDAAoB;IAEpB,oEAAoE;IACpE,WADW,OAAO,6BAA6B,EAAE,eAAe,CACtC;CA6BjC;sBA3CqB,gBAAgB"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { makeSelectionTestExpression } from "../../selection/selection.js";
|
|
2
|
-
import
|
|
2
|
+
import Transform from "./transform.js";
|
|
3
3
|
|
|
4
|
-
export default class FilterTransform extends
|
|
4
|
+
export default class FilterTransform extends Transform {
|
|
5
5
|
/**
|
|
6
6
|
*
|
|
7
7
|
* @param {import("../../spec/transform.js").FilterParams} params
|
|
8
8
|
* @param {import("../flowNode.js").ParamMediatorProvider} paramMediatorProvider
|
|
9
9
|
*/
|
|
10
10
|
constructor(params, paramMediatorProvider) {
|
|
11
|
-
super(paramMediatorProvider);
|
|
11
|
+
super(params, paramMediatorProvider);
|
|
12
12
|
|
|
13
13
|
this.params = params;
|
|
14
14
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export default class FilterScoredLabelsTransform extends
|
|
1
|
+
export default class FilterScoredLabelsTransform extends Transform {
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* @param {import("../../spec/transform.js").FilterScoredLabelsParams} params
|
|
@@ -24,6 +24,6 @@ export default class FilterScoredLabelsTransform extends FlowNode {
|
|
|
24
24
|
_filterAndPropagate(): void;
|
|
25
25
|
groups: Map<any, any>;
|
|
26
26
|
}
|
|
27
|
-
import
|
|
27
|
+
import Transform from "./transform.js";
|
|
28
28
|
import ReservationMap from "../../utils/reservationMap.js";
|
|
29
29
|
//# sourceMappingURL=filterScoredLabels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filterScoredLabels.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filterScoredLabels.js"],"names":[],"mappings":"AAOA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,wBAAwB,QAC1D,OAAO,oBAAoB,EAAE,OAAO,EA2C9C;IAtCG,mEAAoB;IAEpB,oBAAoB;IACpB,OADW,GAAG,EAAE,CACD;IAEf,mBAAoC;IAMpC,iDAAyC;IACzC,mDAA6C;IAC7C,mDAA6C;IAC7C,mDAA6C;IAC7C,gCAAgC;IAChC,qBADoB,GAAG,KAAE,GAAG,CAGd;IACd,gBAAuC;IAEvC,uCAAuC;IACvC,iBADW,IAAI,GAAG,EAAE,cAAc,CAAC,CACH;IAEhC,4DAAuD;IAIvD,qBAAuE;IAgBvE,eAAiD;IAWrD,4BAyCC;IAKG,sBAAuB;CAU9B;sBA9HqB,gBAAgB;2BAFX,+BAA+B"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { bisector } from "d3-array";
|
|
2
|
-
import
|
|
2
|
+
import { BEHAVIOR_COLLECTS } from "../flowNode.js";
|
|
3
3
|
import { topKSlice } from "../../utils/topK.js";
|
|
4
4
|
import ReservationMap from "../../utils/reservationMap.js";
|
|
5
5
|
import { field } from "../../utils/field.js";
|
|
6
|
+
import Transform from "./transform.js";
|
|
6
7
|
|
|
7
|
-
export default class FilterScoredLabelsTransform extends
|
|
8
|
+
export default class FilterScoredLabelsTransform extends Transform {
|
|
8
9
|
get behavior() {
|
|
9
10
|
return BEHAVIOR_COLLECTS;
|
|
10
11
|
}
|
|
@@ -15,7 +16,7 @@ export default class FilterScoredLabelsTransform extends FlowNode {
|
|
|
15
16
|
* @param {import("../../view/view.js").default} view
|
|
16
17
|
*/
|
|
17
18
|
constructor(params, view) {
|
|
18
|
-
super();
|
|
19
|
+
super(params);
|
|
19
20
|
|
|
20
21
|
this.params = params;
|
|
21
22
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export default class FlattenTransform extends
|
|
1
|
+
export default class FlattenTransform extends Transform {
|
|
2
2
|
/**
|
|
3
3
|
* @param {import("../../spec/transform.js").FlattenParams} params
|
|
4
4
|
*/
|
|
5
5
|
constructor(params: import("../../spec/transform.js").FlattenParams);
|
|
6
|
+
params: import("../../spec/transform.js").FlattenParams;
|
|
6
7
|
/** @param {any[]} datum */
|
|
7
8
|
handle: (datum: any[]) => void;
|
|
8
9
|
}
|
|
9
|
-
import
|
|
10
|
+
import Transform from "./transform.js";
|
|
10
11
|
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flatten.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flatten.js"],"names":[],"mappings":"AAKA;IAKI;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,aAAa,EA0DzD;IArDG,wDAAoB;IAchB,2BAA2B;IAC3B,gBADY,GAAG,EAAE,UAwBhB;CAgBZ;sBAnEqB,gBAAgB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { asArray } from "../../utils/arrayUtils.js";
|
|
2
2
|
import { field } from "../../utils/field.js";
|
|
3
|
-
import
|
|
3
|
+
import { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
4
|
+
import Transform from "./transform.js";
|
|
4
5
|
|
|
5
|
-
export default class FlattenTransform extends
|
|
6
|
+
export default class FlattenTransform extends Transform {
|
|
6
7
|
get behavior() {
|
|
7
8
|
return BEHAVIOR_CLONES;
|
|
8
9
|
}
|
|
@@ -11,7 +12,9 @@ export default class FlattenTransform extends FlowNode {
|
|
|
11
12
|
* @param {import("../../spec/transform.js").FlattenParams} params
|
|
12
13
|
*/
|
|
13
14
|
constructor(params) {
|
|
14
|
-
super();
|
|
15
|
+
super(params);
|
|
16
|
+
|
|
17
|
+
this.params = params;
|
|
15
18
|
|
|
16
19
|
const indexField = params.index;
|
|
17
20
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* coordinate of the gene body and a comma-delimited string of alternating
|
|
4
4
|
* intron and exon lengths. A new datum is created for each exon.
|
|
5
5
|
*/
|
|
6
|
-
export default class FlattenCompressedExonsTransform extends
|
|
6
|
+
export default class FlattenCompressedExonsTransform extends Transform {
|
|
7
7
|
/**
|
|
8
8
|
*
|
|
9
9
|
* @param {import("../../spec/transform.js").FlattenCompressedExonsParams} params
|
|
@@ -15,5 +15,5 @@ export default class FlattenCompressedExonsTransform extends FlowNode {
|
|
|
15
15
|
*/
|
|
16
16
|
handle: (datum: any) => void;
|
|
17
17
|
}
|
|
18
|
-
import
|
|
18
|
+
import Transform from "./transform.js";
|
|
19
19
|
//# sourceMappingURL=flattenCompressedExons.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenCompressedExons.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenCompressedExons.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flattenCompressedExons.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenCompressedExons.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH;IAKI;;;OAGG;IACH,oBAFW,OAAO,yBAAyB,EAAE,4BAA4B,EAmCxE;IA1BG;;;OAGG;IACH,gBAFW,GAAG,UAuBb;CAER;sBAlDqB,gBAAgB"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { field } from "../../utils/field.js";
|
|
2
2
|
import numberExtractor from "../../utils/numberExtractor.js";
|
|
3
|
-
import
|
|
3
|
+
import { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
4
|
+
import Transform from "./transform.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Flattens "run-length encoded" exons. The transforms inputs the start
|
|
7
8
|
* coordinate of the gene body and a comma-delimited string of alternating
|
|
8
9
|
* intron and exon lengths. A new datum is created for each exon.
|
|
9
10
|
*/
|
|
10
|
-
export default class FlattenCompressedExonsTransform extends
|
|
11
|
+
export default class FlattenCompressedExonsTransform extends Transform {
|
|
11
12
|
get behavior() {
|
|
12
13
|
return BEHAVIOR_CLONES;
|
|
13
14
|
}
|
|
@@ -17,7 +18,7 @@ export default class FlattenCompressedExonsTransform extends FlowNode {
|
|
|
17
18
|
* @param {import("../../spec/transform.js").FlattenCompressedExonsParams} params
|
|
18
19
|
*/
|
|
19
20
|
constructor(params) {
|
|
20
|
-
super();
|
|
21
|
+
super(params);
|
|
21
22
|
|
|
22
23
|
const exonsAccessor = field(params.exons ?? "exons");
|
|
23
24
|
const startAccessor = field(params.start ?? "start");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export default class FlattenDelimitedTransform extends
|
|
1
|
+
export default class FlattenDelimitedTransform extends Transform {
|
|
2
2
|
/**
|
|
3
3
|
* @param {import("../../spec/transform.js").FlattenDelimitedParams} params
|
|
4
4
|
*/
|
|
@@ -6,5 +6,5 @@ export default class FlattenDelimitedTransform extends FlowNode {
|
|
|
6
6
|
/** @param {any[]} datum */
|
|
7
7
|
handle: (datum: any[]) => void;
|
|
8
8
|
}
|
|
9
|
-
import
|
|
9
|
+
import Transform from "./transform.js";
|
|
10
10
|
//# sourceMappingURL=flattenDelimited.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenDelimited.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenDelimited.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flattenDelimited.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenDelimited.js"],"names":[],"mappings":"AAKA;IAKI;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,sBAAsB,EAuClE;IAnBG,2BAA2B;IAC3B,gBADY,GAAG,EAAE,UAkBhB;CAER;sBAhDqB,gBAAgB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { asArray } from "../../utils/arrayUtils.js";
|
|
2
2
|
import { field } from "../../utils/field.js";
|
|
3
|
-
import
|
|
3
|
+
import { BEHAVIOR_CLONES } from "../flowNode.js";
|
|
4
|
+
import Transform from "./transform.js";
|
|
4
5
|
|
|
5
|
-
export default class FlattenDelimitedTransform extends
|
|
6
|
+
export default class FlattenDelimitedTransform extends Transform {
|
|
6
7
|
get behavior() {
|
|
7
8
|
return BEHAVIOR_CLONES;
|
|
8
9
|
}
|
|
@@ -11,7 +12,7 @@ export default class FlattenDelimitedTransform extends FlowNode {
|
|
|
11
12
|
* @param {import("../../spec/transform.js").FlattenDelimitedParams} params
|
|
12
13
|
*/
|
|
13
14
|
constructor(params) {
|
|
14
|
-
super();
|
|
15
|
+
super(params);
|
|
15
16
|
|
|
16
17
|
// TODO: Validate config. string elements, etc...
|
|
17
18
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export default class FlattenSequenceTransform extends
|
|
1
|
+
export default class FlattenSequenceTransform extends Transform {
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* @param {import("../../spec/transform.js").FlattenSequenceParams} params
|
|
5
5
|
*/
|
|
6
6
|
constructor(params: import("../../spec/transform.js").FlattenSequenceParams);
|
|
7
|
+
params: import("../../spec/transform.js").FlattenSequenceParams;
|
|
7
8
|
/** @param {any[]} datum */
|
|
8
9
|
handle: (datum: any[]) => void;
|
|
9
10
|
}
|
|
10
|
-
import
|
|
11
|
+
import Transform from "./transform.js";
|
|
11
12
|
//# sourceMappingURL=flattenSequence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flattenSequence.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenSequence.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flattenSequence.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenSequence.js"],"names":[],"mappings":"AAIA;IAKI;;;OAGG;IACH,oBAFW,OAAO,yBAAyB,EAAE,qBAAqB,EAyBjE;IApBG,gEAAoB;IAKpB,2BAA2B;IAC3B,gBADY,GAAG,EAAE,UAchB;CAER;sBAnCqB,gBAAgB"}
|