format-graphql icon indicating copy to clipboard operation
format-graphql copied to clipboard

Formats GraphQL schema definition language (SDL) document.

format-graphql

GitSpo Mentions Travis build status Coveralls NPM version Canonical Code Style Twitter Follow

Formats GraphQL schema definition language (SDL) document.


  • Motivation
  • Behaviour
    • Example
  • Usage
    • Command Line
    • Node API
    • Hooks

Motivation

As schema grows in size, it becomes desirable to automate schema organisation. The primary function of format-graphql is to sort definitions and fields in an alphabetical order, therefore enabling predictable discovery and grouping of related schema entities.

Behaviour

Alphabetically sorts definitions, fields and arguments.

Example

Input:

type Query {
  bananas: [Banana!]!
  apples: [Apple!]!
}

type Apple {
  name: String!
  id: ID!
}

type Banana {
  name: String!
  id: ID!
}

Output:

type Apple {
  id: ID!
  name: String!
}

type Banana {
  id: ID!
  name: String!
}

type Query {
  apples: [Apple!]!
  bananas: [Banana!]!
}

Usage

Command Line

$ format-graphql --help
Sort GraphQL schema definition language (SDL) document.

Positionals:
  sdl-path  Path to the GraphQL schema definition (SDL) document.       [string]

Options:
  --version           Show version number                              [boolean]
  --help              Show help                                        [boolean]
  --sort-arguments    Sort on arguments                [boolean] [default: true]
  --sort-definitions  Sort on definitions              [boolean] [default: true]
  --sort-fields       Sort on fields                   [boolean] [default: true]
  --write             Overrides contents of the SDL document.
                                                      [boolean] [default: false]

$ # Prints formatted schema.
$ format-graphql ./schema.graphql
$
$ # Overrides target schema.
$ format-graphql --write=true ./schema.graphql

Node API

formatSdl(schema, options)

Returns a formatted GraphQL SDL String.

Parameters

  • schema: string

  • options (optional): object:

    {
      sortDefinitions?: boolean,
      sortFields?: boolean,
      sortArguments?: boolean,
    }
    

Example

import {formatSdl} from 'format-graphql';

formatGraphql('type Foo { bar: String }');

Hooks

I recommend using husky to setup a pre-commit hook that would format the schema, e.g.

"husky": {
  "hooks": {
    "pre-commit": "format-graphql --write true src/schema.graphql"
  }
},