@genome-spy/core 0.46.0 → 0.46.1
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 +3258 -3233
- package/dist/bundle/index.js +82 -82
- package/dist/src/data/flowNode.d.ts +22 -7
- package/dist/src/data/flowNode.d.ts.map +1 -1
- package/dist/src/data/flowNode.js +29 -6
- package/dist/src/data/flowTestUtils.d.ts +5 -0
- package/dist/src/data/flowTestUtils.d.ts.map +1 -1
- package/dist/src/data/flowTestUtils.js +11 -0
- package/dist/src/data/transforms/clone.d.ts +1 -0
- package/dist/src/data/transforms/clone.d.ts.map +1 -1
- package/dist/src/data/transforms/coverage.d.ts +4 -1
- package/dist/src/data/transforms/coverage.d.ts.map +1 -1
- package/dist/src/data/transforms/coverage.js +44 -31
- package/dist/src/data/transforms/filter.d.ts +2 -1
- package/dist/src/data/transforms/filter.d.ts.map +1 -1
- package/dist/src/data/transforms/filter.js +4 -2
- package/dist/src/data/transforms/filter.test.js +2 -6
- package/dist/src/data/transforms/formula.d.ts +2 -1
- package/dist/src/data/transforms/formula.d.ts.map +1 -1
- package/dist/src/data/transforms/formula.js +4 -2
- package/dist/src/data/transforms/formula.test.js +9 -9
- package/package.json +2 -2
|
@@ -23,6 +23,9 @@ export const BEHAVIOR_MODIFIES: number;
|
|
|
23
23
|
* The collected data objects must not be modified by downstream transforms.
|
|
24
24
|
*/
|
|
25
25
|
export const BEHAVIOR_COLLECTS: number;
|
|
26
|
+
/**
|
|
27
|
+
* @typedef {{paramMediator: import("../view/paramMediator.js").default}} ParamMediatorProvider
|
|
28
|
+
*/
|
|
26
29
|
/**
|
|
27
30
|
* This is heavily inspired by Vega's and Vega-Lite's data flow system.
|
|
28
31
|
*
|
|
@@ -30,6 +33,17 @@ export const BEHAVIOR_COLLECTS: number;
|
|
|
30
33
|
* @typedef {Datum[]} Data
|
|
31
34
|
*/
|
|
32
35
|
export default class FlowNode {
|
|
36
|
+
/**
|
|
37
|
+
* @param {ParamMediatorProvider} [paramMediatorProvider]
|
|
38
|
+
*/
|
|
39
|
+
constructor(paramMediatorProvider?: ParamMediatorProvider);
|
|
40
|
+
/**
|
|
41
|
+
* An object that provides a paramMediator. (Most likely a View)
|
|
42
|
+
*
|
|
43
|
+
* @type {ParamMediatorProvider}
|
|
44
|
+
* @protected
|
|
45
|
+
*/
|
|
46
|
+
protected paramMediatorProvider: ParamMediatorProvider;
|
|
33
47
|
get behavior(): number;
|
|
34
48
|
/** @type {FlowNode[]} */
|
|
35
49
|
children: FlowNode[];
|
|
@@ -47,16 +61,12 @@ export default class FlowNode {
|
|
|
47
61
|
* built and optimized. Must be called before any data are to be propagated.
|
|
48
62
|
*/
|
|
49
63
|
initialize(): void;
|
|
50
|
-
/**
|
|
51
|
-
* Dynamically updates the propagator method to allow the JavaScript engine
|
|
52
|
-
* to employ optimizations such as inlining.
|
|
53
|
-
*/
|
|
54
|
-
_updatePropagator(): void;
|
|
55
64
|
/**
|
|
56
65
|
*
|
|
57
66
|
* @param {any} datum
|
|
67
|
+
* @protected
|
|
58
68
|
*/
|
|
59
|
-
_propagate(datum: any): void;
|
|
69
|
+
protected _propagate(datum: any): void;
|
|
60
70
|
/**
|
|
61
71
|
*
|
|
62
72
|
* @param {FlowNode} parent
|
|
@@ -124,9 +134,14 @@ export default class FlowNode {
|
|
|
124
134
|
/**
|
|
125
135
|
* Repropagates the stored data. If this node has no stored data,
|
|
126
136
|
* find the nearest ancestor that has and repropagate from there.
|
|
137
|
+
* @protected
|
|
127
138
|
*/
|
|
128
|
-
repropagate(): void;
|
|
139
|
+
protected repropagate(): void;
|
|
140
|
+
#private;
|
|
129
141
|
}
|
|
142
|
+
export type ParamMediatorProvider = {
|
|
143
|
+
paramMediator: import("../view/paramMediator.js").default;
|
|
144
|
+
};
|
|
130
145
|
/**
|
|
131
146
|
* This is heavily inspired by Vega's and Vega-Lite's data flow system.
|
|
132
147
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowNode.d.ts","sourceRoot":"","sources":["../../../src/data/flowNode.js"],"names":[],"mappings":"AAgTA;;;GAGG;AACH,uCAHW,OAAO,uBAAuB,EAAE,SAAS,0DAKnD;AAED;;;GAGG;AACH,wCAHW,OAAO,uBAAuB,EAAE,SAAS,2DAKnD;AA5TD;;;GAGG;AACH,qCAAsC;AAEtC;;;GAGG;AACH,uCAAwC;AAExC;;;GAGG;AACH,uCAAwC;AAExC;;GAEG;AAEH;;;;;GAKG;AACH;IAaI;;OAEG;IACH,oCAFW,qBAAqB,EAa/B;IA1BD;;;;;OAKG;IACH,iCAHU,qBAAqB,CAGF;IAE7B,uBAEC;IAQG,yBAAyB;IACzB,UADW,QAAQ,EAAE,CACH;IAElB,uBAAuB;IACvB,QADW,QAAQ,CACI;IAEvB,2CAA2C;IAC3C,mBAAsB;IAG1B;;;OAGG;IACH,cAMC;IAED;;;OAGG;IACH,mBAEC;IAyND;;;;OAIG;IACH,4BAHW,GAAG,QAKb;IA9MD;;;OAGG;IACH,kBAFW,QAAQ,QAIlB;IAED;;;OAGG;IACH,gBAFW,QAAQ,QAUlB;IAED;;OAEG;IACH,YAFW,QAAQ,QAQlB;IAED;;OAEG;IACH,6BAFW,QAAQ,QAMlB;IAED;;OAEG;IACH,0BAFW,QAAQ,QAalB;IAED;;;OAGG;IACH,mBAFW,QAAQ,QAWlB;IAED;;OAEG;IACH,eAiBC;IAED,kBAEC;IAED,uBAEC;IAED,sBAEC;IAED;;;;OAIG;IACH,eAFW,QAAU,QAAQ,KAAE,IAAI,CAAC,GAAG;QAAE,aAAa,CAAC,SAAW,QAAQ,KAAE,IAAI,CAAA;KAAC,QAchF;IAED;;;OAGG;IACH,wBAHW,MAAM,GACJ,MAAM,CAWlB;IAED;;;OAGG;IACH,cAFW,KAAK,QAKf;IAED,iBAMC;IAED;;;;OAIG;IACH,sBAFW,OAAO,uBAAuB,EAAE,SAAS,QAMnD;IAED;;;OAGG;IACH,0EASC;IAED;;;;OAIG;IACH,8BAQC;;CAUJ;oCAzRY;IAAC,aAAa,EAAE,OAAO,0BAA0B,EAAE,OAAO,CAAA;CAAC;;;;oBAM3D,OAAO,MAAM,EAAE,GAAG,CAAC;;;;mBACnB,KAAK,EAAE"}
|
|
@@ -18,6 +18,10 @@ export const BEHAVIOR_MODIFIES = 1 << 1;
|
|
|
18
18
|
*/
|
|
19
19
|
export const BEHAVIOR_COLLECTS = 1 << 2;
|
|
20
20
|
|
|
21
|
+
/**
|
|
22
|
+
* @typedef {{paramMediator: import("../view/paramMediator.js").default}} ParamMediatorProvider
|
|
23
|
+
*/
|
|
24
|
+
|
|
21
25
|
/**
|
|
22
26
|
* This is heavily inspired by Vega's and Vega-Lite's data flow system.
|
|
23
27
|
*
|
|
@@ -25,11 +29,24 @@ export const BEHAVIOR_COLLECTS = 1 << 2;
|
|
|
25
29
|
* @typedef {Datum[]} Data
|
|
26
30
|
*/
|
|
27
31
|
export default class FlowNode {
|
|
32
|
+
/**
|
|
33
|
+
* An object that provides a paramMediator. (Most likely a View)
|
|
34
|
+
*
|
|
35
|
+
* @type {ParamMediatorProvider}
|
|
36
|
+
* @protected
|
|
37
|
+
*/
|
|
38
|
+
paramMediatorProvider = null;
|
|
39
|
+
|
|
28
40
|
get behavior() {
|
|
29
41
|
return 0;
|
|
30
42
|
}
|
|
31
43
|
|
|
32
|
-
|
|
44
|
+
/**
|
|
45
|
+
* @param {ParamMediatorProvider} [paramMediatorProvider]
|
|
46
|
+
*/
|
|
47
|
+
constructor(paramMediatorProvider) {
|
|
48
|
+
this.paramMediatorProvider = paramMediatorProvider;
|
|
49
|
+
|
|
33
50
|
/** @type {FlowNode[]} */
|
|
34
51
|
this.children = [];
|
|
35
52
|
|
|
@@ -64,7 +81,7 @@ export default class FlowNode {
|
|
|
64
81
|
* Dynamically updates the propagator method to allow the JavaScript engine
|
|
65
82
|
* to employ optimizations such as inlining.
|
|
66
83
|
*/
|
|
67
|
-
|
|
84
|
+
#updatePropagator() {
|
|
68
85
|
this._propagate = Function(
|
|
69
86
|
"children",
|
|
70
87
|
range(this.children.length)
|
|
@@ -94,7 +111,7 @@ export default class FlowNode {
|
|
|
94
111
|
}
|
|
95
112
|
this.children.push(child);
|
|
96
113
|
child.setParent(this);
|
|
97
|
-
this
|
|
114
|
+
this.#updatePropagator();
|
|
98
115
|
return this;
|
|
99
116
|
}
|
|
100
117
|
|
|
@@ -129,7 +146,7 @@ export default class FlowNode {
|
|
|
129
146
|
|
|
130
147
|
newParent.parent = this.parent;
|
|
131
148
|
this.parent.children[this.parent.children.indexOf(this)] = newParent;
|
|
132
|
-
this.parent
|
|
149
|
+
this.parent.#updatePropagator();
|
|
133
150
|
this.parent = undefined;
|
|
134
151
|
newParent.addChild(this);
|
|
135
152
|
}
|
|
@@ -143,7 +160,7 @@ export default class FlowNode {
|
|
|
143
160
|
if (index > -1) {
|
|
144
161
|
this.children.splice(index, 1);
|
|
145
162
|
child.parent = undefined;
|
|
146
|
-
this
|
|
163
|
+
this.#updatePropagator();
|
|
147
164
|
} else {
|
|
148
165
|
throw new Error("Trying to remove an unknown child node!");
|
|
149
166
|
}
|
|
@@ -162,7 +179,7 @@ export default class FlowNode {
|
|
|
162
179
|
const child = this.children[0];
|
|
163
180
|
child.setParent(this.parent);
|
|
164
181
|
this.parent.children[this.parent.children.indexOf(this)] = child;
|
|
165
|
-
this.parent
|
|
182
|
+
this.parent.#updatePropagator();
|
|
166
183
|
this.setParent(undefined);
|
|
167
184
|
this.children.length = 0;
|
|
168
185
|
} else {
|
|
@@ -250,6 +267,10 @@ export default class FlowNode {
|
|
|
250
267
|
* @protected
|
|
251
268
|
*/
|
|
252
269
|
get paramMediator() {
|
|
270
|
+
if (this.paramMediatorProvider) {
|
|
271
|
+
return this.paramMediatorProvider.paramMediator;
|
|
272
|
+
}
|
|
273
|
+
|
|
253
274
|
if (!this.parent) {
|
|
254
275
|
throw new Error("Cannot find paramMediator!");
|
|
255
276
|
}
|
|
@@ -259,6 +280,7 @@ export default class FlowNode {
|
|
|
259
280
|
/**
|
|
260
281
|
* Repropagates the stored data. If this node has no stored data,
|
|
261
282
|
* find the nearest ancestor that has and repropagate from there.
|
|
283
|
+
* @protected
|
|
262
284
|
*/
|
|
263
285
|
repropagate() {
|
|
264
286
|
if (this.parent) {
|
|
@@ -273,6 +295,7 @@ export default class FlowNode {
|
|
|
273
295
|
/**
|
|
274
296
|
*
|
|
275
297
|
* @param {any} datum
|
|
298
|
+
* @protected
|
|
276
299
|
*/
|
|
277
300
|
_propagate(datum) {
|
|
278
301
|
// Implementation is set dynamically in add/removeChild
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flowTestUtils.d.ts","sourceRoot":"","sources":["../../../src/data/flowTestUtils.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"flowTestUtils.d.ts","sourceRoot":"","sources":["../../../src/data/flowTestUtils.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,6CAFa,OAAO,eAAe,EAAE,qBAAqB,CAMzD;AAED;;;;GAIG;AACH,sCAHW,OAAO,eAAe,EAAE,OAAO,QAC/B,GAAG,EAAE,mCAcf;AAED;;GAEG;AACH;IACI;;;OAGG;IACH,kBAFW,GAAG,EAAE,EAKf;IADG,YAAgB;IAGpB,iBAMC;CACJ;AAED;;GAEG;AACH;IACI;;;OAGG;IACH,eAFW,MAAM,EAWhB;CACJ;qBAvEoB,eAAe"}
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
+
import ParamMediator from "../view/paramMediator.js";
|
|
1
2
|
import Collector from "./collector.js";
|
|
2
3
|
import FlowNode from "./flowNode.js";
|
|
3
4
|
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @returns {import("./flowNode.js").ParamMediatorProvider}
|
|
8
|
+
*/
|
|
9
|
+
export function makeParamMediatorProvider() {
|
|
10
|
+
return {
|
|
11
|
+
paramMediator: new ParamMediator(),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
|
|
4
15
|
/**
|
|
5
16
|
*
|
|
6
17
|
* @param {import("./flowNode.js").default} flowNode
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/clone.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"clone.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/clone.js"],"names":[],"mappings":"AAGA;;GAEG;AACH;IAKI,cA2BC;IApBO,yBAAyB;IACzB,gBALQ,GAAG,UAK2C;IAO1D;;;;OAIG;IACH,yBAFW,OAAO,0BAA0B,EAAE,SAAS,UAQtD;CAER;qBAtCsD,gBAAgB"}
|
|
@@ -8,6 +8,9 @@
|
|
|
8
8
|
* segments and calculates weighted averages.
|
|
9
9
|
*/
|
|
10
10
|
export default class CoverageTransform extends FlowNode {
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {import("../flowNode.js").Datum} Datum
|
|
13
|
+
*/
|
|
11
14
|
/**
|
|
12
15
|
* @param {import("../../spec/transform.js").CoverageParams} params
|
|
13
16
|
*/
|
|
@@ -25,7 +28,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
25
28
|
end: string;
|
|
26
29
|
chrom: string;
|
|
27
30
|
};
|
|
28
|
-
createSegment:
|
|
31
|
+
createSegment: (start: number, end: number, coverage: number, chrom?: string) => import("../flowNode.js").Datum;
|
|
29
32
|
/**
|
|
30
33
|
* End pos as priority, weight as value
|
|
31
34
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/coverage.js"],"names":[],"mappings":";AAKA;;;;;;;GAOG;AACH;IAKI;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,cAAc,EAgD1D;IA5CG,yDAAoB;IAEpB,mDAAwC;IACxC,iDAAoC;IAEpC,mCAAmC;IACnC,sBADoB,GAAG,KAAE,MAAM,CAGT;IACtB,mCAAmC;IACnC,uBADoB,GAAG,KAAE,MAAM,CACsC;IAErE;;;;;MAKC;
|
|
1
|
+
{"version":3,"file":"coverage.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/coverage.js"],"names":[],"mappings":";AAKA;;;;;;;GAOG;AACH;IAKI;;OAEG;IAEH;;OAEG;IACH,oBAFW,OAAO,yBAAyB,EAAE,cAAc,EAgD1D;IA5CG,yDAAoB;IAEpB,mDAAwC;IACxC,iDAAoC;IAEpC,mCAAmC;IACnC,sBADoB,GAAG,KAAE,MAAM,CAGT;IACtB,mCAAmC;IACnC,uBADoB,GAAG,KAAE,MAAM,CACsC;IAErE;;;;;MAKC;IAED,sEACsE,MAAM,oCAgBvE;IAEL;;;;OAIG;IACH,MAFU,UAAU,MAAM,CAAC,CAEA;CA0IlC;qBA7MyC,gBAAgB;sBAHpC,WAAW"}
|
|
@@ -16,6 +16,10 @@ export default class CoverageTransform extends FlowNode {
|
|
|
16
16
|
return BEHAVIOR_CLONES;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* @typedef {import("../flowNode.js").Datum} Datum
|
|
21
|
+
*/
|
|
22
|
+
|
|
19
23
|
/**
|
|
20
24
|
* @param {import("../../spec/transform.js").CoverageParams} params
|
|
21
25
|
*/
|
|
@@ -34,30 +38,30 @@ export default class CoverageTransform extends FlowNode {
|
|
|
34
38
|
this.weightAccessor = params.weight ? field(params.weight) : (d) => 1;
|
|
35
39
|
|
|
36
40
|
this.as = {
|
|
37
|
-
coverage: params.as
|
|
38
|
-
start: params.asStart
|
|
39
|
-
end: params.asEnd
|
|
40
|
-
chrom: params.asChrom
|
|
41
|
+
coverage: params.as ?? "coverage",
|
|
42
|
+
start: params.asStart ?? params.start,
|
|
43
|
+
end: params.asEnd ?? params.end,
|
|
44
|
+
chrom: params.asChrom ?? params.chrom,
|
|
41
45
|
};
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
this.createSegment =
|
|
48
|
+
/** @type {(start: Number, end: Number, coverage: Number, chrom?: string) => Datum} */ (
|
|
49
|
+
new Function(
|
|
50
|
+
"start",
|
|
51
|
+
"end",
|
|
52
|
+
"coverage",
|
|
53
|
+
"chrom",
|
|
54
|
+
"return {" +
|
|
55
|
+
Object.entries(this.as)
|
|
56
|
+
.filter(([param, prop]) => prop)
|
|
57
|
+
.map(
|
|
58
|
+
([param, prop]) =>
|
|
59
|
+
`${JSON.stringify(prop)}: ${param}`
|
|
60
|
+
)
|
|
61
|
+
.join(", ") +
|
|
62
|
+
"};"
|
|
63
|
+
)
|
|
64
|
+
);
|
|
61
65
|
|
|
62
66
|
/**
|
|
63
67
|
* End pos as priority, weight as value
|
|
@@ -82,7 +86,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
82
86
|
const chromAccessor = this.chromAccessor;
|
|
83
87
|
const weightAccessor = this.weightAccessor;
|
|
84
88
|
|
|
85
|
-
/** @type {
|
|
89
|
+
/** @type {Datum} used for merging adjacent segment */
|
|
86
90
|
let bufferedSegment;
|
|
87
91
|
|
|
88
92
|
/** @type {string} */
|
|
@@ -96,12 +100,20 @@ export default class CoverageTransform extends FlowNode {
|
|
|
96
100
|
let coverage = 0;
|
|
97
101
|
|
|
98
102
|
/** @type {number} */
|
|
99
|
-
let prevEdge;
|
|
103
|
+
let prevEdge = NaN;
|
|
100
104
|
|
|
101
105
|
/** End pos as priority, weight as value */
|
|
102
106
|
const ends = this.ends;
|
|
103
107
|
ends.clear();
|
|
104
108
|
|
|
109
|
+
/**
|
|
110
|
+
* @param {Datum} segment
|
|
111
|
+
*/
|
|
112
|
+
const propagate = (segment) => {
|
|
113
|
+
this._propagate(segment);
|
|
114
|
+
bufferedSegment = null;
|
|
115
|
+
};
|
|
116
|
+
|
|
105
117
|
/**
|
|
106
118
|
* @param {number} start
|
|
107
119
|
* @param {number} end
|
|
@@ -119,7 +131,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
119
131
|
bufferedSegment[asEnd] = end;
|
|
120
132
|
extended = true;
|
|
121
133
|
} else if (bufferedSegment[asCoverage] != 0) {
|
|
122
|
-
|
|
134
|
+
propagate(bufferedSegment);
|
|
123
135
|
}
|
|
124
136
|
}
|
|
125
137
|
|
|
@@ -140,15 +152,16 @@ export default class CoverageTransform extends FlowNode {
|
|
|
140
152
|
prevEdge = edge;
|
|
141
153
|
coverage -= ends.pop();
|
|
142
154
|
}
|
|
143
|
-
prevEdge =
|
|
155
|
+
prevEdge = NaN;
|
|
144
156
|
|
|
145
157
|
if (bufferedSegment) {
|
|
146
|
-
|
|
147
|
-
bufferedSegment = undefined;
|
|
158
|
+
propagate(bufferedSegment);
|
|
148
159
|
}
|
|
149
160
|
};
|
|
150
161
|
|
|
151
|
-
/**
|
|
162
|
+
/**
|
|
163
|
+
* @param {Datum} datum
|
|
164
|
+
*/
|
|
152
165
|
this.handle = (datum) => {
|
|
153
166
|
const start = startAccessor(datum);
|
|
154
167
|
|
|
@@ -168,7 +181,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
168
181
|
}
|
|
169
182
|
}
|
|
170
183
|
|
|
171
|
-
if (prevEdge
|
|
184
|
+
if (!isNaN(prevEdge)) {
|
|
172
185
|
pushSegment(prevEdge, start, coverage);
|
|
173
186
|
}
|
|
174
187
|
prevEdge = start;
|
|
@@ -189,7 +202,7 @@ export default class CoverageTransform extends FlowNode {
|
|
|
189
202
|
*/
|
|
190
203
|
this.beginBatch = (flowBatch) => {
|
|
191
204
|
flushQueue();
|
|
192
|
-
prevChrom =
|
|
205
|
+
prevChrom = null;
|
|
193
206
|
super.beginBatch(flowBatch);
|
|
194
207
|
};
|
|
195
208
|
}
|
|
@@ -2,8 +2,9 @@ export default class FilterTransform extends FlowNode {
|
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* @param {import("../../spec/transform.js").FilterParams} params
|
|
5
|
+
* @param {import("../flowNode.js").ParamMediatorProvider} paramMediatorProvider
|
|
5
6
|
*/
|
|
6
|
-
constructor(params: import("../../spec/transform.js").FilterParams);
|
|
7
|
+
constructor(params: import("../../spec/transform.js").FilterParams, paramMediatorProvider: import("../flowNode.js").ParamMediatorProvider);
|
|
7
8
|
params: import("../../spec/transform.js").FilterParams;
|
|
8
9
|
/** @type {import("../../view/paramMediator.js").ExprRefFunction} */
|
|
9
10
|
predicate: import("../../view/paramMediator.js").ExprRefFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.js"],"names":[],"mappings":"AAEA;IACI
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/filter.js"],"names":[],"mappings":"AAEA;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;CAiBjC;qBA/BoB,gBAAgB"}
|
|
@@ -4,9 +4,11 @@ export default class FilterTransform extends FlowNode {
|
|
|
4
4
|
/**
|
|
5
5
|
*
|
|
6
6
|
* @param {import("../../spec/transform.js").FilterParams} params
|
|
7
|
+
* @param {import("../flowNode.js").ParamMediatorProvider} paramMediatorProvider
|
|
7
8
|
*/
|
|
8
|
-
constructor(params) {
|
|
9
|
-
super();
|
|
9
|
+
constructor(params, paramMediatorProvider) {
|
|
10
|
+
super(paramMediatorProvider);
|
|
11
|
+
|
|
10
12
|
this.params = params;
|
|
11
13
|
|
|
12
14
|
/** @type {import("../../view/paramMediator.js").ExprRefFunction} */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect, test } from "vitest";
|
|
2
|
-
import { processData } from "../flowTestUtils.js";
|
|
2
|
+
import { makeParamMediatorProvider, processData } from "../flowTestUtils.js";
|
|
3
3
|
import FilterTransform from "./filter.js";
|
|
4
4
|
|
|
5
5
|
test.todo("Implement stub for ParamMediator");
|
|
@@ -13,12 +13,8 @@ test("FilterTransform filter rows", () => {
|
|
|
13
13
|
expr: "datum.x > 3 && datum.x != 5",
|
|
14
14
|
};
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const t = new FilterTransform(filterParams);
|
|
16
|
+
const t = new FilterTransform(filterParams, makeParamMediatorProvider());
|
|
19
17
|
t.initialize();
|
|
20
18
|
|
|
21
19
|
expect(processData(t, data)).toEqual([4, 6].map((x) => ({ x })));
|
|
22
|
-
|
|
23
|
-
*/
|
|
24
20
|
});
|
|
@@ -2,8 +2,9 @@ export default class FormulaTransform extends FlowNode {
|
|
|
2
2
|
/**
|
|
3
3
|
*
|
|
4
4
|
* @param {import("../../spec/transform.js").FormulaParams} params
|
|
5
|
+
* @param {import("../flowNode.js").ParamMediatorProvider} paramMediatorProvider
|
|
5
6
|
*/
|
|
6
|
-
constructor(params: import("../../spec/transform.js").FormulaParams);
|
|
7
|
+
constructor(params: import("../../spec/transform.js").FormulaParams, paramMediatorProvider: import("../flowNode.js").ParamMediatorProvider);
|
|
7
8
|
params: import("../../spec/transform.js").FormulaParams;
|
|
8
9
|
as: string;
|
|
9
10
|
/** @type {import("../../view/paramMediator.js").ExprRefFunction} */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/formula.js"],"names":[],"mappings":"AAEA;IAKI
|
|
1
|
+
{"version":3,"file":"formula.d.ts","sourceRoot":"","sources":["../../../../src/data/transforms/formula.js"],"names":[],"mappings":"AAEA;IAKI;;;;OAIG;IACH,oBAHW,OAAO,yBAAyB,EAAE,aAAa,yBAC/C,OAAO,gBAAgB,EAAE,qBAAqB,EAWxD;IANG,wDAAoB;IAEpB,WAAmB;IAEnB,oEAAoE;IACpE,IADW,OAAO,6BAA6B,EAAE,eAAe,CAC7C;CAgB1B;qBApC2C,gBAAgB"}
|
|
@@ -8,9 +8,11 @@ export default class FormulaTransform extends FlowNode {
|
|
|
8
8
|
/**
|
|
9
9
|
*
|
|
10
10
|
* @param {import("../../spec/transform.js").FormulaParams} params
|
|
11
|
+
* @param {import("../flowNode.js").ParamMediatorProvider} paramMediatorProvider
|
|
11
12
|
*/
|
|
12
|
-
constructor(params) {
|
|
13
|
-
super();
|
|
13
|
+
constructor(params, paramMediatorProvider) {
|
|
14
|
+
super(paramMediatorProvider);
|
|
15
|
+
|
|
14
16
|
this.params = params;
|
|
15
17
|
|
|
16
18
|
this.as = params.as;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect, test, test } from "vitest";
|
|
2
|
-
import { processData } from "../flowTestUtils.js";
|
|
2
|
+
import { makeParamMediatorProvider, processData } from "../flowTestUtils.js";
|
|
3
3
|
import FormulaTransform from "./formula.js";
|
|
4
4
|
|
|
5
5
|
test.todo("Implement stub for ParamMediator");
|
|
@@ -7,19 +7,19 @@ test.todo("Implement stub for ParamMediator");
|
|
|
7
7
|
test("FormulaTransform", () => {
|
|
8
8
|
const data = [{ a: 2 }, { a: 3 }];
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
const t = new FormulaTransform(
|
|
11
|
+
{
|
|
12
|
+
type: "formula",
|
|
13
|
+
expr: "datum.a * 2",
|
|
14
|
+
as: "b",
|
|
15
|
+
},
|
|
16
|
+
makeParamMediatorProvider()
|
|
17
|
+
);
|
|
11
18
|
|
|
12
|
-
const t = new FormulaTransform({
|
|
13
|
-
type: "formula",
|
|
14
|
-
expr: "datum.a * 2",
|
|
15
|
-
as: "b",
|
|
16
|
-
});
|
|
17
19
|
t.initialize();
|
|
18
20
|
|
|
19
21
|
expect(processData(t, data)).toEqual([
|
|
20
22
|
{ a: 2, b: 4 },
|
|
21
23
|
{ a: 3, b: 6 },
|
|
22
24
|
]);
|
|
23
|
-
|
|
24
|
-
*/
|
|
25
25
|
});
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
},
|
|
8
8
|
"contributors": [],
|
|
9
9
|
"license": "MIT",
|
|
10
|
-
"version": "0.46.
|
|
10
|
+
"version": "0.46.1",
|
|
11
11
|
"jsdelivr": "dist/bundle/index.js",
|
|
12
12
|
"unpkg": "dist/bundle/index.js",
|
|
13
13
|
"browser": "dist/bundle/index.js",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"vega-scale": "^7.3.1",
|
|
65
65
|
"vega-util": "^1.17.2"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "9e43f979e60032c4a6a3780b1eba429358917bd7"
|
|
68
68
|
}
|