UNPKG

identify-media

Version:

Analyse file path and content to make search criteria for media APIs

96 lines 3.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.findEpisode = exports.findSeasonEpisode = exports.findSeason = exports.findYear = void 0; const releaseYearRegex = /(((18|19|20)\d{2})-?((18|19|20)\d{2})?)[^a-zA-Z]/g; const matchLastYear = (name) => { let result, regArr; while (regArr = releaseYearRegex.exec(name)) { result = { year: Number.parseInt(regArr[1], 10), index: regArr.index }; } return result; }; const findYear = (name) => { if (!name) return undefined; const yearMatch = matchLastYear(name); if (!!yearMatch) { const restName = yearMatch.index === 0 ? undefined : name.slice(0, yearMatch.index); const year = yearMatch.year; return { restName, year }; } return undefined; }; exports.findYear = findYear; const completeSeasonRegex = /((complete\s*)?(season\s*([0-9]+)?))/i; const findSeason = (name) => { const seasonArr = completeSeasonRegex.exec(name); if (!!seasonArr && !!seasonArr[4]) { const restName = seasonArr.index === 0 ? undefined : name.slice(0, seasonArr.index); const season = Number.parseInt(seasonArr[4]); return { restName, season }; } return undefined; }; exports.findSeason = findSeason; const showSxxExxRegex = /\b(s[0-9]+)?(e[0-9]+)((\+e[0-9]+)*)/i; const showSSxEERegex = /(([0-9]+)x([0-9]+))((\+[0-9]+)*)/i; const findSeasonEpisode = (name) => { const seArr = showSxxExxRegex.exec(name); if (!!seArr) { const restName = seArr.index === 0 ? undefined : name.slice(0, seArr.index); const season = seArr[1] ? Number.parseInt(seArr[1].slice(1), 10) : undefined; const episodes = [Number.parseInt(seArr[2].slice(1), 10)].concat(!!seArr[3] ? seArr[3].split('+').map((episode) => Number.parseInt(episode.slice(1), 10)).filter(Number.isInteger) : []); return { restName, season, episodes }; } const sxeArr = showSSxEERegex.exec(name); if (!!sxeArr) { const restName = sxeArr.index === 0 ? undefined : name.slice(0, sxeArr.index); const season = Number.parseInt(sxeArr[2], 10); const episodes = [Number.parseInt(sxeArr[3], 10)].concat(!!sxeArr[4] ? sxeArr[4].split('+').map((episode) => Number.parseInt(episode, 10)).filter(Number.isInteger) : []); return { restName, season, episodes }; } return undefined; }; exports.findSeasonEpisode = findSeasonEpisode; const episodeRegex = /^([0-9]+)/; const matchEpisode = (name, season, restName) => { const episodeArr = episodeRegex.exec(name); if (!!episodeArr) { return { restName, episodes: [Number.parseInt(episodeArr[1], 10)] }; } const index = name.indexOf(season.toString(10)); if (index !== -1) { return matchEpisode(name.slice(index + 1), season, (restName || '') + season + name.slice(0, index)); } return undefined; }; const findEpisode = (name, season) => { const index = name.indexOf(season.toString(10)); if (index !== -1) { return matchEpisode(name.slice(index + 1), season, index === 0 ? undefined : name.slice(0, index)); } return undefined; }; exports.findEpisode = findEpisode; //# sourceMappingURL=analyseString.js.map