UNPKG

@equantic/linq

Version:
42 lines (41 loc) 1.46 kB
import { CompositeFilteringParser } from './CompositeFilteringParser.js'; import { Filtering } from './Filtering.js'; import { parseExpression } from './base.js'; export class CompositeFiltering extends Filtering { values; compositeOperator; constructor(...args) { super(); this.compositeOperator = args.length > 0 ? args[0] : 'and'; this.values = []; if (args?.length > 1 && Array.isArray(args[1])) { args[1].forEach((value) => { if (typeof value === 'string') { if (!CompositeFilteringParser.parse(value, this.values)) { const parsed = parseExpression(value); const f = new Filtering(parsed.column, parsed.value, parsed.operator); this.values.push(f); } } else this.values.push(value); }); } } addValue(filtering) { this.values.push(filtering); } toString() { if (this.values.length == 0) return super.toString(); const args = this.values.map((v) => v.toString()); return `${this.compositeOperator}(${args.join(',')})`; } static and(...values) { return new CompositeFiltering('and', values); } static or(...values) { return new CompositeFiltering('or', values); } } export const CF = CompositeFiltering;