UNPKG

@argdown/node

Version:

Async Argdown application for node.js

68 lines 2.99 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ImageSizePlugin = void 0; const util_1 = require("util"); const image_size_1 = __importDefault(require("image-size")); const core_1 = require("@argdown/core"); const axios_1 = __importDefault(require("axios")); const fs_1 = require("fs"); const path_1 = __importDefault(require("path")); const imageSizeAsync = (0, util_1.promisify)(image_size_1.default); class ImageSizePlugin { constructor() { this.name = "ImageSizePlugin"; this.runAsync = async (request, _response, _logger) => { if (!request.images || !request.images.files) { return; } for (let image of Object.values(request.images.files)) { if (!image.path) { return; } try { let dimensions; if (image.width && image.height) { continue; } if (image.path.startsWith("https:") || image.path.startsWith("http:")) { dimensions = await this.getSizeFromRemoteFile(image.path); } else { try { const baseDir = request.inputPath && !!path_1.default.extname(request.inputPath) ? path_1.default.dirname(request.inputPath) : request.inputPath || ""; await fs_1.promises.access(path_1.default.resolve(baseDir, image.path), fs_1.constants.F_OK | fs_1.constants.R_OK); dimensions = await imageSizeAsync(image.path); } catch (err) { dimensions = await this.getSizeFromRemoteFile(image.path); } } if (!dimensions) { continue; } image.width = dimensions.width; image.height = dimensions.height; } catch (err) { if (err instanceof Error) { throw new core_1.ArgdownPluginError(this.name, "image-size-failed", `'Getting the image size of '${image.path}' failed. ${err.message}`); } } } }; this.getSizeFromRemoteFile = async (path) => { const response = await axios_1.default.get(path, { responseType: "arraybuffer" }); const buffer = Buffer.from(response.data, "binary"); return (0, image_size_1.default)(buffer); }; } } exports.ImageSizePlugin = ImageSizePlugin; //# sourceMappingURL=ImageSizePlugin.js.map