graphql-to-json-schema

Converts GraphQL Schema Definition to JSONSchema

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
graphql-to-json-schema
2801.0.05 years ago5 years agoMinified + gzip package size for graphql-to-json-schema in KB

Readme

graphql-to-jsonschema

Converts GraphQL Schema Definition to JSONSchema
(Compatible with mozilla-services/react-jsonschema-form)

Installation

npm install graphql-to-json-schema

Usage

const transform = require('graphql-to-json-schema');

const schema = transform(`
  scalar Foo

  union MyUnion = Foo | String | Float

  enum MyEnum {
    FIRST_ITEM
    SECOND_ITEM
    THIRD_ITEM
  }

  type Stuff {
    my_field: Int
    req_field: String!
    recursion: MoreStuff
    custom_scalar: Foo
    enum: MyEnum
  }

  type MoreStuff {
    first: [Float]
    identifier: [ID]!
    reference: Stuff!
    bool: Boolean!
    union: MyUnion
    with_params(param1: Int, param2: [Float]): Int
  }
`);

console.log(schema);

The code above returns the following JSON as a plain JS object:
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "definitions": {
    "Foo": {
      "title": "Foo",
      "type": "GRAPHQL_SCALAR"
    },
    "MyUnion": {
      "title": "MyUnion",
      "type": "GRAPHQL_UNION",
      "oneOf": [
        {
          "$ref": "#/definitions/Foo"
        },
        {
          "type": "string",
          "required": false
        },
        {
          "type": "number",
          "required": false
        }
      ]
    },
    "MyEnum": {
      "title": "MyEnum",
      "type": "GRAPHQL_ENUM",
      "enum": [
        "FIRST_ITEM",
        "SECOND_ITEM",
        "THIRD_ITEM"
      ]
    },
    "Stuff": {
      "title": "Stuff",
      "type": "object",
      "properties": {
        "my_field": {
          "type": "integer",
          "required": false,
          "title": "my_field",
          "arguments": []
        },
        "req_field": {
          "type": "string",
          "required": true,
          "title": "req_field",
          "arguments": []
        },
        "recursion": {
          "$ref": "#/definitions/MoreStuff",
          "title": "recursion",
          "arguments": []
        },
        "custom_scalar": {
          "$ref": "#/definitions/Foo",
          "title": "custom_scalar",
          "arguments": []
        },
        "enum": {
          "$ref": "#/definitions/MyEnum",
          "title": "enum",
          "arguments": []
        }
      },
      "required": [
        "req_field"
      ]
    },
    "MoreStuff": {
      "title": "MoreStuff",
      "type": "object",
      "properties": {
        "first": {
          "type": "array",
          "items": {
            "type": {
              "type": "number",
              "required": false
            }
          },
          "title": "first",
          "arguments": []
        },
        "identifier": {
          "type": "array",
          "items": {
            "type": {
              "type": "string",
              "required": false
            }
          },
          "required": true,
          "title": "identifier",
          "arguments": []
        },
        "reference": {
          "$ref": "#/definitions/Stuff",
          "required": true,
          "title": "reference",
          "arguments": []
        },
        "bool": {
          "type": "boolean",
          "required": true,
          "title": "bool",
          "arguments": []
        },
        "union": {
          "$ref": "#/definitions/MyUnion",
          "title": "union",
          "arguments": []
        },
        "with_params": {
          "type": "integer",
          "required": false,
          "title": "with_params",
          "arguments": [
            {
              "title": "param1",
              "type": {
                "type": "integer",
                "required": false
              },
              "defaultValue": null
            },
            {
              "title": "param2",
              "type": {
                "type": "array",
                "items": {
                  "type": {
                    "type": "number",
                    "required": false
                  }
                }
              },
              "defaultValue": null
            }
          ]
        }
      },
      "required": [
        "identifier",
        "reference",
        "bool"
      ]
    }
  }
}