GraphQL Inspector ouputs a list of changes between two GraphQL schemas. Every change is precisely explained and marked as breaking, non-breaking or dangerous. It helps you validate documents and fragments against a schema and even find similar or duplicated types.
Major features:
- Compares schemas
- Finds breaking or dangerous changes
- Validates documents against a schema
- Finds similar / duplicated types
- Schema coverage based on documents
- Serves a GraphQL server with faked data and GraphQL Playground
GraphQL Inspector has a CLI and also a programatic API, so you can use it however you want to and even build tools on top of it.
yarn add graphql-inspector
graphql-inspector diff <OLD_SCHEMA> <NEW_SCHEMA>
graphql-inspector validate <DOCUMENTS> <SCHEMA>
graphql-inspector similar <SCHEMA>
graphql-inspector serve <SCHEMA>
graphql-inspector coverage <DOCUMENTS> <SCHEMA>
graphql-inspector --help
# Compare schemas
$ graphql-inspector diff OLD_SCHEMA NEW_SCHEMA
Detected the following changes (4) between schemas:
π Field `name` was removed from object type `Post`
β οΈ Enum value `ARCHIVED` was added to enum `Status`
β
Field `createdAt` was added to object type `Post`
Detected 1 breaking change
# Validate documents
$ graphql-inspector validate DOCUMENTS SCHEMA
Detected 1 invalid document:
π ./documents/post.graphql:
- Cannot query field createdAtSomePoint on type Post. Did you mean createdAt?
# Find similar types
$ graphql-inspector similar SCHEMA
β
Post
Best match (60%): BlogPost
# Serve faked GraphQL API with Playground
$ graphql-inspector serve SCHEMA
β
Serving the GraphQL API on http://localhost:4000/
# Check coverage
$ graphql-inspector coverage DOCUMENTS SCHEMA
Schema coverage
type Query {
post x 1
}
type Post {
id x 1
title x 1
π createdAt x 0
π modifiedAt x 0
}
import {
diff,
validate,
similar,
coverage,
Change,
InvalidDocument,
SimilarMap,
SchemaCoverage,
} from 'graphql-inspector';
// diff
const changes: Change[] = diff(schemaA, schemaB);
// validate
const invalid: InvalidDocument[] = validate(documentsGlob, schema);
// similar
const similar: SimilarMap = similar(schema, typename, threshold);
// coverage
const schemaCoverage: SchemaCoverage = coverage(schema, documents);
// ...
Some part of the library was ported to NodeJS from Ruby's GraphQL Schema Comparator
MIT Β© Kamil Kisiela