ts-flex-query
Version:
Flexible and type-safe data queries
41 lines • 1.97 kB
JavaScript
;
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