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

Package detail

codemirror-graphql

graphql2.3mMIT2.2.4TypeScript support: included

GraphQL mode and helpers for CodeMirror.

readme

GraphQL mode for CodeMirror

NPM npm downloads License Discord Channel

NOTE: For CodeMirror 6, use cm6-graphql instead

Provides CodeMirror with a parser mode for GraphQL along with a live linter and typeahead hinter powered by your GraphQL Schema.

Demo .gif of GraphQL Codemirror Mode

Getting Started

npm install codemirror-graphql

CodeMirror helpers install themselves to the global CodeMirror when they are imported.

import type { ValidationContext, SDLValidationContext } from 'graphql';

import CodeMirror from 'codemirror';
import 'codemirror/addon/hint/show-hint';
import 'codemirror/addon/lint/lint';
import 'codemirror-graphql/hint';
import 'codemirror-graphql/lint';
import 'codemirror-graphql/mode';

CodeMirror.fromTextArea(myTextarea, {
  mode: 'graphql',
  lint: {
    schema: myGraphQLSchema,
    validationRules: [ExampleRule],
  },
  hintOptions: {
    schema: myGraphQLSchema,
  },
});

External Fragments Example

If you want to have autocompletion for external fragment definitions, there's a new configuration setting available

import CodeMirror from 'codemirror';
import 'codemirror/addon/hint/show-hint';
import 'codemirror/addon/lint/lint';
import 'codemirror-graphql/hint';
import 'codemirror-graphql/lint';
import 'codemirror-graphql/mode';

const externalFragments = /* GraphQL */ `
  fragment MyFragment on Example {
    id: ID!
    name: String!
  }
   fragment AnotherFragment on Example {
    id: ID!
    title: String!
  }
`;

CodeMirror.fromTextArea(myTextarea, {
  mode: 'graphql',
  lint: {
    schema: myGraphQLSchema,
  },
  hintOptions: {
    schema: myGraphQLSchema,
    // here we use a string, but
    // you can also provide an array of FragmentDefinitionNodes
    externalFragments,
  },
});

Custom Validation Rules

If you want to show custom validation, you can do that too! It uses the ValidationRule interface.

import type { ValidationRule } from 'graphql';

import CodeMirror from 'codemirror';
import 'codemirror/addon/hint/show-hint';
import 'codemirror/addon/lint/lint';
import 'codemirror-graphql/hint';
import 'codemirror-graphql/lint';
import 'codemirror-graphql/mode';

const ExampleRule: ValidationRule = context => {
  // your custom rules here
  const schema = context.getSchema();
  const document = context.getDocument();
  return {
    NamedType(node) {
      if (node.name.value !== node.name.value.toLowercase()) {
        context.reportError('only lowercase type names allowed!');
      }
    },
  };
};

CodeMirror.fromTextArea(myTextarea, {
  mode: 'graphql',
  lint: {
    schema: myGraphQLSchema,
    validationRules: [ExampleRule],
  },
  hintOptions: {
    schema: myGraphQLSchema,
  },
});

Build for the web with webpack or browserify.

changelog

Archived For up to date changelogs that are automatically generated by changesets, see CHANGELOG.md files in respective workspaces. For example, the graphiql changelog is located at packages/graphiql/CHANGELOG.md, and the language server changelog is located at packages/graphql-language-service-server/CHANGELOG.md

GraphiQL 0.14.2 - 11 Aug, 2019

