UNPKG

@draftbox-co/gatsby-ghost-novela-theme

Version:

A Gatsby theme plugin for creating blogs from headless Ghost CMS.

72 lines (60 loc) 2.08 kB
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.site.siteMetadata.siteTitle || "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(); } };