UNPKG

@ctrl/video-filename-parser

Version:
54 lines (53 loc) 1.84 kB
import { completeRange, normalizeSixDigitAirDate, parseGenericMatchCollection, } from './season/common.js'; import { rejectedPatterns, seasonPatterns } from './season/patterns.js'; import { simplifyTitle } from './simplifyTitle.js'; export { completeRange }; export function parseSeason(title) { if (!preValidation(title)) { return null; } const simpleTitle = normalizeSixDigitAirDate(title, simplifyTitle(title)); for (const pattern of seasonPatterns) { const match = pattern.regex.exec(simpleTitle); if (!match?.groups) { continue; } const result = pattern.parse(match, simpleTitle); if (result === null) { continue; } return toSeason(title, result); } return null; } export function parseMatchCollection(match, simpleTitle) { return parseGenericMatchCollection(match, simpleTitle); } function preValidation(title) { for (const exp of rejectedPatterns) { const match = exp.exec(title); if (match !== null) { return false; } } return true; } function toSeason(title, result) { if (result.fullSeason && result.releaseTokens && /Special/i.test(result.releaseTokens)) { result.fullSeason = false; result.isSpecial = true; } return { releaseTitle: title, seriesTitle: result.seriesName, seasons: result.seasonNumbers ?? [], episodeNumbers: result.episodeNumbers ?? [], airDate: result.airDate ?? null, fullSeason: result.fullSeason ?? false, isPartialSeason: result.isPartialSeason ?? false, isMultiSeason: result.isMultiSeason ?? false, isSeasonExtra: result.isSeasonExtra ?? false, isSpecial: result.isSpecial ?? false, seasonPart: result.seasonPart ?? 0, }; }