import { AUDIO_TAGS, QUALITIES, RESOLUTIONS } from '../utils/constants'; import { VISUAL_TAGS } from '../utils/constants'; import { ENCODES } from '../utils/constants'; import { LANGUAGES } from '../utils/constants'; import { AUDIO_CHANNELS } from '../utils/constants'; const createRegex = (pattern: string): RegExp => new RegExp(`(? createRegex(`${pattern}(?![ .\\-_]?sub(title)?s?)`); type PARSE_REGEX = { resolutions: Omit, 'Unknown'> & { Unknown?: RegExp; }; qualities: Omit, 'Unknown'> & { Unknown?: RegExp; }; visualTags: Omit< Record<(typeof VISUAL_TAGS)[number], RegExp>, 'Unknown' | 'HDR+DV' > & { Unknown?: RegExp; 'HDR+DV'?: RegExp; }; audioTags: Omit, 'Unknown'> & { Unknown?: RegExp; }; audioChannels: Omit< Record<(typeof AUDIO_CHANNELS)[number], RegExp>, 'Unknown' > & { Unknown?: RegExp; }; languages: Omit, 'Unknown'> & { Unknown?: RegExp; }; encodes: Omit, 'Unknown'> & { Unknown?: RegExp; }; releaseGroup: RegExp; }; export const PARSE_REGEX: PARSE_REGEX = { resolutions: { '2160p': createRegex( '(bd|hd|m)?(4k|2160(p|i)?)|u(ltra)?[ .\\-_]?hd|3840\s?x\s?(\d{4})' ), '1440p': createRegex( '(bd|hd|m)?(1440(p|i)?)|2k|w?q(uad)?[ .\\-_]?hd|2560\s?x(\d{4})' ), '1080p': createRegex( '(bd|hd|m)?(1080(p|i)?)|f(ull)?[ .\\-_]?hd|1920\s?x\s?(\d{3,4})' ), '720p': createRegex('(bd|hd|m)?((720|800)(p|i)?)|hd|1280\s?x\s?(\d{3,4})'), '576p': createRegex('(bd|hd|m)?((576|534)(p|i)?)'), '480p': createRegex('(bd|hd|m)?(480(p|i)?)|sd'), '360p': createRegex('(bd|hd|m)?(360(p|i)?)'), '240p': createRegex('(bd|hd|m)?((240|266)(p|i)?)'), '144p': createRegex('(bd|hd|m)?(144(p|i)?)'), }, qualities: { 'BluRay REMUX': /((?<=remux.*)[ .\-_](blu[ .\-_]?ray))|((blu[ .\-_]?ray)[ .\-_](?=.*remux))|((?