@genome-spy/core 0.48.2 → 0.49.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 +7226 -6923
- package/dist/bundle/index.js +121 -108
- package/dist/schema.json +838 -344
- package/dist/src/data/collector.test.d.ts +2 -0
- package/dist/src/data/collector.test.d.ts.map +1 -0
- package/dist/src/data/dataFlow.test.d.ts +2 -0
- package/dist/src/data/dataFlow.test.d.ts.map +1 -0
- package/dist/src/data/flow.test.d.ts +2 -0
- package/dist/src/data/flow.test.d.ts.map +1 -0
- package/dist/src/data/flow.test.js +19 -14
- package/dist/src/data/flowNode.test.d.ts +2 -0
- package/dist/src/data/flowNode.test.d.ts.map +1 -0
- package/dist/src/data/flowOptimizer.test.d.ts +2 -0
- package/dist/src/data/flowOptimizer.test.d.ts.map +1 -0
- package/dist/src/data/flowOptimizer.test.js +9 -10
- package/dist/src/data/formats/fasta.test.d.ts +2 -0
- package/dist/src/data/formats/fasta.test.d.ts.map +1 -0
- package/dist/src/data/sources/inlineSource.test.d.ts +2 -0
- package/dist/src/data/sources/inlineSource.test.d.ts.map +1 -0
- package/dist/src/data/sources/inlineSource.test.js +23 -16
- package/dist/src/data/sources/sequenceSource.test.d.ts +2 -0
- package/dist/src/data/sources/sequenceSource.test.d.ts.map +1 -0
- package/dist/src/data/sources/sequenceSource.test.js +59 -42
- package/dist/src/data/transforms/clone.test.d.ts +2 -0
- package/dist/src/data/transforms/clone.test.d.ts.map +1 -0
- package/dist/src/data/transforms/coverage.test.d.ts +2 -0
- package/dist/src/data/transforms/coverage.test.d.ts.map +1 -0
- package/dist/src/data/transforms/coverage.test.js +1 -1
- package/dist/src/data/transforms/filter.d.ts +10 -0
- package/dist/src/data/transforms/filter.d.ts.map +1 -1
- package/dist/src/data/transforms/filter.js +30 -1
- package/dist/src/data/transforms/filter.test.d.ts +2 -0
- package/dist/src/data/transforms/filter.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flatten.test.d.ts +2 -0
- package/dist/src/data/transforms/flatten.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flatten.test.js +10 -7
- package/dist/src/data/transforms/flattenDelimited.test.d.ts +2 -0
- package/dist/src/data/transforms/flattenDelimited.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flattenDelimited.test.js +16 -13
- package/dist/src/data/transforms/flattenSequence.test.d.ts +2 -0
- package/dist/src/data/transforms/flattenSequence.test.d.ts.map +1 -0
- package/dist/src/data/transforms/flattenSequence.test.js +1 -1
- package/dist/src/data/transforms/formula.test.d.ts +2 -0
- package/dist/src/data/transforms/formula.test.d.ts.map +1 -0
- package/dist/src/data/transforms/formula.test.js +1 -1
- package/dist/src/data/transforms/identifier.test.d.ts +2 -0
- package/dist/src/data/transforms/identifier.test.d.ts.map +1 -0
- package/dist/src/data/transforms/pileup.test.d.ts +2 -0
- package/dist/src/data/transforms/pileup.test.d.ts.map +1 -0
- package/dist/src/data/transforms/project.test.d.ts +2 -0
- package/dist/src/data/transforms/project.test.d.ts.map +1 -0
- package/dist/src/data/transforms/project.test.js +1 -1
- package/dist/src/data/transforms/regexExtract.test.d.ts +2 -0
- package/dist/src/data/transforms/regexExtract.test.d.ts.map +1 -0
- package/dist/src/data/transforms/regexExtract.test.js +6 -3
- package/dist/src/data/transforms/regexFold.test.d.ts +2 -0
- package/dist/src/data/transforms/regexFold.test.d.ts.map +1 -0
- package/dist/src/data/transforms/sample.test.d.ts +2 -0
- package/dist/src/data/transforms/sample.test.d.ts.map +1 -0
- package/dist/src/data/transforms/stack.test.d.ts +2 -0
- package/dist/src/data/transforms/stack.test.d.ts.map +1 -0
- package/dist/src/data/transforms/stack.test.js +8 -8
- package/dist/src/encoder/accessor.d.ts +17 -14
- package/dist/src/encoder/accessor.d.ts.map +1 -1
- package/dist/src/encoder/accessor.js +127 -56
- package/dist/src/encoder/accessor.test.d.ts +2 -0
- package/dist/src/encoder/accessor.test.d.ts.map +1 -0
- package/dist/src/encoder/accessor.test.js +145 -31
- package/dist/src/encoder/encoder.d.ts +26 -13
- package/dist/src/encoder/encoder.d.ts.map +1 -1
- package/dist/src/encoder/encoder.js +98 -114
- package/dist/src/encoder/encoder.test.d.ts +2 -0
- package/dist/src/encoder/encoder.test.d.ts.map +1 -0
- package/dist/src/encoder/encoder.test.js +85 -82
- package/dist/src/fonts/bmFontManager.d.ts.map +1 -1
- package/dist/src/fonts/bmFontManager.js +10 -4
- package/dist/src/genome/genome.test.d.ts +2 -0
- package/dist/src/genome/genome.test.d.ts.map +1 -0
- package/dist/src/genome/scaleIndex.test.d.ts +2 -0
- package/dist/src/genome/scaleIndex.test.d.ts.map +1 -0
- package/dist/src/genome/scaleLocus.test.d.ts +2 -0
- package/dist/src/genome/scaleLocus.test.d.ts.map +1 -0
- package/dist/src/genomeSpy.d.ts +3 -2
- package/dist/src/genomeSpy.d.ts.map +1 -1
- package/dist/src/genomeSpy.js +15 -6
- package/dist/src/gl/dataToVertices.d.ts +6 -8
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +42 -33
- package/dist/src/gl/glslScaleGenerator.d.ts +84 -15
- package/dist/src/gl/glslScaleGenerator.d.ts.map +1 -1
- package/dist/src/gl/glslScaleGenerator.js +260 -73
- package/dist/src/marks/link.common.glsl.js +1 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.js +10 -0
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +6 -9
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +212 -95
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +5 -1
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +9 -4
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +4 -0
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.js +5 -1
- package/dist/src/scale/scale.test.d.ts +2 -0
- package/dist/src/scale/scale.test.d.ts.map +1 -0
- package/dist/src/scale/scale.test.js +2 -0
- package/dist/src/scale/ticks.test.d.ts +2 -0
- package/dist/src/scale/ticks.test.d.ts.map +1 -0
- package/dist/src/scale/ticks.test.js +6 -0
- package/dist/src/selection/selection.d.ts +39 -0
- package/dist/src/selection/selection.d.ts.map +1 -0
- package/dist/src/selection/selection.js +78 -0
- package/dist/src/spec/channel.d.ts +137 -83
- package/dist/src/spec/mark.d.ts +9 -0
- package/dist/src/spec/parameter.d.ts +112 -3
- package/dist/src/spec/root.d.ts +0 -1
- package/dist/src/spec/transform.d.ts +19 -1
- package/dist/src/spec/view.d.ts +3 -3
- package/dist/src/tooltip/dataTooltipHandler.js +1 -1
- package/dist/src/types/encoder.d.ts +80 -26
- package/dist/src/types/rendering.d.ts +1 -0
- package/dist/src/types/selectionTypes.d.ts +44 -0
- package/dist/src/types/viewContext.d.ts +1 -4
- package/dist/src/utils/addBaseUrl.test.d.ts +2 -0
- package/dist/src/utils/addBaseUrl.test.d.ts.map +1 -0
- package/dist/src/utils/binnedIndex.test.d.ts +2 -0
- package/dist/src/utils/binnedIndex.test.d.ts.map +1 -0
- package/dist/src/utils/cloner.test.d.ts +2 -0
- package/dist/src/utils/cloner.test.d.ts.map +1 -0
- package/dist/src/utils/coalesce.test.d.ts +2 -0
- package/dist/src/utils/coalesce.test.d.ts.map +1 -0
- package/dist/src/utils/concatIterables.test.d.ts +2 -0
- package/dist/src/utils/concatIterables.test.d.ts.map +1 -0
- package/dist/src/utils/domainArray.test.d.ts +2 -0
- package/dist/src/utils/domainArray.test.d.ts.map +1 -0
- 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 +11 -2
- package/dist/src/utils/indexer.test.d.ts +2 -0
- package/dist/src/utils/indexer.test.d.ts.map +1 -0
- package/dist/src/utils/inputBinding.d.ts.map +1 -1
- package/dist/src/utils/inputBinding.js +4 -0
- package/dist/src/utils/iterateNestedMaps.test.d.ts +2 -0
- package/dist/src/utils/iterateNestedMaps.test.d.ts.map +1 -0
- package/dist/src/utils/kWayMerge.test.d.ts +2 -0
- package/dist/src/utils/kWayMerge.test.d.ts.map +1 -0
- package/dist/src/utils/mergeObjects.test.d.ts +2 -0
- package/dist/src/utils/mergeObjects.test.d.ts.map +1 -0
- package/dist/src/utils/numberExtractor.test.d.ts +2 -0
- package/dist/src/utils/numberExtractor.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCacher.test.d.ts +2 -0
- package/dist/src/utils/propertyCacher.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCoalescer.test.d.ts +2 -0
- package/dist/src/utils/propertyCoalescer.test.d.ts.map +1 -0
- package/dist/src/utils/propertyCoalescer.test.js +3 -0
- package/dist/src/utils/radixSort.test.d.ts +2 -0
- package/dist/src/utils/radixSort.test.d.ts.map +1 -0
- package/dist/src/utils/reservationMap.test.d.ts +2 -0
- package/dist/src/utils/reservationMap.test.d.ts.map +1 -0
- package/dist/src/utils/ringBuffer.test.d.ts +2 -0
- package/dist/src/utils/ringBuffer.test.d.ts.map +1 -0
- package/dist/src/utils/topK.test.d.ts +2 -0
- package/dist/src/utils/topK.test.d.ts.map +1 -0
- package/dist/src/utils/trees.test.d.ts +2 -0
- package/dist/src/utils/trees.test.d.ts.map +1 -0
- package/dist/src/utils/trees.test.js +8 -3
- package/dist/src/utils/variableTools.test.d.ts +2 -0
- package/dist/src/utils/variableTools.test.d.ts.map +1 -0
- package/dist/src/view/axisResolution.d.ts +19 -6
- package/dist/src/view/axisResolution.d.ts.map +1 -1
- package/dist/src/view/axisResolution.js +16 -7
- package/dist/src/view/axisResolution.test.d.ts +2 -0
- package/dist/src/view/axisResolution.test.d.ts.map +1 -0
- package/dist/src/view/axisResolution.test.js +16 -11
- package/dist/src/view/facetView.d.ts +1 -1
- package/dist/src/view/facetView.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.d.ts +1 -1
- package/dist/src/view/flowBuilder.d.ts.map +1 -1
- package/dist/src/view/flowBuilder.js +34 -5
- package/dist/src/view/flowBuilder.test.d.ts +2 -0
- package/dist/src/view/flowBuilder.test.d.ts.map +1 -0
- package/dist/src/view/gridView.d.ts +0 -6
- package/dist/src/view/gridView.d.ts.map +1 -1
- package/dist/src/view/layerView.d.ts +0 -6
- package/dist/src/view/layerView.d.ts.map +1 -1
- package/dist/src/view/layout/flexLayout.test.d.ts +2 -0
- package/dist/src/view/layout/flexLayout.test.d.ts.map +1 -0
- package/dist/src/view/layout/grid.test.d.ts +2 -0
- package/dist/src/view/layout/grid.test.d.ts.map +1 -0
- package/dist/src/view/layout/rectangle.test.d.ts +2 -0
- package/dist/src/view/layout/rectangle.test.d.ts.map +1 -0
- package/dist/src/view/paramMediator.d.ts +32 -5
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +97 -9
- package/dist/src/view/paramMediator.test.d.ts +2 -0
- package/dist/src/view/paramMediator.test.d.ts.map +1 -0
- package/dist/src/view/paramMediator.test.js +17 -1
- package/dist/src/view/scaleResolution.d.ts +17 -9
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +51 -34
- package/dist/src/view/scaleResolution.test.d.ts +2 -0
- package/dist/src/view/scaleResolution.test.d.ts.map +1 -0
- package/dist/src/view/scaleResolution.test.js +2 -0
- package/dist/src/view/testUtils.d.ts.map +1 -1
- package/dist/src/view/testUtils.js +15 -3
- package/dist/src/view/unitView.d.ts +5 -15
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +81 -101
- package/dist/src/view/view.d.ts +1 -1
- package/dist/src/view/view.d.ts.map +1 -1
- package/dist/src/view/view.test.d.ts +2 -0
- package/dist/src/view/view.test.d.ts.map +1 -0
- package/dist/src/view/view.test.js +73 -55
- package/dist/src/view/viewFactory.test.d.ts +2 -0
- package/dist/src/view/viewFactory.test.d.ts.map +1 -0
- package/dist/src/view/viewFactory.test.js +2 -2
- package/dist/src/view/zoom.js +2 -2
- package/package.json +5 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.test.d.ts","sourceRoot":"","sources":["../../../src/data/collector.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataFlow.test.d.ts","sourceRoot":"","sources":["../../../src/data/dataFlow.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.test.d.ts","sourceRoot":"","sources":["../../../src/data/flow.test.js"],"names":[],"mappings":""}
|
|
@@ -2,7 +2,10 @@ import { describe, expect, test } from "vitest";
|
|
|
2
2
|
import FilterTransform from "./transforms/filter.js";
|
|
3
3
|
import FormulaTransform from "./transforms/formula.js";
|
|
4
4
|
import Collector from "./collector.js";
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
SynchronousSequenceSource,
|
|
7
|
+
makeParamMediatorProvider,
|
|
8
|
+
} from "./flowTestUtils.js";
|
|
6
9
|
|
|
7
10
|
describe("Test flow graphs", () => {
|
|
8
11
|
test("Trivial graph: sequence to collector", () => {
|
|
@@ -28,8 +31,6 @@ describe("Test flow graphs", () => {
|
|
|
28
31
|
|
|
29
32
|
source.dispatch();
|
|
30
33
|
|
|
31
|
-
expect(collector1.getData()).not.toBe(collector2._data);
|
|
32
|
-
|
|
33
34
|
expect(collector1.getData()).toEqual(
|
|
34
35
|
[0, 1, 2, 3, 4].map((d) => ({
|
|
35
36
|
data: d,
|
|
@@ -45,18 +46,23 @@ describe("Test flow graphs", () => {
|
|
|
45
46
|
|
|
46
47
|
test.skip("Implement stub for ParamMediator");
|
|
47
48
|
|
|
48
|
-
/*
|
|
49
49
|
test("Longer chain of nodes", () => {
|
|
50
50
|
const source = new SynchronousSequenceSource(10);
|
|
51
|
-
const filter = new FilterTransform(
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
51
|
+
const filter = new FilterTransform(
|
|
52
|
+
{
|
|
53
|
+
type: "filter",
|
|
54
|
+
expr: "datum.data < 5",
|
|
55
|
+
},
|
|
56
|
+
makeParamMediatorProvider()
|
|
57
|
+
);
|
|
58
|
+
const formula = new FormulaTransform(
|
|
59
|
+
{
|
|
60
|
+
type: "formula",
|
|
61
|
+
expr: "datum.data * 2",
|
|
62
|
+
as: "data",
|
|
63
|
+
},
|
|
64
|
+
makeParamMediatorProvider()
|
|
65
|
+
);
|
|
60
66
|
const collector = new Collector();
|
|
61
67
|
|
|
62
68
|
source.addChild(filter);
|
|
@@ -72,5 +78,4 @@ describe("Test flow graphs", () => {
|
|
|
72
78
|
}))
|
|
73
79
|
);
|
|
74
80
|
});
|
|
75
|
-
*/
|
|
76
81
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowNode.test.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flowOptimizer.test.d.ts","sourceRoot":"","sources":["../../../src/data/flowOptimizer.test.js"],"names":[],"mappings":""}
|
|
@@ -10,6 +10,7 @@ import DataFlow from "./dataFlow.js";
|
|
|
10
10
|
import { combineIdenticalDataSources } from "./flowOptimizer.js";
|
|
11
11
|
import InlineSource from "./sources/inlineSource.js";
|
|
12
12
|
import UrlSource from "./sources/urlSource.js";
|
|
13
|
+
import { makeParamMediatorProvider } from "./flowTestUtils.js";
|
|
13
14
|
|
|
14
15
|
test("validateLinks() detects broken graph", () => {
|
|
15
16
|
const root = new FlowNode();
|
|
@@ -132,14 +133,12 @@ describe("removeRedundantCloneTransforms", () => {
|
|
|
132
133
|
});
|
|
133
134
|
});
|
|
134
135
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
getBaseUrl: () => "",
|
|
142
|
-
};
|
|
136
|
+
/** @type {import("../view/view.js").default} */
|
|
137
|
+
const viewStub = /** @type {any} */ (
|
|
138
|
+
Object.assign(makeParamMediatorProvider(), {
|
|
139
|
+
getBaseUrl: () => "",
|
|
140
|
+
})
|
|
141
|
+
);
|
|
143
142
|
|
|
144
143
|
describe("Merge indentical data sources", () => {
|
|
145
144
|
test("Merges correctly", () => {
|
|
@@ -191,8 +190,8 @@ describe("Merge indentical data sources", () => {
|
|
|
191
190
|
/** @type {DataFlow<string>} */
|
|
192
191
|
const dataFlow = new DataFlow();
|
|
193
192
|
|
|
194
|
-
const a = new InlineSource({ values: [1, 2, 3] });
|
|
195
|
-
const b = new InlineSource({ values: [1, 2, 3] });
|
|
193
|
+
const a = new InlineSource({ values: [1, 2, 3] }, viewStub);
|
|
194
|
+
const b = new InlineSource({ values: [1, 2, 3] }, viewStub);
|
|
196
195
|
|
|
197
196
|
dataFlow.addDataSource(a, "a");
|
|
198
197
|
dataFlow.addDataSource(b, "b");
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fasta.test.d.ts","sourceRoot":"","sources":["../../../../src/data/formats/fasta.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inlineSource.test.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/inlineSource.test.js"],"names":[],"mappings":""}
|
|
@@ -15,33 +15,37 @@ async function collectSource(source) {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
test("InlineSource propagates an object", async () => {
|
|
18
|
-
expect(
|
|
19
|
-
|
|
20
|
-
);
|
|
18
|
+
expect(
|
|
19
|
+
await collectSource(new InlineSource({ values: { x: 1 } }, undefined))
|
|
20
|
+
).toEqual([{ x: 1 }]);
|
|
21
21
|
});
|
|
22
22
|
|
|
23
23
|
test("InlineSource propagates an array of objects", async () => {
|
|
24
24
|
expect(
|
|
25
|
-
await collectSource(
|
|
25
|
+
await collectSource(
|
|
26
|
+
new InlineSource({ values: [{ x: 1 }, { x: 2 }] }, undefined)
|
|
27
|
+
)
|
|
26
28
|
).toEqual([{ x: 1 }, { x: 2 }]);
|
|
27
29
|
});
|
|
28
30
|
|
|
29
31
|
test("InlineSource wraps scalars to objects", async () => {
|
|
30
|
-
expect(
|
|
31
|
-
{
|
|
32
|
-
|
|
33
|
-
]);
|
|
32
|
+
expect(
|
|
33
|
+
await collectSource(new InlineSource({ values: [1, 2] }, undefined))
|
|
34
|
+
).toEqual([{ data: 1 }, { data: 2 }]);
|
|
34
35
|
});
|
|
35
36
|
|
|
36
37
|
test("InlineSource parses a string", async () => {
|
|
37
38
|
expect(
|
|
38
39
|
await collectSource(
|
|
39
|
-
new InlineSource(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
new InlineSource(
|
|
41
|
+
{
|
|
42
|
+
values: "a\n1\n2\n3",
|
|
43
|
+
format: {
|
|
44
|
+
type: "csv",
|
|
45
|
+
},
|
|
43
46
|
},
|
|
44
|
-
|
|
47
|
+
undefined
|
|
48
|
+
)
|
|
45
49
|
)
|
|
46
50
|
).toEqual([{ a: 1 }, { a: 2 }, { a: 3 }]);
|
|
47
51
|
});
|
|
@@ -49,8 +53,11 @@ test("InlineSource parses a string", async () => {
|
|
|
49
53
|
test("InlineSource throws on a string and a missing format specifier", () => {
|
|
50
54
|
expect(
|
|
51
55
|
() =>
|
|
52
|
-
new InlineSource(
|
|
53
|
-
|
|
54
|
-
|
|
56
|
+
new InlineSource(
|
|
57
|
+
{
|
|
58
|
+
values: "a\n1\n2\n3",
|
|
59
|
+
},
|
|
60
|
+
undefined
|
|
61
|
+
)
|
|
55
62
|
).toThrow();
|
|
56
63
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequenceSource.test.d.ts","sourceRoot":"","sources":["../../../../src/data/sources/sequenceSource.test.js"],"names":[],"mappings":""}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
2
|
import Collector from "../collector.js";
|
|
3
3
|
import SequenceSource from "./sequenceSource.js";
|
|
4
|
+
import { makeParamMediatorProvider } from "../flowTestUtils.js";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* @param {SequenceSource} source
|
|
@@ -14,51 +15,67 @@ async function collectSource(source) {
|
|
|
14
15
|
return [...collector.getData()];
|
|
15
16
|
}
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
allocateSetter: () => {},
|
|
21
|
-
createExpression: () => {},
|
|
22
|
-
},
|
|
23
|
-
};
|
|
18
|
+
describe("SequenceSource", () => {
|
|
19
|
+
/** @type {import("../../view/view.js").default} */
|
|
20
|
+
const viewStub = /** @type {any} */ (makeParamMediatorProvider());
|
|
24
21
|
|
|
25
|
-
test("
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
22
|
+
test("generates a sequence", () =>
|
|
23
|
+
expect(
|
|
24
|
+
collectSource(
|
|
25
|
+
new SequenceSource(
|
|
26
|
+
{ sequence: { start: 0, stop: 3 } },
|
|
27
|
+
viewStub
|
|
28
|
+
)
|
|
29
|
+
)
|
|
30
|
+
).resolves.toEqual([{ data: 0 }, { data: 1 }, { data: 2 }]));
|
|
32
31
|
|
|
33
|
-
test("
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
test("generates a sequence with a custom step", () =>
|
|
33
|
+
expect(
|
|
34
|
+
collectSource(
|
|
35
|
+
new SequenceSource(
|
|
36
|
+
{ sequence: { start: 0, stop: 5, step: 2 } },
|
|
37
|
+
viewStub
|
|
38
|
+
)
|
|
39
39
|
)
|
|
40
|
-
)
|
|
41
|
-
).toEqual([{ data: 0 }, { data: 2 }, { data: 4 }]);
|
|
42
|
-
});
|
|
40
|
+
).resolves.toEqual([{ data: 0 }, { data: 2 }, { data: 4 }]));
|
|
43
41
|
|
|
44
|
-
test("
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
42
|
+
test("generates a sequence with a custom field name", () =>
|
|
43
|
+
expect(
|
|
44
|
+
collectSource(
|
|
45
|
+
new SequenceSource(
|
|
46
|
+
{ sequence: { start: 0, stop: 3, as: "x" } },
|
|
47
|
+
viewStub
|
|
48
|
+
)
|
|
50
49
|
)
|
|
51
|
-
)
|
|
52
|
-
).toEqual([{ x: 0 }, { x: 1 }, { x: 2 }]);
|
|
53
|
-
});
|
|
50
|
+
).resolves.toEqual([{ x: 0 }, { x: 1 }, { x: 2 }]));
|
|
54
51
|
|
|
55
|
-
test("
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
52
|
+
test("accepts ExprRef parameters", async () =>
|
|
53
|
+
expect(
|
|
54
|
+
collectSource(
|
|
55
|
+
new SequenceSource(
|
|
56
|
+
{
|
|
57
|
+
sequence: {
|
|
58
|
+
start: { expr: "0" },
|
|
59
|
+
stop: { expr: "1 + 2" },
|
|
60
|
+
step: { expr: "1" },
|
|
61
|
+
as: "x",
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
viewStub
|
|
65
|
+
)
|
|
66
|
+
)
|
|
67
|
+
// TODO: Test that the sequence is regenerated when the parameters change
|
|
68
|
+
).resolves.toEqual([{ x: 0 }, { x: 1 }, { x: 2 }]));
|
|
69
|
+
|
|
70
|
+
test("throws on missing 'start' parameter", () =>
|
|
71
|
+
expect(
|
|
72
|
+
// @ts-expect-error
|
|
73
|
+
() => new SequenceSource({ sequence: { stop: 3 } }, viewStub)
|
|
74
|
+
).toThrow());
|
|
75
|
+
|
|
76
|
+
test("throws on missing 'stop' parameter", () =>
|
|
77
|
+
expect(
|
|
78
|
+
// @ts-expect-error
|
|
79
|
+
() => new SequenceSource({ sequence: { start: 0 } }, viewStub)
|
|
80
|
+
).toThrow());
|
|
64
81
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/clone.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coverage.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/coverage.test.js"],"names":[],"mappings":"6BAKa,OAAO,yBAAyB,EAAE,cAAc"}
|
|
@@ -48,7 +48,7 @@ function testSimpleCoverage(reads, coverageSegments) {
|
|
|
48
48
|
/**
|
|
49
49
|
*
|
|
50
50
|
* @param {[number, number, number][]} reads Start, end, weight
|
|
51
|
-
* @param {[number, number, number][]}
|
|
51
|
+
* @param {[number, number, number][]} coverageSegments Start, end, coverage
|
|
52
52
|
*/
|
|
53
53
|
function testWeightedCoverage(reads, coverageSegments) {
|
|
54
54
|
/** @type {CoverageParams} */
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {import("../../spec/transform.js").FilterParams} params
|
|
3
|
+
* @returns {params is import("../../spec/transform.js").ExprFilterParams}
|
|
4
|
+
*/
|
|
5
|
+
export function isExprFilterParams(params: import("../../spec/transform.js").FilterParams): params is import("../../spec/transform.js").ExprFilterParams;
|
|
6
|
+
/**
|
|
7
|
+
* @param {import("../../spec/transform.js").FilterParams} params
|
|
8
|
+
* @returns {params is import("../../spec/transform.js").SelectionFilterParams}
|
|
9
|
+
*/
|
|
10
|
+
export function isSelectionFilterParams(params: import("../../spec/transform.js").FilterParams): params is import("../../spec/transform.js").SelectionFilterParams;
|
|
1
11
|
export default class FilterTransform extends FlowNode {
|
|
2
12
|
/**
|
|
3
13
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.js"],"names":[],"mappings":"
|
|
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;qBA3CoB,gBAAgB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { makeSelectionTestExpression } from "../../selection/selection.js";
|
|
1
2
|
import FlowNode from "../flowNode.js";
|
|
2
3
|
|
|
3
4
|
export default class FilterTransform extends FlowNode {
|
|
@@ -16,7 +17,19 @@ export default class FilterTransform extends FlowNode {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
initialize() {
|
|
19
|
-
|
|
20
|
+
let expression = "";
|
|
21
|
+
|
|
22
|
+
if (isExprFilterParams(this.params)) {
|
|
23
|
+
expression = this.params.expr;
|
|
24
|
+
} else if (isSelectionFilterParams(this.params)) {
|
|
25
|
+
expression = makeSelectionTestExpression(this.params);
|
|
26
|
+
} else {
|
|
27
|
+
throw new Error(
|
|
28
|
+
"Invalid filter params: " + JSON.stringify(this.params)
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
this.predicate = this.paramMediator.createExpression(expression);
|
|
20
33
|
this.predicate.addListener(() => this.repropagate());
|
|
21
34
|
}
|
|
22
35
|
|
|
@@ -30,3 +43,19 @@ export default class FilterTransform extends FlowNode {
|
|
|
30
43
|
}
|
|
31
44
|
}
|
|
32
45
|
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @param {import("../../spec/transform.js").FilterParams} params
|
|
49
|
+
* @returns {params is import("../../spec/transform.js").ExprFilterParams}
|
|
50
|
+
*/
|
|
51
|
+
export function isExprFilterParams(params) {
|
|
52
|
+
return "expr" in params;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* @param {import("../../spec/transform.js").FilterParams} params
|
|
57
|
+
* @returns {params is import("../../spec/transform.js").SelectionFilterParams}
|
|
58
|
+
*/
|
|
59
|
+
export function isSelectionFilterParams(params) {
|
|
60
|
+
return "param" in params;
|
|
61
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.test.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flatten.test.js"],"names":[],"mappings":""}
|
|
@@ -3,7 +3,7 @@ import { processData } from "../flowTestUtils.js";
|
|
|
3
3
|
import FlattenTransform from "./flatten.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @param {import("
|
|
6
|
+
* @param {import("../../spec/transform.js").FlattenParams} params
|
|
7
7
|
* @param {any[]} data
|
|
8
8
|
*/
|
|
9
9
|
function transform(params, data) {
|
|
@@ -11,8 +11,11 @@ function transform(params, data) {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
describe("Flatten transform", () => {
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {import("../../spec/transform.js").FlattenParams} FlattenParams
|
|
16
|
+
*/
|
|
14
17
|
test("With a single field", () => {
|
|
15
|
-
/** @type {
|
|
18
|
+
/** @type {FlattenParams} */
|
|
16
19
|
const params = { type: "flatten", fields: ["foo"] };
|
|
17
20
|
|
|
18
21
|
const input = [
|
|
@@ -30,7 +33,7 @@ describe("Flatten transform", () => {
|
|
|
30
33
|
});
|
|
31
34
|
|
|
32
35
|
test("With an index field", () => {
|
|
33
|
-
/** @type {
|
|
36
|
+
/** @type {FlattenParams} */
|
|
34
37
|
const params = { type: "flatten", fields: ["foo"], index: "idx" };
|
|
35
38
|
|
|
36
39
|
const input = [
|
|
@@ -48,7 +51,7 @@ describe("Flatten transform", () => {
|
|
|
48
51
|
});
|
|
49
52
|
|
|
50
53
|
test("With multiple fields", () => {
|
|
51
|
-
/** @type {
|
|
54
|
+
/** @type {FlattenParams} */
|
|
52
55
|
const params = { type: "flatten", fields: ["foo", "bar"] };
|
|
53
56
|
|
|
54
57
|
const input = [
|
|
@@ -66,18 +69,18 @@ describe("Flatten transform", () => {
|
|
|
66
69
|
});
|
|
67
70
|
|
|
68
71
|
test("Throws on mismatching spec lengths", () => {
|
|
69
|
-
/** @type {
|
|
72
|
+
/** @type {FlattenParams} */
|
|
70
73
|
const params = {
|
|
71
74
|
type: "flatten",
|
|
72
75
|
fields: ["a", "b"],
|
|
73
76
|
as: ["a"],
|
|
74
77
|
};
|
|
75
78
|
|
|
76
|
-
expect(() => transform(params,
|
|
79
|
+
expect(() => transform(params, [])).toThrow();
|
|
77
80
|
});
|
|
78
81
|
|
|
79
82
|
test("Missing fields property treats the input object as an array", () => {
|
|
80
|
-
/** @type {
|
|
83
|
+
/** @type {FlattenParams} */
|
|
81
84
|
const params = {
|
|
82
85
|
type: "flatten",
|
|
83
86
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattenDelimited.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenDelimited.test.js"],"names":[],"mappings":""}
|
|
@@ -9,7 +9,7 @@ const sampleData = [
|
|
|
9
9
|
];
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
|
-
* @param {import("
|
|
12
|
+
* @param {import("../../spec/transform.js").FlattenDelimitedParams} params
|
|
13
13
|
* @param {any[]} data
|
|
14
14
|
*/
|
|
15
15
|
function transform(params, data) {
|
|
@@ -17,15 +17,18 @@ function transform(params, data) {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
describe("FlattenDelimited transform", () => {
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {import("../../spec/transform.js").FlattenDelimitedParams} FlattenDelimitedParams
|
|
22
|
+
*/
|
|
20
23
|
test("With a single field", () => {
|
|
21
|
-
/** @type {
|
|
22
|
-
const
|
|
24
|
+
/** @type {FlattenDelimitedParams} */
|
|
25
|
+
const params = {
|
|
23
26
|
type: "flattenDelimited",
|
|
24
27
|
field: "a",
|
|
25
28
|
separator: ", ",
|
|
26
29
|
};
|
|
27
30
|
|
|
28
|
-
expect(transform(
|
|
31
|
+
expect(transform(params, sampleData)).toEqual([
|
|
29
32
|
{ id: 1, a: "q", b: "a-s-d" },
|
|
30
33
|
{ id: 1, a: "w", b: "a-s-d" },
|
|
31
34
|
{ id: 1, a: "e", b: "a-s-d" },
|
|
@@ -37,15 +40,15 @@ describe("FlattenDelimited transform", () => {
|
|
|
37
40
|
});
|
|
38
41
|
|
|
39
42
|
test("With two fields", () => {
|
|
40
|
-
/** @type {
|
|
41
|
-
const
|
|
43
|
+
/** @type {FlattenDelimitedParams} */
|
|
44
|
+
const params = {
|
|
42
45
|
type: "flattenDelimited",
|
|
43
46
|
field: ["a", "b"],
|
|
44
47
|
as: ["a", "c"],
|
|
45
48
|
separator: [", ", "-"],
|
|
46
49
|
};
|
|
47
50
|
|
|
48
|
-
expect(transform(
|
|
51
|
+
expect(transform(params, sampleData)).toEqual([
|
|
49
52
|
{ id: 1, a: "q", b: "a-s-d", c: "a" },
|
|
50
53
|
{ id: 1, a: "w", b: "a-s-d", c: "s" },
|
|
51
54
|
{ id: 1, a: "e", b: "a-s-d", c: "d" },
|
|
@@ -64,24 +67,24 @@ describe("FlattenDelimited transform", () => {
|
|
|
64
67
|
},
|
|
65
68
|
];
|
|
66
69
|
|
|
67
|
-
/** @type {
|
|
68
|
-
const
|
|
70
|
+
/** @type {FlattenDelimitedParams} */
|
|
71
|
+
const params = {
|
|
69
72
|
type: "flattenDelimited",
|
|
70
73
|
field: ["a", "b"],
|
|
71
74
|
separator: ["-", "-"],
|
|
72
75
|
};
|
|
73
76
|
|
|
74
|
-
expect(() => transform(
|
|
77
|
+
expect(() => transform(params, data)).toThrow();
|
|
75
78
|
});
|
|
76
79
|
|
|
77
80
|
test("Throws on mismatching spec lengths", () => {
|
|
78
|
-
/** @type {
|
|
79
|
-
const
|
|
81
|
+
/** @type {FlattenDelimitedParams} */
|
|
82
|
+
const params = {
|
|
80
83
|
type: "flattenDelimited",
|
|
81
84
|
field: ["a", "b"],
|
|
82
85
|
separator: ["a"],
|
|
83
86
|
};
|
|
84
87
|
|
|
85
|
-
expect(() => transform(
|
|
88
|
+
expect(() => transform(params, sampleData)).toThrow();
|
|
86
89
|
});
|
|
87
90
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flattenSequence.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/flattenSequence.test.js"],"names":[],"mappings":""}
|
|
@@ -3,7 +3,7 @@ import { processData } from "../flowTestUtils.js";
|
|
|
3
3
|
import FlattenSequenceTransform from "./flattenSequence.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* @param {import("
|
|
6
|
+
* @param {import("../../spec/transform.js").FlattenSequenceParams} params
|
|
7
7
|
* @param {any[]} data
|
|
8
8
|
*/
|
|
9
9
|
function transform(params, data) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formula.test.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/formula.test.js"],"names":[],"mappings":""}
|