Add Avif to content type detection

This commit is contained in:
Gaël Métais
2023-07-21 10:17:18 +02:00
parent 6180b9f86c
commit 0cde5a3607
4 changed files with 32 additions and 67 deletions
+22 -53
View File
@@ -1,20 +1,12 @@
var debug = require('debug')('ylt:contentTypeChecker');
var Q = require('q');
var isJpg = require('is-jpg');
var isPng = require('is-png');
var isSvg = require('is-svg');
var isGif = require('is-gif');
var isWebp = require('is-webp');
var isWoff = require('is-woff');
var isWoff2 = require('is-woff2');
var isOtf = require('is-otf');
var isTtf = require('is-ttf');
var isEot = require('is-eot');
var isJson = require('is-json');
var debug = require('debug')('ylt:contentTypeChecker');
var Q = require('q');
var FileType = require('file-type');
var isSvg = require('is-svg');
var isJson = require('is-json');
var ContentTypeChecker = function() {
function checkContentType(entry) {
async function checkContentType(entry) {
var deferred = Q.defer();
// Setting isSomething values:
@@ -55,7 +47,7 @@ var ContentTypeChecker = function() {
var foundType;
try {
foundType = findContentType(entry.weightCheck.bodyBuffer);
foundType = await findContentType(entry.weightCheck.bodyBuffer);
// If it's an image or a font, then rewrite.
if (foundType !== null && (foundType.type === 'image' || foundType.type === 'webfont' || foundType.type === 'json')) {
@@ -76,54 +68,23 @@ var ContentTypeChecker = function() {
return deferred.promise;
}
function findContentType(bodyBuffer) {
async function findContentType(bodyBuffer) {
var bodyStr = bodyBuffer.toString();
if (isJpg(bodyBuffer)) {
return contentTypes.jpeg;
}
if (isPng(bodyBuffer)) {
return contentTypes.png;
}
// https://github.com/sindresorhus/is-svg/issues/7
if (/<svg/.test(bodyStr) && isSvg(bodyStr)) {
return contentTypes.svg;
}
if (isGif(bodyBuffer)) {
return contentTypes.gif;
}
if (isWebp(bodyBuffer)) {
return contentTypes.webp;
}
if (isWoff(bodyBuffer)) {
return contentTypes.woff;
}
if (isWoff2(bodyBuffer)) {
return contentTypes.woff2;
}
if (isOtf(bodyBuffer)) {
return contentTypes.otf;
}
if (isTtf(bodyBuffer)) {
return contentTypes.ttf;
}
if (isEot(bodyBuffer)) {
return contentTypes.eot;
}
if (isJson(bodyStr)) {
return contentTypes.json;
}
const type = await FileType.fromBuffer(bodyBuffer);
if (type && type.ext && contentTypes[type.ext]) {
return contentTypes[type.ext];
}
return null;
}
@@ -146,7 +107,7 @@ var ContentTypeChecker = function() {
}
var contentTypes = {
jpeg: {
jpg: {
type: 'image',
mimes: ['image/jpeg'],
updateFn: function(entry) {
@@ -187,6 +148,14 @@ var ContentTypeChecker = function() {
entry.isImage = true;
}
},
avif: {
type: 'image',
mimes: ['image/avif'],
updateFn: function(entry) {
entry.type = 'image';
entry.isImage = true;
}
},
woff: {
type: 'webfont',
mimes: ['application/x-font-woff', 'application/font-woff', 'font/woff'],
+4
View File
@@ -43,6 +43,10 @@ var ImageDimensions = function() {
return entry.isImage && entry.contentType === 'image/png';
}
function isWebP(entry) {
return entry.isImage && entry.contentType === 'image/webp';
}
return {
getDimensions: getDimensions
};