This directory contains comprehensive examples demonstrating the usage of @mcabreradev/filter v5.1.0.
To run the TypeScript examples with ts-node:
pnpm install -g ts-node
ts-node examples/operators-examples.ts-
Build the project:
pnpm run build
-
Compile the examples:
tsc examples/operators-examples.ts --outDir examples/dist --esModuleInterop
-
Run the compiled example:
node examples/dist/operators-examples.js
Comprehensive examples showcasing the new array OR syntax (syntactic sugar for $in):
- Basic Array Syntax: Using arrays for OR logic on property values
- Equivalence with $in: Demonstrating that array syntax equals explicit
$inoperator - AND + OR Combination: Combining array OR logic with other AND conditions
- Multiple Array Properties: Using arrays on multiple properties independently
- Wildcard Support: Using wildcards (%, _) within array values
- Type Support: Examples with strings, numbers, booleans
- Edge Cases: Empty arrays, single-element arrays
- Complex Filtering: Multi-condition queries with array syntax
- Real-World Use Cases: E-commerce, user management, analytics examples
Interactive examples demonstrating intelligent autocomplete for operators:
- Type-Based Suggestions: TypeScript suggests only valid operators for each property type
- Number Operators: Autocomplete for
$gt,$gte,$lt,$lte,$eq,$ne - String Operators: Autocomplete for
$startsWith,$endsWith,$contains,$regex,$match - Array Operators: Autocomplete for
$in,$nin,$contains,$size - Boolean Operators: Autocomplete for
$eq,$ne - Date Operators: Autocomplete for date comparison operators
- Combined Examples: Multiple operators with intelligent suggestions
Advanced examples showcasing autocomplete for deeply nested objects:
- Multi-Level Nesting: Autocomplete works up to 4 levels deep
- Level 2 Filtering: Filter by nested object properties (e.g.,
address.city) - Level 3 Filtering: Filter by deeply nested properties (e.g.,
address.coordinates.lat) - Level 4 Filtering: Filter by very deeply nested properties (e.g.,
settings.privacy.showEmail) - Complex Queries: Combine multiple nested levels in a single query
- Logical Operators: Use
$or,$and,$notwith nested objects - Mixed Syntax: Combine direct values and operators at different levels
- Real-World Examples: Practical use cases with nested data structures
Comprehensive examples showcasing all v5.0.0 operators:
- Comparison Operators:
$gt,$gte,$lt,$lte,$eq,$ne - Array Operators:
$in,$nin,$contains,$size - String Operators:
$startsWith,$endsWith,$contains - Combined Operators: Multiple operators on same/different properties
- Mixed Syntax: Operators combined with legacy v3.x syntax
- Real-World Scenarios: E-commerce, inventory, and search use cases
Comprehensive examples showcasing lazy evaluation features:
- Basic Lazy Filtering: Using
filterLazyfor on-demand processing - Early Exit Optimization: Using
filterFirstto stop after N matches - Existence Checks: Using
filterExistsfor fast boolean checks - Counting: Using
filterCountwithout creating result arrays - Chunked Processing: Using
filterChunkedandfilterLazyChunkedfor batch operations - Lazy Composition: Combining
take,skip,map, and other utilities - Pagination: Building efficient pagination with lazy operations
- Async Streams: Using
filterLazyAsyncfor async iterables - Performance Comparison: Benchmarking lazy vs standard filtering
- Memory Efficiency: Demonstrating memory savings with large datasets
Comprehensive examples showcasing the multi-layer memoization strategy:
- Basic Result Caching: Demonstrating 530x speedup with cached results
- Predicate Caching: Reusing compiled predicates across different arrays
- Regex Pattern Caching: Automatic caching of compiled regex patterns
- Cache Statistics: Monitoring cache size and effectiveness
- Complex Query Caching: Caching nested and complex expressions
- Lazy + Cache Combination: Combining lazy evaluation with caching
- Cache Management: Clearing caches and managing memory
- Performance Comparison: Benchmarking with/without caching (100 iterations)
Running operators-examples.ts will output filtered results for 20 different scenarios, demonstrating:
- Price range filtering
- Date-based filtering
- Category inclusion/exclusion
- Tag-based searching
- Name pattern matching
- Complex multi-condition queries
- Performance optimization patterns
import { filter } from '@mcabreradev/filter';
const products = [
{ id: 1, name: 'Laptop', price: 1200, category: 'Electronics' },
{ id: 2, name: 'Mouse', price: 25, category: 'Electronics' },
{ id: 3, name: 'Desk', price: 300, category: 'Furniture' },
];
console.time('first');
const electronics1 = filter(
products,
{ category: 'Electronics' },
{ enableCache: true }
);
console.timeEnd('first');
console.time('cached');
const electronics2 = filter(
products,
{ category: 'Electronics' },
{ enableCache: true }
);
console.timeEnd('cached');import { filter } from '@mcabreradev/filter';
const users1 = [/* 5,000 users */];
const users2 = [/* 3,000 different users */];
const query = { age: { $gte: 18 }, active: true };
filter(users1, query, { enableCache: true });
filter(users2, query, { enableCache: true });import { filter } from '@mcabreradev/filter';
const users = [/* users */];
const customers = [/* customers */];
const admins = [/* admins */];
const emailPattern = { email: { $regex: '^[a-z]+@example\\.com$' } };
filter(users, emailPattern);
filter(customers, emailPattern);
filter(admins, emailPattern);import { filter, clearFilterCache, getFilterCacheStats } from '@mcabreradev/filter';
const data = [/* large dataset */];
filter(data, { status: 'active' }, { enableCache: true });
const stats = getFilterCacheStats();
console.log('Predicates cached:', stats.predicateCacheSize);
console.log('Regex patterns cached:', stats.regexCacheSize);
clearFilterCache();import { filter, clearFilterCache } from '@mcabreradev/filter';
interface Product {
id: string;
name: string;
category: string;
price: number;
inStock: boolean;
rating: number;
}
class ProductDashboard {
private products: Product[];
constructor(products: Product[]) {
this.products = products;
}
getElectronics(): Product[] {
return filter(
this.products,
{ category: 'Electronics' },
{ enableCache: true }
);
}
getAffordable(): Product[] {
return filter(
this.products,
{ price: { $lte: 100 }, inStock: true },
{ enableCache: true }
);
}
getTopRated(): Product[] {
return filter(
this.products,
{ rating: { $gte: 4.5 } },
{ enableCache: true }
);
}
refreshData(newProducts: Product[]): void {
this.products = newProducts;
clearFilterCache();
}
}
const dashboard = new ProductDashboard(products);
dashboard.getElectronics();
dashboard.getAffordable();
dashboard.getTopRated();
dashboard.getElectronics();
dashboard.getAffordable();
dashboard.getTopRated();import { filterFirst, filter } from '@mcabreradev/filter';
const customers = [/* 1,000,000 customers */];
const highValueQuery = {
totalPurchases: { $gte: 10000 },
status: 'active',
lastPurchase: { $gte: thirtyDaysAgo }
};
const top20 = filterFirst(
customers,
highValueQuery,
20,
{ enableCache: true }
);
const top20Again = filterFirst(
customers,
highValueQuery,
20,
{ enableCache: true }
);import { filter, getFilterCacheStats, clearFilterCache } from '@mcabreradev/filter';
class PerformanceMonitor {
private queryCount = 0;
private cacheHits = 0;
query<T>(data: T[], expression: any): T[] {
this.queryCount++;
const startTime = performance.now();
const result = filter(data, expression, { enableCache: true });
const endTime = performance.now();
if (endTime - startTime < 0.1) {
this.cacheHits++;
}
return result;
}
getStats() {
const cacheStats = getFilterCacheStats();
return {
totalQueries: this.queryCount,
cacheHits: this.cacheHits,
hitRate: (this.cacheHits / this.queryCount * 100).toFixed(2) + '%',
predicateCacheSize: cacheStats.predicateCacheSize,
regexCacheSize: cacheStats.regexCacheSize
};
}
reset() {
this.queryCount = 0;
this.cacheHits = 0;
clearFilterCache();
}
}
const monitor = new PerformanceMonitor();
monitor.query(products, { category: 'Electronics' });
monitor.query(products, { category: 'Electronics' });
monitor.query(products, { price: { $gte: 100 } });
console.log(monitor.getStats());