Home

Awesome

hql-tag

CI Version Downloads/week License

hql-tag is a Hasura specific wrapper over graphql-tag. In Hasura GraphQL backend, we can query data with arguments directly without adding to backend schema using where argument and sort data using order_by argument. However, in a real-world query involving multiple where conditions on multiple arguments, the queries are not that readable.

hql-tag solves this issue by providing shorthand way of writing where and order_by arguments.

DEMO - Link to codesandbox to compare and play around with graphql-tag & hql-tag

Note: This library works fine with all the GraphQL Client frameworks that works with graphql-tag.

Installation

Install the dependencies. Please note, graphql & graphql-tag are peerDependencies

yarn add graphql graphql-tag hql-tag

or 

npm i graphql graphql-tag hql-tag

Usage

Imagine a clumsy query as below:

import gql from 'graphql-tag';

const clumsyHasuraQuery = gql`
  query getProductById($id: Int!) {
    product(
      limit: 10
      offset: 10
      where: { id: { _eq: $id }, quantity: { _gte: 10 }, type_id: { _eq: 10, _gte: 22, _lte: 5, _in: [72,73,74] } }
      order_by: {category: asc, description: desc}
    ) {
      category
      id
    }
  }
`;

The above query can be made more readable and elegant using hql-tag as below:

Note: It is recommended to import hql-tag as gql to get syntax highlighting and linting support from vscode extensions

import gql from 'hql-tag';

const elegantHasuraQuery = gql`
  query getProductById($id: Int!) {
    product(
      limit: 10
      offset: 10
      id_eq: $id
      quantity_gte: 10
      type_id_eq: 10
      type_id_gte: 22
      type_id_lte: 5
      type_id_in: [72, 73, 74]
      category_ord: asc
      description_order: desc
    ) {
      category
      id
    }
  }
`;

Steps to use:

Visit hql-cli to enjoy GraphiQL support in single command

Roadmap

Community

The creator of the library is always open to discussions/suggestions. Vilva Athiban Twitter