UNPKG

nodedb-json

Version:

A lightweight JSON-based database for Node.js with TypeScript support, indexing, and complex query capabilities

66 lines 2.56 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.applyAggregation = applyAggregation; const lodash_1 = __importDefault(require("lodash")); function applyAggregation(data, aggregations) { return aggregations.map(agg => { switch (agg.type) { case 'count': return { type: 'count', value: data.length }; case 'sum': if (!agg.field) { throw new Error('Sum aggregation requires a field'); } return { type: 'sum', field: agg.field, value: lodash_1.default.sumBy(data, agg.field) }; case 'avg': if (!agg.field) { throw new Error('Average aggregation requires a field'); } return { type: 'avg', field: agg.field, value: lodash_1.default.meanBy(data, agg.field) }; case 'min': if (!agg.field) { throw new Error('Min aggregation requires a field'); } return { type: 'min', field: agg.field, value: lodash_1.default.get(lodash_1.default.minBy(data, item => lodash_1.default.get(item, agg.field)), agg.field, 0) }; case 'max': if (!agg.field) { throw new Error('Max aggregation requires a field'); } return { type: 'max', field: agg.field, value: lodash_1.default.get(lodash_1.default.maxBy(data, item => lodash_1.default.get(item, agg.field)), agg.field, 0) }; case 'group': if (!agg.groupBy) { throw new Error('Group aggregation requires a groupBy field'); } return { type: 'group', groupBy: agg.groupBy, value: lodash_1.default.groupBy(data, agg.groupBy) }; default: throw new Error(`Unsupported aggregation type: ${agg.type}`); } }); } //# sourceMappingURL=aggregator.js.map