UNPKG

1.42 kBJavaScriptView Raw
1import {Transform, ingest} from 'vega-dataflow';
2import {inherits} from 'vega-util';
3
4/**
5 * Generates data tuples using a provided generator function.
6 * @constructor
7 * @param {object} params - The parameters for this operator.
8 * @param {function(Parameters): object} params.generator - A tuple generator
9 * function. This function is given the operator parameters as input.
10 * Changes to any additional parameters will not trigger re-calculation
11 * of previously generated tuples. Only future tuples are affected.
12 * @param {number} params.size - The number of tuples to produce.
13 */
14export default function Generate(params) {
15 Transform.call(this, [], params);
16}
17
18inherits(Generate, Transform, {
19 transform(_, pulse) {
20 const out = pulse.fork(pulse.ALL),
21 gen = _.generator;
22
23 let data = this.value,
24 num = _.size - data.length,
25 add, rem, t;
26
27 if (num > 0) {
28 // need more tuples, generate and add
29 for (add=[]; --num >= 0;) {
30 add.push(t = ingest(gen(_)));
31 data.push(t);
32 }
33 out.add = out.add.length
34 ? out.materialize(out.ADD).add.concat(add)
35 : add;
36 } else {
37 // need fewer tuples, remove
38 rem = data.slice(0, -num);
39 out.rem = out.rem.length
40 ? out.materialize(out.REM).rem.concat(rem)
41 : rem;
42 data = data.slice(-num);
43 }
44
45 out.source = this.value = data;
46 return out;
47 }
48});