Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
gatsby-source-datocms
Advanced tools
Gatsby source plugin for building websites using DatoCMS as data source
Source plugin for pulling models and records into Gatsby from DatoCMS administrative areas. It creates links between records so they can be queried in Gatsby using GraphQL.
npm install --save gatsby-source-datocms
We've prepared a sample Gatsby project for you!
// In your gatsby-config.js
plugins: [
{
resolve: `gatsby-source-datocms`,
options: {
apiToken: `YOUR_READONLY_API_TOKEN`,
},
},
]
Two standard data types will be available from DatoCMS: DatoCmsModel
and DatoCmsSite
. You can query model nodes created from DatoCMS like the following:
{
allDatoCmsModel {
edges {
node {
apiKey
name
fields {
apiKey
fieldType
}
}
}
}
}
Your site global settings can be queried like this:
{
datoCmsSite {
name
internalDomain
locales
}
}
Non-standard data types, i.e. models you define in DatoCMS, will also be
available in Gatsby. They'll be created in your site's GraphQL schema under
datoCms{modelApiKey}
and allDatoCms{modelApiKey}
. For example,
if you have a blog_post
model, you will be able to query it like the following:
{
allDatoCmsBlogPost(sort: { fields: [publicationDate], order: DESC }, limit: 5) {
edges {
node {
title
excerpt
publicationDate(formatString: "MM-DD-YYYY")
author {
name
avatar {
url
}
}
}
}
}
}
Fields of type Multiple-paragraph text will be available both as simple
strings (ie. excerpt
) and nodes (ie. excerptNode
). You can use the latter
if you want to apply further transformations, like converting markdown with gatsby-transformer-remark
):
{
allDatoCmsBlogPost {
edges {
node {
excerptNode {
childMarkdownRemark {
html
timeToRead
}
}
}
}
}
}
Modular-content fields can be queried this way:
{
allDatoCmsBlogPost {
edges {
node {
title
content {
... on DatoCmsText {
text
}
... on DatoCmsImage {
image {
url
}
}
}
}
}
}
}
All records have a seoMetaTags
field that you can use to build SEO meta tags
for your record's pages:
{
allDatoCmsBlogPost {
edges {
node {
title
seoMetaTags {
tags {
tagName
content
attributes {
property
content
name
}
}
}
}
}
}
}
This package exposes a HelmetDatoCms
component and a GatsbyDatoCmsSeoMetaTags
GraphQL fragment to make it easier use these information in your website:
PS. Due to a limitation of GraphiQL,
you can not currently use the GatsbyDatoCmsSeoMetaTags
fragment in the GraphiQL IDE.
import React from 'react'
import Link from 'gatsby-link'
import { HelmetDatoCms } from 'gatsby-source-datocms'
const About = ({ data }) => (
<article className="sheet">
<HelmetDatoCms seo={data.datoCmsAboutPage.seoMetaTags} />
<h1>{data.datoCmsAboutPage.title}</h1>
<p>{data.datoCmsAboutPage.subtitle}</p>
</article>
)
export default About;
export const query = graphql`
query AboutQuery {
datoCmsAboutPage {
title
subtitle
seoMetaTags {
...GatsbyDatoCmsSeoMetaTags
}
}
}
You can get the complete set of meta tags related to your site favicon this way:
{
datoCmsSite {
faviconMetaTags {
tagName
attributes {
rel
sizes
href
name
content
type
}
}
}
}
Similarly to what happens with SEO meta tags, you can use the HelmetDatoCms
component with the GatsbyDatoCmsFaviconMetaTags
fragment to make it easier use these information in your website:
import React from 'react'
import Link from 'gatsby-link'
import { HelmetDatoCms } from 'gatsby-source-datocms'
const TemplateWrapper = ({ data }) => (
<article className="sheet">
<HelmetDatoCms favicon={data.datoCmsSite.faviconMetaTags} />
<h1>{data.datoCmsAboutPage.title}</h1>
<p>{data.datoCmsAboutPage.subtitle}</p>
</article>
)
export default TemplateWrapper
export const query = graphql`
query LayoutQuery {
datoCmsSite {
faviconMetaTags {
...GatsbyDatoCmsFaviconMetaTags
}
}
}
If you have a model configured as a tree, you can navigate the hierarchy with
treeChildren
and treeParent
this way:
{
allDatoCmsCategory(filter: { root: { eq: true } }) {
edges {
node {
title
treeChildren {
title
treeChildren {
title
}
}
}
}
}
}
You can access to single instance models like this:
{
datoCmsHomepage {
title
content
}
}
If your site is multi-lingual, records will be duplicated for every locale
available, so you can query them like this. The same applies for the DatoCmsSite
node:
{
allDatoCmsBlogPost(filter: { locale: { eq: "it" } }) {
edges {
node {
title
excerpt
}
}
}
datoCmsHomepage(locale: { eq: "it" }) {
title
content
}
}
gatsby-image
Images coming from DatoCMS can be queried so that they can be used with gatsby-image, a React component specially designed to work seamlessly with Gatsby's GraphQL queries that implements advanced image loading techniques to easily and completely optimize image loading for your sites.
This GraphQL option allows you to generate responsive images that automatically respond to different device screen resolution and widths. E.g. a smartphone browser will download a much smaller image than a desktop device.
Instead of specifying a width and height, with sizes you specify a maxWidth
, the max width the container of the images reaches.
import React from 'react'
import Img from 'gatsby-image'
const About = ({ data }) => (
<article>
<Img sizes={data.datoCmsAboutPage.photo.sizes} />
</article>
)
export default About
export const query = graphql`
query AboutQuery {
datoCmsAboutPage {
photo {
sizes(maxWidth: 600, imgixParams: { fm: "jpg", auto: "compress" }) {
...GatsbyDatoCmsSizes
}
}
}
}
`
If you make queries with resolutions then Gatsby automatically generates images with 1x, 1.5x, 2x, and 3x versions so your images look great on whatever screen resolution of device they're on. If you're on a retina class screen, notice how much sharper these images are than the above "resized" images.
import React from 'react'
import Img from 'gatsby-image'
const About = ({ data }) => (
<article>
<Img resolutions={data.datoCmsAboutPage.photo.resolutions} />
</article>
)
export default About
export const query = graphql`
query AboutQuery {
datoCmsAboutPage {
photo {
resolutions(width: 200, imgixParams: { fm: "jpg", auto: "compress" }) {
...GatsbyDatoCmsResolutions
}
}
}
}
`
FAQs
Gatsby source plugin for building websites using DatoCMS as data source
The npm package gatsby-source-datocms receives a total of 4,139 weekly downloads. As such, gatsby-source-datocms popularity was classified as popular.
We found that gatsby-source-datocms demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
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.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.