1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 | var statistics = tslib_1.__importStar(require("./util/statistics"));
|
5 | var partition_1 = require("./util/partition");
|
6 | var helper_1 = require("./util/helper");
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | function aggregate(rows, options) {
|
15 | var e_1, _a;
|
16 | var fields = options.fields, op = options.op;
|
17 | fields && helper_1.assert(Array.isArray(fields), "Invalid fields: it must be an array with one or more strings!");
|
18 | !fields &&
|
19 | helper_1.assert(op.every(function (item) { return item === 'count'; }), "operations must all be 'count' when fields is empty");
|
20 | helper_1.assert(op.length === options.as.length, "Invalid as: it's length must be the same as operations!");
|
21 | var groups = partition_1.partition(rows, options.groupBy);
|
22 | var results = [];
|
23 | var _loop_1 = function (group) {
|
24 | var result = tslib_1.__assign({}, group[0]);
|
25 | op.forEach(function (operation, i) {
|
26 | var outputName = options.as[i];
|
27 | var field = fields ? fields[i] : undefined;
|
28 | result[outputName] = statistics[operation](field ? group.map(function (item) { return item[field]; }) : group);
|
29 | });
|
30 | results.push(result);
|
31 | };
|
32 | try {
|
33 | for (var _b = tslib_1.__values(Object.values(groups)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
34 | var group = _c.value;
|
35 | _loop_1(group);
|
36 | }
|
37 | }
|
38 | catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
39 | finally {
|
40 | try {
|
41 | if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
42 | }
|
43 | finally { if (e_1) throw e_1.error; }
|
44 | }
|
45 | return results;
|
46 | }
|
47 | exports.aggregate = aggregate;
|