@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
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.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();
}
};