UNPKG

1.41 kBJavaScriptView Raw
1import {Transform, ingest} from 'vega-dataflow';
2import {inherits} from 'vega-util';
3import {range} from 'd3-array';
4
5/**
6 * Generates data tuples for a specified sequence range of numbers.
7 * @constructor
8 * @param {object} params - The parameters for this operator.
9 * @param {number} params.start - The first number in the sequence.
10 * @param {number} params.stop - The last number (exclusive) in the sequence.
11 * @param {number} [params.step=1] - The step size between numbers in the sequence.
12 */
13export default function Sequence(params) {
14 Transform.call(this, null, params);
15}
16
17Sequence.Definition = {
18 'type': 'Sequence',
19 'metadata': {'generates': true, 'changes': true},
20 'params': [
21 { 'name': 'start', 'type': 'number', 'required': true },
22 { 'name': 'stop', 'type': 'number', 'required': true },
23 { 'name': 'step', 'type': 'number', 'default': 1 },
24 { 'name': 'as', 'type': 'string', 'default': 'data' }
25 ]
26};
27
28var prototype = inherits(Sequence, Transform);
29
30prototype.transform = function(_, pulse) {
31 if (this.value && !_.modified()) return;
32
33 var out = pulse.materialize().fork(pulse.MOD),
34 as = _.as || 'data';
35
36 out.rem = this.value ? pulse.rem.concat(this.value) : pulse.rem;
37
38 this.value = range(_.start, _.stop, _.step || 1).map(function(v) {
39 var t = {};
40 t[as] = v;
41 return ingest(t);
42 });
43
44 out.add = pulse.add.concat(this.value);
45
46 return out;
47};