UNPKG

og-images-generator

Version:

Generate OG images from a static folder and / or a middleware. Extract metadata from HTML pages. No headless browser involved. Comes as a CLI, API or plugins.

34 lines (33 loc) 1.43 kB
import { extractMetadataFromHtml } from '../collect.js'; import { loadUserConfig } from '../generate.js'; import { ogPathToPagePath, DEFAULT_OG_PATH_PREFIX } from '../paths.js'; import { renderOgImage } from '../render.js'; export async function connectOgImagesGenerator(options) { let config = options?.configReloader ? null : await loadUserConfig(); const prefix = options?.pathPrefix ?? DEFAULT_OG_PATH_PREFIX; return async (request, res, next) => { if (options?.configReloader) config = await options.configReloader(); if (!config) return next(); if (!request.url) return next(); if (request.url.startsWith(prefix) === false) return next(); const base = 'http://' + request.rawHeaders[request.rawHeaders.indexOf('Host') + 1]; const path = ogPathToPagePath(request.url, options?.pathPrefix, options?.trailingSlash); const pageUrl = new URL(path, base).href; const fetched = await fetch(pageUrl); const associatedPageHtml = await fetched.text(); const meta = extractMetadataFromHtml(associatedPageHtml); const image = await renderOgImage(config, { path, meta }); res.setHeader('Content-Type', 'image/png'); // HACK: await new Promise((resolve) => setTimeout(() => { res.end(image); resolve(); }, 0)); }; }