Package Exports
- @graphql-inspector/cli
- @graphql-inspector/cli/action/helpers/check-runs
- @graphql-inspector/cli/action/helpers/config
- @graphql-inspector/cli/action/helpers/diagnostics
- @graphql-inspector/cli/action/helpers/diff
- @graphql-inspector/cli/action/helpers/errors
- @graphql-inspector/cli/action/helpers/loaders
- @graphql-inspector/cli/action/helpers/location
- @graphql-inspector/cli/action/helpers/logger
- @graphql-inspector/cli/action/helpers/notifications
- @graphql-inspector/cli/action/helpers/schema
- @graphql-inspector/cli/action/helpers/types
- @graphql-inspector/cli/action/helpers/utils
- @graphql-inspector/cli/action/src/action
- @graphql-inspector/cli/action/src/checks
- @graphql-inspector/cli/action/src/files
- @graphql-inspector/cli/action/src/git
- @graphql-inspector/cli/action/src/index
- @graphql-inspector/cli/action/src/run
- @graphql-inspector/cli/action/src/types
- @graphql-inspector/cli/action/src/utils
- @graphql-inspector/cli/ci/src/index
- @graphql-inspector/cli/cli/src/index
- @graphql-inspector/cli/commands/audit/src/index
- @graphql-inspector/cli/commands/commands/src/index
- @graphql-inspector/cli/commands/coverage/src/index
- @graphql-inspector/cli/commands/diff/src/index
- @graphql-inspector/cli/commands/docs/src/index
- @graphql-inspector/cli/commands/introspect/src/index
- @graphql-inspector/cli/commands/serve/src/fake
- @graphql-inspector/cli/commands/serve/src/index
- @graphql-inspector/cli/commands/similar/src/index
- @graphql-inspector/cli/commands/validate/src/index
- @graphql-inspector/cli/config/src/index
- @graphql-inspector/cli/core/src/ast/document
- @graphql-inspector/cli/core/src/coverage/index
- @graphql-inspector/cli/core/src/coverage/output/json
- @graphql-inspector/cli/core/src/diff/argument
- @graphql-inspector/cli/core/src/diff/changes/argument
- @graphql-inspector/cli/core/src/diff/changes/change
- @graphql-inspector/cli/core/src/diff/changes/directive
- @graphql-inspector/cli/core/src/diff/changes/directive-usage
- @graphql-inspector/cli/core/src/diff/changes/enum
- @graphql-inspector/cli/core/src/diff/changes/field
- @graphql-inspector/cli/core/src/diff/changes/input
- @graphql-inspector/cli/core/src/diff/changes/object
- @graphql-inspector/cli/core/src/diff/changes/schema
- @graphql-inspector/cli/core/src/diff/changes/type
- @graphql-inspector/cli/core/src/diff/changes/union
- @graphql-inspector/cli/core/src/diff/directive
- @graphql-inspector/cli/core/src/diff/enum
- @graphql-inspector/cli/core/src/diff/field
- @graphql-inspector/cli/core/src/diff/index
- @graphql-inspector/cli/core/src/diff/input
- @graphql-inspector/cli/core/src/diff/interface
- @graphql-inspector/cli/core/src/diff/object
- @graphql-inspector/cli/core/src/diff/onComplete/types
- @graphql-inspector/cli/core/src/diff/rules/config
- @graphql-inspector/cli/core/src/diff/rules/consider-usage
- @graphql-inspector/cli/core/src/diff/rules/dangerous-breaking
- @graphql-inspector/cli/core/src/diff/rules/ignore-description-changes
- @graphql-inspector/cli/core/src/diff/rules/ignore-usage-directives
- @graphql-inspector/cli/core/src/diff/rules/index
- @graphql-inspector/cli/core/src/diff/rules/safe-unreachable
- @graphql-inspector/cli/core/src/diff/rules/suppress-removal-of-deprecated-field
- @graphql-inspector/cli/core/src/diff/rules/types
- @graphql-inspector/cli/core/src/diff/scalar
- @graphql-inspector/cli/core/src/diff/schema
- @graphql-inspector/cli/core/src/diff/union
- @graphql-inspector/cli/core/src/index
- @graphql-inspector/cli/core/src/similar/index
- @graphql-inspector/cli/core/src/utils/apollo
- @graphql-inspector/cli/core/src/utils/compare
- @graphql-inspector/cli/core/src/utils/graphql
- @graphql-inspector/cli/core/src/utils/is-deprecated
- @graphql-inspector/cli/core/src/utils/path
- @graphql-inspector/cli/core/src/utils/string
- @graphql-inspector/cli/core/src/validate/alias-count
- @graphql-inspector/cli/core/src/validate/complexity
- @graphql-inspector/cli/core/src/validate/directive-count
- @graphql-inspector/cli/core/src/validate/index
- @graphql-inspector/cli/core/src/validate/query-depth
- @graphql-inspector/cli/core/src/validate/token-count
- @graphql-inspector/cli/core/utils/testing
- @graphql-inspector/cli/index
- @graphql-inspector/cli/loaders/code/src/index
- @graphql-inspector/cli/loaders/git/src/index
- @graphql-inspector/cli/loaders/github/src/index
- @graphql-inspector/cli/loaders/graphql/src/index
- @graphql-inspector/cli/loaders/json/src/index
- @graphql-inspector/cli/loaders/loaders/src/index
- @graphql-inspector/cli/loaders/url/src/index
- @graphql-inspector/cli/logger/src/index
- @graphql-inspector/cli/package.json
- @graphql-inspector/cli/testing/src/index
- @graphql-inspector/cli/testing/src/setup-file
Readme
GraphQL Inspector
GraphQL Inspector outputs 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.
Features
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
- GitHub Bot
- GitHub Actions
GraphQL Inspector has a CLI and also a programmatic API, so you can use it however you want to and even build tools on top of it.
Installation
# CLI
pnpm add @graphql-inspector/cli
# Core API for programmatic usage
pnpm add @graphql-inspector/core
Compare schemas
Compares schemas and finds breaking or dangerous changes.
CLI:
$ graphql-inspector diff OLD_SCHEMA NEW_SCHEMA
API:
import { Change, diff } from '@graphql-inspector/core'
const changes: Change[] = diff(schemaA, schemaB)
Find similar types
Finds similar / duplicated types.
CLI:
$ graphql-inspector similar SCHEMA
API:
import { similar, SimilarMap } from '@graphql-inspector/core'
const similar: SimilarMap = similar(schema, typename, threshold)
Check coverage
Schema coverage based on documents. Find out how many times types and fields are used in your application.
CLI:
$ graphql-inspector coverage DOCUMENTS SCHEMA
API:
import { coverage, SchemaCoverage } from '@graphql-inspector/core'
const schemaCoverage: SchemaCoverage = coverage(schema, documents)
Validate documents
Validates documents against a schema and looks for deprecated usage.
CLI:
$ graphql-inspector validate DOCUMENTS SCHEMA
API:
import { InvalidDocument, validate } from '@graphql-inspector/core'
const invalid: InvalidDocument[] = validate(documentsGlob, schema)
Audit documents
Audit your documents for useful metrics such as query depth, directive count and alias count.
CLI:
$ graphql-inspector audit DOCUMENTS
API:
Not available
$ pnpm graphql-inspector audit "packages/**/*.graphql|packages/**/*.ts(x)"
Maximum depth is 16
Maximum alias amount is 3
Maximum directive amount is 6
$ pnpm graphql-inspector audit "packages/**/*.graphql|packages/**/*.ts(x)" --detail
┌────────────────┬───────┬─────────┬────────────┐
│ Operation Name │ Depth │ Aliases │ Directives │
├────────────────┼───────┼─────────┼────────────┤
│ getFoo │ 1 │ 2 │ 6 │
├────────────────┼───────┼─────────┼────────────┤
│ getBar │ 16 │ 3 │ 0 │
└────────────────┴───────┴─────────┴────────────┘
Maximum depth is 16
Maximum alias amount is 3
Maximum directive amount is 6
Serve faked GraphQL API
Serves a GraphQL server with faked data and GraphQL Playground
CLI:
$ graphql-inspector serve SCHEMA
✅ Serving the GraphQL API on http://localhost:4000/
Introspect GraphQL server
Introspects a GraphQL Server and writes the result to a file
CLI:
$ graphql-inspector introspect SCHEMA --write schema.json
✅ Introspection result saved to schema.json
GitHub Bot and GitHub Actions
Have a per-repository, self-hosted GraphQL Inspector service or deploy it with Docker.
# install
pnpm add --global @graphql-inspector/actions
# use
$ graphql-inspector-github
{
"name": "app",
"scripts": {
"precommit": "graphql-inspector introspect schema.js --write schema.graphql && git add schema.graphql"
},
"graphql-inspector": {
"diff": true,
"schema": {
"ref": "master",
"path": "schema.graphql"
}
}
}
Get GitHub annotations in your PRs.
CLI in more details
SCHEMA
Path to a CommonJS or ES Module that exports an object
Example:
graphql-inspector coverage ./src/schema.js
Example with TypeScript:
graphql-inspector coverage ./src/schema.ts --require ts-node/register
// String
export default `
type Query {
hello: String
}
`
// GraphQLSchema
export default makeExecutableSchema({...});
// GraphQL Document
export default gql`
type Query {
hello: String
}
`
// IntrospectionQuery result
export default {
data: {
__schema: {
...
}
}
}
Pointer to a Git repository
Example:
graphql-inspector diff git:origin/master:schema.graphql
Pattern:
git:ref:path/to/file
Pointer to a GitHub repository
Example:
graphql-inspector coverage github:kamilkisiela/graphql-inspector-example#master:schema.graphql
Pattern:
github:owner/name#ref:path/to/file
GraphQL File
Example:
graphql-inspector coverage schema.graphql
graphql-inspector coverage schema.gql
JSON File
Example:
graphql-inspector coverage introspected-schema.json
URL to a GraphQL endpoint
Example:
graphql-inspector coverage https://localhost:3000/graphql
DOCUMENTS
Glob pattern
Example:
graphql-inspector validate ./src/**/*.{js,jsx,tsx,graphql} https://localhost:3000/graphql
Supports TypeScript, JavaScript and GraphQL Files (Extensions: ts,tsx,js,jsx,graphql,gql,graphqls).
Help
Find out what the CLI is capable of:
graphql-inspector --help
graphql-inspector similar --help
License
MIT © Kamil Kisiela