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

gatsby-v5-source-hygraph

v3.0.1

Published

A Gatsby v5 source plugin for Hygraph projects

Downloads

14

Readme

Installation

yarn add gatsby-v5-source-hygraph gatsby-plugin-image

Tested on Gatsby v5, Node 20.11.0

Configuration

We recommend using environment variables with your Hygraph token and endpoint values. You can learn more about using environment variables with Gatsby here.

Basic

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
      },
    },
  ],
}

Authorization

You can also provide an auth token using the token configuration key. This is necessary if your Hygraph project is not publicly available, or you want to scope access to a specific content stage (i.e. draft content).

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        token: process.env.HYGRAPH_TOKEN,
      },
    },
  ],
}

Options

| Key | Type | Description | | --------------------- | ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | endpoint | String (required) | The endpoint URL for the Hygraph project. This can be found in the project settings UI. | | token | String | If your Hygraph project is not publicly accessible, you will need to provide a Permanent Auth Token to correctly authorize with the API. You can learn more about creating and managing API tokens here. | | typePrefix | String _(Default: Hygraph_)_ | The string by which every generated type name is prefixed with. For example, a type of Post in Hygraph would become Hygraph_Post by default. If using multiple instances of the source plugin, you must provide a value here to prevent type conflicts. | | downloadLocalImages | Boolean (Default: false) | Download and cache Hygraph image assets in your Gatsby project. Learn more. | | buildMarkdownNodes | Boolean (Default: false) | Build markdown nodes for all RichText fields in your Hygraph schema. Learn more. | | fragmentsPath | String (Default: hygraph-fragments) | The local project path where generated query fragments are saved. This is relative to your current working directory. If using multiple instances of the source plugin, you must provide a value here to prevent type and/or fragment conflicts. | | locales | String (Default: ['en']) | An array of locale key strings from your Hygraph project. Learn more. You can read more about working with localisation in Hygraph here. | | stages | String (Default: ['PUBLISHED']) | An array of Content Stages from your Hygraph project. Learn more. You can read more about using Content Stages here. | | queryConcurrency | Integer (Default: 10) | The number of promises ran at once when executing queries. |

Features

Querying localised nodes

If using Hygraph localisation, this plugin provides support to build nodes for all provided locales.

Update your plugin configuration to include the locales key.

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        locales: ['en', 'de'],
      },
    },
  ],
}

To query for nodes for a specific locale, use the filter query argument.

{
  enProducts: allHygraphProduct(filter: { locale: { eq: en } }) {
    nodes {
      name
    }
  }
}

Querying from content stages

This plugin provides support to build nodes for entries from multiple Content Stages.

The provided Content Stages must be accessible according to the configuration of your project's API access. If providing a token, then that Permanent Auth Token must have permission to query data from all provided Content Stages.

The example below assumes that both the DRAFT and PUBLISHED stages are publicly accessible.

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        stages: ['DRAFT', 'PUBLISHED'],
      },
    },
  ],
}

To query for nodes from a specific Content Stage, use the filter query argument.

{
  allHygraphProduct(filter: { stage: { eq: DRAFT } }) {
    nodes {
      name
    }
  }
}

Usage with gatsby-plugin-image

Requires gatsby-plugin-image as a project dependency.

This source plugin supports gatsby-plugin-image for responsive, high performance Hygraph images direct from our CDN.

Use the gatsbyImageData resolver on your Hygraph_Asset nodes.

{
  allHygraphAsset {
    nodes {
      gatsbyImageData(layout: FULL_WIDTH)
    }
  }
}

gatsbyImageData resolver arguments

| Key | Type | Description | | ---------------------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | aspectRatio | Float | Force a specific ratio between the image’s width and height. | | backgroundColor | String | Background color applied to the wrapper. | | breakpoints | [Int] | Output widths to generate for full width images. Default is to generate widths for common device resolutions. It will never generate an image larger than the source image. The browser will automatically choose the most appropriate. | | height | Int | Change the size of the image. | | layout | GatsbyImageLayout (CONSTRAINED/FIXED/FULL_WIDTH) | Determines the size of the image and its resizing behavior. | | outputPixelDensities | [Float] | A list of image pixel densities to generate. It will never generate images larger than the source, and will always include a 1x image. The value is multiplied by the image width, to give the generated sizes. For example, a 400 px wide constrained image would generate 100, 200, 400 and 800 px wide images by default. Ignored for full width layout images, which use breakpoints instead. | | quality | Int | The default image quality generated. This is overridden by any format-specific options. | | sizes | String | The <img> sizes attribute, passed to the img tag. This describes the display size of the image, and does not affect generated images. You are only likely to need to change this if your are using full width images that do not span the full width of the screen. | | width | Int | Change the size of the image. | | placeholder | NONE/BLURRED/DOMINANT_COLOR/TRACED_SVG | Choose the style of temporary image shown while the full image loads. |

