Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

gql-string-to-object

evargast23ISC1.2.0TypeScript support: included

Helper function to convert GQL strings to objects!

graphql, parser, string, toObject, jest, schema, testing

readme

GraphQL string to object

npm npm

Helper function that will convert GraphQL strings into objects.

Intended to allow easier navigation through the implemented schema. Could be for testing, parsing, you name it!

Installation

npm install -D gql-string-to-object

Example implementations

gqlToObject

import { gqlToObject } from "gql-string-to-object";

const FRAGMENT_EXAMPLE = `
    fragment ProductDetails on Character {
        name
        sku
        price {
            currency
            symbol
        }
    }
    `;

const QUERY_EXAMPLE = `
    query ProductFinder($first: Int = 3) {
        location
        availability
        details {
            ...ProductDetails
        }
    }
    ${FRAGMENT_EXAMPLE}
`;

const gqlAsObject = gqlToObject(QUERY_EXAMPLE, [FRAGMENT_EXAMPLE]);

console.log(JSON.stringify(gqlAsObject));
<summary>Response</summary>
{
  "location": {},
  "availability": {},
  "details": {
    "name": {},
    "sku": {},
    "price": {
      "currency": {},
      "symbol": {}
    }
  }
}

schemaToObject

import { getIntrospectionQuery, schemaToObject } from "gql-string-to-object";

const response = await fetch(YOUR - URL - HERE, {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ query: getIntrospectionQuery() }),
});

const data = await response.json();

console.log(schemaToObject(data.__schema, "sale_tag"));

Output :

{
  "sale_tag": {
    "amount": "Int",
    "label": "String"
  }
}
<summary>Raw schema example</summary>
...
{
  "kind": "OBJECT",
  "name": "sale_tag",
  "description": "A description for the SaleTag",
  "fields": [
    {
      "name": "amount",
      "description": "A description for the amount field",
      "args": [],
      "type": {
        "kind": "SCALAR",
        "name": "Int",
        "ofType": null
      },
      "isDeprecated": false,
      "deprecationReason": null
    },
    {
      "name": "label",
      "description": "Some label description",
      "args": [],
      "type": {
        "kind": "SCALAR",
        "name": "String",
        "ofType": null
      },
      "isDeprecated": false,
      "deprecationReason": null
    }
  ],
  "inputFields": null,
  "interfaces": [],
  "enumValues": null,
  "possibleTypes": null
}
...

Contributing

Got ideas on how to improve this?? Lets make it happen 🚂

PRs here!

Issues over here!