UNPKG

gatsby-plugin-social-cards

Version:

Generates social cards for your markdown posts and adds a field so you can reference them in your meta-tags.

77 lines (58 loc) 2.05 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.generateCard = generateCard; var _react = _interopRequireDefault(require("react")); var _server = _interopRequireDefault(require("react-dom/server")); var _overlay = _interopRequireDefault(require("./overlay")); var _card = _interopRequireDefault(require("./card")); var _split = _interopRequireDefault(require("./designs/split")); const sharp = require("sharp"); const fs = require("fs"); const path = require("path"); const buffer = require("buffer"); // Default background from: https://pixabay.com/photos/lake-water-wave-mirroring-texture-2063957/ // Only used if nothing specified by options, or node.frontmatter.cover const defaultBackgroundImage = path.join(__dirname, "./img/default-background.jpg"); async function generateCard({ title = "", subtitle = "", backgroundImage = defaultBackgroundImage, authorImage64, design = "default" // default, card, split }, oname) { if (!fs.existsSync(backgroundImage)) { backgroundImage = defaultBackgroundImage; } let OverlayComponent; switch (design) { case "card": OverlayComponent = _card.default; break; default: // temp OverlayComponent = _overlay.default; // OverlayComponent = Split } const svgbuffer = Buffer.from(_server.default.renderToStaticMarkup( /*#__PURE__*/_react.default.createElement(OverlayComponent, { title: title, subtitle: subtitle, authorImage64: authorImage64 }))); const infile = new fs.ReadStream(backgroundImage); const ostream = fs.WriteStream(oname); try { const overlayer = sharp().resize({ width: 1200, height: 600 }).composite([{ input: svgbuffer, blend: "over" }]).jpeg(); const res = infile.pipe(overlayer).pipe(ostream); return res; } catch (err) { console.error("Failed to generated card image width Sharp", svgBuffer); throw new Error("Failed to generated SVG image"); } }