/* eslint-disable @typescript-eslint/no-var-requires */ /** * request-image-size: Detect image dimensions via request. * Licensed under the MIT license. * * https://github.com/FdezRomero/request-image-size * © 2017 Rodrigo Fernández Romero * * Based on the work of Johannes J. Schmidt * https://github.com/jo/http-image-size */ // const imageSize = require('image-size'); const HttpError = require('standard-http-error'); import * as request from 'request'; import { imageSize } from 'image-size'; import { ISizeCalculationResult } from 'image-size/dist/types/interface'; module.exports = function requestImageSize(url: string) { if (!url) { return Promise.reject(new Error('You should provide an URI string or a "request" options object.')); } return new Promise((resolve, reject) => { const req = request(url); req.on('response', res => { if (res.statusCode >= 400) { reject(new HttpError(res.statusCode, res.statusMessage)); return; } let buffer = Buffer.from([]); let size: ISizeCalculationResult; res.on('data', chunk => { buffer = Buffer.concat([buffer, chunk]); }); res.on('error', reject); res.on('end', () => { try { size = imageSize(buffer); if (size) { resolve(size); req.abort(); } } catch (err) { /* empty */ console.log('Error: ', err); } if (!size) { reject(new Error('Image has no size')); return; } resolve(size); }); }); req.on('error', reject); }); };