@rshackleton/gatsby-transformer-kontent-image

2.1.0 • Public • Published

gatsby-transformer-kontent-image

Extends assets from Kentico Kontent to include fields that can be consumed by gatsby-image.

Install

npm install --save @rshackleton/gatsby-transformer-kontent-image
yarn add @rshackleton/gatsby-transformer-kontent-image

How to use

Add the plugin to your gatsby-config.js:

module.exports = {
  plugins: [
    {
      resolve: `@rshackleton/gatsby-transformer-kontent-image`,
      options: {
        // See "Options" below.
      },
    },
  ],
};

Options

There are two main ways to use this plugin; remote or local. The default is remote.

Remote

The remote option will expose fixed, fluid and resize fields on the KontentAsset GraphQL type.

Fixed

The following arguments are available:

Arguments Type Default Description
fit String clip The preferred image resize fit mode: docs
format String undefined The preferred image format: docs
height Int undefined The desired image height
quality Int undefined The preferred image quality: docs
width Int undefined The desired image width
{
  allKontentItemArticle {
    nodes {
      elements {
        banner {
          value {
            fixed(width: 1000) {
              ...KontentAssetFixed
            }
          }
        }
      }
    }
  }
}
<GatsbyImage fixed={nodes[0].elements.banner.value[0].fixed} />

Fluid

The following arguments are available:

Arguments Type Default Description
fit String clip The preferred image resize fit mode: docs
format String undefined The preferred image format: docs
maxHeight Int undefined The desired maximum image height
maxWidth Int undefined The desired maximum image width
quality Int undefined The preferred image quality: docs
{
  allKontentItemArticle {
    nodes {
      elements {
        banner {
          value {
            fluid(maxWidth: 1000) {
              ...KontentAssetFluid
            }
          }
        }
      }
    }
  }
}
<GatsbyImage fluid={nodes[0].elements.banner.value[0].fluid} />

Resize

The following arguments are available:

Arguments Type Default Description
fit String clip The preferred image resize fit mode: docs
format String undefined The preferred image format: docs
height Int undefined The desired image height
quality Int undefined The preferred image quality: docs
width Int undefined The desired image width

The resize field can be used to just retrieve a single resized image URL - this isn't intended to be used with Gatsby Image.

Local

The plugin currently supports a single option to create local File nodes that can be further transformed by gatsby-transformer-sharp.

module.exports = {
  plugins: [
    {
      resolve: `@rshackleton/gatsby-transformer-kontent-image`,
      options: {
        local: true,
      },
    },
  ],
};

The plugin will include a localFile field on the KontentAsset GraphQL type. This will be processed by gatsby-transformer-sharp and used with the gatsby-image component.

{
  allKontentItemArticle {
    nodes {
      elements {
        banner {
          value {
            localFile {
              childImageSharp {
                fixed(width: 1000) {
                  ...GatsbyImageSharpFixed
                }
              }
            }
          }
        }
      }
    }
  }
}
<GatsbyImage
  fixed={nodes[0].elements.banner.value[0].localFile.childImageSharp.fixed}
/>

The drawback to using local mode is the overhead introduced during the build as assets are downloaded from Kontent and processed by Sharp. This can easily add several minutes to builds with large numbers of image variants.

Fragments

The plugin provides several fragments for use in GraphQL queries:

fragment KontentAssetFixed on KontentAssetFixed {
  base64
  height
  src
  srcSet
  width
}

fragment KontentAssetFluid on KontentAssetFluid {
  aspectRatio
  base64
  sizes
  src
  srcSet
}

fragment KontentAssetFixed_withWebp on KontentAssetFixed {
  base64
  height
  src
  srcSet
  srcWebp
  srcSetWebp
  width
}

fragment KontentAssetFluid_withWebp on KontentAssetFluid {
  aspectRatio
  base64
  sizes
  src
  srcSet
  srcWebp
  srcSetWebp
}

fragment KontentAssetFixed_noBase64 on KontentAssetFixed {
  height
  src
  srcSet
  width
}

fragment KontentAssetFluid_noBase64 on KontentAssetFluid {
  aspectRatio
  sizes
  src
  srcSet
}

fragment KontentAssetFixed_withWebp_noBase64 on KontentAssetFixed {
  height
  src
  srcSet
  srcWebp
  srcSetWebp
  width
}

fragment KontentAssetFluid_withWebp_noBase64 on KontentAssetFluid {
  aspectRatio
  sizes
  src
  srcSet
  srcWebp
  srcSetWebp
}

License

Licensed under the MIT License.

Contributing

To contribute to this package please fork the repository to make your changes.

This project makes use of changesets. When making changes please ensure a new changeset is created to define how the package versions should be updated.

Once you are ready open a new PR into this repository with a clear and detailed description of the changes made and which issue(s) are affected.

Development

To work on this repository you can use the yarn workspaces to test the plugin using the included Gatsby website. This can be done by running yarn start from the root or site directory.

When developing you can run yarn watch from the package directory to continously rebuild the TypeScript code when making changes.

You will need to restart the Gatsby website if changes are made to the gatsby-node.ts file or it's dependencies.

Package Sidebar

Install

npm i @rshackleton/gatsby-transformer-kontent-image

Weekly Downloads

783

Version

2.1.0

License

MIT

Unpacked Size

30.4 kB

Total Files

16

Last publish

Collaborators

  • rshackleton