@valkyriestudios/validator
Version:
A lightweight configurable javascript validator
33 lines (32 loc) • 1.62 kB
JavaScript
import { vUrl } from './vUrl';
export const 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']);
export const 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']);
export const AUDIO_EXTENSIONS = new Set(['mp3', 'aac', 'ogg', 'oga', 'wav', 'flac', 'alac', 'aiff', 'ape', 'wma', 'm4a', 'm4b', 'opus']);
export const MEDIA_EXTENSIONS = new Set([...IMAGE_EXTENSIONS, ...VIDEO_EXTENSIONS, ...AUDIO_EXTENSIONS]);
const RGX_PROTO = /^(https?|ftp):\/\//;
const RGX_QUERY = /(\?|#)/g;
function vUrlWithExtension(val, EXTENSIONS) {
if (!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, IMAGE_EXTENSIONS);
}
function vUrlVideo(val) {
return vUrlWithExtension(val, VIDEO_EXTENSIONS);
}
function vUrlAudio(val) {
return vUrlWithExtension(val, AUDIO_EXTENSIONS);
}
function vUrlMedia(val) {
return vUrlWithExtension(val, MEDIA_EXTENSIONS);
}
export { vUrlImage, vUrlVideo, vUrlAudio, vUrlMedia };