UNPKG

@ctrl/video-filename-parser

Version:
45 lines (44 loc) 1.92 kB
import { parseTitleAndYear } from './title/index.js'; const editionPatterns = [ { flag: 'internal', regex: /\b(INTERNAL)\b/i }, { flag: 'limited', regex: /\b(LIMITED)\b/i }, { flag: 'remastered', regex: /\b(Remastered|Anniversary|Restored)\b/i }, { flag: 'extended', regex: /\b(Extended|Uncut|Ultimate|Rogue|Collector)\b/i }, { flag: 'theatrical', regex: /\b(Theatrical)\b/i }, { flag: 'directors', regex: /\b(Directors?)\b/i }, { flag: 'unrated', regex: /\b(Uncensored|Unrated)\b/i }, { flag: 'imax', regex: /\b(IMAX)\b/i }, { flag: 'fanEdit', regex: /\b(Despecialized|Fan.?Edit)\b/i }, { flag: 'hdr', regex: /\b(HDR)\b/i }, { flag: 'bw', regex: /\b(BW)\b/i }, { flag: 'threeD', regex: /\b(3D)\b/i }, { flag: 'hsbs', regex: /\b(Half-?SBS|HSBS)\b/i }, { flag: 'sbs', regex: /\b((?<!H|HALF-)SBS)\b/i }, { flag: 'hou', regex: /\b(HOU)\b/i }, { flag: 'uhd', regex: /\b(UHD)\b/i }, { flag: 'oar', regex: /\b(OAR)\b/i }, { flag: 'dolbyVision', regex: /\b(DV(\b(HDR10|HLG|SDR))?)\b/i }, { flag: 'hardcodedSubs', regex: /\b((?<hcsub>(\w+(?<!SOFT|HORRIBLE)SUBS?))|(?<hc>(HC|SUBBED)))\b/i, }, { flag: 'deletedScenes', regex: /\b((Bonus.)?Deleted.Scenes)\b/i }, { flag: 'bonusContent', regex: /\b((Bonus|Extras|Behind.the.Scenes|Making.of|Interviews|Featurettes|Outtakes|Bloopers|Gag.Reel).(?!(Deleted.Scenes)))\b/i, }, ]; export function parseEdition(title, parsedTitle) { parsedTitle ??= parseTitleAndYear(title).title; const withoutTitle = getEditionSearchText(title, parsedTitle); const result = {}; for (const { flag, regex } of editionPatterns) { if (regex.test(withoutTitle)) { result[flag] = true; } } return result; } function getEditionSearchText(title, parsedTitle) { return title.replace('.', ' ').replace(parsedTitle, '').toLowerCase(); }