UNPKG

@argdown/node

Version:

Async Argdown application for node.js

51 lines 2.13 kB
import { ArgdownPluginError } from "@argdown/core"; import isSvg from "is-svg"; import imageType from "image-type"; import { imageUtils } from "./utils"; import path from "path"; export class GenerateDataUrlsPlugin { constructor() { this.name = "GenerateDataUrlsPlugin"; this.runAsync = async (request, _response, _logger) => { if (!request.images || !request.images.files || !request.images.convertToDataUrls) { return; } for (let image of Object.values(request.images.files)) { if (!image.path) { return; } try { const baseDir = request.inputPath && !!path.extname(request.inputPath) ? path.dirname(request.inputPath) : request.inputPath || ""; const buffer = await imageUtils.getImage(image.path, baseDir); let mimeType = ""; if (buffer) { if (isSvg(buffer)) { mimeType = "svg+xml"; } else { const imageTypeResult = imageType(buffer); if (imageTypeResult) { mimeType = imageTypeResult.mime; } else { throw new Error("File is not an image."); } } const dataUrl = `data:${mimeType};base64,${buffer.toString("base64")}`; image.dataUrl = dataUrl; } } catch (err) { if (err instanceof Error) { throw new ArgdownPluginError(this.name, "inline-image-generation-failed", `'Generating inline image of '${image.path}' failed. ${err.message}`); } } } }; } } //# sourceMappingURL=GenerateDataUrlsPlugin.js.map