vega-util
JavaScript utilities for Vega. Provides a set of helper methods used
throughout Vega modules, including function generators, type checkers, log
messages, and additional utilities for Object, Array and String values.
API Reference
Functions
Functions and function generators for accessing and comparing values.
#
vega.accessor(function[, fields, name])
<>
Annotates a function instance with a string array of dependent data fields
and a string name, and returns the input function. Assumes the input
function takes an object (data tuple) as input, and that strings in the
fields array correspond to object properties accessed by the function. Once
annotated, Vega dataflows can track data field dependencies and generate
appropriate output names (e.g., when computing aggregations) if the function
is used as an accessor.
Internally, this method assigns the field array to the fields
property of the input function, and the name to the fname
property.
To be future-proof, clients should not access these properties
directly. Instead, use the accessorFields and
accessorName methods.
#
vega.accessorFields(accessor)
<>
Returns the array of dependent field names for a given accessor function.
Returns null if no field names have been set.
#
vega.accessorName(accessor)
<>
Returns the name string for a given accessor function.
Returns null if no name has been set.
#
vega.compare(fields[, orders])
<>
Generates a comparator function for sorting data values, based on the given
set of fields and optional sort orders. The fields argument must be
either a string or an array of strings, indicating the name of object
properties to sort by, in precedence order. Field strings may include
nested properties (e.g., foo.bar.baz
). The orders argument must be
either a string or an array of strings; the valid string values are
'ascending'
(for ascending sort order of the corresponding field) or
'descending'
(for descending sort order of the corresponding field).
If the orders argument is omitted, is shorter than the fields array,
or includes values other than 'ascending'
or 'descending'
,
corresponding fields will default to ascending order.
#
vega.constant(value)
<>
Given an input value, returns a function that simply returns that value.
If the input value is itself a function, that function is returned directly.
#
vega.field(field[, name])
<>
Generates an accessor function for retrieving the specified field value.
The input field string may include nested properties (e.g., foo.bar.baz
).
An optional name argument indicates the accessor name for the generated
function; if excluded the field string will be used as the name (see the
accessor method for more details).
var fooField = vega.field('foo');
fooField({foo: 5});
vega.accessorName(fooField);
vega.accessorFields(fooField);
var pathField = vega.field('foo.bar', 'path');
pathField({foo: {bar: 'vega'}});
pathField({foo: 5});
vega.accessorName(pathField);
vega.accessorFields(pathField);
#
vega.id(object)
<>
An accessor function that returns the value of the id
property of an
input object.
#
vega.identity(value)
<>
An accessor function that simply returns its value argument.
#
vega.key(fields)
<>
Generates an accessor function that returns a key string (suitable for
using as an object property name) for a set of object fields. The
fields argument must be either a string or string array, with each
entry indicating a property of an input object to be used to produce
representative key values. The resulting key function is an
accessor instance with the accessor name 'key'
.
var keyf = vega.key(['foo', 'bar']);
keyf({foo:'hi', bar:5});
vega.accessorName(keyf);
vega.accessorFields(keyf);
#
vega.one()
<>
An accessor function that simply returns the value one (1
).
#
vega.zero()
<>
An accessor function that simply returns the value zero (0
).
#
vega.truthy()
<>
An accessor function that simply returns the boolean true
value.
#
vega.falsy()
<>
An accessor function that simply returns the boolean false
value.
Type Checkers
Functions for checking the type of JavaScript values.
#
vega.isArray(value)
<>
Returns true
if the input value is an Array instance, false
otherwise.
#
vega.isFunction(value)
<>
Returns true
if the input value is a Function instance, false
otherwise.
#
vega.isNumber(value)
<>
Returns true
if the input value is a Number instance, false
otherwise.
#
vega.isObject(value)
<>
Returns true
if the input value is an Object instance, false
otherwise.
#
vega.isString(value)
<>
Returns true
if the input value is a String instance, false
otherwise.
Objects
Functions for manipulating JavaScript Object values.
#
vega.extend(target[, source1, source2, …])
<>
Extends a target object by copying (in order) all enumerable properties of
the input source objects.
#
vega.inherits(child, parent)
A convenience method for setting up object-oriented inheritance. Assigns the
prototype
property of the input child function, such that the child
inherits the properties of the parent function's prototype via prototypal
inheritance. Returns the new child prototype object.
Arrays
Functions for manipulating JavaScript Array values.
#
vega.array(value)
<>
Ensures that the input value is an Array instance. If so, the value is
simply returned. If not, the value is wrapped within a new single-element
an array, returning [value]
.
#
vega.extentIndex(array[, accessor])
<>
Returns the array indices for the minimum and maximum values in the input
array (as a [minIndex, maxIndex]
array), according to natural ordering.
The optional accessor argument provides a function that is first applied
to each array value prior to comparison.
vega.extentIndex([1,5,3,0,4,2]);
vega.extentIndex([
{a: 3, b:2},
{a: 2, b:1},
{a: 1, b:3}
], vega.field('b'));
#
vega.peek(array)
<>
Returns the last element in the input array. Similar to the built-in
Array.pop
method, except that it does not remove the last element. This
method is a convenient shorthand for array[array.length - 1]
.
#
vega.merge(compare, array1, array2[, output])
<>
Merge two sorted arrays into a single sorted array. The input compare
function is a comparator for sorting elements and should correspond to the
pre-sorted orders of the array1 and array2 source arrays. The merged
array contents are written to the output array, if provided. If output
is not specified, a new array is generated and returned.
#
vega.toSet(array)
<>
Given an input array of values, returns a new Object instance whose
property keys are the values in array, each assigned a property value
of 1
. Each value in array is coerced to a String value and so
should map to a reasonable string key value.
vega.toSet([1, 2, 3]);
#
vega.visitArray(array, [filter,] visitor)
<>
Vists the values in an input array, invoking the visitor function
for each array value that passes an optional filter. If specified,
the filter function is called with each individual array value. If
the filter function return value is truthy, the returned value is
then passed as input to the visitor function. Thus, the filter
not only performs filtering, it can serve as a value transformer.
If the filter function is not specified, all values in the array
are passed to the visitor function. Similar to the built-in
Array.forEach
method, the visitor function is invoked with three
arguments: the value to visit, the current index into the source array,
and a reference to the soure array.
vega.visitArray([0, -1, 2],
function(x) { return x + 1; },
function(v, i, array) { console.log(v, i); });
Strings
Functions for generating and manipulating JavaScript String values.
#
vega.pad(string, length[, character, align])
<>
Pads a string value with repeated instances of a character up to a
specified length. If character is not specified, a space (' '
) is used.
By default, padding is added to the end of a string. An optional align
parameter specifies if padding should be added to the 'left'
(beginning),
'center'
, or 'right'
(end) of the input string.
vega.pad('15', 5, '0', 'left');
#
vega.repeat(string, count)
<>
Given an input string, returns a new string that repeats the input
count times.
vega.repeat('0', 5);
#
vega.splitAccessPath(path)
<>
Splits an input string representing an access path for JavaScript object
properties into an array of constituent path elements.
vega.splitAccessPath('foo');
vega.splitAccessPath('foo.bar');
vega.splitAccessPath('foo["bar"]');
vega.splitAccessPath('foo[0].bar');
#
vega.stringValue(value)
<>
Returns an output representation of an input value that is both JSON
and JavaScript compliant. For Object and String values, JSON.stringify
is
used to generate the output string. Primitive types such as Number or Boolean
are returned as-is. This method can be used to generate values that can then
be included in runtime-compiled code snippets (for example, via the Function
constructor).
#
vega.truncate(string length[, align, ellipsis])
<>
Truncates an input string to a target length. The optional align argument
indicates what part of the string should be truncated: 'left'
(the beginning),
'center'
, or 'right'
(the end). By default, the 'right'
end of the string
is truncated. The optional ellipsis argument indicates the string to use to
indicate truncated content; by default the ellipsis character (…
, same as
\u2026
) is used.
Logging
#
vega.logger([level])
<>
Generates a new logger instance for selectively writing log messages to
the JavaScript console. The optional level argument indicates the initial
log level to use (one of None, Warn, Info, or
Debug), and defaults to None if not specified.
The generated logger instance provides the following methods:
- level(value): Sets the current logging level. Only messages
with a log level less than or equal to value will be written to the console.
- warn(message1[, message2, …]): Logs a warning message.
The messages will be written to the console using the
console.warn
method
if the current log level is Warn or higher. - info(message1[, message2, …]): Logs an informative
message. The messages will be written to the console using the
console.log
method if the current log level is Info or higher. - warn(message1[, message2, …]): Logs a debugging message.
The messages will be written to the console using the
console.log
method
if the current log level is Debug or higher.
#
vega.None
<>
Constant value indicating a log level of 'None'. If set as the log level of
a logger instance, all log messages will be suppressed.
#
vega.Warn
<>
Constant value indicating a log level of 'Warn'. If set as the log level of
a logger instance, only warning messages will be presented.
#
vega.Info
<>
Constant value indicating a log level of 'Info'. If set as the log level of
a logger instance, both warning and info messages will be presented.
#
vega.Debug
<>
Constant value indicating a log level of 'Debug'. If set as the log level of
a logger instance, all log messages (warning, info and debug)
will be presented.
Errors
#
vega.error(message)
<>
Throws a new error with the provided error message. This is a convenience
method adding a layer of indirection for error handling, for example
allowing error conditions to be included in expression chains.
vega.error('Uh oh');
return isOk ? returnValue : vega.error('Not OK');