JSPM

@graphql-inspector/cli

5.1.0-alpha-20241111105935-d6f72f89e996893035a838d61aa3b129c82e8de5
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 128482
  • Score
    100M100P100Q167712F
  • License MIT

Tooling for GraphQL. Compare GraphQL Schemas, check documents, find breaking changes, find similar types.

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

npm version

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.

Example

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)

Diff

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)

Similar

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)

Coverage

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)

Validate

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.

GitHub

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