gatsby-theme-try-ghost
Version:
A Gatsby theme for building flaring fast blogs from headless Ghost CMS.
72 lines (60 loc) • 2.16 kB
JavaScript
const fs = require(`fs`)
const path = require(`path`)
const Promise = require(`bluebird`)
const sharp = require(`sharp`)
const { defaultIcons, doesIconExist } = require(`./common.js`)
sharp.simd(true)
function generateIcons(icons, srcIcon) {
return Promise.map(icons, (icon) => {
const size = parseInt(icon.sizes.substring(0, icon.sizes.lastIndexOf(`x`)))
const imgPath = path.join(`public`, icon.src)
return sharp(srcIcon)
.resize(size)
.toFile(imgPath)
.then(() => { })
})
}
exports.onPostBuild = async ({ graphql }, pluginOptions) => {
let { icon, ...manifest } = pluginOptions
const { data } = await graphql(pluginOptions.query)
const siteTitle = data.allGhostSettings.edges[0].node.title || `No Title`
manifest = {
...manifest,
name: siteTitle,
}
// Delete options we won't pass to the manifest.webmanifest.
delete manifest.plugins
delete manifest.legacy
delete manifest.theme_color_in_head
delete manifest.query
// If icons are not manually defined, use the default icon set.
if (!manifest.icons) {
manifest.icons = defaultIcons
}
// Determine destination path for icons.
const iconPath = path.join(`public`, path.dirname(manifest.icons[0].src))
//create destination directory if it doesn't exist
if (!fs.existsSync(iconPath)) {
fs.mkdirSync(iconPath)
}
fs.writeFileSync(
path.join(`public`, `manifest.webmanifest`),
JSON.stringify(manifest)
)
// Only auto-generate icons if a src icon is defined.
if (icon !== undefined) {
// Check if the icon exists
if (!doesIconExist(icon)) {
Promise.reject(
`icon (${icon}) does not exist as defined in gatsby-config.js. Make sure the file exists relative to the root of the site.`
)
}
generateIcons(manifest.icons, icon).then(() => {
//images have been generated
console.log(`done generating icons for manifest`)
Promise.resolve()
})
} else {
Promise.resolve()
}
}