UNPKG

@valkyriestudios/validator

Version:

A lightweight configurable javascript validator

33 lines (32 loc) 1.62 kB
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 };