vega-lite
Version:
Vega-Lite is a concise high-level language for interactive visualization.
47 lines (39 loc) • 1.16 kB
text/typescript
import type {FlattenTransform as VgFlattenTransform} from 'vega';
import {FlattenTransform} from '../../transform.js';
import {duplicate, hash} from '../../util.js';
import {DataFlowNode} from './dataflow.js';
/**
* A class for flatten transform nodes
*/
export class FlattenTransformNode extends DataFlowNode {
public clone() {
return new FlattenTransformNode(this.parent, duplicate(this.transform));
}
constructor(
parent: DataFlowNode,
private transform: FlattenTransform,
) {
super(parent);
this.transform = duplicate(transform); // duplicate to prevent side effects
const {flatten, as = []} = this.transform;
this.transform.as = flatten.map((f, i) => as[i] ?? f);
}
public dependentFields() {
return new Set(this.transform.flatten);
}
public producedFields() {
return new Set(this.transform.as);
}
public hash() {
return `FlattenTransform ${hash(this.transform)}`;
}
public assemble(): VgFlattenTransform {
const {flatten: fields, as} = this.transform;
const result: VgFlattenTransform = {
type: 'flatten',
fields,
as,
};
return result;
}
}