UNPKG

ts-flex-query

Version:
43 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GroupExpression = void 0; const lodash_1 = require("lodash"); const evaluate_expression_1 = require("../helpers/evaluate-expression"); const evaluation_context_utils_1 = require("../helpers/evaluation-context-utils"); const data_type_1 = require("../types/data-type"); class GroupExpression { constructor(input, variableSymbol, groupValue, elementsField, groupValueField) { this.input = input; this.variableSymbol = variableSymbol; this.groupValue = groupValue; this.elementsField = elementsField; this.groupValueField = groupValueField; this.dataType = { type: data_type_1.DataTypeType.array, elementType: { type: data_type_1.DataTypeType.object, fields: { [elementsField]: input.dataType, [groupValueField]: groupValue.dataType } } }; } evaluate(context) { const inputResult = (0, evaluate_expression_1.evaluateExpression)(this.input, context); if (!Array.isArray(inputResult)) { return []; } const groups = (0, lodash_1.groupBy)(inputResult, (element) => JSON.stringify(this.evaluateGroupValue(element, context))); return Object.values(groups).map((elements) => ({ [this.elementsField]: elements, [this.groupValueField]: this.evaluateGroupValue(elements[0], context) })); } evaluateGroupValue(elementValue, context) { const elementContext = (0, evaluation_context_utils_1.addVariable)(context, this.variableSymbol, elementValue); return (0, evaluate_expression_1.evaluateExpression)(this.groupValue, elementContext); } } exports.GroupExpression = GroupExpression; //# sourceMappingURL=group.js.map