ts-flex-query
Version:
Flexible and type-safe data queries
32 lines • 1.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilterOperator = void 0;
exports.filter = filter;
exports.filterDefined = filterDefined;
const filter_1 = require("../../expressions/filter");
const variable_1 = require("../../expressions/variable");
const object_value_selector_1 = require("../../helpers/object-value-selector");
const data_type_1 = require("../../types/data-type");
const convenience_1 = require("../convenience");
class FilterOperator {
constructor(predicate) {
this.predicate = predicate;
}
instantiate(input) {
const variableSymbol = Symbol('vFilter');
const variableType = input.dataType.type === data_type_1.DataTypeType.array
? input.dataType.elementType
: { type: data_type_1.DataTypeType.unknown };
const variableExpression = (0, variable_1.variable)(variableType, variableSymbol);
return new filter_1.FilterExpression(input, variableSymbol, this.predicate(variableExpression));
}
}
exports.FilterOperator = FilterOperator;
function filter(selector) {
return new FilterOperator((input) => (0, object_value_selector_1.createQueryFromObjectValueSelector)(selector).instantiate(input));
}
/** Filters the input collection for defined elements (not equal undefined or null). */
function filterDefined() {
return filter((0, convenience_1.and)((0, convenience_1.func)('notEqual', (0, convenience_1.noOp)(), (0, convenience_1.value)(undefined)), (0, convenience_1.func)('notEqual', (0, convenience_1.noOp)(), (0, convenience_1.value)(null))));
}
//# sourceMappingURL=filter.js.map