@genome-spy/core 0.48.2 → 0.50.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 +7434 -7107
- package/dist/bundle/index.js +116 -103
- package/dist/schema.json +3975 -2819
- 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/gl/includes/common.glsl.js +1 -1
- package/dist/src/marks/link.common.glsl.js +1 -1
- package/dist/src/marks/link.d.ts +8 -1
- package/dist/src/marks/link.d.ts.map +1 -1
- package/dist/src/marks/link.fragment.glsl.js +1 -1
- package/dist/src/marks/link.js +47 -31
- package/dist/src/marks/link.vertex.glsl.js +1 -1
- package/dist/src/marks/mark.d.ts +24 -25
- package/dist/src/marks/mark.d.ts.map +1 -1
- package/dist/src/marks/mark.js +246 -118
- package/dist/src/marks/markUtils.d.ts +25 -0
- package/dist/src/marks/markUtils.d.ts.map +1 -1
- package/dist/src/marks/markUtils.js +41 -1
- package/dist/src/marks/point.common.glsl.js +1 -1
- package/dist/src/marks/point.d.ts +8 -1
- package/dist/src/marks/point.d.ts.map +1 -1
- package/dist/src/marks/point.js +34 -25
- package/dist/src/marks/point.vertex.glsl.js +1 -1
- package/dist/src/marks/rect.d.ts +8 -1
- package/dist/src/marks/rect.d.ts.map +1 -1
- package/dist/src/marks/rect.js +28 -23
- package/dist/src/marks/rule.d.ts +8 -1
- package/dist/src/marks/rule.d.ts.map +1 -1
- package/dist/src/marks/rule.js +23 -16
- package/dist/src/marks/text.d.ts +10 -1
- package/dist/src/marks/text.d.ts.map +1 -1
- package/dist/src/marks/text.fragment.glsl.js +1 -1
- package/dist/src/marks/text.js +53 -47
- package/dist/src/marks/text.vertex.glsl.js +1 -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 +150 -83
- package/dist/src/spec/mark.d.ts +133 -78
- 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 +5 -10
- package/dist/src/tooltip/dataTooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -1
- package/dist/src/tooltip/dataTooltipHandler.js +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +1 -1
- package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +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/axisView.js +2 -2
- 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/flowBuilder.test.js +1 -1
- package/dist/src/view/gridView.d.ts +0 -6
- package/dist/src/view/gridView.d.ts.map +1 -1
- package/dist/src/view/gridView.js +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 +39 -5
- package/dist/src/view/paramMediator.d.ts.map +1 -1
- package/dist/src/view/paramMediator.js +120 -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 +37 -1
- package/dist/src/view/scaleResolution.d.ts +17 -15
- package/dist/src/view/scaleResolution.d.ts.map +1 -1
- package/dist/src/view/scaleResolution.js +70 -68
- 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 +8 -20
- package/dist/src/view/unitView.d.ts.map +1 -1
- package/dist/src/view/unitView.js +100 -102
- 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/viewUtils.d.ts +1 -1
- package/dist/src/view/viewUtils.d.ts.map +1 -1
- 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":""}
|