identify-media
Version:
Analyse file path and content to make search criteria for media APIs
96 lines • 3.45 kB
JavaScript
;
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