"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var helper_1 = require("../helper"); var partition_1 = require("../util/partition"); var statistics = tslib_1.__importStar(require("../util/statistics")); function pivot(rows, options) { var e_1, _a; var _b = helper_1.mergeOptions(options, { op: 'sum' }), field = _b.field, value = _b.value, groupBy = _b.groupBy, op = _b.op; if (!(op in statistics)) { throw new Error('unknown op'); } var groups = partition_1.partition(rows, groupBy); var result = []; var _loop_1 = function (group) { var row = {}; (Array.isArray(groupBy) ? groupBy : [groupBy]).forEach(function (item) { return (row[item] = group[0][item]); }); var fields = group.map(function (item) { return item[field]; }); fields.forEach(function (target) { row[target] = statistics[op](group.filter(function (item) { return item[field] === target; }).map(function (item) { return item[value]; })); }); result.push(row); }; try { for (var _c = tslib_1.__values(Object.values(groups)), _d = _c.next(); !_d.done; _d = _c.next()) { var group = _d.value; _loop_1(group); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (_d && !_d.done && (_a = _c.return)) _a.call(_c); } finally { if (e_1) throw e_1.error; } } return result; } exports.pivot = pivot;