SQL-like Wildcards
Use % and _ for flexible pattern matching. Search like a pro with familiar SQL syntax.
A powerful TypeScript/JavaScript library with MongoDB-style operators, lazy evaluation, and zero dependencies
Install the package:
npm install @mcabreradev/filterStart filtering:
import { filter } from '@mcabreradev/filter';
const users = [
{ name: 'Alice', email: 'alice@example.com', age: 30, city: 'Berlin' },
{ name: 'Bob', email: 'bob@example.com', age: 25, city: 'London' },
{ name: 'Charlie', email: 'charlie@example.com', age: 35, city: 'Berlin' }
];
// Simple string matching
filter(users, 'Berlin');
// โ Returns Alice and Charlie
// Wildcard patterns
filter(users, '%alice%');
// โ Returns Alice
// Object-based filtering
filter(users, { city: 'Berlin', age: 30 });
// โ Returns Alice
// MongoDB-style operators
filter(users, { age: { $gte: 25, $lt: 35 } });
// โ Returns Bob and Alice
// Logical operators
filter(users, {
$and: [
{ city: 'Berlin' },
{ age: { $gte: 30 } }
]
});
// โ Returns Alice and Charlie
// Debug mode for visual inspection
import { filterDebug } from '@mcabreradev/filter';
const result = filterDebug(users, {
$and: [
{ city: 'Berlin' },
{ $or: [{ age: { $lt: 30 } }, { premium: true }] }
]
});
result.print();
// Outputs visual tree with match statisticsimport { useFilter, useDebouncedFilter } from '@mcabreradev/filter';
function UserList() {
const { filtered, isFiltering } = useFilter(users, { active: true });
return <div>{filtered.map(user => <User key={user.id} {...user} />)}</div>;
}<script setup>
import { ref } from 'vue';
import { useFilter } from '@mcabreradev/filter';
const searchTerm = ref('');
const { filtered, isFiltering } = useFilter(users, searchTerm);
</script><script>
import { writable } from 'svelte/store';
import { useFilter } from '@mcabreradev/filter';
const searchTerm = writable('');
const { filtered, isFiltering } = useFilter(users, searchTerm);
</script>interface Product {
id: number;
name: string;
price: number;
category: string;
rating: number;
inStock: boolean;
tags: string[];
}
const products: Product[] = [...];
// E-commerce: Find affordable, highly-rated electronics in stock
const affordableElectronics = filter(products, {
category: 'Electronics',
price: { $lte: 1000 },
rating: { $gte: 4.5 },
inStock: { $eq: true }
});
// Search: Products matching keyword with filters
const searchResults = filter(products, {
name: { $contains: 'laptop' },
brand: { $in: ['Apple', 'Dell', 'HP'] },
price: { $gte: 500, $lte: 2000 }
});
// Complex queries with logical operators
const premiumDeals = filter(products, {
$and: [
{ inStock: true },
{
$or: [
{ rating: { $gte: 4.5 } },
{ price: { $lt: 50 } }
]
},
{ $not: { category: 'Clearance' } }
]
});MIT License - see LICENSE for details.
Copyright ยฉ 2025 Miguelangel Cabrera