@argdown/node
Version:
Async Argdown application for node.js
68 lines • 2.99 kB
JavaScript
;
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