121 lines
4.2 KiB
TypeScript
121 lines
4.2 KiB
TypeScript
const epNumLen = { E: 4, S: 3, M: 7 };
|
|
const maxRange = 1000;
|
|
|
|
// selectors
|
|
const epRegex = new RegExp (/^(?:E?|S|M)(\d+)$/);
|
|
const betaEpRegex = new RegExp (/^[0-9A-Z]{9}$/);
|
|
const epLtReg = new RegExp (/(?:E|S|M)/);
|
|
|
|
class doFilter {
|
|
ifMaxEp(type: keyof typeof epNumLen, num: number){
|
|
const maxEp = Math.pow(10, epNumLen[type]) - 1;
|
|
return num > maxEp ? true : false;
|
|
}
|
|
powNum(type: keyof typeof epNumLen){
|
|
return Math.pow(10, epNumLen[type]);
|
|
}
|
|
checkFilter(inputEps?: string){
|
|
// check
|
|
const inputEpsArr = inputEps !== undefined
|
|
? inputEps.toString().split(',') : [];
|
|
// input range
|
|
const inputEpsRange: string | string[] = [];
|
|
|
|
// filter wrong numbers
|
|
const filteredArr = inputEpsArr.map((e) => {
|
|
// convert to uppercase
|
|
e = e.toUpperCase();
|
|
// if range
|
|
if(e.match('-') && e.split('-').length == 2){
|
|
const eRange: (string|number)[] = e.split('-');
|
|
// check range
|
|
if (!eRange[0].toString().match(epRegex)) return '';
|
|
// set ep latter and pad
|
|
const epLetter = (eRange[0].toString().match(epLtReg) ? (eRange[0].toString().match(epLtReg) || [])[0] : 'E') as keyof typeof epNumLen;
|
|
const padLen = epNumLen[epLetter as keyof typeof epNumLen];
|
|
// parse range
|
|
eRange[0] = eRange[0].toString().replace(epLtReg, '');
|
|
eRange[0] = parseInt(eRange[0]);
|
|
eRange[0] = this.ifMaxEp(epLetter, eRange[0]) ? this.powNum(epLetter) - 1 : eRange[0];
|
|
eRange[1] = eRange[1].toString().match(/^\d+$/) ? parseInt(eRange[1] as string) : 0;
|
|
eRange[1] = this.ifMaxEp(epLetter, eRange[1]) ? this.powNum(epLetter) - 1 : eRange[1];
|
|
console.log(eRange);
|
|
// check if correct range
|
|
if (eRange[0] > eRange[1]){
|
|
const parsedEl = [
|
|
epLetter != 'E' ? epLetter : '',
|
|
eRange[0].toString().padStart(padLen, '0'),
|
|
].join('');
|
|
return parsedEl;
|
|
}
|
|
if(eRange[1] - eRange[0] + 1 > maxRange){
|
|
eRange[1] = eRange[0] + maxRange - 1;
|
|
}
|
|
const rangeLength = eRange[1] - eRange[0] + 1;
|
|
const epsRangeArr = Array(rangeLength).fill(0);
|
|
for(const i in epsRangeArr){
|
|
const parsedRangeEl = [
|
|
epLetter != 'E' ? epLetter : '',
|
|
(parseInt(i) + eRange[0]).toString().padStart(padLen, '0'),
|
|
].join('');
|
|
inputEpsRange.push(parsedRangeEl);
|
|
}
|
|
return '';
|
|
}
|
|
else if(e.match(epRegex)){
|
|
const epLetter = (e.match(epLtReg) ? (e.match(epLtReg) || [])[0] : 'E') as keyof typeof epNumLen;
|
|
const padLen = epNumLen[epLetter];
|
|
const e1 = parseInt(e.replace(epLtReg, ''));
|
|
const e2 = this.ifMaxEp(epLetter, e1) ? this.powNum(epLetter) - 1 : e1;
|
|
return (epLetter != 'E' ? epLetter : '') + e2.toString().padStart(padLen, '0');
|
|
}
|
|
else if(e.match(betaEpRegex)){
|
|
return e;
|
|
}
|
|
return '';
|
|
});
|
|
// end
|
|
const filteredArr1 = [...new Set(filteredArr.concat(inputEpsRange))];
|
|
const filteredArr2 = filteredArr1.indexOf('') > -1 ? filteredArr1.slice(1) : filteredArr1;
|
|
return filteredArr2;
|
|
}
|
|
checkMediaFilter(e: string){
|
|
const split = e.split(',');
|
|
const epLetter = 'M';
|
|
const inpMedia = [''];
|
|
// map select
|
|
split.map((e) => {
|
|
if(e.match('-')){
|
|
const eRange = e.split('-');
|
|
if(eRange[0].match(/^m?\d+$/i)){
|
|
eRange[0] = eRange[0].replace(/^m/i,'');
|
|
eRange[0] = (this.ifMaxEp(epLetter, parseInt(eRange[0])) ? this.powNum(epLetter) - 1 : parseInt(eRange[0])).toString();
|
|
inpMedia.push(eRange[0].toString());
|
|
}
|
|
}
|
|
else if(e.match(/^m?\d+$/i)){
|
|
const eMedia = parseInt(e.replace(/^m/i,''));
|
|
const eMediaStr = this.ifMaxEp(epLetter, eMedia) ? this.powNum(epLetter) - 1 : eMedia;
|
|
inpMedia.push(eMediaStr.toString());
|
|
}
|
|
});
|
|
return [...new Set(inpMedia)].splice(1);
|
|
}
|
|
checkBetaFilter(e: string){
|
|
const e1 = ['', ...e.split(',')];
|
|
const e2 = e1.map((e) => {
|
|
if(e.match(betaEpRegex)){
|
|
return e;
|
|
}
|
|
return '';
|
|
});
|
|
const e3 = [...new Set(e2)].splice(1);
|
|
const e4 = e3.length > 100 ? e3.slice(0, 100) : e3;
|
|
return e4;
|
|
}
|
|
}
|
|
|
|
export {
|
|
epNumLen,
|
|
doFilter,
|
|
};
|