-
Notifications
You must be signed in to change notification settings - Fork 96
/
Copy pathuigf-json.ts
79 lines (73 loc) · 1.94 KB
/
uigf-json.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import dayjs from 'dayjs';
import _ from 'lodash';
import { getItemKeyFromName } from 'utils';
import { TJsonSourceConfig } from '../type';
type TPoolType = '100' | '200' | '301' | '302' | '400';
export default <
TJsonSourceConfig<{
info: {
uid: string;
lang: string;
export_time: string;
export_timestamp: number;
export_app: string;
export_app_version: string;
uigf_version: string;
};
list: Array<{
gacha_type: TPoolType;
time: string;
name: string;
item_type: string;
rank_type: string;
id: string;
uigf_gacha_type: TPoolType;
}>;
}>
>{
type: 'json',
name: 'uigf',
isCurrentSource(data: any) {
if (_.get(data, 'info.uigf_version')) return true;
if ('list' in data && Array.isArray(data.list)) {
const item = data.list[0];
if (item && 'name' in item && 'gacha_type' in item) {
return true;
}
}
return false;
},
parseData(data) {
const rawlist = data.list;
// const list = _.sortBy(rawlist, (item) => BigInt(item.id));
const list = _.sortBy(rawlist, [
(item) => +dayjs(item.time),
(item) => ('id' in item ? item.id.length : 0),
(item) => ('id' in item ? item.id : ''),
]);
const formatItem = (item: typeof data.list[number]) => {
const key = getItemKeyFromName(item.name);
if (key) {
return {
key: key,
name: item.name,
time: item.time,
};
}
console.error('cannot find name', item.name);
return false;
};
const filterByPoolType = (poolType: TPoolType[]) => {
return list
.filter((item) => poolType.includes(item.gacha_type))
.map(formatItem)
.filter((v) => !!v);
};
return {
character: filterByPoolType(['301', '400']),
weapon: filterByPoolType(['302']),
novice: filterByPoolType(['100']),
permanent: filterByPoolType(['200']),
};
},
};