Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

graphql-document-analyzer

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

graphql-document-analyzer

Resilient analyzing and printing of GraphQL documents

  • 0.7.0
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
772
decreased by-3.62%
Maintainers
1
Weekly downloads
 
Created
Source

graphql-document-analyzer

The GraphQL document analyzer is a resilient parser that intelligently handles a variety of issues when working with GraphQL documents, including:

  1. Validation issues don't throw errors and are stored as InvalidOperationDefinition and InvalidFragmentDefinition nodes
  2. Top-level comments and other ignored values are stored as Ignored nodes and maintained through to the printed output
  3. Previous revisions can be used to interpolate valid nodes

analyze

analyze is very similar to GraphQL's built-in parse method, with a field sections that contains all valid, invalid, and comment sections of the document. Additionally, definitions will be empty if the document has no valid definitions (instead of throwing an error).

import { analyze } from "graphql-document-analyzer";

const source = `# Notes about A
query A {
  b {
}`;

const document = analyze(source);

expect(document).toEqual({
  kind: "Document",
  definitions: [],

  // Extension of DocumentNode with sections
  sections: [
    {
      kind: "Ignored",
      value: "# Notes about A",
    },
    {
      kind: "InvalidOperationDefinition",
      value: "query A {\n  b {\n}",
    },
  ],
});

interpolate

In some situations, it is helpful to estimate what the document represents based on a previous version of the document. For example, if someone is actively editing a document, maintaining the most-recently valid operation may be helpful. Interpolation occurs at the operation level and is matched by operation name.

// (result of previous analyze / interpolate)
const reference = analyze(`query A {
  b
}`);

const document = analyze(`# Notes about A
query A {
  b {
}`);

const approximate = interpolate(document, reference);

expect(approximate).toEqual({
  kind: 'Document',
  definitions: [
    {
      kind: 'OperationDefinition',
      operation: 'query',
      name: {
        kind: 'Name',
        value: 'A'
      },
      selectionSet: {
        kind: 'SelectionSet'
        selections: [
          {
            kind: 'Field',
            name: {
              kind: 'Name',
              value: 'b'
            }
          }
        ]
      }
    }
  ],
  sections: [
    {
      kind: 'Ignored',
      value: '# Notes about A'
    },
    {
      kind: 'OperationDefinition',
      // same as above...
    }
  ]
});

visit

Visit is a section-aware visitor for extended documents, that aims to keep the document outline consistent with changes from the visitor.

import { analyze, visit } from "graphql-document-analyzer";

const source = `# Notes about A
query A {
  b {
}`;

const document = analyze(source);
const stillHasComments = visit(document, {
  OperationDefinition(node) {
    // ...
  },
});

print

To include top-level comments and invalid sections in the printed output, use print.

import { analyze, print } from "graphql-document-analyzer";

const source = `# Notes about A
query A {
  b {
}`;

const document = analyze(source);
const text = print(document);

expect(text).toEqual(source);

Keywords

FAQs

Package last updated on 16 Aug 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc