@genome-spy/core 0.48.1 → 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 +7485 -7097
- package/dist/bundle/index.js +124 -111
- package/dist/schema.json +838 -344
- package/dist/src/data/collector.d.ts +10 -8
- package/dist/src/data/collector.d.ts.map +1 -1
- package/dist/src/data/collector.js +131 -33
- 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/collector.test.js +55 -1
- 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.d.ts +1 -1
- package/dist/src/data/transforms/identifier.d.ts.map +1 -1
- package/dist/src/data/transforms/identifier.js +2 -2
- 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/identifier.test.js +23 -14
- 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 +29 -21
- package/dist/src/gl/dataToVertices.d.ts +5 -7
- package/dist/src/gl/dataToVertices.d.ts.map +1 -1
- package/dist/src/gl/dataToVertices.js +42 -30
- 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/picking.vertex.glsl.js +1 -1
- 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/animator.d.ts.map +1 -1
- package/dist/src/utils/animator.js +3 -1
- 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/inertia.d.ts.map +1 -1
- package/dist/src/utils/inertia.js +4 -0
- package/dist/src/utils/inputBinding.d.ts.map +1 -1
- package/dist/src/utils/inputBinding.js +4 -0
- package/dist/src/utils/iterateNestedMaps.d.ts +4 -3
- package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -1
- package/dist/src/utils/iterateNestedMaps.js +3 -2
- 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.d.ts +9 -0
- package/dist/src/utils/radixSort.d.ts.map +1 -0
- package/dist/src/utils/radixSort.js +130 -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/radixSort.test.js +51 -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
|
@@ -8,8 +8,8 @@ const sampleData = [
|
|
|
8
8
|
{ group: "b", choice: "y", value: 3 },
|
|
9
9
|
];
|
|
10
10
|
|
|
11
|
-
/** @type {import("
|
|
12
|
-
const
|
|
11
|
+
/** @type {import("../../spec/transform.js").StackParams} */
|
|
12
|
+
const baseParams = {
|
|
13
13
|
type: "stack",
|
|
14
14
|
field: "value",
|
|
15
15
|
groupby: ["group"],
|
|
@@ -23,7 +23,7 @@ const baseConf = {
|
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
*
|
|
26
|
-
* @param {import("
|
|
26
|
+
* @param {import("../../spec/transform.js").StackParams} params
|
|
27
27
|
* @param {any[]} data
|
|
28
28
|
*/
|
|
29
29
|
function transform(params, data) {
|
|
@@ -32,7 +32,7 @@ function transform(params, data) {
|
|
|
32
32
|
|
|
33
33
|
describe("Stack transform", () => {
|
|
34
34
|
test("No field", () => {
|
|
35
|
-
const conf = Object.assign({},
|
|
35
|
+
const conf = Object.assign({}, baseParams, {
|
|
36
36
|
field: undefined,
|
|
37
37
|
});
|
|
38
38
|
|
|
@@ -44,7 +44,7 @@ describe("Stack transform", () => {
|
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
test("Zero offset", () => {
|
|
47
|
-
expect(transform(
|
|
47
|
+
expect(transform(baseParams, sampleData)).toEqual([
|
|
48
48
|
{ group: "a", choice: "q", value: 1, z0: 0, z1: 1 },
|
|
49
49
|
{ group: "b", choice: "x", value: 1, z0: 0, z1: 1 },
|
|
50
50
|
{ group: "b", choice: "y", value: 3, z0: 1, z1: 4 },
|
|
@@ -52,7 +52,7 @@ describe("Stack transform", () => {
|
|
|
52
52
|
});
|
|
53
53
|
|
|
54
54
|
test("Normalize offset", () => {
|
|
55
|
-
const conf = Object.assign({},
|
|
55
|
+
const conf = Object.assign({}, baseParams, {
|
|
56
56
|
offset: "normalize",
|
|
57
57
|
});
|
|
58
58
|
|
|
@@ -64,7 +64,7 @@ describe("Stack transform", () => {
|
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
test("Center offset", () => {
|
|
67
|
-
const conf = Object.assign({},
|
|
67
|
+
const conf = Object.assign({}, baseParams, {
|
|
68
68
|
offset: "center",
|
|
69
69
|
});
|
|
70
70
|
|
|
@@ -76,7 +76,7 @@ describe("Stack transform", () => {
|
|
|
76
76
|
});
|
|
77
77
|
|
|
78
78
|
test("Descending sort", () => {
|
|
79
|
-
const conf = Object.assign({},
|
|
79
|
+
const conf = Object.assign({}, baseParams, {
|
|
80
80
|
sort: {
|
|
81
81
|
field: "value",
|
|
82
82
|
order: "descending",
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
3
|
+
* @param {import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>} channelDef
|
|
4
|
+
* @param {import("../view/paramMediator.js").default} paramMediator
|
|
5
|
+
* @returns {import("../types/encoder.js").Accessor}
|
|
6
|
+
*/
|
|
7
|
+
export function createAccessor(channel: import("../spec/channel.js").Channel, channelDef: import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>, paramMediator: import("../view/paramMediator.js").default): import("../types/encoder.js").Accessor;
|
|
8
|
+
/**
|
|
9
|
+
* Returns an array of acessors and their predicates. A returned array with
|
|
10
|
+
* a single element indicates that no conditions are present.
|
|
11
|
+
* The default accessor is always the last element in the array.
|
|
12
|
+
*
|
|
13
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
14
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
15
|
+
* @param {import("../view/paramMediator.js").default} paramMediator
|
|
16
|
+
*/
|
|
17
|
+
export function createConditionalAccessors(channel: import("../spec/channel.js").Channel, channelDef: import("../spec/channel.js").ChannelDef, paramMediator: import("../view/paramMediator.js").default): import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>[];
|
|
15
18
|
//# sourceMappingURL=accessor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessor.d.ts","sourceRoot":"","sources":["../../../src/encoder/accessor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accessor.d.ts","sourceRoot":"","sources":["../../../src/encoder/accessor.js"],"names":[],"mappings":"AAcA;;;;;GAKG;AACH,wCALW,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,oBAAoB,EAAE,UAAU,GAAG,OAAO,oBAAoB,EAAE,WAAW,CAAC,OAAO,oBAAoB,EAAE,UAAU,CAAC,iBAC3H,OAAO,0BAA0B,EAAE,OAAO,GACxC,OAAO,qBAAqB,EAAE,QAAQ,CAyFlD;AAED;;;;;;;;GAQG;AACH,oDAJW,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,oBAAoB,EAAE,UAAU,iBACvC,OAAO,0BAA0B,EAAE,OAAO,iFAgCpD"}
|
|
@@ -1,78 +1,149 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import {
|
|
2
|
+
isChannelDefWithScale,
|
|
3
|
+
isChannelWithScale,
|
|
4
|
+
isDatumDef,
|
|
5
|
+
isExprDef,
|
|
6
|
+
isFieldDef,
|
|
7
|
+
isFieldOrDatumDefWithCondition,
|
|
8
|
+
isValueDef,
|
|
9
|
+
isValueDefWithCondition,
|
|
10
|
+
} from "./encoder.js";
|
|
5
11
|
import { field } from "../utils/field.js";
|
|
12
|
+
import { isExprRef, makeConstantExprRef } from "../view/paramMediator.js";
|
|
13
|
+
import { makeSelectionTestExpression } from "../selection/selection.js";
|
|
6
14
|
|
|
7
|
-
|
|
15
|
+
/**
|
|
16
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
17
|
+
* @param {import("../spec/channel.js").ChannelDef | import("../spec/channel.js").Conditional<import("../spec/channel.js").ChannelDef>} channelDef
|
|
18
|
+
* @param {import("../view/paramMediator.js").default} paramMediator
|
|
19
|
+
* @returns {import("../types/encoder.js").Accessor}
|
|
20
|
+
*/
|
|
21
|
+
export function createAccessor(channel, channelDef, paramMediator) {
|
|
8
22
|
/**
|
|
9
|
-
* @typedef {import("../
|
|
23
|
+
* @typedef {import("../data/flowNode.js").Datum} Datum
|
|
24
|
+
* @typedef {import("../spec/channel.js").Scalar} Scalar
|
|
10
25
|
*/
|
|
11
|
-
constructor() {
|
|
12
|
-
/** @type {(function(import("../spec/channel.js").ChannelDef):Accessor)[]} */
|
|
13
|
-
this.accessorCreators = [];
|
|
14
|
-
|
|
15
|
-
this.register((channelDef) => {
|
|
16
|
-
if (isFieldDef(channelDef)) {
|
|
17
|
-
try {
|
|
18
|
-
const accessor = /** @type {Accessor} */ (
|
|
19
|
-
field(channelDef.field)
|
|
20
|
-
);
|
|
21
|
-
accessor.constant = false;
|
|
22
|
-
accessor.fields = accessorFields(accessor);
|
|
23
|
-
return accessor;
|
|
24
|
-
} catch (e) {
|
|
25
|
-
throw new Error(`Invalid field definition: ${e.message}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
this.register((channelDef) =>
|
|
31
|
-
isExprDef(channelDef)
|
|
32
|
-
? createExpressionAccessor(channelDef.expr)
|
|
33
|
-
: undefined
|
|
34
|
-
);
|
|
35
26
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const accessor = /** @type {Accessor} */ (c);
|
|
40
|
-
accessor.constant = true; // Can be optimized downstream
|
|
41
|
-
accessor.fields = [];
|
|
42
|
-
return accessor;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
27
|
+
if (!channel) {
|
|
28
|
+
// TODO: Don't call with an undefined channel
|
|
29
|
+
return;
|
|
45
30
|
}
|
|
46
31
|
|
|
47
32
|
/**
|
|
48
|
-
*
|
|
49
|
-
* @
|
|
33
|
+
* @param {(datum?: Datum) => Scalar} fn
|
|
34
|
+
* @returns {import("../types/encoder.js").Accessor<Scalar>}
|
|
50
35
|
*/
|
|
51
|
-
|
|
52
|
-
|
|
36
|
+
function asAccessor(fn) {
|
|
37
|
+
const a = /** @type {import("../types/encoder.js").Accessor} */ (fn);
|
|
38
|
+
a.fields ??= [];
|
|
39
|
+
a.constant = a.fields.length === 0;
|
|
40
|
+
a.channelDef = channelDef;
|
|
41
|
+
a.channel = channel;
|
|
42
|
+
|
|
43
|
+
a.scaleChannel =
|
|
44
|
+
((isChannelDefWithScale(channelDef) &&
|
|
45
|
+
channelDef.resolutionChannel) ??
|
|
46
|
+
(isChannelWithScale(channel) && channel)) ||
|
|
47
|
+
undefined;
|
|
48
|
+
|
|
49
|
+
if ("param" in channelDef) {
|
|
50
|
+
a.predicate = paramMediator.createExpression(
|
|
51
|
+
makeSelectionTestExpression(channelDef)
|
|
52
|
+
);
|
|
53
|
+
a.predicate.param = channelDef.param;
|
|
54
|
+
a.predicate.empty = channelDef.empty ?? true;
|
|
55
|
+
} else {
|
|
56
|
+
a.predicate = makeConstantExprRef(true); // Always true (default accessor)
|
|
57
|
+
a.predicate.empty = false;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
a.asNumberAccessor = () =>
|
|
61
|
+
/** @type {import("../types/encoder.js").Accessor<number>} */ (a);
|
|
62
|
+
|
|
63
|
+
return a;
|
|
53
64
|
}
|
|
54
65
|
|
|
55
66
|
/**
|
|
56
67
|
*
|
|
57
|
-
* @param {import("../spec/
|
|
68
|
+
* @param {Scalar | import("../spec/parameter.js").ExprRef} potentialExprRef
|
|
58
69
|
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
70
|
+
function potentialExprRefToAccessor(potentialExprRef) {
|
|
71
|
+
if (isExprRef(potentialExprRef)) {
|
|
72
|
+
const a = asAccessor(
|
|
73
|
+
paramMediator.createExpression(potentialExprRef.expr)
|
|
74
|
+
);
|
|
75
|
+
if (a.fields.length > 0) {
|
|
76
|
+
throw new Error(
|
|
77
|
+
"Expression in DatumDef/ValueDef cannot access data fields: " +
|
|
78
|
+
potentialExprRef.expr
|
|
79
|
+
);
|
|
64
80
|
}
|
|
81
|
+
return a;
|
|
82
|
+
} else {
|
|
83
|
+
const v = potentialExprRef;
|
|
84
|
+
return asAccessor(() => v);
|
|
65
85
|
}
|
|
66
86
|
}
|
|
87
|
+
|
|
88
|
+
if (isFieldDef(channelDef)) {
|
|
89
|
+
try {
|
|
90
|
+
return asAccessor(field(channelDef.field));
|
|
91
|
+
} catch (e) {
|
|
92
|
+
throw new Error(`Invalid field definition: ${e.message}`);
|
|
93
|
+
}
|
|
94
|
+
} else if (isExprDef(channelDef)) {
|
|
95
|
+
// TODO: If parameters change, the data should be re-evaluated
|
|
96
|
+
return asAccessor(paramMediator.createExpression(channelDef.expr));
|
|
97
|
+
} else if (isDatumDef(channelDef)) {
|
|
98
|
+
return potentialExprRefToAccessor(channelDef.datum);
|
|
99
|
+
} else if (isValueDef(channelDef)) {
|
|
100
|
+
return potentialExprRefToAccessor(channelDef.value);
|
|
101
|
+
} else {
|
|
102
|
+
throw new Error(
|
|
103
|
+
`Invalid channel definition: ${JSON.stringify(
|
|
104
|
+
channelDef
|
|
105
|
+
)}. Cannot create an accessor for channel ${channel}!`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
67
108
|
}
|
|
68
109
|
|
|
69
110
|
/**
|
|
70
|
-
*
|
|
111
|
+
* Returns an array of acessors and their predicates. A returned array with
|
|
112
|
+
* a single element indicates that no conditions are present.
|
|
113
|
+
* The default accessor is always the last element in the array.
|
|
114
|
+
*
|
|
115
|
+
* @param {import("../spec/channel.js").Channel} channel
|
|
116
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
117
|
+
* @param {import("../view/paramMediator.js").default} paramMediator
|
|
71
118
|
*/
|
|
72
|
-
function
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
119
|
+
export function createConditionalAccessors(channel, channelDef, paramMediator) {
|
|
120
|
+
/** @type {import("../types/encoder.js").Accessor[]} */
|
|
121
|
+
const conditionalAccessors = [];
|
|
122
|
+
|
|
123
|
+
// TODO: Support an array of conditions
|
|
124
|
+
if (
|
|
125
|
+
isFieldOrDatumDefWithCondition(channelDef) ||
|
|
126
|
+
isValueDefWithCondition(channelDef)
|
|
127
|
+
) {
|
|
128
|
+
const conditions = Array.isArray(channelDef.condition)
|
|
129
|
+
? channelDef.condition
|
|
130
|
+
: [channelDef.condition];
|
|
131
|
+
|
|
132
|
+
for (const condition of conditions) {
|
|
133
|
+
conditionalAccessors.push(
|
|
134
|
+
createAccessor(channel, condition, paramMediator)
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
conditionalAccessors.push(
|
|
140
|
+
createAccessor(channel, channelDef, paramMediator)
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
if (conditionalAccessors.filter((a) => !a.constant).length > 1) {
|
|
144
|
+
throw new Error(
|
|
145
|
+
"Only one accessor can be non-constant. Channel: " + channel
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
return conditionalAccessors;
|
|
78
149
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessor.test.d.ts","sourceRoot":"","sources":["../../../src/encoder/accessor.test.js"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { expect, test } from "vitest";
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import ParamMediator from "../view/paramMediator.js";
|
|
3
|
+
import { createAccessor, createConditionalAccessors } from "./accessor.js";
|
|
4
|
+
import { UNIQUE_ID_KEY } from "../data/transforms/identifier.js";
|
|
5
|
+
import { createSinglePointSelection } from "../selection/selection.js";
|
|
5
6
|
|
|
6
7
|
const datum = {
|
|
7
8
|
a: 1,
|
|
@@ -9,39 +10,152 @@ const datum = {
|
|
|
9
10
|
"x.c": 3,
|
|
10
11
|
};
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
describe("Accessors for different encoding types", () => {
|
|
14
|
+
test("Creates a field accessor", () => {
|
|
15
|
+
const a = createAccessor("x", { field: "a" }, new ParamMediator());
|
|
16
|
+
expect(a(datum)).toEqual(1);
|
|
17
|
+
expect(a.constant).toBeFalsy();
|
|
18
|
+
expect(a.fields).toEqual(["a"]);
|
|
19
|
+
});
|
|
18
20
|
|
|
19
|
-
test("Creates an expression accessor", () => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
test("Creates an expression accessor", () => {
|
|
22
|
+
const a = createAccessor(
|
|
23
|
+
"x",
|
|
24
|
+
{ expr: `datum.b + datum['x\.c']` },
|
|
25
|
+
new ParamMediator()
|
|
26
|
+
);
|
|
27
|
+
expect(a(datum)).toEqual(5);
|
|
28
|
+
expect(a.constant).toBeFalsy();
|
|
29
|
+
expect(a.fields.sort()).toEqual(["b", "x.c"].sort());
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
test("Creates a constant accessor", () => {
|
|
33
|
+
const a = createAccessor("x", { datum: 0 }, new ParamMediator());
|
|
34
|
+
expect(a(datum)).toEqual(0);
|
|
35
|
+
expect(a.constant).toBeTruthy();
|
|
36
|
+
expect(a.fields).toEqual([]);
|
|
37
|
+
});
|
|
25
38
|
|
|
26
|
-
test("Creates a
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
39
|
+
test("Creates a value accessor", () => {
|
|
40
|
+
const a = createAccessor("x", { value: 123 }, new ParamMediator());
|
|
41
|
+
expect(a(datum)).toEqual(123);
|
|
42
|
+
expect(a.constant).toBeTruthy();
|
|
43
|
+
expect(a.fields).toEqual([]);
|
|
44
|
+
});
|
|
31
45
|
});
|
|
32
46
|
|
|
33
|
-
test("
|
|
34
|
-
expect(
|
|
47
|
+
test("Throws on incomplete encoding spec", () => {
|
|
48
|
+
expect(() => createAccessor("x", {}, new ParamMediator())).toThrow();
|
|
35
49
|
});
|
|
36
50
|
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
51
|
+
describe("createConditionalAccessors", () => {
|
|
52
|
+
const data = [
|
|
53
|
+
{ a: 1, b: 2, [UNIQUE_ID_KEY]: 0 },
|
|
54
|
+
{ a: 3, b: 4, [UNIQUE_ID_KEY]: 1 },
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
const paramMediator = new ParamMediator();
|
|
58
|
+
paramMediator.allocateSetter("p", createSinglePointSelection(data[0]));
|
|
59
|
+
|
|
60
|
+
const a = createConditionalAccessors(
|
|
61
|
+
"x",
|
|
62
|
+
{
|
|
63
|
+
field: "a",
|
|
64
|
+
type: "quantitative",
|
|
65
|
+
condition: { param: "p", value: 123 },
|
|
66
|
+
},
|
|
67
|
+
paramMediator
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
const b = createConditionalAccessors(
|
|
71
|
+
"x",
|
|
72
|
+
{
|
|
73
|
+
field: "a",
|
|
74
|
+
type: "quantitative",
|
|
75
|
+
condition: [
|
|
76
|
+
{ param: "p", value: 123 },
|
|
77
|
+
{ param: "p", value: 234 },
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
paramMediator
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
const c = createConditionalAccessors(
|
|
84
|
+
"x",
|
|
85
|
+
{
|
|
86
|
+
value: 123,
|
|
87
|
+
condition: {
|
|
88
|
+
param: "p",
|
|
89
|
+
field: "a",
|
|
90
|
+
type: "quantitative",
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
paramMediator
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
// TODO: Add more combinations of datum, field, expr, etc
|
|
97
|
+
|
|
98
|
+
test("Creates a correct number of accessors", () => {
|
|
99
|
+
expect(a.length).toBe(2);
|
|
100
|
+
expect(b.length).toBe(3);
|
|
101
|
+
expect(c.length).toBe(2);
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Conditional accessor
|
|
105
|
+
test("Conditional accessor accesses the correct field", () => {
|
|
106
|
+
expect(a[0](data[0])).toEqual(123);
|
|
107
|
+
expect(a[0].predicate.param).toEqual("p");
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
test("Conditional predicate is true only for the selected datum", () => {
|
|
111
|
+
expect(a[0].predicate(data[0])).toBeTruthy();
|
|
112
|
+
expect(a[0].predicate(data[1])).toBeFalsy();
|
|
44
113
|
});
|
|
45
114
|
|
|
46
|
-
|
|
115
|
+
// Default accessor
|
|
116
|
+
test("Default accessor accesses the correct field", () => {
|
|
117
|
+
expect(a[1](data[0])).toEqual(1);
|
|
118
|
+
expect(a[1].predicate.param).toBeFalsy();
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
test("Default predicate is true for all data", () => {
|
|
122
|
+
expect(a[1].predicate(data[0])).toBeTruthy();
|
|
123
|
+
expect(a[1].predicate(data[1])).toBeTruthy();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("Throws if multiple non-constant accessors are used", () => {
|
|
127
|
+
expect(() =>
|
|
128
|
+
createConditionalAccessors(
|
|
129
|
+
"x",
|
|
130
|
+
{
|
|
131
|
+
field: "a",
|
|
132
|
+
type: "quantitative",
|
|
133
|
+
condition: {
|
|
134
|
+
param: "p",
|
|
135
|
+
// @ts-expect-error
|
|
136
|
+
field: "b",
|
|
137
|
+
type: "quantitative",
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
paramMediator
|
|
141
|
+
)
|
|
142
|
+
).toThrow();
|
|
143
|
+
|
|
144
|
+
expect(() =>
|
|
145
|
+
createConditionalAccessors(
|
|
146
|
+
"x",
|
|
147
|
+
{
|
|
148
|
+
field: "a",
|
|
149
|
+
type: "quantitative",
|
|
150
|
+
condition: {
|
|
151
|
+
param: "p",
|
|
152
|
+
// @ts-expect-error
|
|
153
|
+
expr: "datum.b",
|
|
154
|
+
type: "quantitative",
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
paramMediator
|
|
158
|
+
)
|
|
159
|
+
).toThrow();
|
|
160
|
+
});
|
|
47
161
|
});
|
|
@@ -3,20 +3,23 @@
|
|
|
3
3
|
*
|
|
4
4
|
* TODO: This method should have a test. But how to mock Mark...
|
|
5
5
|
*
|
|
6
|
-
* @param {import("../
|
|
7
|
-
* @param {import("../spec/channel.js").Encoding}
|
|
6
|
+
* @param {import("../view/unitView.js").default} unitView
|
|
7
|
+
* @param {import("../spec/channel.js").Encoding} encoding
|
|
8
8
|
* @returns {Partial<Record<Channel, Encoder>>}
|
|
9
9
|
*/
|
|
10
|
-
export default function createEncoders(
|
|
10
|
+
export default function createEncoders(unitView: import("../view/unitView.js").default, encoding: import("../spec/channel.js").Encoding): Partial<Record<import("../spec/channel.js").Channel, import("../types/encoder.js").Encoder>>;
|
|
11
|
+
/**
|
|
12
|
+
* @param {import("../types/encoder.js").Accessor[]} accessors
|
|
13
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
14
|
+
* @returns {Encoder}
|
|
15
|
+
*/
|
|
16
|
+
export function createSimpleOrConditionalEncoder(accessors: import("../types/encoder.js").Accessor[], scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
|
|
11
17
|
/**
|
|
12
|
-
* @param {import("../marks/mark.js").default} mark
|
|
13
|
-
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
14
|
-
* @param {any} scale
|
|
15
18
|
* @param {Accessor} accessor
|
|
16
|
-
* @param {
|
|
19
|
+
* @param {(channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale} scaleSource
|
|
17
20
|
* @returns {Encoder}
|
|
18
21
|
*/
|
|
19
|
-
export function createEncoder(
|
|
22
|
+
export function createEncoder(accessor: import("../types/encoder.js").Accessor<import("../spec/channel.js").Scalar>, scaleSource: (channel: import("../spec/channel.js").ChannelWithScale) => import("../types/encoder.js").VegaScale): import("../types/encoder.js").Encoder;
|
|
20
23
|
/**
|
|
21
24
|
* TODO: Move to a more generic place
|
|
22
25
|
*
|
|
@@ -26,14 +29,14 @@ export function createEncoder(mark: import("../marks/mark.js").default, channelD
|
|
|
26
29
|
export function isValueDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").ValueDef<import("../spec/channel.js").Scalar>;
|
|
27
30
|
/**
|
|
28
31
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
29
|
-
* @returns {channelDef is import("../spec/channel.js").FieldDefBase
|
|
32
|
+
* @returns {channelDef is import("../spec/channel.js").FieldDefBase}
|
|
30
33
|
*/
|
|
31
|
-
export function isFieldDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").FieldDefBase
|
|
34
|
+
export function isFieldDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").FieldDefBase;
|
|
32
35
|
/**
|
|
33
36
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
34
37
|
* @returns {channelDef is import("../spec/channel.js").DatumDef}
|
|
35
38
|
*/
|
|
36
|
-
export function isDatumDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").DatumDef
|
|
39
|
+
export function isDatumDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").DatumDef<import("../spec/parameter.js").ExprRef | import("../spec/channel.js").Scalar>;
|
|
37
40
|
/**
|
|
38
41
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
39
42
|
* @returns {channelDef is import("../spec/channel.js").ChannelDefWithScale}
|
|
@@ -43,7 +46,7 @@ export function isChannelDefWithScale(channelDef: import("../spec/channel.js").C
|
|
|
43
46
|
* @param {import("../view/unitView.js").default} view
|
|
44
47
|
* @param {import("../spec/channel.js").Channel} channel
|
|
45
48
|
*/
|
|
46
|
-
export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").
|
|
49
|
+
export function getChannelDefWithScale(view: import("../view/unitView.js").default, channel: import("../spec/channel.js").Channel): import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, string> | import("../spec/channel.js").PositionFieldDef | import("../spec/channel.js").PositionDatumDef | import("../spec/channel.js").ChromPosDef | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").Type>, number> | import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").MarkPropFieldDef<import("../spec/channel.js").TypeForShape>, string> | (import("../spec/channel.js").FieldDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | (import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").DatumDef<import("../spec/parameter.js").ExprRef | import("../spec/channel.js").Scalar> & import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type> & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").XIndexDef) | (import("../spec/channel.js").ChromPosDefBase & import("../spec/channel.js").TitleMixins & import("../spec/channel.js").PositionMixins & import("../spec/channel.js").TypeMixins<"locus"> & import("../spec/channel.js").ScaleMixins & import("../spec/channel.js").XIndexDef);
|
|
47
50
|
/**
|
|
48
51
|
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
49
52
|
* @returns {channelDef is import("../spec/channel.js").TypeMixins<import("../spec/channel.js").Type>}
|
|
@@ -59,6 +62,16 @@ export function isChromPosDef(channelDef: import("../spec/channel.js").ChannelDe
|
|
|
59
62
|
* @returns {channelDef is import("../spec/channel.js").ExprDef}
|
|
60
63
|
*/
|
|
61
64
|
export function isExprDef(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").ExprDef;
|
|
65
|
+
/**
|
|
66
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
67
|
+
* @returns {channelDef is import("../spec/channel.js").FieldOrDatumDefWithCondition}
|
|
68
|
+
*/
|
|
69
|
+
export function isFieldOrDatumDefWithCondition(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").FieldOrDatumDefWithCondition<import("../spec/channel.js").FieldDef<any> | import("../spec/channel.js").DatumDef<any>, import("../spec/channel.js").Value>;
|
|
70
|
+
/**
|
|
71
|
+
* @param {import("../spec/channel.js").ChannelDef} channelDef
|
|
72
|
+
* @returns {channelDef is import("../spec/channel.js").ValueDefWithCondition}
|
|
73
|
+
*/
|
|
74
|
+
export function isValueDefWithCondition(channelDef: import("../spec/channel.js").ChannelDef): channelDef is import("../spec/channel.js").ValueDefWithCondition<import("../spec/channel.js").Value>;
|
|
62
75
|
/**
|
|
63
76
|
* @param {import("../spec/channel.js").Channel} channel
|
|
64
77
|
* @returns {channel is import("../spec/channel.js").PrimaryPositionalChannel}
|
|
@@ -92,7 +105,7 @@ export function getPrimaryChannel(channel: import("../spec/channel.js").Channel)
|
|
|
92
105
|
*
|
|
93
106
|
* @param {import("../spec/channel.js").Channel} channel
|
|
94
107
|
*/
|
|
95
|
-
export function getChannelWithSecondarys(channel: import("../spec/channel.js").Channel):
|
|
108
|
+
export function getChannelWithSecondarys(channel: import("../spec/channel.js").Channel): ("search" | "fill" | "stroke" | "angle" | "sample" | "color" | "fillOpacity" | "opacity" | "strokeOpacity" | "strokeWidth" | "text" | "size" | "x" | "y" | "x2" | "y2" | "shape" | "dx" | "dy" | "uniqueId" | "facetIndex" | "semanticScore")[];
|
|
96
109
|
/**
|
|
97
110
|
* @param {import("../spec/channel.js").Channel} channel
|
|
98
111
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../../src/encoder/encoder.js"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,iDAJW,OAAO,qBAAqB,EAAE,OAAO,YACrC,OAAO,oBAAoB,EAAE,QAAQ,gGAgC/C;AAED;;;;GAIG;AACH,4DAJW,OAAO,qBAAqB,EAAE,QAAQ,EAAE,yBAC9B,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,qBAAqB,EAAE,SAAS,yCAqC7G;AAED;;;;GAIG;AACH,4IAHqB,OAAO,oBAAoB,EAAE,gBAAgB,KAAK,OAAO,qBAAqB,EAAE,SAAS,yCAqC7G;AAED;;;;;GAKG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,4FAKjD;AAED;;;GAGG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,2DAKjD;AAED;;;GAGG;AACH,uCAHW,OAAO,oBAAoB,EAAE,UAAU,qIAKjD;AAED;;;GAGG;AACH,kDAHW,OAAO,oBAAoB,EAAE,UAAU,kEAWjD;AAED;;;GAGG;AACH,6CAHW,OAAO,qBAAqB,EAAE,OAAO,WACrC,OAAO,oBAAoB,EAAE,OAAO,s9CAS9C;AAED;;;GAGG;AACH,iDAHW,OAAO,oBAAoB,EAAE,UAAU,4FAKjD;AAED;;;GAGG;AACH,0CAHW,OAAO,oBAAoB,EAAE,UAAU,0DAKjD;AAED;;;GAGG;AACH,sCAHW,OAAO,oBAAoB,EAAE,UAAU,sDAKjD;AAED;;;GAGG;AACH,2DAHW,OAAO,oBAAoB,EAAE,UAAU,wMAQjD;AAED;;;GAGG;AACH,oDAHW,OAAO,oBAAoB,EAAE,UAAU,wGAKjD;AAoBD;;;GAGG;AACH,oDAHW,OAAO,oBAAoB,EAAE,OAAO,oEAM9C;AAED;;;GAGG;AACH,6CAHW,OAAO,oBAAoB,EAAE,OAAO,6DAM9C;AAqBD;;;GAGG;AACH,4CAFW,MAAM,WAIhB;AAED;;;;GAIG;AACH,oDAFW,OAAO,oBAAoB,EAAE,OAAO,2DAS9C;AAED;;;;;GAKG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,wCAI9C;AAED;;;;GAIG;AACH,kDAFW,OAAO,oBAAoB,EAAE,OAAO,mPAM9C;AAED;;GAEG;AACH,wCAFW,OAAO,oBAAoB,EAAE,OAAO,WAI9C;AAED;;;;GAIG;AACH,2CAFW,OAAO,oBAAoB,EAAE,OAAO,WAI9C;AAED;;;GAGG;AACH,4CAHW,OAAO,oBAAoB,EAAE,OAAO,4DAsB9C;AAED;;;;;GAKG;AACH,0CAHW,OAAO,oBAAoB,EAAE,OAAO,GAClC,GAAG,EAAE,CAsBjB;AAED;;;GAGG;AACH,gDAHW,OAAO,oBAAoB,EAAE,OAAO,UACzB,GAAG,KAAE,MAAM,CAmBhC;AA5LD;;GAEG;AACH,wCAFU,OAAO,oBAAoB,EAAE,wBAAwB,EAAE,CAEb;AAEpD;;GAEG;AACH,0CAFU,OAAO,oBAAoB,EAAE,0BAA0B,EAAE,CAEX;AAExD;;GAEG;AACH,iCAFU,OAAO,oBAAoB,EAAE,iBAAiB,EAAE,CAKxD;AAoBF;;;;GAIG;AACH,gCAFU,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,oBAAoB,EAAE,0BAA0B,CAAC,CAAC,CAKtH;AAEF;;;;GAIG;AACH,8BAFU,QAAQ,OAAO,OAAO,oBAAoB,EAAE,OAAO,EAAE,OAAO,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAInG"}
|