UNPKG

ts-flex-query

Version:
41 lines 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.funcs = exports.FunctionApplicationExpression = void 0; exports.func = func; exports.isFunctionApplication = isFunctionApplication; const lodash_1 = require("lodash"); const main_1 = require("../functions/main"); const evaluate_expression_1 = require("../helpers/evaluate-expression"); const utils_1 = require("../helpers/utils"); const data_type_1 = require("../types/data-type"); class FunctionApplicationExpression { constructor(container, member, args) { this.container = container; this.member = member; this.args = args; this.dataType = { type: data_type_1.DataTypeType.unknown }; } evaluate(context) { return this.container[this.member](...this.args.map((arg) => (0, evaluate_expression_1.evaluateExpression)(arg, context))); } } exports.FunctionApplicationExpression = FunctionApplicationExpression; function func(container, member, ...args) { return new FunctionApplicationExpression(container, member, args); } function createFunctionExpressionFactory(container, member) { return ((...args) => func(container, member, ...args)); } function createFunctionExpressionFactories(container) { const relevantKeys = (0, main_1.getContainerFunctionKeys)(container); return (0, utils_1.createObjectFromArray)(relevantKeys, (key) => key, (key) => createFunctionExpressionFactory(container, key)); } function createFunctionExpressionFactoriesForContainers(spec) { const factories = {}; return (0, lodash_1.merge)(factories, ...Object.values(spec).map(createFunctionExpressionFactories)); } exports.funcs = createFunctionExpressionFactoriesForContainers(main_1.publicFunctionContainers); function isFunctionApplication(expr, container, member) { return expr instanceof FunctionApplicationExpression && expr.container === container && expr.member === member; } //# sourceMappingURL=function-application.js.map