"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var util_1 = require("@antv/util"); var statistics = tslib_1.__importStar(require("../util/statistics")); var partition_1 = require("../util/partition"); function aggregate(rows, options) { var fields = options.fields, op = options.op; if (fields && !Array.isArray(fields)) { throw new TypeError('Invalid fields: it must be an array with one or more strings!'); } if (!fields && op.some(function (item) { return item !== 'count'; })) throw new Error(''); if (op.length > options.as.length) throw new TypeError("Invalid as: it's length must be the same as operations!"); var groups = partition_1.partition(rows, options.groupBy); var results = []; util_1.forIn(groups, function (group) { var result = tslib_1.__assign({}, group[0]); op.forEach(function (operation, i) { var outputName = options.as[i]; var field = fields ? fields[i] : undefined; result[outputName] = statistics[operation](group.map(function (item) { return item[field]; })); }); results.push(result); }); return results; } exports.aggregate = aggregate;