npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

broccoli-graphql-filter

v1.0.1

Published

Converts graphql files to an AST representation

Downloads

16,494

Readme

broccoli-graphql-filter

Build Status

A broccoli filter that converts graphql files to an es6 module exporting an AST representation of the query.

Installation

npm install --save broccoli-graphql-filter

Configuration

  • keepExtension = false, optional – If true, creates files called my-query.graphql.js instead of my-query.js, so that you can import the files as ./my-query.graphql instead of ./my-query.

  • parseAt = 'build-time', optional - Determines when documents are parsed. If set to 'run-time', GraphQL documents will be included as tagged template strings using graphql-tag. If left blank or set to 'build-time', documents will be included in their parsed JSON format, which is typically larger than the source document text, but doesn't require additional work at runtime to parse. Note that 'run-time' requires that the graphql-tag package is available to import in your application.

Usage

Given the following .graphql files:

my-query.graphql

# import * from "./my-fragment.gql"

query myQuery {
  foo {
    ...MyFragment
  }
}

my-fragment.graphql

fragment MyFragment on Foo {
  hello
}

the filter will output the following JS:

my-query.js

const doc = {
  kind: 'Document',
  definitions: [
    {
      kind: 'OperationDefinition',
      operation: 'query',
      name: {
        kind: 'Name',
        value: 'myQuery'
      },
      variableDefinitions: [],
      directives: [],
      selectionSet: {
        kind: 'SelectionSet',
        selections: [
          {
            kind: 'Field',
            name: {
              kind: 'Name',
              value: 'foo'
            },
            arguments: [],
            directives: [],
            selectionSet: {
              kind: 'SelectionSet',
              selections: [
                {
                  kind: 'FragmentSpread',
                  name: {
                    kind: 'Name',
                    value: 'MyFragment'
                  },
                  directives: []
                }
              ]
            }
          }
        ]
      }
    }
  ],
  loc: {
    start: 0,
    end: 77
  }
};
export default doc;
import dep0 from './my-fragment.gql';
doc.definitions = doc.definitions.concat(dep0.definitions);

my-fragment.js

const doc = {
  kind: 'Document',
  definitions: [
    {
      kind: 'FragmentDefinition',
      name: {
        kind: 'Name',
        value: 'MyFragment'
      },
      typeCondition: {
        kind: 'NamedType',
        name: {
          kind: 'Name',
          value: 'Foo'
        }
      },
      directives: [],
      selectionSet: {
        kind: 'SelectionSet',
        selections: [
          {
            kind: 'Field',
            name: {
              kind: 'Name',
              value: 'hello'
            },
            arguments: [],
            directives: []
          }
        ]
      }
    }
  ],
  loc: {
    start: 0,
    end: 39
  }
};
export default doc;

Import Syntax

Imports of fragments from other locations are specified using comments in a format compatible with a subset of graphql-import.

To bring all identifiers in a specific module into scope, you can use *:

# import * from 'path/to/module'

To only import specific identifiers, you can write them out separated by commas:

# import Foo from 'path/to/foo'
# import Bar, Baz from 'path/to/bar-baz'

Migrating Import Syntax

Up to v0.3.2, broccoli-graphql-filter used a coarser-grained import syntax. In order to align with the broader ecosystem and enable better static analysis opportunities, we've moved to a subset of graphql-import's syntax.

To keep the semantics of your existing imports while migrating to the new syntax, you can perform project-wide find/replace, replacing all instances of #import in your project's GraphQL documents with # import * from.

Acknowledgements

The filter code was extracted from https://github.com/bgentry/ember-apollo-client and was originally contributed by https://github.com/dfreeman.