Source: core/measure.js

import {timeFormat} from 'd3';

/**
 * appends a measure to {@link Core#measures measures} array. A measure(value) acts as an value that is looked up by dimensions(key). A synonym for measure is dependent attribute. Jelly-chart has {@link Core#data data} in an array to be grouped into a hierarchical tree structure with dimensions. If measures are specified, leaves of the tree will be summarized by them. 
 * @memberOf Core#
 * @function
 * @example
 * core.measure({field:'Sales', 'op': 'mean'});
 * core.measure('Profit');
 * @param {(string|object)} measure
 * @param {string} [measure.field] refers a value property in objects from the {@link Core#data data array}. The value property will be invoked for leaf elements during aggregation and their values in the property will be summarized by the specified operator as an value.
 * @param {string} [measure.op=sum] an operator(sum, mean, variance, min, max, median) to summarize leaf elements.
 * @param {string} [measure.format] a time formatter for the given string {@link https://github.com/d3/d3-time-format#locale_format specifier}
 * @return {Core}
 */
function measure (measure) {
  if (typeof measure === 'string') {
    this.__attrs__.measures.push({field: measure, op: 'sum'});
  } else if (typeof measure === 'object') {
    if ('format' in measure && typeof measure.format === 'string') measure.format = timeFormat(measure.format);
    this.__attrs__.measures.push(measure);
  }
  return this;
}

export default measure;