UNPKG

@mcabreradev/filter

Version:

A powerful, SQL-like array filtering library for TypeScript and JavaScript with advanced pattern matching, MongoDB-style operators, deep object comparison, and zero dependencies

58 lines 2.34 kB
import { validateExpression } from '../validation'; import { mergeConfig } from '../config'; import { buildDebugTree } from './debug-tree-builder'; import { evaluateWithDebug } from './debug-evaluator'; import { formatDebugTree } from './debug-formatter'; export const filterDebug = (array, expression, options) => { if (!Array.isArray(array)) { throw new Error(`Expected array but received: ${typeof array}`); } const startTime = performance.now(); const config = mergeConfig(options); const validatedExpression = validateExpression(expression); const tree = buildDebugTree(validatedExpression, config); const { items, tree: populatedTree } = evaluateWithDebug(array, tree, validatedExpression, config); const executionTime = performance.now() - startTime; const conditionsEvaluated = countConditions(populatedTree); const result = { items, tree: populatedTree, stats: { matched: items.length, total: array.length, percentage: array.length > 0 ? (items.length / array.length) * 100 : 0, executionTime, cacheHit: false, conditionsEvaluated, }, print: () => { const debugOpts = getDebugOptions(options); const treeOutput = formatDebugTree(populatedTree, debugOpts); console.log(treeOutput); console.log(''); console.log(`Statistics:`); console.log(`├── Matched: ${items.length} / ${array.length} items (${result.stats.percentage.toFixed(1)}%)`); console.log(`├── Execution Time: ${executionTime.toFixed(2)}ms`); console.log(`├── Cache Hit: ${result.stats.cacheHit ? 'Yes' : 'No'}`); console.log(`└── Conditions Evaluated: ${conditionsEvaluated}`); }, }; return result; }; export const getDebugOptions = (options) => { return { verbose: options?.verbose, showTimings: options?.showTimings, colorize: options?.colorize, }; }; const countConditions = (node) => { let count = 1; if (node.children && Array.isArray(node.children)) { for (const child of node.children) { count += countConditions(child); } } return count; }; //# sourceMappingURL=debug-filter.js.map