Skip to content

veryfine-hat/graphql

Repository files navigation

@byaga/graphql

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.

Installation

This library is written in TypeScript and can be used in any JavaScript or TypeScript project. To install, use npm:

npm install @byaga/graphql

Usage

intersectionOf

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.

Testing

This library includes a comprehensive set of unit tests to ensure its functionality. You can run these tests using npm:

npm test

Contributing

Contributions are welcome! Please submit a pull request with any improvements.

License

This library is licensed under the MIT License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published