Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/evargast/gql-string-to-object


https://github.com/evargast/gql-string-to-object

Last synced: 23 days ago
JSON representation

Awesome Lists containing this project

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

```shell
npm install -D gql-string-to-object
```

## Example implementations

### gqlToObject

```javascript
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));
```

Response

```json
{
"location": {},
"availability": {},
"details": {
"name": {},
"sku": {},
"price": {
"currency": {},
"symbol": {}
}
}
}
```


### schemaToObject

```javascript
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 :

```json
{
"sale_tag": {
"amount": "Int",
"label": "String"
}
}
```

Raw schema example

```json
...
{
"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](https://github.com/evargast/GQL-string-to-object/pulls) here!

[Issues](https://github.com/evargast/GQL-string-to-object/issues) over here!