@valkyriestudios/validator
Version:
A lightweight configurable javascript validator
39 lines (38 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MEDIA_EXTENSIONS = exports.AUDIO_EXTENSIONS = exports.VIDEO_EXTENSIONS = exports.IMAGE_EXTENSIONS = void 0;
exports.vUrlImage = vUrlImage;
exports.vUrlVideo = vUrlVideo;
exports.vUrlAudio = vUrlAudio;
exports.vUrlMedia = vUrlMedia;
const vUrl_1 = require("./vUrl");
exports.IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'jpe', 'jif', 'jfif', 'jfi', 'png', 'ico', 'cur', 'tiff', 'tif', 'gif', 'webp', 'bmp', 'dib', 'svg', 'svgz', 'heif', 'heifs', 'heic', 'heics', 'avci', 'avcs', 'avif', 'hif']);
exports.VIDEO_EXTENSIONS = new Set(['webm', 'mkv', 'flv', 'vob', 'ogv', 'ogg', 'drc', 'gifv', 'mng', 'mov', 'qt', 'mp4', 'm4p', 'm4v', 'mpg', 'mp2', 'mpeg', 'mpe', 'mpv', 'svi', '3gp', '3g2', 'mxf', 'roq', 'nsv', 'f4v', 'f4p', 'f4a', 'f4b']);
exports.AUDIO_EXTENSIONS = new Set(['mp3', 'aac', 'ogg', 'oga', 'wav', 'flac', 'alac', 'aiff', 'ape', 'wma', 'm4a', 'm4b', 'opus']);
exports.MEDIA_EXTENSIONS = new Set([...exports.IMAGE_EXTENSIONS, ...exports.VIDEO_EXTENSIONS, ...exports.AUDIO_EXTENSIONS]);
const RGX_PROTO = /^(https?|ftp):\/\//;
const RGX_QUERY = /(\?|#)/g;
function vUrlWithExtension(val, EXTENSIONS) {
if (!(0, vUrl_1.vUrl)(val))
return false;
let sanitized = val.replace(RGX_PROTO, '').split(RGX_QUERY, 1)[0].split('/');
if (sanitized.length < 2)
return false;
sanitized = sanitized[sanitized.length - 1].split('.');
const ext = sanitized.pop();
if (!ext || !EXTENSIONS.has(ext))
return false;
return sanitized.join('.').length > 0;
}
function vUrlImage(val) {
return vUrlWithExtension(val, exports.IMAGE_EXTENSIONS);
}
function vUrlVideo(val) {
return vUrlWithExtension(val, exports.VIDEO_EXTENSIONS);
}
function vUrlAudio(val) {
return vUrlWithExtension(val, exports.AUDIO_EXTENSIONS);
}
function vUrlMedia(val) {
return vUrlWithExtension(val, exports.MEDIA_EXTENSIONS);
}