UNPKG

vega-dataflow

Version:

Reactive dataflow processing.

45 lines (40 loc) 1.55 kB
import Operator from '../Operator.js'; import {isFunction} from 'vega-util'; /** * Add an operator to the dataflow graph. This function accepts a * variety of input argument types. The basic signature supports an * initial value, update function and parameters. If the first parameter * is an Operator instance, it will be added directly. If it is a * constructor for an Operator subclass, a new instance will be instantiated. * Otherwise, if the first parameter is a function instance, it will be used * as the update function and a null initial value is assumed. * @param {*} init - One of: the operator to add, the initial value of * the operator, an operator class to instantiate, or an update function. * @param {function} [update] - The operator update function. * @param {object} [params] - The operator parameters. * @param {boolean} [react=true] - Flag indicating if this operator should * listen for changes to upstream operators included as parameters. * @return {Operator} - The added operator. */ export default function(init, update, params, react) { let shift = 1, op; if (init instanceof Operator) { op = init; } else if (init && init.prototype instanceof Operator) { op = new init(); } else if (isFunction(init)) { op = new Operator(null, init); } else { shift = 0; op = new Operator(init, update); } this.rank(op); if (shift) { react = params; params = update; } if (params) this.connect(op, op.parameters(params, react)); this.touch(op); return op; }