1.2.0 • Published 4 years ago

gql-string-to-object v1.2.0

Weekly downloads
1
License
ISC
Repository
github
Last release
4 years ago

GraphQL string to object

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));
{
  "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"
  }
}
...
{
  "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!