@draftbox-co/gatsby-ghost-novela-theme
Version:
A Gatsby theme plugin for creating blogs from headless Ghost CMS.
204 lines (198 loc) • 5.51 kB
JavaScript
/* eslint-disable */
const siteConfigDefaults = require(`./src/utils/siteConfig`);
const ghostConfigDefaults = require(`./src/utils/.ghost.json`);
const generateRSSFeed = require(`./src/utils/rss/generate-feed`);
const path = require("path");
module.exports = (themeOptions) => {
const siteConfig = themeOptions.siteConfig || siteConfigDefaults;
const ghostConfig = themeOptions.ghostConfig || ghostConfigDefaults;
const finalConfig =
process.env.NODE_ENV === `development`
? ghostConfig.development
: ghostConfig.production;
siteConfig.apiUrl = finalConfig.apiUrl;
const configOptions = {
pathPrefix: "",
siteMetadata: siteConfig,
plugins: [
`gatsby-plugin-typescript`,
`gatsby-image`,
`gatsby-plugin-react-helmet`,
`gatsby-plugin-sharp`,
`gatsby-transformer-sharp`,
`gatsby-plugin-mdx`,
`gatsby-plugin-catch-links`,
`gatsby-plugin-force-trailing-slashes`,
{
resolve: `gatsby-source-filesystem`,
options: {
path: path.join(__dirname, `src`, `images`),
name: `images`,
},
},
{
resolve: `gatsby-plugin-emotion`,
options: {
displayName: process.env.NODE_ENV === `development`,
},
},
{
resolve: `gatsby-source-ghost`,
options:
process.env.NODE_ENV === `development`
? ghostConfig.development
: ghostConfig.production,
},
{
resolve: require.resolve(`./plugins/gatsby-plugin-ghost-manifest`),
options: {
short_name: siteConfig.shortTitle,
start_url: `/`,
background_color: siteConfig.backgroundColor,
theme_color: siteConfig.themeColor,
display: `minimal-ui`,
icon: `static/${siteConfig.siteIcon}`,
legacy: true,
query: `{
site {
siteMetadata {
siteTitle
siteDescription
}
}
}`,
},
},
{
resolve: `@draftbox-co/gatsby-plugin-amp`,
options: {
canonicalBaseUrl: siteConfig.siteUrl,
components: [`amp-form`],
excludedPaths: [`/404*`, `/`, `/offline*`],
pathIdentifier: `amp/`,
relAmpHtmlPattern: `{{canonicalBaseUrl}}{{pathname}}{{pathIdentifier}}`,
useAmpClientIdApi: true,
dirName: __dirname,
themePath: `src/amp-styles/post.amp.css`,
},
},
{
resolve: `gatsby-plugin-feed`,
options: {
query: `{
allGhostSettings {
edges {
node {
title
description
}
}
}
}`,
feeds: [generateRSSFeed(siteConfig)],
},
},
{
resolve: `gatsby-plugin-advanced-sitemap`,
options: {
query: `{
allGhostPost {
edges {
node {
id
slug
updated_at
created_at
feature_image
}
}
}
allGhostPage {
edges {
node {
id
slug
updated_at
created_at
feature_image
}
}
}
allGhostTag {
edges {
node {
id
slug
feature_image
}
}
}
allGhostAuthor {
edges {
node {
id
slug
profile_image
}
}
}
}
`,
mapping: {
allGhostPost: {
sitemap: `posts`,
},
allGhostTag: {
sitemap: `tags`,
},
allGhostAuthor: {
sitemap: `authors`,
},
allGhostPage: {
sitemap: `pages`,
},
},
exclude: [
`/dev-404-page`,
`/404`,
`/404.html`,
`/offline-plugin-app-shell-fallback`,
"/offline",
"/offline.html",
],
createLinkInHead: true,
addUncaughtPages: true,
},
},
`gatsby-plugin-theme-ui`,
{
resolve: `gatsby-plugin-remove-generator`,
options: {
content: `Draftbox`,
},
},
{
resolve: `@draftbox-co/gatsby-plugin-css-variables`,
options: {
variables: siteConfig.themeConfig.variables,
},
},
],
};
if (siteConfig.themeConfig.fonts && siteConfig.themeConfig.fonts.length > 0) {
configOptions.plugins.push({
resolve: `@draftbox-co/gatsby-plugin-webfonts`,
options: {
fonts: {
google: siteConfig.themeConfig.fonts,
},
formats: ["woff2", "woff"],
useMinify: true,
usePreload: true,
usePreconnect: true,
blacklist: ["/amp"],
},
})
}
return configOptions;
};