vega-lite
Version:
Vega-Lite is a concise high-level language for interactive visualization.
49 lines (42 loc) • 1.35 kB
text/typescript
import {KDETransform as VgKDETransform} from 'vega';
import {DensityTransform} from '../../transform.js';
import {duplicate, hash} from '../../util.js';
import {DataFlowNode} from './dataflow.js';
/**
* A class for density transform nodes
*/
export class DensityTransformNode extends DataFlowNode {
public clone() {
return new DensityTransformNode(null, duplicate(this.transform));
}
constructor(
parent: DataFlowNode,
private transform: DensityTransform,
) {
super(parent);
this.transform = duplicate(transform); // duplicate to prevent side effects
const specifiedAs = this.transform.as ?? [undefined, undefined];
this.transform.as = [specifiedAs[0] ?? 'value', specifiedAs[1] ?? 'density'];
const resolve = this.transform.resolve ?? 'shared';
this.transform.resolve = resolve;
}
public dependentFields() {
return new Set([this.transform.density, ...(this.transform.groupby ?? [])]);
}
public producedFields() {
return new Set(this.transform.as);
}
public hash() {
return `DensityTransform ${hash(this.transform)}`;
}
public assemble(): VgKDETransform {
const {density, ...rest} = this.transform;
const result: VgKDETransform = {
type: 'kde',
field: density,
...rest,
};
result.resolve = this.transform.resolve;
return result;
}
}