NOTE: gatsby-plugin-sharp needs to be listed as a dependency on your project if you plan to use placeholder TRACED_SVG or DOMINANT_COLOR.

For more information on using gatsby-plugin-image, please see the documentation.

Downloading local image assets

If you prefer, the source plugin also provides the option to download and cache Hygraph assets in your Gatsby project.

To enable this, add downloadLocalImages: true to your plugin configuration.

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        downloadLocalImages: true,
      },
    },
  ],
}

This adds a localFile field to the Hygraph_Asset type which resolves to the file node generated at build by gatsby-source-filesystem.

{
  allHygraphAsset {
    nodes {
      localFile {
        childImageSharp {
          gatsbyImageData(layout: FULL_WIDTH)
        }
      }
    }
  }
}

Using markdown nodes

This source plugin provides the option to build markdown nodes for all RichText fields in your Hygraph schema, which in turn can be used with MDX.

To enable this, add buildMarkdownNodes: true to your plugin configuration.

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        buildMarkdownNodes: true,
      },
    },
  ],
}

Enabling this option adds a markdownNode nested field to all RichText fields on the generated Gatsby schema.

You will need to rebuild your hygraph-fragments if you enable embeds on a Rich Text field, or you add/remove additional fields to your Hygraph schema.

Usage with gatsby-plugin-mdx

These newly built nodes can be used with gatsby-plugin-mdx to render markdown from Hygraph.

Once installed, you will be able to query for MDX fields using a query similar to the one below.

{
  allHygraphPost {
    nodes {
      id
      content {
        markdownNode {
          childMdx {
            body
          }
        }
      }
    }
  }
}

Working with query fragments

The source plugin will generate and save GraphQL query fragments for every node type. By default, they will be saved in a hygraph-fragments directory at the root of your Gatsby project. This can be configured:

If using multiple instances of the source plugin, you must provide a value to prevent type and/or fragment conflicts.

// gatsby-config.js
module.exports = {
  plugins: [
    {
      resolve: 'gatsby-v5-source-hygraph',
      options: {
        endpoint: process.env.HYGRAPH_ENDPOINT,
        fragmentsPath: 'my-query-fragments',
      },
    },
  ],
}

The generated fragments are then read from the project for subsequent builds. It is recommended that they are checked in to version control for your project.

Should you make any changes or additions to your Hygraph schema, you will need to update the query fragments accrdingly. Alternatively they will be regnerated on a subsequent build after removing the directory from your project.

Modifying query fragments

In some instances, you may need modify query fragments on a per type basis. This may involve:

  • Removing unrequired fields
  • Adding new fields with arguments as an aliased field

For example, adding a featuredCaseStudy field:

fragment Industry on Industry {
  featuredCaseStudy: caseStudies(where: { featured: true }, first: 1)
}

Field arguments cannot be read by Gatsby from the Hygraph schema. Instead we must alias any required usages as aliased fields. In this example, the featuredCaseStudy field would then be available in our Gatsby queries:

{
  allHygraphIndustry {
    nodes {
      featuredCaseStudy {
        ...
      }
    }
  }
}

If you spot an issue, or bug that you know how to fix, please submit a pull request.

When working locally you'll need to run yarn compile and yarn dev using Yarn workspaces that will let you test/develop on the demo Gatsby app in this project. You may need to yarn clean occcasionally too.

FAQs

If you are using environment variables, make sure to include require("dotenv").config(); inside your gatsby-config.js.

If it's already included, make sure you have your ENV variable added to .env, or .env.local without spaces.

This error occurs most likely if your token doesn't have access to the PUBLISHED content stage. Configure your token to also access PUBLISHED, or specify stages: ["DRAFT"] to the options inside gatsby-config.js.

You may need to rebuild your fragments folder when making schema changes. If you change the type of a field, or add/remove any from an existing model you have fragments for, the plugin cannot query for this.

Simply delete the hygraph-fragments (or whatever you named it), and run gatsby develop to regenerate.