2.1.0 • Published 4 years ago

@rshackleton/gatsby-transformer-kontent-image v2.1.0

Weekly downloads
227
License
MIT
Repository
github
Last release
4 years ago

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:

ArgumentsTypeDefaultDescription
fitStringclipThe preferred image resize fit mode: docs
formatStringundefinedThe preferred image format: docs
heightIntundefinedThe desired image height
qualityIntundefinedThe preferred image quality: docs
widthIntundefinedThe 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:

ArgumentsTypeDefaultDescription
fitStringclipThe preferred image resize fit mode: docs
formatStringundefinedThe preferred image format: docs
maxHeightIntundefinedThe desired maximum image height
maxWidthIntundefinedThe desired maximum image width
qualityIntundefinedThe 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:

ArgumentsTypeDefaultDescription
fitStringclipThe preferred image resize fit mode: docs
formatStringundefinedThe preferred image format: docs
heightIntundefinedThe desired image height
qualityIntundefinedThe preferred image quality: docs
widthIntundefinedThe 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.