gbf-raidfinder
Version:
JavaScript library for tracking Granblue Fantasy raid tweets from Twitter
53 lines (48 loc) • 1.27 kB
text/typescript
import { Boss, BossParser } from 'gbf-raidfinder-parser';
import { ALL_LEVELS } from './Constants';
export default interface BossFilter {
level?: number;
levels?: number[];
name: {
[key: string]: string,
}
}
function parseFromFilter(boss: BossFilter): Boss {
let name = null;
if (typeof boss.name === 'string') {
name = boss.name;
} else if (typeof boss.name === 'object') {
const language = Object.keys(boss.name).pop();
if (language) { name = boss.name[language]; }
}
if (!name) {
throw new TypeError('Can\'t determine the boss name!');
}
return BossParser.parse(name);
}
export function parse(boss: BossFilter | string): BossFilter | null {
if (typeof boss === 'object') {
if (!boss.level) {
try {
const parsed = parseFromFilter(boss);
boss.level = parsed.level;
} catch (e) {
boss.levels = boss.levels || ALL_LEVELS;
}
}
if (!boss.levels && boss.level) {
boss.levels = [boss.level];
}
} else {
const parsed = BossParser.parse(boss);
if (!parsed.language || !parsed.name) { return null; }
boss = {
level: parsed.level,
levels: [parsed.level],
name: {
[parsed.language]: parsed.name
}
};
}
return boss;
}