blob: 3d5cfe4bddfe3635b541d54499aa0f5cefd4a289 [file] [log] [blame]
'use strict';
const htmlCommentRegex = require('html-comment-regex');
const isBinary = buffer => {
const isBuffer = Buffer.isBuffer(buffer);
for (let i = 0; i < 24; i++) {
const characterCode = isBuffer ? buffer[i] : buffer.charCodeAt(i);
if (characterCode === 65533 || characterCode <= 8) {
return true;
}
}
return false;
};
const cleanEntities = svg => {
const entityRegex = /\s*<!Entity\s+\S*\s*(?:"|')[^"]+(?:"|')\s*>/img;
// Remove entities
return svg.replace(entityRegex, '');
};
const regex = /^\s*(?:<\?xml[^>]*>\s*)?(?:<!doctype svg[^>]*\s*(?:\[?(?:\s*<![^>]*>\s*)*\]?)*[^>]*>\s*)?(?:<svg[^>]*>[^]*<\/svg>|<svg[^/>]*\/\s*>)\s*$/i;
const isSvg = input => Boolean(input) && !isBinary(input) && regex.test(cleanEntities(input.toString()).replace(htmlCommentRegex, ''));
module.exports = isSvg;
// TODO: Remove this for the next major release
module.exports.default = isSvg;