1
0
Fork 0
blog/gatsby-config.ts

225 lines
6.3 KiB
TypeScript

import type { GatsbyConfig } from 'gatsby'
import * as dotenv from 'dotenv'
dotenv.config()
if (!process.env.GITHUB_TOKEN) {
// eslint-disable-next-line
console.warn(`
⚠️ A GitHub token as GITHUB_TOKEN is required to build some parts of the blog.
⚠️ Check the README https://github.com/kremalicious/blog#-development.
`)
}
import siteConfig from './config'
import sources from './gatsby/sources'
import { feedContent } from './gatsby/feeds'
// required for gatsby-plugin-meta-redirect
import 'regenerator-runtime/runtime'
const config: GatsbyConfig = {
graphqlTypegen: {
typesOutputPath: './src/@types/Gatsby.d.ts',
generateOnBuild: true
},
siteMetadata: {
...siteConfig
},
plugins: [
...sources,
'gatsby-plugin-image',
{
resolve: 'gatsby-plugin-sharp',
options: {
stripMetadata: false,
defaults: {
quality: 85
}
}
},
'gatsby-transformer-sharp',
{
resolve: 'gatsby-transformer-remark',
options: {
excerpt_separator: '<!-- more -->',
plugins: [
'gatsby-remark-smartypants',
{
resolve: 'gatsby-remark-images',
options: {
maxWidth: 666,
quality: 80,
linkImagesToOriginal: false,
showCaptions: true,
backgroundColor: 'none',
disableBgImageOnAlpha: true
}
},
{
resolve: 'gatsby-remark-images-medium-zoom',
options: {
background: '#e7eef4'
}
},
{
resolve: 'gatsby-remark-copy-linked-files',
options: {
destinationDir: 'media'
}
},
{
resolve: 'gatsby-remark-autolink-headers',
options: {
icon: '<span>#</span>'
}
},
{
// https://github.com/andrewbranch/gatsby-remark-vscode
resolve: 'gatsby-remark-vscode',
options: {
theme: {
default: 'Polar',
parentSelector: { 'body.dark': 'Nord' }
},
injectStyles: false,
extensions: ['nord-visual-studio-code', 'polar'],
languageAliases: {}
}
}
]
}
},
{
resolve: 'gatsby-plugin-svgr',
options: {
icon: false,
svgoConfig: {
plugins: [{ name: 'removeViewBox', active: false }]
}
}
},
{
resolve: 'gatsby-plugin-lunr',
options: {
languages: [
{
// ISO 639-1 language codes. See https://lunrjs.com/guides/language_support.html for details
name: 'en'
}
],
// Fields to index. If store === true value will be stored in index file.
// Attributes for custom indexing logic. See https://lunrjs.com/docs/lunr.Builder.html for details
fields: [
{ name: 'title', attributes: { boost: 20 } },
{ name: 'tags', attributes: { boost: 15 } },
{ name: 'excerpt', attributes: { boost: 10 } },
{ name: 'slug', store: true },
{ name: 'content' }
],
// How to resolve each field's value for a supported node type
resolvers: {
// For any node of type MarkdownRemark, list how to resolve the fields' values
MarkdownRemark: {
title: (node) => node.frontmatter.title,
excerpt: (node) => node.excerpt,
tags: (node) => node.frontmatter.tags,
content: (node) => node.rawMarkdownBody,
slug: (node) => node.fields.slug
}
}
}
},
{
resolve: 'gatsby-plugin-manifest',
options: {
name: siteConfig.siteTitle,
start_url: '/',
background_color: siteConfig.backgroundColor,
theme_color: siteConfig.themeColor,
icon: 'src/images/apple-touch-icon.png',
display: 'standalone',
cache_busting_mode: 'name',
theme_color_in_head: false // dynamically set in ThemeSwitch
}
},
{
resolve: 'gatsby-plugin-feed',
options: {
query: `
{
site {
siteMetadata {
siteTitle
siteDescription
siteUrl
title: siteTitle
description: siteDescription
site_url: siteUrl
}
}
}
`,
feeds: [
{
serialize: ({ query }: { query: Queries.AllContentFeedQuery }) => {
return query.allMarkdownRemark.edges.map((edge) => {
return Object.assign({}, edge.node.frontmatter, {
title: edge.node.frontmatter?.title,
date: edge.node.fields?.date,
description: edge.node.excerpt,
url: siteConfig.siteUrl + edge.node.fields?.slug,
categories: edge.node.frontmatter?.tags,
author: siteConfig.author.name,
guid: siteConfig.siteUrl + edge.node.fields?.slug,
custom_elements: [{ 'content:encoded': feedContent(edge) }]
})
})
},
query: `{
allMarkdownRemark(sort: {fields: {date: DESC}}, limit: 40) {
edges {
node {
html
fields {
slug
date
}
excerpt
frontmatter {
title
image {
childImageSharp {
resize(width: 940, quality: 85) {
src
}
}
}
}
}
}
}
}`,
output: '/feed.xml',
title: siteConfig.siteTitle
}
]
}
},
{
resolve: 'gatsby-plugin-sitemap',
options: {
excludes: ['/archive', '/archive/**/*', '/thanks', '/tags']
}
},
'gatsby-plugin-catch-links',
'gatsby-redirect-from',
'gatsby-plugin-meta-redirect',
'gatsby-plugin-offline'
]
}
export default config