This library provides a set of utilities to filter data stored in a QueryData
object. One of the key features is the intersectionOf
function, which allows you to apply multiple filters and get the intersection of the results.
This library is written in TypeScript and can be used in any JavaScript or TypeScript project. To install, use npm:
npm install @byaga/graphql
The intersectionOf
function takes one or more predicate filters and returns a function that, when called with a QueryData
object, returns the intersection of the results of the predicate filters.
Here is an example of how to use intersectionOf
:
import {intersectionOf, objectIsOneOf, objectIs, byPredicate} from '@byaga/graphql';
import {QueryData} from '@byaga/graphql';
import {byPredicate} from "./by-predicate";
interface YourType {
id: string,
name: string,
amount: number
}
// Define your data
const data = new Map<string, YourType>([
['id1', {id: 'id1', name: 'value1', value: 10}],
['id2', {id: 'id2', name: 'value2', value: 10}],
['id3', {id: 'id3', name: 'value3', value: 30}]
]);
// Create a QueryData object
const collection = new QueryData(data);
// Define your filters
const filter1 = values => values.get('id1');
const filter2 = values => values.get('value2');
// Get the intersection of the results of the filters
const result = intersectionOf<YourType>(
property('value', is(10)),
property('name', isOneOf('value1', 'value2')),
)(collection);
console.log(result); // Outputs: ['id1', 'id2']
console.log(collection.getItems(result)); // Outputs: [{ id: 'id1', name: 'value1' }, { id: 'id2', name: 'value2' }]
In this example, filter1
and filter2
are functions that take a QueryData
object and return an array of keys that pass the filter. The intersectionOf
function then returns the intersection of these arrays.
Please note that the intersectionOf
function returns a new function that takes a QueryData
object. This allows you to define your filters once and then apply them to different QueryData
objects.
This library includes a comprehensive set of unit tests to ensure its functionality. You can run these tests using npm:
npm test
Contributions are welcome! Please submit a pull request with any improvements.
This library is licensed under the MIT License.