graphql-filter-object
TypeScript icon, indicating that this package has built-in type declarations

1.0.0-beta.1 • Public • Published

graphql-filter-object

build status Known Vulnerabilities Renovate

graphql-filter-object is a library that can be used to filter objects and arrays according to a query, subscription or mutation specified via a gql object.

Documentation

import buildGraphqlFilter from 'graphql-filter-object'

const objectFilter = buildGraphqlFilter(gql`
  query GetCat($catName: String!) {
    getCat(cats: $catName) {
      name
      qualities {
        qualityName
        loveliness
      }
    }
  }
`)

const filtered = objectFilter.filter({
  getCat: {
    name: 'Mr Onions',
    breed: 'Major Springer',
    qualities: [
      {
        qualityName: 'Cuddliness',
        loveliness: 4_000,
        usefulness: -10,
      },
      {
        qualityName: 'Fighting',
        loveliness: -10,
        usefulness: 20,
      },
    ],
  },
})

After running this, filtered will equal:

const filtered = {
  getCat: {
    name: 'Mr Onions',
    qualities: [
      {
        qualityName: 'Cuddliness',
        loveliness: 4_000,
      },
      {
        qualityName: 'Fighting',
        loveliness: -10,
      },
    ],
  },
}

Also supports fragments:

import buildGraphqlFilter from 'graphql-filter-object'

const objectFilter = buildGraphqlFilter(
  gql`
    fragment QualitiesFragment on CatQualities {
      qualityName
      loveliness
    }

    fragment BigCatQualitiesFragment on BigCatQualities {
      qualityName
      fierceness
    }

    query GetCat($catName: String!) {
      getCat(cats: $catName) {
        name
        qualities {
          ...QualitiesFragment
          ...BigCatQualitiesFragment
        }
      }
    }
  `,
)

const filtered = filter.filter({
  getCat: [
    {
      name: 'Turback',
      weight: 9_000,
      qualities: [
        {
          __typename: 'BigCatQualities',
          qualityName: 'furry',
          loveliness: 60,
          fierceness: 100,
          annoying: 10,
        },
        {
          __typename: 'BigCatQualities',
          qualityName: 'cuddly',
          loveliness: 100,
          fierceness: 19,
          annoying: 0,
        },
      ],
    },
    {
      name: 'Fluff-hunter',
      weight: 0.1,
      qualities: [
        {
          __typename: 'CatQualities',
          qualityName: 'furry',
          loveliness: 60,
          fierceness: 27,
          annoying: 10,
        },
      ],
    },
  ],
})

After running this, filtered will equal:

const filtered = {
  getCat: [
    {
      name: 'Turback',
      qualities: [
        {
          qualityName: 'furry',
          fierceness: 100,
        },
        {
          qualityName: 'cuddly',
          fierceness: 19,
        },
      ],
    },
    {
      name: 'Fluff-hunter',
      qualities: [
        {
          qualityName: 'furry',
          loveliness: 60,
        },
      ],
    },
  ],
}

Readme

Keywords

Package Sidebar

Install

npm i graphql-filter-object

Weekly Downloads

0

Version

1.0.0-beta.1

License

ISC

Unpacked Size

99.3 kB

Total Files

31

Last publish

Collaborators

  • jpike