@argdown/node
Version:
Async Argdown application for node.js
58 lines • 2.57 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.GenerateDataUrlsPlugin = void 0;
const core_1 = require("@argdown/core");
const is_svg_1 = __importDefault(require("is-svg"));
const image_type_1 = __importDefault(require("image-type"));
const utils_1 = require("./utils");
const path_1 = __importDefault(require("path"));
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_1.default.extname(request.inputPath)
? path_1.default.dirname(request.inputPath)
: request.inputPath || "";
const buffer = await utils_1.imageUtils.getImage(image.path, baseDir);
let mimeType = "";
if (buffer) {
if ((0, is_svg_1.default)(buffer)) {
mimeType = "svg+xml";
}
else {
const imageTypeResult = (0, image_type_1.default)(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 core_1.ArgdownPluginError(this.name, "inline-image-generation-failed", `'Generating inline image of '${image.path}' failed. ${err.message}`);
}
}
}
};
}
}
exports.GenerateDataUrlsPlugin = GenerateDataUrlsPlugin;
//# sourceMappingURL=GenerateDataUrlsPlugin.js.map