Fixes

  • Fix SSR & use of window when introducing new extraKeys capability (#942)

GraphiQL 0.14.0 - 11 Aug, 2019

Features

  • Add defaultVariableEditorOpen prop (#744) - @acao

Fixes

  • Fix formatting of subscription errors - #636, #722 - @benjie
  • preserve ctrl-f key for macOS - #759 - @pd4d10
  • Fix earlier 'Mode graphql failed to advance stream' on Linux by eating an exotic whitespace character - #735 closed by #932 - @benjie
  • Fix: check this.editor exists before this.editor.off in QueryEditor

Codemirror GraphQL - 0.9 - 11 Aug, 2019

Chores

  • BREAKING: Update to gls-interface and gls-parser ^2.1
  • BREAKING: Deprecate support for GraphQL 0.11 and below
  • BREAKING: introduce MIT license
  • BREAKING: Support GraphQL 14

GraphQL Language Service Server 2.1.0 - 11 Aug, 2019

Features

  • Replace babylon with @babel/parser (#879) @ganemone
  • Add support for gql template tags (#883) @ganemone @Neitsch

Chores

  • BREAKING: remove incompatible dependencies on graphql 0.11 and below
  • BREAKING: add peer support for graphql 14.x
  • BREAKING: change copyright to MIT
  • update formatting for monorepo eslint/prettier rules
  • update readme, badges

GraphQL Language Service Parser 2.1.0 - 11 Aug, 2019

Fixes

  • Fix 'mode graphql failed to advance stream' error from shift-alt-space, etc - #932 - @benjie

GraphQL Language Service Interface 2.1.0 - 11 Aug, 2019

Features

  • add __typename field suggestion against object type - (#903) @yoshiakis
  • Update sortText logic, so that field sort is schema driven rather than alphabetically sorted - (#884) @ganemone

Chores

  • BREAKING: add peer support for graphql 14.x
  • MINOR BREAKING: Use MIT license
  • add test case for language service hover - @divyenduz @AGS-

GraphQL Language Service 2.1.0

  • BREAKING: add peer support for graphql 14.x
  • BREAKING: remove incompatible dependencies on graphql 0.11 and below (b/c of gls-utils 2.x)

GraphQL Language Service Utils 2.1.0 - 11 Aug, 2019

Chores

  • BREAKING: change copyright to MIT
  • update formatting for monorepo eslint/prettier rules
  • update readme, badges

GraphQL Language Service Types 1.3.0 - 11 Aug, 2019

Chores

  • BREAKING: change copyright to MIT
  • BREAKING: add peer support for graphql 14.x
  • update formatting for monorepo eslint/prettier rules
  • update readme, badges

GraphiQL 0.13.2 - 21 June, 2019

Features

  • Hint/popup/etc DOM nodes use container rather than creating children of<body> - #791 - @codestryke
  • Add readOnly prop and pass to QueryEditor and VariableEditor - #718 - @TheSharpieOne
  • Add operationName to introspection query - #664 - @jbblanchet
  • Image Preview Functionality - #789 - @dunnbobcat @asiandrummer

Fixes

  • Destroy image hover tooltip when it isn't needed - #874 - @acao
  • Copy non-formatted query to avoid stripping out comments - #832 - @jaebradley
  • Normalizes no-break spaces - #781 - @zouxuoz
  • Prevents crashing on Shift-Alt-Space - #781 - @zouxuoz
  • Fix UI state change after favorite a query - #747 - @benjie

Chores

  • BREAKING: Upgrade to codemirror-graphql 0.8.3 - #773 - @jonaskello
  • BREAKING: Change copyright to GraphQL Contributors, License to MIT
  • Netlify deployments per PR - @orta
  • Add unit test coverage
  • Switch to Jest

Codemirror Graphql Mode 0.8.4 - 11 Aug, 2018

You will now be importing async methods from gls-interface 2.0.0, thus your bundler will require regenerator runtime

Chores

  • BREAKING - Use GLS interface/parser 2.1.0 for graphql 14
  • BREAKING - This introduces async/await

GraphQL Language Service Interface 2.0.0 - 11 Sep, 2018

Chores

  • BREAKING: upgrade internal dependencies - gls-parser, gls-types, and gls-utils to 2.0.0 - @lostplan
  • BREAKING: remove incompatible dependencies on graphql 0.11 and below - @lostplan

GraphQL Language Service Utils 2.0.0 - 11 Sep, 2018

Chores

GraphQL Language Service Utils 1.2.2 - 11 Sep, 2018

Chores

  • add graphql-js 0.13 to peer deps of types package (graphql/graphql-language-service#241)

GraphQL Language Service Server 2.0.0 - 11 Sep, 2019

Chores

  • add graphql-js 0.13 to peer dependencies (graphql/graphql-language-service#241)
  • BREAKING: upgrade internal dependencies - gls-interface, gls-server and gls-utils to 2.0.0 @lostplan

GraphQL Language Service 2.0.0 - 11 Sep, 2018

Chores

  • BREAKING: upgrade internal dependencies - gls-interface, gls-server and gls-utils to 2.0.0 @Sol